diff options
author | Przemyslaw Wirkus <przemyslaw.wirkus@arm.com> | 2021-11-17 20:15:13 +0000 |
---|---|---|
committer | Przemyslaw Wirkus <przemyslaw.wirkus@arm.com> | 2021-11-17 20:15:37 +0000 |
commit | 3dd032c5fb4eb7fc6bc0341d348da5c75e2d8e38 (patch) | |
tree | f8ceee98b93206d0fc7b4180e361dbfa461800b7 /opcodes/aarch64-asm-2.c | |
parent | 01a4d0822025084609380fb989d43bda0667db72 (diff) | |
download | gdb-3dd032c5fb4eb7fc6bc0341d348da5c75e2d8e38.zip gdb-3dd032c5fb4eb7fc6bc0341d348da5c75e2d8e38.tar.gz gdb-3dd032c5fb4eb7fc6bc0341d348da5c75e2d8e38.tar.bz2 |
aarch64: [SME] Add SME mode selection and state access instructions
This patch is adding new SME mode selection and state access instructions:
* Add SMSTART and SMSTOP instructions.
* Add SVCR system register.
gas/ChangeLog:
* config/tc-aarch64.c (parse_sme_sm_za): New parser.
(parse_operands): New parser.
* testsuite/gas/aarch64/sme-8-illegal.d: New test.
* testsuite/gas/aarch64/sme-8-illegal.l: New test.
* testsuite/gas/aarch64/sme-8-illegal.s: New test.
* testsuite/gas/aarch64/sme-8.d: New test.
* testsuite/gas/aarch64/sme-8.s: New test.
include/ChangeLog:
* opcode/aarch64.h (enum aarch64_opnd): New operand
AARCH64_OPND_SME_SM_ZA.
(enum aarch64_insn_class): New instruction classes
sme_start and sme_stop.
opcodes/ChangeLog:
* aarch64-asm.c (aarch64_ins_pstatefield): New inserter.
(aarch64_ins_sme_sm_za): New inserter.
* aarch64-dis.c (aarch64_ext_imm): New extractor.
(aarch64_ext_pstatefield): New extractor.
(aarch64_ext_sme_sm_za): New extractor.
* aarch64-opc.c (operand_general_constraint_met_p):
New pstatefield value for SME instructions.
(aarch64_print_operand): Printout for OPND_SME_SM_ZA.
(SR_SME): New register SVCR.
* aarch64-opc.h (F_REG_IN_CRM): New register endcoding.
* aarch64-opc.h (F_IMM_IN_CRM): New immediate endcoding.
(PSTATE_ENCODE_CRM): Encode CRm field.
(PSTATE_DECODE_CRM): Decode CRm field.
(PSTATE_ENCODE_CRM_IMM): Encode CRm immediate field.
(PSTATE_DECODE_CRM_IMM): Decode CRm immediate field.
(PSTATE_ENCODE_CRM_AND_IMM): Encode CRm and immediate
field.
* aarch64-tbl.h (struct aarch64_opcode): New SMSTART
and SMSTOP instructions.
aarch64-asm-2.c: Regenerate.
aarch64-dis-2.c: Regenerate.
aarch64-opc-2.c: Regenerate.
Diffstat (limited to 'opcodes/aarch64-asm-2.c')
-rw-r--r-- | opcodes/aarch64-asm-2.c | 300 |
1 files changed, 151 insertions, 149 deletions
diff --git a/opcodes/aarch64-asm-2.c b/opcodes/aarch64-asm-2.c index 54ec35a..8b226b1 100644 --- a/opcodes/aarch64-asm-2.c +++ b/opcodes/aarch64-asm-2.c @@ -426,176 +426,176 @@ aarch64_find_real_opcode (const aarch64_opcode *opcode) case 1188: /* movz */ value = 1188; /* --> movz. */ break; - case 1246: /* autibsp */ - case 1245: /* autibz */ - case 1244: /* autiasp */ - case 1243: /* autiaz */ - case 1242: /* pacibsp */ - case 1241: /* pacibz */ - case 1240: /* paciasp */ - case 1239: /* paciaz */ - case 1215: /* tsb */ - case 1214: /* psb */ - case 1213: /* esb */ - case 1212: /* autib1716 */ - case 1211: /* autia1716 */ - case 1210: /* pacib1716 */ - case 1209: /* pacia1716 */ - case 1208: /* xpaclri */ - case 1206: /* sevl */ - case 1205: /* sev */ - case 1204: /* wfi */ - case 1203: /* wfe */ - case 1202: /* yield */ - case 1201: /* bti */ - case 1200: /* csdb */ - case 1199: /* nop */ - case 1198: /* hint */ - value = 1198; /* --> hint. */ - break; - case 1221: /* pssbb */ - case 1220: /* ssbb */ - case 1219: /* dfb */ - case 1217: /* dsb */ - value = 1217; /* --> dsb. */ - break; - case 1218: /* dsb */ - value = 1218; /* --> dsb. */ - break; - case 1234: /* cpp */ - case 1233: /* dvp */ - case 1232: /* cfp */ - case 1229: /* tlbi */ - case 1228: /* ic */ - case 1227: /* dc */ - case 1226: /* at */ - case 1225: /* sys */ - value = 1225; /* --> sys. */ - break; - case 1230: /* wfet */ - value = 1230; /* --> wfet. */ - break; - case 1231: /* wfit */ - value = 1231; /* --> wfit. */ - break; - case 2044: /* bic */ - case 1294: /* and */ - value = 1294; /* --> and. */ + case 1250: /* autibsp */ + case 1249: /* autibz */ + case 1248: /* autiasp */ + case 1247: /* autiaz */ + case 1246: /* pacibsp */ + case 1245: /* pacibz */ + case 1244: /* paciasp */ + case 1243: /* paciaz */ + case 1219: /* tsb */ + case 1218: /* psb */ + case 1217: /* esb */ + case 1216: /* autib1716 */ + case 1215: /* autia1716 */ + case 1214: /* pacib1716 */ + case 1213: /* pacia1716 */ + case 1212: /* xpaclri */ + case 1210: /* sevl */ + case 1209: /* sev */ + case 1208: /* wfi */ + case 1207: /* wfe */ + case 1206: /* yield */ + case 1205: /* bti */ + case 1204: /* csdb */ + case 1203: /* nop */ + case 1202: /* hint */ + value = 1202; /* --> hint. */ + break; + case 1225: /* pssbb */ + case 1224: /* ssbb */ + case 1223: /* dfb */ + case 1221: /* dsb */ + value = 1221; /* --> dsb. */ + break; + case 1222: /* dsb */ + value = 1222; /* --> dsb. */ + break; + case 1238: /* cpp */ + case 1237: /* dvp */ + case 1236: /* cfp */ + case 1233: /* tlbi */ + case 1232: /* ic */ + case 1231: /* dc */ + case 1230: /* at */ + case 1229: /* sys */ + value = 1229; /* --> sys. */ + break; + case 1234: /* wfet */ + value = 1234; /* --> wfet. */ + break; + case 1235: /* wfit */ + value = 1235; /* --> wfit. */ + break; + case 2048: /* bic */ + case 1298: /* and */ + value = 1298; /* --> and. */ + break; + case 1281: /* mov */ + case 1300: /* and */ + value = 1300; /* --> and. */ + break; + case 1285: /* movs */ + case 1301: /* ands */ + value = 1301; /* --> ands. */ + break; + case 2049: /* cmple */ + case 1336: /* cmpge */ + value = 1336; /* --> cmpge. */ + break; + case 2052: /* cmplt */ + case 1339: /* cmpgt */ + value = 1339; /* --> cmpgt. */ + break; + case 2050: /* cmplo */ + case 1341: /* cmphi */ + value = 1341; /* --> cmphi. */ + break; + case 2051: /* cmpls */ + case 1344: /* cmphs */ + value = 1344; /* --> cmphs. */ break; - case 1277: /* mov */ - case 1296: /* and */ - value = 1296; /* --> and. */ - break; - case 1281: /* movs */ - case 1297: /* ands */ - value = 1297; /* --> ands. */ + case 1278: /* mov */ + case 1366: /* cpy */ + value = 1366; /* --> cpy. */ break; - case 2045: /* cmple */ - case 1332: /* cmpge */ - value = 1332; /* --> cmpge. */ + case 1280: /* mov */ + case 1367: /* cpy */ + value = 1367; /* --> cpy. */ break; - case 2048: /* cmplt */ - case 1335: /* cmpgt */ - value = 1335; /* --> cmpgt. */ + case 2059: /* fmov */ + case 1283: /* mov */ + case 1368: /* cpy */ + value = 1368; /* --> cpy. */ break; - case 2046: /* cmplo */ - case 1337: /* cmphi */ - value = 1337; /* --> cmphi. */ + case 1273: /* mov */ + case 1380: /* dup */ + value = 1380; /* --> dup. */ break; - case 2047: /* cmpls */ - case 1340: /* cmphs */ - value = 1340; /* --> cmphs. */ + case 1275: /* mov */ + case 1272: /* mov */ + case 1381: /* dup */ + value = 1381; /* --> dup. */ break; - case 1274: /* mov */ - case 1362: /* cpy */ - value = 1362; /* --> cpy. */ + case 2058: /* fmov */ + case 1277: /* mov */ + case 1382: /* dup */ + value = 1382; /* --> dup. */ break; case 1276: /* mov */ - case 1363: /* cpy */ - value = 1363; /* --> cpy. */ - break; - case 2055: /* fmov */ - case 1279: /* mov */ - case 1364: /* cpy */ - value = 1364; /* --> cpy. */ - break; - case 1269: /* mov */ - case 1376: /* dup */ - value = 1376; /* --> dup. */ - break; - case 1271: /* mov */ - case 1268: /* mov */ - case 1377: /* dup */ - value = 1377; /* --> dup. */ + case 1383: /* dupm */ + value = 1383; /* --> dupm. */ break; - case 2054: /* fmov */ - case 1273: /* mov */ - case 1378: /* dup */ - value = 1378; /* --> dup. */ - break; - case 1272: /* mov */ - case 1379: /* dupm */ - value = 1379; /* --> dupm. */ - break; - case 2049: /* eon */ - case 1381: /* eor */ - value = 1381; /* --> eor. */ + case 2053: /* eon */ + case 1385: /* eor */ + value = 1385; /* --> eor. */ break; - case 1282: /* not */ - case 1383: /* eor */ - value = 1383; /* --> eor. */ + case 1286: /* not */ + case 1387: /* eor */ + value = 1387; /* --> eor. */ break; - case 1283: /* nots */ - case 1384: /* eors */ - value = 1384; /* --> eors. */ + case 1287: /* nots */ + case 1388: /* eors */ + value = 1388; /* --> eors. */ break; - case 2050: /* facle */ - case 1389: /* facge */ - value = 1389; /* --> facge. */ + case 2054: /* facle */ + case 1393: /* facge */ + value = 1393; /* --> facge. */ break; - case 2051: /* faclt */ - case 1390: /* facgt */ - value = 1390; /* --> facgt. */ + case 2055: /* faclt */ + case 1394: /* facgt */ + value = 1394; /* --> facgt. */ break; - case 2052: /* fcmle */ - case 1403: /* fcmge */ - value = 1403; /* --> fcmge. */ + case 2056: /* fcmle */ + case 1407: /* fcmge */ + value = 1407; /* --> fcmge. */ break; - case 2053: /* fcmlt */ - case 1405: /* fcmgt */ - value = 1405; /* --> fcmgt. */ + case 2057: /* fcmlt */ + case 1409: /* fcmgt */ + value = 1409; /* --> fcmgt. */ break; - case 1266: /* fmov */ - case 1411: /* fcpy */ - value = 1411; /* --> fcpy. */ + case 1270: /* fmov */ + case 1415: /* fcpy */ + value = 1415; /* --> fcpy. */ break; - case 1265: /* fmov */ - case 1434: /* fdup */ - value = 1434; /* --> fdup. */ + case 1269: /* fmov */ + case 1438: /* fdup */ + value = 1438; /* --> fdup. */ break; - case 1267: /* mov */ - case 1765: /* orr */ - value = 1765; /* --> orr. */ + case 1271: /* mov */ + case 1769: /* orr */ + value = 1769; /* --> orr. */ break; - case 2056: /* orn */ - case 1766: /* orr */ - value = 1766; /* --> orr. */ + case 2060: /* orn */ + case 1770: /* orr */ + value = 1770; /* --> orr. */ break; - case 1270: /* mov */ - case 1768: /* orr */ - value = 1768; /* --> orr. */ + case 1274: /* mov */ + case 1772: /* orr */ + value = 1772; /* --> orr. */ break; - case 1280: /* movs */ - case 1769: /* orrs */ - value = 1769; /* --> orrs. */ + case 1284: /* movs */ + case 1773: /* orrs */ + value = 1773; /* --> orrs. */ break; - case 1275: /* mov */ - case 1831: /* sel */ - value = 1831; /* --> sel. */ + case 1279: /* mov */ + case 1835: /* sel */ + value = 1835; /* --> sel. */ break; - case 1278: /* mov */ - case 1832: /* sel */ - value = 1832; /* --> sel. */ + case 1282: /* mov */ + case 1836: /* sel */ + value = 1836; /* --> sel. */ break; default: return NULL; } @@ -675,7 +675,7 @@ aarch64_insert_operand (const aarch64_operand *self, case 33: case 34: case 35: - case 220: + case 221: return aarch64_ins_reglane (self, info, code, inst, errors); case 36: return aarch64_ins_reglist (self, info, code, inst, errors); @@ -721,7 +721,7 @@ aarch64_insert_operand (const aarch64_operand *self, case 189: case 190: case 215: - case 219: + case 220: return aarch64_ins_imm (self, info, code, inst, errors); case 44: case 45: @@ -889,6 +889,8 @@ aarch64_insert_operand (const aarch64_operand *self, return aarch64_ins_sme_za_array (self, info, code, inst, errors); case 218: return aarch64_ins_sme_addr_ri_u4xvl (self, info, code, inst, errors); + case 219: + return aarch64_ins_sme_sm_za (self, info, code, inst, errors); default: assert (0); abort (); } } |