X86: Implement the xadd instruction.
This commit is contained in:
parent
3c5988b86c
commit
52defeb4e7
2 changed files with 24 additions and 4 deletions
|
@ -870,8 +870,8 @@
|
||||||
0x7: Inst::MOVSX_W(Gv,Ev);
|
0x7: Inst::MOVSX_W(Gv,Ev);
|
||||||
}
|
}
|
||||||
0x18: decode OPCODE_OP_BOTTOM3 {
|
0x18: decode OPCODE_OP_BOTTOM3 {
|
||||||
0x0: xadd_Eb_Gb();
|
0x0: Inst::XADD(Eb,Gb);
|
||||||
0x1: xadd_Ev_Gv();
|
0x1: Inst::XADD(Ev,Gv);
|
||||||
//0x7: group9();
|
//0x7: group9();
|
||||||
0x7: decode MODRM_REG {
|
0x7: decode MODRM_REG {
|
||||||
0x1: cmpxchg_Mq();
|
0x1: cmpxchg_Mq();
|
||||||
|
|
|
@ -78,10 +78,30 @@ def macroop CMPXCHG_P_R {
|
||||||
st t1, seg, riprel, disp
|
st t1, seg, riprel, disp
|
||||||
mov rax, rax, t1, flags=(nCZF,)
|
mov rax, rax, t1, flags=(nCZF,)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
def macroop XADD_M_R {
|
||||||
|
ldst t1, seg, sib, disp
|
||||||
|
add t2, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
|
||||||
|
st t2, seg, sib, disp
|
||||||
|
mov reg, reg, t1
|
||||||
|
};
|
||||||
|
|
||||||
|
def macroop XADD_P_R {
|
||||||
|
rdip t7
|
||||||
|
ldst t1, seg, riprel, disp
|
||||||
|
add t2, t1, reg, flags=(OF,SF,ZF,AF,PF,CF)
|
||||||
|
st t2, seg, riprel, disp
|
||||||
|
mov reg, reg, t1
|
||||||
|
};
|
||||||
|
|
||||||
|
def macroop XADD_R_R {
|
||||||
|
add t2, regm, reg, flags=(OF,SF,ZF,AF,PF,CF)
|
||||||
|
mov regm, regm, reg
|
||||||
|
mov reg, reg, t2
|
||||||
|
};
|
||||||
|
|
||||||
'''
|
'''
|
||||||
#let {{
|
#let {{
|
||||||
# class XADD(Inst):
|
|
||||||
# "GenFault ${new UnimpInstFault}"
|
|
||||||
# class XCHG(Inst):
|
# class XCHG(Inst):
|
||||||
# "GenFault ${new UnimpInstFault}"
|
# "GenFault ${new UnimpInstFault}"
|
||||||
#}};
|
#}};
|
||||||
|
|
Loading…
Reference in a new issue