authorgravatar for kcbanner@gmail.comCasey Banner <kcbanner@gmail.com> 2022-12-12 01:03:10-05:00
committergravatar for kcbanner@gmail.comCasey Banner <kcbanner@gmail.com> 2023-01-01 16:44:28-05:00
log351025dc0522f5ad170091c0040e9532e2938d79
treef36437ad670ed26973586274451e1706b3e49f75
parent00b54a5fe565f404e0d7d8cdbc05a465d573fc32

cbe: msvc compatible int casting inside renderValue .Packed branch

- Handle non-abiInt source types (like packed union) as sources in renderIntCast

1 files changed, 9 insertions(+), 13 deletions(-)

src/codegen/c.zig+9-13
......@@ -1294,26 +1294,20 @@ pub const DeclGen = struct {
12941294 const field_ty = ty.structFieldType(index);
12951295 if (!field_ty.hasRuntimeBitsIgnoreComptime()) continue;
12961296
1297 //const cast_context = IntCastContext{ .value = .{ .value = field_val } };
1297 const cast_context = IntCastContext{ .value = .{ .value = field_val } };
12981298 if (bit_offset_val_pl.data != 0) {
12991299 try writer.writeAll("zig_shl_");
13001300 try dg.renderTypeForBuiltinFnName(writer, ty);
13011301 try writer.writeByte('(');
1302
1303 //try dg.renderIntCast(writer, ty,_context, field_ty, .FunctionArgument);
1304 try dg.renderValue(writer, field_ty, field_val, .FunctionArgument);
1305
1302 try dg.renderIntCast(writer, ty, cast_context, field_ty, .FunctionArgument);
13061303 try writer.writeAll(", ");
13071304 try dg.renderValue(writer, bit_offset_ty, bit_offset_val, .FunctionArgument);
13081305 try writer.writeByte(')');
13091306 } else {
1310
1311 try dg.renderValue(writer, field_ty, field_val, .FunctionArgument);
1312 //try dg.renderIntCast(writer, ty, cast_context, field_ty, .FunctionArgument);
1313
1307 try dg.renderIntCast(writer, ty, cast_context, field_ty, .FunctionArgument);
13141308 }
13151309
1316 if (needs_closing_paren) try writer.writeByte(')');
1310 if (needs_closing_paren) try writer.writeByte(')') ;
13171311 if (eff_index != eff_num_fields - 1) try writer.writeAll(", ");
13181312
13191313 bit_offset_val_pl.data += field_ty.bitSize(target);
......@@ -2213,10 +2207,12 @@ pub const DeclGen = struct {
22132207 } else src_ty;
22142208
22152209 const src_bits = src_eff_ty.bitSize(target);
2216 const src_int_info = src_eff_ty.intInfo(target);
2210 const src_int_info = if (src_eff_ty.isAbiInt()) src_eff_ty.intInfo(target) else null;
22172211 if (dest_bits <= 64 and src_bits <= 64) {
2218 const needs_cast = toCIntBits(dest_int_info.bits) != toCIntBits(src_int_info.bits) or
2219 dest_int_info.signedness != src_int_info.signedness;
2212 const needs_cast = src_int_info == null or
2213 (toCIntBits(dest_int_info.bits) != toCIntBits(src_int_info.?.bits) or
2214 dest_int_info.signedness != src_int_info.?.signedness);
2215
22202216 if (needs_cast) {
22212217 try w.writeByte('(');
22222218 try dg.renderTypecast(w, dest_ty);