Changeset 98470 in vbox for trunk/src/libs/softfloat-3e/source
- Timestamp:
- Feb 3, 2023 3:23:02 PM (2 years ago)
- svn:sync-xref-src-repo-rev:
- 155724
- Location:
- trunk/src/libs/softfloat-3e/source
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/libs/softfloat-3e/source/f32_sqrt.c
r94558 r98470 120 120 } 121 121 122 float32_t f32_rsqrt( float32_t a SOFTFLOAT_STATE_DECL_COMMA ) 123 { 124 union ui32_f32 uA; 125 uint_fast32_t uiA; 126 bool signA; 127 int_fast16_t expA; 128 uint_fast32_t sigA, uiZ; 129 struct exp16_sig32 normExpSig; 130 int_fast16_t expZ; 131 uint_fast32_t sigZ; 132 union ui32_f32 uZ; 133 134 /*------------------------------------------------------------------------ 135 *------------------------------------------------------------------------*/ 136 uA.f = a; 137 uiA = uA.ui; 138 signA = signF32UI( uiA ); 139 expA = expF32UI( uiA ); 140 sigA = fracF32UI( uiA ); 141 /*------------------------------------------------------------------------ 142 *------------------------------------------------------------------------*/ 143 if ( expA == 0xFF ) { 144 if ( sigA ) { 145 uiZ = softfloat_propagateNaNF32UI( uiA, 0 SOFTFLOAT_STATE_ARG_COMMA ); 146 goto uiZ; 147 } 148 if ( ! signA ) return a; 149 goto invalid; 150 } 151 /*------------------------------------------------------------------------ 152 *------------------------------------------------------------------------*/ 153 if ( signA ) { 154 if ( ! (expA | sigA) ) return a; 155 goto invalid; 156 } 157 /*------------------------------------------------------------------------ 158 *------------------------------------------------------------------------*/ 159 if ( ! expA ) { 160 if ( ! sigA ) return a; 161 normExpSig = softfloat_normSubnormalF32Sig( sigA ); 162 expA = normExpSig.exp; 163 sigA = normExpSig.sig; 164 } 165 /*------------------------------------------------------------------------ 166 *------------------------------------------------------------------------*/ 167 expZ = 0x7F - ((expA - 0x7F)>>1) - 2; 168 expA &= 1; 169 sigA = (sigA | 0x00800000)<<8; 170 sigZ = softfloat_approxRecipSqrt32_1( expA, sigA ); 171 sigZ >>= 1; 172 173 return softfloat_roundPackToF32( 0, expZ, sigZ SOFTFLOAT_STATE_ARG_COMMA); 174 /*------------------------------------------------------------------------ 175 *------------------------------------------------------------------------*/ 176 invalid: 177 softfloat_raiseFlags( softfloat_flag_invalid SOFTFLOAT_STATE_ARG_COMMA); 178 uiZ = defaultNaNF32UI; 179 uiZ: 180 uZ.ui = uiZ; 181 return uZ.f; 182 183 } -
trunk/src/libs/softfloat-3e/source/include/softfloat.h
r97891 r98470 224 224 float32_t f32_rem( float32_t, float32_t SOFTFLOAT_STATE_DECL_COMMA ); 225 225 float32_t f32_sqrt( float32_t SOFTFLOAT_STATE_DECL_COMMA ); 226 float32_t f32_rsqrt( float32_t SOFTFLOAT_STATE_DECL_COMMA ); 226 227 bool f32_eq( float32_t, float32_t SOFTFLOAT_STATE_DECL_COMMA ); 227 228 bool f32_le( float32_t, float32_t SOFTFLOAT_STATE_DECL_COMMA );
Note:
See TracChangeset
for help on using the changeset viewer.