diff options
| author | Daniele Cocca <daniele.cocca@gmail.com> | 2022-03-14 01:04:24 +0000 |
|---|---|---|
| committer | Daniele Cocca <daniele.cocca@gmail.com> | 2022-03-14 01:04:24 +0000 |
| commit | d912699e0853e8fe1a9dd2c863f3c163d123c407 (patch) | |
| tree | 15ee5b0ad3ec0bb5b6a65ddc890c2f7eae2cc05a /src/codegen/c.zig | |
| parent | 5a971bbeeaa58e66e5a10243a9716aabac72bdd0 (diff) | |
| download | zig-d912699e0853e8fe1a9dd2c863f3c163d123c407.tar.gz zig-d912699e0853e8fe1a9dd2c863f3c163d123c407.zip | |
Remove signed_type from zig_{clz,ctz,popcount}
This parameter is only currently needed by zig_byte_swap() and
zig_bit_reverse(). This commit adds an option to airBuiltinCall() to
allow emitting the signedness information only when needed, removing
this unused parameter from the other builtins.
Diffstat (limited to 'src/codegen/c.zig')
| -rw-r--r-- | src/codegen/c.zig | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/codegen/c.zig b/src/codegen/c.zig index 0ebaf519d0..83e5dddd5a 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -1709,11 +1709,11 @@ fn genBody(f: *Function, body: []const Air.Inst.Index) error{ AnalysisFail, OutO .memcpy => try airMemcpy(f, inst), .set_union_tag => try airSetUnionTag(f, inst), .get_union_tag => try airGetUnionTag(f, inst), - .clz => try airBuiltinCall(f, inst, "clz"), - .ctz => try airBuiltinCall(f, inst, "ctz"), - .popcount => try airBuiltinCall(f, inst, "popcount"), - .byte_swap => try airBuiltinCall(f, inst, "byte_swap"), - .bit_reverse => try airBuiltinCall(f, inst, "bit_reverse"), + .clz => try airBuiltinCall(f, inst, "clz", .{}), + .ctz => try airBuiltinCall(f, inst, "ctz", .{}), + .popcount => try airBuiltinCall(f, inst, "popcount", .{}), + .byte_swap => try airBuiltinCall(f, inst, "byte_swap", .{ .needs_signedness_info = true }), + .bit_reverse => try airBuiltinCall(f, inst, "bit_reverse", .{ .needs_signedness_info = true }), .tag_name => try airTagName(f, inst), .error_name => try airErrorName(f, inst), .splat => try airSplat(f, inst), @@ -3351,7 +3351,7 @@ fn airPtrToInt(f: *Function, inst: Air.Inst.Index) !CValue { return local; } -fn airBuiltinCall(f: *Function, inst: Air.Inst.Index, fn_name: [*:0]const u8) !CValue { +fn airBuiltinCall(f: *Function, inst: Air.Inst.Index, fn_name: [*:0]const u8, options: struct { needs_signedness_info: bool = false }) !CValue { if (f.liveness.isUnused(inst)) return CValue.none; const inst_ty = f.air.typeOfIndex(inst); @@ -3364,14 +3364,18 @@ fn airBuiltinCall(f: *Function, inst: Air.Inst.Index, fn_name: [*:0]const u8) !C const int_info = operand_ty.intInfo(target); _ = toCIntBits(int_info.bits) orelse return f.fail("TODO: C backend: implement integer types larger than 128 bits", .{}); - const signed_type = switch (int_info.signedness) { - .signed => "true", - .unsigned => "false", - }; try writer.print(" = zig_{s}(", .{fn_name}); try f.writeCValue(writer, try f.resolveInst(operand)); - try writer.print(", {d}, {s});\n", .{ int_info.bits, signed_type }); + try writer.print(", {d}", .{int_info.bits}); + if (options.needs_signedness_info) { + const signed_type = switch (int_info.signedness) { + .signed => "true", + .unsigned => "false", + }; + try writer.print(", {s}", .{signed_type}); + } + try writer.writeAll(");\n"); return local; } |
