diff options
author | Matthew Wahab <matthew.wahab@arm.com> | 2015-12-11 10:22:40 +0000 |
---|---|---|
committer | Matthew Wahab <matthew.wahab@arm.com> | 2015-12-11 10:22:40 +0000 |
commit | 1e6f4800fc01c7957d0688158385aba3bf5ce8de (patch) | |
tree | bea10feba856f6bc823faf5b009f788f11333d45 /opcodes/aarch64-dis-2.c | |
parent | 9ed608f98b2c8c483c994f884429420e74835417 (diff) | |
download | gdb-1e6f4800fc01c7957d0688158385aba3bf5ce8de.zip gdb-1e6f4800fc01c7957d0688158385aba3bf5ce8de.tar.gz gdb-1e6f4800fc01c7957d0688158385aba3bf5ce8de.tar.bz2 |
[AArch64][Patch 5/5] Add instruction PSB CSYNC
The Statistical Profile Extension adds the instruction PSB CSYNC as an
alias for the HINT #17 instruction. This patch adds the instruction to
binutils as a HINT alias that takes an operand.
A new operand type, AARCH64_OPND_BARRIER_PSB, is added to represent the
operand to PSB. A parser for the operand type is added to the assembler
and a printer to the disassembler. The operand name "csync" is added to
the list of HINT options with HINT number #17. Encoding and decoding of
the operand is handled by the ins_hint/ext_hint functions added in the
preceding patches.
gas/
2015-12-11 Matthew Wahab <matthew.wahab@arm.com>
* config/tc-aarch64.c (aarch64_hint_opt_hsh): New.
(parse_barrier_psb): New.
(parse_operands): Add case for AARCH64_OPND_BARRIER_PSB.
(md_begin): Set up aarch64_hint_opt_hsh.
gas/testsuite/
2015-12-11 Matthew Wahab <matthew.wahab@arm.com>
* gas/aarch64/system-2.d: Enable the statistical profiling
extension. Update the expected output.
* gas/aarch64/system-2.s: Add tests for PSB CSYNC.
* gas/aarch64/system.d: Update the expected output.
include/opcode/
2015-12-11 Matthew Wahab <matthew.wahab@arm.com>
* aarch64.h (aarch64_opnd): Add AARCH64_OPND_BARRIER_PSB.
* aarch64-asm-2.c: Regenerate.
* aarch64-dis-2.c: Regenerate.
* aarch64-opc-2.c: Regenerate.
* aarch64-opc.c (aarch64_hint_options): Add "csync".
(aarch64_print_operands): Handle AARCH64_OPND_BARRIER_PSB.
* aarch64-tbl.h (aarch64_feature_stat_profile): New.
(STAT_PROFILE): New.
(aarch64_opcode_table): Add "psb".
(AARCH64_OPERANDS): Add "BARRIER_PSB".
Change-Id: I5ffb672d26a8b15b48785478d359350a9b70ca09
Diffstat (limited to 'opcodes/aarch64-dis-2.c')
-rw-r--r-- | opcodes/aarch64-dis-2.c | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/opcodes/aarch64-dis-2.c b/opcodes/aarch64-dis-2.c index 6139af3..96b0287 100644 --- a/opcodes/aarch64-dis-2.c +++ b/opcodes/aarch64-dis-2.c @@ -3319,7 +3319,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xxxxxxxxxxxxxxxxxxxxx1xx1x10x01x sysl. */ - return 1028; + return 1029; } } } @@ -3342,7 +3342,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xxxxxxxxxxxxxxxxxxxxxxxx0110x1xx tbz. */ - return 1030; + return 1031; } } else @@ -3361,7 +3361,7 @@ aarch64_opcode_lookup_1 (uint32_t word) 10987654321098765432109876543210 xxxxxxxxxxxxxxxxxxxxxxxx1110x1xx tbnz. */ - return 1031; + return 1032; } } } @@ -8857,15 +8857,15 @@ aarch64_find_next_opcode (const aarch64_opcode *opcode) case 794: value = 798; break; /* ldnp --> ldp. */ case 798: return NULL; /* ldp --> NULL. */ case 1009: value = 1010; break; /* msr --> hint. */ - case 1010: value = 1018; break; /* hint --> clrex. */ - case 1018: value = 1019; break; /* clrex --> dsb. */ - case 1019: value = 1020; break; /* dsb --> dmb. */ - case 1020: value = 1021; break; /* dmb --> isb. */ - case 1021: value = 1022; break; /* isb --> sys. */ - case 1022: value = 1027; break; /* sys --> msr. */ - case 1027: return NULL; /* msr --> NULL. */ - case 1028: value = 1029; break; /* sysl --> mrs. */ - case 1029: return NULL; /* mrs --> NULL. */ + case 1010: value = 1019; break; /* hint --> clrex. */ + case 1019: value = 1020; break; /* clrex --> dsb. */ + case 1020: value = 1021; break; /* dsb --> dmb. */ + case 1021: value = 1022; break; /* dmb --> isb. */ + case 1022: value = 1023; break; /* isb --> sys. */ + case 1023: value = 1028; break; /* sys --> msr. */ + case 1028: return NULL; /* msr --> NULL. */ + case 1029: value = 1030; break; /* sysl --> mrs. */ + case 1030: return NULL; /* mrs --> NULL. */ case 361: value = 362; break; /* st4 --> st1. */ case 362: value = 363; break; /* st1 --> st2. */ case 363: value = 364; break; /* st2 --> st3. */ @@ -9145,8 +9145,8 @@ aarch64_find_alias_opcode (const aarch64_opcode *opcode) case 952: value = 1001; break; /* lduminl --> stuminl. */ case 1002: value = 1003; break; /* movn --> mov. */ case 1004: value = 1005; break; /* movz --> mov. */ - case 1010: value = 1017; break; /* hint --> esb. */ - case 1022: value = 1026; break; /* sys --> tlbi. */ + case 1010: value = 1018; break; /* hint --> psb. */ + case 1023: value = 1027; break; /* sys --> tlbi. */ default: return NULL; } @@ -9271,6 +9271,7 @@ aarch64_find_next_alias_opcode (const aarch64_opcode *opcode) case 1001: value = 952; break; /* stuminl --> lduminl. */ case 1003: value = 1002; break; /* mov --> movn. */ case 1005: value = 1004; break; /* mov --> movz. */ + case 1018: value = 1017; break; /* psb --> esb. */ case 1017: value = 1016; break; /* esb --> sevl. */ case 1016: value = 1015; break; /* sevl --> sev. */ case 1015: value = 1014; break; /* sev --> wfi. */ @@ -9278,10 +9279,10 @@ aarch64_find_next_alias_opcode (const aarch64_opcode *opcode) case 1013: value = 1012; break; /* wfe --> yield. */ case 1012: value = 1011; break; /* yield --> nop. */ case 1011: value = 1010; break; /* nop --> hint. */ - case 1026: value = 1025; break; /* tlbi --> ic. */ - case 1025: value = 1024; break; /* ic --> dc. */ - case 1024: value = 1023; break; /* dc --> at. */ - case 1023: value = 1022; break; /* at --> sys. */ + case 1027: value = 1026; break; /* tlbi --> ic. */ + case 1026: value = 1025; break; /* ic --> dc. */ + case 1025: value = 1024; break; /* dc --> at. */ + case 1024: value = 1023; break; /* at --> sys. */ default: return NULL; } @@ -9411,6 +9412,8 @@ aarch64_extract_operand (const aarch64_operand *self, return aarch64_ext_barrier (self, info, code, inst); case 87: return aarch64_ext_prfop (self, info, code, inst); + case 88: + return aarch64_ext_hint (self, info, code, inst); default: assert (0); abort (); } } |