| 121 | } |
| 122 | |
| 123 | static inline char* format_integer(uint64_t sig, char *out, unsigned cnt) { |
| 124 | char *p = out + cnt; |
| 125 | if ((sig >> 32) != 0) { |
| 126 | uint64_t q = sig / 100000000; |
| 127 | uint32_t r = ((uint32_t)sig) - 100000000 * ((uint32_t) q); |
| 128 | sig = q; |
| 129 | uint32_t c = r % 10000; |
| 130 | r /= 10000; |
| 131 | uint32_t d = r % 10000; |
| 132 | uint32_t c0 = (c % 100) << 1; |
| 133 | uint32_t c1 = (c / 100) << 1; |
| 134 | uint32_t d0 = (d % 100) << 1; |
| 135 | uint32_t d1 = (d / 100) << 1; |
| 136 | copy_two_digs(p - 2, Digits + c0); |
| 137 | copy_two_digs(p - 4, Digits + c1); |
| 138 | copy_two_digs(p - 6, Digits + d0); |
| 139 | copy_two_digs(p - 8, Digits + d1); |
| 140 | p -= 8; |
| 141 | } |
| 142 | |
| 143 | uint32_t sig2 = (uint32_t)sig; |
| 144 | while (sig2 >= 10000) { |
| 145 | uint32_t c = sig2 - 10000 * (sig2 / 10000); |
| 146 | sig2 /= 10000; |
| 147 | uint32_t c0 = (c % 100) << 1; |
| 148 | uint32_t c1 = (c / 100) << 1; |
| 149 | copy_two_digs(p - 2, Digits + c0); |
| 150 | copy_two_digs(p - 4, Digits + c1); |
| 151 | p -= 4; |
| 152 | } |
| 153 | if (sig2 >= 100) { |
| 154 | uint32_t c = (sig2 % 100) << 1; |
| 155 | sig2 /= 100; |
| 156 | copy_two_digs(p - 2, Digits + c); |
| 157 | p -= 2; |
| 158 | } |
| 159 | if (sig2 >= 10) { |
| 160 | uint32_t c = sig2 << 1; |
| 161 | copy_two_digs(p - 2, Digits + c); |
| 162 | } else { |
| 163 | *out = (char) ('0' + sig2); |
| 164 | } |
| 165 | return out + cnt; |
| 166 | } |
| 167 | |
| 168 | static inline char* format_exponent(f64_dec v, char *out, unsigned cnt) { |
| 169 | char* p = out + 1; |
no test coverage detected
searching dependent graphs…