mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-18 12:24:38 +08:00
[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:
parent
2ecde2b632
commit
b83b4b1382
@ -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.
|
||||
|
@ -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)},
|
||||
|
@ -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
|
||||
|
4
gas/testsuite/gas/aarch64/tme-invalid.d
Normal file
4
gas/testsuite/gas/aarch64/tme-invalid.d
Normal file
@ -0,0 +1,4 @@
|
||||
#name: Invalid TME instructions
|
||||
#as: -march=armv8-a+tme
|
||||
#source: tme-invalid.s
|
||||
#error_output: tme-invalid.l
|
26
gas/testsuite/gas/aarch64/tme-invalid.l
Normal file
26
gas/testsuite/gas/aarch64/tme-invalid.l
Normal 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'
|
28
gas/testsuite/gas/aarch64/tme-invalid.s
Normal file
28
gas/testsuite/gas/aarch64/tme-invalid.s
Normal 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
|
22
gas/testsuite/gas/aarch64/tme.d
Normal file
22
gas/testsuite/gas/aarch64/tme.d
Normal 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
|
14
gas/testsuite/gas/aarch64/tme.s
Normal file
14
gas/testsuite/gas/aarch64/tme.s
Normal 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
|
@ -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>
|
||||
|
||||
|
@ -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]. */
|
||||
};
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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
@ -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,
|
||||
};
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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")
|
||||
|
Loading…
Reference in New Issue
Block a user