summaryrefslogtreecommitdiff
path: root/yjit/src/backend
diff options
context:
space:
mode:
Diffstat (limited to 'yjit/src/backend')
-rw-r--r--yjit/src/backend/ir.rs29
1 files changed, 17 insertions, 12 deletions
diff --git a/yjit/src/backend/ir.rs b/yjit/src/backend/ir.rs
index 09ce6b4d6c..e5bcd78932 100644
--- a/yjit/src/backend/ir.rs
+++ b/yjit/src/backend/ir.rs
@@ -78,8 +78,9 @@ pub enum Op
Cmp,
// Low-level conditional jump instructions
- Jnz,
Jbe,
+ Je,
+ Jnz,
// C function call with N arguments (variadic)
CCall,
@@ -636,17 +637,6 @@ impl fmt::Debug for Assembler {
impl Assembler
{
- // Jump if not zero
- pub fn jnz(&mut self, target: Target)
- {
- self.push_insn(Op::Jnz, vec![], Some(target));
- }
-
- pub fn jbe(&mut self, target: Target)
- {
- self.push_insn(Op::Jbe, vec![], Some(target));
- }
-
pub fn ccall(&mut self, fptr: *const u8, opnds: Vec<Opnd>) -> Opnd
{
let target = Target::FunPtr(fptr);
@@ -654,6 +644,18 @@ impl Assembler
}
}
+macro_rules! def_push_jcc {
+ ($op_name:ident, $opcode:expr) => {
+ impl Assembler
+ {
+ pub fn $op_name(&mut self, target: Target)
+ {
+ self.push_insn($opcode, vec![], Some(target));
+ }
+ }
+ };
+}
+
macro_rules! def_push_1_opnd {
($op_name:ident, $opcode:expr) => {
impl Assembler
@@ -702,6 +704,9 @@ macro_rules! def_push_2_opnd_no_out {
};
}
+def_push_jcc!(je, Op::Je);
+def_push_jcc!(jbe, Op::Jbe);
+def_push_jcc!(jnz, Op::Jnz);
def_push_2_opnd!(add, Op::Add);
def_push_2_opnd!(sub, Op::Sub);
def_push_2_opnd!(and, Op::And);