Commit 1980f5479b
Changed files (2)
src
arch
x86_64
test
behavior
src/arch/x86_64/CodeGen.zig
@@ -3651,10 +3651,7 @@ fn store(self: *Self, ptr: MCValue, value: MCValue, ptr_ty: Type, value_ty: Type
.dead => unreachable,
.eflags => unreachable,
.register_overflow => unreachable,
- .immediate => |imm| {
- try self.setRegOrMem(value_ty, .{ .memory = imm }, value);
- },
- .stack_offset => {
+ .immediate, .stack_offset => {
const reg = try self.copyToTmpRegister(ptr_ty, ptr);
try self.store(.{ .register = reg }, value, ptr_ty, value_ty);
},
@@ -3748,23 +3745,18 @@ fn store(self: *Self, ptr: MCValue, value: MCValue, ptr_ty: Type, value_ty: Type
-@intCast(i32, overflow_bit_offset),
);
},
- .linker_load,
- .memory,
- .stack_offset,
- => {
- if (abi_size <= 8) {
- const tmp_reg = try self.copyToTmpRegister(value_ty, value);
- return self.store(ptr, .{ .register = tmp_reg }, ptr_ty, value_ty);
- }
-
- try self.genInlineMemcpy(.{ .stack_offset = 0 }, value, .{ .immediate = abi_size }, .{
- .source_stack_base = .rbp,
- .dest_stack_base = reg.to64(),
- });
- },
+ .linker_load, .memory, .stack_offset => if (abi_size <= 8) {
+ const tmp_reg = try self.copyToTmpRegister(value_ty, value);
+ try self.store(ptr, .{ .register = tmp_reg }, ptr_ty, value_ty);
+ } else try self.genInlineMemcpy(
+ .{ .stack_offset = 0 },
+ value,
+ .{ .immediate = abi_size },
+ .{ .source_stack_base = .rbp, .dest_stack_base = reg.to64() },
+ ),
.ptr_stack_offset => {
const tmp_reg = try self.copyToTmpRegister(value_ty, value);
- return self.store(ptr, .{ .register = tmp_reg }, ptr_ty, value_ty);
+ try self.store(ptr, .{ .register = tmp_reg }, ptr_ty, value_ty);
},
}
},
@@ -3788,7 +3780,7 @@ fn store(self: *Self, ptr: MCValue, value: MCValue, ptr_ty: Type, value_ty: Type
);
const new_ptr = MCValue{ .register = addr_reg.to64() };
- return self.store(new_ptr, value, ptr_ty, value_ty);
+ try self.store(new_ptr, value, ptr_ty, value_ty);
},
}
}
test/behavior/inttoptr.zig
@@ -11,7 +11,6 @@ fn addressToFunction() void {
}
test "mutate through ptr initialized with constant intToPtr value" {
- if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO