def ADDrm8 : I2A8 <"add", 0x02, MRMSrcMem >; // R8 += [mem8]
def ADDrm16 : I2A16<"add", 0x03, MRMSrcMem >, OpSize; // R16 += [mem16]
def ADDrm32 : I2A32<"add", 0x03, MRMSrcMem >; // R32 += [mem32]
-def ADDmi8 : I2A8 <"add", 0x80, MRMSrcMem >; // [mem8] += I8
-def ADDmi16 : I2A16<"add", 0x81, MRMSrcMem >, OpSize; // [mem16] += I16
-def ADDmi32 : I2A32<"add", 0x81, MRMSrcMem >; // [mem32] += I8
-def ADDmi16b : I2A8 <"add", 0x83, MRMSrcMem >, OpSize; // [mem16] += I8
-def ADDmi32b : I2A8 <"add", 0x83, MRMSrcMem >; // [mem32] += I32
+def ADDmi8 : I2A8 <"add", 0x80, MRMDestMem>; // [mem8] += I8
+def ADDmi16 : I2A16<"add", 0x81, MRMDestMem>, OpSize; // [mem16] += I16
+def ADDmi32 : I2A32<"add", 0x81, MRMDestMem>; // [mem32] += I8
+def ADDmi16b : I2A8 <"add", 0x83, MRMDestMem>, OpSize; // [mem16] += I8
+def ADDmi32b : I2A8 <"add", 0x83, MRMDestMem>; // [mem32] += I32
def ADCrr32 : I2A32<"adc", 0x11, MRMDestReg>; // R32 += R32+Carry
def ADCrm32 : I2A32<"adc", 0x11, MRMSrcMem >; // R32 += [mem32]+Carry