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