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