opcodes/
authorAlan Modra <amodra@gmail.com>
Fri, 12 Mar 2004 07:01:37 +0000 (07:01 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 12 Mar 2004 07:01:37 +0000 (07:01 +0000)
* i386-dis.c (grps): Use clflush by default for 0x0fae/7.
(OP_E): Twiddle clflush to sfence here.

gas/testsuite/
* gas/i386/katmai.d: Adjust for clflush change.

gas/testsuite/ChangeLog
gas/testsuite/gas/i386/katmai.d
opcodes/ChangeLog
opcodes/i386-dis.c

index aeb9d1f337bcbd454904e6b1b89a84f6bb264340..63ea4758d6af51e2991a002e12021e092a88b0cd 100644 (file)
@@ -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.
index b1fc77d86e54324a68a26609f2a0d5df31b98fb4..0ccdc0844d1412bcc182bda4150b0f724d6ac83b 100644 (file)
@@ -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\)
index 47790f36b7f1706e214cbcf53b299714125606e7..545c37b5e00d196b42a773d9431bdfe959005126 100644 (file)
@@ -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.
index f9a0a9b2c45cc85ef70413ca2b5fb1133d618152..067c75020909f77e8f597052217b8577f2e0e327 100644 (file)
@@ -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: