Embedded Artistry libc
C Standard Library Support for Bare-metal Systems
g_Qfmt.c File Reference
#include "gdtoaimp.h"
Include dependency graph for g_Qfmt.c:

Go to the source code of this file.

Functions

char * g_Qfmt (char *buf, void *V, int ndig, unsigned bufsize)
 

Function Documentation

◆ g_Qfmt()

char* g_Qfmt ( char *  buf,
void *  V,
int  ndig,
unsigned  bufsize 
)

Definition at line 59 of file g_Qfmt.c.

61 {
62  static FPI fpi = {113, 1 - 16383 - 113 + 1, 32766 - 16383 - 113 + 1, 1, 0};
63  char *b, *s, *se;
64  ULong bits[4], *L, sign;
65  int decpt, ex, i, mode;
66 
67  if(ndig < 0)
68  {
69  {
70  ndig = 0;
71  }
72  }
73  if(bufsize < (unsigned)ndig + 10)
74  {
75  {
76  return 0;
77  }
78  }
79 
80  L = (ULong*)V;
81  sign = L[_0] & 0x80000000L;
82  bits[3] = L[_0] & 0xffff;
83  bits[2] = L[_1];
84  bits[1] = L[_2];
85  bits[0] = L[_3];
86  b = buf;
87  if((ex = (L[_0] & 0x7fff0000L) >> 16) != 0)
88  {
89  if(ex == 0x7fff)
90  {
91  /* Infinity or NaN */
92  if(bits[0] | bits[1] | bits[2] | bits[3])
93  {
94  {
95  b = strcp(b, "NaN");
96  }
97  }
98  else
99  {
100  b = buf;
101  if(sign)
102  {
103  {
104  *b++ = '-';
105  }
106  }
107  b = strcp(b, "Infinity");
108  }
109  return b;
110  }
111  i = STRTOG_Normal;
112  bits[3] |= 0x10000;
113  }
114  else if(bits[0] | bits[1] | bits[2] | bits[3])
115  {
116  i = STRTOG_Denormal;
117  ex = 1;
118  }
119  else
120  {
121 #ifndef IGNORE_ZERO_SIGN
122  if(sign)
123  {
124  {
125  *b++ = '-';
126  }
127  }
128 #endif
129  *b++ = '0';
130  *b = 0;
131  return b;
132  }
133  ex -= 0x3fff + 112;
134  mode = 2;
135  if(ndig <= 0)
136  {
137  if(bufsize < 48)
138  {
139  {
140  return 0;
141  }
142  }
143  mode = 0;
144  }
145  s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
146  return g__fmt(buf, s, se, decpt, sign);
147 }
char * g__fmt(char *b, char *s, const char *se, int decpt, ULong sign)
Definition: g__fmt.c:46
char * gdtoa(FPI *fpi, int be, ULong *bits, int *kindp, int mode, int ndigits, int *decpt, char **rve)
Definition: gdtoa.c:130
unsigned Long ULong
Definition: gdtoa.h:41
Definition: gdtoa.h:86
#define strcp
Definition: gdtoaimp.h:541

References g__fmt(), gdtoa(), strcp, STRTOG_Denormal, and STRTOG_Normal.