diff options
| author | gingerBill <bill@gingerbill.org> | 2024-07-11 13:08:38 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2024-07-11 13:08:38 +0100 |
| commit | 6b3453cc64f59e290da49f5284c8582aa39f7e36 (patch) | |
| tree | 056e6f9c3480b8b5be24a3e268be938281a7f760 /src | |
| parent | 5e7634d90c71980382ce30a70d8b64047b83dc09 (diff) | |
Fix #3902
Diffstat (limited to 'src')
| -rw-r--r-- | src/llvm_backend_general.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index b50ba746a..f5595b70e 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -1163,11 +1163,12 @@ gb_internal lbValue lb_addr_load(lbProcedure *p, lbAddr const &addr) { r = lb_addr_load(p, dst); r.value = LLVMBuildShl(p->builder, r.value, shift_amount, ""); } else if ((addr.bitfield.bit_offset % 8) == 0) { + do_mask = 8*dst_byte_size != addr.bitfield.bit_size; + lbValue copy_size = byte_size; lbValue src_offset = lb_emit_conv(p, src, t_u8_ptr); src_offset = lb_emit_ptr_offset(p, src_offset, byte_offset); if (addr.bitfield.bit_offset + 8*dst_byte_size <= total_bitfield_bit_size) { - do_mask = true; copy_size = lb_const_int(p->module, t_uintptr, dst_byte_size); } lb_mem_copy_non_overlapping(p, dst.addr, src_offset, copy_size, false); |