mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 13:54:21 +00:00
x86_64: fix miscompilation regression in package fetching code
This commit is contained in:
parent
a2b834e8c7
commit
77abd3a96a
1 changed files with 8 additions and 6 deletions
|
|
@ -15050,10 +15050,11 @@ fn genSetMem(
|
|||
.general_purpose, .segment, .x87 => @divExact(src_alias.bitSize(), 8),
|
||||
.mmx, .sse => abi_size,
|
||||
});
|
||||
const src_align = Alignment.fromNonzeroByteUnits(math.ceilPowerOfTwoAssert(u32, src_size));
|
||||
if (src_size > mem_size) {
|
||||
const frame_index = try self.allocFrameIndex(FrameAlloc.init(.{
|
||||
.size = src_size,
|
||||
.alignment = Alignment.fromNonzeroByteUnits(src_size),
|
||||
.alignment = src_align,
|
||||
}));
|
||||
const frame_mcv: MCValue = .{ .load_frame = .{ .index = frame_index } };
|
||||
try (try self.moveStrategy(ty, src_alias.class(), true)).write(
|
||||
|
|
@ -15066,14 +15067,15 @@ fn genSetMem(
|
|||
try self.genSetMem(base, disp, ty, frame_mcv, opts);
|
||||
try self.freeValue(frame_mcv);
|
||||
} else try (try self.moveStrategy(ty, src_alias.class(), switch (base) {
|
||||
.none => ty.abiAlignment(mod).check(@as(u32, @bitCast(disp))),
|
||||
.none => src_align.check(@as(u32, @bitCast(disp))),
|
||||
.reg => |reg| switch (reg) {
|
||||
.es, .cs, .ss, .ds => ty.abiAlignment(mod).check(@as(u32, @bitCast(disp))),
|
||||
.es, .cs, .ss, .ds => src_align.check(@as(u32, @bitCast(disp))),
|
||||
else => false,
|
||||
},
|
||||
.frame => |frame_index| self.getFrameAddrAlignment(
|
||||
.{ .index = frame_index, .off = disp },
|
||||
).compare(.gte, ty.abiAlignment(mod)),
|
||||
.frame => |frame_index| self.getFrameAddrAlignment(.{
|
||||
.index = frame_index,
|
||||
.off = disp,
|
||||
}).compare(.gte, src_align),
|
||||
.reloc => false,
|
||||
})).write(
|
||||
self,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue