)]}'
{
  "commit": "63eff947512b36c770c92d45e4b22cb8a18a39be",
  "tree": "336e8d9a01ee6665d9ec7b8148155ee7cab992a0",
  "parents": [
    "6327658ee73502ffb55dfb6b28a20d1dde15a4dc"
  ],
  "author": {
    "name": "Richard Sandiford",
    "email": "richard.sandiford@arm.com",
    "time": "Thu Dec 02 15:00:57 2021 +0000"
  },
  "committer": {
    "name": "Richard Sandiford",
    "email": "richard.sandiford@arm.com",
    "time": "Thu Dec 02 15:00:57 2021 +0000"
  },
  "message": "aarch64: Enforce P/M/E order for MOPS instructions\n\nThe MOPS instructions should be used as a triple, such as:\n\n       cpyfp [x0]!, [x1]!, x2!\n       cpyfm [x0]!, [x1]!, x2!\n       cpyfe [x0]!, [x1]!, x2!\n\nThe registers should also be the same for each writeback operand.\nThis patch adds a warning for code that doesn\u0027t follow this rule,\nalong similar lines to the warning that we already emit for\ninvalid uses of MOVPRFX.\n\ninclude/\n\t* opcode/aarch64.h (C_SCAN_MOPS_P, C_SCAN_MOPS_M, C_SCAN_MOPS_E)\n\t(C_SCAN_MOPS_PME): New macros.\n\t(AARCH64_OPDE_A_SHOULD_FOLLOW_B): New aarch64_operand_error_kind.\n\t(AARCH64_OPDE_EXPECTED_A_AFTER_B): Likewise.\n\t(aarch64_operand_error): Make each data value a union between\n\tan int and a string.\n\nopcodes/\n\t* aarch64-tbl.h (MOPS_CPY_OP1_OP2_INSN): Add scan flags.\n\t(MOPS_SET_OP1_OP2_INSN): Likewise.\n\t* aarch64-opc.c (set_out_of_range_error): Update after change to\n\taarch64_operand_error.\n\t(set_unaligned_error, set_reg_list_error): Likewise.\n\t(init_insn_sequence): Use a 3-instruction sequence for\n\tMOPS P instructions.\n\t(verify_mops_pme_sequence): New function.\n\t(verify_constraints): Call it.\n\t* aarch64-dis.c (print_verifier_notes): Handle\n\tAARCH64_OPDE_A_SHOULD_FOLLOW_B and AARCH64_OPDE_EXPECTED_A_AFTER_B.\n\ngas/\n\t* config/tc-aarch64.c (operand_mismatch_kind_names): Add entries\n\tfor AARCH64_OPDE_A_SHOULD_FOLLOW_B and AARCH64_OPDE_EXPECTED_A_AFTER_B.\n\t(operand_error_higher_severity_p): Check that\n\tAARCH64_OPDE_A_SHOULD_FOLLOW_B and AARCH64_OPDE_EXPECTED_A_AFTER_B\n\tcome between AARCH64_OPDE_RECOVERABLE and AARCH64_OPDE_SYNTAX_ERROR;\n\ttheir relative order is not significant.\n\t(record_operand_error_with_data): Update after change to\n\taarch64_operand_error.\n\t(output_operand_error_record): Likewise.  Handle\n\tAARCH64_OPDE_A_SHOULD_FOLLOW_B and AARCH64_OPDE_EXPECTED_A_AFTER_B.\n\t* testsuite/gas/aarch64/mops_invalid_2.s,\n\ttestsuite/gas/aarch64/mops_invalid_2.d,\n\ttestsuite/gas/aarch64/mops_invalid_2.l: New test.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4aadf5bf99f567431d924660b7efb99997b510b4",
      "old_mode": 33188,
      "old_path": "gas/config/tc-aarch64.c",
      "new_id": "ea65da580deeb7091b19a885d3678d93e471ea5f",
      "new_mode": 33188,
      "new_path": "gas/config/tc-aarch64.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f5e7228f6e7d5ebec3ba376a513756de8c177aa4",
      "new_mode": 33188,
      "new_path": "gas/testsuite/gas/aarch64/mops_invalid_2.d"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4f757530fb541eef4ed3058517a2e3db716f0ad7",
      "new_mode": 33188,
      "new_path": "gas/testsuite/gas/aarch64/mops_invalid_2.l"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f78ca54e84f70169a5327d231b2a55f7b5842320",
      "new_mode": 33188,
      "new_path": "gas/testsuite/gas/aarch64/mops_invalid_2.s"
    },
    {
      "type": "modify",
      "old_id": "183d28150c3f599eec8d301c72285bc11899b5bc",
      "old_mode": 33188,
      "old_path": "include/opcode/aarch64.h",
      "new_id": "21ba0bf0074914f6664732257121a57cc688b951",
      "new_mode": 33188,
      "new_path": "include/opcode/aarch64.h"
    },
    {
      "type": "modify",
      "old_id": "8e6123db02e682b8da84f0217e0f3c809616ded2",
      "old_mode": 33188,
      "old_path": "opcodes/aarch64-dis.c",
      "new_id": "fdb87b4526f7458be1efd41b8da02ef443b72371",
      "new_mode": 33188,
      "new_path": "opcodes/aarch64-dis.c"
    },
    {
      "type": "modify",
      "old_id": "cfd4781268406656b1533caf5579823892007e10",
      "old_mode": 33188,
      "old_path": "opcodes/aarch64-opc.c",
      "new_id": "49dfe98769a0b90d975ec103c1d5f3b87b279573",
      "new_mode": 33188,
      "new_path": "opcodes/aarch64-opc.c"
    },
    {
      "type": "modify",
      "old_id": "48d2fa8ff64a8d08bd0c4058905cfb5a0cddd49b",
      "old_mode": 33188,
      "old_path": "opcodes/aarch64-tbl.h",
      "new_id": "51d8532b8f296041b6fa4256ba6ed6806cfffe46",
      "new_mode": 33188,
      "new_path": "opcodes/aarch64-tbl.h"
    }
  ]
}
