mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
ZJIT: Optimize opt_and
and opt_or
instructions for Fixnum
This commit is contained in:
parent
10b582dab6
commit
e2a81c738c
3 changed files with 101 additions and 1 deletions
|
@ -291,6 +291,8 @@ fn gen_insn(cb: &mut CodeBlock, jit: &mut JITState, asm: &mut Assembler, functio
|
|||
Insn::FixnumLe { left, right } => gen_fixnum_le(asm, opnd!(left), opnd!(right))?,
|
||||
Insn::FixnumGt { left, right } => gen_fixnum_gt(asm, opnd!(left), opnd!(right))?,
|
||||
Insn::FixnumGe { left, right } => gen_fixnum_ge(asm, opnd!(left), opnd!(right))?,
|
||||
Insn::FixnumAnd { left, right } => gen_fixnum_and(asm, opnd!(left), opnd!(right))?,
|
||||
Insn::FixnumOr { left, right } => gen_fixnum_or(asm, opnd!(left), opnd!(right))?,
|
||||
Insn::IsNil { val } => gen_isnil(asm, opnd!(val))?,
|
||||
Insn::Test { val } => gen_test(asm, opnd!(val))?,
|
||||
Insn::GuardType { val, guard_type, state } => gen_guard_type(jit, asm, opnd!(val), *guard_type, &function.frame_state(*state))?,
|
||||
|
@ -939,6 +941,16 @@ fn gen_fixnum_ge(asm: &mut Assembler, left: lir::Opnd, right: lir::Opnd) -> Opti
|
|||
Some(asm.csel_ge(Qtrue.into(), Qfalse.into()))
|
||||
}
|
||||
|
||||
/// Compile Fixnum & Fixnum
|
||||
fn gen_fixnum_and(asm: &mut Assembler, left: lir::Opnd, right: lir::Opnd) -> Option<lir::Opnd> {
|
||||
Some(asm.and(left, right))
|
||||
}
|
||||
|
||||
/// Compile Fixnum | Fixnum
|
||||
fn gen_fixnum_or(asm: &mut Assembler, left: lir::Opnd, right: lir::Opnd) -> Option<lir::Opnd> {
|
||||
Some(asm.or(left, right))
|
||||
}
|
||||
|
||||
// Compile val == nil
|
||||
fn gen_isnil(asm: &mut Assembler, val: lir::Opnd) -> Option<lir::Opnd> {
|
||||
asm.cmp(val, Qnil.into());
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue