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 rint(double x)8double rint (double x) { 9 double retval = 0.0; 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 float temp; 16 __asm__ __volatile__ ( 17 "vcvtr.s32.f64 %[tmp], %[src]\n\t" 18 "vcvt.f64.s32 %[dst], %[tmp]\n\t" 19 : [dst] "=w" (retval), [tmp] "=t" (temp) : [src] "w" (x)); 20 #elif defined(__aarch64__) || defined(_ARM64_) 21 __asm__ __volatile__ ("frintx %d0, %d1\n\t" : "=w" (retval) : "w" (x)); 22 #endif 23 return retval; 24 } 25