Commit a3507477 by Uros Bizjak Committed by Janis Johnson

re PR target/22576 (ICE with simple factorial program compiled with -ffast-math on gcc 4.0.2)

2005-08-26  Uros Bizjak  <uros@kss-loka.si>

	* gcc.target/i386/builtin-apply-mmx.c: New test.

	PR target/22576
	* gcc.target/i386/pr22576.c: New test.

	PR target/22585
	* gcc.target/i386/pr22585.c: New test.

	PR target/23268
	* gcc.target/i386/pr23268.c: New test.

From-SVN: r104656
parent 0f086e42
2005-09-26 Uros Bizjak <uros@kss-loka.si> 2005-09-26 Uros Bizjak <uros@kss-loka.si>
* gcc.target/i386/builtin-apply-mmx.c: New test.
PR target/22576
* gcc.target/i386/pr22576.c: New test.
PR target/22585
* gcc.target/i386/pr22585.c: New test.
PR target/23268
* gcc.target/i386/pr23268.c: New test.
PR middle-end/23831 PR middle-end/23831
* gcc.dg/vect/pr23831.c: New test. * gcc.dg/vect/pr23831.c: New test.
/* __builtin_apply_args () and __builtin_return () built-in functions does
not function properly when -mmmx is used in compile flags.
__builtin_apply_args () saves all registers that pass arguments to a
function, including %mm0-%mm3, to a memory block, and __builtin_return ()
restores %mm0, from a return memory block, as it can be used as a
function return register. Unfortunatelly, when MMX registers are touched,
i387 FPU switches to MMX mode, and no FP operation is possible until emms
instruction is issued. */
/* This test case is adapted from gcc.dg/builtin-apply4.c. */
/* { dg-do run { xfail "*-*-*" } } */
/* { dg-options "-O2 -mmmx" } */
#include "../../gcc.dg/i386-cpuid.h"
extern void abort (void);
double
foo (double arg)
{
if (arg != 116.0)
abort ();
return arg + 1.0;
}
inline double
bar (double arg)
{
foo (arg);
__builtin_return (__builtin_apply ((void (*)()) foo,
__builtin_apply_args (), 16));
}
int
main (int argc, char **argv)
{
unsigned long cpu_facilities;
cpu_facilities = i386_cpuid ();
if (!(cpu_facilities & bit_MMX))
/* If host has no MMX support, pass. */
return 0;
if (bar (116.0) != 117.0)
abort ();
return 0;
}
/* PR target/22576 */
/* Testcase reduced by Volker Reichelt */
/* { dg-do compile } */
/* { dg-options "-ffast-math" } */
int
foo (long double d)
{
return d == 0;
}
/* PR target/22585 */
/* Testcase reduced by Volker Reichelt */
/* { dg-do compile } */
/* { dg-options "-march=i386 -O -ffast-math" } */
int
foo (long double d, int i)
{
if (d == (long double) i)
return 1;
}
/* PR target/23268 */
/* Testcase reduced by Andrew Pinski */
/* { dg-do compile } */
/* { dg-options "-O1 -ffast-math" } */
int
f (float x)
{
int a, b;
a = __builtin_log (2.f);
b = __builtin_lrint (x);
return (a + b);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment