* 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
+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.
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))
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;
}
#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
#define VEC_T __m128
#define FP_T float
-#define ASM_SUFFIX "s"
#define ROUND_INTRIN _mm_round_ps
#define ROUND_MODE _MM_FROUND_NINT
#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
#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
#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
#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
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))
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;
}
#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
#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
#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
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))
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;
}