0006-libvixl-cxx-macro-isnan.patch (1818B)
1 --- a/disas/libvixl/vixl/utils.h.orig 2016-11-22 22:36:20.691253883 +0800 2 +++ b/disas/libvixl/vixl/utils.h 2016-11-22 22:55:44.639618185 +0800 3 @@ -118,11 +118,17 @@ double double_pack(uint64_t sign, uint64 4 // An fpclassify() function for 16-bit half-precision floats. 5 int float16classify(float16 value); 6 7 +#ifdef isnan 8 +#define isnan_ isnan 9 +#else 10 +#define isnan_ std::isnan 11 +#endif 12 + 13 // NaN tests. 14 inline bool IsSignallingNaN(double num) { 15 const uint64_t kFP64QuietNaNMask = UINT64_C(0x0008000000000000); 16 uint64_t raw = double_to_rawbits(num); 17 - if (std::isnan(num) && ((raw & kFP64QuietNaNMask) == 0)) { 18 + if (isnan_(num) && ((raw & kFP64QuietNaNMask) == 0)) { 19 return true; 20 } 21 return false; 22 @@ -132,7 +138,7 @@ inline bool IsSignallingNaN(double num) 23 inline bool IsSignallingNaN(float num) { 24 const uint32_t kFP32QuietNaNMask = 0x00400000; 25 uint32_t raw = float_to_rawbits(num); 26 - if (std::isnan(num) && ((raw & kFP32QuietNaNMask) == 0)) { 27 + if (isnan_(num) && ((raw & kFP32QuietNaNMask) == 0)) { 28 return true; 29 } 30 return false; 31 @@ -148,21 +154,21 @@ inline bool IsSignallingNaN(float16 num) 32 33 template <typename T> 34 inline bool IsQuietNaN(T num) { 35 - return std::isnan(num) && !IsSignallingNaN(num); 36 + return isnan_(num) && !IsSignallingNaN(num); 37 } 38 39 40 // Convert the NaN in 'num' to a quiet NaN. 41 inline double ToQuietNaN(double num) { 42 const uint64_t kFP64QuietNaNMask = UINT64_C(0x0008000000000000); 43 - VIXL_ASSERT(std::isnan(num)); 44 + VIXL_ASSERT(isnan_(num)); 45 return rawbits_to_double(double_to_rawbits(num) | kFP64QuietNaNMask); 46 } 47 48 49 inline float ToQuietNaN(float num) { 50 const uint32_t kFP32QuietNaNMask = 0x00400000; 51 - VIXL_ASSERT(std::isnan(num)); 52 + VIXL_ASSERT(isnan_(num)); 53 return rawbits_to_float(float_to_rawbits(num) | kFP32QuietNaNMask); 54 } 55