)]}'
{
  "commit": "926172c5e4808726244713ef70398cd38b055f1e",
  "tree": "882344c9a83dd2f43129a2c4ba1d277edd8e5fe1",
  "parents": [
    "66c9c6c0fbba0894ebce3da572f62eb05162e547"
  ],
  "author": {
    "name": "Linus Torvalds",
    "email": "torvalds@linux-foundation.org",
    "time": "Mon Aug 10 16:52:07 2009 -0700"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Mon Aug 10 17:26:51 2009 -0700"
  },
  "message": "block-sha1: improve code on large-register-set machines\n\nFor x86 performance (especially in 32-bit mode) I added that hack to write\nthe SHA1 internal temporary hash using a volatile pointer, in order to get\ngcc to not try to cache the array contents. Because gcc will do all the\nwrong things, and then spill things in insane random ways.\n\nBut on architectures like PPC, where you have 32 registers, it\u0027s actually\nperfectly reasonable to put the whole temporary array[] into the register\nset, and gcc can do so.\n\nSo make the \u0027volatile unsigned int *\u0027 cast be dependent on a\nSMALL_REGISTER_SET preprocessor symbol, and enable it (currently) on just\nx86 and x86-64.  With that, the routine is fairly reasonable even when\ncompared to the hand-scheduled PPC version. Ben Herrenschmidt reports on\na G5:\n\n * Paulus asm version:       about 3.67s\n * Yours with no change:     about 5.74s\n * Yours without \"volatile\": about 3.78s\n\nso with this the C version is within about 3% of the asm one.\n\nAnd add a lot of commentary on what the heck is going on.\n\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "886bcf25e2f52dff239f1c744c11774af12da48a",
      "old_mode": 33188,
      "old_path": "block-sha1/sha1.c",
      "new_id": "304cd0452d2d469b6ca2ff36efd54fb805fc70d2",
      "new_mode": 33188,
      "new_path": "block-sha1/sha1.c"
    }
  ]
}
