Merge pull request #3773 from fitzgen/x64-traps-safepoints
ISLE: emit traps as safepoints on x64
This commit is contained in:
@@ -1461,9 +1461,9 @@
|
|||||||
;;;; Rules for `trap` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;; Rules for `trap` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(rule (lower (trap code))
|
(rule (lower (trap code))
|
||||||
(value_regs_none (ud2 code)))
|
(safepoint (ud2 code)))
|
||||||
|
|
||||||
;;;; Rules for `resumable_trap` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;; Rules for `resumable_trap` ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
(rule (lower (resumable_trap code))
|
(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 {
|
fn emit_safepoint(&mut self, inst: &MInst) -> Unit {
|
||||||
unimplemented!();
|
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]
|
#[inline]
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
src/clif.isle 9ea75a6f790b5c03
|
src/clif.isle 9ea75a6f790b5c03
|
||||||
src/prelude.isle 6aaf8ce0f5a5c2ec
|
src/prelude.isle 6aaf8ce0f5a5c2ec
|
||||||
src/isa/x64/inst.isle 7513533d16948249
|
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 => {
|
&Opcode::Trap => {
|
||||||
// Rule at src/isa/x64/lower.isle line 1463.
|
// Rule at src/isa/x64/lower.isle line 1463.
|
||||||
let expr0_0 = constructor_ud2(ctx, &pattern2_1)?;
|
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);
|
return Some(expr1_0);
|
||||||
}
|
}
|
||||||
&Opcode::ResumableTrap => {
|
&Opcode::ResumableTrap => {
|
||||||
// Rule at src/isa/x64/lower.isle line 1468.
|
// Rule at src/isa/x64/lower.isle line 1468.
|
||||||
let expr0_0 = constructor_ud2(ctx, &pattern2_1)?;
|
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);
|
return Some(expr1_0);
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
|
|||||||
Reference in New Issue
Block a user