ISLE: emit traps as safepoints on x64
This commit is contained in:
@@ -1461,9 +1461,9 @@
|
||||
;;;; Rules for `trap` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(rule (lower (trap code))
|
||||
(value_regs_none (ud2 code)))
|
||||
(safepoint (ud2 code)))
|
||||
|
||||
;;;; Rules for `resumable_trap` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(rule (lower (resumable_trap code))
|
||||
(value_regs_none (ud2 code)))
|
||||
(safepoint (ud2 code)))
|
||||
|
||||
@@ -233,8 +233,12 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
fn emit_safepoint(&mut self, _inst: &MInst) -> Unit {
|
||||
unimplemented!();
|
||||
fn emit_safepoint(&mut self, inst: &MInst) -> Unit {
|
||||
use crate::machinst::MachInst;
|
||||
for inst in inst.clone().mov_mitosis() {
|
||||
let is_safepoint = !inst.is_move().is_some();
|
||||
self.emitted_insts.push((inst, is_safepoint));
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
src/clif.isle 9ea75a6f790b5c03
|
||||
src/prelude.isle 6aaf8ce0f5a5c2ec
|
||||
src/isa/x64/inst.isle 7513533d16948249
|
||||
src/isa/x64/lower.isle ccda13e9fe83c89a
|
||||
src/isa/x64/lower.isle 976ac116c5fcfa16
|
||||
|
||||
@@ -2993,13 +2993,13 @@ pub fn constructor_lower<C: Context>(ctx: &mut C, arg0: Inst) -> Option<ValueReg
|
||||
&Opcode::Trap => {
|
||||
// Rule at src/isa/x64/lower.isle line 1463.
|
||||
let expr0_0 = constructor_ud2(ctx, &pattern2_1)?;
|
||||
let expr1_0 = constructor_value_regs_none(ctx, &expr0_0)?;
|
||||
let expr1_0 = constructor_safepoint(ctx, &expr0_0)?;
|
||||
return Some(expr1_0);
|
||||
}
|
||||
&Opcode::ResumableTrap => {
|
||||
// Rule at src/isa/x64/lower.isle line 1468.
|
||||
let expr0_0 = constructor_ud2(ctx, &pattern2_1)?;
|
||||
let expr1_0 = constructor_value_regs_none(ctx, &expr0_0)?;
|
||||
let expr1_0 = constructor_safepoint(ctx, &expr0_0)?;
|
||||
return Some(expr1_0);
|
||||
}
|
||||
_ => {}
|
||||
|
||||
Reference in New Issue
Block a user