From f833d75bee13ecb485db1591898cb871b24a2991 Mon Sep 17 00:00:00 2001 From: Maxime Chevalier-Boisvert Date: Wed, 20 Jul 2022 14:50:00 -0400 Subject: Refactor YJIT branches to use PosMarker (https://github.com/Shopify/ruby/pull/333) * Refactor defer_compilation to use PosMarker * Port gen_direct_jump() to use PosMarker * Port gen_branch, branchunless * Port over gen_jump() * Port over branchif and branchnil * Fix use od record_boundary_patch_point in jump_to_next_insn --- yjit/src/backend/arm64/mod.rs | 3 +++ yjit/src/backend/ir.rs | 2 ++ yjit/src/backend/x86_64/mod.rs | 8 ++++++++ 3 files changed, 13 insertions(+) (limited to 'yjit/src/backend') diff --git a/yjit/src/backend/arm64/mod.rs b/yjit/src/backend/arm64/mod.rs index c5ddbea7c1..35026a520b 100644 --- a/yjit/src/backend/arm64/mod.rs +++ b/yjit/src/backend/arm64/mod.rs @@ -637,6 +637,9 @@ impl Assembler Op::Je => { emit_conditional_jump::<{Condition::EQ}>(cb, insn.target.unwrap()); }, + Op::Jne => { + emit_conditional_jump::<{Condition::NE}>(cb, insn.target.unwrap()); + }, Op::Jbe => { emit_conditional_jump::<{Condition::LS}>(cb, insn.target.unwrap()); }, diff --git a/yjit/src/backend/ir.rs b/yjit/src/backend/ir.rs index 8d58da88f2..c55a8f609b 100644 --- a/yjit/src/backend/ir.rs +++ b/yjit/src/backend/ir.rs @@ -102,6 +102,7 @@ pub enum Op // Low-level conditional jump instructions Jbe, Je, + Jne, Jz, Jnz, Jo, @@ -883,6 +884,7 @@ macro_rules! def_push_2_opnd_no_out { def_push_1_opnd_no_out!(jmp_opnd, Op::JmpOpnd); def_push_jcc!(jmp, Op::Jmp); def_push_jcc!(je, Op::Je); +def_push_jcc!(jne, Op::Jne); def_push_jcc!(jbe, Op::Jbe); def_push_jcc!(jz, Op::Jz); def_push_jcc!(jnz, Op::Jnz); diff --git a/yjit/src/backend/x86_64/mod.rs b/yjit/src/backend/x86_64/mod.rs index 2fb7e39346..2efe920ddf 100644 --- a/yjit/src/backend/x86_64/mod.rs +++ b/yjit/src/backend/x86_64/mod.rs @@ -367,6 +367,14 @@ impl Assembler } } + Op::Jne => { + match insn.target.unwrap() { + Target::CodePtr(code_ptr) => jne_ptr(cb, code_ptr), + Target::Label(label_idx) => jne_label(cb, label_idx), + _ => unreachable!() + } + } + Op::Jbe => { match insn.target.unwrap() { Target::CodePtr(code_ptr) => jbe_ptr(cb, code_ptr), -- cgit v1.2.3