diff --git a/src/arch/i386.ins b/src/arch/i386.ins index 068c592..9158dbe 100644 --- a/src/arch/i386.ins +++ b/src/arch/i386.ins @@ -434,6 +434,16 @@ { "xchg", 0x95, OP1F, OP_BP, OP_AX, AOT_NONE }, { "xchg", 0x96, OP1F, OP_SI, OP_AX, AOT_NONE }, { "xchg", 0x97, OP1F, OP_DI, OP_AX, AOT_NONE }, +/* XADD 0x0fc0 /r 2 r/m8 r8 */ +{ "xadd", 0x0fc0, OP2F, OP_RM8_D0_R,OP_R8, AOT_NONE }, +{ "xadd", 0x0fc0, OP2F, OP_RM8_D8_R,OP_R8, AOT_NONE }, +{ "xadd", 0x0fc0, OP2F, OP_RM8_DW_R,OP_R8, AOT_NONE }, +{ "xadd", 0x0fc0, OP2F, OP_RM8_R8_R,OP_R8, AOT_NONE }, +/* XADD 0x0fc1 /r 2 r/mW rW */ +{ "xadd", 0x0fc1, OP2F, OP_RMW_D0_R,OP_RW, AOT_NONE }, +{ "xadd", 0x0fc1, OP2F, OP_RMW_D8_R,OP_RW, AOT_NONE }, +{ "xadd", 0x0fc1, OP2F, OP_RMW_DW_R,OP_RW, AOT_NONE }, +{ "xadd", 0x0fc1, OP2F, OP_RMW_RW_R,OP_RW, AOT_NONE }, /* XCHG 0x86 /r 1 r/m8 r8 */ { "xchg", 0x86, OP1F, OP_RM8_D0_R,OP_R8, AOT_NONE }, { "xchg", 0x86, OP1F, OP_RM8_D8_R,OP_R8, AOT_NONE }, diff --git a/test/i386.S b/test/i386.S index 99ba847..0497a87 100644 --- a/test/i386.S +++ b/test/i386.S @@ -145,6 +145,10 @@ fclex fnclex nop /* 90 */ + /* XADD */ + xadd %eax, %ecx /* 0f c1 c8 */ + xadd %ecx, %eax /* 0f c1 c1 */ + xadd [%eax], %ebx /* 0f c1 18 */ /* XCHG */ xchg %eax, %ecx /* 91 */ xchg %ecx, %eax /* 91 */