From 22a5455c6ccaf6157095863f9e6da33a81541acf Mon Sep 17 00:00:00 2001 From: Matthew Wahab Date: Thu, 10 Dec 2015 16:58:51 +0000 Subject: [PATCH] [Aarch64] Support ARMv8.2 AT instructions ARMv8.2 adds new instructions AT S1E1RP and AT S1E1WP to Aarch64. This patch adds support for the instructions, making them available when -march=armv8.2-a is selected. gas/testsuite/ 2015-12-10 Matthew Wahab * gas/aarch64/sysreg-2.d: Update for new tests for AT S1E1RP and AT S1E1WP. * gas/aarch64/sysreg-2.s: Add tests for AT S1E1RP and AT S1E1WP. opcodes/ 2015-12-10 Matthew Wahab * aarch64-opc.c (aarch64_sys_regs_at): Add "s1e1rp" and "s1e1wp". (aarch64_sys_ins_reg_supported_p): Add ARMv8.2 system register feature test for "s1e1rp" and "s1e1wp". Change-Id: I09e1044b629ab0a34b03c423e8d4e71ff92daad4 --- gas/testsuite/ChangeLog | 6 ++++++ gas/testsuite/gas/aarch64/sysreg-2.d | 2 ++ gas/testsuite/gas/aarch64/sysreg-2.s | 5 +++++ opcodes/ChangeLog | 6 ++++++ opcodes/aarch64-opc.c | 8 ++++++++ 5 files changed, 27 insertions(+) diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 1a2f004366..4027a7c890 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2015-12-10 Matthew Wahab + + * gas/aarch64/sysreg-2.d: Update for new tests for AT S1E1RP and + AT S1E1WP. + * gas/aarch64/sysreg-2.s: Add tests for AT S1E1RP and AT S1E1WP. + 2015-12-10 Matthew Wahab * gas/aarch64/sysreg-2.d: Add tests for dc instruction. diff --git a/gas/testsuite/gas/aarch64/sysreg-2.d b/gas/testsuite/gas/aarch64/sysreg-2.d index dffe08f83e..f73412f0dd 100644 --- a/gas/testsuite/gas/aarch64/sysreg-2.d +++ b/gas/testsuite/gas/aarch64/sysreg-2.d @@ -30,3 +30,5 @@ Disassembly of section .text: [0-9a-f]+: d50b7a20 dc cvac, x0 [0-9a-f]+: d50b7b21 dc cvau, x1 [0-9a-f]+: d50b7c22 dc cvap, x2 + [0-9a-f]+: d5087900 at s1e1rp, x0 + [0-9a-f]+: d5087921 at s1e1wp, x1 diff --git a/gas/testsuite/gas/aarch64/sysreg-2.s b/gas/testsuite/gas/aarch64/sysreg-2.s index 62b3a5e8af..f89d057969 100644 --- a/gas/testsuite/gas/aarch64/sysreg-2.s +++ b/gas/testsuite/gas/aarch64/sysreg-2.s @@ -36,3 +36,8 @@ dc cvac, x0 dc cvau, x1 dc cvap, x2 + + /* AT. */ + + at s1e1rp, x0 + at s1e1wp, x1 diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 3d84fbe1b5..aec423bfab 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,9 @@ +2015-12-10 Matthew Wahab + + * aarch64-opc.c (aarch64_sys_regs_at): Add "s1e1rp" and "s1e1wp". + (aarch64_sys_ins_reg_supported_p): Add ARMv8.2 system register + feature test for "s1e1rp" and "s1e1wp". + 2015-12-10 Matthew Wahab * aarch64-opc.c (aarch64_sys_regs_dc): Add "cvap". diff --git a/opcodes/aarch64-opc.c b/opcodes/aarch64-opc.c index 86aeae004f..b2f772e8b4 100644 --- a/opcodes/aarch64-opc.c +++ b/opcodes/aarch64-opc.c @@ -3245,6 +3245,12 @@ aarch64_pstatefield_supported_p (const aarch64_feature_set features, && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_2)) return FALSE; + /* AT S1E1RP, AT S1E1WP. Values are from aarch64_sys_regs_at. */ + if ((reg->value == CPENS (0, C7, C9, 0) + || reg->value == CPENS (0, C7, C9, 1)) + && !AARCH64_CPU_HAS_FEATURE (features, AARCH64_FEATURE_V8_2)) + return FALSE; + return TRUE; } @@ -3284,6 +3290,8 @@ const aarch64_sys_ins_reg aarch64_sys_regs_at[] = { "s1e2w", CPENS (4, C7, C8, 1), F_HASXT }, { "s1e3r", CPENS (6, C7, C8, 0), F_HASXT }, { "s1e3w", CPENS (6, C7, C8, 1), F_HASXT }, + { "s1e1rp", CPENS (0, C7, C9, 0), F_HASXT | F_ARCHEXT }, + { "s1e1wp", CPENS (0, C7, C9, 1), F_HASXT | F_ARCHEXT }, { 0, CPENS(0,0,0,0), 0 } }; -- 2.34.1