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);
|
||||
}
|
||||
0x18: decode OPCODE_OP_BOTTOM3 {
|
||||
0x0: xadd_Eb_Gb();
|
||||
0x1: xadd_Ev_Gv();
|
||||
0x0: Inst::XADD(Eb,Gb);
|
||||
0x1: Inst::XADD(Ev,Gv);
|
||||
//0x7: group9();
|
||||
0x7: decode MODRM_REG {
|
||||
0x1: cmpxchg_Mq();
|
||||
|
|
|
@ -78,10 +78,30 @@ def macroop CMPXCHG_P_R {
|
|||
st t1, seg, riprel, disp
|
||||
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 {{
|
||||
# class XADD(Inst):
|
||||
# "GenFault ${new UnimpInstFault}"
|
||||
# class XCHG(Inst):
|
||||
# "GenFault ${new UnimpInstFault}"
|
||||
#}};
|
||||
|
|
Loading…
Reference in a new issue