authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-04-27 15:44:22-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-04-28 13:24:43-07:00
logcb9e8b0d01dcfb67c0f60af843aa85df31a13c8c
tree4bf0c392d3520f6b1794d799851affb54b94b01b
parent42973d73e6b045f242cc67015fba023ff46e9929

C backend: take advantage of Assignment abstraction in airMemset


1 files changed, 12 insertions(+), 20 deletions(-)

src/codegen/c.zig+12-20
......@@ -6335,26 +6335,18 @@ fn airMemset(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
63356335 try writer.writeAll("; ++");
63366336 try f.writeCValue(writer, index, .Other);
63376337 try writer.writeAll(") ");
6338 if (lowersToArray(elem_ty, target)) {
6339 // Arrays are not assignable, so we use memcpy here.
6340 try writer.writeAll("memcpy(");
6341 try writeSliceOrPtr(f, writer, dest_slice, dest_ty);
6342 try writer.writeAll("[");
6343 try f.writeCValue(writer, index, .Other);
6344 try writer.writeAll("], ");
6345 try f.writeCValue(writer, value, .FunctionArgument);
6346 try writer.print(", {d});\n", .{elem_abi_size});
6347 } else {
6348 try writer.writeAll("((");
6349 try f.renderType(writer, elem_ptr_ty);
6350 try writer.writeByte(')');
6351 try writeSliceOrPtr(f, writer, dest_slice, dest_ty);
6352 try writer.writeAll(")[");
6353 try f.writeCValue(writer, index, .Other);
6354 try writer.writeAll("] = ");
6355 try f.writeCValue(writer, value, .FunctionArgument);
6356 try writer.writeAll(";\n");
6357 }
6338
6339 const a = try Assignment.start(f, writer, elem_ty);
6340 try writer.writeAll("((");
6341 try f.renderType(writer, elem_ptr_ty);
6342 try writer.writeByte(')');
6343 try writeSliceOrPtr(f, writer, dest_slice, dest_ty);
6344 try writer.writeAll(")[");
6345 try f.writeCValue(writer, index, .Other);
6346 try writer.writeByte(']');
6347 try a.assign(f, writer);
6348 try f.writeCValue(writer, value, .Other);
6349 try a.end(f, writer);
63586350
63596351 try reap(f, inst, &.{ bin_op.lhs, bin_op.rhs });
63606352 try freeLocal(f, inst, index.new_local, 0);