blob: a86f05b2f172fda6d7696b037a8aecb7369b67e0 [file] [log] [blame]
/* { dg-do compile { target { powerpc*-*-* } } } */
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-options "-mdejagnu-cpu=power8 -O2 -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" } } */