41#include "specialize.h"
62#ifdef SOFTFLOAT_FAST_DIV32TO16
85 signZ = signA ^ signB;
89 if ( sigA )
goto propagateNaN;
91 if ( sigB )
goto propagateNaN;
97 if ( sigB )
goto propagateNaN;
104 if ( ! (expA | sigA) )
goto invalid;
109 expB = normExpSig.
exp;
110 sigB = normExpSig.
sig;
113 if ( ! sigA )
goto zero;
115 expA = normExpSig.
exp;
116 sigA = normExpSig.
sig;
120 expZ = expA - expB + 0xE;
123#ifdef SOFTFLOAT_FAST_DIV32TO16
130 sigZ = sig32A / sigB;
131 if ( ! (sigZ & 7) ) sigZ |= ((
uint_fast32_t) sigB * sigZ != sig32A);
139 index = sigB>>6 & 0xF;
145 rem = (sigA<<10) - sigZ * sigB;
150 if ( ! (sigZ & 7) ) {
152 rem = (sigA<<10) - sigZ * sigB;
153 if ( rem & 0x8000 ) {
156 if ( rem ) sigZ |= 1;
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
uint_fast16_t softfloat_propagateNaNF16UI(uint_fast16_t uiA, uint_fast16_t uiB)
void softfloat_raiseFlags(uint_fast8_t flags)
float16_t f16_div(float16_t a, float16_t b)
const uint16_t softfloat_approxRecip_1k0s[]
const uint16_t softfloat_approxRecip_1k1s[]
float16_t softfloat_roundPackToF16(bool, int_fast16_t, uint_fast16_t)
struct exp8_sig16 softfloat_normSubnormalF16Sig(uint_fast16_t)
#define packToF16UI(sign, exp, sig)
@ softfloat_flag_infinite