diff options
Diffstat (limited to 'libhsail-rt/rt/arithmetic.c')
-rw-r--r-- | libhsail-rt/rt/arithmetic.c | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/libhsail-rt/rt/arithmetic.c b/libhsail-rt/rt/arithmetic.c index 3d8e62c7741..80852d58833 100644 --- a/libhsail-rt/rt/arithmetic.c +++ b/libhsail-rt/rt/arithmetic.c @@ -424,18 +424,34 @@ __hsail_fract_f64 (double a) uint32_t __hsail_class_f32 (float a, uint32_t flags) { - return (flags & 0x0001 && isnan (a) && !(*(uint32_t *) &a & 0x40000000)) - || (flags & 0x0002 && isnan (a) && (*(uint32_t *) &a & 0x40000000)) - || (flags & 0x0004 && isinf (a) && a < 0.0f) - || (flags & 0x0008 && isnormal (a) && signbit (a)) - || (flags & 0x0010 && a < 0.0f && a > -FLT_MIN) - || (flags & 0x0020 && a == 0.0f && signbit (a)) - || (flags & 0x0040 && a == 0.0f && !signbit (a)) - || (flags & 0x0080 && a > 0.0f && a < FLT_MIN) - || (flags & 0x0100 && isnormal (a) && !signbit (a)) - || (flags & 0x0200 && isinf (a) && a >= 0.0f); + return (flags & 0x0001 && isnan (a) && !(*(uint32_t *) &a & (1ul << 22))) + || (flags & 0x0002 && isnan (a) && (*(uint32_t *) &a & (1ul << 22))) + || (flags & 0x0004 && isinf (a) && a < 0.0f) + || (flags & 0x0008 && isnormal (a) && signbit (a)) + || (flags & 0x0010 && a < 0.0f && a > -FLT_MIN) + || (flags & 0x0020 && a == 0.0f && signbit (a)) + || (flags & 0x0040 && a == 0.0f && !signbit (a)) + || (flags & 0x0080 && a > 0.0f && a < FLT_MIN) + || (flags & 0x0100 && isnormal (a) && !signbit (a)) + || (flags & 0x0200 && isinf (a) && a >= 0.0f); } +uint32_t +__hsail_class_f64 (double a, uint32_t flags) +{ + return (flags & 0x0001 && isnan (a) && !(*(uint64_t *) &a & (1ul << 51))) + || (flags & 0x0002 && isnan (a) && (*(uint64_t *) &a & (1ul << 51))) + || (flags & 0x0004 && isinf (a) && a < 0.0f) + || (flags & 0x0008 && isnormal (a) && signbit (a)) + || (flags & 0x0010 && a < 0.0f && a > -FLT_MIN) + || (flags & 0x0020 && a == 0.0f && signbit (a)) + || (flags & 0x0040 && a == 0.0f && !signbit (a)) + || (flags & 0x0080 && a > 0.0f && a < FLT_MIN) + || (flags & 0x0100 && isnormal (a) && !signbit (a)) + || (flags & 0x0200 && isinf (a) && a >= 0.0f); +} + + /* 'class' for a f32-converted f16 which should otherwise be treated like f32 except for its limits. */ |