We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent bb03a6f commit 00f634eCopy full SHA for 00f634e
‎zmij.cc‎
@@ -886,9 +886,15 @@ auto write(Float value, char* buffer) noexcept -> char* {
886
buffer[2] = '\0';
887
return buffer + 2;
888
}
889
- // 19 is faster or equal to 12 even for 3 digits.
+
890
+#if defined(__APPLE__) && defined(__aarch64__) && ZMIJ_USE_INT128
891
+ // Use mulhi to divide by 100.
892
+ uint32_t digit = (uint128_t(dec_exp) * 0x290000000000000) >> 64;
893
+#else
894
+ // div100_exp=19 is faster or equal to 12 even for 3 digits.
895
uint32_t digit =
896
(uint32_t(dec_exp) * div100_sig) >> div100_exp; // value / 100
897
+#endif
898
uint32_t digit_with_nuls = '0' + digit;
899
if (is_big_endian()) digit_with_nuls <<= 24;
900
memcpy(buffer, &digit_with_nuls, 4);
0 commit comments