OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.2.2/] [gcc/] [testsuite/] [gcc.dg/] [torture/] [builtin-convert-3.c] - Diff between revs 149 and 154

Only display areas with differences | Details | Blame | View Log

Rev 149 Rev 154
/* Copyright (C) 2004  Free Software Foundation.
/* Copyright (C) 2004  Free Software Foundation.
 
 
   Verify that builtin math functions (with fixed point return types)
   Verify that builtin math functions (with fixed point return types)
   are converted to smaller FP types correctly by the compiler.
   are converted to smaller FP types correctly by the compiler.
 
 
   Written by Kaveh Ghazi, 2004-05-01.  */
   Written by Kaveh Ghazi, 2004-05-01.  */
 
 
/* { dg-do link } */
/* { dg-do link } */
/* { dg-options "-ffast-math" } */
/* { dg-options "-ffast-math" } */
/* { dg-options "-ffast-math -mmacosx-version-min=10.3" { target powerpc-*-darwin* } } */
/* { dg-options "-ffast-math -mmacosx-version-min=10.3" { target powerpc-*-darwin* } } */
/* { dg-options "-ffast-math -std=c99" { target *-*-solaris2* } } */
/* { dg-options "-ffast-math -std=c99" { target *-*-solaris2* } } */
 
 
#include "../builtins-config.h"
#include "../builtins-config.h"
 
 
#define PROTOTYPE1_RET(FN, RET) \
#define PROTOTYPE1_RET(FN, RET) \
  extern RET FN(double); \
  extern RET FN(double); \
  extern RET FN##f(float); \
  extern RET FN##f(float); \
  extern RET FN##l(long double);
  extern RET FN##l(long double);
 
 
/* Test converting math builtins to narrower FP types based on if the
/* Test converting math builtins to narrower FP types based on if the
   argument is a narrower type (perhaps implicitly) cast to a wider
   argument is a narrower type (perhaps implicitly) cast to a wider
   one.  */
   one.  */
#define INNER_CAST1(MATHFN, RET) \
#define INNER_CAST1(MATHFN, RET) \
 PROTOTYPE1_RET (MATHFN, RET); \
 PROTOTYPE1_RET (MATHFN, RET); \
 extern void link_failure_inner_##MATHFN##l_##MATHFN(void); \
 extern void link_failure_inner_##MATHFN##l_##MATHFN(void); \
 extern void link_failure_inner_##MATHFN##l_##MATHFN##f(void); \
 extern void link_failure_inner_##MATHFN##l_##MATHFN##f(void); \
 extern void link_failure_inner_##MATHFN##_##MATHFN##f(void); \
 extern void link_failure_inner_##MATHFN##_##MATHFN##f(void); \
 if (sizeof (long double) > sizeof (double) \
 if (sizeof (long double) > sizeof (double) \
     && MATHFN##l(d1) != MATHFN(d1)) \
     && MATHFN##l(d1) != MATHFN(d1)) \
    link_failure_inner_##MATHFN##l_##MATHFN(); \
    link_failure_inner_##MATHFN##l_##MATHFN(); \
 if (sizeof (long double) > sizeof (float) \
 if (sizeof (long double) > sizeof (float) \
     && MATHFN##l(f1) != MATHFN##f(f1)) \
     && MATHFN##l(f1) != MATHFN##f(f1)) \
    link_failure_inner_##MATHFN##l_##MATHFN##f(); \
    link_failure_inner_##MATHFN##l_##MATHFN##f(); \
 if (sizeof (long double) > sizeof (float) \
 if (sizeof (long double) > sizeof (float) \
     && MATHFN##l((double)f1) != MATHFN##f(f1)) \
     && MATHFN##l((double)f1) != MATHFN##f(f1)) \
    link_failure_inner_##MATHFN##l_##MATHFN##f(); \
    link_failure_inner_##MATHFN##l_##MATHFN##f(); \
 if (sizeof (double) > sizeof (float) \
 if (sizeof (double) > sizeof (float) \
     && MATHFN(f1) != MATHFN##f(f1)) \
     && MATHFN(f1) != MATHFN##f(f1)) \
    link_failure_inner_##MATHFN##_##MATHFN##f()
    link_failure_inner_##MATHFN##_##MATHFN##f()
 
 
void __attribute__ ((__noinline__)) test (double d1, float f1)
void __attribute__ ((__noinline__)) test (double d1, float f1)
{
{
#ifdef __OPTIMIZE__
#ifdef __OPTIMIZE__
#ifdef HAVE_C99_RUNTIME
#ifdef HAVE_C99_RUNTIME
  /* We're converting to implicitly generated C99 functions.  */
  /* We're converting to implicitly generated C99 functions.  */
  INNER_CAST1 (__builtin_lceil, long);
  INNER_CAST1 (__builtin_lceil, long);
  INNER_CAST1 (__builtin_llceil, long long);
  INNER_CAST1 (__builtin_llceil, long long);
  INNER_CAST1 (__builtin_lfloor, long);
  INNER_CAST1 (__builtin_lfloor, long);
  INNER_CAST1 (__builtin_llfloor, long long);
  INNER_CAST1 (__builtin_llfloor, long long);
  INNER_CAST1 (lround, long);
  INNER_CAST1 (lround, long);
  INNER_CAST1 (llround, long long);
  INNER_CAST1 (llround, long long);
  INNER_CAST1 (lrint, long);
  INNER_CAST1 (lrint, long);
  INNER_CAST1 (llrint, long long);
  INNER_CAST1 (llrint, long long);
#endif /* HAVE_C99_RUNTIME */
#endif /* HAVE_C99_RUNTIME */
#endif /* __OPTIMIZE__ */
#endif /* __OPTIMIZE__ */
}
}
 
 
int main (void)
int main (void)
{
{
  test (1, 2);
  test (1, 2);
  return 0;
  return 0;
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.