| ... | @@ -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 bugs | 186992 | // 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 { |