|
@@ -825,6 +825,14 @@ done_prefixes:
|
|
|
if (twobyte && b == 0x01 && modrm_reg == 7)
|
|
|
break;
|
|
|
srcmem_common:
|
|
|
+ /*
|
|
|
+ * For instructions with a ModR/M byte, switch to register
|
|
|
+ * access if Mod = 3.
|
|
|
+ */
|
|
|
+ if ((d & ModRM) && modrm_mod == 3) {
|
|
|
+ src.type = OP_REG;
|
|
|
+ break;
|
|
|
+ }
|
|
|
src.type = OP_MEM;
|
|
|
src.ptr = (unsigned long *)cr2;
|
|
|
src.val = 0;
|
|
@@ -893,6 +901,14 @@ done_prefixes:
|
|
|
dst.ptr = (unsigned long *)cr2;
|
|
|
dst.bytes = (d & ByteOp) ? 1 : op_bytes;
|
|
|
dst.val = 0;
|
|
|
+ /*
|
|
|
+ * For instructions with a ModR/M byte, switch to register
|
|
|
+ * access if Mod = 3.
|
|
|
+ */
|
|
|
+ if ((d & ModRM) && modrm_mod == 3) {
|
|
|
+ dst.type = OP_REG;
|
|
|
+ break;
|
|
|
+ }
|
|
|
if (d & BitOp) {
|
|
|
unsigned long mask = ~(dst.bytes * 8 - 1);
|
|
|
|