示例#1
0
文件: builtins.c 项目: Pear0/clang
// CHECK-LABEL: define void @bar(
void bar() {
  float f;
  double d;
  long double ld;

  // LLVM's hex representation of float constants is really unfortunate;
  // basically it does a float-to-double "conversion" and then prints the
  // hex form of that.  That gives us weird artifacts like exponents
  // that aren't numerically similar to the original exponent and
  // significand bit-patterns that are offset by three bits (because
  // the exponent was expanded from 8 bits to 11).
  //
  // 0xAE98 == 1010111010011000
  // 0x15D3 == 1010111010011

  f = __builtin_huge_valf();     // CHECK: float    0x7FF0000000000000
  d = __builtin_huge_val();      // CHECK: double   0x7FF0000000000000
  ld = __builtin_huge_vall();    // CHECK: x86_fp80 0xK7FFF8000000000000000
  f = __builtin_nanf("");        // CHECK: float    0x7FF8000000000000
  d = __builtin_nan("");         // CHECK: double   0x7FF8000000000000
  ld = __builtin_nanl("");       // CHECK: x86_fp80 0xK7FFFC000000000000000
  f = __builtin_nanf("0xAE98");  // CHECK: float    0x7FF815D300000000
  d = __builtin_nan("0xAE98");   // CHECK: double   0x7FF800000000AE98
  ld = __builtin_nanl("0xAE98"); // CHECK: x86_fp80 0xK7FFFC00000000000AE98
  f = __builtin_nansf("");       // CHECK: float    0x7FF4000000000000
  d = __builtin_nans("");        // CHECK: double   0x7FF4000000000000
  ld = __builtin_nansl("");      // CHECK: x86_fp80 0xK7FFFA000000000000000
  f = __builtin_nansf("0xAE98"); // CHECK: float    0x7FF015D300000000
  d = __builtin_nans("0xAE98");  // CHECK: double   0x7FF000000000AE98
  ld = __builtin_nansl("0xAE98");// CHECK: x86_fp80 0xK7FFF800000000000AE98

}
示例#2
0
文件: remainder.c 项目: lhmouse/MCF
static inline long double fpu_remainder(long double x, long double y){
	bool xsign;
	const __MCFCRT_FpuExamine xexam = __MCFCRT_fxam(&xsign, x);
	if(xexam == __MCFCRT_kFpuExamineNaN){
		return x;
	}
	if(xexam == __MCFCRT_kFpuExamineInfinity){
		return __builtin_nansl("0x4D43463A6672656D") + __MCFCRT_fldz();
	}
	bool ysign;
	const __MCFCRT_FpuExamine yexam = __MCFCRT_fxam(&ysign, y);
	if(yexam == __MCFCRT_kFpuExamineNaN){
		return y;
	}
	if(yexam == __MCFCRT_kFpuExamineZero){
		return __builtin_nansl("0x4D43463A6672656D") + __MCFCRT_fldz();
	}
	if(xexam == __MCFCRT_kFpuExamineZero){
		return x;
	}
	if(yexam == __MCFCRT_kFpuExamineInfinity){
		return x;
	}
	bool bits[3];
	return __MCFCRT_fremainder(&bits, x, y);
}
示例#3
0
int main() {
  volatile float a = __builtin_nanf("");
  if (!__builtin_isnan(a)) {
    return 1;
  }
  volatile float b = __builtin_nansf("");
  if (!__builtin_isnan(b)) {
    return 1;
  }
  volatile double c = __builtin_nan("");
  if (!__builtin_isnan(c)) {
    return 1;
  }
  volatile double d = __builtin_nans("");
  if (!__builtin_isnan(d)) {
    return 1;
  }
  volatile long double e = __builtin_nanl("");
  if (!__builtin_isnan(e)) {
    return 1;
  }
  volatile long double f = __builtin_nansl("");
  if (!__builtin_isnan(f)) {
    return 1;
  }
  volatile float g = 0;
  if (__builtin_isnan(g)) {
    return 1;
  }
  volatile double h = 0;
  if (__builtin_isnan(h)) {
    return 1;
  }
  volatile long double i = 0;
  if (__builtin_isnan(i)) {
    return 1;
  }
  return 0;
}
示例#4
0
  result |= retval != 5 || strcmp (buf, "(nil)") != 0;

  retval = swprintf (wbuf, sizeof (wbuf) / sizeof (wbuf[0]),
		     L"%p", (char *) NULL);
  result |= retval != 5 || wcscmp (wbuf, L"(nil)") != 0;

  return result;
}

volatile double qnanval;
volatile long double lqnanval;
/* A sNaN is only guaranteed to be representable in variables with static (or
   thread-local) storage duration.  */
static volatile double snanval = __builtin_nans ("");
static volatile double msnanval = -__builtin_nans ("");
static volatile long double lsnanval = __builtin_nansl ("");
static volatile long double lmsnanval = -__builtin_nansl ("");
volatile double infval;
volatile long double linfval;


static int
F (void)
{
  char buf[80];
  wchar_t wbuf[40];
  int result = 0;

  qnanval = NAN;

  /* The %f and %F arguments are in fact constants, but GCC is
示例#5
0
/* Test extensions to __float128 quiet signaling NaNs.  */
/* { dg-do run { target i?86-*-* x86_64-*-* ia64-*-* } } */
/* { dg-options "-fsignaling-nans" } */
/* { dg-require-effective-target fenv_exceptions } */

#include <fenv.h>
#include <float.h>
#include <stdlib.h>

volatile long double a = __builtin_nansl ("");

int
main (void)
{
#if LDBL_MANT_DIG < 113
  volatile __float128 r = a;
  feclearexcept (FE_INVALID);
  r += 1;
  if (fetestexcept (FE_INVALID))
    abort ();
#endif
  exit (0);
}