[BINUTILS, AArch64] Enable Transactional Memory Extension

This patch enables the new Transactional Memory Extension added recently
as part of Arm's new architecture technologies.

We introduce a new optional extension "tme" to enable this. The following
instructions are part of the extension:
   * tstart <Xt>
   * ttest <Xt>
   * tcommit
   * tcancel #<imm>
The ISA for the above can be found here:
https://developer.arm.com/docs/ddi0602/latest/base-instructions-alphabetic-order

*** gas/ChangeLog ***

2019-05-01  Sudakshina Das  <sudi.das@arm.com>

	* config/tc-aarch64.c (parse_operands): Add case for
	AARCH64_OPND_TME_UIMM16.
	(aarch64_features): Add "tme".
	* doc/c-aarch64.texi: Document the same.
	* testsuite/gas/aarch64/tme-invalid.d: New test.
	* testsuite/gas/aarch64/tme-invalid.l: New test.
	* testsuite/gas/aarch64/tme-invalid.s: New test.
	* testsuite/gas/aarch64/tme.d: New test.
	* testsuite/gas/aarch64/tme.s: New test.

*** include/ChangeLog ***

2019-05-01  Sudakshina Das  <sudi.das@arm.com>

	* opcode/aarch64.h (AARCH64_FEATURE_TME): New.
	(enum aarch64_opnd): Add AARCH64_OPND_TME_UIMM16.

*** opcodes/ChangeLog ***

2019-05-01  Sudakshina Das  <sudi.das@arm.com>

	* aarch64-asm-2.c: Regenerated.
	* aarch64-dis-2.c: Regenerated.
	* aarch64-opc-2.c: Regenerated.
	* aarch64-opc.c (operand_general_constraint_met_p): Add case for
	AARCH64_OPND_TME_UIMM16.
	(aarch64_print_operand): Likewise.
	* aarch64-tbl.h (QL_IMM_NIL): New.
	(TME): New.
	(_TME_INSN): New.
	(struct aarch64_opcode): Add tstart, tcommit, ttest and tcancel.
This commit is contained in:
Sudakshina Das 2019-05-01 17:14:01 +01:00
parent 2ecde2b632
commit b83b4b1382
16 changed files with 1267 additions and 1099 deletions

View File

@ -1,3 +1,15 @@
2019-05-01 Sudakshina Das <sudi.das@arm.com>
* config/tc-aarch64.c (parse_operands): Add case for
AARCH64_OPND_TME_UIMM16.
(aarch64_features): Add "tme".
* doc/c-aarch64.texi: Document the same.
* testsuite/gas/aarch64/tme-invalid.d: New test.
* testsuite/gas/aarch64/tme-invalid.l: New test.
* testsuite/gas/aarch64/tme-invalid.s: New test.
* testsuite/gas/aarch64/tme.d: New test.
* testsuite/gas/aarch64/tme.s: New test.
2019-04-29 John Darrington <john@darrington.wattle.id.au>
* testsuite/gas/s12z/truncated.d: New file.

View File

@ -5752,6 +5752,7 @@ parse_operands (char *str, const aarch64_opcode *opcode)
case AARCH64_OPND_CCMP_IMM:
case AARCH64_OPND_SIMM5:
case AARCH64_OPND_FBITS:
case AARCH64_OPND_TME_UIMM16:
case AARCH64_OPND_UIMM4:
case AARCH64_OPND_UIMM4_ADDG:
case AARCH64_OPND_UIMM10:
@ -8845,6 +8846,8 @@ static const struct aarch64_option_cpu_value_table aarch64_features[] = {
AARCH64_FEATURE (AARCH64_FEATURE_F16
| AARCH64_FEATURE_SIMD
| AARCH64_FEATURE_COMPNUM, 0)},
{"tme", AARCH64_FEATURE (AARCH64_FEATURE_TME, 0),
AARCH64_ARCH_NONE},
{"compnum", AARCH64_FEATURE (AARCH64_FEATURE_COMPNUM, 0),
AARCH64_FEATURE (AARCH64_FEATURE_F16
| AARCH64_FEATURE_SIMD, 0)},

View File

@ -194,6 +194,8 @@ automatically cause those extensions to be disabled.
@tab Enable Speculative Store Bypassing Safe state read and write.
@item @code{memtag} @tab ARMv8.5-A @tab No
@tab Enable ARMv8.5-A Memory Tagging Extensions.
@item @code{tme} @tab ARMv8-A @tab No
@tab Enable Transactional Memory Extensions.
@end multitable
@node AArch64 Syntax

