summaryrefslogtreecommitdiff
path: root/disasm.c
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2012-02-24 21:51:46 -0800
committerH. Peter Anvin <hpa@zytor.com>2012-02-24 21:57:17 -0800
commit4ecd5d79fc18197838852479cff3ffb1abe78e1a (patch)
treed53db43dcbb42b7266c9286243ee8784128f8a53 /disasm.c
parent442a05a8975d53e5e56dd7630ae4480150e5bff4 (diff)
downloadnasm-4ecd5d79fc18197838852479cff3ffb1abe78e1a.tar.gz
nasm-4ecd5d79fc18197838852479cff3ffb1abe78e1a.tar.bz2
nasm-4ecd5d79fc18197838852479cff3ffb1abe78e1a.zip
HLE: Implement the basic mechanism for XACQUIRE/XRELEASE
This implements the mechanism for XACQUIRE/XRELEASE. It does not include the necessary annotations in insns.dat. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'disasm.c')
-rw-r--r--disasm.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/disasm.c b/disasm.c
index 9bedcc7..c2a21fd 100644
--- a/disasm.c
+++ b/disasm.c
@@ -703,6 +703,27 @@ static int matches(const struct itemplate *t, uint8_t *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;