)]}'
{
  "log": [
    {
      "commit": "0de7a21da582b6c84b0546772a96549882905d2b",
      "tree": "fb1630cda06d535659c2e3a5eb4186c34de36510",
      "parents": [
        "638a8acd6d8683ede2f5b3e0d801f56586b5d68d"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sat Oct 17 12:55:50 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sat Oct 17 12:55:50 2026"
      },
      "message": "Run clang-format\n"
    },
    {
      "commit": "638a8acd6d8683ede2f5b3e0d801f56586b5d68d",
      "tree": "c286a781d54bb544821f07452d90300d55d9594c",
      "parents": [
        "166d2b3df29cf8101bb715bde2125610881df791",
        "90513adca146f18c6d6223a5b48633da109d4ca4"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sat Oct 17 12:54:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 12:54:58 2026"
      },
      "message": "Merge pull request #426 from sahvx655-wq/power-negative-shift\n\nAvoid right-shifting a negative value in detail::power()"
    },
    {
      "commit": "90513adca146f18c6d6223a5b48633da109d4ca4",
      "tree": "c286a781d54bb544821f07452d90300d55d9594c",
      "parents": [
        "166d2b3df29cf8101bb715bde2125610881df791"
      ],
      "author": {
        "name": "Sahana Bogar",
        "email": "sahvx655@gmail.com",
        "time": "Wed Oct 14 18:16:38 2026"
      },
      "committer": {
        "name": "Sahana Bogar",
        "email": "sahvx655@gmail.com",
        "time": "Thu Oct 15 06:23:39 2026"
      },
      "message": "Avoid right-shifting a negative value in detail::power()\n"
    },
    {
      "commit": "166d2b3df29cf8101bb715bde2125610881df791",
      "tree": "26739b982f245c6e33e379e2807027d57c208495",
      "parents": [
        "033f64f6088bb00690858ce59bc8c7fd0566384a",
        "9cd6dfc8e36ae6c12285f27e6bd556ffd3ec75c0"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Oct 12 14:11:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 14:11:38 2026"
      },
      "message": "Merge pull request #425 from fastfloat/fix-424-fixed-width-invalid\n\nLeave std::float32_t/std::float64_t unmodified on invalid input (fixes #424)"
    },
    {
      "commit": "9cd6dfc8e36ae6c12285f27e6bd556ffd3ec75c0",
      "tree": "26739b982f245c6e33e379e2807027d57c208495",
      "parents": [
        "033f64f6088bb00690858ce59bc8c7fd0566384a"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Oct 12 14:10:54 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Oct 12 14:10:54 2026"
      },
      "message": "Leave std::float32_t/std::float64_t unmodified on invalid input (fixes #424)\n\nThe fixed-width wrappers parsed into a zero-initialized temporary and\ncopied it back unconditionally, so invalid input overwrote the\ndestination with zero. Copy back only when the result is not\ninvalid_argument, as required by [charconv.from.chars]/1.\n"
    },
    {
      "commit": "033f64f6088bb00690858ce59bc8c7fd0566384a",
      "tree": "2f97a9dc47ed6a64b2f891623f77b29fc9e3e68f",
      "parents": [
        "42f254836ee416ffcf2f4e6576260003ac33d48c",
        "e7e0cfcd4f28601043c59ce05f6c6834d91c4cff"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Oct 11 21:35:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 11 21:35:37 2026"
      },
      "message": "Merge pull request #423 from sahvx655-wq/fuzz-coverage\n\nextend fuzzer to wide char types, integer parsing and all formats"
    },
    {
      "commit": "e7e0cfcd4f28601043c59ce05f6c6834d91c4cff",
      "tree": "2f97a9dc47ed6a64b2f891623f77b29fc9e3e68f",
      "parents": [
        "42f254836ee416ffcf2f4e6576260003ac33d48c"
      ],
      "author": {
        "name": "Sahana Bogar",
        "email": "sahvx655@gmail.com",
        "time": "Sun Oct 11 20:25:39 2026"
      },
      "committer": {
        "name": "Sahana Bogar",
        "email": "sahvx655@gmail.com",
        "time": "Sun Oct 11 20:25:39 2026"
      },
      "message": "extend fuzzer to wide char types, integer parsing and all formats\n"
    },
    {
      "commit": "42f254836ee416ffcf2f4e6576260003ac33d48c",
      "tree": "3a319ac45a0905d1ddfb4b6886f38116c890313b",
      "parents": [
        "91aef729bd8652c44c9bfcc391425ceffd82c230"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Fri Oct 09 19:56:38 2026"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Fri Oct 09 19:56:38 2026"
      },
      "message": "Version 8.3.2\n"
    },
    {
      "commit": "91aef729bd8652c44c9bfcc391425ceffd82c230",
      "tree": "e31b1358338d05a60c25426974d6941523d68bdd",
      "parents": [
        "54571f86e3a8124c39bc4765ff64d766b4e25efc",
        "50f01dbb516b3baad44af2e76f1bef8b843e306a"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Fri Oct 09 19:54:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 09 19:54:46 2026"
      },
      "message": "Merge pull request #422 from sahvx655-wq/is-integer-signed-overflow\n\navoid signed overflow in is_integer on negative wchar_t units"
    },
    {
      "commit": "50f01dbb516b3baad44af2e76f1bef8b843e306a",
      "tree": "e31b1358338d05a60c25426974d6941523d68bdd",
      "parents": [
        "54571f86e3a8124c39bc4765ff64d766b4e25efc"
      ],
      "author": {
        "name": "Sahana Bogar",
        "email": "sahvx655@gmail.com",
        "time": "Thu Oct 08 13:42:13 2026"
      },
      "committer": {
        "name": "Sahana Bogar",
        "email": "sahvx655@gmail.com",
        "time": "Thu Oct 08 13:42:13 2026"
      },
      "message": "avoid signed overflow in is_integer for negative code units\n"
    },
    {
      "commit": "54571f86e3a8124c39bc4765ff64d766b4e25efc",
      "tree": "71dacbd45d99fd64152bc67f5276dbbe2c6f320c",
      "parents": [
        "f3f02c8ad0afd8181166dabce6a9e69f8aec24de",
        "127167512976d2e1581f908f2c6dd5c701259048"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Oct 06 23:48:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 23:48:48 2026"
      },
      "message": "Merge pull request #421 from sahvx655-wq/times-pow10-int64-min\n\navoid signed negation overflow in integer_times_pow10"
    },
    {
      "commit": "127167512976d2e1581f908f2c6dd5c701259048",
      "tree": "71dacbd45d99fd64152bc67f5276dbbe2c6f320c",
      "parents": [
        "f3f02c8ad0afd8181166dabce6a9e69f8aec24de"
      ],
      "author": {
        "name": "Sahana Bogar",
        "email": "sahvx655@gmail.com",
        "time": "Mon Oct 05 17:16:40 2026"
      },
      "committer": {
        "name": "Sahana Bogar",
        "email": "sahvx655@gmail.com",
        "time": "Mon Oct 05 17:16:40 2026"
      },
      "message": "avoid signed negation overflow in integer_times_pow10\n\nNegating the most negative int64_t is undefined behaviour. GCC at -O2 uses that to turn the fast-path mantissa bound into a signed compare and returns the wrong sign, so take the magnitude in uint64_t instead.\n"
    },
    {
      "commit": "f3f02c8ad0afd8181166dabce6a9e69f8aec24de",
      "tree": "32563e9fa9a6c3f86794aa92921a4e50dde0246d",
      "parents": [
        "963467e89d605c264b7a572c93f9a448e5bdefbf"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Sun Oct 04 16:26:53 2026"
      },
      "committer": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Sun Oct 04 16:26:53 2026"
      },
      "message": "Version 8.3.1\n"
    },
    {
      "commit": "963467e89d605c264b7a572c93f9a448e5bdefbf",
      "tree": "b970132bf510b7464afd60017efc39be40a05b18",
      "parents": [
        "3e4f80fcc42a22a0083660908ad4cbf65adf8f89",
        "e62540e95fbb4640b7c5758d8869be921988a984"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Oct 04 16:24:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 16:24:46 2026"
      },
      "message": "Merge pull request #420 from fastfloat/release-workflow\n\nAdd manually triggered release workflow; fix on-release asset upload"
    },
    {
      "commit": "e62540e95fbb4640b7c5758d8869be921988a984",
      "tree": "b970132bf510b7464afd60017efc39be40a05b18",
      "parents": [
        "3e4f80fcc42a22a0083660908ad4cbf65adf8f89"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Oct 04 16:05:40 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Oct 04 16:05:40 2026"
      },
      "message": "Add manually triggered release workflow; fix on-release asset upload\n\n- New release.yml (workflow_dispatch): bumps patch/minor/major, runs\n  script/release.py, tests the amalgamation and the full test suite,\n  commits and tags on main, and publishes a release with fast_float.h.\n- on-release.yml: the upload failed with \u0027Validation Failed\u0027 because\n  fast_float.h was already attached to the release. Use\n  \u0027gh release upload --clobber\u0027 instead of the deprecated\n  actions/upload-release-asset, and run the amalgamation test binary.\n- release.py: also bump MODULE.bazel (stuck at 8.2.4) and exit non-zero\n  if amalgamation fails.\n"
    },
    {
      "commit": "3e4f80fcc42a22a0083660908ad4cbf65adf8f89",
      "tree": "6334688cbb4e254a1b4bdabdb3c0c8f4d26b32ad",
      "parents": [
        "9498cc361e081f46c85c936a0677e271c1930a45",
        "fe5e97eeac55d7a809f8f04a6fa539967effdc19"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Oct 04 15:59:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 15:59:23 2026"
      },
      "message": "Merge pull request #419 from fastfloat/fix-418-struct-layout\n\nReorder parsed_number_string_t fields to avoid padding (fixes #418)"
    },
    {
      "commit": "fe5e97eeac55d7a809f8f04a6fa539967effdc19",
      "tree": "6334688cbb4e254a1b4bdabdb3c0c8f4d26b32ad",
      "parents": [
        "9498cc361e081f46c85c936a0677e271c1930a45"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Oct 04 13:34:39 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Oct 04 13:34:39 2026"
      },
      "message": "Reorder parsed_number_string_t fields to avoid padding (fixes #418)\n\nPlacing the parse_error field next to the booleans shrinks the struct\nfrom 72 to 64 bytes on 64-bit systems, recovering a large performance\nregression observed with MSVC. Add a static_assert to guard the size.\n"
    },
    {
      "commit": "9498cc361e081f46c85c936a0677e271c1930a45",
      "tree": "82b80b9261117c6ffd1523c55f763322b87206bd",
      "parents": [
        "1dc46a6b8f58a32ca7075253962e0a35951a7abf",
        "c31e0294c3334f16649dabe39dd0550b2a50c5d1"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sat Sep 26 19:30:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 26 19:30:01 2026"
      },
      "message": "Merge pull request #417 from fastfloat/fix-alpine-ci\n\nCI: pin Alpine to v3.22 to fix setup-alpine failures"
    },
    {
      "commit": "c31e0294c3334f16649dabe39dd0550b2a50c5d1",
      "tree": "82b80b9261117c6ffd1523c55f763322b87206bd",
      "parents": [
        "1dc46a6b8f58a32ca7075253962e0a35951a7abf"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sat Sep 26 18:53:33 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sat Sep 26 18:53:33 2026"
      },
      "message": "CI: pin Alpine to v3.22 (setup-alpine v1 fails with apk-tools v3)\n"
    },
    {
      "commit": "1dc46a6b8f58a32ca7075253962e0a35951a7abf",
      "tree": "12e95bde1c6eca0d978efb2eebad59a3a6905a66",
      "parents": [
        "f103228650b1b3ca4363ebb9a6caee20179a2390",
        "27b2a9dd0644792c1e2db4d24214396a40788073"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Fri Sep 25 22:21:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 25 22:21:25 2026"
      },
      "message": "Merge pull request #409 from caolanm/main\n\ndrop the unreachable tail of parse_mantissa"
    },
    {
      "commit": "f103228650b1b3ca4363ebb9a6caee20179a2390",
      "tree": "eff1694ffba3a3a046c0fd3d4f66618b161a3bf6",
      "parents": [
        "cdc385d05899e508e20dd5666e9cc760915cb0fa",
        "38168208f6dd15a9090f236b713d1ec75bb4feb1"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Wed Sep 23 18:12:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 18:12:38 2026"
      },
      "message": "Merge pull request #415 from Algunenano/fix-benchmark-branch-misses\n\nAverage branch misses over the repetitions in the benchmark"
    },
    {
      "commit": "38168208f6dd15a9090f236b713d1ec75bb4feb1",
      "tree": "eff1694ffba3a3a046c0fd3d4f66618b161a3bf6",
      "parents": [
        "cdc385d05899e508e20dd5666e9cc760915cb0fa"
      ],
      "author": {
        "name": "Raúl Marín",
        "email": "raul.marin@clickhouse.com",
        "time": "Wed Sep 23 17:12:41 2026"
      },
      "committer": {
        "name": "Raúl Marín",
        "email": "raul.marin@clickhouse.com",
        "time": "Wed Sep 23 17:12:41 2026"
      },
      "message": "Average branch misses over the repetitions in the benchmark\n\nbm/f printed the total over all repetitions per float, unlike the other counters.\n\nCo-Authored-By: Claude Opus 5.5 (1M context) \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "cdc385d05899e508e20dd5666e9cc760915cb0fa",
      "tree": "a84de4121d07293044b0cd82dfacad23f2d64ac3",
      "parents": [
        "7969d5089c92138343f5a3c45d097b0e842825c6",
        "82623d83c50048c5b74771e2545886df6a9042f1"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Sep 22 18:11:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 22 18:11:44 2026"
      },
      "message": "Merge pull request #408 from jadidbourbaki/float16-exactness\n\nFix std::float16_t rounding of subnormal ties and fast-path overflow"
    },
    {
      "commit": "82623d83c50048c5b74771e2545886df6a9042f1",
      "tree": "b0477e333c347ea34b418a2eb6d6a85aee344cf7",
      "parents": [
        "20a9b353334299916793aa8215607bcaffaf5e1a"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Sep 22 17:57:31 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Sep 22 17:57:31 2026"
      },
      "message": "Avoid right-shifting a negative value in subnormal_ties_possible()\n"
    },
    {
      "commit": "7969d5089c92138343f5a3c45d097b0e842825c6",
      "tree": "e6469cce8c24d02cc4dde4187325362c5c6078e4",
      "parents": [
        "e9e04dec19135620a146ecdc687e26fe0f16e3df",
        "b57a12270e44529dd3bd71d4320ca13aaeddb813"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Sep 22 02:51:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 22 02:51:08 2026"
      },
      "message": "Merge pull request #413 from fastfloat/clang-format-fold\n\nFold the format at compile time under clang, mark cold checks unlikely"
    },
    {
      "commit": "b57a12270e44529dd3bd71d4320ca13aaeddb813",
      "tree": "e6469cce8c24d02cc4dde4187325362c5c6078e4",
      "parents": [
        "e9e04dec19135620a146ecdc687e26fe0f16e3df"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Sep 22 02:19:35 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Sep 22 02:30:43 2026"
      },
      "message": "Fold the format at compile time under clang, mark cold checks unlikely\n\nClang generated ~35% more instructions per float than GCC on identical\ncode (canada.txt, 64-bit: 276 vs 200 i/f on a Xeon Gold 6548N). Two\ncauses, confirmed with exact instruction traces:\n\n1. Clang declines to inline the parser (from_chars_caller\u003cT\u003e::call) into\n   its callers, so parse_options stays a runtime value and every format\n   flag is re-tested on every conversion: javascript, skip_white_space,\n   allow_leading_plus, fixed/scientific, the decimal point, the JSON\n   dispatch. GCC inlines the whole parser into each call site, where\n   chars_format::general is a constant, and all of it folds away.\n\n   Fix: from_chars dispatches chars_format::general to a\n   from_chars_fixed_format\u003cT, UC, Fmt\u003e instantiation, so the format is a\n   compile-time constant inside the parser body whether or not the user\u0027s\n   call is inlined. The call forwarder gets fastfloat_clang_really_inline\n   so that it folds into that instantiation.\n\n2. Clang if-converts the rare over/underflow fix-ups at the end of\n   compute_float and the result_out_of_range test into cmov chains that\n   every conversion executes. Marking them fastfloat_clang_unlikely keeps\n   them as never-taken branches.\n\nBoth are applied under clang only, and GCC\u0027s generated code is identical\nto before (verified on the object code). That is on purpose: forcing\nalways_inline on from_chars, or even on the trivial call forwarder,\nregressed GCC by up to 14% on mesh.txt by changing its inlining order;\ndispatching to the fixed-format instantiation made it stop inlining into\nthe loop; and the unlikely hints alone cost it 2-6% on mesh.txt by\nreordering blocks (GCC already emits branches there).\n\nrealbenchmark, cycles per float, 5 interleaved rounds, medians:\n\nclang 21, Xeon Gold 6548N        before   after\n  canada.txt ASCII  (64)          49.7    44.6   -10%\n  canada.txt UTF-16 (64)          57.4    52.0    -9%\n  mesh.txt   ASCII  (64)          26.5    22.4   -16%\n  mesh.txt   UTF-16 (64)          28.1    24.0   -15%\n  (32-bit: -8% to -14%)\ngcc 14, same machine: generated code unchanged.\nApple clang 17, arm64: +3% to +18% Mfloat/s.\n"
    },
    {
      "commit": "e9e04dec19135620a146ecdc687e26fe0f16e3df",
      "tree": "66274bee596d056222bc2cea3f9a5cd2c48199bb",
      "parents": [
        "63735928992cf5ef0cfc2e10a8f73dc3188d3df8",
        "7e45de0c3b7ce1d8bbb131482ce18d0978753c7b"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Sep 22 02:17:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 22 02:17:08 2026"
      },
      "message": "Merge pull request #412 from fastfloat/strncasecmp-simple\n\nRestore the simple loop in fastfloat_strncasecmp"
    },
    {
      "commit": "7e45de0c3b7ce1d8bbb131482ce18d0978753c7b",
      "tree": "66274bee596d056222bc2cea3f9a5cd2c48199bb",
      "parents": [
        "63735928992cf5ef0cfc2e10a8f73dc3188d3df8"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Sep 22 02:05:34 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Sep 22 02:05:34 2026"
      },
      "message": "Restore the simple loop in fastfloat_strncasecmp\n\nPR #356 replaced the 3/5-character case-insensitive compare used by\nparse_infnan with SWAR helpers (fastfloat_strncasecmp3/5 plus a generic\nmemcpy-based fastfloat_strncasecmp). That code only runs for \"nan\",\n\"inf\" and \"infinity\" inputs, so it cannot help ordinary parsing, but it\ngrew the inlined inf/nan tail of the parser: on x86-64 (GCC 14 and\nclang 21) the per-commit benchmarks dropped by 1.5-2.5% because the\nextra dead code changed inlining decisions and register allocation on\nthe hot path (+7 instructions/float on canada.txt).\n\nGo back to the plain loop, which the compiler unrolls for the constant\nlengths 3 and 5, and drop the now-unused generic SWAR function. The\n`actual \u003c 256` guard of the original is unnecessary: OR-ing 0x20 into\na value can only equal an ASCII lowercase letter when the value is that\nletter or its uppercase form, so the plain OR is exact for every\ncharacter type.\n"
    },
    {
      "commit": "63735928992cf5ef0cfc2e10a8f73dc3188d3df8",
      "tree": "3a3d605a6ffb0efc0a11838ad754c6f5ff98056d",
      "parents": [
        "b0ab987b3dfdde13fa1915f65ef2a5c068d9208c",
        "b2e41e8b8807cf200e54a1a8613515a52501c008"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Sep 21 23:01:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 23:01:45 2026"
      },
      "message": "Merge pull request #410 from Algunenano/javascript-fmt-hot-path\n\nKeep chars_format::javascript out of the common hot path"
    },
    {
      "commit": "b2e41e8b8807cf200e54a1a8613515a52501c008",
      "tree": "3a3d605a6ffb0efc0a11838ad754c6f5ff98056d",
      "parents": [
        "b0ab987b3dfdde13fa1915f65ef2a5c068d9208c"
      ],
      "author": {
        "name": "Raúl Marín",
        "email": "raul.marin@clickhouse.com",
        "time": "Mon Sep 21 19:45:12 2026"
      },
      "committer": {
        "name": "Raúl Marín",
        "email": "raul.marin@clickhouse.com",
        "time": "Mon Sep 21 19:47:21 2026"
      },
      "message": "Keep chars_format::javascript out of the common hot path\n\n8.3.0 added the ECMAScript leading-zero rule as a runtime test on fmt inside\nparse_number_string, so unlike basic_json_fmt its error returns and Annex B\noctal scan land in the parser body that every from_chars instantiation\nforce-inlines. from_chars_caller\u003cdouble\u003e::call grew from 935 to 1031\ninstructions and other formats lost about 3% on short inputs.\n\nMake the rule a compile-time parameter of the parser body, selected once at the\nentry point, and take chars_format::javascript out to a cold conversion before\nanything else is live so the branch is a tail call. parse_number_string keeps\nits signature and behaviour.\n\nbenchmarks/benchmark.cpp, Intel Xeon 6975P-C, clang 22.1.8, cycles per float,\nbest of 7:\n\n              canada.txt    mesh.txt\n  8.2.10         47.03        24.78\n  8.3.0          47.34        26.08\n  this           46.28        24.86\n"
    },
    {
      "commit": "b0ab987b3dfdde13fa1915f65ef2a5c068d9208c",
      "tree": "1ee625bf004cd1be57ae3642b80da6f069394000",
      "parents": [
        "3254622f741c933fef671c5437d3fdf7f7d5929d"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Sep 15 15:03:18 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Sep 15 15:03:18 2026"
      },
      "message": "Version 8.3.0\n"
    },
    {
      "commit": "3254622f741c933fef671c5437d3fdf7f7d5929d",
      "tree": "d09a6d7c3d1d9bf05ae9c2578e40b1274c0d3df1",
      "parents": [
        "e0e355c073c7be60ee3bc85f2f30e884beeaa0fe"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Sep 15 14:52:49 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Sep 15 14:52:49 2026"
      },
      "message": "Add chars_format::javascript_sloppy (Annex B NonOctalDecimalIntegerLiteral)\n\nchars_format::javascript follows the strict-mode grammar, which rejects\nany leading zero. In sloppy mode, JavaScript also accepts a leading zero\nwhen one of the digits is 8 or 9 (\"08.5\" is 8.5, Annex B\u0027s\nNonOctalDecimalIntegerLiteral). A leading zero followed only by octal\ndigits is a LegacyOctalIntegerLiteral (\"0775\"), which is not a decimal\nnumber: it is rejected with the new parse_error::legacy_octal_integer_part\nso the caller can parse it in base 8.\n\njavascript_sloppy sets one extra bit on top of javascript, and the check\nlives inside the existing runtime JavaScript branch of\nparse_number_string\u003cfalse\u003e, so the general path is unchanged. An\ninterleaved A/B with realbenchmark on canada.txt and mesh.txt (ASCII and\nUTF-16, 32/64-bit) shows identical instructions per float and cycles\nwithin noise.\n\nDocument both formats in the README.\n"
    },
    {
      "commit": "e0e355c073c7be60ee3bc85f2f30e884beeaa0fe",
      "tree": "3be6d7a92da9f482916b76869598fa02c97ab85f",
      "parents": [
        "a8a02f77480d10c5dc90d39f7b890bc1dff9c1b9",
        "4fcb7e324938caa4a6d2fd90cd34f8c8b33110a3"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Sep 15 14:44:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 14:44:07 2026"
      },
      "message": "Merge pull request #407 from fastfloat/javascript-format\n\nAdd chars_format::javascript (ECMAScript DecimalLiteral)"
    },
    {
      "commit": "20a9b353334299916793aa8215607bcaffaf5e1a",
      "tree": "06f0d5d9f62239e3e640fd4fda81cb06b044bcf8",
      "parents": [
        "abb4c8659ada30b232abcb8a90b756e783ee3220"
      ],
      "author": {
        "name": "jadidbourbaki",
        "email": "tprod4242@gmail.com",
        "time": "Tue Sep 15 13:11:27 2026"
      },
      "committer": {
        "name": "jadidbourbaki",
        "email": "tprod4242@gmail.com",
        "time": "Tue Sep 15 13:11:27 2026"
      },
      "message": "Gate the subnormal tie test on a compile-time predicate\n"
    },
    {
      "commit": "27b2a9dd0644792c1e2db4d24214396a40788073",
      "tree": "05b6c03d58fce212f9db42f35bfad9ecb0edc210",
      "parents": [
        "a8a02f77480d10c5dc90d39f7b890bc1dff9c1b9"
      ],
      "author": {
        "name": "Caolán McNamara",
        "email": "caolan.mcnamara@collabora.com",
        "time": "Tue Sep 15 08:46:09 2026"
      },
      "committer": {
        "name": "Caolán McNamara",
        "email": "caolan.mcnamara@collabora.com",
        "time": "Tue Sep 15 08:50:00 2026"
      },
      "message": "drop the unreachable tail of parse_mantissa\n\ncounter is always zero when the loops end, so the final\nadd_native never runs\n\nseen in Coverity as cid#488376 DEADCODE dead_error_line\n"
    },
    {
      "commit": "abb4c8659ada30b232abcb8a90b756e783ee3220",
      "tree": "83fc8dd24918e6732c442c1db971802a2f5c6a02",
      "parents": [
        "a8a02f77480d10c5dc90d39f7b890bc1dff9c1b9"
      ],
      "author": {
        "name": "jadidbourbaki",
        "email": "tprod4242@gmail.com",
        "time": "Tue Sep 15 02:15:45 2026"
      },
      "committer": {
        "name": "jadidbourbaki",
        "email": "tprod4242@gmail.com",
        "time": "Tue Sep 15 02:15:45 2026"
      },
      "message": "Fix std::float16_t rounding of subnormal ties and fast-path overflow\n"
    },
    {
      "commit": "4fcb7e324938caa4a6d2fd90cd34f8c8b33110a3",
      "tree": "3be6d7a92da9f482916b76869598fa02c97ab85f",
      "parents": [
        "f837a7805719b37a2b5b5db9e81ee49553057ff3"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Sep 15 00:46:52 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Sep 15 00:46:52 2026"
      },
      "message": "Fix clang-format 17 on FASTFLOAT_ASSERT macros\n"
    },
    {
      "commit": "f837a7805719b37a2b5b5db9e81ee49553057ff3",
      "tree": "5efe868db78474da483eca875ae35cf95009e35b",
      "parents": [
        "a8a02f77480d10c5dc90d39f7b890bc1dff9c1b9"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Sep 14 23:36:49 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Sep 14 23:36:49 2026"
      },
      "message": "Add chars_format::javascript (ECMAScript DecimalLiteral)\n\nThe JSON format rejects leading zeros, which JavaScript also rejects,\nbut it further requires digits on both sides of the decimal point,\nwhich JavaScript does not: \".5\", \"5.\" and \"5.e3\" are all valid\nDecimalLiteral productions. Users lexing JavaScript therefore could not\nuse chars_format::json and had to re-check the integer span themselves\nafter a general-mode parse.\n\nchars_format::javascript is general mode plus the leading-zero rule\n(reported as leading_zeros_in_integer_part), with no_infnan. It is a\nruntime check on the format, like fortran, so it reuses the existing\nparse_number_string\u003cfalse\u003e instantiation. A leading minus sign is\naccepted, and a leading plus sign with allow_leading_plus.\n\nClaude-Session: https://claude.ai/code/session_01KbAWRBpE3MPy5cXECc5vWZ\n"
    },
    {
      "commit": "a8a02f77480d10c5dc90d39f7b890bc1dff9c1b9",
      "tree": "1b4ebcc8913a643c54c95867b0c4533ba2bba645",
      "parents": [
        "13ecd70727edbccda961e15c06acba5767b841f2",
        "12e310aa8f5a2a296a1d172e34aa30aadfaf2996"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Thu Aug 20 18:00:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 18:00:30 2026"
      },
      "message": "Merge pull request #405 from fastfloat/old-style-cast\n\nAvoid old-style casts"
    },
    {
      "commit": "12e310aa8f5a2a296a1d172e34aa30aadfaf2996",
      "tree": "1b4ebcc8913a643c54c95867b0c4533ba2bba645",
      "parents": [
        "13ecd70727edbccda961e15c06acba5767b841f2"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Thu Aug 20 17:30:32 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Thu Aug 20 17:30:32 2026"
      },
      "message": "Avoid old-style casts\n\nReplace C-style casts with static_cast/const_cast so -Wold-style-cast\nis clean, and enable that warning in the Unix test builds and the\namalgamated-header CI job.\n"
    },
    {
      "commit": "13ecd70727edbccda961e15c06acba5767b841f2",
      "tree": "d4b76981b98a8726020814b66518890ec83096f7",
      "parents": [
        "a1f63a883d2a3dd1878ff9aca969b1edbf755fa3",
        "c335514c6e98e952b9b33fa357fee878a0b0be54"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Aug 17 18:13:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 18:13:58 2026"
      },
      "message": "Merge pull request #399 from dg0yt/max\n\nFix compatibility with min()/max() macros"
    },
    {
      "commit": "a1f63a883d2a3dd1878ff9aca969b1edbf755fa3",
      "tree": "c4ba15c5838d1c327496931ba1de2ac1d7d6a231",
      "parents": [
        "f6df0f29174054bb1ed06a9945416c8946a01292",
        "37fb7d73da811ea64cf288315decfb03ce2c12c3"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sat Aug 08 19:48:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 08 19:48:33 2026"
      },
      "message": "Merge pull request #404 from latent-9/docs/fix-strtod-typo\n\ndocs: fix strtod function name in README"
    },
    {
      "commit": "37fb7d73da811ea64cf288315decfb03ce2c12c3",
      "tree": "c4ba15c5838d1c327496931ba1de2ac1d7d6a231",
      "parents": [
        "f6df0f29174054bb1ed06a9945416c8946a01292"
      ],
      "author": {
        "name": "latent-9",
        "email": "296084221+latent-9@users.noreply.github.com",
        "time": "Sat Aug 08 12:06:35 2026"
      },
      "committer": {
        "name": "latent-9",
        "email": "296084221+latent-9@users.noreply.github.com",
        "time": "Sat Aug 08 12:06:35 2026"
      },
      "message": "docs: fix strtod function name in README\n"
    },
    {
      "commit": "c335514c6e98e952b9b33fa357fee878a0b0be54",
      "tree": "3a3b90b02880cccecd249250a5d72e832162a251",
      "parents": [
        "ec239e0e04c1cfea4a029ddd1e538b2feb1f41eb"
      ],
      "author": {
        "name": "Kai Pastor",
        "email": "dg0yt@darc.de",
        "time": "Thu Jul 23 07:58:09 2026"
      },
      "committer": {
        "name": "Kai Pastor",
        "email": "dg0yt@darc.de",
        "time": "Thu Jul 23 07:58:09 2026"
      },
      "message": "Fix compat with min() macro\n"
    },
    {
      "commit": "ec239e0e04c1cfea4a029ddd1e538b2feb1f41eb",
      "tree": "1763f393015a125e9e1ec94288cd7cd8264f2856",
      "parents": [
        "f6df0f29174054bb1ed06a9945416c8946a01292"
      ],
      "author": {
        "name": "Kai Pastor",
        "email": "dg0yt@darc.de",
        "time": "Tue Jul 21 09:26:09 2026"
      },
      "committer": {
        "name": "Kai Pastor",
        "email": "dg0yt@darc.de",
        "time": "Tue Jul 21 09:26:09 2026"
      },
      "message": "Fix compat with max() macro\n"
    },
    {
      "commit": "f6df0f29174054bb1ed06a9945416c8946a01292",
      "tree": "dfddbf23e77167810c9e78ea9cb426a98459fff0",
      "parents": [
        "11c390b4dc9a7f12046572f04695aa97ff1dc85a",
        "46b2fbaabb3debf336d27e57f97e1eb59c7c41fb"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Jul 13 19:13:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 19:13:16 2026"
      },
      "message": "Merge pull request #398 from redis-performance/exp062-063-combo\n\nEnable the 4-digit SWAR follow-up on GCC + skip the rounding-mode probe for long mantissas"
    },
    {
      "commit": "11c390b4dc9a7f12046572f04695aa97ff1dc85a",
      "tree": "037bdb322346e6f8c526be389034272f2d1b76cd",
      "parents": [
        "ce25f0d1956fd03b69cade00903b699bb24121c8",
        "1fa146ed1d0e31d85803b07ca02db19695530adf"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Jul 13 13:09:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 13:09:20 2026"
      },
      "message": "Merge pull request #396 from fastfloat/dependabot/github_actions/github-actions-640176b5ab\n\nBump actions/checkout from 6 to 7 in the github-actions group across 1 directory"
    },
    {
      "commit": "1fa146ed1d0e31d85803b07ca02db19695530adf",
      "tree": "037bdb322346e6f8c526be389034272f2d1b76cd",
      "parents": [
        "ce25f0d1956fd03b69cade00903b699bb24121c8"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 13 00:06:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 00:06:02 2026"
      },
      "message": "Bump actions/checkout in the github-actions group across 1 directory\n\nBumps the github-actions group with 1 update in the / directory: [actions/checkout](https://github.com/actions/checkout).\n\n\nUpdates `actions/checkout` from 6 to 7\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/checkout\n  dependency-version: \u00277\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "ce25f0d1956fd03b69cade00903b699bb24121c8",
      "tree": "d9d3fb65429f370c288e86dca864f87c3ed1c58b",
      "parents": [
        "8ec5d236e2a9bc6b89a191212920c2237144f936"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Fri Jul 10 13:20:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 13:20:48 2026"
      },
      "message": "Remove Stars section from README\n\nRemoved the Stars section and related chart from README."
    },
    {
      "commit": "46b2fbaabb3debf336d27e57f97e1eb59c7c41fb",
      "tree": "12db1b754abe4614c6957268fa3b5bd813a38acc",
      "parents": [
        "5082489e352ce4904da4d2f652760b8781cae561",
        "3ff2c0b8945408f63b381af4f22a6167e52b486d"
      ],
      "author": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Fri Jul 03 13:44:24 2026"
      },
      "committer": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Fri Jul 03 13:44:24 2026"
      },
      "message": "Reconcile redis-perf/optim: content superseded by upstream #381/#382/#387\n\nEXP-050/052/053 were upstreamed in final form via #381 (integer-scan unroll)\nand #382 (4-digit follow-up, clang-gated); the #387 span-elision restructure\nthen rewrote the surrounding code. This merge carries the old branch history\nwhile the tree \u003d upstream/main (8.2.7) + EXP-062 (ungate 4-digit SWAR on gcc)\n+ EXP-063 (mantissa bound before rounds_to_nearest probe).\n\nNOTE: EXP-052\u0027s 2x unroll of loop_parse_if_eight_digits was never upstreamed\nand is dropped here pending post-#387 revalidation (see EXPERIMENTS.md).\n"
    },
    {
      "commit": "5082489e352ce4904da4d2f652760b8781cae561",
      "tree": "12db1b754abe4614c6957268fa3b5bd813a38acc",
      "parents": [
        "f4f36e04f7c7546086624f3995b26ea81bcaf675"
      ],
      "author": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Fri Jul 03 13:15:29 2026"
      },
      "committer": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Fri Jul 03 13:34:47 2026"
      },
      "message": "EXP-063: test the mode-independent mantissa bound before the rounds_to_nearest probe\n"
    },
    {
      "commit": "f4f36e04f7c7546086624f3995b26ea81bcaf675",
      "tree": "c74d19060509008b7038695c93737c034f3004ef",
      "parents": [
        "e0b53eaf63c6d00e0725788ef1dbb759aa321d79"
      ],
      "author": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Fri Jul 03 13:13:44 2026"
      },
      "committer": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Fri Jul 03 13:34:47 2026"
      },
      "message": "EXP-062: enable the 4-digit SWAR fraction follow-up on all compilers (drop __clang__ gate)\n"
    },
    {
      "commit": "8ec5d236e2a9bc6b89a191212920c2237144f936",
      "tree": "91f16df6637aa9e9164bfaa051f85bfe901b53cf",
      "parents": [
        "34164f547b7df3f5d794ff67e9f885c36819ebfc",
        "c539b5399cb382f5604de21b950949311ffc6faf"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Thu Jun 18 20:33:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 18 20:33:25 2026"
      },
      "message": "Merge pull request #395 from sahvx655-wq/is-space-signed-compare\n\nguard is_space against negative signed code units"
    },
    {
      "commit": "c539b5399cb382f5604de21b950949311ffc6faf",
      "tree": "91f16df6637aa9e9164bfaa051f85bfe901b53cf",
      "parents": [
        "34164f547b7df3f5d794ff67e9f885c36819ebfc"
      ],
      "author": {
        "name": "sahvx655-wq",
        "email": "sahvx655@gmail.com",
        "time": "Thu Jun 18 14:21:56 2026"
      },
      "committer": {
        "name": "sahvx655-wq",
        "email": "sahvx655@gmail.com",
        "time": "Thu Jun 18 14:21:56 2026"
      },
      "message": "guard is_space against negative signed code units\n"
    },
    {
      "commit": "34164f547b7df3f5d794ff67e9f885c36819ebfc",
      "tree": "7be0e666e0f643d2ff82fc4b754dcbbc4673d157",
      "parents": [
        "4eec7bec38679967c37d7555191564c5429bcf4f"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Jun 14 13:52:47 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Jun 14 13:52:47 2026"
      },
      "message": "8.2.10\n"
    },
    {
      "commit": "4eec7bec38679967c37d7555191564c5429bcf4f",
      "tree": "40ea2062235ec86472eb14372137c12637acb636",
      "parents": [
        "8234a896236a6c98ee66cf214b31ca15e24579ca",
        "fd970ab05ed79f9a8322f568cd245fac241c4f70"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Jun 14 13:52:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 14 13:52:09 2026"
      },
      "message": "Merge pull request #394 from fastfloat/int-overflow-simdjson-approach\n\nInt overflow check with a faster approach"
    },
    {
      "commit": "fd970ab05ed79f9a8322f568cd245fac241c4f70",
      "tree": "40ea2062235ec86472eb14372137c12637acb636",
      "parents": [
        "a7249f86ededbe739dcb29f13b31144130ceaba7"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Jun 14 01:41:53 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Jun 14 01:41:53 2026"
      },
      "message": "updating visual studio\n"
    },
    {
      "commit": "a7249f86ededbe739dcb29f13b31144130ceaba7",
      "tree": "5ac14eace5883602b8008ed5a19090624c4bed59",
      "parents": [
        "632cc97b5b45e6a13bbcdaf715fcff6fac289df6"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Jun 14 01:22:10 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Jun 14 01:34:34 2026"
      },
      "message": "replace checked re-parse with O(1) simdjson-style overflow check\n\nThe previous commit detects multi-wrap u64 overflow at the max_digits\nboundary by re-parsing the digits through a checked multiply-add loop\n(O(max_digits)). Replace that with the constant-time check used in\nsimdjson: the leading digit plus a single threshold comparison.\n\nFor a max_digits-length value, min_safe_u64(base) \u003d\u003d base^(max_digits-1)\nis the smallest such value and also the width of each leading-digit band\n[d*ms, (d+1)*ms). Since that width is \u003c 2^64, the only band that can\nstraddle 2^64 is d \u003d\u003d dmax (the largest leading digit that still fits),\nand there it straddles at most once, so a single threshold dmax*ms\nseparates wrapped from non-wrapped values. A leading digit above dmax\nalways overflows; below dmax always fits. dmax and the threshold derive\nfrom the existing min_safe_u64 table, so no new tables are needed and\ndmax*ms cannot itself overflow.\n\nAdd a programmatic, self-verifying test for parse_int_string overflow\ndetection covering bases 2..36, complementing the hand-picked strings\nadded earlier. Every generated input is cross-checked against an\nindependent trusted oracle (a plain 64-bit checked multiply-add); on\nsuccess the parsed value is also compared exactly and full consumption\nof the input is asserted.\n\nPer base it exercises:\n  - an exact-boundary sweep of the 64 values straddling 2^64\n    (UINT64_MAX-31 .. 2^64+31), built by walking the digit string;\n  - UINT64_MAX, 2^64 and the all-max-digit value, each also with\n    leading zeros;\n  - random max_digits-length values across every leading digit, with\n    the heaviest sampling on the lead \u003d\u003d dmax band that straddles 2^64,\n    and full coverage of lead \u003e dmax (the multi-wrap region the naive\n    min_safe check accepted by mistake);\n  - max_digits-1 (never overflows) and max_digits+1 (always overflows).\nA small signed (int64_t) section checks the exact INT64_MIN/INT64_MAX\nlimits round-trip and that INT64_MAX+1 / INT64_MIN-1 are rejected in\nevery base.\n"
    },
    {
      "commit": "632cc97b5b45e6a13bbcdaf715fcff6fac289df6",
      "tree": "3b07328fb29b82a0454b22b7ba5a3bd356bed02f",
      "parents": [
        "8234a896236a6c98ee66cf214b31ca15e24579ca"
      ],
      "author": {
        "name": "sahvx655-wq",
        "email": "sahvx655@gmail.com",
        "time": "Sat Jun 13 15:50:45 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Jun 14 01:21:29 2026"
      },
      "message": "detect uint64 overflow that wraps past min_safe in parse_int_string\n"
    },
    {
      "commit": "8234a896236a6c98ee66cf214b31ca15e24579ca",
      "tree": "70458a68f87e37f8904f1d0f25d72042c721aca6",
      "parents": [
        "0dce102cb48541c424537ecbe429d5fb54c8e491"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Fri Jun 12 00:29:24 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Fri Jun 12 00:29:24 2026"
      },
      "message": "8.2.9\n"
    },
    {
      "commit": "0dce102cb48541c424537ecbe429d5fb54c8e491",
      "tree": "8680bef69fc2024c1970f5e181fa14c8204bbc58",
      "parents": [
        "30868f8734947deeb80cf508c290eae24f3cf261",
        "82882b237d0af7c5dfd940b9eeeac2c2c351dc66"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Fri Jun 12 00:28:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 00:28:10 2026"
      },
      "message": "Merge pull request #391 from sahvx655-wq/int-fast-path-wide-units\n\nreject non-digit wide code units in uint8/uint16 integer fast path"
    },
    {
      "commit": "30868f8734947deeb80cf508c290eae24f3cf261",
      "tree": "3b6dfdcd500ed343c0de742480fdc03e28b1fb0b",
      "parents": [
        "937198691a52ffd6a6fefda489a77133e0e4754f",
        "8e6edc8ad262ecb83e3b56323bca49c86b9e5c8b"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Thu Jun 11 13:37:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 11 13:37:38 2026"
      },
      "message": "Merge pull request #392 from biojppm/fix/gcc9_compile_error\n\nFix compile error with gcc 9: use of [[unlikely]]"
    },
    {
      "commit": "8e6edc8ad262ecb83e3b56323bca49c86b9e5c8b",
      "tree": "a7264cff7ca5d926c2836e7013fe3458c74f78be",
      "parents": [
        "e8ec8e8f34bd6142efdbf4c714734dcff51ea9ac"
      ],
      "author": {
        "name": "Joao Paulo Magalhaes",
        "email": "dev@jpmag.me",
        "time": "Wed Jun 10 12:20:58 2026"
      },
      "committer": {
        "name": "Joao Paulo Magalhaes",
        "email": "dev@jpmag.me",
        "time": "Wed Jun 10 14:37:26 2026"
      },
      "message": "Fix compile error with gcc 9: use of [[unlikely]]\n"
    },
    {
      "commit": "82882b237d0af7c5dfd940b9eeeac2c2c351dc66",
      "tree": "f6ec9815a4144037454e44c96a7235353dde8d60",
      "parents": [
        "937198691a52ffd6a6fefda489a77133e0e4754f"
      ],
      "author": {
        "name": "sahvx655-wq",
        "email": "sahvx655@gmail.com",
        "time": "Wed Jun 10 06:42:34 2026"
      },
      "committer": {
        "name": "sahvx655-wq",
        "email": "sahvx655@gmail.com",
        "time": "Wed Jun 10 06:42:34 2026"
      },
      "message": "gate uint8/uint16 base-10 fast paths to single-byte code units\n"
    },
    {
      "commit": "937198691a52ffd6a6fefda489a77133e0e4754f",
      "tree": "daa8b0b7a74c4a58fc5d142439001830436b4b47",
      "parents": [
        "0352ba3fefac9d8b6823d1628b069e5446a73c96",
        "8fe7a9405b9bfd4bc87e6439ca67ef932d97fca7"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Jun 09 15:18:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 15:18:15 2026"
      },
      "message": "Merge pull request #389 from correctmost/cm/remove-unreachable-return\n\nRemove an unreachable return statement"
    },
    {
      "commit": "0352ba3fefac9d8b6823d1628b069e5446a73c96",
      "tree": "061089ed6909b3f4f98a090ca257bc9df6a62b1b",
      "parents": [
        "e8ec8e8f34bd6142efdbf4c714734dcff51ea9ac",
        "6ae691372fd9cc270f07375a38125ffd2afefa57"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Jun 09 15:17:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 15:17:35 2026"
      },
      "message": "Merge pull request #390 from correctmost/cm/remove-unreachable-block\n\nRemove an else if statement that is always false"
    },
    {
      "commit": "6ae691372fd9cc270f07375a38125ffd2afefa57",
      "tree": "061089ed6909b3f4f98a090ca257bc9df6a62b1b",
      "parents": [
        "e8ec8e8f34bd6142efdbf4c714734dcff51ea9ac"
      ],
      "author": {
        "name": "correctmost",
        "email": "134317971+correctmost@users.noreply.github.com",
        "time": "Tue Jun 09 07:48:54 2026"
      },
      "committer": {
        "name": "correctmost",
        "email": "134317971+correctmost@users.noreply.github.com",
        "time": "Tue Jun 09 07:48:54 2026"
      },
      "message": "Remove an else if statement that is always false\n\nCommit b334317d added the same std::isnan(v) check as an earlier\ncondition.\n\nThe warning was reported by cppcheck.\n"
    },
    {
      "commit": "8fe7a9405b9bfd4bc87e6439ca67ef932d97fca7",
      "tree": "8a27cd0012e17f8d5563302bcfd0c5ff60320ed6",
      "parents": [
        "e8ec8e8f34bd6142efdbf4c714734dcff51ea9ac"
      ],
      "author": {
        "name": "correctmost",
        "email": "134317971+correctmost@users.noreply.github.com",
        "time": "Tue Jun 09 07:37:58 2026"
      },
      "committer": {
        "name": "correctmost",
        "email": "134317971+correctmost@users.noreply.github.com",
        "time": "Tue Jun 09 07:37:58 2026"
      },
      "message": "Remove an unreachable return statement\n\nThe redundant statement was reported by cppcheck.\n"
    },
    {
      "commit": "e8ec8e8f34bd6142efdbf4c714734dcff51ea9ac",
      "tree": "9288ddca13b14ba85c579efaaaff1233783ef9b0",
      "parents": [
        "c05156ff60525628d454b0c5f3e598db24be5ef6"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Jun 08 19:29:36 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Jun 08 19:29:36 2026"
      },
      "message": "8.2.8\n"
    },
    {
      "commit": "c05156ff60525628d454b0c5f3e598db24be5ef6",
      "tree": "04e26f7ab40b2b9ea90ef79fb288695fb91be3b7",
      "parents": [
        "e0b53eaf63c6d00e0725788ef1dbb759aa321d79",
        "23e245f2b3e9ec5bf5a4ccaced2e463a28b77534"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Jun 08 19:28:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 19:28:45 2026"
      },
      "message": "Merge pull request #388 from biojppm/fix/clang_compile_error\n\nFix compile error in clang\u003c10: fails on pragma -Wc++20-extensions"
    },
    {
      "commit": "23e245f2b3e9ec5bf5a4ccaced2e463a28b77534",
      "tree": "04e26f7ab40b2b9ea90ef79fb288695fb91be3b7",
      "parents": [
        "e0b53eaf63c6d00e0725788ef1dbb759aa321d79"
      ],
      "author": {
        "name": "Joao Paulo Magalhaes",
        "email": "dev@jpmag.me",
        "time": "Mon Jun 08 11:24:39 2026"
      },
      "committer": {
        "name": "Joao Paulo Magalhaes",
        "email": "dev@jpmag.me",
        "time": "Mon Jun 08 11:39:48 2026"
      },
      "message": "Fix compile error in clang\u003c10: fails on pragma -Wc++20-extensions\n\nThis fixes a compile error in all clang versions lower than 10,\ntriggered by the use of the pragma ignore with what is an unknown\nwarning on those compiler versions:\n\n```\n/__w/ext/fast_float/include/fast_float/parse_number.h:361:34: error: unknown warning group \u0027-Wc++20-extensions\u0027, ignored [-Werror,-Wunknown-pragmas]\n```\n\nThe fix requires looking at __clang_major__, which is unfortunately\ndifferent in Apple, so a version dispatch is required.\n"
    },
    {
      "commit": "e0b53eaf63c6d00e0725788ef1dbb759aa321d79",
      "tree": "ba9864098c8539839476cb8adb7823970be90e62",
      "parents": [
        "3044c9b1828f5012dcefb9fb41b03be53bb7c697"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Jun 07 18:14:42 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Jun 07 18:14:42 2026"
      },
      "message": "8.2.7\n"
    },
    {
      "commit": "3044c9b1828f5012dcefb9fb41b03be53bb7c697",
      "tree": "9294a9d3bc52ee2b4808be13169712ace25dd7ec",
      "parents": [
        "6258cbc5a1a1ed0aba08330f16ce4dab14935872",
        "29bd11571b0e83c411545b612c3e9eb7c0c7de5e"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Jun 07 18:12:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 07 18:12:38 2026"
      },
      "message": "Merge pull request #387 from fastfloat/pr386\n\nUsing unlikely markers for PR386"
    },
    {
      "commit": "29bd11571b0e83c411545b612c3e9eb7c0c7de5e",
      "tree": "9294a9d3bc52ee2b4808be13169712ace25dd7ec",
      "parents": [
        "b1fbfe932a3bb3626ecc70b923ce82833d706d3f"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Jun 07 15:19:47 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Jun 07 15:19:47 2026"
      },
      "message": "one too many\n"
    },
    {
      "commit": "b1fbfe932a3bb3626ecc70b923ce82833d706d3f",
      "tree": "04abc1400f25166082d7e52a5c57759d1af2436b",
      "parents": [
        "520fded4a398152c854100556614086ad196e35f"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Jun 07 15:18:09 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sun Jun 07 15:18:09 2026"
      },
      "message": "silencing -Wc++20-extensions at the point of use solely\n"
    },
    {
      "commit": "520fded4a398152c854100556614086ad196e35f",
      "tree": "be59c66d11a93bc66505d5e91545be017bc4c7a3",
      "parents": [
        "b72e07132c1a36adf4c4c29665931e322ab704ae"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sat Jun 06 17:13:49 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sat Jun 06 17:13:49 2026"
      },
      "message": "adressing comments by @jwakely\n"
    },
    {
      "commit": "b72e07132c1a36adf4c4c29665931e322ab704ae",
      "tree": "fba02925bc755e8082e06f4ff9a9dce534bb6394",
      "parents": [
        "3067491f410334883f3c82ccc9eda957714bc7a8"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sat Jun 06 02:01:27 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Sat Jun 06 02:01:27 2026"
      },
      "message": "let us using \u0027unlikely\u0027 hints.\n"
    },
    {
      "commit": "3067491f410334883f3c82ccc9eda957714bc7a8",
      "tree": "44ff33b51a704e235daac6446c62eaa0673e4aa9",
      "parents": [
        "cb5d9cd9a4d46a114e89181d925a6940c784b31d"
      ],
      "author": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Wed Jun 03 08:35:26 2026"
      },
      "committer": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Wed Jun 03 08:35:26 2026"
      },
      "message": "clang-format (clang-format-17 comment reflow + signature wrap; no semantic change)\n"
    },
    {
      "commit": "cb5d9cd9a4d46a114e89181d925a6940c784b31d",
      "tree": "365d564b545c3eece402a1fef1c88900ade992c8",
      "parents": [
        "6258cbc5a1a1ed0aba08330f16ce4dab14935872"
      ],
      "author": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Wed Jun 03 08:30:42 2026"
      },
      "committer": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Wed Jun 03 08:30:42 2026"
      },
      "message": "Skip materializing the integer/fraction spans on the hot path\n\nparsed_number_string_t carries two span\u003cUC const\u003e members (integer, fraction)\nthat are only read on the rare slow paths (digit_comp, and the \u003e19-significant-\ndigit truncation recompute). Materializing them on every parse forces the ~56/64-\nbyte struct to be written out and marshaled through the by-value return, which\nshows up as backend/store pressure on the hot path.\n\nThis adds a runtime `store_spans` flag (default true, so all existing callers are\nunchanged) to parse_number_string; from_chars_float_advanced parses with it false,\nattempts the Clinger and Eisel-Lemire fast paths inline, and only re-parses with\nspans on the two rare slow branches. The re-parse is pushed into a single\n`fastfloat_noinline` (noinline+cold) helper so the force-inlined hot scanner is\nemitted once rather than duplicated into the caller (without this the extra inline\ncopies regress some targets, e.g. ARM gcc, by bloating the hot frame and lengthening\nthe loop-carried dependency chain).\n\nA runtime flag is used deliberately rather than a template parameter: a template\nwould create a second instantiation of the whole scanner whose icache cost wipes\nout the gain.\n\nMeasured (per-parser microbench, median of 5, pinned core), fast_float from_chars\n\u003cdouble\u003e/\u003cfloat\u003e, vs the current tip:\n  - Intel Ice Lake (Xeon 8360Y): +17-19% (gcc), Intel TMA shows backend-bound\n    26.0% -\u003e 2.2% and retiring 60.3% -\u003e 77.3% on short floats (the eliminated span\n    spill), with -36% pipeline slots.\n  - Intel Cascade Lake (Xeon 6248): +18-22% (gcc), +13-23% (clang).\n  - ARM Neoverse-V2 (Graviton4): +73-196% (gcc), +8-11% (clang) -- the struct spill\n    dominated the gcc hot loop there.\nCorrectness: the full float exhaustive suite (exhaustive32, exhaustive32_64,\nexhaustive32_midpoint, random64) passes, and a 2^32 sweep is byte-identical to the\ncurrent tip. Public from_chars / from_chars_advanced / parsed_number_string_t are\nunchanged.\n"
    },
    {
      "commit": "6258cbc5a1a1ed0aba08330f16ce4dab14935872",
      "tree": "7adef247ec99c792755a8fb5cc9101caf1075616",
      "parents": [
        "254f10ce39b804154bb04f7c6599789f7fac23ef",
        "b3ec8d89cf8e26fbdd70b1a452a41c2da9519a58"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Jun 02 18:02:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 18:02:10 2026"
      },
      "message": "Merge pull request #380 from fastfloat/dependabot/github_actions/github-actions-0eb558eb98\n\nBump the github-actions group across 1 directory with 3 updates"
    },
    {
      "commit": "254f10ce39b804154bb04f7c6599789f7fac23ef",
      "tree": "9fcb1b77711b9646d8a38090c91d8bed93d76775",
      "parents": [
        "f0ed8cdf52c179e1068b953ad74dfbde1f2de8cb",
        "1b11407da9d5b987a37c09dfa75ebcc90cf6f7aa"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Tue Jun 02 18:01:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 18:01:41 2026"
      },
      "message": "Merge pull request #385 from jwakely/patch-2\n\nFix spelling"
    },
    {
      "commit": "1b11407da9d5b987a37c09dfa75ebcc90cf6f7aa",
      "tree": "9fcb1b77711b9646d8a38090c91d8bed93d76775",
      "parents": [
        "f0ed8cdf52c179e1068b953ad74dfbde1f2de8cb"
      ],
      "author": {
        "name": "Jonathan Wakely",
        "email": "jwakely@redhat.com",
        "time": "Tue Jun 02 14:10:14 2026"
      },
      "committer": {
        "name": "Jonathan Wakely",
        "email": "jwakely@redhat.com",
        "time": "Tue Jun 02 14:30:37 2026"
      },
      "message": "Fix spelling\n\nRun clang-format to reformat the long lines.\n"
    },
    {
      "commit": "f0ed8cdf52c179e1068b953ad74dfbde1f2de8cb",
      "tree": "8a5b6d4a7029685fd6d81ef39fe9b73064eb5c61",
      "parents": [
        "cfd12ebcf1f82c4fd44a950b1815dd0549bc8d89"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Jun 01 22:28:09 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Jun 01 22:28:09 2026"
      },
      "message": "display the latest version.\n"
    },
    {
      "commit": "cfd12ebcf1f82c4fd44a950b1815dd0549bc8d89",
      "tree": "d76fff3258f7e08638b0369c5c87069e5a99d3da",
      "parents": [
        "06f3e274116e250484f4d7cdd442ff588f7ea3a7"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Jun 01 22:07:41 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Jun 01 22:07:41 2026"
      },
      "message": "8.2.6\n"
    },
    {
      "commit": "06f3e274116e250484f4d7cdd442ff588f7ea3a7",
      "tree": "7db563ab6089dbf08abbab41c6e1fb7a694ba141",
      "parents": [
        "ed861322d85f6b3136d44a253b9daccfcd3bca7a",
        "b642d9202f88d151e7ff63abd124f802bc652253"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Jun 01 22:07:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 01 22:07:01 2026"
      },
      "message": "Merge pull request #383 from redis-performance/pr/parallel-exhaustive\n\nParallelize the exhaustive float32 sweeps across hardware threads (~75-88x)"
    },
    {
      "commit": "b642d9202f88d151e7ff63abd124f802bc652253",
      "tree": "81aa6c73f3a9a58b9df445837f263cbc7a53e525",
      "parents": [
        "b20c4209648f98950812d4eaf35d9daf672bc63e"
      ],
      "author": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Mon Jun 01 20:09:46 2026"
      },
      "committer": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Mon Jun 01 20:09:46 2026"
      },
      "message": "tests: parallelize exhaustive32 and exhaustive32_64 sweeps too\n\nSame std::thread split as exhaustive32_midpoint; preserves each test\u0027s existing\nfailure behavior (abort for exhaustive32, stop-flag for exhaustive32_64).\n"
    },
    {
      "commit": "ed861322d85f6b3136d44a253b9daccfcd3bca7a",
      "tree": "adb2acdbd9f1ffbbaa288d749520b59c887c52f3",
      "parents": [
        "0f682cd6ebe7789d0f0a6a92ffd975189d377ce0",
        "7589a4fea569d5bebd2a474136e8ec9e00ce0335"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Jun 01 19:45:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 01 19:45:15 2026"
      },
      "message": "Merge pull request #382 from redis-performance/pr/four-digit-followup\n\nAdd a 4-digit SWAR follow-up to loop_parse_if_eight_digits (clang)"
    },
    {
      "commit": "0f682cd6ebe7789d0f0a6a92ffd975189d377ce0",
      "tree": "cd6ef9a17868d98c72da5eb7668ccde6b2288192",
      "parents": [
        "7790aa6231b8f81bef1f31e48b5ff06f65a14403",
        "b64d014e2f3f83fc8a930a9c420243b2e85bec57"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Mon Jun 01 17:44:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 01 17:44:06 2026"
      },
      "message": "Merge pull request #381 from redis-performance/pr/integer-scan-unroll\n\nUnroll the integer-part digit scan (straight-line for the common 1-5 digit case)"
    },
    {
      "commit": "b20c4209648f98950812d4eaf35d9daf672bc63e",
      "tree": "f6a8b7381f9590893e043edb8c53f9cb2cca3bbf",
      "parents": [
        "7790aa6231b8f81bef1f31e48b5ff06f65a14403"
      ],
      "author": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Mon Jun 01 12:01:10 2026"
      },
      "committer": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Mon Jun 01 12:01:10 2026"
      },
      "message": "tests: parallelize the exhaustive midpoint sweep across hardware threads\n"
    },
    {
      "commit": "7589a4fea569d5bebd2a474136e8ec9e00ce0335",
      "tree": "472fb78722d5bba1abd27d5db0b4cafdcdfa4a14",
      "parents": [
        "7790aa6231b8f81bef1f31e48b5ff06f65a14403"
      ],
      "author": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Mon Jun 01 09:55:04 2026"
      },
      "committer": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Mon Jun 01 10:55:50 2026"
      },
      "message": "Add a 4-digit SWAR follow-up to loop_parse_if_eight_digits (clang)\n\nAfter the 8-digit SWAR block loop, consume a remaining 4-7 digit run in one\nread4_to_u32 + parse_four_digits_unrolled step instead of byte-by-byte (reusing\nthe existing 4-digit helpers). The parsed result is identical; this is purely a\nfaster way to consume the same digits.\n\nGated to clang: on gcc the extra 4-digit check regresses inputs whose remainder\nis \u003c 4 digits (e.g. the 17-digit fraction of uniform [0,1] -\u003e -3% on \u0027random\u0027),\nbecause the check becomes pure overhead there; clang does not show that.\n\nm8g.metal-24xl (Graviton4), -O3 -march\u003dnative, simple_fastfloat_benchmark,\nfrom_chars-\u003edouble, clang 18, base vs patch back-to-back (2 samples):\n  canada.txt +11.7%, mesh.txt +7.4%, random ~flat. No regression.\n"
    },
    {
      "commit": "b64d014e2f3f83fc8a930a9c420243b2e85bec57",
      "tree": "cd6ef9a17868d98c72da5eb7668ccde6b2288192",
      "parents": [
        "7790aa6231b8f81bef1f31e48b5ff06f65a14403"
      ],
      "author": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Sun May 31 23:48:45 2026"
      },
      "committer": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Mon Jun 01 08:55:08 2026"
      },
      "message": "Unroll the integer-part digit scan (straight-line for the common 1-5 digit case)\n\nparse_number_string scans the integer part one byte at a time in a while loop,\nwhile the fraction already uses the 8-digit SWAR loop. Most integer parts are\n1-5 digits, so the loop back-edge dominates. Peel the first five iterations into\nnested ifs, falling through to the original while for longer runs. Semantics are\nidentical (i \u003d 10*i + digit, advancing p); no behavior change.\n\nAWS m8g.metal-24xl (Graviton4), -O3 -march\u003dnative, simple_fastfloat_benchmark,\nfrom_chars-\u003edouble. base vs patch measured back-to-back, mean of 2 runs:\n  canada: gcc +3.1%, clang +2.8%\n  mesh:   gcc +5.4%, clang +5.1%\n  random: ~flat (1-digit integer part)\nNo regression; gcc and clang agree.\n\nAlternatives benchmarked and rejected: reusing loop_parse_if_eight_digits for the\ninteger part regressed 5-8% (integer parts are too short for 8-digit SWAR setup);\na counted for(k\u003c5) loop matched on gcc but clang optimized it worse (canada -0.9%).\nThe explicit peel is the only form solidly positive on both compilers.\n"
    },
    {
      "commit": "3ff2c0b8945408f63b381af4f22a6167e52b486d",
      "tree": "f7c436e749778eea9043116a260af2edac5af3ae",
      "parents": [
        "a30c1f3d3f42dde8c34478215edbe3ce3234b350"
      ],
      "author": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Mon Jun 01 08:15:26 2026"
      },
      "committer": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Mon Jun 01 08:15:26 2026"
      },
      "message": "EXP-053: clang-format (reflow comment + expression wrap; no semantic change)\n\nPre-clear the lint_and_format_check CI gate. clang-format-18 (CI pins 17; LLVM base\nstyle is identical for these constructs). Behavior/benchmarks unchanged.\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "b3ec8d89cf8e26fbdd70b1a452a41c2da9519a58",
      "tree": "7fd6944eaa6d48dfab3a4d5dd6859fbd2ec54b57",
      "parents": [
        "7790aa6231b8f81bef1f31e48b5ff06f65a14403"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jun 01 00:15:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 01 00:15:05 2026"
      },
      "message": "Bump the github-actions group across 1 directory with 3 updates\n\nBumps the github-actions group with 3 updates in the / directory: [actions/setup-node](https://github.com/actions/setup-node), [mymindstorm/setup-emsdk](https://github.com/mymindstorm/setup-emsdk) and [jidicula/clang-format-action](https://github.com/jidicula/clang-format-action).\n\n\nUpdates `actions/setup-node` from 6.3.0 to 6.4.0\n- [Release notes](https://github.com/actions/setup-node/releases)\n- [Commits](https://github.com/actions/setup-node/compare/53b83947a5a98c8d113130e565377fae1a50d02f...48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e)\n\nUpdates `mymindstorm/setup-emsdk` from 14 to 16\n- [Release notes](https://github.com/mymindstorm/setup-emsdk/releases)\n- [Commits](https://github.com/mymindstorm/setup-emsdk/compare/6ab9eb1bda2574c4ddb79809fc9247783eaf9021...4528d102f7230f0e7b276855c01ea1159be0e984)\n\nUpdates `jidicula/clang-format-action` from 4.17.0 to 4.18.0\n- [Release notes](https://github.com/jidicula/clang-format-action/releases)\n- [Commits](https://github.com/jidicula/clang-format-action/compare/3a18028048f01a66653b4e3bf8d968d2e7e2cb8b...654a770daa28443dd111d133e4083e21c1075674)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-node\n  dependency-version: 6.4.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: github-actions\n- dependency-name: jidicula/clang-format-action\n  dependency-version: 4.18.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: github-actions\n- dependency-name: mymindstorm/setup-emsdk\n  dependency-version: \u002716\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "a30c1f3d3f42dde8c34478215edbe3ce3234b350",
      "tree": "f5fba6ff8c5703c07ec8b6ca69021456bcce63e5",
      "parents": [
        "ee849467021be4fbef05e90913528cb100127bc1"
      ],
      "author": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Mon Jun 01 00:04:30 2026"
      },
      "committer": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Mon Jun 01 00:04:30 2026"
      },
      "message": "EXP-053: 4-digit SWAR follow-up in loop_parse_if_eight_digits, GCC path (ffc EXP-001)\n\nAfter the 8-digit block loop, consume a remaining 4-7 digit run in one SWAR step\n(reusing fast_float\u0027s existing read4_to_u32 / is_made_of_four_digits_fast /\nparse_four_digits_unrolled) instead of byte-by-byte. GCC path only: on Clang the\nfollow-up\u0027s presence bloated the 2x-unroll codegen and regressed random -6.2%.\n\nARM Graviton4 (canonical fast_float MB/s vs EXP-052):\n  GCC:   canada +2.6% (948.1 from 924.0, i/f 248.7-\u003e229.7), random/mesh flat\n  Clang: unchanged (EXP-052 path preserved)\nCorrectness: 14/14 pass.\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "ee849467021be4fbef05e90913528cb100127bc1",
      "tree": "ca0875eba3a6f12178f511e2bcb86967708f3f4f",
      "parents": [
        "8db9edbc1852210d60eaf5b42240e37fa2c1c969"
      ],
      "author": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Sun May 31 23:56:52 2026"
      },
      "committer": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Sun May 31 23:56:52 2026"
      },
      "message": "EXP-052: 2x unroll of char loop_parse_if_eight_digits (ported from ffc EXP-044)\n\nClang/AArch64-gated 16-digit-per-iteration unroll of the fraction SWAR loop;\neliminates the back-edge for typical 17-digit [0,1] mantissas. GCC keeps the\nauto-unrolled simple loop.\n\nARM Graviton4 (canonical fast_float MB/s vs EXP-050):\n  Clang: random +2.8% (1365.7 from 1328.8), mesh +1.7%, canada +0.5%\n  GCC:   unchanged (#else path)\nCorrectness: 14/14 pass.\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "8db9edbc1852210d60eaf5b42240e37fa2c1c969",
      "tree": "f6c1db4ffeca5ddac70a09025dbdc4888348d8d7",
      "parents": [
        "7790aa6231b8f81bef1f31e48b5ff06f65a14403"
      ],
      "author": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Sun May 31 23:48:45 2026"
      },
      "committer": {
        "name": "fcostaoliveira",
        "email": "filipe@redis.com",
        "time": "Sun May 31 23:48:45 2026"
      },
      "message": "EXP-050: straight-line nested-if integer-part scan (ported from ffc EXP-026/028)\n\nPeel the first 5 iterations of the integer-part digit loop into nested ifs,\neliminating the loop back-edge for the common 1-5 digit integer case. Identical\nsemantics (i \u003d 10*i + digit). Biggest win on inputs with multi-digit integer\nparts (mesh 3D coordinates).\n\nARM Graviton4 (canonical MB/s, vs upstream 7790aa6 baseline):\n  GCC:   random +0.05%, canada +4.0%, mesh +34.3% (c/f 55.7-\u003e41.4)\n  Clang: random +4.9%,  canada +2.8%, mesh +5.1%\nCorrectness: 14/14 core+supplemental pass.\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "7790aa6231b8f81bef1f31e48b5ff06f65a14403",
      "tree": "b62cf0ed08582f8a41e988822d72e1e3f9a06d97",
      "parents": [
        "ee866c2b92a9081a1de46a454e3871da8938bfaf"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Wed May 27 17:11:22 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Wed May 27 17:11:22 2026"
      },
      "message": "gh pages\n"
    },
    {
      "commit": "ee866c2b92a9081a1de46a454e3871da8938bfaf",
      "tree": "5deb41e3f8b2cd9d07e1057cf28d4a75dce467b8",
      "parents": [
        "baffc5719774068393253316328138c4668550ca",
        "3644f5137c7876704b70f3287835d6befd8b5841"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Wed May 27 16:43:52 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Wed May 27 16:43:52 2026"
      },
      "message": "Merge branch \u0027main\u0027 of github.com:fastfloat/fast_float\n"
    },
    {
      "commit": "baffc5719774068393253316328138c4668550ca",
      "tree": "b1c150d0219c099e2a659aafd8acab364ade3fdd",
      "parents": [
        "05087a303dad9c98768b33c829d398223a649bc6"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Wed May 27 16:43:38 2026"
      },
      "committer": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Wed May 27 16:43:38 2026"
      },
      "message": "new site\n"
    },
    {
      "commit": "3644f5137c7876704b70f3287835d6befd8b5841",
      "tree": "cd34a0e0212361899ee5209235344d93f538c313",
      "parents": [
        "05087a303dad9c98768b33c829d398223a649bc6"
      ],
      "author": {
        "name": "Daniel Lemire",
        "email": "daniel@lemire.me",
        "time": "Wed May 27 16:13:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 27 16:13:56 2026"
      },
      "message": "Update README.md to remove and modify content\n\nRemoved references to Redis and Valkey, and updated the description of the fast_float library."
    }
  ],
  "next": "05087a303dad9c98768b33c829d398223a649bc6"
}
