| ... | ... | @@ -10378,7 +10378,21 @@ pub const FuncGen = struct { |
| 10378 | 10378 | if (isByRef(elem_ty, mod)) { |
| 10379 | 10379 | return self.loadByRef(ptr, elem_ty, ptr_alignment, access_kind); |
| 10380 | 10380 | } |
| 10381 | | return self.wip.load(access_kind, try o.lowerType(elem_ty), ptr, ptr_alignment, ""); |
| 10381 | const llvm_elem_ty = try o.lowerType(elem_ty); |
| 10382 | const llvm_load_ty = if (elem_ty.isAbiInt(mod)) |
| 10383 | try o.builder.intType(@intCast(elem_ty.abiSize(mod) * 8)) |
| 10384 | else |
| 10385 | llvm_elem_ty; |
| 10386 | const loaded = try self.wip.load(access_kind, llvm_load_ty, ptr, ptr_alignment, ""); |
| 10387 | const shifted = if (llvm_elem_ty != llvm_load_ty and o.target.cpu.arch.endian() == .Big) |
| 10388 | try self.wip.bin(.lshr, loaded, try o.builder.intValue( |
| 10389 | llvm_load_ty, |
| 10390 | (elem_ty.abiSize(mod) - (std.math.divCeil(u64, elem_ty.bitSize(mod), 8) catch |
| 10391 | unreachable)) * 8, |
| 10392 | ), "") |
| 10393 | else |
| 10394 | loaded; |
| 10395 | return self.wip.conv(.unneeded, shifted, llvm_elem_ty, ""); |
| 10382 | 10396 | } |
| 10383 | 10397 | |
| 10384 | 10398 | const containing_int_ty = try o.builder.intType(@intCast(info.packed_offset.host_size * 8)); |