)]}'
{
  "commit": "15b1f9c6a4f9656e7c172e03064fe7f8e03c666d",
  "tree": "cba94e6e3eaee61387c59f53c3c43ec6da48a90a",
  "parents": [
    "e5b6c141a19bb086481f914d4d55b35765505e6c"
  ],
  "author": {
    "name": "David Benjamin",
    "email": "davidben@google.com",
    "time": "Thu Sep 07 18:32:05 2023 -0400"
  },
  "committer": {
    "name": "Boringssl LUCI CQ",
    "email": "boringssl-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Fri Sep 08 17:47:42 2023 +0000"
  },
  "message": "Help the compiler dedup ia32cap and armcap accesses\n\nhttps://boringssl-review.googlesource.com/c/boringssl/+/62585 made the\ncompiler emit multiple CRYPTO_library_init calls in functions which\ndispatch between a tower of alternatives. Ideally, the compiler would\nknow that at most one call suffices.\n\nThere doesn\u0027t seem to be such an attribute, but we can get the same\neffect with pure or const attributes. We tie init with returning the\ncapability vector. On Intel, because the vector is so large, we have to\ngo with a weaker version. Somewhat annoyingly, the getter must be\nout-of-line, because otherwise the compiler inlines first and loses the\nattribute.\n\nI went with pure because we allow our unit tests to mutate\nOPENSSL_armcap_P, which means the Arm one is, strictly speaking, pure,\nnot const. This slightly reduces optimization potential, but should\nstill allow deduping in most places. Confirmed that aes_init_key\nnow only calls a helper function once.\n\nSee discussion in\nhttps://boringssl-review.googlesource.com/c/boringssl/+/62585/comment/26083b88_b3db2b75/\n\nBug: 35\nChange-Id: I9bc464f0e5a0ed9601017a5037028f906693a137\nReviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/62985\nAuto-Submit: David Benjamin \u003cdavidben@google.com\u003e\nReviewed-by: Bob Beck \u003cbbe@google.com\u003e\nCommit-Queue: Bob Beck \u003cbbe@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "beaae0f7e92f76f76cca994c3fe713479ca6bb67",
      "old_mode": 33188,
      "old_path": "crypto/crypto.c",
      "new_id": "0bca1e21601ad97b4308082e030d3e985e3548cf",
      "new_mode": 33188,
      "new_path": "crypto/crypto.c"
    },
    {
      "type": "modify",
      "old_id": "15561faa4cfd2ef58e008cd1f759c3df640c96bb",
      "old_mode": 33188,
      "old_path": "crypto/internal.h",
      "new_id": "a2c49d6c04f8d77f75f70422426915b7e33e4a1b",
      "new_mode": 33188,
      "new_path": "crypto/internal.h"
    }
  ]
}
