Implement pinned register usage through set_pinned_reg/get_pinned_reg;
This commit is contained in:
@@ -4,7 +4,7 @@ use crate::binemit::{CodeOffset, Reloc};
|
||||
use crate::ir::constant::ConstantData;
|
||||
use crate::ir::types::*;
|
||||
use crate::ir::TrapCode;
|
||||
use crate::isa::aarch64::inst::*;
|
||||
use crate::isa::aarch64::{inst::regs::PINNED_REG, inst::*};
|
||||
|
||||
use regalloc::{Reg, RegClass, Writable};
|
||||
|
||||
@@ -1307,6 +1307,20 @@ impl<O: MachSectionOutput> MachInstEmit<O> for Inst {
|
||||
}
|
||||
_ => unimplemented!("{:?}", mem),
|
||||
},
|
||||
&Inst::GetPinnedReg { rd } => {
|
||||
let inst = Inst::Mov {
|
||||
rd,
|
||||
rm: xreg(PINNED_REG),
|
||||
};
|
||||
inst.emit(sink);
|
||||
}
|
||||
&Inst::SetPinnedReg { rm } => {
|
||||
let inst = Inst::Mov {
|
||||
rd: Writable::from_reg(xreg(PINNED_REG)),
|
||||
rm,
|
||||
};
|
||||
inst.emit(sink);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1315,6 +1329,7 @@ impl<O: MachSectionOutput> MachInstEmit<O> for Inst {
|
||||
mod test {
|
||||
use super::*;
|
||||
use crate::isa::test_utils;
|
||||
use crate::settings;
|
||||
|
||||
#[test]
|
||||
fn test_aarch64_binemit() {
|
||||
@@ -4074,7 +4089,7 @@ mod test {
|
||||
"frintn d23, d24",
|
||||
));
|
||||
|
||||
let rru = create_reg_universe();
|
||||
let rru = create_reg_universe(&settings::Flags::new(settings::builder()));
|
||||
for (insn, expected_encoding, expected_printing) in insns {
|
||||
println!(
|
||||
"AArch64: {:?}, {}, {}",
|
||||
|
||||
Reference in New Issue
Block a user