OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gdb-7.1/] [include/] [opcode/] [or32.h] - Diff between revs 834 and 842

Only display areas with differences | Details | Blame | View Log

Rev 834 Rev 842
/* Table of opcodes for the OpenRISC 1000 ISA.
/* Table of opcodes for the OpenRISC 1000 ISA.
   Copyright 2002, 2003 Free Software Foundation, Inc.
   Copyright 2002, 2003 Free Software Foundation, Inc.
   Contributed by Damjan Lampret (lampret@opencores.org).
   Contributed by Damjan Lampret (lampret@opencores.org).
 
 
   This file is part of or1k_gen_isa, or1ksim, GDB and GAS.
   This file is part of or1k_gen_isa, or1ksim, GDB and GAS.
 
 
   This program is free software; you can redistribute it and/or modify
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.
   (at your option) any later version.
 
 
   This program is distributed in the hope that it will be useful,
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   GNU General Public License for more details.
 
 
   You should have received a copy of the GNU General Public License
   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
 
 
/* We treat all letters the same in encode/decode routines so
/* We treat all letters the same in encode/decode routines so
   we need to assign some characteristics to them like signess etc.  */
   we need to assign some characteristics to them like signess etc.  */
 
 
#ifndef OR32_H_ISA
#ifndef OR32_H_ISA
#define OR32_H_ISA
#define OR32_H_ISA
 
 
#define NUM_UNSIGNED (0)
#define NUM_UNSIGNED (0)
#define NUM_SIGNED (1)
#define NUM_SIGNED (1)
 
 
#define MAX_GPRS 32
#define MAX_GPRS 32
#define PAGE_SIZE 4096
#define PAGE_SIZE 4096
#undef __HALF_WORD_INSN__
#undef __HALF_WORD_INSN__
 
 
#define OPERAND_DELIM (',')
#define OPERAND_DELIM (',')
 
 
#define OR32_IF_DELAY (1)
#define OR32_IF_DELAY (1)
#define OR32_W_FLAG   (2)
#define OR32_W_FLAG   (2)
#define OR32_R_FLAG   (4)
#define OR32_R_FLAG   (4)
 
 
struct or32_letter
struct or32_letter
{
{
  char letter;
  char letter;
  int  sign;
  int  sign;
  /* int  reloc; relocation per letter ??  */
  /* int  reloc; relocation per letter ??  */
};
};
 
 
/* Main instruction specification array.  */
/* Main instruction specification array.  */
struct or32_opcode
struct or32_opcode
{
{
  /* Name of the instruction.  */
  /* Name of the instruction.  */
  char *name;
  char *name;
 
 
  /* A string of characters which describe the operands.
  /* A string of characters which describe the operands.
     Valid characters are:
     Valid characters are:
     ,() Itself.  Characters appears in the assembly code.
     ,() Itself.  Characters appears in the assembly code.
     rA  Register operand.
     rA  Register operand.
     rB  Register operand.
     rB  Register operand.
     rD  Register operand.
     rD  Register operand.
     I   An immediate operand, range -32768 to 32767.
     I   An immediate operand, range -32768 to 32767.
     J   An immediate operand, range . (unused)
     J   An immediate operand, range . (unused)
     K   An immediate operand, range 0 to 65535.
     K   An immediate operand, range 0 to 65535.
     L   An immediate operand, range 0 to 63.
     L   An immediate operand, range 0 to 63.
     M   An immediate operand, range . (unused)
     M   An immediate operand, range . (unused)
     N   An immediate operand, range -33554432 to 33554431.
     N   An immediate operand, range -33554432 to 33554431.
     O   An immediate operand, range . (unused).  */
     O   An immediate operand, range . (unused).  */
  char *args;
  char *args;
 
 
  /* Opcode and operand encoding.  */
  /* Opcode and operand encoding.  */
  char *encoding;
  char *encoding;
  void (*exec) (void);
  void (*exec) (void);
  unsigned int flags;
  unsigned int flags;
};
};
 
 
#define OPTYPE_LAST (0x80000000)
#define OPTYPE_LAST (0x80000000)
#define OPTYPE_OP   (0x40000000)
#define OPTYPE_OP   (0x40000000)
#define OPTYPE_REG  (0x20000000)
#define OPTYPE_REG  (0x20000000)
#define OPTYPE_SIG  (0x10000000)
#define OPTYPE_SIG  (0x10000000)
#define OPTYPE_DIS  (0x08000000)
#define OPTYPE_DIS  (0x08000000)
#define OPTYPE_DST  (0x04000000)
#define OPTYPE_DST  (0x04000000)
#define OPTYPE_SBIT (0x00001F00)
#define OPTYPE_SBIT (0x00001F00)
#define OPTYPE_SHR  (0x0000001F)
#define OPTYPE_SHR  (0x0000001F)
#define OPTYPE_SBIT_SHR (8)
#define OPTYPE_SBIT_SHR (8)
 
 
/* MM: Data how to decode operands.  */
/* MM: Data how to decode operands.  */
extern struct insn_op_struct
extern struct insn_op_struct
{
{
  unsigned long type;
  unsigned long type;
  unsigned long data;
  unsigned long data;
} **op_start;
} **op_start;
 
 
#ifdef HAS_EXECUTION
#ifdef HAS_EXECUTION
extern void l_invalid (void);
extern void l_invalid (void);
extern void l_sfne    (void);
extern void l_sfne    (void);
extern void l_bf      (void);
extern void l_bf      (void);
extern void l_add     (void);
extern void l_add     (void);
extern void l_sw      (void);
extern void l_sw      (void);
extern void l_sb      (void);
extern void l_sb      (void);
extern void l_sh      (void);
extern void l_sh      (void);
extern void l_lwz     (void);
extern void l_lwz     (void);
extern void l_lbs     (void);
extern void l_lbs     (void);
extern void l_lbz     (void);
extern void l_lbz     (void);
extern void l_lhs     (void);
extern void l_lhs     (void);
extern void l_lhz     (void);
extern void l_lhz     (void);
extern void l_movhi   (void);
extern void l_movhi   (void);
extern void l_and     (void);
extern void l_and     (void);
extern void l_or      (void);
extern void l_or      (void);
extern void l_xor     (void);
extern void l_xor     (void);
extern void l_sub     (void);
extern void l_sub     (void);
extern void l_mul     (void);
extern void l_mul     (void);
extern void l_div     (void);
extern void l_div     (void);
extern void l_divu    (void);
extern void l_divu    (void);
extern void l_sll     (void);
extern void l_sll     (void);
extern void l_sra     (void);
extern void l_sra     (void);
extern void l_srl     (void);
extern void l_srl     (void);
extern void l_j       (void);
extern void l_j       (void);
extern void l_jal     (void);
extern void l_jal     (void);
extern void l_jalr    (void);
extern void l_jalr    (void);
extern void l_jr      (void);
extern void l_jr      (void);
extern void l_rfe     (void);
extern void l_rfe     (void);
extern void l_nop     (void);
extern void l_nop     (void);
extern void l_bnf     (void);
extern void l_bnf     (void);
extern void l_sfeq    (void);
extern void l_sfeq    (void);
extern void l_sfgts   (void);
extern void l_sfgts   (void);
extern void l_sfges   (void);
extern void l_sfges   (void);
extern void l_sflts   (void);
extern void l_sflts   (void);
extern void l_sfles   (void);
extern void l_sfles   (void);
extern void l_sfgtu   (void);
extern void l_sfgtu   (void);
extern void l_sfgeu   (void);
extern void l_sfgeu   (void);
extern void l_sfltu   (void);
extern void l_sfltu   (void);
extern void l_sfleu   (void);
extern void l_sfleu   (void);
extern void l_mtspr   (void);
extern void l_mtspr   (void);
extern void l_mfspr   (void);
extern void l_mfspr   (void);
extern void l_sys     (void);
extern void l_sys     (void);
extern void l_trap    (void); /* CZ 21/06/01.  */
extern void l_trap    (void); /* CZ 21/06/01.  */
extern void l_macrc   (void);
extern void l_macrc   (void);
extern void l_mac     (void);
extern void l_mac     (void);
extern void l_msb     (void);
extern void l_msb     (void);
extern void l_invalid (void);
extern void l_invalid (void);
extern void l_cust1   (void);
extern void l_cust1   (void);
extern void l_cust2   (void);
extern void l_cust2   (void);
extern void l_cust3   (void);
extern void l_cust3   (void);
extern void l_cust4   (void);
extern void l_cust4   (void);
#endif
#endif
extern void l_none    (void);
extern void l_none    (void);
 
 
extern const struct or32_letter or32_letters[];
extern const struct or32_letter or32_letters[];
 
 
extern const struct  or32_opcode or32_opcodes[];
extern const struct  or32_opcode or32_opcodes[];
 
 
extern const unsigned int or32_num_opcodes;
extern const unsigned int or32_num_opcodes;
 
 
/* Calculates instruction length in bytes.  Always 4 for OR32.  */
/* Calculates instruction length in bytes.  Always 4 for OR32.  */
extern int insn_len (int);
extern int insn_len (int);
 
 
/* Is individual insn's operand signed or unsigned?  */
/* Is individual insn's operand signed or unsigned?  */
extern int letter_signed (char);
extern int letter_signed (char);
 
 
/* Number of letters in the individual lettered operand.  */
/* Number of letters in the individual lettered operand.  */
extern int letter_range (char);
extern int letter_range (char);
 
 
/* MM: Returns index of given instruction name.  */
/* MM: Returns index of given instruction name.  */
extern int insn_index (char *);
extern int insn_index (char *);
 
 
/* MM: Returns instruction name from index.  */
/* MM: Returns instruction name from index.  */
extern const char *insn_name (int);
extern const char *insn_name (int);
 
 
/* MM: Constructs new FSM, based on or32_opcodes.  */
/* MM: Constructs new FSM, based on or32_opcodes.  */
extern void build_automata (void);
extern void build_automata (void);
 
 
/* MM: Destructs FSM.  */
/* MM: Destructs FSM.  */
extern void destruct_automata (void);
extern void destruct_automata (void);
 
 
/* MM: Decodes instruction using FSM.  Call build_automata first.  */
/* MM: Decodes instruction using FSM.  Call build_automata first.  */
extern int insn_decode (unsigned int);
extern int insn_decode (unsigned int);
 
 
/* Disassemble one instruction from insn to disassemble.
/* Disassemble one instruction from insn to disassemble.
   Return the size of the instruction.  */
   Return the size of the instruction.  */
int disassemble_insn (unsigned long);
int disassemble_insn (unsigned long);
 
 
#endif
#endif
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.