)]}'
{
  "commit": "2dbfe9001fa8e8b979ff80a1c88b888d48e1b575",
  "tree": "de45872e0734c93f0e6f2668799b274cca52272e",
  "parents": [
    "bd318be0434a57050ed475e0f45c3dbb16c09c2e"
  ],
  "author": {
    "name": "Filippo Valsorda",
    "email": "filippo@golang.org",
    "time": "Sat Mar 23 01:45:20 2019 -0400"
  },
  "committer": {
    "name": "Filippo Valsorda",
    "email": "filippo@golang.org",
    "time": "Mon Nov 11 21:33:42 2019 +0000"
  },
  "message": "poly1305: rewrite the Go implementation with 64-bit limbs\n\nThe new code is meant to be readable without external references for\nPoly1305, and explains the field logic. The generic code is now 30-50%\nfaster on a Intel(R) Xeon(R) CPU E5-2690 v3 @ 2.60GHz, and even better\non a 3.1 GHz i7 MacBook.\n\nname        old time/op    new time/op    delta\n64-48          126ns ± 0%      80ns ± 1%  -36.24%  (p\u003d0.000 n\u003d16+20)\n1K-48         1.07µs ± 0%    0.81µs ± 2%  -23.63%  (p\u003d0.000 n\u003d19+20)\n2M-48         2.07ms ± 0%    1.61ms ± 1%  -22.31%  (p\u003d0.000 n\u003d20+20)\nWrite64-48    79.3ns ± 0%    58.0ns ± 1%  -26.89%  (p\u003d0.000 n\u003d20+19)\nWrite1K-48    1.02µs ± 0%    0.79µs ± 1%  -22.91%  (p\u003d0.000 n\u003d19+19)\nWrite2M-48    2.07ms ± 0%    1.61ms ± 2%  -22.33%  (p\u003d0.000 n\u003d17+20)\n\nname        old speed      new speed      delta\n64-48        508MB/s ± 0%   797MB/s ± 1%  +56.95%  (p\u003d0.000 n\u003d16+20)\n1K-48        960MB/s ± 0%  1257MB/s ± 2%  +30.94%  (p\u003d0.000 n\u003d18+20)\n2M-48       1.01GB/s ± 0%  1.30GB/s ± 1%  +28.73%  (p\u003d0.000 n\u003d20+20)\nWrite64-48   807MB/s ± 0%  1104MB/s ± 1%  +36.78%  (p\u003d0.000 n\u003d18+19)\nWrite1K-48  1.00GB/s ± 0%  1.30GB/s ± 1%  +29.71%  (p\u003d0.000 n\u003d18+19)\nWrite2M-48  1.01GB/s ± 0%  1.31GB/s ± 2%  +28.77%  (p\u003d0.000 n\u003d17+20)\n\nThe assembly is still 50-90% faster on the Xeon, 30-60% on the MacBook.\nThe Go code does not use all the arithmetic tricks the assembly does,\nand it does not have access to the three operand wide shift instruction.\n\nname        old time/op    new time/op    delta\n64-48         80.3ns ± 1%    54.2ns ± 0%  -32.50%  (p\u003d0.000 n\u003d20+17)\n1K-48          815ns ± 2%     446ns ± 1%  -45.27%  (p\u003d0.000 n\u003d20+20)\n2M-48         1.61ms ± 1%    0.86ms ± 0%  -46.54%  (p\u003d0.000 n\u003d20+17)\nWrite64-48    58.0ns ± 1%    34.0ns ± 0%  -41.34%  (p\u003d0.000 n\u003d19+20)\nWrite1K-48     790ns ± 1%     427ns ± 0%  -45.92%  (p\u003d0.000 n\u003d19+17)\nWrite2M-48    1.61ms ± 2%    0.86ms ± 0%  -46.51%  (p\u003d0.000 n\u003d20+20)\n\nname        old speed      new speed      delta\n64-48        797MB/s ± 1%  1180MB/s ± 0%  +48.09%  (p\u003d0.000 n\u003d20+19)\n1K-48       1.26GB/s ± 2%  2.30GB/s ± 1%  +82.71%  (p\u003d0.000 n\u003d20+20)\n2M-48       1.30GB/s ± 1%  2.44GB/s ± 0%  +87.04%  (p\u003d0.000 n\u003d20+17)\nWrite64-48  1.10GB/s ± 1%  1.88GB/s ± 0%  +70.52%  (p\u003d0.000 n\u003d19+18)\nWrite1K-48  1.30GB/s ± 1%  2.40GB/s ± 0%  +84.84%  (p\u003d0.000 n\u003d19+18)\nWrite2M-48  1.31GB/s ± 2%  2.44GB/s ± 0%  +86.93%  (p\u003d0.000 n\u003d20+20)\n\nHopefully this will also avoid the need for an arm64 implementation.\n\nSince now the Go and the amd64/ppc64le assembly use the same limb\nschedule, drop the assembly initialize and finalize implementations,\nand make the wrapper code match. It comes with a minor slowdown.\n\nname        old time/op    new time/op    delta\n64-48         50.3ns ± 0%    54.2ns ± 0%  +7.73%  (p\u003d0.000 n\u003d20+17)\n1K-48          441ns ± 0%     446ns ± 1%  +1.10%  (p\u003d0.000 n\u003d19+20)\n2M-48          860µs ± 0%     859µs ± 0%    ~     (p\u003d0.178 n\u003d19+17)\nWrite64-48    34.0ns ± 0%    34.0ns ± 0%    ~     (all equal)\nWrite1K-48     424ns ± 0%     427ns ± 0%  +0.71%  (p\u003d0.000 n\u003d17+17)\nWrite2M-48     860µs ± 0%     859µs ± 0%  -0.04%  (p\u003d0.000 n\u003d19+20)\n\nname        old speed      new speed      delta\n64-48       1.27GB/s ± 0%  1.18GB/s ± 0%  -7.20%  (p\u003d0.000 n\u003d20+19)\n1K-48       2.32GB/s ± 0%  2.30GB/s ± 1%  -1.07%  (p\u003d0.000 n\u003d18+20)\n2M-48       2.44GB/s ± 0%  2.44GB/s ± 0%    ~     (p\u003d0.173 n\u003d19+17)\nWrite64-48  1.88GB/s ± 0%  1.88GB/s ± 0%  +0.04%  (p\u003d0.000 n\u003d19+18)\nWrite1K-48  2.41GB/s ± 0%  2.40GB/s ± 0%  -0.67%  (p\u003d0.000 n\u003d19+18)\nWrite2M-48  2.44GB/s ± 0%  2.44GB/s ± 0%  +0.04%  (p\u003d0.000 n\u003d19+20)\n\nSince poly1305/sum_generic.go was almost entirely rewritten, it\u0027s\nprobably best reviewed on gitiles.\n\nThis is the implementation published at\nhttps://blog.filippo.io/a-literate-go-implementation-of-poly1305/\n\nUpdates #31470\n\nChange-Id: I74f9011d3ee317a43b05ae7f05d96081d08bffd3\nReviewed-on: https://go-review.googlesource.com/c/crypto/+/169037\nReviewed-by: Katie Hockman \u003ckatie@golang.org\u003e\n",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "157a69f61bd9a8c4344a944ab4dbbd1857452718",
      "new_mode": 33188,
      "new_path": "poly1305/bits_compat.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a0a185f0fc77187616eda36f23d69a94fa0af0f2",
      "new_mode": 33188,
      "new_path": "poly1305/bits_go1.13.go"
    },
    {
      "type": "modify",
      "old_id": "d076a562351f4f01093c42749ca48c2442a9c133",
      "old_mode": 33188,
      "old_path": "poly1305/poly1305.go",
      "new_id": "066159b797dd8cdfd30ee9a1ec8bed8a41a6e704",
      "new_mode": 33188,
      "new_path": "poly1305/poly1305.go"
    },
    {
      "type": "modify",
      "old_id": "e35928a0b6b6fd0e133de9c3dcaa4710d5032285",
      "old_mode": 33188,
      "old_path": "poly1305/poly1305_test.go",
      "new_id": "b258eed67948e37fb0dbe7b5f76a7f3ee4554bac",
      "new_mode": 33188,
      "new_path": "poly1305/poly1305_test.go"
    },
    {
      "type": "modify",
      "old_id": "2dbf42aa537a5910eb40d0b6e767d7dc3121d5d8",
      "old_mode": 33188,
      "old_path": "poly1305/sum_amd64.go",
      "new_id": "df56a652ff0854876ad7671abb4f45d0f8b325fa",
      "new_mode": 33188,
      "new_path": "poly1305/sum_amd64.go"
    },
    {
      "type": "modify",
      "old_id": "7d600f13cc87a51f57d75364fd1dae5d05aa73c6",
      "old_mode": 33188,
      "old_path": "poly1305/sum_amd64.s",
      "new_id": "8c0cefbb3cb7a959573cc0352667a4a31d02ec06",
      "new_mode": 33188,
      "new_path": "poly1305/sum_amd64.s"
    },
    {
      "type": "modify",
      "old_id": "5dc321c2f39e67863917e0cbe6b7b76aa5361669",
      "old_mode": 33188,
      "old_path": "poly1305/sum_arm.go",
      "new_id": "6e695e4272e45c0d459fc64ddfb2ea897cab2a74",
      "new_mode": 33188,
      "new_path": "poly1305/sum_arm.go"
    },
    {
      "type": "modify",
      "old_id": "bab76ef0d83b4d187bf2f22860aa71470898a6b3",
      "old_mode": 33188,
      "old_path": "poly1305/sum_generic.go",
      "new_id": "1187eab78fd449cb50da7d378bc9de6e098fef6b",
      "new_mode": 33188,
      "new_path": "poly1305/sum_generic.go"
    },
    {
      "type": "modify",
      "old_id": "8a9c2070b9f2f63f4444b298ab5779f8962323dd",
      "old_mode": 33188,
      "old_path": "poly1305/sum_noasm.go",
      "new_id": "1682eda45f174c81dd91815f53fb0121a9154e49",
      "new_mode": 33188,
      "new_path": "poly1305/sum_noasm.go"
    },
    {
      "type": "modify",
      "old_id": "2402b6371bfcc52851b7ae2dbd0399b03944f586",
      "old_mode": 33188,
      "old_path": "poly1305/sum_ppc64le.go",
      "new_id": "3233616935bd8f35369771f97cd61d17eb825e86",
      "new_mode": 33188,
      "new_path": "poly1305/sum_ppc64le.go"
    },
    {
      "type": "modify",
      "old_id": "55c7167ec9813ee569f0568e2261316f2917a29b",
      "old_mode": 33188,
      "old_path": "poly1305/sum_ppc64le.s",
      "new_id": "4e20bf299a5ea11ac89f520ae2d896268d2b686e",
      "new_mode": 33188,
      "new_path": "poly1305/sum_ppc64le.s"
    },
    {
      "type": "modify",
      "old_id": "ec99e07e9fb4963224bbb6f985c82357923b4ab9",
      "old_mode": 33188,
      "old_path": "poly1305/sum_s390x.go",
      "new_id": "a8920ee9d21d9cee5f3f5e26ff9b32f979d514f3",
      "new_mode": 33188,
      "new_path": "poly1305/sum_s390x.go"
    }
  ]
}
