fully implement sign/zero extension

This commit is contained in:
Folkert 2023-02-12 14:54:22 +01:00
parent 4e38a4ce32
commit a3d5e7bee5
No known key found for this signature in database
GPG key ID: 1F17F6FFD112B97C
3 changed files with 160 additions and 25 deletions

View file

@ -459,13 +459,17 @@ impl<
ASM::mov_reg64_base32(buf, reg, *base_offset);
}
Stack(ReferencedPrimitive {
base_offset, size, ..
}) if base_offset % 8 == 0 && *size == 8 => {
// The primitive is aligned and the data is exactly 8 bytes, treat it like regular stack.
ASM::mov_reg64_base32(buf, reg, *base_offset);
}
Stack(ReferencedPrimitive { .. }) => {
todo!("loading referenced primitives")
base_offset,
size,
sign_extend,
}) => {
debug_assert!(*size <= 8);
if *sign_extend {
ASM::movsx_reg64_base32(buf, reg, *base_offset, *size as u8)
} else {
ASM::movzx_reg64_base32(buf, reg, *base_offset, *size as u8)
}
}
Stack(Complex { size, .. }) => {
internal_error!(