mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-20 01:50:24 +08:00
[ARM] Add support for ARMv8.1 PAN extension
This commit is contained in:

committed by
Jiong Wang

parent
1af1dd51db
commit
ddfded2f7b
@ -1,3 +1,13 @@
|
|||||||
|
2015-06-02 Matthew Wahab <matthew.wahab@arm.com>
|
||||||
|
|
||||||
|
* config/tc-arm.c (arm_ext_pan): New.
|
||||||
|
(do_setpan): New, encode an ARM SETPAN instruction.
|
||||||
|
(do_t_setpan): New, encode a Thumb SETPAN instruction.
|
||||||
|
(insns): Add "setpan".
|
||||||
|
(arm_extensions): Add "pan".
|
||||||
|
* doc/c-arm.texi (ARM Options): Add "pan" to list of -mcpu processor
|
||||||
|
extensions.
|
||||||
|
|
||||||
2015-06-02 Matthew Wahab <matthew.wahab@arm.com>
|
2015-06-02 Matthew Wahab <matthew.wahab@arm.com>
|
||||||
|
|
||||||
* config/tc-aarch64.c (aarch64_features): Add "rdma".
|
* config/tc-aarch64.c (aarch64_features): Add "rdma".
|
||||||
|
@ -207,6 +207,7 @@ static const arm_feature_set arm_ext_sec = ARM_FEATURE_CORE_LOW (ARM_EXT_SEC);
|
|||||||
static const arm_feature_set arm_ext_os = ARM_FEATURE_CORE_LOW (ARM_EXT_OS);
|
static const arm_feature_set arm_ext_os = ARM_FEATURE_CORE_LOW (ARM_EXT_OS);
|
||||||
static const arm_feature_set arm_ext_adiv = ARM_FEATURE_CORE_LOW (ARM_EXT_ADIV);
|
static const arm_feature_set arm_ext_adiv = ARM_FEATURE_CORE_LOW (ARM_EXT_ADIV);
|
||||||
static const arm_feature_set arm_ext_virt = ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT);
|
static const arm_feature_set arm_ext_virt = ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT);
|
||||||
|
static const arm_feature_set arm_ext_pan = ARM_FEATURE_CORE_HIGH (ARM_EXT2_PAN);
|
||||||
|
|
||||||
static const arm_feature_set arm_arch_any = ARM_ANY;
|
static const arm_feature_set arm_arch_any = ARM_ANY;
|
||||||
static const arm_feature_set arm_arch_full = ARM_FEATURE (-1, -1, -1);
|
static const arm_feature_set arm_arch_full = ARM_FEATURE (-1, -1, -1);
|
||||||
@ -9181,6 +9182,24 @@ do_swi (void)
|
|||||||
inst.reloc.pc_rel = 0;
|
inst.reloc.pc_rel = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
do_setpan (void)
|
||||||
|
{
|
||||||
|
constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_pan),
|
||||||
|
_("selected processor does not support SETPAN instruction"));
|
||||||
|
|
||||||
|
inst.instruction |= ((inst.operands[0].imm & 1) << 9);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
do_t_setpan (void)
|
||||||
|
{
|
||||||
|
constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_pan),
|
||||||
|
_("selected processor does not support SETPAN instruction"));
|
||||||
|
|
||||||
|
inst.instruction |= (inst.operands[0].imm << 3);
|
||||||
|
}
|
||||||
|
|
||||||
/* ARM V5E (El Segundo) signed-multiply-accumulate (argument parse)
|
/* ARM V5E (El Segundo) signed-multiply-accumulate (argument parse)
|
||||||
SMLAxy{cond} Rd,Rm,Rs,Rn
|
SMLAxy{cond} Rd,Rm,Rs,Rn
|
||||||
SMLAWy{cond} Rd,Rm,Rs,Rn
|
SMLAWy{cond} Rd,Rm,Rs,Rn
|
||||||
@ -18884,6 +18903,13 @@ static const struct asm_opcode insns[] =
|
|||||||
TCE("hvc", 1400070, f7e08000, 1, (EXPi), hvc, t_hvc),
|
TCE("hvc", 1400070, f7e08000, 1, (EXPi), hvc, t_hvc),
|
||||||
TCE("eret", 160006e, f3de8f00, 0, (), noargs, noargs),
|
TCE("eret", 160006e, f3de8f00, 0, (), noargs, noargs),
|
||||||
|
|
||||||
|
#undef ARM_VARIANT
|
||||||
|
#define ARM_VARIANT & arm_ext_pan
|
||||||
|
#undef THUMB_VARIANT
|
||||||
|
#define THUMB_VARIANT & arm_ext_pan
|
||||||
|
|
||||||
|
TUF("setpan", 1100000, b610, 1, (I7), setpan, t_setpan),
|
||||||
|
|
||||||
#undef ARM_VARIANT
|
#undef ARM_VARIANT
|
||||||
#define ARM_VARIANT & arm_ext_v6t2
|
#define ARM_VARIANT & arm_ext_v6t2
|
||||||
#undef THUMB_VARIANT
|
#undef THUMB_VARIANT
|
||||||
@ -24662,6 +24688,9 @@ static const struct arm_option_extension_value_table arm_extensions[] =
|
|||||||
ARM_EXT_OPT ("os", ARM_FEATURE_CORE_LOW (ARM_EXT_OS),
|
ARM_EXT_OPT ("os", ARM_FEATURE_CORE_LOW (ARM_EXT_OS),
|
||||||
ARM_FEATURE_CORE_LOW (ARM_EXT_OS),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_OS),
|
||||||
ARM_FEATURE_CORE_LOW (ARM_EXT_V6M)),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V6M)),
|
||||||
|
ARM_EXT_OPT ("pan", ARM_FEATURE_CORE_HIGH (ARM_EXT2_PAN),
|
||||||
|
ARM_FEATURE (ARM_EXT_V8, ARM_EXT2_PAN, 0),
|
||||||
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V8)),
|
||||||
ARM_EXT_OPT ("sec", ARM_FEATURE_CORE_LOW (ARM_EXT_SEC),
|
ARM_EXT_OPT ("sec", ARM_FEATURE_CORE_LOW (ARM_EXT_SEC),
|
||||||
ARM_FEATURE_CORE_LOW (ARM_EXT_SEC),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_SEC),
|
||||||
ARM_FEATURE_CORE_LOW (ARM_EXT_V6K | ARM_EXT_V7A)),
|
ARM_FEATURE_CORE_LOW (ARM_EXT_V6K | ARM_EXT_V7A)),
|
||||||
|
@ -179,6 +179,7 @@ architectures),
|
|||||||
@code{simd} (Advanced SIMD Extensions for v8-A architecture, implies @code{fp}),
|
@code{simd} (Advanced SIMD Extensions for v8-A architecture, implies @code{fp}),
|
||||||
@code{virt} (Virtualization Extensions for v7-A architecture, implies
|
@code{virt} (Virtualization Extensions for v7-A architecture, implies
|
||||||
@code{idiv}),
|
@code{idiv}),
|
||||||
|
@code{pan} (Priviliged Access Never Extensions for v8-A architecture)
|
||||||
and
|
and
|
||||||
@code{xscale}.
|
@code{xscale}.
|
||||||
|
|
||||||
|
@ -1,20 +1,25 @@
|
|||||||
2015-06-02 Matthew Wahab <matthew.wahab@arm.com>
|
2015-06-02 Matthew Wahab <matthew.wahab@arm.com>
|
||||||
|
|
||||||
* rdma-directive.d: New.
|
* gas/arm/armv8-a+pan.d: New.
|
||||||
* rdma.d: New.
|
* gas/arm/armv8-a+pan.s: New.
|
||||||
* rdma.s: New.
|
|
||||||
|
|
||||||
2015-06-02 Matthew Wahab <matthew.wahab@arm.com>
|
2015-06-02 Matthew Wahab <matthew.wahab@arm.com>
|
||||||
|
|
||||||
* lor-directive.d: New.
|
* gas/aarch64/rdma-directive.d: New.
|
||||||
* lor.d: New.
|
* gas/aarch64/rdma.d: New.
|
||||||
* lor.s: New
|
* gas/aarch64/rdma.s: New.
|
||||||
|
|
||||||
|
2015-06-02 Matthew Wahab <matthew.wahab@arm.com>
|
||||||
|
|
||||||
|
* gas/aarch64/lor-directive.d: New.
|
||||||
|
* gas/aarch64/lor.d: New.
|
||||||
|
* gas/aarch64/lor.s: New
|
||||||
|
|
||||||
2015-06-01 Matthew Wahab <matthew.wahab@arm.com>
|
2015-06-01 Matthew Wahab <matthew.wahab@arm.com>
|
||||||
|
|
||||||
* pan-directive.d: New.
|
* gas/aarch64/pan-directive.d: New.
|
||||||
* pan.d: New.
|
* gas/aarch64/pan.d: New.
|
||||||
* pan.s: New
|
* gas/aarch64/pan.s: New
|
||||||
|
|
||||||
2015-06-01 Jiong Wang <jiong.wang@arm.com>
|
2015-06-01 Jiong Wang <jiong.wang@arm.com>
|
||||||
|
|
||||||
|
11
gas/testsuite/gas/arm/armv8-a+pan.d
Normal file
11
gas/testsuite/gas/arm/armv8-a+pan.d
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#name: Valid v8-a+pan
|
||||||
|
#objdump: -dr --prefix-addresses --show-raw-insn
|
||||||
|
|
||||||
|
.*: +file format .*arm.*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
0[0-9a-f]+ <.*> f1100000 setpan #0
|
||||||
|
0[0-9a-f]+ <.*> f1100200 setpan #1
|
||||||
|
0[0-9a-f]+ <.*> b610 setpan #0
|
||||||
|
0[0-9a-f]+ <.*> b618 setpan #1
|
14
gas/testsuite/gas/arm/armv8-a+pan.s
Normal file
14
gas/testsuite/gas/arm/armv8-a+pan.s
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
.syntax unified
|
||||||
|
.arch armv8-a
|
||||||
|
.arch_extension pan
|
||||||
|
|
||||||
|
A1:
|
||||||
|
.arm
|
||||||
|
setpan #0
|
||||||
|
setpan #1
|
||||||
|
|
||||||
|
T1:
|
||||||
|
.thumb
|
||||||
|
setpan #0
|
||||||
|
setpan #1
|
||||||
|
|
@ -1,3 +1,8 @@
|
|||||||
|
2015-06-02 Matthew Wahab <matthew.wahab@arm.com>
|
||||||
|
|
||||||
|
* arm.h (ARM_EXT2_PAN): New.
|
||||||
|
(ARM_FEATURE_CORE_HIGH): New.
|
||||||
|
|
||||||
2015-06-02 Matthew Wahab <matthew.wahab@arm.com>
|
2015-06-02 Matthew Wahab <matthew.wahab@arm.com>
|
||||||
|
|
||||||
* arm.h (ARM_FEATURE_ALL): New.
|
* arm.h (ARM_FEATURE_ALL): New.
|
||||||
|
@ -57,6 +57,8 @@
|
|||||||
state. */
|
state. */
|
||||||
#define ARM_EXT_VIRT 0x80000000 /* Virtualization extensions. */
|
#define ARM_EXT_VIRT 0x80000000 /* Virtualization extensions. */
|
||||||
|
|
||||||
|
#define ARM_EXT2_PAN 0x00000001 /* PAN extension. */
|
||||||
|
|
||||||
/* Co-processor space extensions. */
|
/* Co-processor space extensions. */
|
||||||
#define ARM_CEXT_XSCALE 0x00000001 /* Allow MIA etc. */
|
#define ARM_CEXT_XSCALE 0x00000001 /* Allow MIA etc. */
|
||||||
#define ARM_CEXT_MAVERICK 0x00000002 /* Use Cirrus/DSP coprocessor. */
|
#define ARM_CEXT_MAVERICK 0x00000002 /* Use Cirrus/DSP coprocessor. */
|
||||||
@ -321,5 +323,6 @@ typedef struct
|
|||||||
|
|
||||||
#define ARM_FEATURE_LOW(core, coproc) {{(core), 0}, (coproc)}
|
#define ARM_FEATURE_LOW(core, coproc) {{(core), 0}, (coproc)}
|
||||||
#define ARM_FEATURE_CORE_LOW(core) {{(core), 0}, 0}
|
#define ARM_FEATURE_CORE_LOW(core) {{(core), 0}, 0}
|
||||||
|
#define ARM_FEATURE_CORE_HIGH(core) {{0, (core)}, 0}
|
||||||
#define ARM_FEATURE_COPROC(coproc) {{0, 0}, (coproc)}
|
#define ARM_FEATURE_COPROC(coproc) {{0, 0}, (coproc)}
|
||||||
#define ARM_FEATURE(core1, core2, coproc) {{(core1), (core2)}, (coproc)}
|
#define ARM_FEATURE(core1, core2, coproc) {{(core1), (core2)}, (coproc)}
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2015-06-02 Matthew Wahab <matthew.wahab@arm.com>
|
||||||
|
|
||||||
|
* arm-dis.c (arm_opcodes): Add "setpan".
|
||||||
|
(thumb_opcodes): Add "setpan".
|
||||||
|
|
||||||
2015-06-02 Matthew Wahab <matthew.wahab@arm.com>
|
2015-06-02 Matthew Wahab <matthew.wahab@arm.com>
|
||||||
|
|
||||||
* arm-dis.c (select_arm_features): Rework to avoid used of redefined
|
* arm-dis.c (select_arm_features): Rework to avoid used of redefined
|
||||||
|
@ -1602,6 +1602,10 @@ static const struct opcode32 arm_opcodes[] =
|
|||||||
{ARM_FEATURE_COPROC (CRC_EXT_ARMV8),
|
{ARM_FEATURE_COPROC (CRC_EXT_ARMV8),
|
||||||
0xe1400240, 0xfff00ff0, "crc32cw\t%12-15R, %16-19R, %0-3R"},
|
0xe1400240, 0xfff00ff0, "crc32cw\t%12-15R, %16-19R, %0-3R"},
|
||||||
|
|
||||||
|
/* Privileged Access Never extension instructions. */
|
||||||
|
{ARM_FEATURE_CORE_HIGH (ARM_EXT2_PAN),
|
||||||
|
0xf1100000, 0xfffffdff, "setpan\t#%9-9d"},
|
||||||
|
|
||||||
/* Virtualization Extension instructions. */
|
/* Virtualization Extension instructions. */
|
||||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT), 0x0160006e, 0x0fffffff, "eret%c"},
|
{ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT), 0x0160006e, 0x0fffffff, "eret%c"},
|
||||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT), 0x01400070, 0x0ff000f0, "hvc%c\t%e"},
|
{ARM_FEATURE_CORE_LOW (ARM_EXT_VIRT), 0x01400070, 0x0ff000f0, "hvc%c\t%e"},
|
||||||
@ -2293,6 +2297,7 @@ static const struct opcode16 thumb_opcodes[] =
|
|||||||
/* ARM V8 instructions. */
|
/* ARM V8 instructions. */
|
||||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V8), 0xbf50, 0xffff, "sevl%c"},
|
{ARM_FEATURE_CORE_LOW (ARM_EXT_V8), 0xbf50, 0xffff, "sevl%c"},
|
||||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V8), 0xba80, 0xffc0, "hlt\t%0-5x"},
|
{ARM_FEATURE_CORE_LOW (ARM_EXT_V8), 0xba80, 0xffc0, "hlt\t%0-5x"},
|
||||||
|
{ARM_FEATURE_CORE_HIGH (ARM_EXT2_PAN), 0xb610, 0xfff7, "setpan\t#%3-3d"},
|
||||||
|
|
||||||
/* ARM V6K no-argument instructions. */
|
/* ARM V6K no-argument instructions. */
|
||||||
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6K), 0xbf00, 0xffff, "nop%c"},
|
{ARM_FEATURE_CORE_LOW (ARM_EXT_V6K), 0xbf00, 0xffff, "nop%c"},
|
||||||
|
Reference in New Issue
Block a user