aarch64: Add WFET instruction for Armv8.7-a
This patch adds new to Armv8.7 WFET instruction which take one operand: WFET <Xt> Where: <Xt> is 64-bit name of the general-purpose source register, encoded in the "Rd" field. For more details regarding WFET (Wait For Event with Timeout) instruction for Armv8.7-a please refer to Arm A64 Instruction set documentation for Armv8-A architecture profile, see document pages 565 of [0]. [0]: https://developer.arm.com/docs/ddi0596/i gas/ChangeLog: 2020-10-27 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com> * NEWS: Update docs. * testsuite/gas/aarch64/system-5.d: New test. * testsuite/gas/aarch64/system-5.s: New test. opcodes/ChangeLog: 2020-10-27 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com> * aarch64-tbl.h (struct aarch64_opcode): Add new WFET instruction encoding and operand description. * aarch64-asm-2.c: Regenerated. * aarch64-dis-2.c: Regenerated. * aarch64-opc-2.c: Regenerated.
This commit is contained in:
parent
fd195909ce
commit
82503ca7ed
7 changed files with 1429 additions and 1349 deletions
3
gas/NEWS
3
gas/NEWS
|
@ -21,7 +21,8 @@
|
|||
|
||||
* Add support for Armv8-R and Armv8.7-A AArch64.
|
||||
|
||||
* Add support for DSB memory nXS barrier instruction for Armv8.7 AArch64.
|
||||
* Add support for DSB memory nXS barrier and WFET instruction for Armv8.7
|
||||
AArch64.
|
||||
|
||||
* Add support for Intel TDX instructions.
|
||||
|
||||
|
|
39
gas/testsuite/gas/aarch64/system-5.d
Normal file
39
gas/testsuite/gas/aarch64/system-5.d
Normal file
|
@ -0,0 +1,39 @@
|
|||
#name: WFET (Wait For Event with Timeout) instruction
|
||||
#objdump: -dr
|
||||
|
||||
.*: file format .*
|
||||
|
||||
Disassembly of section \.text:
|
||||
|
||||
0+ <.*>:
|
||||
.*: d5031000 wfet x0
|
||||
.*: d5031001 wfet x1
|
||||
.*: d5031002 wfet x2
|
||||
.*: d5031003 wfet x3
|
||||
.*: d5031004 wfet x4
|
||||
.*: d5031005 wfet x5
|
||||
.*: d5031006 wfet x6
|
||||
.*: d5031007 wfet x7
|
||||
.*: d5031008 wfet x8
|
||||
.*: d5031009 wfet x9
|
||||
.*: d503100a wfet x10
|
||||
.*: d503100b wfet x11
|
||||
.*: d503100c wfet x12
|
||||
.*: d503100d wfet x13
|
||||
.*: d503100e wfet x14
|
||||
.*: d503100f wfet x15
|
||||
.*: d5031010 wfet x16
|
||||
.*: d5031011 wfet x17
|
||||
.*: d5031012 wfet x18
|
||||
.*: d5031013 wfet x19
|
||||
.*: d5031014 wfet x20
|
||||
.*: d5031015 wfet x21
|
||||
.*: d5031016 wfet x22
|
||||
.*: d5031017 wfet x23
|
||||
.*: d5031018 wfet x24
|
||||
.*: d5031019 wfet x25
|
||||
.*: d503101a wfet x26
|
||||
.*: d503101b wfet x27
|
||||
.*: d503101c wfet x28
|
||||
.*: d503101d wfet x29
|
||||
.*: d503101e wfet x30
|
34
gas/testsuite/gas/aarch64/system-5.s
Normal file
34
gas/testsuite/gas/aarch64/system-5.s
Normal file
|
@ -0,0 +1,34 @@
|
|||
/* Wait For Event with Timeout is a Armv8.7 instruction. */
|
||||
.arch armv8.7-a
|
||||
|
||||
wfet x0
|
||||
wfet x1
|
||||
wfet x2
|
||||
wfet x3
|
||||
wfet x4
|
||||
wfet x5
|
||||
wfet x6
|
||||
wfet x7
|
||||
wfet x8
|
||||
wfet x9
|
||||
wfet x10
|
||||
wfet x11
|
||||
wfet x12
|
||||
wfet x13
|
||||
wfet x14
|
||||
wfet x15
|
||||
wfet x16
|
||||
wfet x17
|
||||
wfet x18
|
||||
wfet x19
|
||||
wfet x20
|
||||
wfet x21
|
||||
wfet x22
|
||||
wfet x23
|
||||
wfet x24
|
||||
wfet x25
|
||||
wfet x26
|
||||
wfet x27
|
||||
wfet x28
|
||||
wfet x29
|
||||
wfet x30
|
|
@ -426,14 +426,14 @@ aarch64_find_real_opcode (const aarch64_opcode *opcode)
|
|||
case 1184: /* movz */
|
||||
value = 1184; /* --> movz. */
|
||||
break;
|
||||
case 1240: /* autibsp */
|
||||
case 1239: /* autibz */
|
||||
case 1238: /* autiasp */
|
||||
case 1237: /* autiaz */
|
||||
case 1236: /* pacibsp */
|
||||
case 1235: /* pacibz */
|
||||
case 1234: /* paciasp */
|
||||
case 1233: /* paciaz */
|
||||
case 1241: /* autibsp */
|
||||
case 1240: /* autibz */
|
||||
case 1239: /* autiasp */
|
||||
case 1238: /* autiaz */
|
||||
case 1237: /* pacibsp */
|
||||
case 1236: /* pacibz */
|
||||
case 1235: /* paciasp */
|
||||
case 1234: /* paciaz */
|
||||
case 1211: /* tsb */
|
||||
case 1210: /* psb */
|
||||
case 1209: /* esb */
|
||||
|
@ -462,9 +462,9 @@ aarch64_find_real_opcode (const aarch64_opcode *opcode)
|
|||
case 1214: /* dsb */
|
||||
value = 1214; /* --> dsb. */
|
||||
break;
|
||||
case 1228: /* cpp */
|
||||
case 1227: /* dvp */
|
||||
case 1226: /* cfp */
|
||||
case 1229: /* cpp */
|
||||
case 1228: /* dvp */
|
||||
case 1227: /* cfp */
|
||||
case 1225: /* tlbi */
|
||||
case 1224: /* ic */
|
||||
case 1223: /* dc */
|
||||
|
@ -472,125 +472,128 @@ aarch64_find_real_opcode (const aarch64_opcode *opcode)
|
|||
case 1221: /* sys */
|
||||
value = 1221; /* --> sys. */
|
||||
break;
|
||||
case 2038: /* bic */
|
||||
case 1288: /* and */
|
||||
value = 1288; /* --> and. */
|
||||
case 1226: /* wfet */
|
||||
value = 1226; /* --> wfet. */
|
||||
break;
|
||||
case 1271: /* mov */
|
||||
case 1290: /* and */
|
||||
value = 1290; /* --> and. */
|
||||
case 2039: /* bic */
|
||||
case 1289: /* and */
|
||||
value = 1289; /* --> and. */
|
||||
break;
|
||||
case 1275: /* movs */
|
||||
case 1291: /* ands */
|
||||
value = 1291; /* --> ands. */
|
||||
case 1272: /* mov */
|
||||
case 1291: /* and */
|
||||
value = 1291; /* --> and. */
|
||||
break;
|
||||
case 2039: /* cmple */
|
||||
case 1326: /* cmpge */
|
||||
value = 1326; /* --> cmpge. */
|
||||
case 1276: /* movs */
|
||||
case 1292: /* ands */
|
||||
value = 1292; /* --> ands. */
|
||||
break;
|
||||
case 2042: /* cmplt */
|
||||
case 1329: /* cmpgt */
|
||||
value = 1329; /* --> cmpgt. */
|
||||
case 2040: /* cmple */
|
||||
case 1327: /* cmpge */
|
||||
value = 1327; /* --> cmpge. */
|
||||
break;
|
||||
case 2040: /* cmplo */
|
||||
case 1331: /* cmphi */
|
||||
value = 1331; /* --> cmphi. */
|
||||
case 2043: /* cmplt */
|
||||
case 1330: /* cmpgt */
|
||||
value = 1330; /* --> cmpgt. */
|
||||
break;
|
||||
case 2041: /* cmpls */
|
||||
case 1334: /* cmphs */
|
||||
value = 1334; /* --> cmphs. */
|
||||
case 2041: /* cmplo */
|
||||
case 1332: /* cmphi */
|
||||
value = 1332; /* --> cmphi. */
|
||||
break;
|
||||
case 1268: /* mov */
|
||||
case 1356: /* cpy */
|
||||
value = 1356; /* --> cpy. */
|
||||
case 2042: /* cmpls */
|
||||
case 1335: /* cmphs */
|
||||
value = 1335; /* --> cmphs. */
|
||||
break;
|
||||
case 1270: /* mov */
|
||||
case 1269: /* mov */
|
||||
case 1357: /* cpy */
|
||||
value = 1357; /* --> cpy. */
|
||||
break;
|
||||
case 2049: /* fmov */
|
||||
case 1273: /* mov */
|
||||
case 1271: /* mov */
|
||||
case 1358: /* cpy */
|
||||
value = 1358; /* --> cpy. */
|
||||
break;
|
||||
case 1263: /* mov */
|
||||
case 1370: /* dup */
|
||||
value = 1370; /* --> dup. */
|
||||
case 2050: /* fmov */
|
||||
case 1274: /* mov */
|
||||
case 1359: /* cpy */
|
||||
value = 1359; /* --> cpy. */
|
||||
break;
|
||||
case 1265: /* mov */
|
||||
case 1262: /* mov */
|
||||
case 1264: /* mov */
|
||||
case 1371: /* dup */
|
||||
value = 1371; /* --> dup. */
|
||||
break;
|
||||
case 2048: /* fmov */
|
||||
case 1267: /* mov */
|
||||
case 1266: /* mov */
|
||||
case 1263: /* mov */
|
||||
case 1372: /* dup */
|
||||
value = 1372; /* --> dup. */
|
||||
break;
|
||||
case 1266: /* mov */
|
||||
case 1373: /* dupm */
|
||||
value = 1373; /* --> dupm. */
|
||||
case 2049: /* fmov */
|
||||
case 1268: /* mov */
|
||||
case 1373: /* dup */
|
||||
value = 1373; /* --> dup. */
|
||||
break;
|
||||
case 2043: /* eon */
|
||||
case 1375: /* eor */
|
||||
value = 1375; /* --> eor. */
|
||||
case 1267: /* mov */
|
||||
case 1374: /* dupm */
|
||||
value = 1374; /* --> dupm. */
|
||||
break;
|
||||
case 1276: /* not */
|
||||
case 1377: /* eor */
|
||||
value = 1377; /* --> eor. */
|
||||
case 2044: /* eon */
|
||||
case 1376: /* eor */
|
||||
value = 1376; /* --> eor. */
|
||||
break;
|
||||
case 1277: /* nots */
|
||||
case 1378: /* eors */
|
||||
value = 1378; /* --> eors. */
|
||||
case 1277: /* not */
|
||||
case 1378: /* eor */
|
||||
value = 1378; /* --> eor. */
|
||||
break;
|
||||
case 2044: /* facle */
|
||||
case 1383: /* facge */
|
||||
value = 1383; /* --> facge. */
|
||||
case 1278: /* nots */
|
||||
case 1379: /* eors */
|
||||
value = 1379; /* --> eors. */
|
||||
break;
|
||||
case 2045: /* faclt */
|
||||
case 1384: /* facgt */
|
||||
value = 1384; /* --> facgt. */
|
||||
case 2045: /* facle */
|
||||
case 1384: /* facge */
|
||||
value = 1384; /* --> facge. */
|
||||
break;
|
||||
case 2046: /* fcmle */
|
||||
case 1397: /* fcmge */
|
||||
value = 1397; /* --> fcmge. */
|
||||
case 2046: /* faclt */
|
||||
case 1385: /* facgt */
|
||||
value = 1385; /* --> facgt. */
|
||||
break;
|
||||
case 2047: /* fcmlt */
|
||||
case 1399: /* fcmgt */
|
||||
value = 1399; /* --> fcmgt. */
|
||||
case 2047: /* fcmle */
|
||||
case 1398: /* fcmge */
|
||||
value = 1398; /* --> fcmge. */
|
||||
break;
|
||||
case 2048: /* fcmlt */
|
||||
case 1400: /* fcmgt */
|
||||
value = 1400; /* --> fcmgt. */
|
||||
break;
|
||||
case 1261: /* fmov */
|
||||
case 1406: /* fcpy */
|
||||
value = 1406; /* --> fcpy. */
|
||||
break;
|
||||
case 1260: /* fmov */
|
||||
case 1405: /* fcpy */
|
||||
value = 1405; /* --> fcpy. */
|
||||
case 1429: /* fdup */
|
||||
value = 1429; /* --> fdup. */
|
||||
break;
|
||||
case 1259: /* fmov */
|
||||
case 1428: /* fdup */
|
||||
value = 1428; /* --> fdup. */
|
||||
break;
|
||||
case 1261: /* mov */
|
||||
case 1759: /* orr */
|
||||
value = 1759; /* --> orr. */
|
||||
break;
|
||||
case 2050: /* orn */
|
||||
case 1262: /* mov */
|
||||
case 1760: /* orr */
|
||||
value = 1760; /* --> orr. */
|
||||
break;
|
||||
case 1264: /* mov */
|
||||
case 1762: /* orr */
|
||||
value = 1762; /* --> orr. */
|
||||
case 2051: /* orn */
|
||||
case 1761: /* orr */
|
||||
value = 1761; /* --> orr. */
|
||||
break;
|
||||
case 1274: /* movs */
|
||||
case 1763: /* orrs */
|
||||
value = 1763; /* --> orrs. */
|
||||
case 1265: /* mov */
|
||||
case 1763: /* orr */
|
||||
value = 1763; /* --> orr. */
|
||||
break;
|
||||
case 1269: /* mov */
|
||||
case 1825: /* sel */
|
||||
value = 1825; /* --> sel. */
|
||||
case 1275: /* movs */
|
||||
case 1764: /* orrs */
|
||||
value = 1764; /* --> orrs. */
|
||||
break;
|
||||
case 1272: /* mov */
|
||||
case 1270: /* mov */
|
||||
case 1826: /* sel */
|
||||
value = 1826; /* --> sel. */
|
||||
break;
|
||||
case 1273: /* mov */
|
||||
case 1827: /* sel */
|
||||
value = 1827; /* --> sel. */
|
||||
break;
|
||||
default: return NULL;
|
||||
}
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -311,17 +311,17 @@ static const unsigned op_enum_table [] =
|
|||
391,
|
||||
413,
|
||||
415,
|
||||
1264,
|
||||
1269,
|
||||
1262,
|
||||
1261,
|
||||
1265,
|
||||
1272,
|
||||
1274,
|
||||
1270,
|
||||
1263,
|
||||
1262,
|
||||
1266,
|
||||
1273,
|
||||
1275,
|
||||
1271,
|
||||
1277,
|
||||
1276,
|
||||
1272,
|
||||
1278,
|
||||
1277,
|
||||
131,
|
||||
};
|
||||
|
||||
|
|
|
@ -3867,6 +3867,7 @@ struct aarch64_opcode aarch64_opcode_table[] =
|
|||
CORE_INSN ("dc", 0xd5080000, 0xfff80000, ic_system, 0, OP2 (SYSREG_DC, Rt), QL_SRC_X, F_ALIAS),
|
||||
CORE_INSN ("ic", 0xd5080000, 0xfff80000, ic_system, 0, OP2 (SYSREG_IC, Rt_SYS), QL_SRC_X, F_ALIAS | F_OPD1_OPT | F_DEFAULT (0x1F)),
|
||||
CORE_INSN ("tlbi",0xd5080000, 0xfff80000, ic_system, 0, OP2 (SYSREG_TLBI, Rt_SYS), QL_SRC_X, F_ALIAS | F_OPD1_OPT | F_DEFAULT (0x1F)),
|
||||
V8_7_INSN ("wfet", 0xd5031000, 0xffffffe0, ic_system, OP1 (Rd), QL_I1X, F_HAS_ALIAS),
|
||||
PREDRES_INSN ("cfp", 0xd50b7380, 0xffffffe0, ic_system, OP2 (SYSREG_SR, Rt), QL_SRC_X, F_ALIAS),
|
||||
PREDRES_INSN ("dvp", 0xd50b73a0, 0xffffffe0, ic_system, OP2 (SYSREG_SR, Rt), QL_SRC_X, F_ALIAS),
|
||||
PREDRES_INSN ("cpp", 0xd50b73e0, 0xffffffe0, ic_system, OP2 (SYSREG_SR, Rt), QL_SRC_X, F_ALIAS),
|
||||
|
|
Loading…
Add table
Reference in a new issue