blob: ede510d8484f19173fc349efeee44e6dc9e2cffa [file] [log] [blame]
/* { dg-do run { target { powerpc*-*-linux* } } } */
/* { dg-require-effective-target ppc_float128_sw } */
/* { dg-options "-mvsx -O2" } */
#include <stddef.h>
#include <stdlib.h>
#ifndef TYPE
#define TYPE __float128
#define NAN __builtin_nanq ("")
#define SNAN __builtin_nansq ("")
#else
#define NAN __builtin_nan ("")
#define SNAN __builtin_nans ("")
#endif
extern void check (TYPE a,
TYPE b,
int eq,
int ne,
int lt,
int le,
int gt,
int ge,
int i_lt,
int i_le,
int i_gt,
int i_ge,
int i_lg,
int i_un) __attribute__((__noinline__));
void
check (TYPE a,
TYPE b,
int eq,
int ne,
int lt,
int le,
int gt,
int ge,
int i_lt,
int i_le,
int i_gt,
int i_ge,
int i_lg,
int i_un)
{
if (eq != (a == b))
abort ();
if (ne != (a != b))
abort ();
if (lt != (a < b))
abort ();
if (le != (a <= b))
abort ();
if (gt != (a > b))
abort ();
if (ge != (a >= b))
abort ();
if (i_lt != __builtin_isless (a, b))
abort ();
if (i_le != __builtin_islessequal (a, b))
abort ();
if (i_gt != __builtin_isgreater (a, b))
abort ();
if (i_ge != __builtin_isgreaterequal (a, b))
abort ();
if (i_lg != __builtin_islessgreater (a, b))
abort ();
if (i_un != __builtin_isunordered (a, b))
abort ();
}
int main (void)
{
TYPE one = (TYPE) +1.0;
TYPE two = (TYPE) +2.0;
TYPE pzero = (TYPE) +0.0;
TYPE mzero = (TYPE) -0.0;
TYPE nan = (TYPE) NAN;
TYPE snan = (TYPE) SNAN;
check (one, two, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0);
check (one, one, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0);
check (one, pzero, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0);
check (mzero, pzero, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0);
check (nan, one, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
check (one, nan, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
check (nan, nan, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
check (snan, one, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
check (one, snan, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
check (snan, nan, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
check (nan, snan, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1);
return 0;
}