aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/testsuite/ChangeLog4
-rw-r--r--gas/testsuite/gas/i386/katmai.d2
-rw-r--r--opcodes/ChangeLog5
-rw-r--r--opcodes/i386-dis.c16
4 files changed, 21 insertions, 6 deletions
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index aeb9d1f..63ea475 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2004-03-12 Alan Modra <amodra@bigpond.net.au>
+
+ * gas/i386/katmai.d: Adjust for clflush change.
+
2004-03-08 Andreas Jaeger <aj@suse.de>
* gas/cfi/cfi-s390x-1.d: Adjust offsets.
diff --git a/gas/testsuite/gas/i386/katmai.d b/gas/testsuite/gas/i386/katmai.d
index b1fc77d..0ccdc08 100644
--- a/gas/testsuite/gas/i386/katmai.d
+++ b/gas/testsuite/gas/i386/katmai.d
@@ -165,7 +165,7 @@ Disassembly of section .text:
246: 90 [ ]*nop
247: 90 [ ]*nop
248: 65 [ ]*gs
- 249: 0f [ ]*sfence.*\(bad\).*
+ 249: 0f [ ]*clflush.*\(bad\).*
24a: ae [ ]*scas %es:\(%edi\),%al
24b: ff 00 [ ]*incl \(%eax\)
24d: 00 00 [ ]*add %al,\(%eax\)
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: