From 969bcb6a59eadb2ef46a9784286728a25d275c24 Mon Sep 17 00:00:00 2001 From: Emily Bellows Date: Fri, 29 Oct 2021 21:04:54 -0400 Subject: C backend: implement signed trunc --- src/codegen/c.zig | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src/codegen') diff --git a/src/codegen/c.zig b/src/codegen/c.zig index 8e046264aa..7ca56946d0 100644 --- a/src/codegen/c.zig +++ b/src/codegen/c.zig @@ -1390,7 +1390,14 @@ fn airTrunc(f: *Function, inst: Air.Inst.Index) !CValue { return local; }, .signed => { - return f.fail("TODO: C backend: implement trunc for signed integers", .{}); + const operand_ty = f.air.typeOf(ty_op.operand); + const c_bits = toCIntBits(operand_ty.intInfo(target).bits) orelse + return f.fail("TODO: C backend: implement integer types larger than 128 bits", .{}); + const shift_rhs = c_bits - dest_bits; + try writer.print("(int{d}_t)((uint{d}_t)", .{ c_bits, c_bits }); + try f.writeCValue(writer, operand); + try writer.print(" << {d}) >> {d};\n", .{ shift_rhs, shift_rhs }); + return local; }, } } -- cgit v1.2.3