Blame include/opcode/tic54x.h

Packit bbfece
/* tic54x.h -- Header file for TI TMS320C54X opcode table
Packit bbfece
   Copyright (C) 1999-2018 Free Software Foundation, Inc.
Packit bbfece
   Written by Timothy Wall (twall@cygnus.com)
Packit bbfece
Packit bbfece
   This file is part of GDB, GAS, and the GNU binutils.
Packit bbfece
Packit bbfece
   GDB, GAS, and the GNU binutils are free software; you can redistribute
Packit bbfece
   them and/or modify them under the terms of the GNU General Public
Packit bbfece
   License as published by the Free Software Foundation; either version 3,
Packit bbfece
   or (at your option) any later version.
Packit bbfece
Packit bbfece
   GDB, GAS, and the GNU binutils are distributed in the hope that they
Packit bbfece
   will be useful, but WITHOUT ANY WARRANTY; without even the implied
Packit bbfece
   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
Packit bbfece
   the GNU General Public License for more details.
Packit bbfece
Packit bbfece
   You should have received a copy of the GNU General Public License
Packit bbfece
   along with this file; see the file COPYING3.  If not, write to the Free
Packit bbfece
   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
Packit bbfece
   02110-1301, USA.  */
Packit bbfece
Packit bbfece
#ifndef _opcode_tic54x_h_
Packit bbfece
#define _opcode_tic54x_h_
Packit bbfece
Packit bbfece
typedef struct _symbol
Packit bbfece
{
Packit bbfece
  const char *name;
Packit bbfece
  unsigned short value;
Packit bbfece
} tic54x_symbol;
Packit bbfece
Packit bbfece
enum optype {
Packit bbfece
  OPT = 0x8000,
Packit bbfece
  OP_None = 0x0,
Packit bbfece
Packit bbfece
  OP_Xmem, /* AR3 or AR4, indirect */
Packit bbfece
  OP_Ymem, /* AR3 or AR4, indirect */
Packit bbfece
  OP_pmad, /* PROG mem, direct */
Packit bbfece
  OP_dmad, /* DATA mem, direct */
Packit bbfece
  OP_Smem,
Packit bbfece
  OP_Lmem, /* 32-bit single-addressed (direct/indirect) */
Packit bbfece
  OP_MMR,
Packit bbfece
  OP_PA,
Packit bbfece
  OP_Sind,
Packit bbfece
  OP_xpmad,
Packit bbfece
  OP_xpmad_ms7,
Packit bbfece
  OP_MMRX,
Packit bbfece
  OP_MMRY,
Packit bbfece
Packit bbfece
  OP_SRC1, /* src accumulator in bit 8 */
Packit bbfece
  OP_SRC, /* src accumulator in bit 9 */
Packit bbfece
  OP_RND, /* rounded result dst accumulator, opposite of bit 8 */
Packit bbfece
  OP_DST, /* dst accumulator in bit 8 */
Packit bbfece
  OP_ARX, /* arX in bits 0-3 */
Packit bbfece
  OP_SHIFT, /* -16 to 15 (SHIFT), bits 0-4 */
Packit bbfece
  OP_SHFT, /*   0 to 15 (SHIFT1 in summary), bits 0-3 */
Packit bbfece
  OP_B, /* ACC B only */
Packit bbfece
  OP_A, /* ACC A only */
Packit bbfece
Packit bbfece
  OP_lk, /* 16-bit immediate, '#' optional */
Packit bbfece
  OP_TS,
Packit bbfece
  OP_k8, /* -128 <= k <= 128 */
Packit bbfece
  OP_16, /* literal "16" */
Packit bbfece
  OP_BITC, /* 0 to 16 */
Packit bbfece
  OP_CC, /* condition code */
Packit bbfece
  OP_CC2, /* 4-bit condition code */
Packit bbfece
  OP_CC3, /* 2-bit condition code */
Packit bbfece
  OP_123, /* 1, 2, or 3 */
Packit bbfece
  OP_031, /* 0-31, numeric */
Packit bbfece
  OP_k5, /* 0 to 31 */
Packit bbfece
  OP_k8u, /* 0 to 255 */
Packit bbfece
  OP_ASM, /* "ASM" */
Packit bbfece
  OP_T, /* "T" */
Packit bbfece
  OP_DP, /* "DP" */
Packit bbfece
  OP_ARP, /* "ARP" */
Packit bbfece
  OP_k3, /* 0-7 */
Packit bbfece
  OP_lku, /* 0 to 65535 */
Packit bbfece
  OP_N, /* 0/1 or ST0/ST1 */
Packit bbfece
  OP_SBIT, /* status bit or 0-15 */
Packit bbfece
  OP_12, /* one or two */
Packit bbfece
  OP_k9, /* 9 bits of data page (DP) address */
Packit bbfece
  OP_TRN, /* "TRN" */
Packit bbfece
Packit bbfece
};
Packit bbfece
Packit bbfece
typedef struct _template
Packit bbfece
{
Packit bbfece
  /* The opcode mnemonic */
Packit bbfece
  const char *name;
Packit bbfece
  unsigned int words; /* insn size in words */
Packit bbfece
  int minops, maxops; /* min/max operand count */
Packit bbfece
  /* The significant bits in the opcode.  Other bits are zero. 
Packit bbfece
     Instructions with more than 16 bits of opcode store the rest in the upper
Packit bbfece
     16 bits.
Packit bbfece
   */
Packit bbfece
  unsigned short opcode;
Packit bbfece
#define INDIRECT(OP)    ((OP)&0x80)
Packit bbfece
#define MOD(OP)         (((OP)>>3)&0xF)
Packit bbfece
#define ARF(OP)         ((OP)&0x7)
Packit bbfece
#define IS_LKADDR(OP)   (INDIRECT(OP) && MOD(OP)>=12)
Packit bbfece
#define SRC(OP)         ((OP)&0x200)
Packit bbfece
#define DST(OP)         ((OP)&0x100)
Packit bbfece
#define SRC1(OP)        ((OP)&0x100)
Packit bbfece
#define SHIFT(OP)       (((OP)&0x10)?(((OP)&0x1F)-32):((OP)&0x1F))
Packit bbfece
#define SHFT(OP)        ((OP)&0xF)
Packit bbfece
#define ARX(OP)         ((OP)&0x7)
Packit bbfece
#define XMEM(OP)        (((OP)&0x00F0)>>4)
Packit bbfece
#define YMEM(OP)        ((OP)&0x000F)
Packit bbfece
#define XMOD(C)        (((C)&0xC)>>2)
Packit bbfece
#define XARX(C)        (((C)&0x3)+2)
Packit bbfece
#define CC3(OP)         (((OP)>>8)&0x3)
Packit bbfece
#define SBIT(OP)        ((OP)&0xF)
Packit bbfece
#define MMR(OP)         ((OP)&0x7F)
Packit bbfece
#define MMRX(OP)        ((((OP)>>4)&0xF)+16)
Packit bbfece
#define MMRY(OP)        (((OP)&0xF)+16)
Packit bbfece
Packit bbfece
#define OPTYPE(X)       ((X)&~OPT)
Packit bbfece
Packit bbfece
  /* Ones in this mask indicate which bits must match the opcode field.
Packit bbfece
     Zeroes indicate don't care bits (operands and/or opcode options) */
Packit bbfece
  unsigned short mask;
Packit bbfece
Packit bbfece
  /* An array of operand codes (at most 4 operands) */
Packit bbfece
#define MAX_OPERANDS 4
Packit bbfece
  enum optype operand_types[MAX_OPERANDS];
Packit bbfece
Packit bbfece
  /* Special purpose flags (e.g. branch type, parallel, delay, etc) 
Packit bbfece
   */
Packit bbfece
  unsigned short flags;
Packit bbfece
#define B_NEXT      0 /* normal execution, next insn is next address */
Packit bbfece
#define B_BRANCH    1 /* next insn is in opcode */
Packit bbfece
#define B_RET       2 /* next insn is on stack */
Packit bbfece
#define B_BACC      3 /* next insn is in acc */
Packit bbfece
#define B_REPEAT    4 /* next insn repeats */
Packit bbfece
#define FL_BMASK    0x07
Packit bbfece
Packit bbfece
#define FL_DELAY    0x10 /* instruction uses delay slots */
Packit bbfece
#define FL_EXT      0x20 /* instruction takes two words */   
Packit bbfece
#define FL_FAR      0x40 /* far mode addressing */
Packit bbfece
#define FL_LP       0x80 /* LP-only instruction */
Packit bbfece
#define FL_NR       0x100 /* no repeat allowed */
Packit bbfece
#define FL_SMR      0x200 /* Smem read (for flagging write-only *+ARx */
Packit bbfece
Packit bbfece
#define FL_PAR      0x400 /* Parallel instruction. */
Packit bbfece
Packit bbfece
  unsigned short opcode2, mask2;   /* some insns have an extended opcode */
Packit bbfece
Packit bbfece
  const char* parname;
Packit bbfece
  enum optype paroperand_types[MAX_OPERANDS];
Packit bbfece
Packit bbfece
} insn_template;
Packit bbfece
Packit bbfece
extern const insn_template tic54x_unknown_opcode;
Packit bbfece
extern const insn_template tic54x_optab[];
Packit bbfece
extern const insn_template tic54x_paroptab[];
Packit bbfece
extern const tic54x_symbol mmregs[], regs[];
Packit bbfece
extern const tic54x_symbol condition_codes[], cc2_codes[], status_bits[];
Packit bbfece
extern const tic54x_symbol cc3_codes[];
Packit bbfece
extern const char *misc_symbols[];
Packit bbfece
struct disassemble_info;
Packit bbfece
extern const insn_template* tic54x_get_insn (struct disassemble_info *, 
Packit bbfece
                                        bfd_vma, unsigned short, int *);
Packit bbfece
Packit bbfece
#endif /* _opcode_tic54x_h_ */