authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2022-11-02 22:58:55-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2022-11-02 23:00:10-04:00
logf02b8a9cca4bf991146dab44ef8707b987ce7a1d
tree95e2d98faff34c8e76a22bb5df17a2518e5ea9ec
parent085f6fd8f729423158b6f7a5f8e6f50f78fef18f

cbe: fix padding bits after a bitcast


1 files changed, 11 insertions(+), 1 deletions(-)

src/codegen/c.zig+11-1
......@@ -3703,7 +3703,6 @@ fn airBitcast(f: *Function, inst: Air.Inst.Index) !CValue {
37033703 const local = try f.allocLocal(inst_ty, .Const);
37043704 try writer.writeAll(" = (");
37053705 try f.renderTypecast(writer, inst_ty);
3706
37073706 try writer.writeByte(')');
37083707 try f.writeCValue(writer, operand, .Other);
37093708 try writer.writeAll(";\n");
......@@ -3721,6 +3720,17 @@ fn airBitcast(f: *Function, inst: Air.Inst.Index) !CValue {
37213720 try f.renderTypecast(writer, inst_ty);
37223721 try writer.writeAll("));\n");
37233722
3723 // Ensure padding bits have the expected value.
3724 if (inst_ty.isAbiInt()) {
3725 try f.writeCValue(writer, local, .Other);
3726 try writer.writeAll(" = zig_wrap_");
3727 try f.object.dg.renderTypeForBuiltinFnName(writer, inst_ty);
3728 try writer.writeByte('(');
3729 try f.writeCValue(writer, local, .Other);
3730 try f.object.dg.renderBuiltinInfo(writer, inst_ty, .Bits);
3731 try writer.writeAll(");\n");
3732 }
3733
37243734 return local;
37253735}
37263736