| ... | @@ -3651,10 +3651,7 @@ fn store(self: *Self, ptr: MCValue, value: MCValue, ptr_ty: Type, value_ty: Type | ... | @@ -3651,10 +3651,7 @@ fn store(self: *Self, ptr: MCValue, value: MCValue, ptr_ty: Type, value_ty: Type |
| 3651 | .dead => unreachable, | 3651 | .dead => unreachable, |
| 3652 | .eflags => unreachable, | 3652 | .eflags => unreachable, |
| 3653 | .register_overflow => unreachable, | 3653 | .register_overflow => unreachable, |
| 3654 | .immediate => |imm| { | 3654 | .immediate, .stack_offset => { |
| 3655 | try self.setRegOrMem(value_ty, .{ .memory = imm }, value); | | |
| 3656 | }, | | |
| 3657 | .stack_offset => { | | |
| 3658 | const reg = try self.copyToTmpRegister(ptr_ty, ptr); | 3655 | const reg = try self.copyToTmpRegister(ptr_ty, ptr); |
| 3659 | try self.store(.{ .register = reg }, value, ptr_ty, value_ty); | 3656 | try self.store(.{ .register = reg }, value, ptr_ty, value_ty); |
| 3660 | }, | 3657 | }, |
| ... | @@ -3748,23 +3745,18 @@ fn store(self: *Self, ptr: MCValue, value: MCValue, ptr_ty: Type, value_ty: Type | ... | @@ -3748,23 +3745,18 @@ fn store(self: *Self, ptr: MCValue, value: MCValue, ptr_ty: Type, value_ty: Type |
| 3748 | -@intCast(i32, overflow_bit_offset), | 3745 | -@intCast(i32, overflow_bit_offset), |
| 3749 | ); | 3746 | ); |
| 3750 | }, | 3747 | }, |
| 3751 | .linker_load, | 3748 | .linker_load, .memory, .stack_offset => if (abi_size <= 8) { |
| 3752 | .memory, | 3749 | const tmp_reg = try self.copyToTmpRegister(value_ty, value); |
| 3753 | .stack_offset, | 3750 | try self.store(ptr, .{ .register = tmp_reg }, ptr_ty, value_ty); |
| 3754 | => { | 3751 | } else try self.genInlineMemcpy( |
| 3755 | if (abi_size <= 8) { | 3752 | .{ .stack_offset = 0 }, |
| 3756 | const tmp_reg = try self.copyToTmpRegister(value_ty, value); | 3753 | value, |
| 3757 | return self.store(ptr, .{ .register = tmp_reg }, ptr_ty, value_ty); | 3754 | .{ .immediate = abi_size }, |
| 3758 | } | 3755 | .{ .source_stack_base = .rbp, .dest_stack_base = reg.to64() }, |
| 3759 | | 3756 | ), |
| 3760 | try self.genInlineMemcpy(.{ .stack_offset = 0 }, value, .{ .immediate = abi_size }, .{ | | |
| 3761 | .source_stack_base = .rbp, | | |
| 3762 | .dest_stack_base = reg.to64(), | | |
| 3763 | }); | | |
| 3764 | }, | | |
| 3765 | .ptr_stack_offset => { | 3757 | .ptr_stack_offset => { |
| 3766 | const tmp_reg = try self.copyToTmpRegister(value_ty, value); | 3758 | const tmp_reg = try self.copyToTmpRegister(value_ty, value); |
| 3767 | return self.store(ptr, .{ .register = tmp_reg }, ptr_ty, value_ty); | 3759 | try self.store(ptr, .{ .register = tmp_reg }, ptr_ty, value_ty); |
| 3768 | }, | 3760 | }, |
| 3769 | } | 3761 | } |
| 3770 | }, | 3762 | }, |
| ... | @@ -3788,7 +3780,7 @@ fn store(self: *Self, ptr: MCValue, value: MCValue, ptr_ty: Type, value_ty: Type | ... | @@ -3788,7 +3780,7 @@ fn store(self: *Self, ptr: MCValue, value: MCValue, ptr_ty: Type, value_ty: Type |
| 3788 | ); | 3780 | ); |
| 3789 | | 3781 | |
| 3790 | const new_ptr = MCValue{ .register = addr_reg.to64() }; | 3782 | const new_ptr = MCValue{ .register = addr_reg.to64() }; |
| 3791 | return self.store(new_ptr, value, ptr_ty, value_ty); | 3783 | try self.store(new_ptr, value, ptr_ty, value_ty); |
| 3792 | }, | 3784 | }, |
| 3793 | } | 3785 | } |
| 3794 | } | 3786 | } |