)]}'
{
  "commit": "448c16f0f6905460a3d27e728ed0f14a1c08ff69",
  "tree": "ccf870b112136ce897482d95ac50ef4f9f440f46",
  "parents": [
    "2fea26cae5a6b140c67e18aec3dcf645a16694d5"
  ],
  "author": {
    "name": "John Porto",
    "email": "jpp@chromium.org",
    "time": "Tue Jul 28 16:56:29 2015 -0700"
  },
  "committer": {
    "name": "John Porto",
    "email": "jpp@chromium.org",
    "time": "Tue Jul 28 16:56:29 2015 -0700"
  },
  "message": "Removes references to ah.\n\nAH is a thorn in the flesh for our X86-64 backend. The assembler was\ndesigned to always encode the low 8-bit registers, so %ah would become\n%spl. While it is true we **could** force %spl to always be encoded as\n%ah, that would not work if the instruction has a rex prefix.\n\nThis CL removes references to %ah from TargetX86Base. There used to be\n2 uses of ah in the target lowering:\n\n1) To zero-extend %al before an unsigned div:\n    mov \u003c\u003csrc0\u003e\u003e, %al\n    mov 0, %ah\n    div \u003c\u003csrc1\u003e\u003e\n\nThis pattern has been changed to\n    xor %eax, %eax\n    mov \u003c\u003csrc0\u003e\u003e, %al\n    div \u003c\u003csrc1\u003e\u003e\n\n2) To access the 8-bit remainder for 8-bit division:\n    mov %ah, \u003c\u003cdest\u003e\u003e\n\nThis pattern has been changed to\n    shr $8, %eax\n    mov %al, \u003c\u003cDest\u003e\u003e\n\nBUG\u003d https://code.google.com/p/nativeclient/issues/detail?id\u003d4077\nR\u003dstichnot@chromium.org\n\nReview URL: https://codereview.chromium.org/1260163003.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f9b1e8845bf961852f7de1ae5d28c81bbcd6f665",
      "old_mode": 33188,
      "old_path": "src/IceInstX8632.def",
      "new_id": "3129dad30f527a07a7925f7984728f7292f9020e",
      "new_mode": 33188,
      "new_path": "src/IceInstX8632.def"
    },
    {
      "type": "modify",
      "old_id": "dd4b712b6677f49118c34f4f145b62e30d58aab8",
      "old_mode": 33188,
      "old_path": "src/IceInstX8664.def",
      "new_id": "7ad1eaa125fb5d63a0b99b237a71c397c792e9a0",
      "new_mode": 33188,
      "new_path": "src/IceInstX8664.def"
    },
    {
      "type": "modify",
      "old_id": "da920e28d9552238ed0773fcddfe82f179df15ab",
      "old_mode": 33188,
      "old_path": "src/IceRegistersX8632.h",
      "new_id": "b0d22bb12ff10a8f2e12b94431aa50a635b892e3",
      "new_mode": 33188,
      "new_path": "src/IceRegistersX8632.h"
    },
    {
      "type": "modify",
      "old_id": "f95fe9eac20f6e2e8a1844dadb9f48d4c579ed2d",
      "old_mode": 33188,
      "old_path": "src/IceRegistersX8664.h",
      "new_id": "bc448b2e5c1ec5ec1f0f3d11b378ca6865950134",
      "new_mode": 33188,
      "new_path": "src/IceRegistersX8664.h"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8ee61d06e13edca5660908b09d5012e2edc4041c",
      "new_mode": 33188,
      "new_path": "src/IceTargetLoweringX8664.def"
    },
    {
      "type": "modify",
      "old_id": "77048b089c1a4c9934568f8dd973429138e36f9c",
      "old_mode": 33188,
      "old_path": "src/IceTargetLoweringX86BaseImpl.h",
      "new_id": "d9cc5e4a082e9ef0a35e8d5cdf247f1ad094f90a",
      "new_mode": 33188,
      "new_path": "src/IceTargetLoweringX86BaseImpl.h"
    }
  ]
}
