mirror of git://gcc.gnu.org/git/gcc.git
p8vector-fp.c: New test for floating point scalar operations when...
2013-10-03 Michael Meissner <meissner@linux.vnet.ibm.com> * gcc.target/powerpc/p8vector-fp.c: New test for floating point scalar operations when using -mupper-regs-sf and -mupper-regs-df. * gcc.target/powerpc/ppc-target-1.c: Update tests to allow either VSX scalar operations or the traditional floating point form of the instruction. * gcc.target/powerpc/ppc-target-2.c: Likewise. * gcc.target/powerpc/recip-3.c: Likewise. * gcc.target/powerpc/recip-5.c: Likewise. * gcc.target/powerpc/pr72747.c: Likewise. * gcc.target/powerpc/vsx-builtin-3.c: Likewise. From-SVN: r203800
This commit is contained in:
parent
92fd70fbd1
commit
bbeb455335
|
|
@ -0,0 +1,139 @@
|
|||
/* { dg-do compile { target { powerpc*-*-* } } } */
|
||||
/* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
|
||||
/* { dg-require-effective-target powerpc_p8vector_ok } */
|
||||
/* { dg-options "-mcpu=power8 -O2 -mupper-regs-df -mupper-regs-sf -fno-math-errno" } */
|
||||
|
||||
float abs_sf (float *p)
|
||||
{
|
||||
float f = *p;
|
||||
__asm__ ("# reg %x0" : "+v" (f));
|
||||
return __builtin_fabsf (f);
|
||||
}
|
||||
|
||||
float nabs_sf (float *p)
|
||||
{
|
||||
float f = *p;
|
||||
__asm__ ("# reg %x0" : "+v" (f));
|
||||
return - __builtin_fabsf (f);
|
||||
}
|
||||
|
||||
float neg_sf (float *p)
|
||||
{
|
||||
float f = *p;
|
||||
__asm__ ("# reg %x0" : "+v" (f));
|
||||
return - f;
|
||||
}
|
||||
|
||||
float add_sf (float *p, float *q)
|
||||
{
|
||||
float f1 = *p;
|
||||
float f2 = *q;
|
||||
__asm__ ("# reg %x0, %x1" : "+v" (f1), "+v" (f2));
|
||||
return f1 + f2;
|
||||
}
|
||||
|
||||
float sub_sf (float *p, float *q)
|
||||
{
|
||||
float f1 = *p;
|
||||
float f2 = *q;
|
||||
__asm__ ("# reg %x0, %x1" : "+v" (f1), "+v" (f2));
|
||||
return f1 - f2;
|
||||
}
|
||||
|
||||
float mul_sf (float *p, float *q)
|
||||
{
|
||||
float f1 = *p;
|
||||
float f2 = *q;
|
||||
__asm__ ("# reg %x0, %x1" : "+v" (f1), "+v" (f2));
|
||||
return f1 * f2;
|
||||
}
|
||||
|
||||
float div_sf (float *p, float *q)
|
||||
{
|
||||
float f1 = *p;
|
||||
float f2 = *q;
|
||||
__asm__ ("# reg %x0, %x1" : "+v" (f1), "+v" (f2));
|
||||
return f1 / f2;
|
||||
}
|
||||
|
||||
float sqrt_sf (float *p)
|
||||
{
|
||||
float f = *p;
|
||||
__asm__ ("# reg %x0" : "+v" (f));
|
||||
return __builtin_sqrtf (f);
|
||||
}
|
||||
|
||||
|
||||
double abs_df (double *p)
|
||||
{
|
||||
double d = *p;
|
||||
__asm__ ("# reg %x0" : "+v" (d));
|
||||
return __builtin_fabs (d);
|
||||
}
|
||||
|
||||
double nabs_df (double *p)
|
||||
{
|
||||
double d = *p;
|
||||
__asm__ ("# reg %x0" : "+v" (d));
|
||||
return - __builtin_fabs (d);
|
||||
}
|
||||
|
||||
double neg_df (double *p)
|
||||
{
|
||||
double d = *p;
|
||||
__asm__ ("# reg %x0" : "+v" (d));
|
||||
return - d;
|
||||
}
|
||||
|
||||
double add_df (double *p, double *q)
|
||||
{
|
||||
double d1 = *p;
|
||||
double d2 = *q;
|
||||
__asm__ ("# reg %x0, %x1" : "+v" (d1), "+v" (d2));
|
||||
return d1 + d2;
|
||||
}
|
||||
|
||||
double sub_df (double *p, double *q)
|
||||
{
|
||||
double d1 = *p;
|
||||
double d2 = *q;
|
||||
__asm__ ("# reg %x0, %x1" : "+v" (d1), "+v" (d2));
|
||||
return d1 - d2;
|
||||
}
|
||||
|
||||
double mul_df (double *p, double *q)
|
||||
{
|
||||
double d1 = *p;
|
||||
double d2 = *q;
|
||||
__asm__ ("# reg %x0, %x1" : "+v" (d1), "+v" (d2));
|
||||
return d1 * d2;
|
||||
}
|
||||
|
||||
double div_df (double *p, double *q)
|
||||
{
|
||||
double d1 = *p;
|
||||
double d2 = *q;
|
||||
__asm__ ("# reg %x0, %x1" : "+v" (d1), "+v" (d2));
|
||||
return d1 / d2;
|
||||
}
|
||||
|
||||
double sqrt_df (float *p)
|
||||
{
|
||||
double d = *p;
|
||||
__asm__ ("# reg %x0" : "+v" (d));
|
||||
return __builtin_sqrt (d);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "xsabsdp" } } */
|
||||
/* { dg-final { scan-assembler "xsadddp" } } */
|
||||
/* { dg-final { scan-assembler "xsaddsp" } } */
|
||||
/* { dg-final { scan-assembler "xsdivdp" } } */
|
||||
/* { dg-final { scan-assembler "xsdivsp" } } */
|
||||
/* { dg-final { scan-assembler "xsmuldp" } } */
|
||||
/* { dg-final { scan-assembler "xsmulsp" } } */
|
||||
/* { dg-final { scan-assembler "xsnabsdp" } } */
|
||||
/* { dg-final { scan-assembler "xsnegdp" } } */
|
||||
/* { dg-final { scan-assembler "xssqrtdp" } } */
|
||||
/* { dg-final { scan-assembler "xssqrtsp" } } */
|
||||
/* { dg-final { scan-assembler "xssubdp" } } */
|
||||
/* { dg-final { scan-assembler "xssubsp" } } */
|
||||
Loading…
Reference in New Issue