include/opcode/ChangeLog:
authorMark Kettenis <kettenis@gnu.org>
Tue, 12 Apr 2005 17:12:33 +0000 (17:12 +0000)
committerMark Kettenis <kettenis@gnu.org>
Tue, 12 Apr 2005 17:12:33 +0000 (17:12 +0000)
* i386.h (i386_optab): Mark VIA PadLock instructions as ImmExt and
adjust them accordingly.
gas/ChangeLog:
* config/tc-i386.c (output_insn): Handle VIA PadLock instructions
similar to other instructions now that they're marked as ImmExt.

gas/ChangeLog
gas/config/tc-i386.c
include/opcode/ChangeLog
include/opcode/i386.h

index d79bea348f641a002ec33fbafc21c04f96d2f6c2..d756de33f58d928b35bc419bf631659a9039602e 100644 (file)
@@ -1,3 +1,8 @@
+2005-04-12  Mark Kettenis  <kettenis@gnu.org>
+
+       * config/tc-i386.c (output_insn): Handle VIA PadLock instructions
+       similar to other instructions now that they're marked as ImmExt.
+
 2005-04-12  Nick Clifton  <nickc@redhat.com>
 
        * hash.c (DEFAULT_SIZE): Delete.  Replace with:
index 83e25670bba7646529ccac9d88f16f20b7877d00..6aeb827a19af7c65213406cf9d7cb9024e741420 100644 (file)
@@ -3320,23 +3320,23 @@ output_insn ()
       char *p;
       unsigned char *q;
 
-      /* All opcodes on i386 have either 1 or 2 bytes, PadLock instructions
-        have 3 bytes.  We may use one more higher byte to specify a prefix
-        the instruction requires.  */
-      if ((i.tm.cpu_flags & CpuPadLock) != 0
-         && (i.tm.base_opcode & 0xff000000) != 0)
-        {
-         unsigned int prefix;
-         prefix = (i.tm.base_opcode >> 24) & 0xff;
-
-         if (prefix != REPE_PREFIX_OPCODE
-             || i.prefix[LOCKREP_PREFIX] != REPE_PREFIX_OPCODE)
-           add_prefix (prefix);
+      /* All opcodes on i386 have either 1 or 2 bytes.  We may use one
+        more higher byte to specify a prefix the instruction
+        requires.  */
+      if ((i.tm.base_opcode & 0xff0000) != 0)
+       {
+         if ((i.tm.cpu_flags & CpuPadLock) != 0)
+           {
+             unsigned int prefix;
+             prefix = (i.tm.base_opcode >> 16) & 0xff;
+
+             if (prefix != REPE_PREFIX_OPCODE
+                 || i.prefix[LOCKREP_PREFIX] != REPE_PREFIX_OPCODE)
+               add_prefix (prefix);
+           }
+         else
+           add_prefix ((i.tm.base_opcode >> 16) & 0xff);
        }
-      else
-       if ((i.tm.cpu_flags & CpuPadLock) == 0
-           && (i.tm.base_opcode & 0xff0000) != 0)
-         add_prefix ((i.tm.base_opcode >> 16) & 0xff);
 
       /* The prefix bytes.  */
       for (q = i.prefix;
@@ -3357,13 +3357,7 @@ output_insn ()
        }
       else
        {
-         if ((i.tm.cpu_flags & CpuPadLock) != 0)
-           {
-             p = frag_more (3);
-             *p++ = (i.tm.base_opcode >> 16) & 0xff;
-           }
-         else
-           p = frag_more (2);
+         p = frag_more (2);
 
          /* Put out high byte first: can't use md_number_to_chars!  */
          *p++ = (i.tm.base_opcode >> 8) & 0xff;
index 175cb41e806b1163a166beb99d12c03151f4022d..75daf1a94c5efac1f61233c29def786f8c49f5fe 100644 (file)
@@ -1,3 +1,8 @@
+2005-04-12  Mark Kettenis  <kettenis@gnu.org>
+
+       * i386.h (i386_optab): Mark VIA PadLock instructions as ImmExt and
+       adjust them accordingly.
+
 2005-04-01  Jan Beulich  <jbeulich@novell.com>
 
        * i386.h (i386_optab): Add rdtscp.
index ca80d0ab8ee13290fe9fca9c0c9b2404dc6f34c7..240acb9cb1cc1cce994548cd38efaa2aba0b3108 100644 (file)
@@ -1378,16 +1378,16 @@ static const template i386_optab[] =
 {"rdtscp",   0, 0x0f01, 0xf9, CpuSledgehammer,NoSuf|ImmExt,    { 0, 0, 0} },
 
 /* VIA PadLock extensions.  */
-{"xstorerng", 0, 0x000fa7c0, X, Cpu686|CpuPadLock, NoSuf|IsString, { 0, 0, 0} },
-{"xcryptecb", 0, 0xf30fa7c8, X, Cpu686|CpuPadLock, NoSuf|IsString, { 0, 0, 0} },
-{"xcryptcbc", 0, 0xf30fa7d0, X, Cpu686|CpuPadLock, NoSuf|IsString, { 0, 0, 0} },
-{"xcryptcfb", 0, 0xf30fa7e0, X, Cpu686|CpuPadLock, NoSuf|IsString, { 0, 0, 0} },
-{"xcryptofb", 0, 0xf30fa7e8, X, Cpu686|CpuPadLock, NoSuf|IsString, { 0, 0, 0} },
-{"montmul",   0, 0xf30fa6c0, X, Cpu686|CpuPadLock, NoSuf|IsString, { 0, 0, 0} },
-{"xsha1",     0, 0xf30fa6c8, X, Cpu686|CpuPadLock, NoSuf|IsString, { 0, 0, 0} },
-{"xsha256",   0, 0xf30fa6d0, X, Cpu686|CpuPadLock, NoSuf|IsString, { 0, 0, 0} },
+{"xstorerng", 0, 0x000fa7, 0xc0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
+{"xcryptecb", 0, 0xf30fa7, 0xc8, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
+{"xcryptcbc", 0, 0xf30fa7, 0xd0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
+{"xcryptcfb", 0, 0xf30fa7, 0xe0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
+{"xcryptofb", 0, 0xf30fa7, 0xe8, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
+{"montmul",   0, 0xf30fa6, 0xc0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
+{"xsha1",     0, 0xf30fa6, 0xc8, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
+{"xsha256",   0, 0xf30fa6, 0xd0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
 /* Alias for xstorerng.  */
-{"xstore",    0, 0x000fa7c0, X, Cpu686|CpuPadLock, NoSuf|IsString, { 0, 0, 0} },
+{"xstore",    0, 0x000fa7, 0xc0, Cpu686|CpuPadLock, NoSuf|IsString|ImmExt, { 0, 0, 0} },
 
 /* sentinel */
 {NULL, 0, 0, 0, 0, 0, { 0, 0, 0} }