X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=fp16.cpp;h=e8993f9eb153f508516dec4cbd6a2642965d9597;hp=fc5800e4a964855c0cfb00efa29c0c7d96d94a31;hb=6c954b4f0bff0743e13ce6ddcee8bda15b3af234;hpb=645c0e312389d15c6661c152ce9635183e9ca307 diff --git a/fp16.cpp b/fp16.cpp index fc5800e..e8993f9 100644 --- a/fp16.cpp +++ b/fp16.cpp @@ -13,9 +13,9 @@ template inline double fp_upconvert(FP16_INT_T x) { - int sign = x >> (FP16_MANTISSA_BITS + FP16_EXPONENT_BITS); - int exponent = (x & ((1ULL << (FP16_MANTISSA_BITS + FP16_EXPONENT_BITS)) - 1)) >> FP16_MANTISSA_BITS; - unsigned long long mantissa = x & ((1ULL << FP16_MANTISSA_BITS) - 1); + int sign = x.val >> (FP16_MANTISSA_BITS + FP16_EXPONENT_BITS); + int exponent = (x.val & ((1ULL << (FP16_MANTISSA_BITS + FP16_EXPONENT_BITS)) - 1)) >> FP16_MANTISSA_BITS; + unsigned long long mantissa = x.val & ((1ULL << FP16_MANTISSA_BITS) - 1); int sign64; int exponent64; @@ -187,9 +187,11 @@ inline FP16_INT_T fp_downconvert(double x) } } - return (sign16 << (FP16_MANTISSA_BITS + FP16_EXPONENT_BITS)) + FP16_INT_T ret; + ret.val = (sign16 << (FP16_MANTISSA_BITS + FP16_EXPONENT_BITS)) | (exponent16 << FP16_MANTISSA_BITS) | mantissa16; + return ret; } const int FP64_BIAS = 1023;