]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
sse4_1-roundps-1.c: Remove ASM_SUFFIX define.
authorUros Bizjak <ubizjak@gmail.com>
Wed, 9 Dec 2015 20:28:37 +0000 (21:28 +0100)
committerUros Bizjak <uros@gcc.gnu.org>
Wed, 9 Dec 2015 20:28:37 +0000 (21:28 +0100)
* gcc.target/i386/sse4_1-roundps-1.c: Remove ASM_SUFFIX define.
* gcc.target/i386/sse4_1-roundps-2.c: Ditto.
* gcc.target/i386/sse4_1-roundps-3.c: Ditto.
* gcc.target/i386/sse4_1-roundsd-1.c: Ditto.
* gcc.target/i386/sse4_1-roundsd-2.c: Ditto.
* gcc.target/i386/sse4_1-roundsd-3.c: Ditto.
* gcc.target/i386/sse4_1-roundss-1.c: Ditto.
* gcc.target/i386/sse4_1-roundss-2.c: Ditto.
* gcc.target/i386/sse4_1-roundss-3.c: Ditto.

* gcc.target/i386/sse4_1-round.h (do_round): Fix inline asm statements.
* gcc.target/i386/sse4_1-roundsd-4.c (do_round): Ditto.
* gcc.target/i386/sse4_1-roundss-4.c (do_round): Ditto.

From-SVN: r231475

13 files changed:
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/sse4_1-round.h
gcc/testsuite/gcc.target/i386/sse4_1-roundps-1.c
gcc/testsuite/gcc.target/i386/sse4_1-roundps-2.c
gcc/testsuite/gcc.target/i386/sse4_1-roundps-3.c
gcc/testsuite/gcc.target/i386/sse4_1-roundsd-1.c
gcc/testsuite/gcc.target/i386/sse4_1-roundsd-2.c
gcc/testsuite/gcc.target/i386/sse4_1-roundsd-3.c
gcc/testsuite/gcc.target/i386/sse4_1-roundsd-4.c
gcc/testsuite/gcc.target/i386/sse4_1-roundss-1.c
gcc/testsuite/gcc.target/i386/sse4_1-roundss-2.c
gcc/testsuite/gcc.target/i386/sse4_1-roundss-3.c
gcc/testsuite/gcc.target/i386/sse4_1-roundss-4.c

index 92dca2ebaf91add661a3ebf5f8c39535dfabf765..6663cb16e58a2e275451b62f5e3d659cbafd2c96 100644 (file)
@@ -1,3 +1,21 @@
+2015-12-09  Uros Bizjak  <ubizjak@gmail.com>
+
+       * gcc.target/i386/sse4_1-roundps-1.c: Remove ASM_SUFFIX define.
+       * gcc.target/i386/sse4_1-roundps-2.c: Ditto.
+       * gcc.target/i386/sse4_1-roundps-3.c: Ditto.
+       * gcc.target/i386/sse4_1-roundsd-1.c: Ditto.
+       * gcc.target/i386/sse4_1-roundsd-2.c: Ditto.
+       * gcc.target/i386/sse4_1-roundsd-3.c: Ditto.
+       * gcc.target/i386/sse4_1-roundss-1.c: Ditto.
+       * gcc.target/i386/sse4_1-roundss-2.c: Ditto.
+       * gcc.target/i386/sse4_1-roundss-3.c: Ditto.
+
+2015-12-09  Uros Bizjak  <ubizjak@gmail.com>
+
+       * gcc.target/i386/sse4_1-round.h (do_round): Fix inline asm statements.
+       * gcc.target/i386/sse4_1-roundsd-4.c (do_round): Ditto.
+       * gcc.target/i386/sse4_1-roundss-4.c (do_round): Ditto.
+
 2015-12-08  Maxim Ostapenko  <m.ostapenko@partner.samsung.com>
 
        Backport from mainline.
