48{
51 bool signA;
56 int index;
63
64
65
67 uiA = uA.ui;
71
72
73 if ( expA == 0x1F ) {
74 if ( sigA ) {
76 goto uiZ;
77 }
78 if ( ! signA )
return a;
79 goto invalid;
80 }
81
82
83 if ( signA ) {
84 if ( ! (expA | sigA) )
return a;
85 goto invalid;
86 }
87
88
89 if ( ! expA ) {
90 if ( ! sigA )
return a;
92 expA = normExpSig.exp;
93 sigA = normExpSig.sig;
94 }
95
96
97 expZ = ((expA - 0xF)>>1) + 0xE;
98 expA &= 1;
99 sigA |= 0x0400;
100 index = (sigA>>6 & 0xE) + expA;
103 * (sigA & 0x7F))
104 >>11);
106 if ( expA ) ESqrR0 >>= 1;
109 if ( ! (recipSqrt16 & 0x8000) ) recipSqrt16 = 0x8000;
111 if ( expA ) sigZ >>= 1;
112
113
114 ++sigZ;
115 if ( ! (sigZ & 7) ) {
116 shiftedSigZ = sigZ>>1;
117 negRem = shiftedSigZ * shiftedSigZ;
118 sigZ &= ~1;
119 if ( negRem & 0x8000 ) {
120 sigZ |= 1;
121 } else {
122 if ( negRem ) --sigZ;
123 }
124 }
126
127
128 invalid:
131 uiZ:
132 uZ.ui = uiZ;
133 return uZ.f;
134
135}
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)
const uint16_t softfloat_approxRecipSqrt_1k0s[]
const uint16_t softfloat_approxRecipSqrt_1k1s[]
float16_t softfloat_roundPackToF16(bool, int_fast16_t, uint_fast16_t)
struct exp8_sig16 softfloat_normSubnormalF16Sig(uint_fast16_t)