mirror of
https://github.com/radareorg/radare2.git
synced 2025-02-14 02:51:12 +00:00
Fix #3957 - Old DUP was in fact NUM
This commit is contained in:
parent
608f4f7296
commit
f58e037c52
@ -454,8 +454,8 @@ static int _6502_op(RAnal *anal, RAnalOp *op, ut64 addr, const ut8 *data, int le
|
||||
op->type = R_ANAL_OP_TYPE_ADD;
|
||||
_6502_anal_esil_get_addr_pattern1 (op, data, addrbuf, buffsize);
|
||||
if (data[0] == 0x69) // immediate mode
|
||||
r_strbuf_setf (&op->esil, "%s,a,+=,C,DUP,$c7,C,=,a,+=,$c7,C,|=", addrbuf);
|
||||
else r_strbuf_setf (&op->esil, "%s,[1],a,+=,C,DUP,$c7,C,=,a,+=,$c7,C,|=", addrbuf);
|
||||
r_strbuf_setf (&op->esil, "%s,a,+=,C,NUM,$c7,C,=,a,+=,$c7,C,|=", addrbuf);
|
||||
else r_strbuf_setf (&op->esil, "%s,[1],a,+=,C,NUM,$c7,C,=,a,+=,$c7,C,|=", addrbuf);
|
||||
_6502_anal_update_flags (op, _6502_FLAGS_NZ);
|
||||
// fix Z
|
||||
r_strbuf_append (&op->esil, ",a,a,=,$z,Z,=");
|
||||
|
@ -205,7 +205,7 @@ static void analop_esil(RAnal *a, RAnalOp *op, ut64 addr, const ut8 *buf, const
|
||||
OP_GROUP_INPLACE_LHS_4(0x90, A, ".")
|
||||
|
||||
case 0xA4:
|
||||
/* mul */ emit("8,A,B,*,DUP,>>,DUP,!,!,OV,=,B,=,A,=,0,C,="); break;
|
||||
/* mul */ emit("8,A,B,*,NUM,>>,NUM,!,!,OV,=,B,=,A,=,0,C,="); break;
|
||||
case 0xA5: /* ??? */ emit("0,TRAP"); break;
|
||||
case 0xA6: case 0xA7:
|
||||
j (XR(IB1) XW(R0I)) break;
|
||||
|
@ -87,14 +87,14 @@ static int avr_op(RAnal *anal, RAnalOp *op, ut64 addr, const ut8 *buf, int len)
|
||||
op->cycles = 1;
|
||||
if (buf[1] & 0x10)
|
||||
r_strbuf_setf (&op->esil, "r%d,r%d,+=,$c7,CF,=,$c3,HF,=,$o,VF,=,r%d,r%d,=,$z,ZF,=,r%d,0x80,&,!,!,NF,=,VF,NF,^,SF,=", r, d, d, d, d);
|
||||
else r_strbuf_setf (&op->esil, "r%d,DUP,r%d,CF,+=,r%d,r%d,+=,$c7,CF,=,$c3,HF,=,$o,VF,=,r%d,r%d,=,$z,ZF,=,r%d,0x80,&,!,!,NF,=,VF,NF,^,SF,=,r%d,=", r, r, r, d, d, d, r);
|
||||
else r_strbuf_setf (&op->esil, "r%d,NUM,r%d,CF,+=,r%d,r%d,+=,$c7,CF,=,$c3,HF,=,$o,VF,=,r%d,r%d,=,$z,ZF,=,r%d,0x80,&,!,!,NF,=,VF,NF,^,SF,=,r%d,=", r, r, r, d, d, d, r);
|
||||
}
|
||||
if ((buf[1] & 0xec) == 8) { //SUB + SBC
|
||||
op->type = R_ANAL_OP_TYPE_SUB;
|
||||
op->cycles = 1;
|
||||
if (buf[1] & 0x10)
|
||||
r_strbuf_setf (&op->esil, "r%d,r%d,-=,$b8,CF,=,$b3,HF,=,$o,VF,=,r%d,r%d,=,$z,ZF,=,r%d,0x80,&,!,!,NF,=,VF,NF,^,SF,=", r, d, d, d, d);
|
||||
else r_strbuf_setf (&op->esil, "r%d,DUP,r%d,CF,+=,r%d,r%d,-=,$b8,CF,=,$b3,HF,=,$o,VF,=,r%d,r%d,=,$z,ZF,=,r%d,0x80,&,!,!,NF,=,VF,NF,^,SF,=,r%d,=", r, r, r, d, d, d, r);
|
||||
else r_strbuf_setf (&op->esil, "r%d,NUM,r%d,CF,+=,r%d,r%d,-=,$b8,CF,=,$b3,HF,=,$o,VF,=,r%d,r%d,=,$z,ZF,=,r%d,0x80,&,!,!,NF,=,VF,NF,^,SF,=,r%d,=", r, r, r, d, d, d, r);
|
||||
}
|
||||
if ((buf[1] & 0xec) == 4) { //CP + CPC
|
||||
op->type = R_ANAL_OP_TYPE_CMP;
|
||||
@ -169,7 +169,7 @@ static int avr_op(RAnal *anal, RAnalOp *op, ut64 addr, const ut8 *buf, int len)
|
||||
case 1: //NEG
|
||||
op->type = R_ANAL_OP_TYPE_CPL;
|
||||
op->cycles = 1;
|
||||
r_strbuf_setf (&op->esil, "r%d,DUP,0,r%d,=,r%d,-=,$b3,HF,=,$b8,CF,=,CF,!,ZF,=,r%d,0x80,&,!,!,NF,=,r%d,0x80,==,$z,VF,=,NF,VF,^,SF,=", d, d, d, d); //Hack for accessing internal vars
|
||||
r_strbuf_setf (&op->esil, "r%d,NUM,0,r%d,=,r%d,-=,$b3,HF,=,$b8,CF,=,CF,!,ZF,=,r%d,0x80,&,!,!,NF,=,r%d,0x80,==,$z,VF,=,NF,VF,^,SF,=", d, d, d, d); //Hack for accessing internal vars
|
||||
break;
|
||||
case 2: //SWAP
|
||||
op->type = R_ANAL_OP_TYPE_ROL;
|
||||
|
@ -401,7 +401,7 @@ static void gb_anal_xoaasc_imm (RReg *reg, RAnalOp *op, const ut8 *data) //xor ,
|
||||
if (data[0] == 0xce) { //adc
|
||||
op->src[1] = r_anal_value_new ();
|
||||
op->src[1]->reg = r_reg_get (reg, "C", R_REG_TYPE_GPR);
|
||||
r_strbuf_append (&op->esil, "a,+=,C,DUP,$c7,C,=,$c3,H,=,a,+=,$c7,C,|=,$c3,H,|=,a,a,=,$z,Z,=,0,N,=");
|
||||
r_strbuf_append (&op->esil, "a,+=,C,NUM,$c7,C,=,$c3,H,=,a,+=,$c7,C,|=,$c3,H,|=,a,a,=,$z,Z,=,0,N,=");
|
||||
} else r_strbuf_append (&op->esil, "a,+=,$c3,H,=,$c7,C,=,0,N,=,a,a,=,$z,Z,=");
|
||||
break;
|
||||
case R_ANAL_OP_TYPE_SUB:
|
||||
@ -409,7 +409,7 @@ static void gb_anal_xoaasc_imm (RReg *reg, RAnalOp *op, const ut8 *data) //xor ,
|
||||
if (data[0] == 0xde) { //sbc
|
||||
op->src[1] = r_anal_value_new ();
|
||||
op->src[1]->reg = r_reg_get (reg, "C", R_REG_TYPE_GPR);
|
||||
r_strbuf_append (&op->esil, "a,-=,C,DUP,$b8,C,=,$b4,H,=,a,-=,$b8,C,|=,$b4,H,|=,a,a,=,$z,Z,=,1,N,=");
|
||||
r_strbuf_append (&op->esil, "a,-=,C,NUM,$b8,C,=,$b4,H,=,a,-=,$b8,C,|=,$b4,H,|=,a,a,=,$z,Z,=,1,N,=");
|
||||
} else r_strbuf_append (&op->esil, "a,-=,$b4,H,=,$b8,C,=,1,N,=,a,a,=,$z,Z,=");
|
||||
break;
|
||||
case R_ANAL_OP_TYPE_CMP:
|
||||
|
@ -530,7 +530,7 @@ SETL/SETNGE
|
||||
const char *dst = cs_reg_name(handle, INSOP(0).mem.base);
|
||||
const char *counter = (a->bits==16)?"cx":
|
||||
(a->bits==32)?"ecx":"rcx";
|
||||
esilprintf (op, "%s,!,?{,BREAK,},%s,DUP,%s,DUP,"\
|
||||
esilprintf (op, "%s,!,?{,BREAK,},%s,NUM,%s,NUM,"\
|
||||
"%s,[%d],%s,=[%d],df,?{,%d,%s,-=,%d,%s,-=,},"\
|
||||
"df,!,?{,%d,%s,+=,%d,%s,+=,},%s,--=,%s," \
|
||||
"?{,8,GOTO,},%s,=,%s,=",
|
||||
|
Loading…
x
Reference in New Issue
Block a user