)]}'
{
  "commit": "57abc0ee3ff8c58818d664a6a5ae4db2f60ed2ae",
  "tree": "e47e3505e8ba017cd8b7b736babc5cd6459ae301",
  "parents": [
    "342afd0767e56ef35c1e0dc415ba88100ec90599"
  ],
  "author": {
    "name": "Abseil Team",
    "email": "absl-team@google.com",
    "time": "Thu Jul 24 14:03:26 2025 -0700"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Thu Jul 24 14:04:51 2025 -0700"
  },
  "message": "Optimize CRC-32C extension by zeroes\n\nOptimize multiply() (renamed to MultiplyWithExtraX33()) to eliminate\nseveral instructions that were present only to avoid introducing an\nextra factor of x^33 into the multiplication.  It\u0027s actually fine to\nintroduce the extra factor of x^33 as long as it\u0027s canceled out with an\nextra factor of x^-33 in all the kCRC32CPowers[] entries.\n\nTo make this work, the number of bits dropped by ComputeZeroConstant()\nhad to be increased from 2 to at least 3, since 2^(i + 3 +\nkNumDroppedBits) - 33 must be \u003e\u003d 0 for all i including i\u003d0; otherwise\nkCRC32CPowers[0] would need a negative power of x.  However, this is\nfine since it\u0027s more efficient to utilize CRC32_u32() and CRC32_u64()\nfor bits 2 and 3 anyway.  So, increase kNumDroppedBits to 4.\n\nAdd a Python script that generates the updated kCRC32CPowers[].  It\nisn\u0027t wired up to the build system, but rather is just added so that\nkCRC32CPowers[] can be reproduced.\n\nAlso add a test which tests ExtendCrc32cByZeroes() with all the length\nbits, thus testing all the entries of kCRC32CPowers[].\n\nNote that the kCRC32CPowers[] generation script and new test case are\nthings we should have had anyway, regardless of the x^33 optimization.\n\nThis change slightly improves the performance of Extend() for lengths\ngreater than or equal to 2048 bytes, and also the performance of\nExtendByZeroes().  It also slightly reduces the binary code size.\n\nBefore:\n    BM_Calculate/2048                   84.3 ns         84.3 ns      8307735\n    BM_Calculate/10000                   376 ns          375 ns      1865976\n    BM_Calculate/500000                18538 ns        18531 ns        37813\n    BM_ExtendByZeroes/1                 3.55 ns         3.55 ns    197111095\n    BM_ExtendByZeroes/10                3.90 ns         3.89 ns    179773877\n    BM_ExtendByZeroes/100               6.06 ns         6.06 ns    115242160\n    BM_ExtendByZeroes/1000              12.0 ns         12.0 ns     58078004\n    BM_ExtendByZeroes/10000             9.97 ns         9.97 ns     70335772\n    BM_ExtendByZeroes/100000            12.1 ns         12.1 ns     58157829\n    BM_ExtendByZeroes/1000000           14.4 ns         14.4 ns     48527365\n\nAfter:\n    BM_Calculate/2048                   82.8 ns         82.7 ns      8478296\n    BM_Calculate/10000                   375 ns          375 ns      1869663\n    BM_Calculate/500000                18547 ns        18538 ns        37846\n    BM_ExtendByZeroes/1                 2.96 ns         2.96 ns    236772500\n    BM_ExtendByZeroes/10                3.85 ns         3.85 ns    182059238\n    BM_ExtendByZeroes/100               5.42 ns         5.42 ns    129077546\n    BM_ExtendByZeroes/1000              9.43 ns         9.42 ns     74232457\n    BM_ExtendByZeroes/10000             8.14 ns         8.14 ns     86244218\n    BM_ExtendByZeroes/100000            10.7 ns         10.7 ns     65467391\n    BM_ExtendByZeroes/1000000           11.0 ns         11.0 ns     63575936\nPiperOrigin-RevId: 786828855\nChange-Id: I6208625fd1c35c2c137e756cf5fadc1adccfdd5d\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "df0afb3e3290ac2b5fddd5a6cfd8864e5b525012",
      "old_mode": 33188,
      "old_path": "absl/crc/crc32c_test.cc",
      "new_id": "eed5a6c8947d4c5e98c9d2e795a71acd29af591d",
      "new_mode": 33188,
      "new_path": "absl/crc/crc32c_test.cc"
    },
    {
      "type": "modify",
      "old_id": "ee9778d9948d0018bbfcee711dd2d3fc4e64f588",
      "old_mode": 33188,
      "old_path": "absl/crc/internal/crc_x86_arm_combined.cc",
      "new_id": "03cf348ff96fa6bfaf1416b8f131eee502ef7814",
      "new_mode": 33188,
      "new_path": "absl/crc/internal/crc_x86_arm_combined.cc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f78ae302d5c36453b32369423bfb6c87de938804",
      "new_mode": 33261,
      "new_path": "absl/crc/internal/gen_crc32c_consts.py"
    }
  ]
}
