diff options
author | Nick Clifton <nickc@redhat.com> | 2012-08-13 14:52:54 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2012-08-13 14:52:54 +0000 |
commit | a06ea96464a2928865beb2ac6f12deb0464bfcd7 (patch) | |
tree | 5af98be87fc6e7ea4e8197c241698b97cceeafb8 /opcodes/aarch64-dis.h | |
parent | f47f77df4e0f38c96bf5a4c4d8ecda6c73f5ffc2 (diff) | |
download | gdb-a06ea96464a2928865beb2ac6f12deb0464bfcd7.zip gdb-a06ea96464a2928865beb2ac6f12deb0464bfcd7.tar.gz gdb-a06ea96464a2928865beb2ac6f12deb0464bfcd7.tar.bz2 |
Add support for 64-bit ARM architecture: AArch64
Diffstat (limited to 'opcodes/aarch64-dis.h')
-rw-r--r-- | opcodes/aarch64-dis.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/opcodes/aarch64-dis.h b/opcodes/aarch64-dis.h new file mode 100644 index 0000000..2fab319 --- /dev/null +++ b/opcodes/aarch64-dis.h @@ -0,0 +1,94 @@ +/* aarch64-dis.h -- Header file for aarch64-dis.c and aarch64-dis-2.c. + Copyright 2012 Free Software Foundation, Inc. + Contributed by ARM Ltd. + + This file is part of the GNU opcodes library. + + This library is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + It is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with this program; see the file COPYING3. If not, + see <http://www.gnu.org/licenses/>. */ + +#ifndef OPCODES_AARCH64_DIS_H +#define OPCODES_AARCH64_DIS_H +#include "bfd_stdint.h" +#include "aarch64-opc.h" + +/* Lookup opcode WORD in the opcode table. + + In the case of multiple aarch64_opcode candidates, one of them will be + returned; for other candidate(s), call aarch64_find_next_opcode to + obtain. Note that aarch64_find_next_opcode finds the next + aarch64_opcode candidate in a way as if all related aarch64_opcode + entries were in a single-link list. + + N.B. all alias opcodes are ignored here. */ + +const aarch64_opcode* aarch64_opcode_lookup (uint32_t); +const aarch64_opcode* aarch64_find_next_opcode (const aarch64_opcode *); + +/* Given OPCODE, return its alias, e.g. given UBFM, return LSL. + + In the case of multiple alias candidates, the one of the highest priority + (or one of several aliases of the same highest priority) will be + returned; for the other candidate(s), call aarch64_find_next_alias_opcode + to obtain. Note that aarch64_find_next_alias_opcode finds the next + alias candidate in a way as if all related aliases were in a single-link + list with priority from the highest to the least. */ + +const aarch64_opcode* aarch64_find_alias_opcode (const aarch64_opcode *); +const aarch64_opcode* aarch64_find_next_alias_opcode (const aarch64_opcode *); + +/* Switch-table-based high-level operand extractor. */ + +int aarch64_extract_operand (const aarch64_operand *, aarch64_opnd_info *, + const aarch64_insn, const aarch64_inst *); + +/* Operand extractors. */ + +#define AARCH64_DECL_OPD_EXTRACTOR(x) \ + int aarch64_##x (const aarch64_operand *, aarch64_opnd_info *, \ + const aarch64_insn, const aarch64_inst *) + +AARCH64_DECL_OPD_EXTRACTOR (ext_regno); +AARCH64_DECL_OPD_EXTRACTOR (ext_regrt_sysins); +AARCH64_DECL_OPD_EXTRACTOR (ext_reglane); +AARCH64_DECL_OPD_EXTRACTOR (ext_reglist); +AARCH64_DECL_OPD_EXTRACTOR (ext_ldst_reglist); +AARCH64_DECL_OPD_EXTRACTOR (ext_ldst_reglist_r); +AARCH64_DECL_OPD_EXTRACTOR (ext_ldst_elemlist); +AARCH64_DECL_OPD_EXTRACTOR (ext_advsimd_imm_shift); +AARCH64_DECL_OPD_EXTRACTOR (ext_shll_imm); +AARCH64_DECL_OPD_EXTRACTOR (ext_imm); +AARCH64_DECL_OPD_EXTRACTOR (ext_imm_half); +AARCH64_DECL_OPD_EXTRACTOR (ext_advsimd_imm_modified); +AARCH64_DECL_OPD_EXTRACTOR (ext_fbits); +AARCH64_DECL_OPD_EXTRACTOR (ext_aimm); +AARCH64_DECL_OPD_EXTRACTOR (ext_limm); +AARCH64_DECL_OPD_EXTRACTOR (ext_ft); +AARCH64_DECL_OPD_EXTRACTOR (ext_addr_simple); +AARCH64_DECL_OPD_EXTRACTOR (ext_addr_regoff); +AARCH64_DECL_OPD_EXTRACTOR (ext_addr_simm); +AARCH64_DECL_OPD_EXTRACTOR (ext_addr_uimm12); +AARCH64_DECL_OPD_EXTRACTOR (ext_simd_addr_post); +AARCH64_DECL_OPD_EXTRACTOR (ext_cond); +AARCH64_DECL_OPD_EXTRACTOR (ext_sysreg); +AARCH64_DECL_OPD_EXTRACTOR (ext_pstatefield); +AARCH64_DECL_OPD_EXTRACTOR (ext_sysins_op); +AARCH64_DECL_OPD_EXTRACTOR (ext_barrier); +AARCH64_DECL_OPD_EXTRACTOR (ext_prfop); +AARCH64_DECL_OPD_EXTRACTOR (ext_reg_extended); +AARCH64_DECL_OPD_EXTRACTOR (ext_reg_shifted); + +#undef AARCH64_DECL_OPD_EXTRACTOR + +#endif /* OPCODES_AARCH64_DIS_H */ |