index 0210ac130b6e0216dedd4902a69f83df47c1895a..dfb0b778cdcf6be1e26c293c577012a31479493e 100644 (file)
@@ -28,7 +28,7 @@ init_round (FP_T *src)
 static FP_T
 do_round (FP_T f, int type)
 {
-  short saved_cw, new_cw, clr_mask;
+  unsigned short saved_cw, new_cw, clr_mask;
   FP_T ret;
 
   if ((type & 4))
@@ -42,16 +42,15 @@ do_round (FP_T f, int type)
       clr_mask = ~0x0C3F;
     }
 
-  __asm__ ("fld" ASM_SUFFIX " %0" : : "m" (*&f));
+  __asm__ ("fnstcw %0" : "=m" (saved_cw));
 
-  __asm__ ("fstcw %0" : "=m" (*&saved_cw));
   new_cw = saved_cw & clr_mask;
   new_cw |= type;
-  __asm__ ("fldcw %0" : : "m" (*&new_cw));
 
-  __asm__ ("frndint\n"
-          "fstp" ASM_SUFFIX " %0\n" : "=m" (*&ret));
-  __asm__ ("fldcw %0" : : "m" (*&saved_cw));
+  __asm__ ("fldcw %2\n\t"
+          "frndint\n\t"
+          "fldcw %3" : "=t" (ret)
+                     : "0" (f), "m" (new_cw), "m" (saved_cw));
   return ret;
 }
 
index 71bc51be23269fe49cb925fd07c41ae65ee8c3d6..fab227869fc4a1762a4c061ef96be33e17b635f3 100644 (file)
@@ -7,7 +7,6 @@
 
 #define VEC_T __m128
 #define FP_T float
-#define ASM_SUFFIX "s"
 
 #define ROUND_INTRIN(x, mode) _mm_ceil_ps(x)
 #define ROUND_MODE _MM_FROUND_CEIL
index 672e92067c8168a9421a87a024ef92aa9de07fa5..405c55d45a4d269fd65f09011220e204082d3e23 100644 (file)
@@ -7,7 +7,6 @@
 
 #define VEC_T __m128
 #define FP_T float
-#define ASM_SUFFIX "s"
 
 #define ROUND_INTRIN _mm_round_ps
 #define ROUND_MODE _MM_FROUND_NINT
index 4bfc1cacc9155e82d36616d558aec1d0a087f708..97485b9586767da3560edc755353cc1ae2493b19 100644 (file)
@@ -7,7 +7,6 @@
 
 #define VEC_T __m128
 #define FP_T float
-#define ASM_SUFFIX "s"
 
 #define ROUND_INTRIN(x, mode) _mm_floor_ps(x)
 #define ROUND_MODE _MM_FROUND_FLOOR
index ae8881cf0f8b89f6b08a03c36d92448896554e9a..e6cec0b9478a3274a839c69adffa49da3c69ac30 100644 (file)
@@ -7,7 +7,6 @@
 
 #define VEC_T __m128d
 #define FP_T double
-#define ASM_SUFFIX "l"
 
 #define ROUND_INTRIN(x, mode) _mm_ceil_sd(x, x)
 #define ROUND_MODE _MM_FROUND_CEIL
index 70679bb07a064be3f952516123d101edd9ea543c..54ca21f8f2cd01c9542caa51ea2431124f18b362 100644 (file)
@@ -7,7 +7,6 @@
 
 #define VEC_T __m128d
 #define FP_T double
-#define ASM_SUFFIX "l"
 
 #define ROUND_INTRIN(x, mode) _mm_round_sd(x, x, mode)
 #define ROUND_MODE _MM_FROUND_NINT
index 81a3f760638c16374a37c29c43bfa8527bbe26c0..a59d6f86e5fac670e7f8f525b0c21e2056d30396 100644 (file)
@@ -7,7 +7,6 @@
 
 #define VEC_T __m128d
 #define FP_T double
-#define ASM_SUFFIX "l"
 
 #define ROUND_INTRIN(x, mode) _mm_floor_sd(x, x)
 #define ROUND_MODE _MM_FROUND_FLOOR
