aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/config/tc-aarch64.c1
-rw-r--r--gas/doc/c-aarch64.texi3
-rw-r--r--gas/testsuite/gas/aarch64/sysreg-8.d4
-rw-r--r--gas/testsuite/gas/aarch64/sysreg-8.s5
-rw-r--r--include/opcode/aarch64.h2
-rw-r--r--opcodes/aarch64-opc.c5
-rw-r--r--opcodes/aarch64-sys-regs.def2
-rw-r--r--opcodes/aarch64-tbl.h3
8 files changed, 25 insertions, 0 deletions
diff --git a/gas/config/tc-aarch64.c b/gas/config/tc-aarch64.c
index 1f687fe..c6566e1 100644
--- a/gas/config/tc-aarch64.c
+++ b/gas/config/tc-aarch64.c
@@ -10285,6 +10285,7 @@ static const struct aarch64_option_cpu_value_table aarch64_features[] = {
{"cssc", AARCH64_FEATURE (CSSC), AARCH64_NO_FEATURES},
{"chk", AARCH64_FEATURE (CHK), AARCH64_NO_FEATURES},
{"gcs", AARCH64_FEATURE (GCS), AARCH64_NO_FEATURES},
+ {"the", AARCH64_FEATURE (THE), AARCH64_NO_FEATURES},
{NULL, AARCH64_NO_FEATURES, AARCH64_NO_FEATURES},
};
diff --git a/gas/doc/c-aarch64.texi b/gas/doc/c-aarch64.texi
index a3ca714..8af38f2 100644
--- a/gas/doc/c-aarch64.texi
+++ b/gas/doc/c-aarch64.texi
@@ -263,6 +263,9 @@ automatically cause those extensions to be disabled.
@tab Enable Check Feature Status Extension.
@item @code{gcs} @tab N/A @tab No
@tab Enable Guarded Control Stack Extension.
+@item @code{the} @tab ARMv8-A/Armv9-A @tab ARMv8.9-A/Armv9.4-A or later
+ @tab Enable Translation Hardening extension.
+
@end multitable
@node AArch64 Syntax
diff --git a/gas/testsuite/gas/aarch64/sysreg-8.d b/gas/testsuite/gas/aarch64/sysreg-8.d
index 3be4120..09b6724 100644
--- a/gas/testsuite/gas/aarch64/sysreg-8.d
+++ b/gas/testsuite/gas/aarch64/sysreg-8.d
@@ -289,3 +289,7 @@ Disassembly of section \.text:
[^:]*: d5189923 msr pmsnevfr_el1, x3
[^:]*: d53c1242 mrs x2, hcrx_el2
[^:]*: d51c1243 msr hcrx_el2, x3
+[^:]*: d538d0c2 mrs x2, rcwmask_el1
+[^:]*: d518d0c3 msr rcwmask_el1, x3
+[^:]*: d538d062 mrs x2, rcwsmask_el1
+[^:]*: d518d063 msr rcwsmask_el1, x3
diff --git a/gas/testsuite/gas/aarch64/sysreg-8.s b/gas/testsuite/gas/aarch64/sysreg-8.s
index 8ce36c7..21daa8c 100644
--- a/gas/testsuite/gas/aarch64/sysreg-8.s
+++ b/gas/testsuite/gas/aarch64/sysreg-8.s
@@ -185,3 +185,8 @@
rwreg pmsnevfr_el1
rwreg hcrx_el2
+
+ .arch armv8-a+the
+
+ rwreg rcwmask_el1
+ rwreg rcwsmask_el1
diff --git a/include/opcode/aarch64.h b/include/opcode/aarch64.h
index 72d8ec2..c081760 100644
--- a/include/opcode/aarch64.h
+++ b/include/opcode/aarch64.h
@@ -165,6 +165,8 @@ enum aarch64_feature_bit {
AARCH64_FEATURE_GCS,
/* SME2. */
AARCH64_FEATURE_SME2,
+ /* Translation Hardening Extension. */
+ AARCH64_FEATURE_THE,
AARCH64_NUM_FEATURES
};
diff --git a/opcodes/aarch64-opc.c b/opcodes/aarch64-opc.c
index 6d9f3a0..336a49f 100644
--- a/opcodes/aarch64-opc.c
+++ b/opcodes/aarch64-opc.c
@@ -5032,6 +5032,11 @@ aarch64_sys_ins_reg_supported_p (const aarch64_feature_set features,
&& AARCH64_CPU_HAS_FEATURE (features, PREDRES))
return true;
+ if ((reg_value == CPENC (3,0,13,0,3)
+ || CPENC (3,0,13,0,6))
+ && AARCH64_CPU_HAS_FEATURE (features, THE))
+ return true;
+
return false;
}
diff --git a/opcodes/aarch64-sys-regs.def b/opcodes/aarch64-sys-regs.def
index 2f5780a..dc43126 100644
--- a/opcodes/aarch64-sys-regs.def
+++ b/opcodes/aarch64-sys-regs.def
@@ -756,6 +756,8 @@
SYSREG ("prlar_el2", CPENC (3,4,6,8,1), F_ARCHEXT, AARCH64_FEATURE (V8R))
SYSREG ("prselr_el1", CPENC (3,0,6,2,1), F_ARCHEXT, AARCH64_FEATURE (V8R))
SYSREG ("prselr_el2", CPENC (3,4,6,2,1), F_ARCHEXT, AARCH64_FEATURE (V8R))
+ SYSREG ("rcwmask_el1", CPENC (3,0,13,0,6), F_ARCHEXT, AARCH64_FEATURE (THE))
+ SYSREG ("rcwsmask_el1", CPENC (3,0,13,0,3), F_ARCHEXT, AARCH64_FEATURE (THE))
SYSREG ("revidr_el1", CPENC (3,0,0,0,6), F_REG_READ, AARCH64_NO_FEATURES)
SYSREG ("rgsr_el1", CPENC (3,0,1,0,5), F_ARCHEXT, AARCH64_FEATURE (MEMTAG))
SYSREG ("rmr_el1", CPENC (3,0,12,0,2), 0, AARCH64_NO_FEATURES)
diff --git a/opcodes/aarch64-tbl.h b/opcodes/aarch64-tbl.h
index 463939d..e624b85 100644
--- a/opcodes/aarch64-tbl.h
+++ b/opcodes/aarch64-tbl.h
@@ -2576,6 +2576,8 @@ static const aarch64_feature_set aarch64_feature_chk =
AARCH64_FEATURE (CHK);
static const aarch64_feature_set aarch64_feature_gcs =
AARCH64_FEATURE (GCS);
+static const aarch64_feature_set aarch64_feature_the =
+ AARCH64_FEATURE (THE);
#define CORE &aarch64_feature_v8
#define FP &aarch64_feature_fp
@@ -2636,6 +2638,7 @@ static const aarch64_feature_set aarch64_feature_gcs =
#define CSSC &aarch64_feature_cssc
#define CHK &aarch64_feature_chk
#define GCS &aarch64_feature_gcs
+#define THE &aarch64_feature_the
#define CORE_INSN(NAME,OPCODE,MASK,CLASS,OP,OPS,QUALS,FLAGS) \
{ NAME, OPCODE, MASK, CLASS, OP, CORE, OPS, QUALS, FLAGS, 0, 0, NULL }