gas/
authorH.J. Lu <hjl.tools@gmail.com>
Sun, 29 Jul 2007 18:27:59 +0000 (18:27 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Sun, 29 Jul 2007 18:27:59 +0000 (18:27 +0000)
2007-07-29  H.J. Lu  <hongjiu.lu@intel.com>

* config/tc-i386.c (check_long_reg): Allow cvtss2si to convert
DWORD memory to Reg64 in Intel synax.
(check_qword_reg): Allow cvtsd2si to convert QWORD memory to
Reg32 in Intel syntax.

gas/testsuite/

2007-07-29  H.J. Lu  <hongjiu.lu@intel.com>

* gas/i386/simd.s: Add tests for cvtss2si/cvtsd2si in Intel
mode.
* gas/i386/x86-64-simd.s: Likewise.

* gas/i386/simd-intel.d: Updated.
* gas/i386/simd.d: Likewise.
* gas/i386/x86-64-simd-intel.d: Likewise.
* gas/i386/x86-64-simd.d: Likewise.

gas/ChangeLog
gas/config/tc-i386.c
gas/testsuite/ChangeLog
gas/testsuite/gas/i386/simd-intel.d
gas/testsuite/gas/i386/simd.d
gas/testsuite/gas/i386/simd.s
gas/testsuite/gas/i386/x86-64-simd-intel.d
gas/testsuite/gas/i386/x86-64-simd.d
gas/testsuite/gas/i386/x86-64-simd.s

index a4e2bb7282cefae86ae7390166a25fed1f39fd04..c99438207ba208ac90c04bd732faabb380c961cb 100644 (file)
@@ -1,3 +1,10 @@
+2007-07-29  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * config/tc-i386.c (check_long_reg): Allow cvtss2si to convert
+       DWORD memory to Reg64 in Intel synax.
+       (check_qword_reg): Allow cvtsd2si to convert QWORD memory to
+       Reg32 in Intel syntax.
+
 2007-07-25  Sterling Augustine  <sterling@tensilica.com>
 
        * config/tc-xtensa.c (xtensa_extui_opcode): New.
index 3d935c1bd8d90a3db88e95897a409438d55dafb5..8b5a97db3a57da4e0662f1cec0ce26e66b53cb8a 100644 (file)
@@ -3164,10 +3164,21 @@ check_long_reg (void)
     else if ((i.types[op] & Reg64) != 0
             && (i.tm.operand_types[op] & (Reg32 | Acc)) != 0)
       {
-       as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
-               register_prefix, i.op[op].regs->reg_name,
-               i.suffix);
-       return 0;
+       if (intel_syntax
+           && i.tm.base_opcode == 0xf30f2d
+           && (i.types[0] & RegXMM) == 0)
+         {
+           /* cvtss2si converts DWORD memory to Reg64.  We want
+              REX byte. */
+           i.suffix = QWORD_MNEM_SUFFIX;
+         }
+       else
+         {
+           as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
+                   register_prefix, i.op[op].regs->reg_name,
+                   i.suffix);
+           return 0;
+         }
       }
   return 1;
 }
@@ -3191,16 +3202,26 @@ check_qword_reg (void)
        return 0;
       }
   /* Warn if the e prefix on a general reg is missing.  */
-    else if (((i.types[op] & Reg16) != 0
-             || (i.types[op] & Reg32) != 0)
+    else if ((i.types[op] & (Reg16 | Reg32)) != 0
             && (i.tm.operand_types[op] & (Reg32 | Acc)) != 0)
       {
        /* Prohibit these changes in the 64bit mode, since the
           lowering is more complicated.  */
-       as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
-               register_prefix, i.op[op].regs->reg_name,
-               i.suffix);
-       return 0;
+       if (intel_syntax
+           && i.tm.base_opcode == 0xf20f2d
+           && (i.types[0] & RegXMM) == 0)
+         {
+           /* cvtsd2si converts QWORD memory to Reg32.  We don't want
+              REX byte. */
+           i.suffix = LONG_MNEM_SUFFIX;
+         }
+       else
+         {
+           as_bad (_("Incorrect register `%s%s' used with `%c' suffix"),
+                   register_prefix, i.op[op].regs->reg_name,
+                   i.suffix);
+           return 0;
+         }
       }
   return 1;
 }
index 572d0cd47813edcd8ad5edf06fd718e5ba76f02a..197934952a0473e9ee8f76d6d96db4da8bdd64b6 100644 (file)
@@ -1,3 +1,14 @@
+2007-07-29  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * gas/i386/simd.s: Add tests for cvtss2si/cvtsd2si in Intel
+       mode.
+       * gas/i386/x86-64-simd.s: Likewise.
+
+       * gas/i386/simd-intel.d: Updated.
+       * gas/i386/simd.d: Likewise.
+       * gas/i386/x86-64-simd-intel.d: Likewise.
+       * gas/i386/x86-64-simd.d: Likewise.
+
 2007-07-28  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR binutils/4835
