* an arbitrary value in bits 3..0 (assembled as zero.)
* \2ab - a ModRM, calculated on EA in operand a, with the spare
* field equal to digit b.
+ * \240 - skip this instruction pattern if HLE prefixes present
+ * \241 - instruction takes XRELEASE (F3) with or without lock
+ * \242 - instruction takes XACQUIRE/XRELEASE with or without lock
+ * \243 - instruction takes XACQUIRE/XRELEASE with lock only
* \250..\253 - same as \150..\153, except warn if the 64-bit operand
* is not equal to the truncated and sign-extended 32-bit
* operand; used for 32-bit immediates in 64-bit mode.
*
* t = 0 for VEX (C4/C5), t = 1 for XOP (8F).
*
- * \271 - instruction takes XRELEASE (F3) with or without lock
- * \272 - instruction takes XACQUIRE/XRELEASE with or without lock
- * \273 - instruction takes XACQUIRE/XRELEASE with lock only
* \274..\277 - a signed byte immediate operand, from operand 0..3,
* which is to be extended to the operand size.
* \310 - indicates fixed 16-bit address size, i.e. optional 0x67.
length++;
break;
+ case 0240:
+ if (has_prefix(ins, PPS_REP, P_XACQUIRE) ||
+ has_prefix(ins, PPS_REP, P_XRELEASE))
+ return -1;
+ break;
+
+ case 0241:
+ case 0242:
+ case 0243:
+ hleok = c & 3;
+ break;
+
case4(0250):
length += is_sbyte32(opx) ? 1 : 4;
break;
ins->vex_wlp = *codes++;
break;
- case 0271:
- case 0272:
- case 0273:
- hleok = c & 3;
- break;
-
case4(0274):
length++;
break;
offset++;
break;
+ case4(0240):
+ break;
+
case4(0250):
data = opx->offset;
if (opx->wrt == NO_SEG && opx->segment == NO_SEG &&
break;
}
+ case 0240:
+ break;
+
+ case 0241:
+ if (prefix->rep == 0xF3)
+ drep = P_XRELEASE;
+ break;
+
+ case 0242:
+ if (prefix->rep == 0xF2)
+ drep = P_XACQUIRE;
+ else if (prefix->rep == 0xF3)
+ drep = P_XRELEASE;
+ break;
+
+ case 0243:
+ if (prefix->lock == 0xF0) {
+ if (prefix->rep == 0xF2)
+ drep = P_XACQUIRE;
+ else if (prefix->rep == 0xF3)
+ drep = P_XRELEASE;
+ }
+ break;
+
case4(0250):
if (s_field_for == op1) {
opx->offset = gets8(data);
break;
}
- case 0271:
- if (prefix->rep == 0xF3)
- drep = P_XRELEASE;
- break;
-
- case 0272:
- if (prefix->rep == 0xF2)
- drep = P_XACQUIRE;
- else if (prefix->rep == 0xF3)
- drep = P_XRELEASE;
- break;
-
- case 0273:
- if (prefix->lock == 0xF0) {
- if (prefix->rep == 0xF2)
- drep = P_XACQUIRE;
- else if (prefix->rep == 0xF3)
- drep = P_XRELEASE;
- }
- break;
-
case 0310:
if (asize != 16)
return false;