9abfd944543435e9c60f134409bf94320310a24f
[external/binutils.git] / opcodes / arc-dis.h
1 /* Disassembler structures definitions for the ARC.
2    Copyright (C) 1994-2016 Free Software Foundation, Inc.
3
4    Contributed by Claudiu Zissulescu (claziss@synopsys.com)
5
6    This file is part of libopcodes.
7
8    This library is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3, or (at your option)
11    any later version.
12
13    It is distributed in the hope that it will be useful, but WITHOUT
14    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15    or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
16    License for more details.
17
18    You should have received a copy of the GNU General Public License
19    along with this program; if not, write to the Free Software Foundation,
20    Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
21
22 #ifndef ARCDIS_H
23 #define ARCDIS_H
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28
29 enum ARC_Debugger_OperandType
30 {
31     ARC_UNDEFINED,
32     ARC_LIMM,
33     ARC_SHIMM,
34     ARC_REGISTER,
35     ARCOMPACT_REGISTER /* Valid only for the
36                           registers allowed in
37                           16 bit mode.  */
38 };
39
40 enum Flow
41 {
42   noflow,
43   direct_jump,
44   direct_call,
45   indirect_jump,
46   indirect_call,
47   invalid_instr
48 };
49
50 enum NullifyMode
51 {
52   BR_exec_when_no_jump,
53   BR_exec_always,
54   BR_exec_when_jump
55 };
56
57 enum { allOperandsSize = 256 };
58
59 struct arcDisState
60 {
61   void *_this;
62   int instructionLen;
63   void (*err)(void*, const char*);
64   const char *(*coreRegName)(void*, int);
65   const char *(*auxRegName)(void*, int);
66   const char *(*condCodeName)(void*, int);
67   const char *(*instName)(void*, int, int, int*);
68
69   unsigned char* instruction;
70   unsigned index;
71   const char *comm[6]; /* Instr name, cond, NOP, 3 operands.  */
72
73   union
74   {
75     unsigned int registerNum;
76     unsigned int shortimm;
77     unsigned int longimm;
78   } source_operand;
79   enum ARC_Debugger_OperandType sourceType;
80
81   int opWidth;
82   int targets[4];
83   /* START ARC LOCAL.  */
84   unsigned int addresses[4];
85   /* END ARC LOCAL.  */
86   /* Set as a side-effect of calling the disassembler.
87      Used only by the debugger.  */
88   enum Flow flow;
89   int register_for_indirect_jump;
90   int ea_reg1, ea_reg2, _offset;
91   int _cond, _opcode;
92   unsigned long words[2];
93   char *commentBuffer;
94   char instrBuffer[40];
95   char operandBuffer[allOperandsSize];
96   char _ea_present;
97   char _addrWriteBack; /* Address writeback.  */
98   char _mem_load;
99   char _load_len;
100   enum NullifyMode nullifyMode;
101   unsigned char commNum;
102   unsigned char isBranch;
103   unsigned char tcnt;
104   unsigned char acnt;
105 };
106
107 struct arcDisState
108 arcAnalyzeInstr (bfd_vma memaddr, struct disassemble_info *);
109
110 #ifdef __cplusplus
111 }
112 #endif
113
114 #endif