View File

@ -0,0 +1,4 @@
#name: Invalid TME instructions
#as: -march=armv8-a+tme
#source: tme-invalid.s
#error_output: tme-invalid.l

View File

@ -0,0 +1,26 @@
[^:]*: Assembler messages:
.*: Error: immediate value out of range 0 to 65535 at operand 1 -- `tcancel -1'
.*: Error: immediate value out of range 0 to 65535 at operand 1 -- `tcancel 65536'
.*: Error: immediate value out of range 0 to 65535 at operand 1 -- `tcancel 0x10000'
.*: Error: constant expression required at operand 1 -- `tcancel 1b'
.*: Error: immediate operand required at operand 1 -- `tcancel w1'
.*: Error: immediate operand required at operand 1 -- `tcancel x1'
.*: Error: immediate operand required at operand 1 -- `tcancel w23'
.*: Error: immediate operand required at operand 1 -- `tcancel x23'
.*: Error: immediate operand required at operand 1 -- `tcancel wzr'
.*: Error: immediate operand required at operand 1 -- `tcancel xzr'
.*: Error: constant expression required at operand 1 -- `tcancel wsp'
.*: Error: constant expression required at operand 1 -- `tcancel xsp'
.*: Error: constant expression required at operand 1 -- `tcancel sp'
.*: Error: operand 1 must be an integer register -- `tstart'
.*: Error: operand mismatch -- `tstart w1'
.*: Info: did you mean this\?
.*: Info: tstart x1
.*: Error: operand mismatch -- `tstart w17'
.*: Info: did you mean this\?
.*: Info: tstart x17
.*: Error: operand mismatch -- `tstart wzr'
.*: Info: did you mean this\?
.*: Info: tstart xzr
.*: Error: operand 1 must be an integer register -- `tstart wsp'
.*: Error: operand 1 must be an integer register -- `tstart xsp'

View File

@ -0,0 +1,28 @@
// Instructions in this file are invalid.
// Other files provide more extensive testing of valid instructions;
# tcancel only accept 16bit unsigned constant immediate.
1:
tcancel -1
tcancel 65536
tcancel 0x10000
tcancel 1b
# tcancel doesn't accept any register.
tcancel w1
tcancel x1
tcancel w23
tcancel x23
tcancel wzr
tcancel xzr
tcancel wsp
tcancel xsp
tcancel sp
# tstart must has one X register operand.
tstart
tstart w1
tstart w17
tstart wzr
tstart wsp
tstart xsp

View File

@ -0,0 +1,22 @@
#as: -march=armv8-a+tme
#objdump: -dr
.* file format .*
Disassembly of section .*:
.* <.*>:
.*: d5233060 tstart x0
.*: d5233060 tstart x0
.*: d523306f tstart x15
.*: d523306f tstart x15
.*: d523307e tstart x30
.*: d523307e tstart x30
.*: d503307f tcommit
.*: d503307f tcommit
.*: d5233160 ttest x0
.*: d523317e ttest x30
.*: d4600000 tcancel #0
.*: d47fffe0 tcancel #65535
.*: d47fffe0 tcancel #65535
.*: d4600140 tcancel #10

View File

@ -0,0 +1,14 @@
tstart x0
TSTART X0
tstart x15
TSTART X15
tstart x30
TSTART X30
tcommit
TCOMMIT
ttest x0
TTEST X30
tcancel 0
TCANCEL 65535
tcancel 0xffff
TCANCEL 0XA

View File

@ -1,3 +1,8 @@
2019-05-01 Sudakshina Das <sudi.das@arm.com>
* opcode/aarch64.h (AARCH64_FEATURE_TME): New.
(enum aarch64_opnd): Add AARCH64_OPND_TME_UIMM16.
2019-04-26 Andrew Bennett <andrew.bennett@imgtec.com>
Faraz Shahbazker <fshahbazker@wavecomp.com>

View File

@ -86,7 +86,8 @@ typedef uint32_t aarch64_insn;
#define AARCH64_FEATURE_SSBS 0x800000000000ULL
/* Memory Tagging Extension. */
#define AARCH64_FEATURE_MEMTAG 0x1000000000000ULL
/* Transactional Memory Extension. */
#define AARCH64_FEATURE_TME 0x2000000000000ULL
/* Architectures are the sum of the base and extensions. */
#define AARCH64_ARCH_V8 AARCH64_FEATURE (AARCH64_FEATURE_V8, \
@ -409,6 +410,7 @@ enum aarch64_opnd
AARCH64_OPND_SVE_ZnxN, /* SVE vector register list in Zn. */
AARCH64_OPND_SVE_Zt, /* SVE vector register in Zt. */
AARCH64_OPND_SVE_ZtxN, /* SVE vector register list in Zt. */
AARCH64_OPND_TME_UIMM16, /* TME unsigned 16-bit immediate. */
AARCH64_OPND_SM3_IMM2, /* SM3 encodes lane in bits [13, 14]. */
};

View File

@ -1,3 +1,16 @@
2019-05-01 Sudakshina Das <sudi.das@arm.com>
* aarch64-asm-2.c: Regenerated.
* aarch64-dis-2.c: Regenerated.
* aarch64-opc-2.c: Regenerated.
* aarch64-opc.c (operand_general_constraint_met_p): Add case for
AARCH64_OPND_TME_UIMM16.
(aarch64_print_operand): Likewise.
* aarch64-tbl.h (QL_IMM_NIL): New.
(TME): New.
(_TME_INSN): New.
(struct aarch64_opcode): Add tstart, tcommit, ttest and tcancel.
2019-04-29 John Darrington <john@darrington.wattle.id.au>
* s12z-opc.c (shift_discrim): Return OP_INVALID when reading fails.

View File

@ -426,165 +426,165 @@ aarch64_find_real_opcode (const aarch64_opcode *opcode)
case 1183: /* movz */
value = 1183; /* --> movz. */
break;
case 1230: /* autibsp */
case 1229: /* autibz */
case 1228: /* autiasp */
case 1227: /* autiaz */
case 1226: /* pacibsp */
case 1225: /* pacibz */
case 1224: /* paciasp */
case 1223: /* paciaz */
case 1204: /* psb */
case 1203: /* esb */
case 1202: /* autib1716 */
case 1201: /* autia1716 */
case 1200: /* pacib1716 */
case 1199: /* pacia1716 */
case 1198: /* xpaclri */
case 1197: /* sevl */
case 1196: /* sev */
case 1195: /* wfi */
case 1194: /* wfe */
case 1193: /* yield */
case 1192: /* bti */
case 1191: /* csdb */
case 1190: /* nop */
case 1189: /* hint */
value = 1189; /* --> hint. */
case 1234: /* autibsp */
case 1233: /* autibz */
case 1232: /* autiasp */
case 1231: /* autiaz */
case 1230: /* pacibsp */
case 1229: /* pacibz */
case 1228: /* paciasp */
case 1227: /* paciaz */
case 1208: /* psb */
case 1207: /* esb */
case 1206: /* autib1716 */
case 1205: /* autia1716 */
case 1204: /* pacib1716 */
case 1203: /* pacia1716 */
case 1202: /* xpaclri */
case 1201: /* sevl */
case 1200: /* sev */
case 1199: /* wfi */
case 1198: /* wfe */
case 1197: /* yield */
case 1196: /* bti */
case 1195: /* csdb */
case 1194: /* nop */
case 1193: /* hint */
value = 1193; /* --> hint. */
break;
case 1208: /* pssbb */
case 1207: /* ssbb */
case 1206: /* dsb */
value = 1206; /* --> dsb. */
case 1212: /* pssbb */
case 1211: /* ssbb */
case 1210: /* dsb */
value = 1210; /* --> dsb. */
break;
case 1219: /* cpp */
case 1218: /* dvp */
case 1217: /* cfp */
case 1216: /* tlbi */
case 1215: /* ic */
case 1214: /* dc */
case 1213: /* at */
case 1212: /* sys */
value = 1212; /* --> sys. */
case 1223: /* cpp */
case 1222: /* dvp */
case 1221: /* cfp */
case 1220: /* tlbi */
case 1219: /* ic */
case 1218: /* dc */
case 1217: /* at */
case 1216: /* sys */
value = 1216; /* --> sys. */
break;
case 2028: /* bic */
case 1278: /* and */
value = 1278; /* --> and. */
case 2032: /* bic */
case 1282: /* and */
value = 1282; /* --> and. */
break;
case 1261: /* mov */
case 1280: /* and */
value = 1280; /* --> and. */
case 1265: /* mov */
case 1284: /* and */
value = 1284; /* --> and. */
break;
case 1265: /* movs */
case 1281: /* ands */
value = 1281; /* --> ands. */
case 1269: /* movs */
case 1285: /* ands */
value = 1285; /* --> ands. */
break;
case 2029: /* cmple */
case 1316: /* cmpge */
value = 1316; /* --> cmpge. */
case 2033: /* cmple */
case 1320: /* cmpge */
value = 1320; /* --> cmpge. */
break;
case 2032: /* cmplt */
case 1319: /* cmpgt */
value = 1319; /* --> cmpgt. */
case 2036: /* cmplt */
case 1323: /* cmpgt */
value = 1323; /* --> cmpgt. */
break;
case 2030: /* cmplo */
case 1321: /* cmphi */
value = 1321; /* --> cmphi. */
case 2034: /* cmplo */
case 1325: /* cmphi */
value = 1325; /* --> cmphi. */
break;
case 2031: /* cmpls */
case 1324: /* cmphs */
value = 1324; /* --> cmphs. */
break;
case 1258: /* mov */
case 1346: /* cpy */
value = 1346; /* --> cpy. */
break;
case 1260: /* mov */
case 1347: /* cpy */
value = 1347; /* --> cpy. */
break;
case 2039: /* fmov */
case 1263: /* mov */
case 1348: /* cpy */
value = 1348; /* --> cpy. */
break;
case 1253: /* mov */
case 1360: /* dup */
value = 1360; /* --> dup. */
break;
case 1255: /* mov */
case 1252: /* mov */
case 1361: /* dup */
value = 1361; /* --> dup. */
break;
case 2038: /* fmov */
case 1257: /* mov */
case 1362: /* dup */
value = 1362; /* --> dup. */
break;
case 1256: /* mov */
case 1363: /* dupm */
value = 1363; /* --> dupm. */
break;
case 2033: /* eon */
case 1365: /* eor */
value = 1365; /* --> eor. */
break;
case 1266: /* not */
case 1367: /* eor */
value = 1367; /* --> eor. */
break;
case 1267: /* nots */
case 1368: /* eors */
value = 1368; /* --> eors. */
break;
case 2034: /* facle */
case 1373: /* facge */
value = 1373; /* --> facge. */
break;
case 2035: /* faclt */
case 1374: /* facgt */
value = 1374; /* --> facgt. */
break;
case 2036: /* fcmle */
case 1387: /* fcmge */
value = 1387; /* --> fcmge. */
break;
case 2037: /* fcmlt */
case 1389: /* fcmgt */
value = 1389; /* --> fcmgt. */
break;
case 1250: /* fmov */
case 1395: /* fcpy */
value = 1395; /* --> fcpy. */
break;
case 1249: /* fmov */
case 1418: /* fdup */
value = 1418; /* --> fdup. */
break;
case 1251: /* mov */
case 1749: /* orr */
value = 1749; /* --> orr. */
break;
case 2040: /* orn */
case 1750: /* orr */
value = 1750; /* --> orr. */
break;
case 1254: /* mov */
case 1752: /* orr */
value = 1752; /* --> orr. */
break;
case 1264: /* movs */
case 1753: /* orrs */
value = 1753; /* --> orrs. */
break;
case 1259: /* mov */
case 1815: /* sel */
value = 1815; /* --> sel. */
case 2035: /* cmpls */
case 1328: /* cmphs */
value = 1328; /* --> cmphs. */
break;
case 1262: /* mov */
case 1816: /* sel */
value = 1816; /* --> sel. */
case 1350: /* cpy */
value = 1350; /* --> cpy. */
break;
case 1264: /* mov */
case 1351: /* cpy */
value = 1351; /* --> cpy. */
break;
case 2043: /* fmov */
case 1267: /* mov */
case 1352: /* cpy */
value = 1352; /* --> cpy. */
break;
case 1257: /* mov */
case 1364: /* dup */
value = 1364; /* --> dup. */
break;
case 1259: /* mov */
case 1256: /* mov */
case 1365: /* dup */
value = 1365; /* --> dup. */
break;
case 2042: /* fmov */
case 1261: /* mov */
case 1366: /* dup */
value = 1366; /* --> dup. */
break;
case 1260: /* mov */
case 1367: /* dupm */
value = 1367; /* --> dupm. */
break;
case 2037: /* eon */
case 1369: /* eor */
value = 1369; /* --> eor. */
break;
case 1270: /* not */
case 1371: /* eor */
value = 1371; /* --> eor. */
break;
case 1271: /* nots */
case 1372: /* eors */
value = 1372; /* --> eors. */
break;
case 2038: /* facle */
case 1377: /* facge */
value = 1377; /* --> facge. */
break;
case 2039: /* faclt */
case 1378: /* facgt */
value = 1378; /* --> facgt. */
break;
case 2040: /* fcmle */
case 1391: /* fcmge */
value = 1391; /* --> fcmge. */
break;
case 2041: /* fcmlt */
case 1393: /* fcmgt */
value = 1393; /* --> fcmgt. */
break;
case 1254: /* fmov */
case 1399: /* fcpy */
value = 1399; /* --> fcpy. */
break;
case 1253: /* fmov */
case 1422: /* fdup */
value = 1422; /* --> fdup. */
break;
case 1255: /* mov */
case 1753: /* orr */
value = 1753; /* --> orr. */
break;
case 2044: /* orn */
case 1754: /* orr */
value = 1754; /* --> orr. */
break;
case 1258: /* mov */
case 1756: /* orr */
value = 1756; /* --> orr. */
break;
case 1268: /* movs */
case 1757: /* orrs */
value = 1757; /* --> orrs. */
break;
case 1263: /* mov */
case 1819: /* sel */
value = 1819; /* --> sel. */
break;
case 1266: /* mov */
case 1820: /* sel */
value = 1820; /* --> sel. */
break;
default: return NULL;
}
@ -660,7 +660,7 @@ aarch64_insert_operand (const aarch64_operand *self,
case 32:
case 33:
case 34:
case 199:
case 200:
return aarch64_ins_reglane (self, info, code, inst, errors);
case 35:
return aarch64_ins_reglist (self, info, code, inst, errors);
@ -704,6 +704,7 @@ aarch64_insert_operand (const aarch64_operand *self,
case 179:
case 180:
case 181:
case 199:
return aarch64_ins_imm (self, info, code, inst, errors);
case 43:
case 44:

File diff suppressed because it is too large Load Diff

View File

@ -223,6 +223,7 @@ const struct aarch64_operand aarch64_operands[] =
{AARCH64_OPND_CLASS_SVE_REG, "SVE_ZnxN", OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {FLD_SVE_Zn}, "a list of SVE vector registers"},
{AARCH64_OPND_CLASS_SVE_REG, "SVE_Zt", OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {FLD_SVE_Zt}, "an SVE vector register"},
{AARCH64_OPND_CLASS_SVE_REG, "SVE_ZtxN", OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {FLD_SVE_Zt}, "a list of SVE vector registers"},
{AARCH64_OPND_CLASS_IMMEDIATE, "TME_UIMM16", OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {FLD_imm16}, "a 16-bit unsigned immediate for TME tcancel"},
{AARCH64_OPND_CLASS_SIMD_ELEMENT, "SM3_IMM2", OPD_F_HAS_INSERTER | OPD_F_HAS_EXTRACTOR, {FLD_SM3_imm2}, "an indexed SM3 vector immediate"},
{AARCH64_OPND_CLASS_NIL, "", 0, {0}, "DUMMY"},
};
@ -301,17 +302,17 @@ static const unsigned op_enum_table [] =
391,
413,
415,
1254,
1259,
1252,
1251,
1258,
1263,
1256,
1255,
1262,
1264,
1265,
1261,
1267,
1259,
1266,
1268,
1269,
1265,
1271,
1270,
131,
};

View File

@ -2125,6 +2125,7 @@ operand_general_constraint_met_p (const aarch64_opnd_info *opnds, int idx,
case AARCH64_OPND_NZCV:
case AARCH64_OPND_CCMP_IMM:
case AARCH64_OPND_EXCEPTION:
case AARCH64_OPND_TME_UIMM16:
case AARCH64_OPND_UIMM4:
case AARCH64_OPND_UIMM4_ADDG:
case AARCH64_OPND_UIMM7:
@ -3326,6 +3327,7 @@ aarch64_print_operand (char *buf, size_t size, bfd_vma pc,
case AARCH64_OPND_IMMR:
case AARCH64_OPND_IMMS:
case AARCH64_OPND_FBITS:
case AARCH64_OPND_TME_UIMM16:
case AARCH64_OPND_SIMM5:
case AARCH64_OPND_SVE_SHLIMM_PRED:
case AARCH64_OPND_SVE_SHLIMM_UNPRED:

View File

@ -74,6 +74,12 @@
QLF2(X,NIL), \
}
/* e.g. TCANCEL #<imm>. */
#define QL_IMM_NIL \
{ \
QLF1(NIL), \
}
/* e.g. B.<cond> <label>. */
#define QL_PCREL_NIL \
{ \
@ -2198,6 +2204,8 @@ static const aarch64_feature_set aarch64_feature_bti =
AARCH64_FEATURE (AARCH64_FEATURE_BTI, 0);
static const aarch64_feature_set aarch64_feature_memtag =
AARCH64_FEATURE (AARCH64_FEATURE_V8_5 | AARCH64_FEATURE_MEMTAG, 0);
static const aarch64_feature_set aarch64_feature_tme =
AARCH64_FEATURE (AARCH64_FEATURE_TME, 0);
#define CORE &aarch64_feature_v8
@ -2233,6 +2241,7 @@ static const aarch64_feature_set aarch64_feature_memtag =
#define PREDRES &aarch64_feature_predres
#define BTI &aarch64_feature_bti
#define MEMTAG &aarch64_feature_memtag
#define TME &aarch64_feature_tme
#define CORE_INSN(NAME,OPCODE,MASK,CLASS,OP,OPS,QUALS,FLAGS) \
{ NAME, OPCODE, MASK, CLASS, OP, CORE, OPS, QUALS, FLAGS, 0, 0, NULL }
@ -2300,6 +2309,8 @@ static const aarch64_feature_set aarch64_feature_memtag =
{ NAME, OPCODE, MASK, CLASS, 0, BTI, OPS, QUALS, FLAGS, 0, 0, NULL }
#define MEMTAG_INSN(NAME,OPCODE,MASK,CLASS,OPS,QUALS,FLAGS) \
{ NAME, OPCODE, MASK, CLASS, 0, MEMTAG, OPS, QUALS, FLAGS, 0, 0, NULL }
#define _TME_INSN(NAME,OPCODE,MASK,CLASS,OP,OPS,QUALS,FLAGS) \
{ NAME, OPCODE, MASK, CLASS, OP, TME, OPS, QUALS, FLAGS, 0, 0, NULL }
struct aarch64_opcode aarch64_opcode_table[] =
{
@ -3564,6 +3575,11 @@ struct aarch64_opcode aarch64_opcode_table[] =
/* PC-rel. addressing. */
CORE_INSN ("adr", 0x10000000, 0x9f000000, pcreladdr, 0, OP2 (Rd, ADDR_PCREL21), QL_ADRP, 0),
CORE_INSN ("adrp", 0x90000000, 0x9f000000, pcreladdr, 0, OP2 (Rd, ADDR_ADRP), QL_ADRP, 0),
/* TME Instructions. */
_TME_INSN ("tstart", 0xd5233060, 0xffffffe0, 0, 0, OP1 (Rd), QL_I1X, 0),
_TME_INSN ("tcommit", 0xd503307f, 0xffffffff, 0, 0, OP0 (), {}, 0),
_TME_INSN ("ttest", 0xd5233160, 0xffffffe0, 0, 0, OP1 (Rd), QL_I1X, 0),
_TME_INSN ("tcancel", 0xd4600000, 0xffe0001f, 0, 0, OP1 (TME_UIMM16), QL_IMM_NIL, 0),
/* System. */
CORE_INSN ("msr", 0xd500401f, 0xfff8f01f, ic_system, 0, OP2 (PSTATEFIELD, UIMM4), {}, F_SYS_WRITE),
CORE_INSN ("hint",0xd503201f, 0xfffff01f, ic_system, 0, OP1 (UIMM7), {}, F_HAS_ALIAS),
@ -4919,5 +4935,7 @@ struct aarch64_opcode aarch64_opcode_table[] =
"an SVE vector register") \
Y(SVE_REG, sve_reglist, "SVE_ZtxN", 0, F(FLD_SVE_Zt), \
"a list of SVE vector registers") \
Y(IMMEDIATE, imm, "TME_UIMM16", 0, F(FLD_imm16), \
"a 16-bit unsigned immediate for TME tcancel") \
Y(SIMD_ELEMENT, reglane, "SM3_IMM2", 0, F(FLD_SM3_imm2), \
"an indexed SM3 vector immediate")