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

Subversion Repositories or1k

[/] [or1k/] [branches/] [stable_0_1_x/] [insight/] [include/] [opcode/] [or32.h] - Blame information for rev 397

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 133 markom
/* Table of opcodes for the OpenRISC 1000 ISA.
2
   Copyright 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
3
   Contributed by Damjan Lampret (lampret@opencores.org).
4
 
5
This file is part of or1k_gen_isa, or1ksim, GDB and GAS.
6
 
7
This program is free software; you can redistribute it and/or modify
8
it under the terms of the GNU General Public License as published by
9
the Free Software Foundation; either version 2 of the License, or
10
(at your option) any later version.
11
 
12
This program is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
GNU General Public License for more details.
16
 
17
You should have received a copy of the GNU General Public License
18
along with this program; if not, write to the Free Software
19
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
20
 
21
/* We treat all letters the same in encode/decode routines so
22
   we need to assign some characteristics to them like signess etc.*/
23
 
24
#ifndef OR32_H_ISA
25
#define OR32_H_ISA
26
 
27 138 markom
#define NUM_UNSIGNED (0)
28
#define NUM_SIGNED (1)
29 133 markom
 
30
#ifndef PARAMS
31
#define PARAMS(x) x
32
#endif
33
 
34
#ifndef CONST
35
#define CONST const
36
#endif
37
 
38 138 markom
#define MAX_GPRS 32
39
#define PAGE_SIZE 4096
40
#undef __HALF_WORD_INSN__
41
 
42
#define OPERAND_DELIM (',')
43
 
44
#define OR32_IF_DELAY (1)
45
#define OR32_W_FLAG   (2)
46
#define OR32_R_FLAG   (4)
47
 
48 133 markom
struct or32_letter {
49 371 markom
  char letter;
50
  int  sign;
51
  /* int  reloc; relocation per letter ??*/
52 133 markom
};
53
 
54 138 markom
/* Main instruction specification array.  */
55 133 markom
struct or32_opcode {
56
  /* Name of the instruction.  */
57
  char *name;
58
 
59
  /* A string of characters which describe the operands.
60
     Valid characters are:
61
     ,() Itself.  Characters appears in the assembly code.
62
     rA  Register operand.
63
     rB  Register operand.
64
     rD  Register operand.
65
     I   An immediate operand, range -32768 to 32767.
66
     J   An immediate operand, range . (unused)
67
     K   An immediate operand, range 0 to 65535.
68
     L   An immediate operand, range 0 to 63.
69
     M   An immediate operand, range . (unused)
70
     N   An immediate operand, range -33554432 to 33554431.
71
     O   An immediate operand, range . (unused) */
72
  char *args;
73
 
74
  /* Opcode and operand encoding. */
75
  char *encoding;
76
  void (*exec)();
77
  unsigned int flags;
78
};
79
 
80 138 markom
#define OPTYPE_LAST (0x80000000)
81
#define OPTYPE_OP   (0x40000000)
82
#define OPTYPE_REG  (0x20000000)
83
#define OPTYPE_SIG  (0x10000000)
84
#define OPTYPE_DIS  (0x08000000)
85
#define OPTYPE_DST  (0x04000000)
86
#define OPTYPE_SBIT (0x00001F00)
87
#define OPTYPE_SHR  (0x0000001F)
88
#define OPTYPE_SBIT_SHR (8)
89
 
90
/* MM: Data how to decode operands.  */
91
extern struct insn_op_struct {
92
  unsigned long type;
93
  unsigned long data;
94
} **op_start;
95
 
96 133 markom
#ifdef HAS_EXECUTION
97
extern void l_invalid PARAMS((void));
98
extern void l_sfne PARAMS((void));
99
extern void l_bf PARAMS((void));
100
extern void l_add PARAMS((void));
101
extern void l_sw PARAMS((void));
102
extern void l_sb PARAMS((void));
103
extern void l_sh PARAMS((void));
104
extern void l_lwz PARAMS((void));
105
extern void l_lbs PARAMS((void));
106
extern void l_lbz PARAMS((void));
107
extern void l_lhs PARAMS((void));
108
extern void l_lhz PARAMS((void));
109
extern void l_movhi PARAMS((void));
110
extern void l_and PARAMS((void));
111
extern void l_or PARAMS((void));
112
extern void l_xor PARAMS((void));
113
extern void l_sub PARAMS((void));
114
extern void l_mul PARAMS((void));
115
extern void l_div PARAMS((void));
116
extern void l_divu PARAMS((void));
117
extern void l_sll PARAMS((void));
118
extern void l_sra PARAMS((void));
119
extern void l_srl PARAMS((void));
120
extern void l_j PARAMS((void));
121
extern void l_jal PARAMS((void));
122
extern void l_jalr PARAMS((void));
123
extern void l_jr PARAMS((void));
124
extern void l_rfe PARAMS((void));
125
extern void l_nop PARAMS((void));
126
extern void l_bnf PARAMS((void));
127
extern void l_sfeq PARAMS((void));
128
extern void l_sfgts PARAMS((void));
129
extern void l_sfges PARAMS((void));
130
extern void l_sflts PARAMS((void));
131
extern void l_sfles PARAMS((void));
132
extern void l_sfgtu PARAMS((void));
133
extern void l_sfgeu PARAMS((void));
134
extern void l_sfltu PARAMS((void));
135
extern void l_sfleu PARAMS((void));
136
extern void l_mtspr PARAMS((void));
137
extern void l_mfspr PARAMS((void));
138
extern void l_sys PARAMS((void));
139 141 chris
extern void l_trap PARAMS((void)); /* CZ 21/06/01 */
140 133 markom
extern void l_macrc PARAMS((void));
141
extern void l_mac PARAMS((void));
142
extern void l_msb PARAMS((void));
143
extern void l_invalid PARAMS((void));
144 174 markom
extern void l_cust1 PARAMS ((void));
145
extern void l_cust2 PARAMS ((void));
146
extern void l_cust3 PARAMS ((void));
147
extern void l_cust4 PARAMS ((void));
148 133 markom
#endif
149
extern void l_none PARAMS((void));
150
 
151
extern CONST struct or32_letter or32_letters[];
152
 
153
extern CONST struct  or32_opcode or32_opcodes[];
154
 
155 371 markom
extern CONST int num_opcodes;
156 133 markom
 
157 397 markom
/* Calculates instruction length in bytes.  Always 4 for OR32. */
158 133 markom
extern int insn_len PARAMS((int insn_index));
159
 
160
/* Is individual insn's operand signed or unsigned? */
161
extern int letter_signed PARAMS((char l));
162
 
163
/* Number of letters in the individual lettered operand. */
164
extern int letter_range PARAMS((char l));
165
 
166
/* MM: Returns index of given instruction name.  */
167 138 markom
extern int insn_index PARAMS((char *insn));
168 133 markom
 
169 138 markom
/* MM: Returns instruction name from index.  */
170
extern CONST char *insn_name PARAMS ((int index));
171
 
172
/* MM: Constructs new FSM, based on or32_opcodes.  */
173
extern void build_automata PARAMS ((void));
174
 
175
/* MM: Destructs FSM.  */
176
extern void destruct_automata PARAMS ((void));
177
 
178
/* MM: Decodes instruction using FSM.  Call build_automata first.  */
179
extern int insn_decode PARAMS((unsigned int insn));
180
 
181 371 markom
/* Disassemble one instruction from insn to disassemble.
182
   Return the size of the instruction.  */
183
int disassemble_insn (unsigned long insn);
184
 
185 133 markom
#endif

powered by: WebSVN 2.1.0

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