41#include "specialize.h"
59 struct exp32_sig64 normExpSig;
88 signZ = signA ^ signB;
91 if ( expA == 0x7FFF ) {
92 if ( sigA &
UINT64_C( 0x7FFFFFFFFFFFFFFF ) )
goto propagateNaN;
93 if ( expB == 0x7FFF ) {
94 if ( sigB &
UINT64_C( 0x7FFFFFFFFFFFFFFF ) )
goto propagateNaN;
99 if ( expB == 0x7FFF ) {
100 if ( sigB &
UINT64_C( 0x7FFFFFFFFFFFFFFF ) )
goto propagateNaN;
105 if ( ! expB ) expB = 1;
106 if ( ! (sigB &
UINT64_C( 0x8000000000000000 )) ) {
108 if ( ! sigA )
goto invalid;
113 expB += normExpSig.exp;
114 sigB = normExpSig.sig;
116 if ( ! expA ) expA = 1;
117 if ( ! (sigA &
UINT64_C( 0x8000000000000000 )) ) {
118 if ( ! sigA )
goto zero;
120 expA += normExpSig.exp;
121 sigA = normExpSig.sig;
125 expZ = expA - expB + 0x3FFF;
137 q = (q64 + 0x80000000)>>32;
143 if ( rem.v64 &
UINT64_C( 0x8000000000000000 ) ) {
147 sigZ = (sigZ<<29) + q;
151 if ( ((q + 1) & 0x3FFFFF) < 2 ) {
156 if ( rem.v64 &
UINT64_C( 0x8000000000000000 ) ) {
163 if ( rem.v64 | rem.v0 ) q |= 1;
167 sigZ = (sigZ<<6) + (q>>23);
190 uiZ0 =
UINT64_C( 0x8000000000000000 );
198 uZ.s.signExp = uiZ64;
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
struct uint128 softfloat_propagateNaNExtF80UI(uint_fast16_t uiA64, uint_fast64_t uiA0, uint_fast16_t uiB64, uint_fast64_t uiB0)
void softfloat_raiseFlags(uint_fast8_t flags)
#define defaultNaNExtF80UI0
#define defaultNaNExtF80UI64
extFloat80_t extF80_div(extFloat80_t a, extFloat80_t b)
#define packToExtF80UI64(sign, exp)
#define expExtF80UI64(a64)
#define signExtF80UI64(a64)
uint32_t softfloat_approxRecip32_1(uint32_t a)
THREAD_LOCAL uint_fast8_t extF80_roundingPrecision
@ softfloat_flag_infinite
struct uint128 softfloat_add128(uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0)
bool softfloat_le128(uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0)
struct uint128 softfloat_mul64ByShifted32To128(uint64_t a, uint32_t b)
struct exp32_sig64 softfloat_normSubnormalExtF80Sig(uint_fast64_t sig)
extFloat80_t softfloat_roundPackToExtF80(bool sign, int_fast32_t exp, uint_fast64_t sig, uint_fast64_t sigExtra, uint_fast8_t roundingPrecision)
struct uint128 softfloat_shortShiftLeft128(uint64_t a64, uint64_t a0, uint_fast8_t dist)
struct uint128 softfloat_sub128(uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0)
unsigned __int64 uint64_t