simplify moving with the scratch register we now have

This commit is contained in:
Folkert 2023-09-17 18:01:08 +02:00
parent dd12069013
commit dc179a1aa6
No known key found for this signature in database
GPG key ID: 1F17F6FFD112B97C
3 changed files with 17 additions and 42 deletions

View file

@ -298,13 +298,13 @@ pub trait Assembler<GeneralReg: RegTrait, FloatReg: RegTrait>: Sized + Copy {
relocs: &mut Vec<'_, Relocation>,
dst: FloatReg,
imm: f32,
) -> Result<(), ()>;
);
fn mov_freg64_imm64(
buf: &mut Vec<'_, u8>,
relocs: &mut Vec<'_, Relocation>,
dst: FloatReg,
imm: f64,
) -> Result<(), ()>;
);
fn mov_reg64_imm64(buf: &mut Vec<'_, u8>, dst: GeneralReg, imm: i64);
fn mov_freg64_freg64(buf: &mut Vec<'_, u8>, dst: FloatReg, src: FloatReg);
@ -4257,32 +4257,12 @@ impl<
(Literal::Float(x), LayoutRepr::Builtin(Builtin::Float(FloatWidth::F64))) => {
let freg = self.storage_manager.claim_float_reg(&mut self.buf, sym);
let val = *x;
if ASM::mov_freg64_imm64(&mut self.buf, &mut self.relocs, freg, val).is_err() {
// do the naive thing
let tmp = Symbol::DEV_TMP;
let reg = self.storage_manager.claim_general_reg(&mut self.buf, &tmp);
let val = i64::from_ne_bytes(val.to_ne_bytes());
ASM::mov_reg64_imm64(&mut self.buf, reg, val);
ASM::mov_freg64_reg64(&mut self.buf, freg, reg);
self.storage_manager.free_symbol(&tmp);
}
ASM::mov_freg64_imm64(&mut self.buf, &mut self.relocs, freg, val);
}
(Literal::Float(x), LayoutRepr::Builtin(Builtin::Float(FloatWidth::F32))) => {
let freg = self.storage_manager.claim_float_reg(&mut self.buf, sym);
let val = *x as f32;
if ASM::mov_freg32_imm32(&mut self.buf, &mut self.relocs, freg, val).is_err() {
// do the naive thing
let tmp = Symbol::DEV_TMP;
let reg = self.storage_manager.claim_general_reg(&mut self.buf, &tmp);
let val = i32::from_ne_bytes(val.to_ne_bytes());
ASM::mov_reg64_imm64(&mut self.buf, reg, val as i64);
ASM::mov_freg32_reg32(&mut self.buf, freg, reg);
self.storage_manager.free_symbol(&tmp);
}
ASM::mov_freg32_imm32(&mut self.buf, &mut self.relocs, freg, val);
}
(Literal::Decimal(bytes), LayoutRepr::Builtin(Builtin::Decimal)) => {
self.storage_manager.with_tmp_general_reg(