| ... | ... | @@ -1,19 +1,21 @@ |
| 1 | 1 | #include "softfloat_ext.hpp" |
| 2 | #include "zigendian.h" |
| 2 | 3 | |
| 3 | 4 | extern "C" { |
| 4 | | #include "platform.h" |
| 5 | | #include "internals.h" |
| 6 | 5 | #include "softfloat.h" |
| 7 | 6 | } |
| 8 | 7 | |
| 9 | 8 | void f128M_abs(const float128_t *aPtr, float128_t *zPtr) { |
| 10 | | float128_t zero_float; |
| 11 | | ui32_to_f128M(0, &zero_float); |
| 12 | | if (f128M_lt(aPtr, &zero_float)) { |
| 13 | | f128M_sub(&zero_float, aPtr, zPtr); |
| 14 | | } else { |
| 15 | | *zPtr = *aPtr; |
| 16 | | } |
| 9 | // Clear the sign bit. |
| 10 | #if ZIG_BYTE_ORDER == ZIG_LITTLE_ENDIAN |
| 11 | zPtr->v[1] = aPtr->v[1] & ~(UINT64_C(1) << 63); |
| 12 | zPtr->v[0] = aPtr->v[0]; |
| 13 | #elif ZIG_BYTE_ORDER == ZIG_BIG_ENDIAN |
| 14 | zPtr->v[0] = aPtr->v[0] & ~(UINT64_C(1) << 63); |
| 15 | zPtr->v[1] = aPtr->v[1]; |
| 16 | #else |
| 17 | #error Unsupported endian |
| 18 | #endif |
| 17 | 19 | } |
| 18 | 20 | |
| 19 | 21 | void f128M_trunc(const float128_t *aPtr, float128_t *zPtr) { |
| ... | ... | @@ -27,12 +29,21 @@ void f128M_trunc(const float128_t *aPtr, float128_t *zPtr) { |
| 27 | 29 | } |
| 28 | 30 | |
| 29 | 31 | float16_t f16_neg(const float16_t a) { |
| 30 | | union ui16_f16 uZ; |
| 31 | | uZ.ui = a.v ^ (UINT16_C(1) << 15); |
| 32 | | return uZ.f; |
| 32 | union { uint16_t ui; float16_t f; } uA; |
| 33 | // Toggle the sign bit. |
| 34 | uA.ui = a.v ^ (UINT16_C(1) << 15); |
| 35 | return uA.f; |
| 33 | 36 | } |
| 34 | 37 | |
| 35 | 38 | void f128M_neg(const float128_t *aPtr, float128_t *zPtr) { |
| 36 | | zPtr->v[indexWord(2,1)] = aPtr->v[indexWord(2,1)] ^ (UINT64_C(1) << 63); |
| 37 | | zPtr->v[indexWord(2,0)] = aPtr->v[indexWord(2,0)]; |
| 39 | // Toggle the sign bit. |
| 40 | #if ZIG_BYTE_ORDER == ZIG_LITTLE_ENDIAN |
| 41 | zPtr->v[1] = aPtr->v[1] ^ (UINT64_C(1) << 63); |
| 42 | zPtr->v[0] = aPtr->v[0]; |
| 43 | #elif ZIG_BYTE_ORDER == ZIG_BIG_ENDIAN |
| 44 | zPtr->v[0] = aPtr->v[0] ^ (UINT64_C(1) << 63); |
| 45 | zPtr->v[1] = aPtr->v[1]; |
| 46 | #else |
| 47 | #error Unsupported endian |
| 48 | #endif |
| 38 | 49 | } |
| | \ No newline at end of file |