fn gen_jmp_if_false(
        &mut self,
        globals: &mut Globals,
        iseq: &mut ISeq,
        cond: Node,
    ) -> Result<ISeqPos, RubyError> {
        let pos = match cond.kind {
            NodeKind::BinOp(op, lhs, rhs) if op.is_cmp_op() => {
                self.gen(globals, iseq, *lhs, true)?;
                if let Some(i) = rhs.is_imm_i32() {
                    let inst = match op {
                        BinOp::Eq => Inst::JMP_F_EQI,
                        BinOp::Ne => Inst::JMP_F_NEI,
                        BinOp::Ge => Inst::JMP_F_GEI,
                        BinOp::Gt => Inst::JMP_F_GTI,
                        BinOp::Le => Inst::JMP_F_LEI,
                        BinOp::Lt => Inst::JMP_F_LTI,
                        _ => unreachable!(),
                    };
                    iseq.push(inst);
                    iseq.push32(i as u32);
                    iseq.push32(0);
                    self.save_loc(iseq, cond.loc);
                } else {
                    self.gen(globals, iseq, *rhs, true)?;
                    let inst = match op {
                        BinOp::Eq => Inst::JMP_F_EQ,
                        BinOp::Ne => Inst::JMP_F_NE,
                        BinOp::Ge => Inst::JMP_F_GE,
                        BinOp::Gt => Inst::JMP_F_GT,
                        BinOp::Le => Inst::JMP_F_LE,
                        BinOp::Lt => Inst::JMP_F_LT,
                        _ => unreachable!(),
                    };
                    iseq.push(inst);
                    iseq.push32(0);
                    self.save_loc(iseq, cond.loc);
                }
                iseq.current()
            }
            _ => {
                self.gen(globals, iseq, cond, true)?;
                iseq.gen_jmp_if_f()
            }
        };
        Ok(pos)
    }
Generate `cond` + JMP_IF_FALSE.

If `cond` is "lhs cmp Integer" (cmp: == or != or <= ...), generate optimized instruction. (JMP_F_EQI etc..)
ruruby/src/codegen.rs