/* Generated by Nim Compiler v1.6.10 */
#define NIM_INTBITS 32

#include "nimbase.h"
#include <string.h>
#include <stdio.h>
#undef LANGUAGE_C
#undef MIPSEB
#undef MIPSEL
#undef PPC
#undef R3000
#undef R4000
#undef i386
#undef linux
#undef mips
#undef near
#undef far
#undef powerpc
#undef unix
#define nimfr_(x, y)
#define nimln_(x, y)
typedef struct NimStringDesc NimStringDesc;
typedef struct TGenericSeq TGenericSeq;
typedef struct tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw;
typedef struct tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg;
typedef struct tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw;
typedef struct tyObject_MulCmp__tPF4ETaAdtVLNu8l2IurgA tyObject_MulCmp__tPF4ETaAdtVLNu8l2IurgA;
typedef struct tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ;
typedef struct tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg;
struct TGenericSeq {
NI len;
NI reserved;
};
struct NimStringDesc {
  TGenericSeq Sup;
NIM_CHAR data[SEQ_DECL_SIZE];
};
typedef NIM_CHAR tyArray__eVNFTutn6un5gcq48fQLdg[65];
struct tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw {
NU64 bits;
};
struct tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg {
NU64 significand;
NI32 exponent;
};
struct tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw {
NU64 hi;
NU64 lo;
};
typedef tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw tyArray__YxVLJbmWgWA9aXEi5wDoQhA[619];
struct tyObject_MulCmp__tPF4ETaAdtVLNu8l2IurgA {
NU64 mul;
NU64 cmp;
};
typedef tyObject_MulCmp__tPF4ETaAdtVLNu8l2IurgA tyArray__9apbx8OXkiOk9cnMKRpy11KQ[25];
typedef NIM_CHAR tyArray__38Z69amCaoywES5tRmClBSw[200];
typedef NI8 tyArray__k7wgHIN8mKeRF236nmwvnQ[100];
typedef NIM_CHAR tyArray__Wfh9bjgBQ4UqJsyISUuDSuA[16];
struct tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ {
NU32 bits;
};
struct tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg {
NU32 digits;
NI32 exponent;
};
typedef NU64 tyArray__ocdlWeLAycDNOOtB9cadACA[77];
N_LIB_PRIVATE N_NIMCALL(NI, writeFloatToBufferRoundtrip__systemZformatfloat_13)(NIM_CHAR* buf, NF value);
static N_INLINE(NI, toChars__systemZdragonbox_672)(NIM_CHAR* buffer, NI bufferLen_0, NF v, NIM_BOOL forceTrailingDotZero);
N_LIB_PRIVATE N_NIMCALL(NU64, physicalSignificand__systemZdragonbox_34)(tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw this_0);
N_LIB_PRIVATE N_NIMCALL(tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw, constructDouble__systemZdragonbox_31)(NF value);
N_LIB_PRIVATE N_NIMCALL(NU64, physicalExponent__systemZdragonbox_37)(tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw this_0);
N_LIB_PRIVATE N_NIMCALL(NI, signBit__systemZdragonbox_56)(tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw this_0);
static N_INLINE(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg, toDecimal64__systemZdragonbox_336)(NU64 ieeeSignificand, NU64 ieeeExponent);
static N_INLINE(void, nimZeroMem)(void* p, NI size);
static N_INLINE(void, nimSetMem__systemZmemory_7)(void* a, int v, NI size);
static N_INLINE(NIM_BOOL, multipleOfPow2__systemZdragonbox_139)(NU64 value, NI32 e2);
static N_INLINE(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg, toDecimal64AsymmetricInterval__systemZdragonbox_195)(NI32 e2);
static N_INLINE(NI32, floorLog10ThreeQuartersPow2__systemZdragonbox_88)(NI32 e);
static N_INLINE(NI32, floorDivPow2__systemZdragonbox_62)(NI32 x, NI32 n);
static N_INLINE(NI32, floorLog2Pow10__systemZdragonbox_70)(NI32 e);
static N_INLINE(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw, computePow10__systemZdragonbox_100)(NI32 k);
static N_INLINE(NI32, floorLog10Pow2__systemZdragonbox_79)(NI32 e);
static N_INLINE(NU32, computeDelta__systemZdragonbox_251)(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw pow10, NI32 betaMinus1);
static N_INLINE(NU64, mulShift__systemZdragonbox_291)(NU64 x, tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw y);
static N_INLINE(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw, mul128__systemZdragonbox_275)(NU64 a, NU64 b);
static N_INLINE(NU32, lo32__systemZdragonbox_265)(NU64 x);
static N_INLINE(NU32, hi32__systemZdragonbox_268)(NU64 x);
static N_INLINE(NIM_BOOL, isIntegralEndpoint__systemZdragonbox_326)(NU64 twoF, NI32 e2, NI32 minusK);
static N_INLINE(NIM_BOOL, multipleOfPow5__systemZdragonbox_150)(NU64 value, NI32 e5);
static N_INLINE(NIM_BOOL, mulParity__systemZdragonbox_308)(NU64 twoF, tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw pow10, NI32 betaMinus1);
static N_INLINE(NIM_BOOL, isIntegralMidpoint__systemZdragonbox_331)(NU64 twoF, NI32 e2, NI32 minusK);
static N_INLINE(NI, formatDigits__systemZdragonbox_548)(NIM_CHAR* buffer, NI bufferLen_0, NI pos, NU64 digits, NI32 decimalExponent, NIM_BOOL forceTrailingDotZero);
static N_INLINE(NI32, decimalLength__systemZdragonbox_534)(NU64 v);
static N_INLINE(NI32, printDecimalDigitsBackwards__systemZdragonbox_417)(NIM_CHAR* buf, NI bufLen_0, NI pos, NU64 output64);
static N_INLINE(NI32, utoa8DigitsSkipTrailingZeros__systemZdragonbox_400)(NIM_CHAR* buf, NI bufLen_0, NI pos, NU32 digits);
static N_INLINE(void, utoa2Digits__stdZprivateZdigitsutils_21)(NIM_CHAR* buf, NI bufLen_0, NI pos, NU32 digits);
static N_INLINE(NI32, trailingZeros2Digits__stdZprivateZdigitsutils_34)(NU32 digits);
N_LIB_PRIVATE N_NIMCALL(void, addCstringN__systemZformatfloat_5)(NimStringDesc** result, NCSTRING buf, NI buflen);
N_LIB_PRIVATE N_NIMCALL(NimStringDesc*, setLengthStr)(NimStringDesc* s, NI newLen);
N_LIB_PRIVATE N_NIMCALL(void, unsureAsgnRef)(void** dest, void* src);
N_LIB_PRIVATE N_NIMCALL(NI, writeFloatToBufferSprintf__systemZformatfloat_59)(NIM_CHAR* buf, NF value);
N_LIB_PRIVATE N_NIMCALL(void, writeToBuffer__systemZformatfloat_51)(NIM_CHAR* buf, NCSTRING value);
N_LIB_PRIVATE N_NIMCALL(NI, writeFloatToBufferRoundtrip__systemZformatfloat_44)(NIM_CHAR* buf, NF32 value);
static N_INLINE(NI, float32ToChars__systemZschubfach_387)(NIM_CHAR* buffer, NI bufferLen_0, NF32 v, NIM_BOOL forceTrailingDotZero);
N_LIB_PRIVATE N_NIMCALL(NU32, physicalSignificand__systemZschubfach_34)(tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ this_0);
N_LIB_PRIVATE N_NIMCALL(tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ, constructSingle__systemZschubfach_31)(NF32 value);
N_LIB_PRIVATE N_NIMCALL(NU32, physicalExponent__systemZschubfach_37)(tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ this_0);
N_LIB_PRIVATE N_NIMCALL(NI, signBit__systemZschubfach_56)(tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ this_0);
static N_INLINE(tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg, toDecimal32__systemZschubfach_142)(NU32 ieeeSignificand, NU32 ieeeExponent);
static N_INLINE(NIM_BOOL, multipleOfPow2__systemZschubfach_125)(NU32 value, NI32 e2);
static N_INLINE(NI32, floorDivPow2__systemZschubfach_59)(NI32 x, NI32 n);
static N_INLINE(NI32, floorLog2Pow10__systemZschubfach_67)(NI32 e);
static N_INLINE(NU64, computePow10Single__systemZschubfach_88)(NI32 k);
static N_INLINE(NU32, roundToOdd__systemZschubfach_116)(NU64 g, NU32 cp);
static N_INLINE(NU32, lo32__systemZschubfach_106)(NU64 x);
static N_INLINE(NU32, hi32__systemZschubfach_109)(NU64 x);
static N_INLINE(NI, formatDigits__systemZschubfach_286)(NIM_CHAR* buffer, NI bufferLen_0, NI pos, NU32 digits, NI32 decimalExponent, NIM_BOOL forceTrailingDotZero);
static N_INLINE(NI32, decimalLength__systemZschubfach_277)(NU32 v);
static N_INLINE(NI32, printDecimalDigitsBackwards__systemZschubfach_206)(NIM_CHAR* buf, NI bufLen_0, NI pos, NU32 output);
extern NIM_CONST tyArray__YxVLJbmWgWA9aXEi5wDoQhA pow10__systemZdragonbox_105;
extern NIM_CONST tyArray__9apbx8OXkiOk9cnMKRpy11KQ mod5__systemZdragonbox_157;
extern NIM_CONST tyArray__38Z69amCaoywES5tRmClBSw digits100__stdZprivateZdigitsutils_2;
extern NIM_CONST tyArray__k7wgHIN8mKeRF236nmwvnQ trailingZeros100__stdZprivateZdigitsutils_1;
extern NIM_CONST tyArray__ocdlWeLAycDNOOtB9cadACA g__systemZschubfach_78;
static N_INLINE(void, nimSetMem__systemZmemory_7)(void* a, int v, NI size) {
	void* T1_;
	T1_ = (void*)0;
	T1_ = memset(a, v, ((size_t) (size)));
}
static N_INLINE(void, nimZeroMem)(void* p, NI size) {
	nimSetMem__systemZmemory_7(p, ((int) 0), size);
}
static N_INLINE(NIM_BOOL, multipleOfPow2__systemZdragonbox_139)(NU64 value, NI32 e2) {
	NIM_BOOL result;
	NIM_BOOL T1_;
{	result = (NIM_BOOL)0;
	T1_ = (NIM_BOOL)0;
	T1_ = (e2 < ((NI32) 64));
	if (!(T1_)) goto LA2_;
	T1_ = ((NU64)(value & (NU64)((NU64)((NU64)((NU64)(1ULL) << (NU64)(e2))) - (NU64)(1ULL))) == 0ULL);
	LA2_: ;
	result = T1_;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NI32, floorDivPow2__systemZdragonbox_62)(NI32 x, NI32 n) {
	NI32 result;
{	result = (NI32)0;
	result = (NI32)((NI32)(x) >> (NU32)(n));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NI32, floorLog10ThreeQuartersPow2__systemZdragonbox_88)(NI32 e) {
	NI32 result;
{	result = (NI32)0;
	result = floorDivPow2__systemZdragonbox_62((NI32)((NI32)(e * ((NI32) 1262611)) - ((NI32) 524031)), ((NI32) 22));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NI32, floorLog2Pow10__systemZdragonbox_70)(NI32 e) {
	NI32 result;
{	result = (NI32)0;
	result = floorDivPow2__systemZdragonbox_62((NI32)(e * ((NI32) 1741647)), ((NI32) 19));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw, computePow10__systemZdragonbox_100)(NI32 k) {
	tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw result;
{	nimZeroMem((void*)(&result), sizeof(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw));
	result = pow10__systemZdragonbox_105[((NI32)(k - ((NI32) -292)))- 0];
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg, toDecimal64AsymmetricInterval__systemZdragonbox_195)(NI32 e2) {
	tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg result;
	NI32 minusK;
	NI32 betaMinus1;
	NI32 T1_;
	tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw pow10;
	NU64 lowerEndpoint;
	NU64 upperEndpoint;
	NIM_BOOL lowerEndpointIsInteger;
	NIM_BOOL T2_;
	NU64 xi;
	NU64 zi;
	NU64 q;
{	nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg));
	minusK = floorLog10ThreeQuartersPow2__systemZdragonbox_88(e2);
	T1_ = (NI32)0;
	T1_ = floorLog2Pow10__systemZdragonbox_70(((NI32)-(minusK)));
	betaMinus1 = (NI32)(e2 + T1_);
	pow10 = computePow10__systemZdragonbox_100(((NI32)-(minusK)));
	lowerEndpoint = (NU64)((NU64)((NU64)((NU64)(pow10.hi) - (NU64)((NU64)((NU64)(pow10.hi) >> (NU64)(((NI32) 54)))))) >> (NU64)((NI32)(((NI32) 11) - betaMinus1)));
	upperEndpoint = (NU64)((NU64)((NU64)((NU64)(pow10.hi) + (NU64)((NU64)((NU64)(pow10.hi) >> (NU64)(((NI32) 53)))))) >> (NU64)((NI32)(((NI32) 11) - betaMinus1)));
	T2_ = (NIM_BOOL)0;
	T2_ = (((NI32) 2) <= e2);
	if (!(T2_)) goto LA3_;
	T2_ = (e2 <= ((NI32) 3));
	LA3_: ;
	lowerEndpointIsInteger = T2_;
	xi = (NU64)((NU64)(lowerEndpoint) + (NU64)(((NU64) (!(lowerEndpointIsInteger)))));
	zi = upperEndpoint;
	q = (NU64)((NU64)(zi) / (NU64)(10ULL));
	{
		if (!((NU64)(xi) <= (NU64)((NU64)((NU64)(q) * (NU64)(10ULL))))) goto LA6_;
		nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg));
		result.significand = q;
		result.exponent = (NI32)(minusK + ((NI32) 1));
		goto BeforeRet_;
	}
	LA6_: ;
	q = (NU64)((NU64)((NU64)((NU64)((NU64)((NU64)(pow10.hi) >> (NU64)((NI32)(((NI32) 10) - betaMinus1)))) + (NU64)(1ULL))) / (NU64)(2ULL));
	{
		if (!(e2 == ((NI32) -77))) goto LA10_;
		q -= !(((NU64)((NU64)(q) % (NU64)(2ULL)) == 0ULL));
	}
	goto LA8_;
	LA10_: ;
	{
		q += ((NU64)(q) < (NU64)(xi));
	}
	LA8_: ;
	nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg));
	result.significand = q;
	result.exponent = minusK;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NI32, floorLog10Pow2__systemZdragonbox_79)(NI32 e) {
	NI32 result;
{	result = (NI32)0;
	result = floorDivPow2__systemZdragonbox_62((NI32)(e * ((NI32) 1262611)), ((NI32) 22));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NU32, computeDelta__systemZdragonbox_251)(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw pow10, NI32 betaMinus1) {
	NU32 result;
{	result = (NU32)0;
	result = ((NU32) ((NU64)((NU64)(pow10.hi) >> (NU64)((NI32)(((NI32) 63) - betaMinus1)))));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NU32, lo32__systemZdragonbox_265)(NU64 x) {
	NU32 result;
{	result = (NU32)0;
	result = ((NU32) (x));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NU32, hi32__systemZdragonbox_268)(NU64 x) {
	NU32 result;
{	result = (NU32)0;
	result = ((NU32) ((NU64)((NU64)(x) >> (NU64)(((NI) 32)))));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw, mul128__systemZdragonbox_275)(NU64 a, NU64 b) {
	tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw result;
	NU64 b00;
	NU32 T1_;
	NU32 T2_;
	NU64 b01;
	NU32 T3_;
	NU32 T4_;
	NU64 b10;
	NU32 T5_;
	NU32 T6_;
	NU64 b11;
	NU32 T7_;
	NU32 T8_;
	NU64 mid1;
	NU32 T9_;
	NU64 mid2;
	NU32 T10_;
	NU64 hi;
	NU32 T11_;
	NU32 T12_;
	NU64 lo;
	NU32 T13_;
	NU32 T14_;
{	nimZeroMem((void*)(&result), sizeof(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw));
	T1_ = (NU32)0;
	T1_ = lo32__systemZdragonbox_265(a);
	T2_ = (NU32)0;
	T2_ = lo32__systemZdragonbox_265(b);
	b00 = (NU64)((NU64)(((NU64) (T1_))) * (NU64)(((NU64) (T2_))));
	T3_ = (NU32)0;
	T3_ = lo32__systemZdragonbox_265(a);
	T4_ = (NU32)0;
	T4_ = hi32__systemZdragonbox_268(b);
	b01 = (NU64)((NU64)(((NU64) (T3_))) * (NU64)(((NU64) (T4_))));
	T5_ = (NU32)0;
	T5_ = hi32__systemZdragonbox_268(a);
	T6_ = (NU32)0;
	T6_ = lo32__systemZdragonbox_265(b);
	b10 = (NU64)((NU64)(((NU64) (T5_))) * (NU64)(((NU64) (T6_))));
	T7_ = (NU32)0;
	T7_ = hi32__systemZdragonbox_268(a);
	T8_ = (NU32)0;
	T8_ = hi32__systemZdragonbox_268(b);
	b11 = (NU64)((NU64)(((NU64) (T7_))) * (NU64)(((NU64) (T8_))));
	T9_ = (NU32)0;
	T9_ = hi32__systemZdragonbox_268(b00);
	mid1 = (NU64)((NU64)(b10) + (NU64)(((NU64) (T9_))));
	T10_ = (NU32)0;
	T10_ = lo32__systemZdragonbox_265(mid1);
	mid2 = (NU64)((NU64)(b01) + (NU64)(((NU64) (T10_))));
	T11_ = (NU32)0;
	T11_ = hi32__systemZdragonbox_268(mid1);
	T12_ = (NU32)0;
	T12_ = hi32__systemZdragonbox_268(mid2);
	hi = (NU64)((NU64)((NU64)((NU64)(b11) + (NU64)(((NU64) (T11_))))) + (NU64)(((NU64) (T12_))));
	T13_ = (NU32)0;
	T13_ = lo32__systemZdragonbox_265(b00);
	T14_ = (NU32)0;
	T14_ = lo32__systemZdragonbox_265(mid2);
	lo = (NU64)(((NU64) (T13_)) | (NU64)((NU64)(((NU64) (T14_))) << (NU64)(((NI) 32))));
	nimZeroMem((void*)(&result), sizeof(tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw));
	result.hi = hi;
	result.lo = lo;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NU64, mulShift__systemZdragonbox_291)(NU64 x, tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw y) {
	NU64 result;
	tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw p1;
	tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw p0;
{	result = (NU64)0;
	p1 = mul128__systemZdragonbox_275(x, y.hi);
	p0 = mul128__systemZdragonbox_275(x, y.lo);
	p1.lo += p0.hi;
	p1.hi += ((NU64)(p1.lo) < (NU64)(p0.hi));
	result = p1.hi;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NIM_BOOL, multipleOfPow5__systemZdragonbox_150)(NU64 value, NI32 e5) {
	NIM_BOOL result;
	tyObject_MulCmp__tPF4ETaAdtVLNu8l2IurgA m5;
{	result = (NIM_BOOL)0;
	m5 = mod5__systemZdragonbox_157[(e5)- 0];
	result = ((NU64)((NU64)((NU64)(value) * (NU64)(m5.mul))) <= (NU64)(m5.cmp));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NIM_BOOL, isIntegralEndpoint__systemZdragonbox_326)(NU64 twoF, NI32 e2, NI32 minusK) {
	NIM_BOOL result;
{	result = (NIM_BOOL)0;
	{
		if (!(e2 < ((NI32) -2))) goto LA3_;
		result = NIM_FALSE;
		goto BeforeRet_;
	}
	LA3_: ;
	{
		if (!(e2 <= ((NI32) 9))) goto LA7_;
		result = NIM_TRUE;
		goto BeforeRet_;
	}
	LA7_: ;
	{
		if (!(e2 <= ((NI32) 86))) goto LA11_;
		result = multipleOfPow5__systemZdragonbox_150(twoF, minusK);
		goto BeforeRet_;
	}
	LA11_: ;
	result = NIM_FALSE;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NIM_BOOL, mulParity__systemZdragonbox_308)(NU64 twoF, tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw pow10, NI32 betaMinus1) {
	NIM_BOOL result;
	NU64 p01;
	NU64 p10;
	tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw T1_;
	NU64 mid;
{	result = (NIM_BOOL)0;
	p01 = (NU64)((NU64)(twoF) * (NU64)(pow10.hi));
	T1_ = mul128__systemZdragonbox_275(twoF, pow10.lo);
	p10 = T1_.hi;
	mid = (NU64)((NU64)(p01) + (NU64)(p10));
	result = !(((NU64)(mid & (NU64)((NU64)(1ULL) << (NU64)((NI32)(((NI32) 64) - betaMinus1)))) == 0ULL));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NIM_BOOL, isIntegralMidpoint__systemZdragonbox_331)(NU64 twoF, NI32 e2, NI32 minusK) {
	NIM_BOOL result;
{	result = (NIM_BOOL)0;
	{
		if (!(e2 < ((NI32) -4))) goto LA3_;
		result = multipleOfPow2__systemZdragonbox_139(twoF, (NI32)((NI32)(minusK - e2) + ((NI32) 1)));
		goto BeforeRet_;
	}
	LA3_: ;
	{
		if (!(e2 <= ((NI32) 9))) goto LA7_;
		result = NIM_TRUE;
		goto BeforeRet_;
	}
	LA7_: ;
	{
		if (!(e2 <= ((NI32) 86))) goto LA11_;
		result = multipleOfPow5__systemZdragonbox_150(twoF, minusK);
		goto BeforeRet_;
	}
	LA11_: ;
	result = NIM_FALSE;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg, toDecimal64__systemZdragonbox_336)(NU64 ieeeSignificand, NU64 ieeeExponent) {
	tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg result;
	NU64 m2;
	NI32 e2;
	NIM_BOOL isEven;
	NIM_BOOL acceptLower;
	NIM_BOOL acceptUpper;
	NI32 minusK;
	NI32 T20_;
	NI32 betaMinus1;
	NI32 T21_;
	tyObject_uint64x2__L25w5SFALWmTH9b30NrjeJw pow10;
	NU32 delta;
	NU64 twoFl;
	NU64 twoFc;
	NU64 twoFr;
	NU64 zi;
	NU64 q;
	NU32 r;
	NU32 dist;
	NU32 distQ;
{	nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg));
	m2 = (NU64)0;
	e2 = (NI32)0;
	{
		if (!!((ieeeExponent == 0ULL))) goto LA3_;
		m2 = (NU64)(4503599627370496ULL | ieeeSignificand);
		e2 = (NI32)(((NI32) (ieeeExponent)) - ((NI32) 1075));
		{
			NIM_BOOL T7_;
			NIM_BOOL T8_;
			T7_ = (NIM_BOOL)0;
			T8_ = (NIM_BOOL)0;
			T8_ = (((NI32) 0) <= ((NI32)-(e2)));
			if (!(T8_)) goto LA9_;
			T8_ = (((NI32)-(e2)) < ((NI32) 53));
			LA9_: ;
			T7_ = T8_;
			if (!(T7_)) goto LA10_;
			T7_ = multipleOfPow2__systemZdragonbox_139(m2, ((NI32)-(e2)));
			LA10_: ;
			if (!T7_) goto LA11_;
			nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg));
			result.significand = (NU64)((NU64)(m2) >> (NU64)(((NI32)-(e2))));
			result.exponent = ((NI32) 0);
			goto BeforeRet_;
		}
		LA11_: ;
		{
			NIM_BOOL T15_;
			T15_ = (NIM_BOOL)0;
			T15_ = (ieeeSignificand == 0ULL);
			if (!(T15_)) goto LA16_;
			T15_ = ((NU64)(1ULL) < (NU64)(ieeeExponent));
			LA16_: ;
			if (!T15_) goto LA17_;
			result = toDecimal64AsymmetricInterval__systemZdragonbox_195(e2);
			goto BeforeRet_;
		}
		LA17_: ;
	}
	goto LA1_;
	LA3_: ;
	{
		m2 = ieeeSignificand;
		e2 = ((NI32) -1074);
	}
	LA1_: ;
	isEven = ((NU64)((NU64)(m2) % (NU64)(2ULL)) == 0ULL);
	acceptLower = isEven;
	acceptUpper = isEven;
	T20_ = (NI32)0;
	T20_ = floorLog10Pow2__systemZdragonbox_79(e2);
	minusK = (NI32)(T20_ - ((NI32) 2));
	T21_ = (NI32)0;
	T21_ = floorLog2Pow10__systemZdragonbox_70(((NI32)-(minusK)));
	betaMinus1 = (NI32)(e2 + T21_);
	pow10 = computePow10__systemZdragonbox_100(((NI32)-(minusK)));
	delta = computeDelta__systemZdragonbox_251(pow10, betaMinus1);
	twoFl = (NU64)((NU64)((NU64)((NU64)(2ULL) * (NU64)(m2))) - (NU64)(1ULL));
	twoFc = (NU64)((NU64)(2ULL) * (NU64)(m2));
	twoFr = (NU64)((NU64)((NU64)((NU64)(2ULL) * (NU64)(m2))) + (NU64)(1ULL));
	zi = mulShift__systemZdragonbox_291((NU64)((NU64)(twoFr) << (NU64)(betaMinus1)), pow10);
	q = (NU64)((NU64)(zi) / (NU64)(1000ULL));
	r = (NU32)((NU32)(((NU32) (zi))) - (NU32)((NU32)((NU32)(((NU32) 1000)) * (NU32)(((NU32) (q))))));
	{
		if (!((NU32)(r) < (NU32)(delta))) goto LA24_;
		{
			NIM_BOOL T28_;
			NIM_BOOL T29_;
			NIM_BOOL T32_;
			T28_ = (NIM_BOOL)0;
			T29_ = (NIM_BOOL)0;
			T29_ = !((r == ((NU32) 0)));
			if (T29_) goto LA30_;
			T29_ = acceptUpper;
			LA30_: ;
			T28_ = T29_;
			if (T28_) goto LA31_;
			T32_ = (NIM_BOOL)0;
			T32_ = isIntegralEndpoint__systemZdragonbox_326(twoFr, e2, minusK);
			T28_ = !(T32_);
			LA31_: ;
			if (!T28_) goto LA33_;
			nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg));
			result.significand = q;
			result.exponent = (NI32)((NI32)(minusK + ((NI32) 2)) + ((NI32) 1));
			goto BeforeRet_;
		}
		LA33_: ;
		q -= ((NI) 1);
		r = ((NU32) 1000);
	}
	goto LA22_;
	LA24_: ;
	{
		if (!(r == delta)) goto LA36_;
		{
			NIM_BOOL T40_;
			NIM_BOOL T41_;
			T40_ = (NIM_BOOL)0;
			T41_ = (NIM_BOOL)0;
			T41_ = acceptLower;
			if (!(T41_)) goto LA42_;
			T41_ = isIntegralEndpoint__systemZdragonbox_326(twoFl, e2, minusK);
			LA42_: ;
			T40_ = T41_;
			if (T40_) goto LA43_;
			T40_ = mulParity__systemZdragonbox_308(twoFl, pow10, betaMinus1);
			LA43_: ;
			if (!T40_) goto LA44_;
			nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg));
			result.significand = q;
			result.exponent = (NI32)((NI32)(minusK + ((NI32) 2)) + ((NI32) 1));
			goto BeforeRet_;
		}
		LA44_: ;
	}
	goto LA22_;
	LA36_: ;
	{
	}
	LA22_: ;
	q = (NU64)((NU64)(q) * (NU64)(10ULL));
	dist = (NU32)((NU32)((NU32)((NU32)(r) - (NU32)((NU32)((NU32)(delta) / (NU32)(((NU32) 2)))))) + (NU32)(((NU32) 50)));
	distQ = (NU32)((NU32)(dist) / (NU32)(((NU32) 100)));
	q += ((NU64) (distQ));
	{
		NIM_BOOL approxYParity;
		if (!(dist == (NU32)((NU32)(distQ) * (NU32)(((NU32) 100))))) goto LA49_;
		approxYParity = !(((NU32)(dist & ((NU32) 1)) == ((NU32) 0)));
		{
			NIM_BOOL T53_;
			T53_ = (NIM_BOOL)0;
			T53_ = mulParity__systemZdragonbox_308(twoFc, pow10, betaMinus1);
			if (!!((T53_ == approxYParity))) goto LA54_;
			q -= ((NI) 1);
		}
		goto LA51_;
		LA54_: ;
		{
			NIM_BOOL T57_;
			T57_ = (NIM_BOOL)0;
			T57_ = !(((NU64)((NU64)(q) % (NU64)(2ULL)) == 0ULL));
			if (!(T57_)) goto LA58_;
			T57_ = isIntegralMidpoint__systemZdragonbox_331(twoFc, e2, minusK);
			LA58_: ;
			if (!T57_) goto LA59_;
			q -= ((NI) 1);
		}
		goto LA51_;
		LA59_: ;
		LA51_: ;
	}
	LA49_: ;
	nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg));
	result.significand = q;
	result.exponent = (NI32)(minusK + ((NI32) 2));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NI32, decimalLength__systemZdragonbox_534)(NU64 v) {
	NI32 result;
	NU32 v32;
{	result = (NI32)0;
	{
		if (!!((((NU32) ((NU64)((NU64)(v) >> (NU64)(((NI) 32))))) == ((NU32) 0)))) goto LA3_;
		{
			if (!((NU64)(10000000000000000ULL) <= (NU64)(v))) goto LA7_;
			result = ((NI32) 17);
			goto BeforeRet_;
		}
		LA7_: ;
		{
			if (!((NU64)(1000000000000000ULL) <= (NU64)(v))) goto LA11_;
			result = ((NI32) 16);
			goto BeforeRet_;
		}
		LA11_: ;
		{
			if (!((NU64)(100000000000000ULL) <= (NU64)(v))) goto LA15_;
			result = ((NI32) 15);
			goto BeforeRet_;
		}
		LA15_: ;
		{
			if (!((NU64)(10000000000000ULL) <= (NU64)(v))) goto LA19_;
			result = ((NI32) 14);
			goto BeforeRet_;
		}
		LA19_: ;
		{
			if (!((NU64)(1000000000000ULL) <= (NU64)(v))) goto LA23_;
			result = ((NI32) 13);
			goto BeforeRet_;
		}
		LA23_: ;
		{
			if (!((NU64)(100000000000ULL) <= (NU64)(v))) goto LA27_;
			result = ((NI32) 12);
			goto BeforeRet_;
		}
		LA27_: ;
		{
			if (!((NU64)(10000000000ULL) <= (NU64)(v))) goto LA31_;
			result = ((NI32) 11);
			goto BeforeRet_;
		}
		LA31_: ;
		result = ((NI32) 10);
		goto BeforeRet_;
	}
	LA3_: ;
	v32 = ((NU32) (v));
	{
		if (!((NU32)(((NU) 1000000000)) <= (NU32)(((NU) (v32))))) goto LA35_;
		result = ((NI32) 10);
		goto BeforeRet_;
	}
	LA35_: ;
	{
		if (!((NU32)(((NU) 100000000)) <= (NU32)(((NU) (v32))))) goto LA39_;
		result = ((NI32) 9);
		goto BeforeRet_;
	}
	LA39_: ;
	{
		if (!((NU32)(((NU) 10000000)) <= (NU32)(((NU) (v32))))) goto LA43_;
		result = ((NI32) 8);
		goto BeforeRet_;
	}
	LA43_: ;
	{
		if (!((NU32)(((NU) 1000000)) <= (NU32)(((NU) (v32))))) goto LA47_;
		result = ((NI32) 7);
		goto BeforeRet_;
	}
	LA47_: ;
	{
		if (!((NU32)(((NU) 100000)) <= (NU32)(((NU) (v32))))) goto LA51_;
		result = ((NI32) 6);
		goto BeforeRet_;
	}
	LA51_: ;
	{
		if (!((NU32)(((NU) 10000)) <= (NU32)(((NU) (v32))))) goto LA55_;
		result = ((NI32) 5);
		goto BeforeRet_;
	}
	LA55_: ;
	{
		if (!((NU32)(((NU) 1000)) <= (NU32)(((NU) (v32))))) goto LA59_;
		result = ((NI32) 4);
		goto BeforeRet_;
	}
	LA59_: ;
	{
		if (!((NU32)(((NU) 100)) <= (NU32)(((NU) (v32))))) goto LA63_;
		result = ((NI32) 3);
		goto BeforeRet_;
	}
	LA63_: ;
	{
		if (!((NU32)(((NU) 10)) <= (NU32)(((NU) (v32))))) goto LA67_;
		result = ((NI32) 2);
		goto BeforeRet_;
	}
	LA67_: ;
	result = ((NI32) 1);
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(void, utoa2Digits__stdZprivateZdigitsutils_21)(NIM_CHAR* buf, NI bufLen_0, NI pos, NU32 digits) {
	buf[pos] = digits100__stdZprivateZdigitsutils_2[((NU32)((NU32)(((NU32) 2)) * (NU32)(digits)))- 0];
	buf[(NI)(pos + ((NI) 1))] = digits100__stdZprivateZdigitsutils_2[((NU32)((NU32)((NU32)((NU32)(((NU32) 2)) * (NU32)(digits))) + (NU32)(((NU32) 1))))- 0];
}
static N_INLINE(NI32, trailingZeros2Digits__stdZprivateZdigitsutils_34)(NU32 digits) {
	NI32 result;
{	result = (NI32)0;
	result = ((NI32) (trailingZeros100__stdZprivateZdigitsutils_1[(digits)- 0]));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NI32, utoa8DigitsSkipTrailingZeros__systemZdragonbox_400)(NIM_CHAR* buf, NI bufLen_0, NI pos, NU32 digits) {
	NI32 result;
	NU32 q;
	NU32 r;
	NU32 qH;
	NU32 qL;
{	result = (NI32)0;
	q = (NU32)((NU32)(digits) / (NU32)(((NU32) 10000)));
	r = (NU32)((NU32)(digits) % (NU32)(((NU32) 10000)));
	qH = (NU32)((NU32)(q) / (NU32)(((NU32) 100)));
	qL = (NU32)((NU32)(q) % (NU32)(((NU32) 100)));
	utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos, qH);
	utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, (NI)(pos + ((NI) 2)), qL);
	{
		NU32 T5_;
		NI32 T11_;
		NI T12_;
		if (!(r == ((NU32) 0))) goto LA3_;
		T5_ = (NU32)0;
		{
			if (!(qL == ((NU32) 0))) goto LA8_;
			T5_ = qH;
		}
		goto LA6_;
		LA8_: ;
		{
			T5_ = qL;
		}
		LA6_: ;
		T11_ = (NI32)0;
		T11_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(T5_);
		T12_ = (NI)0;
		{
			if (!(qL == ((NU32) 0))) goto LA15_;
			T12_ = ((NI) 6);
		}
		goto LA13_;
		LA15_: ;
		{
			T12_ = ((NI) 4);
		}
		LA13_: ;
		result = (NI32)(T11_ + ((NI32) (T12_)));
		goto BeforeRet_;
	}
	goto LA1_;
	LA3_: ;
	{
		NU32 rH;
		NU32 rL;
		NU32 T19_;
		NI32 T25_;
		NI T26_;
		rH = (NU32)((NU32)(r) / (NU32)(((NU32) 100)));
		rL = (NU32)((NU32)(r) % (NU32)(((NU32) 100)));
		utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, (NI)(pos + ((NI) 4)), rH);
		utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, (NI)(pos + ((NI) 6)), rL);
		T19_ = (NU32)0;
		{
			if (!(rL == ((NU32) 0))) goto LA22_;
			T19_ = rH;
		}
		goto LA20_;
		LA22_: ;
		{
			T19_ = rL;
		}
		LA20_: ;
		T25_ = (NI32)0;
		T25_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(T19_);
		T26_ = (NI)0;
		{
			if (!(rL == ((NU32) 0))) goto LA29_;
			T26_ = ((NI) 2);
		}
		goto LA27_;
		LA29_: ;
		{
			T26_ = ((NI) 0);
		}
		LA27_: ;
		result = (NI32)(T25_ + ((NI32) (T26_)));
		goto BeforeRet_;
	}
	LA1_: ;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NI32, printDecimalDigitsBackwards__systemZdragonbox_417)(NIM_CHAR* buf, NI bufLen_0, NI pos, NU64 output64) {
	NI32 result;
	NI pos_2;
	NU64 output64_2;
	NI32 tz;
	NI32 nd;
	NU32 output;
{	result = (NI32)0;
	pos_2 = pos;
	output64_2 = output64;
	tz = ((NI32) 0);
	nd = ((NI32) 0);
	{
		NU64 q;
		NU32 r;
		if (!((NU64)(100000000ULL) <= (NU64)(output64_2))) goto LA3_;
		q = (NU64)((NU64)(output64_2) / (NU64)(100000000ULL));
		r = ((NU32) ((NU64)((NU64)(output64_2) % (NU64)(100000000ULL))));
		output64_2 = q;
		pos_2 -= ((NI) 8);
		{
			if (!!((r == ((NU32) 0)))) goto LA7_;
			tz = utoa8DigitsSkipTrailingZeros__systemZdragonbox_400(buf, bufLen_0, pos_2, r);
		}
		goto LA5_;
		LA7_: ;
		{
			tz = ((NI32) 8);
		}
		LA5_: ;
		nd = ((NI32) 8);
	}
	LA3_: ;
	output = ((NU32) (output64_2));
	{
		NU32 q_2;
		NU32 r_2;
		if (!((NU32)(((NU32) 10000)) <= (NU32)(output))) goto LA12_;
		q_2 = (NU32)((NU32)(output) / (NU32)(((NU32) 10000)));
		r_2 = (NU32)((NU32)(output) % (NU32)(((NU32) 10000)));
		output = q_2;
		pos_2 -= ((NI) 4);
		{
			NU32 rH;
			NU32 rL;
			if (!!((r_2 == ((NU32) 0)))) goto LA16_;
			rH = (NU32)((NU32)(r_2) / (NU32)(((NU32) 100)));
			rL = (NU32)((NU32)(r_2) % (NU32)(((NU32) 100)));
			utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos_2, rH);
			utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, (NI)(pos_2 + ((NI) 2)), rL);
			{
				NU32 T22_;
				NI32 T28_;
				NI T29_;
				if (!(tz == nd)) goto LA20_;
				T22_ = (NU32)0;
				{
					if (!(rL == ((NU32) 0))) goto LA25_;
					T22_ = rH;
				}
				goto LA23_;
				LA25_: ;
				{
					T22_ = rL;
				}
				LA23_: ;
				T28_ = (NI32)0;
				T28_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(T22_);
				T29_ = (NI)0;
				{
					if (!(rL == ((NU32) 0))) goto LA32_;
					T29_ = ((NI) 2);
				}
				goto LA30_;
				LA32_: ;
				{
					T29_ = ((NI) 0);
				}
				LA30_: ;
				tz += ((NI) ((NI32)(T28_ + ((NI32) (T29_)))));
			}
			LA20_: ;
		}
		goto LA14_;
		LA16_: ;
		{
			{
				if (!(tz == nd)) goto LA38_;
				tz += ((NI) 4);
			}
			goto LA36_;
			LA38_: ;
			{
				{
					NI i;
					NI res;
					i = (NI)0;
					res = ((NI) 0);
					{
						while (1) {
							if (!(res <= ((NI) 3))) goto LA43;
							i = res;
							buf[(NI)(pos_2 + i)] = 48;
							res += ((NI) 1);
						} LA43: ;
					}
				}
			}
			LA36_: ;
		}
		LA14_: ;
		nd += ((NI) 4);
	}
	LA12_: ;
	{
		NU32 q_3;
		NU32 r_3;
		if (!((NU32)(((NU32) 100)) <= (NU32)(output))) goto LA46_;
		q_3 = (NU32)((NU32)(output) / (NU32)(((NU32) 100)));
		r_3 = (NU32)((NU32)(output) % (NU32)(((NU32) 100)));
		output = q_3;
		pos_2 -= ((NI) 2);
		utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos_2, r_3);
		{
			NI32 T52_;
			if (!(tz == nd)) goto LA50_;
			T52_ = (NI32)0;
			T52_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(r_3);
			tz += ((NI) (T52_));
		}
		LA50_: ;
		nd += ((NI) 2);
		{
			NU32 q2;
			NU32 r2;
			if (!((NU32)(((NU32) 100)) <= (NU32)(output))) goto LA55_;
			q2 = (NU32)((NU32)(output) / (NU32)(((NU32) 100)));
			r2 = (NU32)((NU32)(output) % (NU32)(((NU32) 100)));
			output = q2;
			pos_2 -= ((NI) 2);
			utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos_2, r2);
			{
				NI32 T61_;
				if (!(tz == nd)) goto LA59_;
				T61_ = (NI32)0;
				T61_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(r2);
				tz += ((NI) (T61_));
			}
			LA59_: ;
			nd += ((NI) 2);
		}
		LA55_: ;
	}
	LA46_: ;
	{
		NU32 q_4;
		if (!((NU32)(((NU32) 10)) <= (NU32)(output))) goto LA64_;
		q_4 = output;
		pos_2 -= ((NI) 2);
		utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos_2, q_4);
		{
			NI32 T70_;
			if (!(tz == nd)) goto LA68_;
			T70_ = (NI32)0;
			T70_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(q_4);
			tz += ((NI) (T70_));
		}
		LA68_: ;
	}
	goto LA62_;
	LA64_: ;
	{
		NU32 q_5;
		q_5 = output;
		pos_2 -= ((NI) 1);
		buf[pos_2] = ((NIM_CHAR) (((NI) ((NU32)((NU32)(((NU32) 48)) + (NU32)(q_5))))));
	}
	LA62_: ;
	result = tz;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NI, formatDigits__systemZdragonbox_548)(NIM_CHAR* buffer, NI bufferLen_0, NI pos, NU64 digits, NI32 decimalExponent, NIM_BOOL forceTrailingDotZero) {
	NI result;
	NI pos_2;
	NI32 numDigits;
	NI32 decimalPoint;
	NIM_BOOL useFixed;
	NIM_BOOL T1_;
	NI32 decimalDigitsPosition;
	NI digitsEnd;
	NI32 tz;
{	result = (NI)0;
	pos_2 = pos;
	numDigits = decimalLength__systemZdragonbox_534(digits);
	decimalPoint = (NI32)(numDigits + decimalExponent);
	T1_ = (NIM_BOOL)0;
	T1_ = (((NI32) -6) <= decimalPoint);
	if (!(T1_)) goto LA2_;
	T1_ = (decimalPoint <= ((NI32) 17));
	LA2_: ;
	useFixed = T1_;
	{
		NI i;
		NI i_2;
		i = (NI)0;
		i_2 = ((NI) 0);
		{
			while (1) {
				if (!(i_2 < ((NI) 32))) goto LA5;
				i = i_2;
				buffer[(NI)(pos_2 + i)] = 48;
				i_2 += ((NI) 1);
			} LA5: ;
		}
	}
	decimalDigitsPosition = (NI32)0;
	{
		if (!useFixed) goto LA8_;
		{
			if (!(decimalPoint <= ((NI32) 0))) goto LA12_;
			decimalDigitsPosition = (NI32)(((NI32) 2) - decimalPoint);
		}
		goto LA10_;
		LA12_: ;
		{
			decimalDigitsPosition = ((NI32) 0);
		}
		LA10_: ;
	}
	goto LA6_;
	LA8_: ;
	{
		decimalDigitsPosition = ((NI32) 1);
	}
	LA6_: ;
	digitsEnd = (NI)(pos_2 + ((NI) ((NI32)(decimalDigitsPosition + numDigits))));
	tz = printDecimalDigitsBackwards__systemZdragonbox_417(buffer, bufferLen_0, digitsEnd, digits);
	digitsEnd -= ((NI) (tz));
	numDigits -= ((NI) (tz));
	{
		if (!useFixed) goto LA18_;
		{
			if (!(decimalPoint <= ((NI32) 0))) goto LA22_;
			buffer[(NI)(pos_2 + ((NI) 1))] = 46;
			pos_2 = digitsEnd;
		}
		goto LA20_;
		LA22_: ;
		{
			tyArray__Wfh9bjgBQ4UqJsyISUuDSuA tmp;
			if (!(decimalPoint < numDigits)) goto LA25_;
			nimZeroMem((void*)tmp, sizeof(tyArray__Wfh9bjgBQ4UqJsyISUuDSuA));
			{
				NI i_3;
				NI i_4;
				i_3 = (NI)0;
				i_4 = ((NI) 0);
				{
					while (1) {
						if (!(i_4 < ((NI) 16))) goto LA29;
						i_3 = i_4;
						tmp[(i_3)- 0] = buffer[(NI)((NI)(i_3 + pos_2) + ((NI) (decimalPoint)))];
						i_4 += ((NI) 1);
					} LA29: ;
				}
			}
			{
				NI i_5;
				NI i_6;
				i_5 = (NI)0;
				i_6 = ((NI) 0);
				{
					while (1) {
						if (!(i_6 < ((NI) 16))) goto LA32;
						i_5 = i_6;
						buffer[(NI)((NI)((NI)(i_5 + pos_2) + ((NI) (decimalPoint))) + ((NI) 1))] = tmp[(i_5)- 0];
						i_6 += ((NI) 1);
					} LA32: ;
				}
			}
			buffer[(NI)(pos_2 + ((NI) (decimalPoint)))] = 46;
			pos_2 = (NI)(digitsEnd + ((NI) 1));
		}
		goto LA20_;
		LA25_: ;
		{
			pos_2 += ((NI) (decimalPoint));
			{
				if (!forceTrailingDotZero) goto LA36_;
				buffer[pos_2] = 46;
				buffer[(NI)(pos_2 + ((NI) 1))] = 48;
				pos_2 += ((NI) 2);
			}
			LA36_: ;
		}
		LA20_: ;
	}
	goto LA16_;
	LA18_: ;
	{
		NI32 scientificExponent;
		NU32 k;
		NI32 T49_;
		buffer[pos_2] = buffer[(NI)(pos_2 + ((NI) 1))];
		{
			if (!(numDigits == ((NI32) 1))) goto LA41_;
			pos_2 += ((NI) 1);
		}
		goto LA39_;
		LA41_: ;
		{
			buffer[(NI)(pos_2 + ((NI) 1))] = 46;
			pos_2 = digitsEnd;
		}
		LA39_: ;
		scientificExponent = (NI32)(decimalPoint - ((NI32) 1));
		buffer[pos_2] = 101;
		{
			if (!(scientificExponent < ((NI32) 0))) goto LA46_;
			buffer[(NI)(pos_2 + ((NI) 1))] = 45;
		}
		goto LA44_;
		LA46_: ;
		{
			buffer[(NI)(pos_2 + ((NI) 1))] = 43;
		}
		LA44_: ;
		pos_2 += ((NI) 2);
		T49_ = (NI32)0;
		{
			if (!(scientificExponent < ((NI32) 0))) goto LA52_;
			T49_ = ((NI32)-(scientificExponent));
		}
		goto LA50_;
		LA52_: ;
		{
			T49_ = scientificExponent;
		}
		LA50_: ;
		k = ((NU32) (T49_));
		{
			if (!((NU32)(k) < (NU32)(((NU32) 10)))) goto LA57_;
			buffer[pos_2] = ((NIM_CHAR) (((NI) ((NU32)((NU32)(((NU32) 48)) + (NU32)(k))))));
			pos_2 += ((NI) 1);
		}
		goto LA55_;
		LA57_: ;
		{
			if (!((NU32)(k) < (NU32)(((NU32) 100)))) goto LA60_;
			utoa2Digits__stdZprivateZdigitsutils_21(buffer, bufferLen_0, pos_2, k);
			pos_2 += ((NI) 2);
		}
		goto LA55_;
		LA60_: ;
		{
			NU32 q;
			NU32 r;
			q = (NU32)((NU32)(k) / (NU32)(((NU32) 100)));
			r = (NU32)((NU32)(k) % (NU32)(((NU32) 100)));
			buffer[pos_2] = ((NIM_CHAR) (((NI) ((NU32)((NU32)(((NU32) 48)) + (NU32)(q))))));
			pos_2 += ((NI) 1);
			utoa2Digits__stdZprivateZdigitsutils_21(buffer, bufferLen_0, pos_2, r);
			pos_2 += ((NI) 2);
		}
		LA55_: ;
	}
	LA16_: ;
	result = pos_2;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NI, toChars__systemZdragonbox_672)(NIM_CHAR* buffer, NI bufferLen_0, NF v, NIM_BOOL forceTrailingDotZero) {
	NI result;
	NI pos;
	NU64 significand;
	tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw T1_;
	NU64 exponent;
	tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw T2_;
{	result = (NI)0;
	pos = ((NI) 0);
	T1_ = constructDouble__systemZdragonbox_31(v);
	significand = physicalSignificand__systemZdragonbox_34(T1_);
	T2_ = constructDouble__systemZdragonbox_31(v);
	exponent = physicalExponent__systemZdragonbox_37(T2_);
	{
		tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw T7_;
		NI T8_;
		if (!!((exponent == 2047ULL))) goto LA5_;
		buffer[pos] = 45;
		T7_ = constructDouble__systemZdragonbox_31(v);
		T8_ = (NI)0;
		T8_ = signBit__systemZdragonbox_56(T7_);
		pos += T8_;
		{
			NIM_BOOL T11_;
			tyObject_FloatingDecimal64__vQfQtj1GrzWru758F3GQIg dec;
			T11_ = (NIM_BOOL)0;
			T11_ = !((exponent == 0ULL));
			if (T11_) goto LA12_;
			T11_ = !((significand == 0ULL));
			LA12_: ;
			if (!T11_) goto LA13_;
			dec = toDecimal64__systemZdragonbox_336(significand, exponent);
			result = formatDigits__systemZdragonbox_548(buffer, bufferLen_0, pos, dec.significand, dec.exponent, forceTrailingDotZero);
			goto BeforeRet_;
		}
		goto LA9_;
		LA13_: ;
		{
			NI T16_;
			buffer[pos] = 48;
			buffer[(NI)(pos + ((NI) 1))] = 46;
			buffer[(NI)(pos + ((NI) 2))] = 48;
			buffer[(NI)(pos + ((NI) 3))] = 32;
			T16_ = (NI)0;
			{
				if (!forceTrailingDotZero) goto LA19_;
				T16_ = ((NI) 3);
			}
			goto LA17_;
			LA19_: ;
			{
				T16_ = ((NI) 1);
			}
			LA17_: ;
			pos += T16_;
			result = pos;
			goto BeforeRet_;
		}
		LA9_: ;
	}
	LA5_: ;
	{
		tyObject_Double__IoVNMXAH9aQnPnWZZsWMVxw T26_;
		NI T27_;
		if (!(significand == 0ULL)) goto LA24_;
		buffer[pos] = 45;
		T26_ = constructDouble__systemZdragonbox_31(v);
		T27_ = (NI)0;
		T27_ = signBit__systemZdragonbox_56(T26_);
		pos += T27_;
		buffer[pos] = 105;
		buffer[(NI)(pos + ((NI) 1))] = 110;
		buffer[(NI)(pos + ((NI) 2))] = 102;
		buffer[(NI)(pos + ((NI) 3))] = 32;
		result = (NI)(pos + ((NI) 3));
		goto BeforeRet_;
	}
	goto LA22_;
	LA24_: ;
	{
		buffer[pos] = 110;
		buffer[(NI)(pos + ((NI) 1))] = 97;
		buffer[(NI)(pos + ((NI) 2))] = 110;
		buffer[(NI)(pos + ((NI) 3))] = 32;
		result = (NI)(pos + ((NI) 3));
		goto BeforeRet_;
	}
	LA22_: ;
	}BeforeRet_: ;
	return result;
}
N_LIB_PRIVATE N_NIMCALL(NI, writeFloatToBufferRoundtrip__systemZformatfloat_13)(NIM_CHAR* buf, NF value) {
	NI result;
	result = (NI)0;
	result = toChars__systemZdragonbox_672(buf, 65, value, NIM_TRUE);
	buf[(result)- 0] = 0;
	return result;
}
N_LIB_PRIVATE N_NIMCALL(void, addCstringN__systemZformatfloat_5)(NimStringDesc** result, NCSTRING buf, NI buflen) {
	NI oldLen;
	NI newLen;
	void* T1_;
	oldLen = ((*result) ? (*result)->Sup.len : 0);
	newLen = (NI)(oldLen + buflen);
	unsureAsgnRef((void**) (&(*result)), setLengthStr((*result), ((NI) (newLen))));
	T1_ = (void*)0;
	T1_ = memcpy(((void*) ((&(*result)->data[oldLen]))), ((void*) (buf)), ((size_t) (buflen)));
}
N_LIB_PRIVATE N_NIMCALL(void, addFloatRoundtrip__system_3127)(NimStringDesc** result, NF x) {
	tyArray__eVNFTutn6un5gcq48fQLdg buffer;
	NI n;
	n = writeFloatToBufferRoundtrip__systemZformatfloat_13(buffer, x);
	addCstringN__systemZformatfloat_5(result, ((NCSTRING) ((&buffer[(((NI) 0))- 0]))), n);
}
N_LIB_PRIVATE N_NIMCALL(void, writeToBuffer__systemZformatfloat_51)(NIM_CHAR* buf, NCSTRING value) {
	NI i;
	i = ((NI) 0);
	{
		while (1) {
			if (!!(((NU8)(value[i]) == (NU8)(0)))) goto LA2;
			buf[(i)- 0] = value[i];
			i += ((NI) 1);
		} LA2: ;
	}
}
N_LIB_PRIVATE N_NIMCALL(NI, writeFloatToBufferSprintf__systemZformatfloat_59)(NIM_CHAR* buf, NF value) {
	NI result;
	NI n;
	int T1_;
	NIM_BOOL hasDot;
	result = (NI)0;
	T1_ = (int)0;
	T1_ = sprintf(((NCSTRING) (buf)), "%.16g", value);
	n = ((NI) (T1_));
	hasDot = NIM_FALSE;
	{
		NI i;
		NI colontmp_;
		NI res;
		i = (NI)0;
		colontmp_ = (NI)0;
		colontmp_ = (NI)(n - ((NI) 1));
		res = ((NI) 0);
		{
			while (1) {
				if (!(res <= colontmp_)) goto LA4;
				i = res;
				{
					if (!((NU8)(buf[(i)- 0]) == (NU8)(44))) goto LA7_;
					buf[(i)- 0] = 46;
					hasDot = NIM_TRUE;
				}
				goto LA5_;
				LA7_: ;
				{
					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_;
					hasDot = NIM_TRUE;
				}
				goto LA5_;
				LA10_: ;
				LA5_: ;
				res += ((NI) 1);
			} LA4: ;
		}
	}
	{
		if (!!(hasDot)) goto LA14_;
		buf[(n)- 0] = 46;
		buf[((NI)(n + ((NI) 1)))- 0] = 48;
		buf[((NI)(n + ((NI) 2)))- 0] = 0;
		result = (NI)(n + ((NI) 2));
	}
	goto LA12_;
	LA14_: ;
	{
		result = n;
	}
	LA12_: ;
	{
		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_;
		writeToBuffer__systemZformatfloat_51(buf, "nan");
		result = ((NI) 3);
	}
	goto LA17_;
	LA19_: ;
	{
		if (!((NU8)(buf[((NI)(n - ((NI) 1)))- 0]) == (NU8)(70))) goto LA22_;
		{
			if (!((NU8)(buf[(((NI) 0))- 0]) == (NU8)(45))) goto LA26_;
			writeToBuffer__systemZformatfloat_51(buf, "-inf");
			result = ((NI) 4);
		}
		goto LA24_;
		LA26_: ;
		{
			writeToBuffer__systemZformatfloat_51(buf, "inf");
			result = ((NI) 3);
		}
		LA24_: ;
	}
	goto LA17_;
	LA22_: ;
	LA17_: ;
	return result;
}
N_LIB_PRIVATE N_NIMCALL(void, addFloatSprintf__systemZformatfloat_99)(NimStringDesc** result, NF x) {
	tyArray__eVNFTutn6un5gcq48fQLdg buffer;
	NI n;
	n = writeFloatToBufferSprintf__systemZformatfloat_59(buffer, x);
	addCstringN__systemZformatfloat_5(result, ((NCSTRING) ((&buffer[(((NI) 0))- 0]))), n);
}
static N_INLINE(NIM_BOOL, multipleOfPow2__systemZschubfach_125)(NU32 value, NI32 e2) {
	NIM_BOOL result;
{	result = (NIM_BOOL)0;
	result = ((NU32)(value & (NU32)((NU32)((NU32)((NU32)(((NU32) 1)) << (NU32)(e2))) - (NU32)(((NU32) 1)))) == ((NU32) 0));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NI32, floorDivPow2__systemZschubfach_59)(NI32 x, NI32 n) {
	NI32 result;
{	result = (NI32)0;
	result = (NI32)((NI32)(x) >> (NU32)(n));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NI32, floorLog2Pow10__systemZschubfach_67)(NI32 e) {
	NI32 result;
{	result = (NI32)0;
	result = floorDivPow2__systemZschubfach_59((NI32)(e * ((NI32) 1741647)), ((NI32) 19));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NU64, computePow10Single__systemZschubfach_88)(NI32 k) {
	NU64 result;
{	result = (NU64)0;
	result = g__systemZschubfach_78[((NI32)(k - ((NI32) -31)))- 0];
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NU32, lo32__systemZschubfach_106)(NU64 x) {
	NU32 result;
{	result = (NU32)0;
	result = ((NU32) (x));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NU32, hi32__systemZschubfach_109)(NU64 x) {
	NU32 result;
{	result = (NU32)0;
	result = ((NU32) ((NU64)((NU64)(x) >> (NU64)(((NI) 32)))));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NU32, roundToOdd__systemZschubfach_116)(NU64 g, NU32 cp) {
	NU32 result;
	NU64 b01;
	NU32 T1_;
	NU64 b11;
	NU32 T2_;
	NU64 hi;
	NU32 T3_;
	NU32 y1;
	NU32 y0;
{	result = (NU32)0;
	T1_ = (NU32)0;
	T1_ = lo32__systemZschubfach_106(g);
	b01 = (NU64)((NU64)(((NU64) (T1_))) * (NU64)(((NU64) (cp))));
	T2_ = (NU32)0;
	T2_ = hi32__systemZschubfach_109(g);
	b11 = (NU64)((NU64)(((NU64) (T2_))) * (NU64)(((NU64) (cp))));
	T3_ = (NU32)0;
	T3_ = hi32__systemZschubfach_109(b01);
	hi = (NU64)((NU64)(b11) + (NU64)(((NU64) (T3_))));
	y1 = hi32__systemZschubfach_109(hi);
	y0 = lo32__systemZschubfach_106(hi);
	result = (NU32)(y1 | ((NU32) (((NU32)(((NU32) 1)) < (NU32)(y0)))));
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg, toDecimal32__systemZschubfach_142)(NU32 ieeeSignificand, NU32 ieeeExponent) {
	tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg result;
	NU32 c;
	NI32 q;
	NIM_BOOL isEven;
	NIM_BOOL lowerBoundaryIsCloser;
	NIM_BOOL T14_;
	NU32 cbl;
	NU32 cb;
	NU32 cbr;
	NI32 k;
	NI T16_;
	NI32 h;
	NI32 T22_;
	NU64 pow10;
	NU32 vbl;
	NU32 vb;
	NU32 vbr;
	NU32 lower;
	NU32 upper;
	NU32 s;
	NIM_BOOL uInside;
	NIM_BOOL wInside;
	NU32 mid;
	NIM_BOOL roundUp;
	NIM_BOOL T35_;
	NIM_BOOL T37_;
{	nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg));
	c = (NU32)0;
	q = (NI32)0;
	{
		if (!!((ieeeExponent == ((NU32) 0)))) goto LA3_;
		c = (NU32)(((NU32) 8388608) | ieeeSignificand);
		q = (NI32)(((NI32) (ieeeExponent)) - ((NI32) 150));
		{
			NIM_BOOL T7_;
			NIM_BOOL T8_;
			T7_ = (NIM_BOOL)0;
			T8_ = (NIM_BOOL)0;
			T8_ = (((NI32) 0) <= ((NI32)-(q)));
			if (!(T8_)) goto LA9_;
			T8_ = (((NI32)-(q)) < ((NI32) 24));
			LA9_: ;
			T7_ = T8_;
			if (!(T7_)) goto LA10_;
			T7_ = multipleOfPow2__systemZschubfach_125(c, ((NI32)-(q)));
			LA10_: ;
			if (!T7_) goto LA11_;
			nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg));
			result.digits = (NU32)((NU32)(c) >> (NU32)(((NI32)-(q))));
			result.exponent = ((NI32) 0);
			goto BeforeRet_;
		}
		LA11_: ;
	}
	goto LA1_;
	LA3_: ;
	{
		c = ieeeSignificand;
		q = ((NI32) -149);
	}
	LA1_: ;
	isEven = ((NU32)((NU32)(c) % (NU32)(((NU32) 2))) == ((NU32) 0));
	T14_ = (NIM_BOOL)0;
	T14_ = (ieeeSignificand == ((NU32) 0));
	if (!(T14_)) goto LA15_;
	T14_ = ((NU32)(((NU32) 1)) < (NU32)(ieeeExponent));
	LA15_: ;
	lowerBoundaryIsCloser = T14_;
	cbl = (NU32)((NU32)((NU32)((NU32)((NU32)((NU32)(((NU32) 4)) * (NU32)(c))) - (NU32)(((NU32) 2)))) + (NU32)(((NU32) (lowerBoundaryIsCloser))));
	cb = (NU32)((NU32)(((NU32) 4)) * (NU32)(c));
	cbr = (NU32)((NU32)((NU32)((NU32)(((NU32) 4)) * (NU32)(c))) + (NU32)(((NU32) 2)));
	T16_ = (NI)0;
	{
		if (!lowerBoundaryIsCloser) goto LA19_;
		T16_ = ((NI) 524031);
	}
	goto LA17_;
	LA19_: ;
	{
		T16_ = ((NI) 0);
	}
	LA17_: ;
	k = floorDivPow2__systemZschubfach_59((NI32)((NI32)(q * ((NI32) 1262611)) - ((NI32) (T16_))), ((NI32) 22));
	T22_ = (NI32)0;
	T22_ = floorLog2Pow10__systemZschubfach_67(((NI32)-(k)));
	h = (NI32)((NI32)(q + T22_) + ((NI32) 1));
	pow10 = computePow10Single__systemZschubfach_88(((NI32)-(k)));
	vbl = roundToOdd__systemZschubfach_116(pow10, (NU32)((NU32)(cbl) << (NU32)(h)));
	vb = roundToOdd__systemZschubfach_116(pow10, (NU32)((NU32)(cb) << (NU32)(h)));
	vbr = roundToOdd__systemZschubfach_116(pow10, (NU32)((NU32)(cbr) << (NU32)(h)));
	lower = (NU32)((NU32)(vbl) + (NU32)(((NU32) (!(isEven)))));
	upper = (NU32)((NU32)(vbr) - (NU32)(((NU32) (!(isEven)))));
	s = (NU32)((NU32)(vb) / (NU32)(((NU32) 4)));
	{
		NU32 sp;
		NIM_BOOL upInside;
		NIM_BOOL wpInside;
		if (!((NU32)(((NU32) 10)) <= (NU32)(s))) goto LA25_;
		sp = (NU32)((NU32)(s) / (NU32)(((NU32) 10)));
		upInside = ((NU32)(lower) <= (NU32)((NU32)((NU32)(((NU32) 40)) * (NU32)(sp))));
		wpInside = ((NU32)((NU32)((NU32)((NU32)((NU32)(((NU32) 40)) * (NU32)(sp))) + (NU32)(((NU32) 40)))) <= (NU32)(upper));
		{
			if (!!((upInside == wpInside))) goto LA29_;
			nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg));
			result.digits = (NU32)((NU32)(sp) + (NU32)(((NU32) (wpInside))));
			result.exponent = (NI32)(k + ((NI32) 1));
			goto BeforeRet_;
		}
		LA29_: ;
	}
	LA25_: ;
	uInside = ((NU32)(lower) <= (NU32)((NU32)((NU32)(((NU32) 4)) * (NU32)(s))));
	wInside = ((NU32)((NU32)((NU32)((NU32)((NU32)(((NU32) 4)) * (NU32)(s))) + (NU32)(((NU32) 4)))) <= (NU32)(upper));
	{
		if (!!((uInside == wInside))) goto LA33_;
		nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg));
		result.digits = (NU32)((NU32)(s) + (NU32)(((NU32) (wInside))));
		result.exponent = k;
		goto BeforeRet_;
	}
	LA33_: ;
	mid = (NU32)((NU32)((NU32)((NU32)(((NU32) 4)) * (NU32)(s))) + (NU32)(((NU32) 2)));
	T35_ = (NIM_BOOL)0;
	T35_ = ((NU32)(mid) < (NU32)(vb));
	if (T35_) goto LA36_;
	T37_ = (NIM_BOOL)0;
	T37_ = (vb == mid);
	if (!(T37_)) goto LA38_;
	T37_ = !(((NU32)(s & ((NU32) 1)) == ((NU32) 0)));
	LA38_: ;
	T35_ = T37_;
	LA36_: ;
	roundUp = T35_;
	nimZeroMem((void*)(&result), sizeof(tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg));
	result.digits = (NU32)((NU32)(s) + (NU32)(((NU32) (roundUp))));
	result.exponent = k;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NI32, decimalLength__systemZschubfach_277)(NU32 v) {
	NI32 result;
{	result = (NI32)0;
	{
		if (!((NU32)(((NU) 100000000)) <= (NU32)(((NU) (v))))) goto LA3_;
		result = ((NI32) 9);
		goto BeforeRet_;
	}
	LA3_: ;
	{
		if (!((NU32)(((NU) 10000000)) <= (NU32)(((NU) (v))))) goto LA7_;
		result = ((NI32) 8);
		goto BeforeRet_;
	}
	LA7_: ;
	{
		if (!((NU32)(((NU) 1000000)) <= (NU32)(((NU) (v))))) goto LA11_;
		result = ((NI32) 7);
		goto BeforeRet_;
	}
	LA11_: ;
	{
		if (!((NU32)(((NU) 100000)) <= (NU32)(((NU) (v))))) goto LA15_;
		result = ((NI32) 6);
		goto BeforeRet_;
	}
	LA15_: ;
	{
		if (!((NU32)(((NU) 10000)) <= (NU32)(((NU) (v))))) goto LA19_;
		result = ((NI32) 5);
		goto BeforeRet_;
	}
	LA19_: ;
	{
		if (!((NU32)(((NU) 1000)) <= (NU32)(((NU) (v))))) goto LA23_;
		result = ((NI32) 4);
		goto BeforeRet_;
	}
	LA23_: ;
	{
		if (!((NU32)(((NU) 100)) <= (NU32)(((NU) (v))))) goto LA27_;
		result = ((NI32) 3);
		goto BeforeRet_;
	}
	LA27_: ;
	{
		if (!((NU32)(((NU) 10)) <= (NU32)(((NU) (v))))) goto LA31_;
		result = ((NI32) 2);
		goto BeforeRet_;
	}
	LA31_: ;
	result = ((NI32) 1);
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NI32, printDecimalDigitsBackwards__systemZschubfach_206)(NIM_CHAR* buf, NI bufLen_0, NI pos, NU32 output) {
	NI32 result;
	NU32 output_2;
	NI pos_2;
	NI32 tz;
	NI32 nd;
{	result = (NI32)0;
	output_2 = output;
	pos_2 = pos;
	tz = ((NI32) 0);
	nd = ((NI32) 0);
	{
		NU32 q;
		NU32 r;
		if (!((NU32)(((NU32) 10000)) <= (NU32)(output_2))) goto LA3_;
		q = (NU32)((NU32)(output_2) / (NU32)(((NU32) 10000)));
		r = (NU32)((NU32)(output_2) % (NU32)(((NU32) 10000)));
		output_2 = q;
		pos_2 -= ((NI) 4);
		{
			NU32 rH;
			NU32 rL;
			NU32 T9_;
			NI32 T15_;
			NI T16_;
			if (!!((r == ((NU32) 0)))) goto LA7_;
			rH = (NU32)((NU32)(r) / (NU32)(((NU32) 100)));
			rL = (NU32)((NU32)(r) % (NU32)(((NU32) 100)));
			utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos_2, rH);
			utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, (NI)(pos_2 + ((NI) 2)), rL);
			T9_ = (NU32)0;
			{
				if (!(rL == ((NU32) 0))) goto LA12_;
				T9_ = rH;
			}
			goto LA10_;
			LA12_: ;
			{
				T9_ = rL;
			}
			LA10_: ;
			T15_ = (NI32)0;
			T15_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(T9_);
			T16_ = (NI)0;
			{
				if (!(rL == ((NU32) 0))) goto LA19_;
				T16_ = ((NI) 2);
			}
			goto LA17_;
			LA19_: ;
			{
				T16_ = ((NI) 0);
			}
			LA17_: ;
			tz = (NI32)(T15_ + ((NI32) (T16_)));
		}
		goto LA5_;
		LA7_: ;
		{
			tz = ((NI32) 4);
		}
		LA5_: ;
		nd = ((NI32) 4);
	}
	LA3_: ;
	{
		NU32 q_2;
		NU32 r_2;
		if (!((NU32)(((NU32) 100)) <= (NU32)(output_2))) goto LA25_;
		q_2 = (NU32)((NU32)(output_2) / (NU32)(((NU32) 100)));
		r_2 = (NU32)((NU32)(output_2) % (NU32)(((NU32) 100)));
		output_2 = q_2;
		pos_2 -= ((NI) 2);
		utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos_2, r_2);
		{
			NI32 T31_;
			if (!(tz == nd)) goto LA29_;
			T31_ = (NI32)0;
			T31_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(r_2);
			tz += ((NI) (T31_));
		}
		LA29_: ;
		nd += ((NI) 2);
		{
			NU32 q2;
			NU32 r2;
			if (!((NU32)(((NU32) 100)) <= (NU32)(output_2))) goto LA34_;
			q2 = (NU32)((NU32)(output_2) / (NU32)(((NU32) 100)));
			r2 = (NU32)((NU32)(output_2) % (NU32)(((NU32) 100)));
			output_2 = q2;
			pos_2 -= ((NI) 2);
			utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos_2, r2);
			{
				NI32 T40_;
				if (!(tz == nd)) goto LA38_;
				T40_ = (NI32)0;
				T40_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(r2);
				tz += ((NI) (T40_));
			}
			LA38_: ;
			nd += ((NI) 2);
		}
		LA34_: ;
	}
	LA25_: ;
	{
		NU32 q_3;
		if (!((NU32)(((NU32) 10)) <= (NU32)(output_2))) goto LA43_;
		q_3 = output_2;
		pos_2 -= ((NI) 2);
		utoa2Digits__stdZprivateZdigitsutils_21(buf, bufLen_0, pos_2, q_3);
		{
			NI32 T49_;
			if (!(tz == nd)) goto LA47_;
			T49_ = (NI32)0;
			T49_ = trailingZeros2Digits__stdZprivateZdigitsutils_34(q_3);
			tz += ((NI) (T49_));
		}
		LA47_: ;
	}
	goto LA41_;
	LA43_: ;
	{
		NU32 q_4;
		q_4 = output_2;
		pos_2 -= ((NI) 1);
		buf[pos_2] = ((NIM_CHAR) (((NI) ((NU32)((NU32)(((NU32) 48)) + (NU32)(q_4))))));
	}
	LA41_: ;
	result = tz;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NI, formatDigits__systemZschubfach_286)(NIM_CHAR* buffer, NI bufferLen_0, NI pos, NU32 digits, NI32 decimalExponent, NIM_BOOL forceTrailingDotZero) {
	NI result;
	NI pos_2;
	NI32 numDigits;
	NI32 decimalPoint;
	NIM_BOOL useFixed;
	NIM_BOOL T1_;
	NI32 decimalDigitsPosition;
	NI digitsEnd;
	NI32 tz;
{	result = (NI)0;
	pos_2 = pos;
	numDigits = decimalLength__systemZschubfach_277(digits);
	decimalPoint = (NI32)(numDigits + decimalExponent);
	T1_ = (NIM_BOOL)0;
	T1_ = (((NI32) -4) <= decimalPoint);
	if (!(T1_)) goto LA2_;
	T1_ = (decimalPoint <= ((NI32) 9));
	LA2_: ;
	useFixed = T1_;
	{
		NI i;
		NI i_2;
		i = (NI)0;
		i_2 = ((NI) 0);
		{
			while (1) {
				if (!(i_2 < ((NI) 32))) goto LA5;
				i = i_2;
				buffer[(NI)(pos_2 + i)] = 48;
				i_2 += ((NI) 1);
			} LA5: ;
		}
	}
	decimalDigitsPosition = (NI32)0;
	{
		if (!useFixed) goto LA8_;
		{
			if (!(decimalPoint <= ((NI32) 0))) goto LA12_;
			decimalDigitsPosition = (NI32)(((NI32) 2) - decimalPoint);
		}
		goto LA10_;
		LA12_: ;
		{
			decimalDigitsPosition = ((NI32) 0);
		}
		LA10_: ;
	}
	goto LA6_;
	LA8_: ;
	{
		decimalDigitsPosition = ((NI32) 1);
	}
	LA6_: ;
	digitsEnd = (NI)((NI)(pos_2 + ((NI) (decimalDigitsPosition))) + ((NI) (numDigits)));
	tz = printDecimalDigitsBackwards__systemZschubfach_206(buffer, bufferLen_0, digitsEnd, digits);
	digitsEnd -= ((NI) (tz));
	numDigits -= ((NI) (tz));
	{
		if (!useFixed) goto LA18_;
		{
			if (!(decimalPoint <= ((NI32) 0))) goto LA22_;
			buffer[(NI)(pos_2 + ((NI) 1))] = 46;
			pos_2 = digitsEnd;
		}
		goto LA20_;
		LA22_: ;
		{
			if (!(decimalPoint < numDigits)) goto LA25_;
			{
				NI i_3;
				NI res;
				i_3 = (NI)0;
				res = ((NI) 7);
				{
					while (1) {
						if (!(((NI) 0) <= res)) goto LA29;
						i_3 = res;
						buffer[(NI)((NI)(i_3 + ((NI) (decimalPoint))) + ((NI) 1))] = buffer[(NI)(i_3 + ((NI) (decimalPoint)))];
						res -= ((NI) 1);
					} LA29: ;
				}
			}
			buffer[(NI)(pos_2 + ((NI) (decimalPoint)))] = 46;
			pos_2 = (NI)(digitsEnd + ((NI) 1));
		}
		goto LA20_;
		LA25_: ;
		{
			pos_2 += ((NI) (decimalPoint));
			{
				if (!forceTrailingDotZero) goto LA33_;
				buffer[pos_2] = 46;
				buffer[(NI)(pos_2 + ((NI) 1))] = 48;
				pos_2 += ((NI) 2);
			}
			LA33_: ;
		}
		LA20_: ;
	}
	goto LA16_;
	LA18_: ;
	{
		NI32 scientificExponent;
		NU32 k;
		NI32 T46_;
		buffer[pos_2] = buffer[(NI)(pos_2 + ((NI) 1))];
		{
			if (!(numDigits == ((NI32) 1))) goto LA38_;
			pos_2 += ((NI) 1);
		}
		goto LA36_;
		LA38_: ;
		{
			buffer[(NI)(pos_2 + ((NI) 1))] = 46;
			pos_2 = digitsEnd;
		}
		LA36_: ;
		scientificExponent = (NI32)(decimalPoint - ((NI32) 1));
		buffer[pos_2] = 101;
		{
			if (!(scientificExponent < ((NI32) 0))) goto LA43_;
			buffer[(NI)(pos_2 + ((NI) 1))] = 45;
		}
		goto LA41_;
		LA43_: ;
		{
			buffer[(NI)(pos_2 + ((NI) 1))] = 43;
		}
		LA41_: ;
		pos_2 += ((NI) 2);
		T46_ = (NI32)0;
		{
			if (!(scientificExponent < ((NI32) 0))) goto LA49_;
			T46_ = ((NI32)-(scientificExponent));
		}
		goto LA47_;
		LA49_: ;
		{
			T46_ = scientificExponent;
		}
		LA47_: ;
		k = ((NU32) (T46_));
		{
			if (!((NU32)(k) < (NU32)(((NU32) 10)))) goto LA54_;
			buffer[pos_2] = ((NIM_CHAR) (((NI) ((NU32)((NU32)(((NU32) 48)) + (NU32)(k))))));
			pos_2 += ((NI) 1);
		}
		goto LA52_;
		LA54_: ;
		{
			utoa2Digits__stdZprivateZdigitsutils_21(buffer, bufferLen_0, pos_2, k);
			pos_2 += ((NI) 2);
		}
		LA52_: ;
	}
	LA16_: ;
	result = pos_2;
	goto BeforeRet_;
	}BeforeRet_: ;
	return result;
}
static N_INLINE(NI, float32ToChars__systemZschubfach_387)(NIM_CHAR* buffer, NI bufferLen_0, NF32 v, NIM_BOOL forceTrailingDotZero) {
	NI result;
	NU32 significand;
	tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ T1_;
	NU32 exponent;
	tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ T2_;
	NI pos;
{	result = (NI)0;
	T1_ = constructSingle__systemZschubfach_31(v);
	significand = physicalSignificand__systemZschubfach_34(T1_);
	T2_ = constructSingle__systemZschubfach_31(v);
	exponent = physicalExponent__systemZschubfach_37(T2_);
	pos = ((NI) 0);
	{
		tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ T7_;
		NI T8_;
		if (!!((exponent == ((NU32) 255)))) goto LA5_;
		buffer[pos] = 45;
		T7_ = constructSingle__systemZschubfach_31(v);
		T8_ = (NI)0;
		T8_ = signBit__systemZschubfach_56(T7_);
		pos += T8_;
		{
			NIM_BOOL T11_;
			tyObject_FloatingDecimal32__AcbjRnPoMG8Pkr9bMFAoLNg dec;
			T11_ = (NIM_BOOL)0;
			T11_ = !((exponent == ((NU32) 0)));
			if (T11_) goto LA12_;
			T11_ = !((significand == ((NU32) 0)));
			LA12_: ;
			if (!T11_) goto LA13_;
			dec = toDecimal32__systemZschubfach_142(significand, exponent);
			result = formatDigits__systemZschubfach_286(buffer, bufferLen_0, pos, dec.digits, dec.exponent, forceTrailingDotZero);
			goto BeforeRet_;
		}
		goto LA9_;
		LA13_: ;
		{
			NI T16_;
			buffer[pos] = 48;
			buffer[(NI)(pos + ((NI) 1))] = 46;
			buffer[(NI)(pos + ((NI) 2))] = 48;
			buffer[(NI)(pos + ((NI) 3))] = 32;
			T16_ = (NI)0;
			{
				if (!forceTrailingDotZero) goto LA19_;
				T16_ = ((NI) 3);
			}
			goto LA17_;
			LA19_: ;
			{
				T16_ = ((NI) 1);
			}
			LA17_: ;
			pos += T16_;
			result = pos;
			goto BeforeRet_;
		}
		LA9_: ;
	}
	LA5_: ;
	{
		tyObject_Single__d6NidTbsj2ZAh9ao1GJW9aXQ T26_;
		NI T27_;
		if (!(significand == ((NU32) 0))) goto LA24_;
		buffer[pos] = 45;
		T26_ = constructSingle__systemZschubfach_31(v);
		T27_ = (NI)0;
		T27_ = signBit__systemZschubfach_56(T26_);
		pos += T27_;
		buffer[pos] = 105;
		buffer[(NI)(pos + ((NI) 1))] = 110;
		buffer[(NI)(pos + ((NI) 2))] = 102;
		buffer[(NI)(pos + ((NI) 3))] = 32;
		result = (NI)(pos + ((NI) 3));
		goto BeforeRet_;
	}
	goto LA22_;
	LA24_: ;
	{
		buffer[pos] = 110;
		buffer[(NI)(pos + ((NI) 1))] = 97;
		buffer[(NI)(pos + ((NI) 2))] = 110;
		buffer[(NI)(pos + ((NI) 3))] = 32;
		result = (NI)(pos + ((NI) 3));
		goto BeforeRet_;
	}
	LA22_: ;
	}BeforeRet_: ;
	return result;
}
N_LIB_PRIVATE N_NIMCALL(NI, writeFloatToBufferRoundtrip__systemZformatfloat_44)(NIM_CHAR* buf, NF32 value) {
	NI result;
	result = (NI)0;
	result = float32ToChars__systemZschubfach_387(buf, 65, value, NIM_TRUE);
	buf[(result)- 0] = 0;
	return result;
}
N_LIB_PRIVATE N_NIMCALL(void, addFloatRoundtrip__system_6826)(NimStringDesc** result, NF32 x) {
	tyArray__eVNFTutn6un5gcq48fQLdg buffer;
	NI n;
	n = writeFloatToBufferRoundtrip__systemZformatfloat_44(buffer, x);
	addCstringN__systemZformatfloat_5(result, ((NCSTRING) ((&buffer[(((NI) 0))- 0]))), n);
}
