From 26dd9766757895c04b33a89865e3886f18146332 Mon Sep 17 00:00:00 2001 From: Yousong Zhou Date: Sat, 24 Feb 2018 13:45:25 +0800 Subject: [PATCH] disas: fix compilation failure when isnan is a macro --- disas/libvixl/vixl/utils.h | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) --- a/disas/libvixl/vixl/utils.h +++ b/disas/libvixl/vixl/utils.h @@ -118,11 +118,17 @@ double double_pack(uint64_t sign, uint64 // An fpclassify() function for 16-bit half-precision floats. int float16classify(float16 value); +#ifdef isnan +#define isnan_ isnan +#else +#define isnan_ std::isnan +#endif + // NaN tests. inline bool IsSignallingNaN(double num) { const uint64_t kFP64QuietNaNMask = UINT64_C(0x0008000000000000); uint64_t raw = double_to_rawbits(num); - if (std::isnan(num) && ((raw & kFP64QuietNaNMask) == 0)) { + if (isnan_(num) && ((raw & kFP64QuietNaNMask) == 0)) { return true; } return false; @@ -132,7 +138,7 @@ inline bool IsSignallingNaN(double num) inline bool IsSignallingNaN(float num) { const uint32_t kFP32QuietNaNMask = 0x00400000; uint32_t raw = float_to_rawbits(num); - if (std::isnan(num) && ((raw & kFP32QuietNaNMask) == 0)) { + if (isnan_(num) && ((raw & kFP32QuietNaNMask) == 0)) { return true; } return false; @@ -148,21 +154,21 @@ inline bool IsSignallingNaN(float16 num) template inline bool IsQuietNaN(T num) { - return std::isnan(num) && !IsSignallingNaN(num); + return isnan_(num) && !IsSignallingNaN(num); } // Convert the NaN in 'num' to a quiet NaN. inline double ToQuietNaN(double num) { const uint64_t kFP64QuietNaNMask = UINT64_C(0x0008000000000000); - VIXL_ASSERT(std::isnan(num)); + VIXL_ASSERT(isnan_(num)); return rawbits_to_double(double_to_rawbits(num) | kFP64QuietNaNMask); } inline float ToQuietNaN(float num) { const uint32_t kFP32QuietNaNMask = 0x00400000; - VIXL_ASSERT(std::isnan(num)); + VIXL_ASSERT(isnan_(num)); return rawbits_to_float(float_to_rawbits(num) | kFP32QuietNaNMask); }