|  | /* Disassembler structures definitions for the ARC. | 
|  | Copyright (C) 1994-2016 Free Software Foundation, Inc. | 
|  |  | 
|  | Contributed by Claudiu Zissulescu (claziss@synopsys.com) | 
|  |  | 
|  | This file is part of libopcodes. | 
|  |  | 
|  | 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; if not, write to the Free Software Foundation, | 
|  | Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */ | 
|  |  | 
|  | #ifndef ARCDIS_H | 
|  | #define ARCDIS_H | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | enum ARC_Debugger_OperandType | 
|  | { | 
|  | ARC_UNDEFINED, | 
|  | ARC_LIMM, | 
|  | ARC_SHIMM, | 
|  | ARC_REGISTER, | 
|  | ARCOMPACT_REGISTER /* Valid only for the | 
|  | registers allowed in | 
|  | 16 bit mode.  */ | 
|  | }; | 
|  |  | 
|  | enum Flow | 
|  | { | 
|  | noflow, | 
|  | direct_jump, | 
|  | direct_call, | 
|  | indirect_jump, | 
|  | indirect_call, | 
|  | invalid_instr | 
|  | }; | 
|  |  | 
|  | enum NullifyMode | 
|  | { | 
|  | BR_exec_when_no_jump, | 
|  | BR_exec_always, | 
|  | BR_exec_when_jump | 
|  | }; | 
|  |  | 
|  | enum { allOperandsSize = 256 }; | 
|  |  | 
|  | struct arcDisState | 
|  | { | 
|  | void *_this; | 
|  | int instructionLen; | 
|  | void (*err)(void*, const char*); | 
|  | const char *(*coreRegName)(void*, int); | 
|  | const char *(*auxRegName)(void*, int); | 
|  | const char *(*condCodeName)(void*, int); | 
|  | const char *(*instName)(void*, int, int, int*); | 
|  |  | 
|  | unsigned char* instruction; | 
|  | unsigned index; | 
|  | const char *comm[6]; /* Instr name, cond, NOP, 3 operands.  */ | 
|  |  | 
|  | union | 
|  | { | 
|  | unsigned int registerNum; | 
|  | unsigned int shortimm; | 
|  | unsigned int longimm; | 
|  | } source_operand; | 
|  | enum ARC_Debugger_OperandType sourceType; | 
|  |  | 
|  | int opWidth; | 
|  | int targets[4]; | 
|  | /* START ARC LOCAL.  */ | 
|  | unsigned int addresses[4]; | 
|  | /* END ARC LOCAL.  */ | 
|  | /* Set as a side-effect of calling the disassembler. | 
|  | Used only by the debugger.  */ | 
|  | enum Flow flow; | 
|  | int register_for_indirect_jump; | 
|  | int ea_reg1, ea_reg2, _offset; | 
|  | int _cond, _opcode; | 
|  | unsigned long words[2]; | 
|  | char *commentBuffer; | 
|  | char instrBuffer[40]; | 
|  | char operandBuffer[allOperandsSize]; | 
|  | char _ea_present; | 
|  | char _addrWriteBack; /* Address writeback.  */ | 
|  | char _mem_load; | 
|  | char _load_len; | 
|  | enum NullifyMode nullifyMode; | 
|  | unsigned char commNum; | 
|  | unsigned char isBranch; | 
|  | unsigned char tcnt; | 
|  | unsigned char acnt; | 
|  | }; | 
|  |  | 
|  | struct arcDisState | 
|  | arcAnalyzeInstr (bfd_vma memaddr, struct disassemble_info *); | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  |  | 
|  | #endif |