1 /* Generated by Nim Compiler v1.6.2 */
2 #define NIM_INTBITS 32
3 
4 #include "nimbase.h"
5 #include <string.h>
6 #include <stdio.h>
7 #undef LANGUAGE_C
8 #undef MIPSEB
9 #undef MIPSEL
10 #undef PPC
11 #undef R3000
12 #undef R4000
13 #undef i386
14 #undef linux
15 #undef mips
16 #undef near
17 #undef far
18 #undef powerpc
19 #undef unix
20 #define nimfr_(x, y)
21 #define nimln_(x, y)
22 typedef struct tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw;
23 typedef struct tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg;
24 typedef struct tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw;
25 typedef struct tyObject_MulCmp__tPF4ETaAdtVLNu8l2IurgA tyObject_MulCmp__tPF4ETaAdtVLNu8l2IurgA;
26 typedef struct NimStringDesc NimStringDesc;
27 typedef struct TGenericSeq TGenericSeq;
28 typedef struct tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ;
29 typedef struct tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg;
30 struct tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw {
31 NU64 bits;
32 };
33 struct tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg {
34 NU64 significand;
35 NI32 exponent;
36 };
37 struct tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw {
38 NU64 hi;
39 NU64 lo;
40 };
41 typedef tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw tyArray__YxVLJbmWgWA9aXEi5wDoQhA[619];
42 struct tyObject_MulCmp__tPF4ETaAdtVLNu8l2IurgA {
43 NU64 mul;
44 NU64 cmp;
45 };
46 typedef tyObject_MulCmp__tPF4ETaAdtVLNu8l2IurgA tyArray__9apbx8OXkiOk9cnMKRpy11KQ[25];
47 typedef NIM_CHAR tyArray__38Z69amCaoywES5tRmClBSw[200];
48 typedef NI8 tyArray__k7wgHIN8mKeRF236nmwvnQ[100];
49 typedef NIM_CHAR tyArray__Wfh9bjgBQ4UqJsyISUuDSuA[16];
50 struct TGenericSeq {
51 NI len;
52 NI reserved;
53 };
54 struct NimStringDesc {
55   TGenericSeq Sup;
56 NIM_CHAR data[SEQ_DECL_SIZE];
57 };
58 typedef NIM_CHAR tyArray__eVNFTutn6un5gcq48fQLdg[65];
59 struct tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ {
60 NU32 bits;
61 };
62 struct tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg {
63 NU32 digits;
64 NI32 exponent;
65 };
66 typedef NU64 tyArray__ocdlWeLAycDNOOtB9cadACA[77];
67 static N_INLINE(NI, toChars__systemZdragonbox_672)(NIM_CHAR* buffer, NI bufferLen_0, NF v, NIM_BOOL forceTrailingDotZero);
68 N_LIB_PRIVATE N_NIMCALL(NU64, physicalSignificand__systemZdragonbox_34)(tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw this_0);
69 N_LIB_PRIVATE N_NIMCALL(tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw, constructDouble__systemZdragonbox_31)(NF value);
70 N_LIB_PRIVATE N_NIMCALL(NU64, physicalExponent__systemZdragonbox_37)(tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw this_0);
71 N_LIB_PRIVATE N_NIMCALL(NI, signBit__systemZdragonbox_56)(tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw this_0);
72 static N_INLINE(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg, toDecimal64__systemZdragonbox_336)(NU64 ieeeSignificand, NU64 ieeeExponent);
73 static N_INLINE(void, nimZeroMem)(void* p, NI size);
74 static N_INLINE(void, nimSetMem__systemZmemory_7)(void* a, int v, NI size);
75 static N_INLINE(NIM_BOOL, multipleOfPow2__systemZdragonbox_139)(NU64 value, NI32 e2);
76 static N_INLINE(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg, toDecimal64AsymmetricInterval__systemZdragonbox_195)(NI32 e2);
77 static N_INLINE(NI32, floorLog10ThreeQuartersPow2__systemZdragonbox_88)(NI32 e);
78 static N_INLINE(NI32, floorDivPow2__systemZdragonbox_62)(NI32 x, NI32 n);
79 static N_INLINE(NI32, floorLog2Pow10__systemZdragonbox_70)(NI32 e);
80 static N_INLINE(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw, computePow10__systemZdragonbox_100)(NI32 k);
81 static N_INLINE(NI32, floorLog10Pow2__systemZdragonbox_79)(NI32 e);
82 static N_INLINE(NU32, computeDelta__systemZdragonbox_251)(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw pow10, NI32 betaMinus1);
83 static N_INLINE(NU64, mulShift__systemZdragonbox_291)(NU64 x, tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw y);
84 static N_INLINE(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw, mul128__systemZdragonbox_275)(NU64 a, NU64 b);
85 static N_INLINE(NU32, lo32__systemZdragonbox_265)(NU64 x);
86 static N_INLINE(NU32, hi32__systemZdragonbox_268)(NU64 x);
87 static N_INLINE(NIM_BOOL, isIntegralEndpoint__systemZdragonbox_326)(NU64 twoF, NI32 e2, NI32 minusK);
88 static N_INLINE(NIM_BOOL, multipleOfPow5__systemZdragonbox_150)(NU64 value, NI32 e5);
89 static N_INLINE(NIM_BOOL, mulParity__systemZdragonbox_308)(NU64 twoF, tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw pow10, NI32 betaMinus1);
90 static N_INLINE(NIM_BOOL, isIntegralMidpoint__systemZdragonbox_331)(NU64 twoF, NI32 e2, NI32 minusK);
91 static N_INLINE(NI, formatDigits__systemZdragonbox_548)(NIM_CHAR* buffer, NI bufferLen_0, NI pos, NU64 digits, NI32 decimalExponent, NIM_BOOL forceTrailingDotZero);
92 static N_INLINE(NI32, decimalLength__systemZdragonbox_534)(NU64 v);
93 static N_INLINE(NI32, printDecimalDigitsBackwards__systemZdragonbox_417)(NIM_CHAR* buf, NI bufLen_0, NI pos, NU64 output64);
94 static N_INLINE(NI32, utoa8DigitsSkipTrailingZeros__systemZdragonbox_400)(NIM_CHAR* buf, NI bufLen_0, NI pos, NU32 digits);
95 static N_INLINE(void, utoa2Digits__stdZprivateZdigitsutils_21)(NIM_CHAR* buf, NI bufLen_0, NI pos, NU32 digits);
96 static N_INLINE(NI32, trailingZeros2Digits__stdZprivateZdigitsutils_34)(NU32 digits);
97 N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, setLengthStr)(NimStringDesc* s, NI newLen);
98 N_LIB_PRIVATE N_NIMCALL(void, unsureAsgnRef)(void** dest, void* src);
99 N_LIB_PRIVATE N_NIMCALL(NI, writeFloatToBufferSprintf__systemZformatfloat_59)(NIM_CHAR* buf, NF value);
100 N_LIB_PRIVATE N_NIMCALL(void, writeToBuffer__systemZformatfloat_51)(NIM_CHAR* buf, NCSTRING value);
101 N_LIB_PRIVATE N_NIMCALL(void, addCstringN__systemZformatfloat_5)(NimStringDesc** result, NCSTRING buf, NI buflen);
102 static N_INLINE(NI, float32ToChars__systemZschubfach_387)(NIM_CHAR* buffer, NI bufferLen_0, NF32 v, NIM_BOOL forceTrailingDotZero);
103 N_LIB_PRIVATE N_NIMCALL(NU32, physicalSignificand__systemZschubfach_34)(tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ this_0);
104 N_LIB_PRIVATE N_NIMCALL(tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ, constructSingle__systemZschubfach_31)(NF32 value);
105 N_LIB_PRIVATE N_NIMCALL(NU32, physicalExponent__systemZschubfach_37)(tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ this_0);
106 N_LIB_PRIVATE N_NIMCALL(NI, signBit__systemZschubfach_56)(tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ this_0);
107 static N_INLINE(tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg, toDecimal32__systemZschubfach_142)(NU32 ieeeSignificand, NU32 ieeeExponent);
108 static N_INLINE(NIM_BOOL, multipleOfPow2__systemZschubfach_125)(NU32 value, NI32 e2);
109 static N_INLINE(NI32, floorDivPow2__systemZschubfach_59)(NI32 x, NI32 n);
110 static N_INLINE(NI32, floorLog2Pow10__systemZschubfach_67)(NI32 e);
111 static N_INLINE(NU64, computePow10Single__systemZschubfach_88)(NI32 k);
112 static N_INLINE(NU32, roundToOdd__systemZschubfach_116)(NU64 g, NU32 cp);
113 static N_INLINE(NU32, lo32__systemZschubfach_106)(NU64 x);
114 static N_INLINE(NU32, hi32__systemZschubfach_109)(NU64 x);
115 static N_INLINE(NI, formatDigits__systemZschubfach_286)(NIM_CHAR* buffer, NI bufferLen_0, NI pos, NU32 digits, NI32 decimalExponent, NIM_BOOL forceTrailingDotZero);
116 static N_INLINE(NI32, decimalLength__systemZschubfach_277)(NU32 v);
117 static N_INLINE(NI32, printDecimalDigitsBackwards__systemZschubfach_206)(NIM_CHAR* buf, NI bufLen_0, NI pos, NU32 output);
118 extern NIM_CONST tyArray__YxVLJbmWgWA9aXEi5wDoQhA pow10__systemZdragonbox_105;
119 extern NIM_CONST tyArray__9apbx8OXkiOk9cnMKRpy11KQ mod5__systemZdragonbox_157;
120 extern NIM_CONST tyArray__38Z69amCaoywES5tRmClBSw digits100__stdZprivateZdigitsutils_2;
121 extern NIM_CONST tyArray__k7wgHIN8mKeRF236nmwvnQ trailingZeros100__stdZprivateZdigitsutils_1;
122 extern NIM_CONST tyArray__ocdlWeLAycDNOOtB9cadACA g__systemZschubfach_78;
N_INLINE(void,nimSetMem__systemZmemory_7)123 static N_INLINE(void, nimSetMem__systemZmemory_7)(void* a, int v, NI size) {
124 	void* T1_;
125 	T1_ = (void*)0;
126 	T1_ = memset(a, v, ((size_t) (size)));
127 }
N_INLINE(void,nimZeroMem)128 static N_INLINE(void, nimZeroMem)(void* p, NI size) {
129 	nimSetMem__systemZmemory_7(p, ((int) 0), size);
130 }
N_INLINE(NIM_BOOL,multipleOfPow2__systemZdragonbox_139)131 static N_INLINE(NIM_BOOL, multipleOfPow2__systemZdragonbox_139)(NU64 value, NI32 e2) {
132 	NIM_BOOL result;
133 	NIM_BOOL T1_;
134 {	result = (NIM_BOOL)0;
135 	T1_ = (NIM_BOOL)0;
136 	T1_ = (e2 < ((NI32) 64));
137 	if (!(T1_)) goto LA2_;
138 	T1_ = ((NU64)(value & (NU64)((NU64)((NU64)((NU64)(1ULL) << (NU64)(e2))) - (NU64)(1ULL))) == 0ULL);
139 	LA2_: ;
140 	result = T1_;
141 	goto BeforeRet_;
142 	}BeforeRet_: ;
143 	return result;
144 }
N_INLINE(NI32,floorDivPow2__systemZdragonbox_62)145 static N_INLINE(NI32, floorDivPow2__systemZdragonbox_62)(NI32 x, NI32 n) {
146 	NI32 result;
147 {	result = (NI32)0;
148 	result = (NI32)((NI32)(x) >> (NU32)(n));
149 	goto BeforeRet_;
150 	}BeforeRet_: ;
151 	return result;
152 }
N_INLINE(NI32,floorLog10ThreeQuartersPow2__systemZdragonbox_88)153 static N_INLINE(NI32, floorLog10ThreeQuartersPow2__systemZdragonbox_88)(NI32 e) {
154 	NI32 result;
155 {	result = (NI32)0;
156 	result = floorDivPow2__systemZdragonbox_62((NI32)((NI32)(e * ((NI32) 1262611)) - ((NI32) 524031)), ((NI32) 22));
157 	goto BeforeRet_;
158 	}BeforeRet_: ;
159 	return result;
160 }
N_INLINE(NI32,floorLog2Pow10__systemZdragonbox_70)161 static N_INLINE(NI32, floorLog2Pow10__systemZdragonbox_70)(NI32 e) {
162 	NI32 result;
163 {	result = (NI32)0;
164 	result = floorDivPow2__systemZdragonbox_62((NI32)(e * ((NI32) 1741647)), ((NI32) 19));
165 	goto BeforeRet_;
166 	}BeforeRet_: ;
167 	return result;
168 }
N_INLINE(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw,computePow10__systemZdragonbox_100)169 static N_INLINE(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw, computePow10__systemZdragonbox_100)(NI32 k) {
170 	tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw result;
171 {	nimZeroMem((void*)(&result), sizeof(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw));
172 	result = pow10__systemZdragonbox_105[((NI32)(k - ((NI32) -292)))- 0];
173 	goto BeforeRet_;
174 	}BeforeRet_: ;
175 	return result;
176 }
N_INLINE(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg,toDecimal64AsymmetricInterval__systemZdragonbox_195)177 static N_INLINE(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg, toDecimal64AsymmetricInterval__systemZdragonbox_195)(NI32 e2) {
178 	tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg result;
179 	NI32 minusK;
180 	NI32 betaMinus1;
181 	NI32 T1_;
182 	tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw pow10;
183 	NU64 lowerEndpoint;
184 	NU64 upperEndpoint;
185 	NIM_BOOL lowerEndpointIsInteger;
186 	NIM_BOOL T2_;
187 	NU64 xi;
188 	NU64 zi;
189 	NU64 q;
190 {	nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg));
191 	minusK = floorLog10ThreeQuartersPow2__systemZdragonbox_88(e2);
192 	T1_ = (NI32)0;
193 	T1_ = floorLog2Pow10__systemZdragonbox_70(((NI32)-(minusK)));
194 	betaMinus1 = (NI32)(e2 + T1_);
195 	pow10 = computePow10__systemZdragonbox_100(((NI32)-(minusK)));
196 	lowerEndpoint = (NU64)((NU64)((NU64)((NU64)(pow10.hi) - (NU64)((NU64)((NU64)(pow10.hi) >> (NU64)(((NI32) 54)))))) >> (NU64)((NI32)(((NI32) 11) - betaMinus1)));
197 	upperEndpoint = (NU64)((NU64)((NU64)((NU64)(pow10.hi) + (NU64)((NU64)((NU64)(pow10.hi) >> (NU64)(((NI32) 53)))))) >> (NU64)((NI32)(((NI32) 11) - betaMinus1)));
198 	T2_ = (NIM_BOOL)0;
199 	T2_ = (((NI32) 2) <= e2);
200 	if (!(T2_)) goto LA3_;
201 	T2_ = (e2 <= ((NI32) 3));
202 	LA3_: ;
203 	lowerEndpointIsInteger = T2_;
204 	xi = (NU64)((NU64)(lowerEndpoint) + (NU64)(((NU64) (!(lowerEndpointIsInteger)))));
205 	zi = upperEndpoint;
206 	q = (NU64)((NU64)(zi) / (NU64)(10ULL));
207 	{
208 		if (!((NU64)(xi) <= (NU64)((NU64)((NU64)(q) * (NU64)(10ULL))))) goto LA6_;
209 		nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg));
210 		result.significand = q;
211 		result.exponent = (NI32)(minusK + ((NI32) 1));
212 		goto BeforeRet_;
213 	}
214 	LA6_: ;
215 	q = (NU64)((NU64)((NU64)((NU64)((NU64)((NU64)(pow10.hi) >> (NU64)((NI32)(((NI32) 10) - betaMinus1)))) + (NU64)(1ULL))) / (NU64)(2ULL));
216 	{
217 		if (!(e2 == ((NI32) -77))) goto LA10_;
218 		q -= !(((NU64)((NU64)(q) % (NU64)(2ULL)) == 0ULL));
219 	}
220 	goto LA8_;
221 	LA10_: ;
222 	{
223 		q += ((NU64)(q) < (NU64)(xi));
224 	}
225 	LA8_: ;
226 	nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg));
227 	result.significand = q;
228 	result.exponent = minusK;
229 	goto BeforeRet_;
230 	}BeforeRet_: ;
231 	return result;
232 }
N_INLINE(NI32,floorLog10Pow2__systemZdragonbox_79)233 static N_INLINE(NI32, floorLog10Pow2__systemZdragonbox_79)(NI32 e) {
234 	NI32 result;
235 {	result = (NI32)0;
236 	result = floorDivPow2__systemZdragonbox_62((NI32)(e * ((NI32) 1262611)), ((NI32) 22));
237 	goto BeforeRet_;
238 	}BeforeRet_: ;
239 	return result;
240 }
N_INLINE(NU32,computeDelta__systemZdragonbox_251)241 static N_INLINE(NU32, computeDelta__systemZdragonbox_251)(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw pow10, NI32 betaMinus1) {
242 	NU32 result;
243 {	result = (NU32)0;
244 	result = ((NU32) ((NU64)((NU64)(pow10.hi) >> (NU64)((NI32)(((NI32) 63) - betaMinus1)))));
245 	goto BeforeRet_;
246 	}BeforeRet_: ;
247 	return result;
248 }
N_INLINE(NU32,lo32__systemZdragonbox_265)249 static N_INLINE(NU32, lo32__systemZdragonbox_265)(NU64 x) {
250 	NU32 result;
251 {	result = (NU32)0;
252 	result = ((NU32) (x));
253 	goto BeforeRet_;
254 	}BeforeRet_: ;
255 	return result;
256 }
N_INLINE(NU32,hi32__systemZdragonbox_268)257 static N_INLINE(NU32, hi32__systemZdragonbox_268)(NU64 x) {
258 	NU32 result;
259 {	result = (NU32)0;
260 	result = ((NU32) ((NU64)((NU64)(x) >> (NU64)(((NI) 32)))));
261 	goto BeforeRet_;
262 	}BeforeRet_: ;
263 	return result;
264 }
N_INLINE(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw,mul128__systemZdragonbox_275)265 static N_INLINE(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw, mul128__systemZdragonbox_275)(NU64 a, NU64 b) {
266 	tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw result;
267 	NU64 b00;
268 	NU32 T1_;
269 	NU32 T2_;
270 	NU64 b01;
271 	NU32 T3_;
272 	NU32 T4_;
273 	NU64 b10;
274 	NU32 T5_;
275 	NU32 T6_;
276 	NU64 b11;
277 	NU32 T7_;
278 	NU32 T8_;
279 	NU64 mid1;
280 	NU32 T9_;
281 	NU64 mid2;
282 	NU32 T10_;
283 	NU64 hi;
284 	NU32 T11_;
285 	NU32 T12_;
286 	NU64 lo;
287 	NU32 T13_;
288 	NU32 T14_;
289 {	nimZeroMem((void*)(&result), sizeof(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw));
290 	T1_ = (NU32)0;
291 	T1_ = lo32__systemZdragonbox_265(a);
292 	T2_ = (NU32)0;
293 	T2_ = lo32__systemZdragonbox_265(b);
294 	b00 = (NU64)((NU64)(((NU64) (T1_))) * (NU64)(((NU64) (T2_))));
295 	T3_ = (NU32)0;
296 	T3_ = lo32__systemZdragonbox_265(a);
297 	T4_ = (NU32)0;
298 	T4_ = hi32__systemZdragonbox_268(b);
299 	b01 = (NU64)((NU64)(((NU64) (T3_))) * (NU64)(((NU64) (T4_))));
300 	T5_ = (NU32)0;
301 	T5_ = hi32__systemZdragonbox_268(a);
302 	T6_ = (NU32)0;
303 	T6_ = lo32__systemZdragonbox_265(b);
304 	b10 = (NU64)((NU64)(((NU64) (T5_))) * (NU64)(((NU64) (T6_))));
305 	T7_ = (NU32)0;
306 	T7_ = hi32__systemZdragonbox_268(a);
307 	T8_ = (NU32)0;
308 	T8_ = hi32__systemZdragonbox_268(b);
309 	b11 = (NU64)((NU64)(((NU64) (T7_))) * (NU64)(((NU64) (T8_))));
310 	T9_ = (NU32)0;
311 	T9_ = hi32__systemZdragonbox_268(b00);
312 	mid1 = (NU64)((NU64)(b10) + (NU64)(((NU64) (T9_))));
313 	T10_ = (NU32)0;
314 	T10_ = lo32__systemZdragonbox_265(mid1);
315 	mid2 = (NU64)((NU64)(b01) + (NU64)(((NU64) (T10_))));
316 	T11_ = (NU32)0;
317 	T11_ = hi32__systemZdragonbox_268(mid1);
318 	T12_ = (NU32)0;
319 	T12_ = hi32__systemZdragonbox_268(mid2);
320 	hi = (NU64)((NU64)((NU64)((NU64)(b11) + (NU64)(((NU64) (T11_))))) + (NU64)(((NU64) (T12_))));
321 	T13_ = (NU32)0;
322 	T13_ = lo32__systemZdragonbox_265(b00);
323 	T14_ = (NU32)0;
324 	T14_ = lo32__systemZdragonbox_265(mid2);
325 	lo = (NU64)(((NU64) (T13_)) | (NU64)((NU64)(((NU64) (T14_))) << (NU64)(((NI) 32))));
326 	nimZeroMem((void*)(&result), sizeof(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw));
327 	result.hi = hi;
328 	result.lo = lo;
329 	goto BeforeRet_;
330 	}BeforeRet_: ;
331 	return result;
332 }
N_INLINE(NU64,mulShift__systemZdragonbox_291)333 static N_INLINE(NU64, mulShift__systemZdragonbox_291)(NU64 x, tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw y) {
334 	NU64 result;
335 	tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw p1;
336 	tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw p0;
337 {	result = (NU64)0;
338 	p1 = mul128__systemZdragonbox_275(x, y.hi);
339 	p0 = mul128__systemZdragonbox_275(x, y.lo);
340 	p1.lo += p0.hi;
341 	p1.hi += ((NU64)(p1.lo) < (NU64)(p0.hi));
342 	result = p1.hi;
343 	goto BeforeRet_;
344 	}BeforeRet_: ;
345 	return result;
346 }
N_INLINE(NIM_BOOL,multipleOfPow5__systemZdragonbox_150)347 static N_INLINE(NIM_BOOL, multipleOfPow5__systemZdragonbox_150)(NU64 value, NI32 e5) {
348 	NIM_BOOL result;
349 	tyObject_MulCmp__tPF4ETaAdtVLNu8l2IurgA m5;
350 {	result = (NIM_BOOL)0;
351 	m5 = mod5__systemZdragonbox_157[(e5)- 0];
352 	result = ((NU64)((NU64)((NU64)(value) * (NU64)(m5.mul))) <= (NU64)(m5.cmp));
353 	goto BeforeRet_;
354 	}BeforeRet_: ;
355 	return result;
356 }
N_INLINE(NIM_BOOL,isIntegralEndpoint__systemZdragonbox_326)357 static N_INLINE(NIM_BOOL, isIntegralEndpoint__systemZdragonbox_326)(NU64 twoF, NI32 e2, NI32 minusK) {
358 	NIM_BOOL result;
359 {	result = (NIM_BOOL)0;
360 	{
361 		if (!(e2 < ((NI32) -2))) goto LA3_;
362 		result = NIM_FALSE;
363 		goto BeforeRet_;
364 	}
365 	LA3_: ;
366 	{
367 		if (!(e2 <= ((NI32) 9))) goto LA7_;
368 		result = NIM_TRUE;
369 		goto BeforeRet_;
370 	}
371 	LA7_: ;
372 	{
373 		if (!(e2 <= ((NI32) 86))) goto LA11_;
374 		result = multipleOfPow5__systemZdragonbox_150(twoF, minusK);
375 		goto BeforeRet_;
376 	}
377 	LA11_: ;
378 	result = NIM_FALSE;
379 	goto BeforeRet_;
380 	}BeforeRet_: ;
381 	return result;
382 }
N_INLINE(NIM_BOOL,mulParity__systemZdragonbox_308)383 static N_INLINE(NIM_BOOL, mulParity__systemZdragonbox_308)(NU64 twoF, tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw pow10, NI32 betaMinus1) {
384 	NIM_BOOL result;
385 	NU64 p01;
386 	NU64 p10;
387 	tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw T1_;
388 	NU64 mid;
389 {	result = (NIM_BOOL)0;
390 	p01 = (NU64)((NU64)(twoF) * (NU64)(pow10.hi));
391 	T1_ = mul128__systemZdragonbox_275(twoF, pow10.lo);
392 	p10 = T1_.hi;
393 	mid = (NU64)((NU64)(p01) + (NU64)(p10));
394 	result = !(((NU64)(mid & (NU64)((NU64)(1ULL) << (NU64)((NI32)(((NI32) 64) - betaMinus1)))) == 0ULL));
395 	goto BeforeRet_;
396 	}BeforeRet_: ;
397 	return result;
398 }
N_INLINE(NIM_BOOL,isIntegralMidpoint__systemZdragonbox_331)399 static N_INLINE(NIM_BOOL, isIntegralMidpoint__systemZdragonbox_331)(NU64 twoF, NI32 e2, NI32 minusK) {
400 	NIM_BOOL result;
401 {	result = (NIM_BOOL)0;
402 	{
403 		if (!(e2 < ((NI32) -4))) goto LA3_;
404 		result = multipleOfPow2__systemZdragonbox_139(twoF, (NI32)((NI32)(minusK - e2) + ((NI32) 1)));
405 		goto BeforeRet_;
406 	}
407 	LA3_: ;
408 	{
409 		if (!(e2 <= ((NI32) 9))) goto LA7_;
410 		result = NIM_TRUE;
411 		goto BeforeRet_;
412 	}
413 	LA7_: ;
414 	{
415 		if (!(e2 <= ((NI32) 86))) goto LA11_;
416 		result = multipleOfPow5__systemZdragonbox_150(twoF, minusK);
417 		goto BeforeRet_;
418 	}
419 	LA11_: ;
420 	result = NIM_FALSE;
421 	goto BeforeRet_;
422 	}BeforeRet_: ;
423 	return result;
424 }
N_INLINE(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg,toDecimal64__systemZdragonbox_336)425 static N_INLINE(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg, toDecimal64__systemZdragonbox_336)(NU64 ieeeSignificand, NU64 ieeeExponent) {
426 	tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg result;
427 	NU64 m2;
428 	NI32 e2;
429 	NIM_BOOL isEven;
430 	NIM_BOOL acceptLower;
431 	NIM_BOOL acceptUpper;
432 	NI32 minusK;
433 	NI32 T20_;
434 	NI32 betaMinus1;
435 	NI32 T21_;
436 	tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw pow10;
437 	NU32 delta;
438 	NU64 twoFl;
439 	NU64 twoFc;
440 	NU64 twoFr;
441 	NU64 zi;
442 	NU64 q;
443 	NU32 r;
444 	NU32 dist;
445 	NU32 distQ;
446 {	nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg));
447 	m2 = (NU64)0;
448 	e2 = (NI32)0;
449 	{
450 		if (!!((ieeeExponent == 0ULL))) goto LA3_;
451 		m2 = (NU64)(4503599627370496ULL | ieeeSignificand);
452 		e2 = (NI32)(((NI32) (ieeeExponent)) - ((NI32) 1075));
453 		{
454 			NIM_BOOL T7_;
455 			NIM_BOOL T8_;
456 			T7_ = (NIM_BOOL)0;
457 			T8_ = (NIM_BOOL)0;
458 			T8_ = (((NI32) 0) <= ((NI32)-(e2)));
459 			if (!(T8_)) goto LA9_;
460 			T8_ = (((NI32)-(e2)) < ((NI32) 53));
461 			LA9_: ;
462 			T7_ = T8_;
463 			if (!(T7_)) goto LA10_;
464 			T7_ = multipleOfPow2__systemZdragonbox_139(m2, ((NI32)-(e2)));
465 			LA10_: ;
466 			if (!T7_) goto LA11_;
467 			nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg));
468 			result.significand = (NU64)((NU64)(m2) >> (NU64)(((NI32)-(e2))));
469 			result.exponent = ((NI32) 0);
470 			goto BeforeRet_;
471 		}
472 		LA11_: ;
473 		{
474 			NIM_BOOL T15_;
475 			T15_ = (NIM_BOOL)0;
476 			T15_ = (ieeeSignificand == 0ULL);
477 			if (!(T15_)) goto LA16_;
478 			T15_ = ((NU64)(1ULL) < (NU64)(ieeeExponent));
479 			LA16_: ;
480 			if (!T15_) goto LA17_;
481 			result = toDecimal64AsymmetricInterval__systemZdragonbox_195(e2);
482 			goto BeforeRet_;
483 		}
484 		LA17_: ;
485 	}
486 	goto LA1_;
487 	LA3_: ;
488 	{
489 		m2 = ieeeSignificand;
490 		e2 = ((NI32) -1074);
491 	}
492 	LA1_: ;
493 	isEven = ((NU64)((NU64)(m2) % (NU64)(2ULL)) == 0ULL);
494 	acceptLower = isEven;
495 	acceptUpper = isEven;
496 	T20_ = (NI32)0;
497 	T20_ = floorLog10Pow2__systemZdragonbox_79(e2);
498 	minusK = (NI32)(T20_ - ((NI32) 2));
499 	T21_ = (NI32)0;
500 	T21_ = floorLog2Pow10__systemZdragonbox_70(((NI32)-(minusK)));
501 	betaMinus1 = (NI32)(e2 + T21_);
502 	pow10 = computePow10__systemZdragonbox_100(((NI32)-(minusK)));
503 	delta = computeDelta__systemZdragonbox_251(pow10, betaMinus1);
504 	twoFl = (NU64)((NU64)((NU64)((NU64)(2ULL) * (NU64)(m2))) - (NU64)(1ULL));
505 	twoFc = (NU64)((NU64)(2ULL) * (NU64)(m2));
506 	twoFr = (NU64)((NU64)((NU64)((NU64)(2ULL) * (NU64)(m2))) + (NU64)(1ULL));
507 	zi = mulShift__systemZdragonbox_291((NU64)((NU64)(twoFr) << (NU64)(betaMinus1)), pow10);
508 	q = (NU64)((NU64)(zi) / (NU64)(1000ULL));
509 	r = (NU32)((NU32)(((NU32) (zi))) - (NU32)((NU32)((NU32)(((NU32) 1000)) * (NU32)(((NU32) (q))))));
510 	{
511 		if (!((NU32)(r) < (NU32)(delta))) goto LA24_;
512 		{
513 			NIM_BOOL T28_;
514 			NIM_BOOL T29_;
515 			NIM_BOOL T32_;
516 			T28_ = (NIM_BOOL)0;
517 			T29_ = (NIM_BOOL)0;
518 			T29_ = !((r == ((NU32) 0)));
519 			if (T29_) goto LA30_;
520 			T29_ = acceptUpper;
521 			LA30_: ;
522 			T28_ = T29_;
523 			if (T28_) goto LA31_;
524 			T32_ = (NIM_BOOL)0;
525 			T32_ = isIntegralEndpoint__systemZdragonbox_326(twoFr, e2, minusK);
526 			T28_ = !(T32_);
527 			LA31_: ;
528 			if (!T28_) goto LA33_;
529 			nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg));
530 			result.significand = q;
531 			result.exponent = (NI32)((NI32)(minusK + ((NI32) 2)) + ((NI32) 1));
532 			goto BeforeRet_;
533 		}
534 		LA33_: ;
535 		q -= ((NI) 1);
536 		r = ((NU32) 1000);
537 	}
538 	goto LA22_;
539 	LA24_: ;
540 	{
541 		if (!(r == delta)) goto LA36_;
542 		{
543 			NIM_BOOL T40_;
544 			NIM_BOOL T41_;
545 			T40_ = (NIM_BOOL)0;
546 			T41_ = (NIM_BOOL)0;
547 			T41_ = acceptLower;
548 			if (!(T41_)) goto LA42_;
549 			T41_ = isIntegralEndpoint__systemZdragonbox_326(twoFl, e2, minusK);
550 			LA42_: ;
551 			T40_ = T41_;
552 			if (T40_) goto LA43_;
553 			T40_ = mulParity__systemZdragonbox_308(twoFl, pow10, betaMinus1);
554 			LA43_: ;
555 			if (!T40_) goto LA44_;
556 			nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg));
557 			result.significand = q;
558 			result.exponent = (NI32)((NI32)(minusK + ((NI32) 2)) + ((NI32) 1));
559 			goto BeforeRet_;
560 		}
561 		LA44_: ;
562 	}
563 	goto LA22_;
564 	LA36_: ;
565 	{
566 	}
567 	LA22_: ;
568 	q = (NU64)((NU64)(q) * (NU64)(10ULL));
569 	dist = (NU32)((NU32)((NU32)((NU32)(r) - (NU32)((NU32)((NU32)(delta) / (NU32)(((NU32) 2)))))) + (NU32)(((NU32) 50)));
570 	distQ = (NU32)((NU32)(dist) / (NU32)(((NU32) 100)));
571 	q += ((NU64) (distQ));
572 	{
573 		NIM_BOOL approxYParity;
574 		if (!(dist == (NU32)((NU32)(distQ) * (NU32)(((NU32) 100))))) goto LA49_;
575 		approxYParity = !(((NU32)(dist & ((NU32) 1)) == ((NU32) 0)));
576 		{
577 			NIM_BOOL T53_;
578 			T53_ = (NIM_BOOL)0;
579 			T53_ = mulParity__systemZdragonbox_308(twoFc, pow10, betaMinus1);
580 			if (!!((T53_ == approxYParity))) goto LA54_;
581 			q -= ((NI) 1);
582 		}
583 		goto LA51_;
584 		LA54_: ;
585 		{
586 			NIM_BOOL T57_;
587 			T57_ = (NIM_BOOL)0;
588 			T57_ = !(((NU64)((NU64)(q) % (NU64)(2ULL)) == 0ULL));
589 			if (!(T57_)) goto LA58_;
590 			T57_ = isIntegralMidpoint__systemZdragonbox_331(twoFc, e2, minusK);
591 			LA58_: ;
592 			if (!T57_) goto LA59_;
593 			q -= ((NI) 1);
594 		}
595 		goto LA51_;
596 		LA59_: ;
597 		LA51_: ;
598 	}
599 	LA49_: ;
600 	nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg));
601 	result.significand = q;
602 	result.exponent = (NI32)(minusK + ((NI32) 2));
603 	goto BeforeRet_;
604 	}BeforeRet_: ;
605 	return result;
606 }
N_INLINE(NI32,decimalLength__systemZdragonbox_534)607 static N_INLINE(NI32, decimalLength__systemZdragonbox_534)(NU64 v) {
608 	NI32 result;
609 	NU32 v32;
610 {	result = (NI32)0;
611 	{
612 		if (!!((((NU32) ((NU64)((NU64)(v) >> (NU64)(((NI) 32))))) == ((NU32) 0)))) goto LA3_;
613 		{
614 			if (!((NU64)(10000000000000000ULL) <= (NU64)(v))) goto LA7_;
615 			result = ((NI32) 17);
616 			goto BeforeRet_;
617 		}
618 		LA7_: ;
619 		{
620 			if (!((NU64)(1000000000000000ULL) <= (NU64)(v))) goto LA11_;
621 			result = ((NI32) 16);
622 			goto BeforeRet_;
623 		}
624 		LA11_: ;
625 		{
626 			if (!((NU64)(100000000000000ULL) <= (NU64)(v))) goto LA15_;
627 			result = ((NI32) 15);
628 			goto BeforeRet_;
629 		}
630 		LA15_: ;
631 		{
632 			if (!((NU64)(10000000000000ULL) <= (NU64)(v))) goto LA19_;
633 			result = ((NI32) 14);
634 			goto BeforeRet_;
635 		}
636 		LA19_: ;
637 		{
638 			if (!((NU64)(1000000000000ULL) <= (NU64)(v))) goto LA23_;
639 			result = ((NI32) 13);
640 			goto BeforeRet_;
641 		}
642 		LA23_: ;
643 		{
644 			if (!((NU64)(100000000000ULL) <= (NU64)(v))) goto LA27_;
645 			result = ((NI32) 12);
646 			goto BeforeRet_;
647 		}
648 		LA27_: ;
649 		{
650 			if (!((NU64)(10000000000ULL) <= (NU64)(v))) goto LA31_;
651 			result = ((NI32) 11);
652 			goto BeforeRet_;
653 		}
654 		LA31_: ;
655 		result = ((NI32) 10);
656 		goto BeforeRet_;
657 	}
658 	LA3_: ;
659 	v32 = ((NU32) (v));
660 	{
661 		if (!((NU32)(((NU) 1000000000)) <= (NU32)(((NU) (v32))))) goto LA35_;
662 		result = ((NI32) 10);
663 		goto BeforeRet_;
664 	}
665 	LA35_: ;
666 	{
667 		if (!((NU32)(((NU) 100000000)) <= (NU32)(((NU) (v32))))) goto LA39_;
668 		result = ((NI32) 9);
669 		goto BeforeRet_;
670 	}
671 	LA39_: ;
672 	{
673 		if (!((NU32)(((NU) 10000000)) <= (NU32)(((NU) (v32))))) goto LA43_;
674 		result = ((NI32) 8);
675 		goto BeforeRet_;
676 	}
677 	LA43_: ;
678 	{
679 		if (!((NU32)(((NU) 1000000)) <= (NU32)(((NU) (v32))))) goto LA47_;
680 		result = ((NI32) 7);
681 		goto BeforeRet_;
682 	}
683 	LA47_: ;
684 	{
685 		if (!((NU32)(((NU) 100000)) <= (NU32)(((NU) (v32))))) goto LA51_;
686 		result = ((NI32) 6);
687 		goto BeforeRet_;
688 	}
689 	LA51_: ;
690 	{
691 		if (!((NU32)(((NU) 10000)) <= (NU32)(((NU) (v32))))) goto LA55_;
692 		result = ((NI32) 5);
693 		goto BeforeRet_;
694 	}
695 	LA55_: ;
696 	{
697 		if (!((NU32)(((NU) 1000)) <= (NU32)(((NU) (v32))))) goto LA59_;
698 		result = ((NI32) 4);
699 		goto BeforeRet_;
700 	}
701 	LA59_: ;
702 	{
703 		if (!((NU32)(((NU) 100)) <= (NU32)(((NU) (v32))))) goto LA63_;
704 		result = ((NI32) 3);
705 		goto BeforeRet_;
706 	}
707 	LA63_: ;
708 	{
709 		if (!((NU32)(((NU) 10)) <= (NU32)(((NU) (v32))))) goto LA67_;
710 		result = ((NI32) 2);
711 		goto BeforeRet_;
712 	}
713 	LA67_: ;
714 	result = ((NI32) 1);
715 	goto BeforeRet_;
716 	}BeforeRet_: ;
717 	return result;
718 }
N_INLINE(void,utoa2Digits__stdZprivateZdigitsutils_21)719 static N_INLINE(void, utoa2Digits__stdZprivateZdigitsutils_21)(NIM_CHAR* buf, NI bufLen_0, NI pos, NU32 digits) {
720 	buf[pos] = digits100__stdZprivateZdigitsutils_2[((NU32)((NU32)(((NU32) 2)) * (NU32)(digits)))- 0];
721 	buf[(NI)(pos + ((NI) 1))] = digits100__stdZprivateZdigitsutils_2[((NU32)((NU32)((NU32)((NU32)(((NU32) 2)) * (NU32)(digits))) + (NU32)(((NU32) 1))))- 0];
722 }
N_INLINE(NI32,trailingZeros2Digits__stdZprivateZdigitsutils_34)723 static N_INLINE(NI32, trailingZeros2Digits__stdZprivateZdigitsutils_34)(NU32 digits) {
724 	NI32 result;
725 {	result = (NI32)0;
726 	result = ((NI32) (trailingZeros100__stdZprivateZdigitsutils_1[(digits)- 0]));
727 	goto BeforeRet_;
728 	}BeforeRet_: ;
729 	return result;
730 }
N_INLINE(NI32,utoa8DigitsSkipTrailingZeros__systemZdragonbox_400)731 static N_INLINE(NI32, utoa8DigitsSkipTrailingZeros__systemZdragonbox_400)(NIM_CHAR* buf, NI bufLen_0, NI pos, NU32 digits) {
732 	NI32 result;
733 	NU32 q;
734 	NU32 r;
735 	NU32 qH;
736 	NU32 qL;
737 {	result = (NI32)0;
738 	q = (NU32)((NU32)(digits) / (NU32)(((NU32) 10000)));
739 	r = (NU32)((NU32)(digits) % (NU32)(((NU32) 10000)));
740 	qH = (NU32)((NU32)(q) / (NU32)(((NU32) 100)));
741 	qL = (NU32)((NU32)(q) % (NU32)(((NU32) 100)));
742 	utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos, qH);
743 	utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, (NI)(pos + ((NI) 2)), qL);
744 	{
745 		NU32 T5_;
746 		NI32 T11_;
747 		NI T12_;
748 		if (!(r == ((NU32) 0))) goto LA3_;
749 		T5_ = (NU32)0;
750 		{
751 			if (!(qL == ((NU32) 0))) goto LA8_;
752 			T5_ = qH;
753 		}
754 		goto LA6_;
755 		LA8_: ;
756 		{
757 			T5_ = qL;
758 		}
759 		LA6_: ;
760 		T11_ = (NI32)0;
761 		T11_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(T5_);
762 		T12_ = (NI)0;
763 		{
764 			if (!(qL == ((NU32) 0))) goto LA15_;
765 			T12_ = ((NI) 6);
766 		}
767 		goto LA13_;
768 		LA15_: ;
769 		{
770 			T12_ = ((NI) 4);
771 		}
772 		LA13_: ;
773 		result = (NI32)(T11_ + ((NI32) (T12_)));
774 		goto BeforeRet_;
775 	}
776 	goto LA1_;
777 	LA3_: ;
778 	{
779 		NU32 rH;
780 		NU32 rL;
781 		NU32 T19_;
782 		NI32 T25_;
783 		NI T26_;
784 		rH = (NU32)((NU32)(r) / (NU32)(((NU32) 100)));
785 		rL = (NU32)((NU32)(r) % (NU32)(((NU32) 100)));
786 		utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, (NI)(pos + ((NI) 4)), rH);
787 		utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, (NI)(pos + ((NI) 6)), rL);
788 		T19_ = (NU32)0;
789 		{
790 			if (!(rL == ((NU32) 0))) goto LA22_;
791 			T19_ = rH;
792 		}
793 		goto LA20_;
794 		LA22_: ;
795 		{
796 			T19_ = rL;
797 		}
798 		LA20_: ;
799 		T25_ = (NI32)0;
800 		T25_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(T19_);
801 		T26_ = (NI)0;
802 		{
803 			if (!(rL == ((NU32) 0))) goto LA29_;
804 			T26_ = ((NI) 2);
805 		}
806 		goto LA27_;
807 		LA29_: ;
808 		{
809 			T26_ = ((NI) 0);
810 		}
811 		LA27_: ;
812 		result = (NI32)(T25_ + ((NI32) (T26_)));
813 		goto BeforeRet_;
814 	}
815 	LA1_: ;
816 	}BeforeRet_: ;
817 	return result;
818 }
N_INLINE(NI32,printDecimalDigitsBackwards__systemZdragonbox_417)819 static N_INLINE(NI32, printDecimalDigitsBackwards__systemZdragonbox_417)(NIM_CHAR* buf, NI bufLen_0, NI pos, NU64 output64) {
820 	NI32 result;
821 	NI pos_2;
822 	NU64 output64_2;
823 	NI32 tz;
824 	NI32 nd;
825 	NU32 output;
826 {	result = (NI32)0;
827 	pos_2 = pos;
828 	output64_2 = output64;
829 	tz = ((NI32) 0);
830 	nd = ((NI32) 0);
831 	{
832 		NU64 q;
833 		NU32 r;
834 		if (!((NU64)(100000000ULL) <= (NU64)(output64_2))) goto LA3_;
835 		q = (NU64)((NU64)(output64_2) / (NU64)(100000000ULL));
836 		r = ((NU32) ((NU64)((NU64)(output64_2) % (NU64)(100000000ULL))));
837 		output64_2 = q;
838 		pos_2 -= ((NI) 8);
839 		{
840 			if (!!((r == ((NU32) 0)))) goto LA7_;
841 			tz = utoa8DigitsSkipTrailingZeros__systemZdragonbox_400(buf, bufLen_0, pos_2, r);
842 		}
843 		goto LA5_;
844 		LA7_: ;
845 		{
846 			tz = ((NI32) 8);
847 		}
848 		LA5_: ;
849 		nd = ((NI32) 8);
850 	}
851 	LA3_: ;
852 	output = ((NU32) (output64_2));
853 	{
854 		NU32 q_2;
855 		NU32 r_2;
856 		if (!((NU32)(((NU32) 10000)) <= (NU32)(output))) goto LA12_;
857 		q_2 = (NU32)((NU32)(output) / (NU32)(((NU32) 10000)));
858 		r_2 = (NU32)((NU32)(output) % (NU32)(((NU32) 10000)));
859 		output = q_2;
860 		pos_2 -= ((NI) 4);
861 		{
862 			NU32 rH;
863 			NU32 rL;
864 			if (!!((r_2 == ((NU32) 0)))) goto LA16_;
865 			rH = (NU32)((NU32)(r_2) / (NU32)(((NU32) 100)));
866 			rL = (NU32)((NU32)(r_2) % (NU32)(((NU32) 100)));
867 			utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos_2, rH);
868 			utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, (NI)(pos_2 + ((NI) 2)), rL);
869 			{
870 				NU32 T22_;
871 				NI32 T28_;
872 				NI T29_;
873 				if (!(tz == nd)) goto LA20_;
874 				T22_ = (NU32)0;
875 				{
876 					if (!(rL == ((NU32) 0))) goto LA25_;
877 					T22_ = rH;
878 				}
879 				goto LA23_;
880 				LA25_: ;
881 				{
882 					T22_ = rL;
883 				}
884 				LA23_: ;
885 				T28_ = (NI32)0;
886 				T28_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(T22_);
887 				T29_ = (NI)0;
888 				{
889 					if (!(rL == ((NU32) 0))) goto LA32_;
890 					T29_ = ((NI) 2);
891 				}
892 				goto LA30_;
893 				LA32_: ;
894 				{
895 					T29_ = ((NI) 0);
896 				}
897 				LA30_: ;
898 				tz += ((NI) ((NI32)(T28_ + ((NI32) (T29_)))));
899 			}
900 			LA20_: ;
901 		}
902 		goto LA14_;
903 		LA16_: ;
904 		{
905 			{
906 				if (!(tz == nd)) goto LA38_;
907 				tz += ((NI) 4);
908 			}
909 			goto LA36_;
910 			LA38_: ;
911 			{
912 				{
913 					NI i;
914 					NI res;
915 					i = (NI)0;
916 					res = ((NI) 0);
917 					{
918 						while (1) {
919 							if (!(res <= ((NI) 3))) goto LA43;
920 							i = res;
921 							buf[(NI)(pos_2 + i)] = 48;
922 							res += ((NI) 1);
923 						} LA43: ;
924 					}
925 				}
926 			}
927 			LA36_: ;
928 		}
929 		LA14_: ;
930 		nd += ((NI) 4);
931 	}
932 	LA12_: ;
933 	{
934 		NU32 q_3;
935 		NU32 r_3;
936 		if (!((NU32)(((NU32) 100)) <= (NU32)(output))) goto LA46_;
937 		q_3 = (NU32)((NU32)(output) / (NU32)(((NU32) 100)));
938 		r_3 = (NU32)((NU32)(output) % (NU32)(((NU32) 100)));
939 		output = q_3;
940 		pos_2 -= ((NI) 2);
941 		utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos_2, r_3);
942 		{
943 			NI32 T52_;
944 			if (!(tz == nd)) goto LA50_;
945 			T52_ = (NI32)0;
946 			T52_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(r_3);
947 			tz += ((NI) (T52_));
948 		}
949 		LA50_: ;
950 		nd += ((NI) 2);
951 		{
952 			NU32 q2;
953 			NU32 r2;
954 			if (!((NU32)(((NU32) 100)) <= (NU32)(output))) goto LA55_;
955 			q2 = (NU32)((NU32)(output) / (NU32)(((NU32) 100)));
956 			r2 = (NU32)((NU32)(output) % (NU32)(((NU32) 100)));
957 			output = q2;
958 			pos_2 -= ((NI) 2);
959 			utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos_2, r2);
960 			{
961 				NI32 T61_;
962 				if (!(tz == nd)) goto LA59_;
963 				T61_ = (NI32)0;
964 				T61_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(r2);
965 				tz += ((NI) (T61_));
966 			}
967 			LA59_: ;
968 			nd += ((NI) 2);
969 		}
970 		LA55_: ;
971 	}
972 	LA46_: ;
973 	{
974 		NU32 q_4;
975 		if (!((NU32)(((NU32) 10)) <= (NU32)(output))) goto LA64_;
976 		q_4 = output;
977 		pos_2 -= ((NI) 2);
978 		utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos_2, q_4);
979 		{
980 			NI32 T70_;
981 			if (!(tz == nd)) goto LA68_;
982 			T70_ = (NI32)0;
983 			T70_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(q_4);
984 			tz += ((NI) (T70_));
985 		}
986 		LA68_: ;
987 	}
988 	goto LA62_;
989 	LA64_: ;
990 	{
991 		NU32 q_5;
992 		q_5 = output;
993 		pos_2 -= ((NI) 1);
994 		buf[pos_2] = ((NIM_CHAR) (((NI) ((NU32)((NU32)(((NU32) 48)) + (NU32)(q_5))))));
995 	}
996 	LA62_: ;
997 	result = tz;
998 	goto BeforeRet_;
999 	}BeforeRet_: ;
1000 	return result;
1001 }
N_INLINE(NI,formatDigits__systemZdragonbox_548)1002 static N_INLINE(NI, formatDigits__systemZdragonbox_548)(NIM_CHAR* buffer, NI bufferLen_0, NI pos, NU64 digits, NI32 decimalExponent, NIM_BOOL forceTrailingDotZero) {
1003 	NI result;
1004 	NI pos_2;
1005 	NI32 numDigits;
1006 	NI32 decimalPoint;
1007 	NIM_BOOL useFixed;
1008 	NIM_BOOL T1_;
1009 	NI32 decimalDigitsPosition;
1010 	NI digitsEnd;
1011 	NI32 tz;
1012 {	result = (NI)0;
1013 	pos_2 = pos;
1014 	numDigits = decimalLength__systemZdragonbox_534(digits);
1015 	decimalPoint = (NI32)(numDigits + decimalExponent);
1016 	T1_ = (NIM_BOOL)0;
1017 	T1_ = (((NI32) -6) <= decimalPoint);
1018 	if (!(T1_)) goto LA2_;
1019 	T1_ = (decimalPoint <= ((NI32) 17));
1020 	LA2_: ;
1021 	useFixed = T1_;
1022 	{
1023 		NI i;
1024 		NI i_2;
1025 		i = (NI)0;
1026 		i_2 = ((NI) 0);
1027 		{
1028 			while (1) {
1029 				if (!(i_2 < ((NI) 32))) goto LA5;
1030 				i = i_2;
1031 				buffer[(NI)(pos_2 + i)] = 48;
1032 				i_2 += ((NI) 1);
1033 			} LA5: ;
1034 		}
1035 	}
1036 	decimalDigitsPosition = (NI32)0;
1037 	{
1038 		if (!useFixed) goto LA8_;
1039 		{
1040 			if (!(decimalPoint <= ((NI32) 0))) goto LA12_;
1041 			decimalDigitsPosition = (NI32)(((NI32) 2) - decimalPoint);
1042 		}
1043 		goto LA10_;
1044 		LA12_: ;
1045 		{
1046 			decimalDigitsPosition = ((NI32) 0);
1047 		}
1048 		LA10_: ;
1049 	}
1050 	goto LA6_;
1051 	LA8_: ;
1052 	{
1053 		decimalDigitsPosition = ((NI32) 1);
1054 	}
1055 	LA6_: ;
1056 	digitsEnd = (NI)(pos_2 + ((NI) ((NI32)(decimalDigitsPosition + numDigits))));
1057 	tz = printDecimalDigitsBackwards__systemZdragonbox_417(buffer, bufferLen_0, digitsEnd, digits);
1058 	digitsEnd -= ((NI) (tz));
1059 	numDigits -= ((NI) (tz));
1060 	{
1061 		if (!useFixed) goto LA18_;
1062 		{
1063 			if (!(decimalPoint <= ((NI32) 0))) goto LA22_;
1064 			buffer[(NI)(pos_2 + ((NI) 1))] = 46;
1065 			pos_2 = digitsEnd;
1066 		}
1067 		goto LA20_;
1068 		LA22_: ;
1069 		{
1070 			tyArray__Wfh9bjgBQ4UqJsyISUuDSuA tmp;
1071 			if (!(decimalPoint < numDigits)) goto LA25_;
1072 			nimZeroMem((void*)tmp, sizeof(tyArray__Wfh9bjgBQ4UqJsyISUuDSuA));
1073 			{
1074 				NI i_3;
1075 				NI i_4;
1076 				i_3 = (NI)0;
1077 				i_4 = ((NI) 0);
1078 				{
1079 					while (1) {
1080 						if (!(i_4 < ((NI) 16))) goto LA29;
1081 						i_3 = i_4;
1082 						tmp[(i_3)- 0] = buffer[(NI)((NI)(i_3 + pos_2) + ((NI) (decimalPoint)))];
1083 						i_4 += ((NI) 1);
1084 					} LA29: ;
1085 				}
1086 			}
1087 			{
1088 				NI i_5;
1089 				NI i_6;
1090 				i_5 = (NI)0;
1091 				i_6 = ((NI) 0);
1092 				{
1093 					while (1) {
1094 						if (!(i_6 < ((NI) 16))) goto LA32;
1095 						i_5 = i_6;
1096 						buffer[(NI)((NI)((NI)(i_5 + pos_2) + ((NI) (decimalPoint))) + ((NI) 1))] = tmp[(i_5)- 0];
1097 						i_6 += ((NI) 1);
1098 					} LA32: ;
1099 				}
1100 			}
1101 			buffer[(NI)(pos_2 + ((NI) (decimalPoint)))] = 46;
1102 			pos_2 = (NI)(digitsEnd + ((NI) 1));
1103 		}
1104 		goto LA20_;
1105 		LA25_: ;
1106 		{
1107 			pos_2 += ((NI) (decimalPoint));
1108 			{
1109 				if (!forceTrailingDotZero) goto LA36_;
1110 				buffer[pos_2] = 46;
1111 				buffer[(NI)(pos_2 + ((NI) 1))] = 48;
1112 				pos_2 += ((NI) 2);
1113 			}
1114 			LA36_: ;
1115 		}
1116 		LA20_: ;
1117 	}
1118 	goto LA16_;
1119 	LA18_: ;
1120 	{
1121 		NI32 scientificExponent;
1122 		NU32 k;
1123 		NI32 T49_;
1124 		buffer[pos_2] = buffer[(NI)(pos_2 + ((NI) 1))];
1125 		{
1126 			if (!(numDigits == ((NI32) 1))) goto LA41_;
1127 			pos_2 += ((NI) 1);
1128 		}
1129 		goto LA39_;
1130 		LA41_: ;
1131 		{
1132 			buffer[(NI)(pos_2 + ((NI) 1))] = 46;
1133 			pos_2 = digitsEnd;
1134 		}
1135 		LA39_: ;
1136 		scientificExponent = (NI32)(decimalPoint - ((NI32) 1));
1137 		buffer[pos_2] = 101;
1138 		{
1139 			if (!(scientificExponent < ((NI32) 0))) goto LA46_;
1140 			buffer[(NI)(pos_2 + ((NI) 1))] = 45;
1141 		}
1142 		goto LA44_;
1143 		LA46_: ;
1144 		{
1145 			buffer[(NI)(pos_2 + ((NI) 1))] = 43;
1146 		}
1147 		LA44_: ;
1148 		pos_2 += ((NI) 2);
1149 		T49_ = (NI32)0;
1150 		{
1151 			if (!(scientificExponent < ((NI32) 0))) goto LA52_;
1152 			T49_ = ((NI32)-(scientificExponent));
1153 		}
1154 		goto LA50_;
1155 		LA52_: ;
1156 		{
1157 			T49_ = scientificExponent;
1158 		}
1159 		LA50_: ;
1160 		k = ((NU32) (T49_));
1161 		{
1162 			if (!((NU32)(k) < (NU32)(((NU32) 10)))) goto LA57_;
1163 			buffer[pos_2] = ((NIM_CHAR) (((NI) ((NU32)((NU32)(((NU32) 48)) + (NU32)(k))))));
1164 			pos_2 += ((NI) 1);
1165 		}
1166 		goto LA55_;
1167 		LA57_: ;
1168 		{
1169 			if (!((NU32)(k) < (NU32)(((NU32) 100)))) goto LA60_;
1170 			utoa2Digits__stdZprivateZdigitsutils_21(buffer, bufferLen_0, pos_2, k);
1171 			pos_2 += ((NI) 2);
1172 		}
1173 		goto LA55_;
1174 		LA60_: ;
1175 		{
1176 			NU32 q;
1177 			NU32 r;
1178 			q = (NU32)((NU32)(k) / (NU32)(((NU32) 100)));
1179 			r = (NU32)((NU32)(k) % (NU32)(((NU32) 100)));
1180 			buffer[pos_2] = ((NIM_CHAR) (((NI) ((NU32)((NU32)(((NU32) 48)) + (NU32)(q))))));
1181 			pos_2 += ((NI) 1);
1182 			utoa2Digits__stdZprivateZdigitsutils_21(buffer, bufferLen_0, pos_2, r);
1183 			pos_2 += ((NI) 2);
1184 		}
1185 		LA55_: ;
1186 	}
1187 	LA16_: ;
1188 	result = pos_2;
1189 	goto BeforeRet_;
1190 	}BeforeRet_: ;
1191 	return result;
1192 }
N_INLINE(NI,toChars__systemZdragonbox_672)1193 static N_INLINE(NI, toChars__systemZdragonbox_672)(NIM_CHAR* buffer, NI bufferLen_0, NF v, NIM_BOOL forceTrailingDotZero) {
1194 	NI result;
1195 	NI pos;
1196 	NU64 significand;
1197 	tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw T1_;
1198 	NU64 exponent;
1199 	tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw T2_;
1200 {	result = (NI)0;
1201 	pos = ((NI) 0);
1202 	T1_ = constructDouble__systemZdragonbox_31(v);
1203 	significand = physicalSignificand__systemZdragonbox_34(T1_);
1204 	T2_ = constructDouble__systemZdragonbox_31(v);
1205 	exponent = physicalExponent__systemZdragonbox_37(T2_);
1206 	{
1207 		tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw T7_;
1208 		NI T8_;
1209 		if (!!((exponent == 2047ULL))) goto LA5_;
1210 		buffer[pos] = 45;
1211 		T7_ = constructDouble__systemZdragonbox_31(v);
1212 		T8_ = (NI)0;
1213 		T8_ = signBit__systemZdragonbox_56(T7_);
1214 		pos += T8_;
1215 		{
1216 			NIM_BOOL T11_;
1217 			tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg dec;
1218 			T11_ = (NIM_BOOL)0;
1219 			T11_ = !((exponent == 0ULL));
1220 			if (T11_) goto LA12_;
1221 			T11_ = !((significand == 0ULL));
1222 			LA12_: ;
1223 			if (!T11_) goto LA13_;
1224 			dec = toDecimal64__systemZdragonbox_336(significand, exponent);
1225 			result = formatDigits__systemZdragonbox_548(buffer, bufferLen_0, pos, dec.significand, dec.exponent, forceTrailingDotZero);
1226 			goto BeforeRet_;
1227 		}
1228 		goto LA9_;
1229 		LA13_: ;
1230 		{
1231 			NI T16_;
1232 			buffer[pos] = 48;
1233 			buffer[(NI)(pos + ((NI) 1))] = 46;
1234 			buffer[(NI)(pos + ((NI) 2))] = 48;
1235 			buffer[(NI)(pos + ((NI) 3))] = 32;
1236 			T16_ = (NI)0;
1237 			{
1238 				if (!forceTrailingDotZero) goto LA19_;
1239 				T16_ = ((NI) 3);
1240 			}
1241 			goto LA17_;
1242 			LA19_: ;
1243 			{
1244 				T16_ = ((NI) 1);
1245 			}
1246 			LA17_: ;
1247 			pos += T16_;
1248 			result = pos;
1249 			goto BeforeRet_;
1250 		}
1251 		LA9_: ;
1252 	}
1253 	LA5_: ;
1254 	{
1255 		tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw T26_;
1256 		NI T27_;
1257 		if (!(significand == 0ULL)) goto LA24_;
1258 		buffer[pos] = 45;
1259 		T26_ = constructDouble__systemZdragonbox_31(v);
1260 		T27_ = (NI)0;
1261 		T27_ = signBit__systemZdragonbox_56(T26_);
1262 		pos += T27_;
1263 		buffer[pos] = 105;
1264 		buffer[(NI)(pos + ((NI) 1))] = 110;
1265 		buffer[(NI)(pos + ((NI) 2))] = 102;
1266 		buffer[(NI)(pos + ((NI) 3))] = 32;
1267 		result = (NI)(pos + ((NI) 3));
1268 		goto BeforeRet_;
1269 	}
1270 	goto LA22_;
1271 	LA24_: ;
1272 	{
1273 		buffer[pos] = 110;
1274 		buffer[(NI)(pos + ((NI) 1))] = 97;
1275 		buffer[(NI)(pos + ((NI) 2))] = 110;
1276 		buffer[(NI)(pos + ((NI) 3))] = 32;
1277 		result = (NI)(pos + ((NI) 3));
1278 		goto BeforeRet_;
1279 	}
1280 	LA22_: ;
1281 	}BeforeRet_: ;
1282 	return result;
1283 }
N_NIMCALL(NI,writeFloatToBufferRoundtrip__systemZformatfloat_13)1284 N_LIB_PRIVATE N_NIMCALL(NI, writeFloatToBufferRoundtrip__systemZformatfloat_13)(NIM_CHAR* buf, NF value) {
1285 	NI result;
1286 	result = (NI)0;
1287 	result = toChars__systemZdragonbox_672(buf, 65, value, NIM_TRUE);
1288 	buf[(result)- 0] = 0;
1289 	return result;
1290 }
N_NIMCALL(void,addCstringN__systemZformatfloat_5)1291 N_LIB_PRIVATE N_NIMCALL(void, addCstringN__systemZformatfloat_5)(NimStringDesc** result, NCSTRING buf, NI buflen) {
1292 	NI oldLen;
1293 	NI newLen;
1294 	void* T1_;
1295 	oldLen = ((*result) ? (*result)->Sup.len : 0);
1296 	newLen = (NI)(oldLen + buflen);
1297 	unsureAsgnRef((void**) (&(*result)), setLengthStr((*result), ((NI) (newLen))));
1298 	T1_ = (void*)0;
1299 	T1_ = memcpy(((void*) ((&(*result)->data[oldLen]))), ((void*) (buf)), ((size_t) (buflen)));
1300 }
N_NIMCALL(void,writeToBuffer__systemZformatfloat_51)1301 N_LIB_PRIVATE N_NIMCALL(void, writeToBuffer__systemZformatfloat_51)(NIM_CHAR* buf, NCSTRING value) {
1302 	NI i;
1303 	i = ((NI) 0);
1304 	{
1305 		while (1) {
1306 			if (!!(((NU8)(value[i]) == (NU8)(0)))) goto LA2;
1307 			buf[(i)- 0] = value[i];
1308 			i += ((NI) 1);
1309 		} LA2: ;
1310 	}
1311 }
N_NIMCALL(NI,writeFloatToBufferSprintf__systemZformatfloat_59)1312 N_LIB_PRIVATE N_NIMCALL(NI, writeFloatToBufferSprintf__systemZformatfloat_59)(NIM_CHAR* buf, NF value) {
1313 	NI result;
1314 	NI n;
1315 	int T1_;
1316 	NIM_BOOL hasDot;
1317 	result = (NI)0;
1318 	T1_ = (int)0;
1319 	T1_ = sprintf(((NCSTRING) (buf)), "%.16g", value);
1320 	n = ((NI) (T1_));
1321 	hasDot = NIM_FALSE;
1322 	{
1323 		NI i;
1324 		NI colontmp_;
1325 		NI res;
1326 		i = (NI)0;
1327 		colontmp_ = (NI)0;
1328 		colontmp_ = (NI)(n - ((NI) 1));
1329 		res = ((NI) 0);
1330 		{
1331 			while (1) {
1332 				if (!(res <= colontmp_)) goto LA4;
1333 				i = res;
1334 				{
1335 					if (!((NU8)(buf[(i)- 0]) == (NU8)(44))) goto LA7_;
1336 					buf[(i)- 0] = 46;
1337 					hasDot = NIM_TRUE;
1338 				}
1339 				goto LA5_;
1340 				LA7_: ;
1341 				{
1342 					if (!(((NU8)(buf[(i)- 0])) >= ((NU8)(97)) && ((NU8)(buf[(i)- 0])) <= ((NU8)(122)) || ((NU8)(buf[(i)- 0])) >= ((NU8)(65)) && ((NU8)(buf[(i)- 0])) <= ((NU8)(90)) || ((NU8)(buf[(i)- 0])) == ((NU8)(46)))) goto LA10_;
1343 					hasDot = NIM_TRUE;
1344 				}
1345 				goto LA5_;
1346 				LA10_: ;
1347 				LA5_: ;
1348 				res += ((NI) 1);
1349 			} LA4: ;
1350 		}
1351 	}
1352 	{
1353 		if (!!(hasDot)) goto LA14_;
1354 		buf[(n)- 0] = 46;
1355 		buf[((NI)(n + ((NI) 1)))- 0] = 48;
1356 		buf[((NI)(n + ((NI) 2)))- 0] = 0;
1357 		result = (NI)(n + ((NI) 2));
1358 	}
1359 	goto LA12_;
1360 	LA14_: ;
1361 	{
1362 		result = n;
1363 	}
1364 	LA12_: ;
1365 	{
1366 		if (!(((NU8)(buf[((NI)(n - ((NI) 1)))- 0])) == ((NU8)(110)) || ((NU8)(buf[((NI)(n - ((NI) 1)))- 0])) == ((NU8)(78)) || ((NU8)(buf[((NI)(n - ((NI) 1)))- 0])) == ((NU8)(68)) || ((NU8)(buf[((NI)(n - ((NI) 1)))- 0])) == ((NU8)(100)) || ((NU8)(buf[((NI)(n - ((NI) 1)))- 0])) == ((NU8)(41)))) goto LA19_;
1367 		writeToBuffer__systemZformatfloat_51(buf, "nan");
1368 		result = ((NI) 3);
1369 	}
1370 	goto LA17_;
1371 	LA19_: ;
1372 	{
1373 		if (!((NU8)(buf[((NI)(n - ((NI) 1)))- 0]) == (NU8)(70))) goto LA22_;
1374 		{
1375 			if (!((NU8)(buf[(((NI) 0))- 0]) == (NU8)(45))) goto LA26_;
1376 			writeToBuffer__systemZformatfloat_51(buf, "-inf");
1377 			result = ((NI) 4);
1378 		}
1379 		goto LA24_;
1380 		LA26_: ;
1381 		{
1382 			writeToBuffer__systemZformatfloat_51(buf, "inf");
1383 			result = ((NI) 3);
1384 		}
1385 		LA24_: ;
1386 	}
1387 	goto LA17_;
1388 	LA22_: ;
1389 	LA17_: ;
1390 	return result;
1391 }
N_NIMCALL(void,addFloatSprintf__systemZformatfloat_99)1392 N_LIB_PRIVATE N_NIMCALL(void, addFloatSprintf__systemZformatfloat_99)(NimStringDesc** result, NF x) {
1393 	tyArray__eVNFTutn6un5gcq48fQLdg buffer;
1394 	NI n;
1395 	n = writeFloatToBufferSprintf__systemZformatfloat_59(buffer, x);
1396 	addCstringN__systemZformatfloat_5(result, ((NCSTRING) ((&buffer[(((NI) 0))- 0]))), n);
1397 }
N_INLINE(NIM_BOOL,multipleOfPow2__systemZschubfach_125)1398 static N_INLINE(NIM_BOOL, multipleOfPow2__systemZschubfach_125)(NU32 value, NI32 e2) {
1399 	NIM_BOOL result;
1400 {	result = (NIM_BOOL)0;
1401 	result = ((NU32)(value & (NU32)((NU32)((NU32)((NU32)(((NU32) 1)) << (NU32)(e2))) - (NU32)(((NU32) 1)))) == ((NU32) 0));
1402 	goto BeforeRet_;
1403 	}BeforeRet_: ;
1404 	return result;
1405 }
N_INLINE(NI32,floorDivPow2__systemZschubfach_59)1406 static N_INLINE(NI32, floorDivPow2__systemZschubfach_59)(NI32 x, NI32 n) {
1407 	NI32 result;
1408 {	result = (NI32)0;
1409 	result = (NI32)((NI32)(x) >> (NU32)(n));
1410 	goto BeforeRet_;
1411 	}BeforeRet_: ;
1412 	return result;
1413 }
N_INLINE(NI32,floorLog2Pow10__systemZschubfach_67)1414 static N_INLINE(NI32, floorLog2Pow10__systemZschubfach_67)(NI32 e) {
1415 	NI32 result;
1416 {	result = (NI32)0;
1417 	result = floorDivPow2__systemZschubfach_59((NI32)(e * ((NI32) 1741647)), ((NI32) 19));
1418 	goto BeforeRet_;
1419 	}BeforeRet_: ;
1420 	return result;
1421 }
N_INLINE(NU64,computePow10Single__systemZschubfach_88)1422 static N_INLINE(NU64, computePow10Single__systemZschubfach_88)(NI32 k) {
1423 	NU64 result;
1424 {	result = (NU64)0;
1425 	result = g__systemZschubfach_78[((NI32)(k - ((NI32) -31)))- 0];
1426 	goto BeforeRet_;
1427 	}BeforeRet_: ;
1428 	return result;
1429 }
N_INLINE(NU32,lo32__systemZschubfach_106)1430 static N_INLINE(NU32, lo32__systemZschubfach_106)(NU64 x) {
1431 	NU32 result;
1432 {	result = (NU32)0;
1433 	result = ((NU32) (x));
1434 	goto BeforeRet_;
1435 	}BeforeRet_: ;
1436 	return result;
1437 }
N_INLINE(NU32,hi32__systemZschubfach_109)1438 static N_INLINE(NU32, hi32__systemZschubfach_109)(NU64 x) {
1439 	NU32 result;
1440 {	result = (NU32)0;
1441 	result = ((NU32) ((NU64)((NU64)(x) >> (NU64)(((NI) 32)))));
1442 	goto BeforeRet_;
1443 	}BeforeRet_: ;
1444 	return result;
1445 }
N_INLINE(NU32,roundToOdd__systemZschubfach_116)1446 static N_INLINE(NU32, roundToOdd__systemZschubfach_116)(NU64 g, NU32 cp) {
1447 	NU32 result;
1448 	NU64 b01;
1449 	NU32 T1_;
1450 	NU64 b11;
1451 	NU32 T2_;
1452 	NU64 hi;
1453 	NU32 T3_;
1454 	NU32 y1;
1455 	NU32 y0;
1456 {	result = (NU32)0;
1457 	T1_ = (NU32)0;
1458 	T1_ = lo32__systemZschubfach_106(g);
1459 	b01 = (NU64)((NU64)(((NU64) (T1_))) * (NU64)(((NU64) (cp))));
1460 	T2_ = (NU32)0;
1461 	T2_ = hi32__systemZschubfach_109(g);
1462 	b11 = (NU64)((NU64)(((NU64) (T2_))) * (NU64)(((NU64) (cp))));
1463 	T3_ = (NU32)0;
1464 	T3_ = hi32__systemZschubfach_109(b01);
1465 	hi = (NU64)((NU64)(b11) + (NU64)(((NU64) (T3_))));
1466 	y1 = hi32__systemZschubfach_109(hi);
1467 	y0 = lo32__systemZschubfach_106(hi);
1468 	result = (NU32)(y1 | ((NU32) (((NU32)(((NU32) 1)) < (NU32)(y0)))));
1469 	goto BeforeRet_;
1470 	}BeforeRet_: ;
1471 	return result;
1472 }
N_INLINE(tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg,toDecimal32__systemZschubfach_142)1473 static N_INLINE(tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg, toDecimal32__systemZschubfach_142)(NU32 ieeeSignificand, NU32 ieeeExponent) {
1474 	tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg result;
1475 	NU32 c;
1476 	NI32 q;
1477 	NIM_BOOL isEven;
1478 	NIM_BOOL lowerBoundaryIsCloser;
1479 	NIM_BOOL T14_;
1480 	NU32 cbl;
1481 	NU32 cb;
1482 	NU32 cbr;
1483 	NI32 k;
1484 	NI T16_;
1485 	NI32 h;
1486 	NI32 T22_;
1487 	NU64 pow10;
1488 	NU32 vbl;
1489 	NU32 vb;
1490 	NU32 vbr;
1491 	NU32 lower;
1492 	NU32 upper;
1493 	NU32 s;
1494 	NIM_BOOL uInside;
1495 	NIM_BOOL wInside;
1496 	NU32 mid;
1497 	NIM_BOOL roundUp;
1498 	NIM_BOOL T35_;
1499 	NIM_BOOL T37_;
1500 {	nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg));
1501 	c = (NU32)0;
1502 	q = (NI32)0;
1503 	{
1504 		if (!!((ieeeExponent == ((NU32) 0)))) goto LA3_;
1505 		c = (NU32)(((NU32) 8388608) | ieeeSignificand);
1506 		q = (NI32)(((NI32) (ieeeExponent)) - ((NI32) 150));
1507 		{
1508 			NIM_BOOL T7_;
1509 			NIM_BOOL T8_;
1510 			T7_ = (NIM_BOOL)0;
1511 			T8_ = (NIM_BOOL)0;
1512 			T8_ = (((NI32) 0) <= ((NI32)-(q)));
1513 			if (!(T8_)) goto LA9_;
1514 			T8_ = (((NI32)-(q)) < ((NI32) 24));
1515 			LA9_: ;
1516 			T7_ = T8_;
1517 			if (!(T7_)) goto LA10_;
1518 			T7_ = multipleOfPow2__systemZschubfach_125(c, ((NI32)-(q)));
1519 			LA10_: ;
1520 			if (!T7_) goto LA11_;
1521 			nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg));
1522 			result.digits = (NU32)((NU32)(c) >> (NU32)(((NI32)-(q))));
1523 			result.exponent = ((NI32) 0);
1524 			goto BeforeRet_;
1525 		}
1526 		LA11_: ;
1527 	}
1528 	goto LA1_;
1529 	LA3_: ;
1530 	{
1531 		c = ieeeSignificand;
1532 		q = ((NI32) -149);
1533 	}
1534 	LA1_: ;
1535 	isEven = ((NU32)((NU32)(c) % (NU32)(((NU32) 2))) == ((NU32) 0));
1536 	T14_ = (NIM_BOOL)0;
1537 	T14_ = (ieeeSignificand == ((NU32) 0));
1538 	if (!(T14_)) goto LA15_;
1539 	T14_ = ((NU32)(((NU32) 1)) < (NU32)(ieeeExponent));
1540 	LA15_: ;
1541 	lowerBoundaryIsCloser = T14_;
1542 	cbl = (NU32)((NU32)((NU32)((NU32)((NU32)((NU32)(((NU32) 4)) * (NU32)(c))) - (NU32)(((NU32) 2)))) + (NU32)(((NU32) (lowerBoundaryIsCloser))));
1543 	cb = (NU32)((NU32)(((NU32) 4)) * (NU32)(c));
1544 	cbr = (NU32)((NU32)((NU32)((NU32)(((NU32) 4)) * (NU32)(c))) + (NU32)(((NU32) 2)));
1545 	T16_ = (NI)0;
1546 	{
1547 		if (!lowerBoundaryIsCloser) goto LA19_;
1548 		T16_ = ((NI) 524031);
1549 	}
1550 	goto LA17_;
1551 	LA19_: ;
1552 	{
1553 		T16_ = ((NI) 0);
1554 	}
1555 	LA17_: ;
1556 	k = floorDivPow2__systemZschubfach_59((NI32)((NI32)(q * ((NI32) 1262611)) - ((NI32) (T16_))), ((NI32) 22));
1557 	T22_ = (NI32)0;
1558 	T22_ = floorLog2Pow10__systemZschubfach_67(((NI32)-(k)));
1559 	h = (NI32)((NI32)(q + T22_) + ((NI32) 1));
1560 	pow10 = computePow10Single__systemZschubfach_88(((NI32)-(k)));
1561 	vbl = roundToOdd__systemZschubfach_116(pow10, (NU32)((NU32)(cbl) << (NU32)(h)));
1562 	vb = roundToOdd__systemZschubfach_116(pow10, (NU32)((NU32)(cb) << (NU32)(h)));
1563 	vbr = roundToOdd__systemZschubfach_116(pow10, (NU32)((NU32)(cbr) << (NU32)(h)));
1564 	lower = (NU32)((NU32)(vbl) + (NU32)(((NU32) (!(isEven)))));
1565 	upper = (NU32)((NU32)(vbr) - (NU32)(((NU32) (!(isEven)))));
1566 	s = (NU32)((NU32)(vb) / (NU32)(((NU32) 4)));
1567 	{
1568 		NU32 sp;
1569 		NIM_BOOL upInside;
1570 		NIM_BOOL wpInside;
1571 		if (!((NU32)(((NU32) 10)) <= (NU32)(s))) goto LA25_;
1572 		sp = (NU32)((NU32)(s) / (NU32)(((NU32) 10)));
1573 		upInside = ((NU32)(lower) <= (NU32)((NU32)((NU32)(((NU32) 40)) * (NU32)(sp))));
1574 		wpInside = ((NU32)((NU32)((NU32)((NU32)((NU32)(((NU32) 40)) * (NU32)(sp))) + (NU32)(((NU32) 40)))) <= (NU32)(upper));
1575 		{
1576 			if (!!((upInside == wpInside))) goto LA29_;
1577 			nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg));
1578 			result.digits = (NU32)((NU32)(sp) + (NU32)(((NU32) (wpInside))));
1579 			result.exponent = (NI32)(k + ((NI32) 1));
1580 			goto BeforeRet_;
1581 		}
1582 		LA29_: ;
1583 	}
1584 	LA25_: ;
1585 	uInside = ((NU32)(lower) <= (NU32)((NU32)((NU32)(((NU32) 4)) * (NU32)(s))));
1586 	wInside = ((NU32)((NU32)((NU32)((NU32)((NU32)(((NU32) 4)) * (NU32)(s))) + (NU32)(((NU32) 4)))) <= (NU32)(upper));
1587 	{
1588 		if (!!((uInside == wInside))) goto LA33_;
1589 		nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg));
1590 		result.digits = (NU32)((NU32)(s) + (NU32)(((NU32) (wInside))));
1591 		result.exponent = k;
1592 		goto BeforeRet_;
1593 	}
1594 	LA33_: ;
1595 	mid = (NU32)((NU32)((NU32)((NU32)(((NU32) 4)) * (NU32)(s))) + (NU32)(((NU32) 2)));
1596 	T35_ = (NIM_BOOL)0;
1597 	T35_ = ((NU32)(mid) < (NU32)(vb));
1598 	if (T35_) goto LA36_;
1599 	T37_ = (NIM_BOOL)0;
1600 	T37_ = (vb == mid);
1601 	if (!(T37_)) goto LA38_;
1602 	T37_ = !(((NU32)(s & ((NU32) 1)) == ((NU32) 0)));
1603 	LA38_: ;
1604 	T35_ = T37_;
1605 	LA36_: ;
1606 	roundUp = T35_;
1607 	nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg));
1608 	result.digits = (NU32)((NU32)(s) + (NU32)(((NU32) (roundUp))));
1609 	result.exponent = k;
1610 	goto BeforeRet_;
1611 	}BeforeRet_: ;
1612 	return result;
1613 }
N_INLINE(NI32,decimalLength__systemZschubfach_277)1614 static N_INLINE(NI32, decimalLength__systemZschubfach_277)(NU32 v) {
1615 	NI32 result;
1616 {	result = (NI32)0;
1617 	{
1618 		if (!((NU32)(((NU) 100000000)) <= (NU32)(((NU) (v))))) goto LA3_;
1619 		result = ((NI32) 9);
1620 		goto BeforeRet_;
1621 	}
1622 	LA3_: ;
1623 	{
1624 		if (!((NU32)(((NU) 10000000)) <= (NU32)(((NU) (v))))) goto LA7_;
1625 		result = ((NI32) 8);
1626 		goto BeforeRet_;
1627 	}
1628 	LA7_: ;
1629 	{
1630 		if (!((NU32)(((NU) 1000000)) <= (NU32)(((NU) (v))))) goto LA11_;
1631 		result = ((NI32) 7);
1632 		goto BeforeRet_;
1633 	}
1634 	LA11_: ;
1635 	{
1636 		if (!((NU32)(((NU) 100000)) <= (NU32)(((NU) (v))))) goto LA15_;
1637 		result = ((NI32) 6);
1638 		goto BeforeRet_;
1639 	}
1640 	LA15_: ;
1641 	{
1642 		if (!((NU32)(((NU) 10000)) <= (NU32)(((NU) (v))))) goto LA19_;
1643 		result = ((NI32) 5);
1644 		goto BeforeRet_;
1645 	}
1646 	LA19_: ;
1647 	{
1648 		if (!((NU32)(((NU) 1000)) <= (NU32)(((NU) (v))))) goto LA23_;
1649 		result = ((NI32) 4);
1650 		goto BeforeRet_;
1651 	}
1652 	LA23_: ;
1653 	{
1654 		if (!((NU32)(((NU) 100)) <= (NU32)(((NU) (v))))) goto LA27_;
1655 		result = ((NI32) 3);
1656 		goto BeforeRet_;
1657 	}
1658 	LA27_: ;
1659 	{
1660 		if (!((NU32)(((NU) 10)) <= (NU32)(((NU) (v))))) goto LA31_;
1661 		result = ((NI32) 2);
1662 		goto BeforeRet_;
1663 	}
1664 	LA31_: ;
1665 	result = ((NI32) 1);
1666 	goto BeforeRet_;
1667 	}BeforeRet_: ;
1668 	return result;
1669 }
N_INLINE(NI32,printDecimalDigitsBackwards__systemZschubfach_206)1670 static N_INLINE(NI32, printDecimalDigitsBackwards__systemZschubfach_206)(NIM_CHAR* buf, NI bufLen_0, NI pos, NU32 output) {
1671 	NI32 result;
1672 	NU32 output_2;
1673 	NI pos_2;
1674 	NI32 tz;
1675 	NI32 nd;
1676 {	result = (NI32)0;
1677 	output_2 = output;
1678 	pos_2 = pos;
1679 	tz = ((NI32) 0);
1680 	nd = ((NI32) 0);
1681 	{
1682 		NU32 q;
1683 		NU32 r;
1684 		if (!((NU32)(((NU32) 10000)) <= (NU32)(output_2))) goto LA3_;
1685 		q = (NU32)((NU32)(output_2) / (NU32)(((NU32) 10000)));
1686 		r = (NU32)((NU32)(output_2) % (NU32)(((NU32) 10000)));
1687 		output_2 = q;
1688 		pos_2 -= ((NI) 4);
1689 		{
1690 			NU32 rH;
1691 			NU32 rL;
1692 			NU32 T9_;
1693 			NI32 T15_;
1694 			NI T16_;
1695 			if (!!((r == ((NU32) 0)))) goto LA7_;
1696 			rH = (NU32)((NU32)(r) / (NU32)(((NU32) 100)));
1697 			rL = (NU32)((NU32)(r) % (NU32)(((NU32) 100)));
1698 			utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos_2, rH);
1699 			utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, (NI)(pos_2 + ((NI) 2)), rL);
1700 			T9_ = (NU32)0;
1701 			{
1702 				if (!(rL == ((NU32) 0))) goto LA12_;
1703 				T9_ = rH;
1704 			}
1705 			goto LA10_;
1706 			LA12_: ;
1707 			{
1708 				T9_ = rL;
1709 			}
1710 			LA10_: ;
1711 			T15_ = (NI32)0;
1712 			T15_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(T9_);
1713 			T16_ = (NI)0;
1714 			{
1715 				if (!(rL == ((NU32) 0))) goto LA19_;
1716 				T16_ = ((NI) 2);
1717 			}
1718 			goto LA17_;
1719 			LA19_: ;
1720 			{
1721 				T16_ = ((NI) 0);
1722 			}
1723 			LA17_: ;
1724 			tz = (NI32)(T15_ + ((NI32) (T16_)));
1725 		}
1726 		goto LA5_;
1727 		LA7_: ;
1728 		{
1729 			tz = ((NI32) 4);
1730 		}
1731 		LA5_: ;
1732 		nd = ((NI32) 4);
1733 	}
1734 	LA3_: ;
1735 	{
1736 		NU32 q_2;
1737 		NU32 r_2;
1738 		if (!((NU32)(((NU32) 100)) <= (NU32)(output_2))) goto LA25_;
1739 		q_2 = (NU32)((NU32)(output_2) / (NU32)(((NU32) 100)));
1740 		r_2 = (NU32)((NU32)(output_2) % (NU32)(((NU32) 100)));
1741 		output_2 = q_2;
1742 		pos_2 -= ((NI) 2);
1743 		utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos_2, r_2);
1744 		{
1745 			NI32 T31_;
1746 			if (!(tz == nd)) goto LA29_;
1747 			T31_ = (NI32)0;
1748 			T31_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(r_2);
1749 			tz += ((NI) (T31_));
1750 		}
1751 		LA29_: ;
1752 		nd += ((NI) 2);
1753 		{
1754 			NU32 q2;
1755 			NU32 r2;
1756 			if (!((NU32)(((NU32) 100)) <= (NU32)(output_2))) goto LA34_;
1757 			q2 = (NU32)((NU32)(output_2) / (NU32)(((NU32) 100)));
1758 			r2 = (NU32)((NU32)(output_2) % (NU32)(((NU32) 100)));
1759 			output_2 = q2;
1760 			pos_2 -= ((NI) 2);
1761 			utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos_2, r2);
1762 			{
1763 				NI32 T40_;
1764 				if (!(tz == nd)) goto LA38_;
1765 				T40_ = (NI32)0;
1766 				T40_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(r2);
1767 				tz += ((NI) (T40_));
1768 			}
1769 			LA38_: ;
1770 			nd += ((NI) 2);
1771 		}
1772 		LA34_: ;
1773 	}
1774 	LA25_: ;
1775 	{
1776 		NU32 q_3;
1777 		if (!((NU32)(((NU32) 10)) <= (NU32)(output_2))) goto LA43_;
1778 		q_3 = output_2;
1779 		pos_2 -= ((NI) 2);
1780 		utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos_2, q_3);
1781 		{
1782 			NI32 T49_;
1783 			if (!(tz == nd)) goto LA47_;
1784 			T49_ = (NI32)0;
1785 			T49_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(q_3);
1786 			tz += ((NI) (T49_));
1787 		}
1788 		LA47_: ;
1789 	}
1790 	goto LA41_;
1791 	LA43_: ;
1792 	{
1793 		NU32 q_4;
1794 		q_4 = output_2;
1795 		pos_2 -= ((NI) 1);
1796 		buf[pos_2] = ((NIM_CHAR) (((NI) ((NU32)((NU32)(((NU32) 48)) + (NU32)(q_4))))));
1797 	}
1798 	LA41_: ;
1799 	result = tz;
1800 	goto BeforeRet_;
1801 	}BeforeRet_: ;
1802 	return result;
1803 }
N_INLINE(NI,formatDigits__systemZschubfach_286)1804 static N_INLINE(NI, formatDigits__systemZschubfach_286)(NIM_CHAR* buffer, NI bufferLen_0, NI pos, NU32 digits, NI32 decimalExponent, NIM_BOOL forceTrailingDotZero) {
1805 	NI result;
1806 	NI pos_2;
1807 	NI32 numDigits;
1808 	NI32 decimalPoint;
1809 	NIM_BOOL useFixed;
1810 	NIM_BOOL T1_;
1811 	NI32 decimalDigitsPosition;
1812 	NI digitsEnd;
1813 	NI32 tz;
1814 {	result = (NI)0;
1815 	pos_2 = pos;
1816 	numDigits = decimalLength__systemZschubfach_277(digits);
1817 	decimalPoint = (NI32)(numDigits + decimalExponent);
1818 	T1_ = (NIM_BOOL)0;
1819 	T1_ = (((NI32) -4) <= decimalPoint);
1820 	if (!(T1_)) goto LA2_;
1821 	T1_ = (decimalPoint <= ((NI32) 9));
1822 	LA2_: ;
1823 	useFixed = T1_;
1824 	{
1825 		NI i;
1826 		NI i_2;
1827 		i = (NI)0;
1828 		i_2 = ((NI) 0);
1829 		{
1830 			while (1) {
1831 				if (!(i_2 < ((NI) 32))) goto LA5;
1832 				i = i_2;
1833 				buffer[(NI)(pos_2 + i)] = 48;
1834 				i_2 += ((NI) 1);
1835 			} LA5: ;
1836 		}
1837 	}
1838 	decimalDigitsPosition = (NI32)0;
1839 	{
1840 		if (!useFixed) goto LA8_;
1841 		{
1842 			if (!(decimalPoint <= ((NI32) 0))) goto LA12_;
1843 			decimalDigitsPosition = (NI32)(((NI32) 2) - decimalPoint);
1844 		}
1845 		goto LA10_;
1846 		LA12_: ;
1847 		{
1848 			decimalDigitsPosition = ((NI32) 0);
1849 		}
1850 		LA10_: ;
1851 	}
1852 	goto LA6_;
1853 	LA8_: ;
1854 	{
1855 		decimalDigitsPosition = ((NI32) 1);
1856 	}
1857 	LA6_: ;
1858 	digitsEnd = (NI)((NI)(pos_2 + ((NI) (decimalDigitsPosition))) + ((NI) (numDigits)));
1859 	tz = printDecimalDigitsBackwards__systemZschubfach_206(buffer, bufferLen_0, digitsEnd, digits);
1860 	digitsEnd -= ((NI) (tz));
1861 	numDigits -= ((NI) (tz));
1862 	{
1863 		if (!useFixed) goto LA18_;
1864 		{
1865 			if (!(decimalPoint <= ((NI32) 0))) goto LA22_;
1866 			buffer[(NI)(pos_2 + ((NI) 1))] = 46;
1867 			pos_2 = digitsEnd;
1868 		}
1869 		goto LA20_;
1870 		LA22_: ;
1871 		{
1872 			if (!(decimalPoint < numDigits)) goto LA25_;
1873 			{
1874 				NI i_3;
1875 				NI res;
1876 				i_3 = (NI)0;
1877 				res = ((NI) 7);
1878 				{
1879 					while (1) {
1880 						if (!(((NI) 0) <= res)) goto LA29;
1881 						i_3 = res;
1882 						buffer[(NI)((NI)(i_3 + ((NI) (decimalPoint))) + ((NI) 1))] = buffer[(NI)(i_3 + ((NI) (decimalPoint)))];
1883 						res -= ((NI) 1);
1884 					} LA29: ;
1885 				}
1886 			}
1887 			buffer[(NI)(pos_2 + ((NI) (decimalPoint)))] = 46;
1888 			pos_2 = (NI)(digitsEnd + ((NI) 1));
1889 		}
1890 		goto LA20_;
1891 		LA25_: ;
1892 		{
1893 			pos_2 += ((NI) (decimalPoint));
1894 			{
1895 				if (!forceTrailingDotZero) goto LA33_;
1896 				buffer[pos_2] = 46;
1897 				buffer[(NI)(pos_2 + ((NI) 1))] = 48;
1898 				pos_2 += ((NI) 2);
1899 			}
1900 			LA33_: ;
1901 		}
1902 		LA20_: ;
1903 	}
1904 	goto LA16_;
1905 	LA18_: ;
1906 	{
1907 		NI32 scientificExponent;
1908 		NU32 k;
1909 		NI32 T46_;
1910 		buffer[pos_2] = buffer[(NI)(pos_2 + ((NI) 1))];
1911 		{
1912 			if (!(numDigits == ((NI32) 1))) goto LA38_;
1913 			pos_2 += ((NI) 1);
1914 		}
1915 		goto LA36_;
1916 		LA38_: ;
1917 		{
1918 			buffer[(NI)(pos_2 + ((NI) 1))] = 46;
1919 			pos_2 = digitsEnd;
1920 		}
1921 		LA36_: ;
1922 		scientificExponent = (NI32)(decimalPoint - ((NI32) 1));
1923 		buffer[pos_2] = 101;
1924 		{
1925 			if (!(scientificExponent < ((NI32) 0))) goto LA43_;
1926 			buffer[(NI)(pos_2 + ((NI) 1))] = 45;
1927 		}
1928 		goto LA41_;
1929 		LA43_: ;
1930 		{
1931 			buffer[(NI)(pos_2 + ((NI) 1))] = 43;
1932 		}
1933 		LA41_: ;
1934 		pos_2 += ((NI) 2);
1935 		T46_ = (NI32)0;
1936 		{
1937 			if (!(scientificExponent < ((NI32) 0))) goto LA49_;
1938 			T46_ = ((NI32)-(scientificExponent));
1939 		}
1940 		goto LA47_;
1941 		LA49_: ;
1942 		{
1943 			T46_ = scientificExponent;
1944 		}
1945 		LA47_: ;
1946 		k = ((NU32) (T46_));
1947 		{
1948 			if (!((NU32)(k) < (NU32)(((NU32) 10)))) goto LA54_;
1949 			buffer[pos_2] = ((NIM_CHAR) (((NI) ((NU32)((NU32)(((NU32) 48)) + (NU32)(k))))));
1950 			pos_2 += ((NI) 1);
1951 		}
1952 		goto LA52_;
1953 		LA54_: ;
1954 		{
1955 			utoa2Digits__stdZprivateZdigitsutils_21(buffer, bufferLen_0, pos_2, k);
1956 			pos_2 += ((NI) 2);
1957 		}
1958 		LA52_: ;
1959 	}
1960 	LA16_: ;
1961 	result = pos_2;
1962 	goto BeforeRet_;
1963 	}BeforeRet_: ;
1964 	return result;
1965 }
N_INLINE(NI,float32ToChars__systemZschubfach_387)1966 static N_INLINE(NI, float32ToChars__systemZschubfach_387)(NIM_CHAR* buffer, NI bufferLen_0, NF32 v, NIM_BOOL forceTrailingDotZero) {
1967 	NI result;
1968 	NU32 significand;
1969 	tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ T1_;
1970 	NU32 exponent;
1971 	tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ T2_;
1972 	NI pos;
1973 {	result = (NI)0;
1974 	T1_ = constructSingle__systemZschubfach_31(v);
1975 	significand = physicalSignificand__systemZschubfach_34(T1_);
1976 	T2_ = constructSingle__systemZschubfach_31(v);
1977 	exponent = physicalExponent__systemZschubfach_37(T2_);
1978 	pos = ((NI) 0);
1979 	{
1980 		tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ T7_;
1981 		NI T8_;
1982 		if (!!((exponent == ((NU32) 255)))) goto LA5_;
1983 		buffer[pos] = 45;
1984 		T7_ = constructSingle__systemZschubfach_31(v);
1985 		T8_ = (NI)0;
1986 		T8_ = signBit__systemZschubfach_56(T7_);
1987 		pos += T8_;
1988 		{
1989 			NIM_BOOL T11_;
1990 			tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg dec;
1991 			T11_ = (NIM_BOOL)0;
1992 			T11_ = !((exponent == ((NU32) 0)));
1993 			if (T11_) goto LA12_;
1994 			T11_ = !((significand == ((NU32) 0)));
1995 			LA12_: ;
1996 			if (!T11_) goto LA13_;
1997 			dec = toDecimal32__systemZschubfach_142(significand, exponent);
1998 			result = formatDigits__systemZschubfach_286(buffer, bufferLen_0, pos, dec.digits, dec.exponent, forceTrailingDotZero);
1999 			goto BeforeRet_;
2000 		}
2001 		goto LA9_;
2002 		LA13_: ;
2003 		{
2004 			NI T16_;
2005 			buffer[pos] = 48;
2006 			buffer[(NI)(pos + ((NI) 1))] = 46;
2007 			buffer[(NI)(pos + ((NI) 2))] = 48;
2008 			buffer[(NI)(pos + ((NI) 3))] = 32;
2009 			T16_ = (NI)0;
2010 			{
2011 				if (!forceTrailingDotZero) goto LA19_;
2012 				T16_ = ((NI) 3);
2013 			}
2014 			goto LA17_;
2015 			LA19_: ;
2016 			{
2017 				T16_ = ((NI) 1);
2018 			}
2019 			LA17_: ;
2020 			pos += T16_;
2021 			result = pos;
2022 			goto BeforeRet_;
2023 		}
2024 		LA9_: ;
2025 	}
2026 	LA5_: ;
2027 	{
2028 		tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ T26_;
2029 		NI T27_;
2030 		if (!(significand == ((NU32) 0))) goto LA24_;
2031 		buffer[pos] = 45;
2032 		T26_ = constructSingle__systemZschubfach_31(v);
2033 		T27_ = (NI)0;
2034 		T27_ = signBit__systemZschubfach_56(T26_);
2035 		pos += T27_;
2036 		buffer[pos] = 105;
2037 		buffer[(NI)(pos + ((NI) 1))] = 110;
2038 		buffer[(NI)(pos + ((NI) 2))] = 102;
2039 		buffer[(NI)(pos + ((NI) 3))] = 32;
2040 		result = (NI)(pos + ((NI) 3));
2041 		goto BeforeRet_;
2042 	}
2043 	goto LA22_;
2044 	LA24_: ;
2045 	{
2046 		buffer[pos] = 110;
2047 		buffer[(NI)(pos + ((NI) 1))] = 97;
2048 		buffer[(NI)(pos + ((NI) 2))] = 110;
2049 		buffer[(NI)(pos + ((NI) 3))] = 32;
2050 		result = (NI)(pos + ((NI) 3));
2051 		goto BeforeRet_;
2052 	}
2053 	LA22_: ;
2054 	}BeforeRet_: ;
2055 	return result;
2056 }
N_NIMCALL(NI,writeFloatToBufferRoundtrip__systemZformatfloat_44)2057 N_LIB_PRIVATE N_NIMCALL(NI, writeFloatToBufferRoundtrip__systemZformatfloat_44)(NIM_CHAR* buf, NF32 value) {
2058 	NI result;
2059 	result = (NI)0;
2060 	result = float32ToChars__systemZschubfach_387(buf, 65, value, NIM_TRUE);
2061 	buf[(result)- 0] = 0;
2062 	return result;
2063 }
2064