aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJacob Young <jacobly0@users.noreply.github.com>2023-03-13 20:25:13 -0400
committerJacob Young <jacobly0@users.noreply.github.com>2023-03-15 00:01:44 -0400
commit5ab426a3020614dcc8640a4019c8d93c6c917ea0 (patch)
treedfc57bb2bbe4f14256cf3a7e760cc6ffe7347931 /src
parent9a4e9215fcd91cc75e569195834ba1428a736fa0 (diff)
downloadzig-5ab426a3020614dcc8640a4019c8d93c6c917ea0.tar.gz
zig-5ab426a3020614dcc8640a4019c8d93c6c917ea0.zip
x86_64: fix store of undefined
Diffstat (limited to 'src')
-rw-r--r--src/arch/x86_64/CodeGen.zig8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/arch/x86_64/CodeGen.zig b/src/arch/x86_64/CodeGen.zig
index a547b1222d..12c5071462 100644
--- a/src/arch/x86_64/CodeGen.zig
+++ b/src/arch/x86_64/CodeGen.zig
@@ -2861,7 +2861,13 @@ fn store(self: *Self, ptr: MCValue, value: MCValue, ptr_ty: Type, value_ty: Type
.unreach => unreachable,
.eflags => unreachable,
.undef => {
- try self.genSetReg(value_ty, reg, value);
+ switch (abi_size) {
+ 1 => try self.store(ptr, .{ .immediate = 0xaa }, ptr_ty, value_ty),
+ 2 => try self.store(ptr, .{ .immediate = 0xaaaa }, ptr_ty, value_ty),
+ 4 => try self.store(ptr, .{ .immediate = 0xaaaaaaaa }, ptr_ty, value_ty),
+ 8 => try self.store(ptr, .{ .immediate = 0xaaaaaaaaaaaaaaaa }, ptr_ty, value_ty),
+ else => try self.genInlineMemset(ptr, .{ .immediate = 0xaa }, .{ .immediate = abi_size }, .{}),
+ }
},
.immediate => |imm| {
switch (abi_size) {