41#include "specialize.h"
44#ifdef SOFTFLOAT_FAST_INT64
91 if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) {
93 if ( expA == 0x7FFF ) {
94 if ( expB == 0x7FFF )
goto invalid;
103 if ( ! expB ) expB = 1;
104 if ( ! (x64 &
UINT64_C( 0x8000000000000000 )) ) {
106 if ( ! sigA )
goto invalid;
112 if ( ! expA ) expA = 1;
113 if ( ! (sigA &
UINT64_C( 0x8000000000000000 )) ) {
114 if ( ! sigA )
goto zero;
119 expZ = expA - expB + 0x3FFF;
134 q = (x64 + 0x80000000)>>32;
146 if ( ((q + 1) & 0x3FFFFF) < 2 ) {
165 x64 = ((
uint64_t) qs[0]<<6) + (x64>>32);
167 y[
indexWord( 3, 2 )] = (qs[1]<<3) + (x64>>32);
180 uiZ0 =
UINT64_C( 0x8000000000000000 );
void softfloat_raiseFlags(uint_fast8_t flags)
extFloat80_t extF80_div(extFloat80_t a, extFloat80_t b)
void extF80M_div(const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr)
#define packToExtF80UI64(sign, exp)
#define expExtF80UI64(a64)
void softfloat_invalidExtF80M(struct extFloat80M *)
void softfloat_roundPackMToExtF80M(bool, int32_t, uint32_t *, uint_fast8_t, struct extFloat80M *)
#define signExtF80UI64(a64)
bool softfloat_tryPropagateNaNExtF80M(const struct extFloat80M *, const struct extFloat80M *, struct extFloat80M *)
int softfloat_normExtF80SigM(uint64_t *)
#define indexWordLo(total)
#define indexWord(total, n)
#define indexWordHi(total)
int_fast8_t softfloat_compare96M(const uint32_t *aPtr, const uint32_t *bPtr)
#define softfloat_add96M(aPtr, bPtr, zPtr)
#define softfloat_sub96M(aPtr, bPtr, zPtr)
#define softfloat_remStep96MBy32(remPtr, dist, bPtr, q, zPtr)
void softfloat_shortShiftLeft64To96M(uint64_t a, uint_fast8_t dist, uint32_t *zPtr)
uint32_t softfloat_approxRecip32_1(uint32_t a)
THREAD_LOCAL uint_fast8_t extF80_roundingPrecision
@ softfloat_flag_infinite
unsigned __int64 uint64_t