index a1e5d3d29e05674682c20dc10beb32a1a4584993..b325abd6c31a52c60bfe34fe577633d2710dcfd1 100644 (file)
@@ -70,4 +70,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    f3 0f 51 00             sqrtss xmm0,DWORD PTR \[eax\]
 [      ]*[a-f0-9]+:    f2 0f 5c 00             subsd  xmm0,QWORD PTR \[eax\]
 [      ]*[a-f0-9]+:    f3 0f 5c 00             subss  xmm0,DWORD PTR \[eax\]
+[      ]*[a-f0-9]+:    f3 0f 2d 00             cvtss2si eax,DWORD PTR \[eax\]
+[      ]*[a-f0-9]+:    f2 0f 2d 00             cvtsd2si eax,QWORD PTR \[eax\]
 #pass
index 777607161fce8939610aa7789460cfc4e0f96c44..f05b23ebc53edf452ab150738a2ba3f9150e122c 100644 (file)
@@ -69,4 +69,6 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    f3 0f 51 00             sqrtss \(%eax\),%xmm0
 [      ]*[a-f0-9]+:    f2 0f 5c 00             subsd  \(%eax\),%xmm0
 [      ]*[a-f0-9]+:    f3 0f 5c 00             subss  \(%eax\),%xmm0
+[      ]*[a-f0-9]+:    f3 0f 2d 00             cvtss2si \(%eax\),%eax
+[      ]*[a-f0-9]+:    f2 0f 2d 00             cvtsd2si \(%eax\),%eax
 #pass
index d0861517b7352a4e2e9839c25cfa4b0809ab37c7..b7d41ba87318af864aebad82787687c54541d560 100644 (file)
@@ -63,3 +63,7 @@ _start:
        sqrtss (%eax),%xmm0
        subsd (%eax),%xmm0
        subss (%eax),%xmm0
+
+       .intel_syntax noprefix
+       cvtss2si eax,DWORD PTR [eax]
+       cvtsd2si eax,QWORD PTR [eax]
index 240a88d4e74c11a0da49a377b098bb3f3ea1ffda..33054a33454868db78f7a9e1ddc4833daa4c9ddb 100644 (file)
@@ -74,4 +74,8 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    f3 0f 51 00             sqrtss xmm0,DWORD PTR \[rax\]
 [      ]*[a-f0-9]+:    f2 0f 5c 00             subsd  xmm0,QWORD PTR \[rax\]
 [      ]*[a-f0-9]+:    f3 0f 5c 00             subss  xmm0,DWORD PTR \[rax\]
+[      ]*[a-f0-9]+:    f3 0f 2d 00             cvtss2si eax,DWORD PTR \[rax\]
+[      ]*[a-f0-9]+:    f3 48 0f 2d 00          cvtss2si rax,DWORD PTR \[rax\]
+[      ]*[a-f0-9]+:    f2 0f 2d 00             cvtsd2si eax,QWORD PTR \[rax\]
+[      ]*[a-f0-9]+:    f2 48 0f 2d 00          cvtsd2si rax,QWORD PTR \[rax\]
 #pass
index 278ba2ef6885209b075ca42ef9fbb84facedd0f4..ed621b363501f8298e4a67c7af714c5b114ea6a9 100644 (file)
@@ -73,4 +73,8 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    f3 0f 51 00             sqrtss \(%rax\),%xmm0
 [      ]*[a-f0-9]+:    f2 0f 5c 00             subsd  \(%rax\),%xmm0
 [      ]*[a-f0-9]+:    f3 0f 5c 00             subss  \(%rax\),%xmm0
+[      ]*[a-f0-9]+:    f3 0f 2d 00             cvtss2si \(%rax\),%eax
+[      ]*[a-f0-9]+:    f3 48 0f 2d 00          cvtss2siq \(%rax\),%rax
+[      ]*[a-f0-9]+:    f2 0f 2d 00             cvtsd2si \(%rax\),%eax
+[      ]*[a-f0-9]+:    f2 48 0f 2d 00          cvtsd2siq \(%rax\),%rax
 #pass
index 0fd40ce58a649d2d60e30690e22e99cf3523b45e..9c87f99840b921a375156715128cab98bcd802e5 100644 (file)
@@ -67,3 +67,9 @@ _start:
        sqrtss (%rax),%xmm0
        subsd (%rax),%xmm0
        subss (%rax),%xmm0
+
+       .intel_syntax noprefix
+       cvtss2si eax,DWORD PTR [rax]
+       cvtss2si rax,DWORD PTR [rax]
+       cvtsd2si eax,QWORD PTR [rax]
+       cvtsd2si rax,QWORD PTR [rax]