aboutsummaryrefslogtreecommitdiff
path: root/opcodes
diff options
context:
space:
mode:
Diffstat (limited to 'opcodes')
-rw-r--r--opcodes/ChangeLog5
-rw-r--r--opcodes/i386-dis.c16
2 files changed, 16 insertions, 5 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 47790f3..545c37b 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,8 @@
+2004-03-12 Alan Modra <amodra@bigpond.net.au>
+
+ * i386-dis.c (grps): Use clflush by default for 0x0fae/7.
+ (OP_E): Twiddle clflush to sfence here.
+
2004-03-08 Nick Clifton <nickc@redhat.com>
* po/de.po: Updated German translation.
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index f9a0a9b..067c750 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -1426,8 +1426,7 @@ static const struct dis386 grps[][8] = {
{ "(bad)", XX, XX, XX },
{ "lfence", None, XX, XX },
{ "mfence", None, XX, XX },
- { "sfence", None, XX, XX },
- /* FIXME: the sfence with memory operand is clflush! */
+ { "clflush", None, XX, XX },
},
/* GRP14 */
{
@@ -3034,9 +3033,16 @@ OP_E (int bytemode, int sizeflag)
used_prefixes |= (prefixes & PREFIX_DATA);
break;
case 0:
- if (!(codep[-2] == 0xAE && codep[-1] == 0xF8 /* sfence */)
- && !(codep[-2] == 0xAE && codep[-1] == 0xF0 /* mfence */)
- && !(codep[-2] == 0xAE && codep[-1] == 0xe8 /* lfence */))
+ if (codep[-2] == 0xAE && codep[-1] == 0xF8)
+ /* sfence */
+ strcpy (obuf + strlen (obuf) - sizeof ("clflush") + 1, "sfence");
+ else if (codep[-2] == 0xAE && codep[-1] == 0xF0)
+ /* mfence */
+ ;
+ else if (codep[-2] == 0xAE && codep[-1] == 0xe8)
+ /* lfence */
+ ;
+ else
BadOp (); /* bad sfence,lea,lds,les,lfs,lgs,lss modrm */
break;
default: