)]}'
{
  "commit": "b3da1801bef08c75f69f4376ffa05f1de2591ca8",
  "tree": "d8f0f1827b7e10198ea16e0b526fd12f5e98b25d",
  "parents": [
    "9e84a4552dd90ad2d15bd56ea168d945b4b71b98"
  ],
  "author": {
    "name": "Spencer Abson",
    "email": "spencer.abson@arm.com",
    "time": "Thu Jul 31 14:07:31 2025 +0000"
  },
  "committer": {
    "name": "Spencer Abson",
    "email": "spencer.abson@arm.com",
    "time": "Thu Jul 31 14:21:08 2025 +0000"
  },
  "message": "aarch64: Prevent streaming-compatible code from assembler rejection [PR121028]\n\nStreaming-compatible functions can be compiled without SME enabled, but need\nto use \"SMSTART SM\" and \"SMSTOP SM\" to temporarily switch into the streaming\nstate of a callee.  These switches are conditional on the current mode being\nopposite to the target mode, so no SME instructions are executed if SME is not\navailable.\n\nHowever, in GAS, \"SMSTART SM\" and \"SMSTOP SM\" always require +sme.  A call\nfrom a streaming-compatible function, compiled without SME enabled, to a non\n-streaming function will be rejected as:\n\nError: selected processor does not support `smstop sm\u0027..\n\nTo work around this, we make use of the .inst directive to insert the literal\nencodings of \"SMSTART SM\" and \"SMSTOP SM\".\n\ngcc/ChangeLog:\n\tPR target/121028\n\t* config/aarch64/aarch64-sme.md (aarch64_smstart_sm): Use the .inst\n\tdirective if !TARGET_SME.\n\t(aarch64_smstop_sm): Likewise.\n\ngcc/testsuite/ChangeLog:\n\tPR target/121028\n\t* gcc.target/aarch64/sme/call_sm_switch_1.c: Tell check-function\n\t-bodies not to ignore .inst directives, and replace the test for\n\t\"smstart sm\" with one for it\u0027s encoding.\n\t* gcc.target/aarch64/sme/call_sm_switch_11.c: Likewise.\n\t* gcc.target/aarch64/sme/pr121028.c: New test.\n\n(cherry picked from commit d52e9ef98bb30872482a46e7a2ec6a20c3ca4a4c)\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f7958c90eae44d5f0b0decbab92dcc44010bbfc4",
      "old_mode": 33188,
      "old_path": "gcc/config/aarch64/aarch64-sme.md",
      "new_id": "3673941ab8695110a7de3ddb1d2953ecc8d4c7d3",
      "new_mode": 33188,
      "new_path": "gcc/config/aarch64/aarch64-sme.md"
    },
    {
      "type": "modify",
      "old_id": "98922aaeae09bf31e5c11e175799e5e28d5cab6c",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_1.c",
      "new_id": "3a63da7439cce7bca22413d63324eb0b6945e4ac",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_1.c"
    },
    {
      "type": "modify",
      "old_id": "ee6f98737d96d3da3645ac658c52e3b0fa988d2b",
      "old_mode": 33188,
      "old_path": "gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_11.c",
      "new_id": "c72d03f33b971e0cdc299ef1795abd60c33b72a6",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.target/aarch64/sme/call_sm_switch_11.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a6aa11900f2ecdeb09f55646939737b23af649bb",
      "new_mode": 33188,
      "new_path": "gcc/testsuite/gcc.target/aarch64/sme/pr121028.c"
    }
  ]
}
