mirror of
https://github.com/ziglang/zig.git
synced 2026-02-21 16:54:52 +00:00
C backend: take advantage of Assignment abstraction in airMemset
This commit is contained in:
parent
42973d73e6
commit
cb9e8b0d01
@ -6335,26 +6335,18 @@ fn airMemset(f: *Function, inst: Air.Inst.Index, safety: bool) !CValue {
|
||||
try writer.writeAll("; ++");
|
||||
try f.writeCValue(writer, index, .Other);
|
||||
try writer.writeAll(") ");
|
||||
if (lowersToArray(elem_ty, target)) {
|
||||
// Arrays are not assignable, so we use memcpy here.
|
||||
try writer.writeAll("memcpy(");
|
||||
try writeSliceOrPtr(f, writer, dest_slice, dest_ty);
|
||||
try writer.writeAll("[");
|
||||
try f.writeCValue(writer, index, .Other);
|
||||
try writer.writeAll("], ");
|
||||
try f.writeCValue(writer, value, .FunctionArgument);
|
||||
try writer.print(", {d});\n", .{elem_abi_size});
|
||||
} else {
|
||||
try writer.writeAll("((");
|
||||
try f.renderType(writer, elem_ptr_ty);
|
||||
try writer.writeByte(')');
|
||||
try writeSliceOrPtr(f, writer, dest_slice, dest_ty);
|
||||
try writer.writeAll(")[");
|
||||
try f.writeCValue(writer, index, .Other);
|
||||
try writer.writeAll("] = ");
|
||||
try f.writeCValue(writer, value, .FunctionArgument);
|
||||
try writer.writeAll(";\n");
|
||||
}
|
||||
|
||||
const a = try Assignment.start(f, writer, elem_ty);
|
||||
try writer.writeAll("((");
|
||||
try f.renderType(writer, elem_ptr_ty);
|
||||
try writer.writeByte(')');
|
||||
try writeSliceOrPtr(f, writer, dest_slice, dest_ty);
|
||||
try writer.writeAll(")[");
|
||||
try f.writeCValue(writer, index, .Other);
|
||||
try writer.writeByte(']');
|
||||
try a.assign(f, writer);
|
||||
try f.writeCValue(writer, value, .Other);
|
||||
try a.end(f, writer);
|
||||
|
||||
try reap(f, inst, &.{ bin_op.lhs, bin_op.rhs });
|
||||
try freeLocal(f, inst, index.new_local, 0);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user