)]}'
{
  "commit": "4abb672ac1a2a14d32bfee02f2d05ae5e01af637",
  "tree": "0dfd2e84934d0cfe68521d95b0d4b24f9f112e03",
  "parents": [
    "fc21e0f029c51687c2b4ca686d0b773ad5efeff4"
  ],
  "author": {
    "name": "Richard Sandiford",
    "email": "richard.sandiford@arm.com",
    "time": "Tue Sep 26 15:01:21 2023 +0100"
  },
  "committer": {
    "name": "Richard Sandiford",
    "email": "richard.sandiford@arm.com",
    "time": "Tue Sep 26 15:01:21 2023 +0100"
  },
  "message": "aarch64: Restructure feature flag handling\n\nThe AArch64 feature-flag code is currently limited to a maximum\nof 64 features.  This patch reworks it so that the limit can be\nincreased more easily.  The basic idea is:\n\n(1) Turn the ARM_FEATURE_FOO macros into an enum, with the enum\n    counting bit positions.\n\n(2) Make the feature-list macros take an array index argument\n    (currently always 0).  The macros then return the\n    aarch64_feature_set contents for that array index.\n\n    An N-element array would then be initialised as:\n\n      { MACRO (0), ..., MACRO (N - 1) }\n\n(3) Provide convenience macros for initialising an\n    aarch64_feature_set for:\n\n    - a single feature\n    - a list of individual features\n    - an architecture version\n    - an architecture version + a list of additional features\n\n(2) and (3) use the preprocessor to generate static initialisers.\nThe main restriction was that uses of the same preprocessor macro\ncannot be nested.  So if a macro wants to do something for N individual\narguments, it needs to use a chain of N macros to do it.  There then\nneeds to be a way of deriving N, as a preprocessor token suitable for\npasting.\n\nThe easiest way of doing that was to precede each list of features\nby the number of features in the list.  So an aarch64_feature_set\ninitialiser for three features A, B and C would be written:\n\n  AARCH64_FEATURES (3, A, B, C)\n\nThis scheme makes it difficult to keep AARCH64_FEATURE_CRYPTO as a\nsynonym for SHA2+AES, so the patch expands the former to the latter.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4458f6dd663536a16181983980c65e1ecfd8be8b",
      "old_mode": 33188,
      "old_path": "gas/config/tc-aarch64.c",
      "new_id": "5f5ec1b3dbcba62fa20d339126e50311f651a952",
      "new_mode": 33188,
      "new_path": "gas/config/tc-aarch64.c"
    },
    {
      "type": "modify",
      "old_id": "381934ab39b1ef744b660b2b440b0dd86cbb860a",
      "old_mode": 33188,
      "old_path": "include/opcode/aarch64.h",
      "new_id": "54ac1d85fd481f004383663a61478f9d2da06380",
      "new_mode": 33188,
      "new_path": "include/opcode/aarch64.h"
    },
    {
      "type": "modify",
      "old_id": "03bcc372a56355edf3dccf8613277b2072bbc14f",
      "old_mode": 33188,
      "old_path": "opcodes/aarch64-dis.c",
      "new_id": "3bf5f50effcc1fdb949e6e9a55d617bf71196807",
      "new_mode": 33188,
      "new_path": "opcodes/aarch64-dis.c"
    },
    {
      "type": "modify",
      "old_id": "41dec5cdc044ff350f76121a4f15ac942ac3483a",
      "old_mode": 33188,
      "old_path": "opcodes/aarch64-opc.c",
      "new_id": "df1b511364197e4c42a4a0ade6d5f3683c60f8da",
      "new_mode": 33188,
      "new_path": "opcodes/aarch64-opc.c"
    },
    {
      "type": "modify",
      "old_id": "3de1e37b3737daceacb75761f3daa3ef9d242f72",
      "old_mode": 33188,
      "old_path": "opcodes/aarch64-tbl.h",
      "new_id": "dc72b13f5f7049bae18a63a5a3950013970c1d5a",
      "new_mode": 33188,
      "new_path": "opcodes/aarch64-tbl.h"
    }
  ]
}
