41#include "specialize.h"
59#ifdef SOFTFLOAT_FAST_DIV64TO32
81 signZ = signA ^ signB;
85 if ( sigA )
goto propagateNaN;
87 if ( sigB )
goto propagateNaN;
93 if ( sigB )
goto propagateNaN;
100 if ( ! (expA | sigA) )
goto invalid;
105 expB = normExpSig.
exp;
106 sigB = normExpSig.
sig;
109 if ( ! sigA )
goto zero;
111 expA = normExpSig.
exp;
112 sigA = normExpSig.
sig;
116 expZ = expA - expB + 0x7E;
119#ifdef SOFTFLOAT_FAST_DIV64TO32
126 sigZ = sig64A / sigB;
127 if ( ! (sigZ & 0x3F) ) sigZ |= ((
uint_fast64_t) sigB * sigZ != sig64A);
140 if ( (sigZ & 0x3F) < 2 ) {
142#ifdef SOFTFLOAT_FAST_INT64
147 if ( rem &
UINT64_C( 0x8000000000000000 ) ) {
150 if ( rem ) sigZ |= 1;
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
uint_fast32_t softfloat_propagateNaNF32UI(uint_fast32_t uiA, uint_fast32_t uiB)
void softfloat_raiseFlags(uint_fast8_t flags)
float32_t f32_div(float32_t a, float32_t b)
float32_t softfloat_roundPackToF32(bool, int_fast16_t, uint_fast32_t)
struct exp16_sig32 softfloat_normSubnormalF32Sig(uint_fast32_t)
#define packToF32UI(sign, exp, sig)
uint32_t softfloat_approxRecip32_1(uint32_t a)
@ softfloat_flag_infinite