authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-09-21 21:42:39+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-09-21 21:42:39+02:00
logd07b67a55cba683c7adb73f5e2f7b1bec803a361
treecc59bbe730929c9ae024fe163a2a83c1c0a163bd
parente647d1a5704d3cd66141e641d775091bf0bd8e9d
signaturebadge-check Signed by SSH key SHA256:7B/LJ7bpR1eX8aCXSr4mtd5M45VMPKcx9zY8e95b5QM

Revert "x86_64: fix safety crashes in `storeRegs`"

This reverts commit 37985613c760d1d20a1fbba292fd5c25129f400a.

1 files changed, 6 insertions(+), 16 deletions(-)

src/arch/x86_64/CodeGen.zig+6-16
...@@ -186975,13 +186975,7 @@ const Temp = struct {...@@ -186975,13 +186975,7 @@ const Temp = struct {
186975 },186975 },
186976 .struct_type => {186976 .struct_type => {
186977 assert(src_regs.len - part_index == std.math.divCeil(u32, src_abi_size, 8) catch unreachable);186977 assert(src_regs.len - part_index == std.math.divCeil(u32, src_abi_size, 8) catch unreachable);
186978 break :part_ty switch (src_abi_size) {186978 break :part_ty .u64;
186979 0, 3, 5...7 => unreachable,
186980 1 => .u8,
186981 2 => .u16,
186982 4 => .u32,
186983 else => .u64,
186984 };
186985 },186979 },
186986 .tuple_type => |tuple_type| {186980 .tuple_type => |tuple_type| {
186987 assert(tuple_type.types.len == src_regs.len);186981 assert(tuple_type.types.len == src_regs.len);
...@@ -186990,6 +186984,10 @@ const Temp = struct {...@@ -186990,6 +186984,10 @@ const Temp = struct {
186990 };186984 };
186991 const part_size: u31 = @intCast(part_ty.abiSize(zcu));186985 const part_size: u31 = @intCast(part_ty.abiSize(zcu));
186992 const src_rc = src_reg.class();186986 const src_rc = src_reg.class();
186987 const part_bit_size = switch (src_rc) {
186988 else => 8 * part_size,
186989 .x87 => part_ty.bitSize(zcu),
186990 };
186993 if (src_rc == .x87 or std.math.isPowerOfTwo(part_size)) {186991 if (src_rc == .x87 or std.math.isPowerOfTwo(part_size)) {
186994 // hack around linker relocation bugs186992 // hack around linker relocation bugs
186995 switch (ptr.tracking(cg).short) {186993 switch (ptr.tracking(cg).short) {
...@@ -186998,15 +186996,7 @@ const Temp = struct {...@@ -186998,15 +186996,7 @@ const Temp = struct {
186998 }186996 }
186999 const strat = try cg.moveStrategy(part_ty, src_rc, false);186997 const strat = try cg.moveStrategy(part_ty, src_rc, false);
187000 try strat.write(cg, try ptr.tracking(cg).short.deref().mem(cg, .{186998 try strat.write(cg, try ptr.tracking(cg).short.deref().mem(cg, .{
187001 .size = switch (src_rc) {186999 .size = .fromBitSize(part_bit_size),
187002 else => .fromBitSize(8 * part_size),
187003 .x87 => switch (abi.classifySystemV(src_ty, zcu, cg.target, .other)[part_index]) {
187004 else => unreachable,
187005 .float => .dword,
187006 .float_combine, .sse => .qword,
187007 .x87 => .tbyte,
187008 },
187009 },
187010 .disp = part_disp,187000 .disp = part_disp,
187011 }), registerAlias(src_reg, part_size));187001 }), registerAlias(src_reg, part_size));
187012 } else {187002 } else {