Home | History | Annotate | Download | only in opcodes
      1 /* Disassembler structures definitions for the ARC.
      2    Copyright (C) 1994-2016 Free Software Foundation, Inc.
      3 
      4    Contributed by Claudiu Zissulescu (claziss (at) 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 enum 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 
     36 enum Flow
     37 {
     38   noflow,
     39   direct_jump,
     40   direct_call,
     41   indirect_jump,
     42   indirect_call,
     43   invalid_instr
     44 };
     45 
     46 enum NullifyMode
     47 {
     48   BR_exec_when_no_jump,
     49   BR_exec_always,
     50   BR_exec_when_jump
     51 };
     52 
     53 enum { allOperandsSize = 256 };
     54 
     55 struct 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 
    103 struct arcDisState
    104 arcAnalyzeInstr (bfd_vma memaddr, struct disassemble_info *);
    105 #endif
    106