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:
Przemyslaw Wirkus 2020-10-28 14:09:25 +00:00
parent fd195909ce
commit 82503ca7ed
7 changed files with 1429 additions and 1349 deletions

View file

@ -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.

View 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

View 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

View file

@ -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

View file

@ -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,
};

View file

@ -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),