41#include "specialize.h"
85 if ( sigA || ((expB == 0xFF) && sigB) )
goto propagateNaN_ABC;
86 magBits = expB | sigB;
90 if ( sigB )
goto propagateNaN_ABC;
91 magBits = expA | sigA;
105 if ( ! sigA )
goto zeroProd;
107 expA = normExpSig.
exp;
108 sigA = normExpSig.
sig;
111 if ( ! sigB )
goto zeroProd;
113 expB = normExpSig.
exp;
114 sigB = normExpSig.
sig;
118 expProd = expA + expB - 0x7E;
119 sigA = (sigA | 0x00800000)<<7;
120 sigB = (sigB | 0x00800000)<<7;
122 if ( sigProd <
UINT64_C( 0x2000000000000000 ) ) {
134 expC = normExpSig.
exp;
135 sigC = normExpSig.
sig;
137 sigC = (sigC | 0x00800000)<<6;
140 expDiff = expProd - expC;
141 if ( signProd == signC ) {
144 if ( expDiff <= 0 ) {
155 if ( sigZ < 0x40000000 ) {
167 }
else if ( ! expDiff ) {
169 sig64Z = sigProd - sig64C;
170 if ( ! sig64Z )
goto completeCancellation;
171 if ( sig64Z &
UINT64_C( 0x8000000000000000 ) ) {
182 if ( shiftDist < 0 ) {
194 goto propagateNaN_ZC;
200 if ( expC != 0xFF )
goto uiZ;
201 if ( sigC )
goto propagateNaN_ZC;
202 if ( signProd == signC )
goto uiZ;
213 if ( ! (expC | sigC) && (signProd != signC) ) {
214 completeCancellation:
uint_fast32_t softfloat_propagateNaNF32UI(uint_fast32_t uiA, uint_fast32_t uiB)
void softfloat_raiseFlags(uint_fast8_t flags)
float32_t softfloat_roundPackToF32(bool, int_fast16_t, uint_fast32_t)
struct exp16_sig32 softfloat_normSubnormalF32Sig(uint_fast32_t)
@ softfloat_mulAdd_subProd
#define packToF32UI(sign, exp, sig)
uint64_t softfloat_shortShiftRightJam64(uint64_t a, uint_fast8_t dist)
uint64_t softfloat_shiftRightJam64(uint64_t a, uint_fast32_t dist)
THREAD_LOCAL uint_fast8_t softfloat_roundingMode
#define softfloat_countLeadingZeros64
float32_t softfloat_mulAddF32(uint_fast32_t uiA, uint_fast32_t uiB, uint_fast32_t uiC, uint_fast8_t op)