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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.target/] [arm/] [fp16-rounding-alt-1.c] - Rev 708

Go to most recent revision | Compare with Previous | Blame | View Log

/* Test intermediate rounding of double to float and then to __fp16, using
   an example of a number that would round differently if it went directly
   from double to __fp16.  */
 
/* { dg-do run } */
/* { dg-options "-mfp16-format=alternative" } */
 
#include <stdlib.h>
 
/* The original double value.  */
#define ORIG 0x1.0020008p0
 
/* The expected (double)((__fp16)((float)ORIG)) value.  */
#define ROUNDED 0x1.0000000p0
 
typedef union u {
  __fp16 f;
  unsigned short h;
} ufh;
 
ufh s = { ORIG };
ufh r = { ROUNDED };
 
double d = ORIG;
 
int
main (void)
{
  ufh x;
 
  /* Test that the rounding is correct for static initializers.  */
  if (s.h != r.h)
    abort ();
 
  /* Test that the rounding is correct for a casted constant expression
     not in a static initializer.  */
  x.f = (__fp16)ORIG;
  if (x.h != r.h)
    abort ();
 
  /* Test that the rounding is correct for a runtime conversion.  */
  x.f = (__fp16)d;
  if (x.h != r.h)
    abort ();
 
  return 0;
}
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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