fn emit_flags_128(
        &mut self,
        res_l: &P<Value>,
        res_h: &P<Value>,
        status_z: &P<Value>,
        status_n: &P<Value>
    ) {
        if !is_zero_register(status_z) {
            let tmp = &cast_value(&status_z, &UINT64_TYPE);
            // tmp = res_h | res_l
            self.backend.emit_orr(&tmp, &res_h, &res_l);

            // status_z = (tmp == 0) ? 1 : 0
            self.backend.emit_cmp_imm(&tmp, 0, false);
            self.backend.emit_cset(&status_z, "EQ");
        }
        if !is_zero_register(status_n) {
            let status_n64 = &cast_value(&status_n, &UINT64_TYPE);
            // status_n = (res_h >> 63)
            // (so that status_n[0] = res_h[63])
            self.backend.emit_lsr_imm(&status_n64, &res_h, 63);
        }
    }
// Computes the Z and B flags for 128 bit arithmetic, but only if status_z and status_n are not
// the zero register (respectively).
Computes the Z and B flags for 128 bit arithmetic, but only if status_z and status_n are not
the zero register (respectively).
Computes the Z and B flags for 128 bit arithmetic but only if status_z and status_n are not the zero register ( respectively ) .
fn emit_flags_128(
        &mut self,
        res_l: &P<Value>,
        res_h: &P<Value>,
        status_z: &P<Value>,
        status_n: &P<Value>
    ) {
        if !is_zero_register(status_z) {
            let tmp = &cast_value(&status_z, &UINT64_TYPE);
            // tmp = res_h | res_l
            self.backend.emit_orr(&tmp, &res_h, &res_l);
            // status_z = (tmp == 0) ? 1 : 0
            self.backend.emit_cmp_imm(&tmp, 0, false);
            self.backend.emit_cset(&status_z, "EQ");
        }
        if !is_zero_register(status_n) {
            let status_n64 = &cast_value(&status_n, &UINT64_TYPE);
            // status_n = (res_h >> 63)
            // (so that status_n[0] = res_h[63])
            self.backend.emit_lsr_imm(&status_n64, &res_h, 63);
        }
    }
fn emit_flags_128 ( & mut self , res_l : & P < Value > , res_h : & P < Value > , status_z : & P < Value > , status_n : & P < Value > ) { if ! is_zero_register ( status_z ) { let tmp = & cast_value ( & status_z , & UINT64_TYPE ) ; // tmp = res_h | res_l self . backend . emit_orr ( & tmp , & res_h , & res_l ) ; // status_z = (tmp == 0) ? 1 : 0 self . backend . emit_cmp_imm ( & tmp , 0 , false ) ; self . backend . emit_cset ( & status_z , " " ) ; } if ! is_zero_register ( status_n ) { let status_n64 = & cast_value ( & status_n , & UINT64_TYPE ) ; // status_n = (res_h >> 63) // (so that status_n[0] = res_h[63]) self . backend . emit_lsr_imm ( & status_n64 , & res_h , 63 ) ; } }
Computes the Z and B flags for 128 bit arithmetic, but only if status_z and status_n are not
the zero register (respectively).
Computes the Z and B flags for 128 bit arithmetic but only if status_z and status_n are not the zero register ( respectively ) .
&mut self
res_l
&P<Value>
res_h
&P<Value>
status_z
&P<Value>
status_n
&P<Value>
&mut self
res_l
&P<Value>
res_h
&P<Value>
status_z
&P<Value>
status_n
&P<Value>