@@ -272,6 +272,7 @@ fn gen_insn(cb: &mut CodeBlock, jit: &mut JITState, asm: &mut Assembler, functio
272272 Insn :: FixnumLe { left, right } => gen_fixnum_le ( asm, opnd ! ( left) , opnd ! ( right) ) ?,
273273 Insn :: FixnumGt { left, right } => gen_fixnum_gt ( asm, opnd ! ( left) , opnd ! ( right) ) ?,
274274 Insn :: FixnumGe { left, right } => gen_fixnum_ge ( asm, opnd ! ( left) , opnd ! ( right) ) ?,
275+ Insn :: IsNil { val } => gen_isnil ( asm, opnd ! ( val) ) ?,
275276 Insn :: Test { val } => gen_test ( asm, opnd ! ( val) ) ?,
276277 Insn :: GuardType { val, guard_type, state } => gen_guard_type ( jit, asm, opnd ! ( val) , * guard_type, & function. frame_state ( * state) ) ?,
277278 Insn :: GuardBitEquals { val, expected, state } => gen_guard_bit_equals ( jit, asm, opnd ! ( val) , * expected, & function. frame_state ( * state) ) ?,
@@ -890,6 +891,12 @@ fn gen_fixnum_ge(asm: &mut Assembler, left: lir::Opnd, right: lir::Opnd) -> Opti
890891 Some ( asm. csel_ge ( Qtrue . into ( ) , Qfalse . into ( ) ) )
891892}
892893
894+ // Compile val == nil
895+ fn gen_isnil ( asm : & mut Assembler , val : lir:: Opnd ) -> Option < lir:: Opnd > {
896+ asm. cmp ( val, Qnil . into ( ) ) ;
897+ Some ( asm. csel_e ( Opnd :: Imm ( 1 ) , Opnd :: Imm ( 0 ) ) )
898+ }
899+
893900fn gen_anytostring ( asm : & mut Assembler , val : lir:: Opnd , str : lir:: Opnd , state : & FrameState ) -> Option < lir:: Opnd > {
894901 // Save PC
895902 gen_save_pc ( asm, state) ;
0 commit comments