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

Go to the source code of this file.

Functions

void f32_to_f128M (float32_t a, float128_t *zPtr)
 

Function Documentation

◆ f32_to_f128M()

void f32_to_f128M ( float32_t a,
float128_t * zPtr )

Definition at line 55 of file f32_to_f128M.c.

56{
57 uint32_t *zWPtr;
58 union ui32_f32 uA;
59 uint32_t uiA;
60 bool sign;
61 int_fast16_t exp;
62 uint32_t frac, uiZ64;
63 struct commonNaN commonNaN;
64 uint32_t uiZ96;
65 struct exp16_sig32 normExpSig;
66 uint64_t frac64;
67
68 /*------------------------------------------------------------------------
69 *------------------------------------------------------------------------*/
70 zWPtr = (uint32_t *) zPtr;
71 /*------------------------------------------------------------------------
72 *------------------------------------------------------------------------*/
73 uA.f = a;
74 uiA = uA.ui;
75 sign = signF32UI( uiA );
76 exp = expF32UI( uiA );
77 frac = fracF32UI( uiA );
78 /*------------------------------------------------------------------------
79 *------------------------------------------------------------------------*/
80 uiZ64 = 0;
81 if ( exp == 0xFF ) {
82 if ( frac ) {
85 return;
86 }
87 uiZ96 = packToF128UI96( sign, 0x7FFF, 0 );
88 goto uiZ;
89 }
90 /*------------------------------------------------------------------------
91 *------------------------------------------------------------------------*/
92 if ( ! exp ) {
93 if ( ! frac ) {
94 uiZ96 = packToF128UI96( sign, 0, 0 );
95 goto uiZ;
96 }
97 normExpSig = softfloat_normSubnormalF32Sig( frac );
98 exp = normExpSig.exp - 1;
99 frac = normExpSig.sig;
100 }
101 /*------------------------------------------------------------------------
102 *------------------------------------------------------------------------*/
103 frac64 = (uint64_t) frac<<25;
104 uiZ96 = packToF128UI96( sign, exp + 0x3F80, frac64>>32 );
105 uiZ64 = frac64;
106 uiZ:
107 zWPtr[indexWord( 4, 3 )] = uiZ96;
108 zWPtr[indexWord( 4, 2 )] = uiZ64;
109 zWPtr[indexWord( 4, 1 )] = 0;
110 zWPtr[indexWord( 4, 0 )] = 0;
111
112}
const GenericPointer< typename T::ValueType > T2 T::AllocatorType & a
Definition pointer.h:1181
#define softfloat_commonNaNToF128M
#define softfloat_f32UIToCommonNaN(uiA, zPtr)
Definition specialize.h:131
#define expF32UI(a)
Definition internals.h:105
#define packToF128UI96(sign, exp, sig96)
Definition internals.h:250
struct exp16_sig32 softfloat_normSubnormalF32Sig(uint_fast32_t)
#define fracF32UI(a)
Definition internals.h:106
#define signF32UI(a)
Definition internals.h:104
#define indexWord(total, n)
unsigned int uint32_t
Definition stdint.h:126
int16_t int_fast16_t
Definition stdint.h:151
unsigned __int64 uint64_t
Definition stdint.h:136
int_fast16_t exp
Definition internals.h:111
Here is the call graph for this function: