2009-12-11 Quentin Neill <quentin.neill@amd.com>
authorSebastian Pop <sebastian.pop@amd.com>
Fri, 11 Dec 2009 20:38:51 +0000 (20:38 +0000)
committerSebastian Pop <sebastian.pop@amd.com>
Fri, 11 Dec 2009 20:38:51 +0000 (20:38 +0000)
gas/testsuite/
* gas/i386/fma4.d: Add test cases.
* gas/i386/fma4.s: Add test cases.
* gas/i386/x86-64-fma4.d: Add test cases.
* gas/i386/x86-64-fma4.s: Add test cases.

opcodes/
* i386-dis.c (get_vex_imm8): Extend logic to apply in all
cases, to avoid fetching ahead for the immediate bytes when
OP_E_memory has already been called.  Fix indentation.

gas/testsuite/ChangeLog
gas/testsuite/gas/i386/fma4.d
gas/testsuite/gas/i386/fma4.s
gas/testsuite/gas/i386/x86-64-fma4.d
gas/testsuite/gas/i386/x86-64-fma4.s
opcodes/ChangeLog
opcodes/i386-dis.c

index ea8c2b52573d944904bceba6d88599eefcd65903..97983b2f2a420ce71789118112adb2c727359c1b 100644 (file)
@@ -1,3 +1,10 @@
+2009-12-11  Quentin Neill  <quentin.neill@amd.com>
+
+       * gas/i386/fma4.d: Add test cases.
+       * gas/i386/fma4.s: Add test cases.
+       * gas/i386/x86-64-fma4.d: Add test cases.
+       * gas/i386/x86-64-fma4.s: Add test cases.
+
 2009-12-07  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR gas/11037
index 8479cf740f786910912ba9d2b06c938522d9f903..8cb5377267d8a5952e12d13cd60e096ad04d5f08 100644 (file)
@@ -10,6 +10,8 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    c4 e3 ed 69 39 60       vfmaddpd \(%ecx\),%ymm6,%ymm2,%ymm7
 [      ]*[a-f0-9]+:    c4 e3 ed 68 fc 60       vfmaddps %ymm4,%ymm6,%ymm2,%ymm7
 [      ]*[a-f0-9]+:    c4 e3 ed 68 39 60       vfmaddps \(%ecx\),%ymm6,%ymm2,%ymm7
+[      ]*[a-f0-9]+:    c4 e3 59 68 6c da 01 30         vfmaddps %xmm3,0x1\(%edx,%ebx,8\),%xmm4,%xmm5
+[      ]*[a-f0-9]+:    c4 e3 49 68 8c 81 80 00 00 00 70        vfmaddps %xmm7,0x80\(%ecx,%eax,4\),%xmm6,%xmm1
 [      ]*[a-f0-9]+:    c4 e3 ed 5d fc 60       vfmaddsubpd %ymm4,%ymm6,%ymm2,%ymm7
 [      ]*[a-f0-9]+:    c4 e3 ed 5d 39 60       vfmaddsubpd \(%ecx\),%ymm6,%ymm2,%ymm7
 [      ]*[a-f0-9]+:    c4 e3 ed 5c fc 60       vfmaddsubps %ymm4,%ymm6,%ymm2,%ymm7
index c1ec47fc4cd6b49530dc688fd5039d35e5a75ed5..8f4c950e1d582e5eefff203bc57ffa76e50b8476 100644 (file)
@@ -8,6 +8,8 @@ _start:
        vfmaddpd (%ecx),%ymm6,%ymm2,%ymm7
        vfmaddps %ymm4,%ymm6,%ymm2,%ymm7
        vfmaddps (%ecx),%ymm6,%ymm2,%ymm7
+       vfmaddps %xmm3,0x01(%edx,%ebx,8),%xmm4,%xmm5
+       vfmaddps %xmm7,0x80(%ecx,%eax,4),%xmm6,%xmm1
        vfmaddsubpd %ymm4,%ymm6,%ymm2,%ymm7
        vfmaddsubpd (%ecx),%ymm6,%ymm2,%ymm7
        vfmaddsubps %ymm4,%ymm6,%ymm2,%ymm7
index 4f7a7c02a55c01329781df3c060faff25fda39b8..35ccddad01dfbd48e8fafd4e4d386685c2b5c9e4 100644 (file)
@@ -10,6 +10,8 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    c4 e3 ed 69 39 60       vfmaddpd \(%rcx\),%ymm6,%ymm2,%ymm7
 [      ]*[a-f0-9]+:    c4 e3 ed 68 fc 60       vfmaddps %ymm4,%ymm6,%ymm2,%ymm7
 [      ]*[a-f0-9]+:    c4 e3 ed 68 39 60       vfmaddps \(%rcx\),%ymm6,%ymm2,%ymm7
+[      ]*[a-f0-9]+:    c4 63 41 68 5c da 01 40         vfmaddps %xmm4,0x1\(%rdx,%rbx,8\),%xmm7,%xmm11
+[      ]*[a-f0-9]+:    c4 e3 49 68 a4 81 80 00 00 00 80        vfmaddps %xmm8,0x80\(%rcx,%rax,4\),%xmm6,%xmm4
 [      ]*[a-f0-9]+:    c4 e3 ed 5d fc 60       vfmaddsubpd %ymm4,%ymm6,%ymm2,%ymm7
 [      ]*[a-f0-9]+:    c4 e3 ed 5d 39 60       vfmaddsubpd \(%rcx\),%ymm6,%ymm2,%ymm7
 [      ]*[a-f0-9]+:    c4 e3 ed 5c fc 60       vfmaddsubps %ymm4,%ymm6,%ymm2,%ymm7
index e6370c96f1dfa014f64bcbb159b8721e97de93a0..df6e3d3fb90a48f9a9651716067710e9a11d7ce8 100644 (file)
@@ -8,6 +8,8 @@ _start:
        vfmaddpd (%rcx),%ymm6,%ymm2,%ymm7
        vfmaddps %ymm4,%ymm6,%ymm2,%ymm7
        vfmaddps (%rcx),%ymm6,%ymm2,%ymm7
+       vfmaddps %xmm4,0x01(%rdx,%rbx,8),%xmm7,%xmm11
+       vfmaddps %xmm8,0x80(%rcx,%rax,4),%xmm6,%xmm4
        vfmaddsubpd %ymm4,%ymm6,%ymm2,%ymm7
        vfmaddsubpd (%rcx),%ymm6,%ymm2,%ymm7
        vfmaddsubps %ymm4,%ymm6,%ymm2,%ymm7
index 04d35ff62294ccc0d365bf1be48623d5c8a14a65..8a605d212971c9c3c828141e586029c32b161c0b 100644 (file)
@@ -1,3 +1,9 @@
+2009-12-11  Quentin Neill  <quentin.neill@amd.com>
+
+       * i386-dis.c (get_vex_imm8): Extend logic to apply in all cases,
+       to avoid fetching ahead for the immediate bytes when OP_E_memory
+       has already been called.  Fix indentation.
+
 2009-12-11  Nick Clifton  <nickc@redhat.com>
 
        * Makefile.in: Regenerate.
index 5ecf963c8abcdfd1686d9edaab55c270f01ee428..c73930912dda70aeaca5e19472d199f4db7318dd 100644 (file)
@@ -13717,67 +13717,76 @@ get_vex_imm8 (int sizeflag, int opnum)
     {
       /* There are SIB/displacement bytes.  */
       if ((sizeflag & AFLAG) || address_mode == mode_64bit)
-       {
+        {
          /* 32/64 bit address mode */
-         int base = modrm.rm;
+          int base = modrm.rm;
 
          /* Check SIB byte.  */
-         if (base == 4)
-           {
-             FETCH_DATA (the_info, codep + 1);
-             base = *codep & 7;
-             /* When decoding the third source, don't increase
-                bytes_before_imm as this has already been incremented
-                by one in OP_E_memory while decoding the second
-                source operand.  */
+          if (base == 4)
+            {
+              FETCH_DATA (the_info, codep + 1);
+              base = *codep & 7;
+              /* When decoding the third source, don't increase
+                 bytes_before_imm as this has already been incremented
+                 by one in OP_E_memory while decoding the second
+                 source operand.  */
               if (opnum == 0)
                 bytes_before_imm++;
-           }
-         switch (modrm.mod)
-           {
-           case 0:
-             /* When modrm.rm == 5 or modrm.rm == 4 and base in
-                SIB == 5, there is a 4 byte displacement.  */
-             if (base != 5)
-               /* No displacement. */
-               break;
-           case 2:
-             /* 4 byte displacement.  */
-             bytes_before_imm += 4;
-             break;
-           case 1:
-             /* 1 byte displacement: when decoding the third source,
-                don't increase bytes_before_imm as this has already
-                been incremented by one in OP_E_memory while decoding
-                the second source operand.  */
-              if (opnum == 0)
-                bytes_before_imm++;
-
-             break;
-           }
-       }
+            }
+
+          /* Don't increase bytes_before_imm when decoding the third source,
+             it has already been incremented by OP_E_memory while decoding
+             the second source operand.  */
+          if (opnum == 0)
+            {
+              switch (modrm.mod)
+                {
+                  case 0:
+                    /* When modrm.rm == 5 or modrm.rm == 4 and base in
+                       SIB == 5, there is a 4 byte displacement.  */
+                    if (base != 5)
+                      /* No displacement. */
+                      break;
+                  case 2:
+                    /* 4 byte displacement.  */
+                    bytes_before_imm += 4;
+                    break;
+                  case 1:
+                    /* 1 byte displacement.  */
+                    bytes_before_imm++;
+                    break;
+                }
+            }
+        }
       else
-       { /* 16 bit address mode */
-         switch (modrm.mod)
-           {
-           case 0:
-             /* When modrm.rm == 6, there is a 2 byte displacement.  */
-             if (modrm.rm != 6)
-               /* No displacement. */
-               break;
-           case 2:
-             /* 2 byte displacement.  */
-             bytes_before_imm += 2;
-             break;
-           case 1:
-             /* 1 byte displacement: when decoding the third source,
-                don't increase bytes_before_imm as this has already
-                been incremented by one in OP_E_memory while decoding
-                the second source operand.  */
-              if (opnum == 0)
-                bytes_before_imm++;
+       {
+         /* 16 bit address mode */
+          /* Don't increase bytes_before_imm when decoding the third source,
+             it has already been incremented by OP_E_memory while decoding
+             the second source operand.  */
+          if (opnum == 0)
+            {
+             switch (modrm.mod)
+               {
+               case 0:
+                 /* When modrm.rm == 6, there is a 2 byte displacement.  */
+                 if (modrm.rm != 6)
+                   /* No displacement. */
+                   break;
+               case 2:
+                 /* 2 byte displacement.  */
+                 bytes_before_imm += 2;
+                 break;
+               case 1:
+                 /* 1 byte displacement: when decoding the third source,
+                    don't increase bytes_before_imm as this has already
+                    been incremented by one in OP_E_memory while decoding
+                    the second source operand.  */
+                 if (opnum == 0)
+                   bytes_before_imm++;
 
-             break;
+                 break;
+               }
            }
        }
     }