zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit cb9e8b0d01dcfb67c0f60af843aa85df31a13c8c (tree)
parent 42973d73e6b045f242cc67015fba023ff46e9929
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Thu, 27 Apr 2023 15:44:22 -0700

C backend: take advantage of Assignment abstraction in airMemset

Diffstat:
Msrc/codegen/c.zig | 32++++++++++++--------------------
1 file changed, 12 insertions(+), 20 deletions(-)

diff --git a/src/codegen/c.zig b/src/codegen/c.zig @@ -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);