index 124f825021d6218fdcbd29434edd29cdb8d431ba..ff8b09eeba62f771ab3d6802e986c7b9bd91e225 100644 (file)
@@ -36,7 +36,7 @@ init_round (double *src)
 static double
 do_round (double f, int type)
 {
-  short saved_cw, new_cw, clr_mask;
+  unsigned short saved_cw, new_cw, clr_mask;
   double ret;
 
   if ((type & 4))
@@ -50,16 +50,15 @@ do_round (double f, int type)
       clr_mask = ~0x0C3F;
     }
 
-  __asm__ ("fldl %0" : : "m" (*&f));
+  __asm__ ("fnstcw %0" : "=m" (saved_cw));
 
-  __asm__ ("fstcw %0" : "=m" (*&saved_cw));
   new_cw = saved_cw & clr_mask;
   new_cw |= type;
-  __asm__ ("fldcw %0" : : "m" (*&new_cw));
 
-  __asm__ ("frndint\n"
-          "fstpl %0\n" : "=m" (*&ret));
-  __asm__ ("fldcw %0" : : "m" (*&saved_cw));
+  __asm__ ("fldcw %2\n\t"
+          "frndint\n\t"
+          "fldcw %3" : "=t" (ret)
+                     : "0" (f), "m" (new_cw), "m" (saved_cw));
   return ret;
 }
 
index 96dd8a6a76f677804a629e8d128cc3a01a4e76a5..9c20b90ad05e4ee2affc5230ea5ef3eb57555a51 100644 (file)
@@ -7,7 +7,6 @@
 
 #define VEC_T __m128
 #define FP_T float
-#define ASM_SUFFIX "s"
 
 #define ROUND_INTRIN(x, mode) _mm_ceil_ss(x, x)
 #define ROUND_MODE _MM_FROUND_CEIL
index f052c029f7adc7b3d831ccda75cfb1c47f3c33bc..072664e1573e9a0e68055345a488f07790cc9a9f 100644 (file)
@@ -7,7 +7,6 @@
 
 #define VEC_T __m128
 #define FP_T float
-#define ASM_SUFFIX "s"
 
 #define ROUND_INTRIN(x, mode) _mm_round_ss(x, x, mode)
 #define ROUND_MODE _MM_FROUND_NINT
index 0a696b1cfb76f5cf57e093340edfd55d2bd2c278..97c69fdbcb25ffeaab1efcd54d1416336507bac9 100644 (file)
@@ -7,7 +7,6 @@
 
 #define VEC_T __m128
 #define FP_T float
-#define ASM_SUFFIX "s"
 
 #define ROUND_INTRIN(x, mode) _mm_floor_ss(x, x)
 #define ROUND_MODE _MM_FROUND_FLOOR
index 71042d1b77765367b92f53ce37017f28ae28801a..95488908630181827898498216bb2ac0f9f59af7 100644 (file)
@@ -36,7 +36,7 @@ init_round (float *src)
 static float
 do_round (float f, int type)
 {
-  short saved_cw, new_cw, clr_mask;
+  unsigned short saved_cw, new_cw, clr_mask;
   float ret;
 
   if ((type & 4))
@@ -50,16 +50,15 @@ do_round (float f, int type)
       clr_mask = ~0x0C3F;
     }
 
-  __asm__ ("flds %0" : : "m" (*&f));
+  __asm__ ("fnstcw %0" : "=m" (saved_cw));
 
-  __asm__ ("fstcw %0" : "=m" (*&saved_cw));
   new_cw = saved_cw & clr_mask;
   new_cw |= type;
-  __asm__ ("fldcw %0" : : "m" (*&new_cw));
 
-  __asm__ ("frndint\n"
-          "fstps %0\n" : "=m" (*&ret));
-  __asm__ ("fldcw %0" : : "m" (*&saved_cw));
+  __asm__ ("fldcw %2\n\t"
+          "frndint\n\t"
+          "fldcw %3" : "=t" (ret)
+                     : "0" (f), "m" (new_cw), "m" (saved_cw));
   return ret;
 }