Wire Sysio Wire Sysion 1.0.0
Loading...
Searching...
No Matches
f128M_to_f32.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 f128M_to_f32.c:

Go to the source code of this file.

Functions

float32_t f128M_to_f32 (const float128_t *aPtr)
 

Function Documentation

◆ f128M_to_f32()

float32_t f128M_to_f32 ( const float128_t * aPtr)

Definition at line 55 of file f128M_to_f32.c.

56{
57 const uint32_t *aWPtr;
58 uint32_t uiA96;
59 bool sign;
60 int32_t exp;
61 uint64_t frac64;
62 struct commonNaN commonNaN;
63 uint32_t uiZ, frac32;
64 union ui32_f32 uZ;
65
66 /*------------------------------------------------------------------------
67 *------------------------------------------------------------------------*/
68 aWPtr = (const uint32_t *) aPtr;
69 uiA96 = aWPtr[indexWordHi( 4 )];
70 sign = signF128UI96( uiA96 );
71 exp = expF128UI96( uiA96 );
72 frac64 =
73 (uint64_t) fracF128UI96( uiA96 )<<32 | aWPtr[indexWord( 4, 2 )]
74 | ((aWPtr[indexWord( 4, 1 )] | aWPtr[indexWord( 4, 0 )]) != 0);
75 /*------------------------------------------------------------------------
76 *------------------------------------------------------------------------*/
77 if ( exp == 0x7FFF ) {
78 if ( frac64 ) {
81 } else {
82 uiZ = packToF32UI( sign, 0xFF, 0 );
83 }
84 goto uiZ;
85 }
86 /*------------------------------------------------------------------------
87 *------------------------------------------------------------------------*/
88 frac32 = softfloat_shortShiftRightJam64( frac64, 18 );
89 if ( ! (exp | frac32) ) {
90 uiZ = packToF32UI( sign, 0, 0 );
91 goto uiZ;
92 }
93 /*------------------------------------------------------------------------
94 *------------------------------------------------------------------------*/
95 exp -= 0x3F81;
96 if ( sizeof (int_fast16_t) < sizeof (int32_t) ) {
97 if ( exp < -0x1000 ) exp = -0x1000;
98 }
99 return softfloat_roundPackToF32( sign, exp, frac32 | 0x40000000 );
100 /*------------------------------------------------------------------------
101 *------------------------------------------------------------------------*/
102 uiZ:
103 uZ.ui = uiZ;
104 return uZ.f;
105
106}
#define softfloat_f128MToCommonNaN(aWPtr, zPtr)
Definition specialize.h:369
#define softfloat_commonNaNToF32UI(aPtr)
Definition specialize.h:137
#define fracF128UI96(a96)
Definition internals.h:249
float32_t softfloat_roundPackToF32(bool, int_fast16_t, uint_fast32_t)
#define signF128UI96(a96)
Definition internals.h:247
#define packToF32UI(sign, exp, sig)
Definition internals.h:107
#define expF128UI96(a96)
Definition internals.h:248
#define indexWord(total, n)
#define indexWordHi(total)
uint64_t softfloat_shortShiftRightJam64(uint64_t a, uint_fast8_t dist)
unsigned int uint32_t
Definition stdint.h:126
int16_t int_fast16_t
Definition stdint.h:151
signed int int32_t
Definition stdint.h:123
unsigned __int64 uint64_t
Definition stdint.h:136
Here is the call graph for this function: