aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-06-24 22:51:29 -0400
committerJacob Young <jacobly0@users.noreply.github.com>2023-06-25 19:14:03 -0400
commit614c8077027767063f399d3dbb5d478deebf37c3 (patch)
tree4dea450c209cf91c599271fb32906d172bb31475 /src
parentd98147414d084bc41b00ba9c0be8c7b82ad4e76c (diff)
downloadzig-614c8077027767063f399d3dbb5d478deebf37c3.tar.gz
zig-614c8077027767063f399d3dbb5d478deebf37c3.zip
x86_64: fix packed store crash
Diffstat (limited to 'src')
-rw-r--r--src/arch/x86_64/CodeGen.zig9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig
index 134a6859ef..6fd136684a 100644
--- a/src/arch/x86_64/CodeGen.zig
+++ b/src/arch/x86_64/CodeGen.zig
@@ -5404,6 +5404,7 @@ fn packedStore(self: *Self, ptr_ty: Type, ptr_mcv: MCValue, src_mcv: MCValue) In
const limb_abi_size: u16 = @min(ptr_info.packed_offset.host_size, 8);
const limb_abi_bits = limb_abi_size * 8;
+ const limb_ty = try mod.intType(.unsigned, limb_abi_bits);
const src_bit_size = src_ty.bitSize(mod);
const src_byte_off = @as(i32, @intCast(ptr_info.packed_offset.bit_offset / limb_abi_bits * limb_abi_size));
@@ -5443,23 +5444,23 @@ fn packedStore(self: *Self, ptr_ty: Type, ptr_mcv: MCValue, src_mcv: MCValue) In
const tmp_lock = self.register_manager.lockRegAssumeUnused(tmp_reg);
defer self.register_manager.unlockReg(tmp_lock);
- try self.genSetReg(tmp_reg, src_ty, src_mcv);
+ try self.genSetReg(tmp_reg, limb_ty, src_mcv);
switch (limb_i) {
0 => try self.genShiftBinOpMir(
.{ ._l, .sh },
- src_ty,
+ limb_ty,
tmp_mcv,
.{ .immediate = src_bit_off },
),
1 => try self.genShiftBinOpMir(
.{ ._r, .sh },
- src_ty,
+ limb_ty,
tmp_mcv,
.{ .immediate = limb_abi_bits - src_bit_off },
),
else => unreachable,
}
- try self.genBinOpMir(.{ ._, .@"and" }, src_ty, tmp_mcv, .{ .immediate = part_mask });
+ try self.genBinOpMir(.{ ._, .@"and" }, limb_ty, tmp_mcv, .{ .immediate = part_mask });
try self.asmMemoryRegister(
.{ ._, .@"or" },
limb_mem,