fn internal_binop_def_r_r(&mut self, inst: &str, dest: &P<Value>, src: &P<Value>) {
        let len = check_op_len(src);

        let inst = inst.to_string() + &op_postfix(len);
        trace!("emit: {} {}, {} -> {}", inst, src, dest, dest);

        let (reg1, id1, loc1) = self.prepare_reg(src, inst.len() + 1);
        let (reg2, id2, loc2) = self.prepare_reg(dest, inst.len() + 1 + reg1.len() + 1);

        let asm = format!("{} {},{}", inst, reg1, reg2);

        self.add_asm_inst(
            asm,
            linked_hashmap!{
                id2 => vec![loc2.clone()]
            },
            {
                if id1 == id2 {
                    linked_hashmap!{
                        id1 => vec![loc1, loc2]
                    }
                } else {
                    linked_hashmap!{
                        id1 => vec![loc1],
                        id2 => vec![loc2]
                    }
                }
            },
            false
        )
    }
/// emits an instruction (use 2 regs, define 1st reg)
emits an instruction (use 2 regs, define 1st reg)
emits an instruction ( use 2 regs define 1st reg )
fn internal_binop_def_r_r(&mut self, inst: &str, dest: &P<Value>, src: &P<Value>) {
        let len = check_op_len(src);
        let inst = inst.to_string() + &op_postfix(len);
        trace!("emit: {} {}, {} -> {}", inst, src, dest, dest);
        let (reg1, id1, loc1) = self.prepare_reg(src, inst.len() + 1);
        let (reg2, id2, loc2) = self.prepare_reg(dest, inst.len() + 1 + reg1.len() + 1);
        let asm = format!("{} {},{}", inst, reg1, reg2);
        self.add_asm_inst(
            asm,
            linked_hashmap!{
                id2 => vec![loc2.clone()]
            },
            {
                if id1 == id2 {
                    linked_hashmap!{
                        id1 => vec![loc1, loc2]
                    }
                } else {
                    linked_hashmap!{
                        id1 => vec![loc1],
                        id2 => vec![loc2]
                    }
                }
            },
            false
        )
    }
fn internal_binop_def_r_r ( & mut self , inst : & str , dest : & P < Value > , src : & P < Value > ) { let len = check_op_len ( src ) ; let inst = inst . to_string ( ) + & op_postfix ( len ) ; trace ! ( " " inst src dest dest ) ; let ( reg1 , id1 , loc1 ) = self . prepare_reg ( src , inst . len ( ) + 1 ) ; let ( reg2 , id2 , loc2 ) = self . prepare_reg ( dest , inst . len ( ) + 1 + reg1 . len ( ) + 1 ) ; let asm = format ! ( " " inst reg1 reg2 ) ; self . add_asm_inst ( asm , linked_hashmap ! { id2 vec [ loc2 clone ( ) ] } , { if id1 == id2 { linked_hashmap ! { id1 vec [ loc1 loc2 ] } } else { linked_hashmap ! { id1 vec [ loc1 ] id2 vec [ loc2 ] } } } , false ) }
emits an instruction (use 2 regs, define 1st reg)
emits an instruction ( use 2 regs define 1st reg )
&mut self
inst
&str
dest
&P<Value>
src
&P<Value>
&mut self
inst
&str
dest
&P<Value>
src
&P<Value>