@@ -15050,10 +15050,11 @@ fn genSetMem(
15050
15050
.general_purpose, .segment, .x87 => @divExact(src_alias.bitSize(), 8),
15051
15051
.mmx, .sse => abi_size,
15052
15052
});
15053
+ const src_align = Alignment.fromNonzeroByteUnits(math.ceilPowerOfTwoAssert(u32, src_size));
15053
15054
if (src_size > mem_size) {
15054
15055
const frame_index = try self.allocFrameIndex(FrameAlloc.init(.{
15055
15056
.size = src_size,
15056
- .alignment = Alignment.fromNonzeroByteUnits(src_size) ,
15057
+ .alignment = src_align ,
15057
15058
}));
15058
15059
const frame_mcv: MCValue = .{ .load_frame = .{ .index = frame_index } };
15059
15060
try (try self.moveStrategy(ty, src_alias.class(), true)).write(
@@ -15066,14 +15067,15 @@ fn genSetMem(
15066
15067
try self.genSetMem(base, disp, ty, frame_mcv, opts);
15067
15068
try self.freeValue(frame_mcv);
15068
15069
} else try (try self.moveStrategy(ty, src_alias.class(), switch (base) {
15069
- .none => ty.abiAlignment(mod) .check(@as(u32, @bitCast(disp))),
15070
+ .none => src_align .check(@as(u32, @bitCast(disp))),
15070
15071
.reg => |reg| switch (reg) {
15071
- .es, .cs, .ss, .ds => ty.abiAlignment(mod) .check(@as(u32, @bitCast(disp))),
15072
+ .es, .cs, .ss, .ds => src_align .check(@as(u32, @bitCast(disp))),
15072
15073
else => false,
15073
15074
},
15074
- .frame => |frame_index| self.getFrameAddrAlignment(
15075
- .{ .index = frame_index, .off = disp },
15076
- ).compare(.gte, ty.abiAlignment(mod)),
15075
+ .frame => |frame_index| self.getFrameAddrAlignment(.{
15076
+ .index = frame_index,
15077
+ .off = disp,
15078
+ }).compare(.gte, src_align),
15077
15079
.reloc => false,
15078
15080
})).write(
15079
15081
self,
0 commit comments