Wire Sysio Wire Sysion 1.0.0
Loading...
Searching...
No Matches
extF80M_to_f128M.c File Reference
#include <stdbool.h>
#include <stdint.h>
#include "platform.h"
#include "internals.h"
#include "specialize.h"
#include "softfloat.h"
Include dependency graph for extF80M_to_f128M.c:

Go to the source code of this file.

Functions

void extF80M_to_f128M (const extFloat80_t *aPtr, float128_t *zPtr)
 

Function Documentation

◆ extF80M_to_f128M()

void extF80M_to_f128M ( const extFloat80_t * aPtr,
float128_t * zPtr )

Definition at line 55 of file extF80M_to_f128M.c.

56{
57 const struct extFloat80M *aSPtr;
58 uint32_t *zWPtr;
59 uint_fast16_t uiA64;
60 bool sign;
61 int32_t exp;
62 uint64_t sig;
63 struct commonNaN commonNaN;
64 uint32_t uiZ96;
65
66 /*------------------------------------------------------------------------
67 *------------------------------------------------------------------------*/
68 aSPtr = (const struct extFloat80M *) aPtr;
69 zWPtr = (uint32_t *) zPtr;
70 /*------------------------------------------------------------------------
71 *------------------------------------------------------------------------*/
72 uiA64 = aSPtr->signExp;
73 sign = signExtF80UI64( uiA64 );
74 exp = expExtF80UI64( uiA64 );
75 sig = aSPtr->signif;
76 /*------------------------------------------------------------------------
77 *------------------------------------------------------------------------*/
78 zWPtr[indexWord( 4, 0 )] = 0;
79 if ( exp == 0x7FFF ) {
80 if ( sig & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) {
83 return;
84 }
85 uiZ96 = packToF128UI96( sign, 0x7FFF, 0 );
86 goto uiZ;
87 }
88 /*------------------------------------------------------------------------
89 *------------------------------------------------------------------------*/
90 if ( exp ) --exp;
91 if ( ! (sig & UINT64_C( 0x8000000000000000 )) ) {
92 if ( ! sig ) {
93 uiZ96 = packToF128UI96( sign, 0, 0 );
94 goto uiZ;
95 }
96 exp += softfloat_normExtF80SigM( &sig );
97 }
98 /*------------------------------------------------------------------------
99 *------------------------------------------------------------------------*/
100 zWPtr[indexWord( 4, 1 )] = (uint32_t) sig<<17;
101 sig >>= 15;
102 zWPtr[indexWord( 4, 2 )] = sig;
103 if ( exp < 0 ) {
104 zWPtr[indexWordHi( 4 )] = sig>>32;
106 &zWPtr[indexMultiwordHi( 4, 3 )],
107 -exp,
108 &zWPtr[indexMultiwordHi( 4, 3 )]
109 );
110 exp = 0;
111 sig = (uint64_t) zWPtr[indexWordHi( 4 )]<<32;
112 }
113 zWPtr[indexWordHi( 4 )] = packToF128UI96( sign, exp, sig>>32 );
114 return;
115 /*------------------------------------------------------------------------
116 *------------------------------------------------------------------------*/
117 uiZ:
118 zWPtr[indexWord( 4, 3 )] = uiZ96;
119 zWPtr[indexWord( 4, 2 )] = 0;
120 zWPtr[indexWord( 4, 1 )] = 0;
121
122}
#define softfloat_commonNaNToF128M
#define softfloat_extF80MToCommonNaN(aSPtr, zPtr)
Definition specialize.h:318
#define packToF128UI96(sign, exp, sig96)
Definition internals.h:250
#define expExtF80UI64(a64)
Definition internals.h:147
#define signExtF80UI64(a64)
Definition internals.h:146
int softfloat_normExtF80SigM(uint64_t *)
#define indexMultiwordHi(total, n)
#define indexWord(total, n)
#define indexWordHi(total)
#define softfloat_shiftRight96M(aPtr, dist, zPtr)
Definition primitives.h:842
unsigned int uint32_t
Definition stdint.h:126
uint16_t uint_fast16_t
Definition stdint.h:155
#define UINT64_C(val)
Definition stdint.h:284
signed int int32_t
Definition stdint.h:123
unsigned __int64 uint64_t
Definition stdint.h:136
uint64_t signif
uint16_t signExp
Here is the call graph for this function: