arc-dis.h revision 1.1.1.3
1/* Disassembler structures definitions for the ARC.
2   Copyright (C) 1994-2015 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
25enum ARC_Debugger_OperandType
26{
27    ARC_UNDEFINED,
28    ARC_LIMM,
29    ARC_SHIMM,
30    ARC_REGISTER,
31    ARCOMPACT_REGISTER /* Valid only for the
32			  registers allowed in
33			  16 bit mode.  */
34};
35
36enum Flow
37{
38  noflow,
39  direct_jump,
40  direct_call,
41  indirect_jump,
42  indirect_call,
43  invalid_instr
44};
45
46enum NullifyMode
47{
48  BR_exec_when_no_jump,
49  BR_exec_always,
50  BR_exec_when_jump
51};
52
53enum { allOperandsSize = 256 };
54
55struct arcDisState
56{
57  void *_this;
58  int instructionLen;
59  void (*err)(void*, const char*);
60  const char *(*coreRegName)(void*, int);
61  const char *(*auxRegName)(void*, int);
62  const char *(*condCodeName)(void*, int);
63  const char *(*instName)(void*, int, int, int*);
64
65  unsigned char* instruction;
66  unsigned index;
67  const char *comm[6]; /* Instr name, cond, NOP, 3 operands.  */
68
69  union
70  {
71    unsigned int registerNum;
72    unsigned int shortimm;
73    unsigned int longimm;
74  } source_operand;
75  enum ARC_Debugger_OperandType sourceType;
76
77  int opWidth;
78  int targets[4];
79  /* START ARC LOCAL.  */
80  unsigned int addresses[4];
81  /* END ARC LOCAL.  */
82  /* Set as a side-effect of calling the disassembler.
83     Used only by the debugger.  */
84  enum Flow flow;
85  int register_for_indirect_jump;
86  int ea_reg1, ea_reg2, _offset;
87  int _cond, _opcode;
88  unsigned long words[2];
89  char *commentBuffer;
90  char instrBuffer[40];
91  char operandBuffer[allOperandsSize];
92  char _ea_present;
93  char _addrWriteBack; /* Address writeback.  */
94  char _mem_load;
95  char _load_len;
96  enum NullifyMode nullifyMode;
97  unsigned char commNum;
98  unsigned char isBranch;
99  unsigned char tcnt;
100  unsigned char acnt;
101};
102
103struct arcDisState
104arcAnalyzeInstr (bfd_vma memaddr, struct disassemble_info *);
105#endif
106