1/* Disassembler structures definitions for the ARC.
2   Copyright (C) 1994-2017 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
26extern "C" {
27#endif
28
29enum 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
40enum Flow
41{
42  noflow,
43  direct_jump,
44  direct_call,
45  indirect_jump,
46  indirect_call,
47  invalid_instr
48};
49
50enum NullifyMode
51{
52  BR_exec_when_no_jump,
53  BR_exec_always,
54  BR_exec_when_jump
55};
56
57enum { allOperandsSize = 256 };
58
59struct 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
107struct arcDisState
108arcAnalyzeInstr (bfd_vma memaddr, struct disassemble_info *);
109
110#ifdef __cplusplus
111}
112#endif
113
114#endif
115