1 /** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6 #include <math.h> 7 rintf(float x)8float rintf (float x) { 9 float retval = 0.0F; 10 #if defined(_AMD64_) || defined(__x86_64__) || defined(_X86_) || defined(__i386__) 11 __asm__ __volatile__ ("frndint;": "=t" (retval) : "0" (x)); 12 #elif defined(__arm__) || defined(_ARM_) 13 if (isnan(x) || isinf(x)) 14 return x; 15 __asm__ __volatile__ ( 16 "vcvtr.s32.f32 %[dst], %[src]\n\t" 17 "vcvt.f32.s32 %[dst], %[dst]\n\t" 18 : [dst] "=t" (retval) : [src] "w" (x)); 19 #elif defined(__aarch64__) || defined(_ARM64_) 20 __asm__ __volatile__ ("frintx %s0, %s1\n\t" : "=w" (retval) : "w" (x)); 21 #endif 22 return retval; 23 } 24