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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [or1ksim/] [cpu/] [or1k/] [opcode/] [or32.h] - Blame information for rev 1341

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 676 markom
   Copyright 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
3 133 markom
   Contributed by Damjan Lampret (lampret@opencores.org).
4
 
5 676 markom
This file is part of or1k_gen_isa, or1ksim, GDB and GAS.
6 133 markom
 
7 676 markom
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 133 markom
 
12 676 markom
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 133 markom
 
17 676 markom
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 133 markom
 
21
/* We treat all letters the same in encode/decode routines so
22 676 markom
   we need to assign some characteristics to them like signess etc.*/
23 133 markom
 
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 1256 phoenix
#define PAGE_SIZE 8192
40 138 markom
#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 676 markom
struct or32_letter {
49 371 markom
  char letter;
50
  int  sign;
51 676 markom
  /* int  reloc; relocation per letter ??*/
52 133 markom
};
53
 
54 138 markom
/* Main instruction specification array.  */
55 676 markom
struct or32_opcode {
56 133 markom
  /* 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 1341 nogj
     rD  Register operand (destination).
65 133 markom
     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 676 markom
     O   An immediate operand, range . (unused) */
72 133 markom
  char *args;
73 706 markom
 
74 676 markom
  /* Opcode and operand encoding. */
75 133 markom
  char *encoding;
76 706 markom
 
77 1341 nogj
#if defined(HAS_EXECUTION) && !SIMPLE_EXECUTION
78 706 markom
  char *function_name;
79
#else /* defined HAS_EXECUTION && !SIMPLE_EXECUTION */
80 676 markom
  void (*exec)();
81 706 markom
#endif /* defined HAS_EXECUTION && !SIMPLE_EXECUTION */
82
 
83 133 markom
  unsigned int flags;
84
};
85
 
86 1341 nogj
/* This operand is the last in the list */
87 138 markom
#define OPTYPE_LAST (0x80000000)
88 1341 nogj
/* This operand marks the end of the operand sequence (for things like I(rD)) */
89 138 markom
#define OPTYPE_OP   (0x40000000)
90 1341 nogj
/* The operand specifies a register index */
91 138 markom
#define OPTYPE_REG  (0x20000000)
92 1341 nogj
/* The operand must be sign extended */
93 138 markom
#define OPTYPE_SIG  (0x10000000)
94 1341 nogj
/* Operand is a relative address, the `I' in `I(rD)' */
95 138 markom
#define OPTYPE_DIS  (0x08000000)
96 1341 nogj
/* The operand is a destination */
97 138 markom
#define OPTYPE_DST  (0x04000000)
98 1341 nogj
/* Which bit of the operand is the sign bit */
99 138 markom
#define OPTYPE_SBIT (0x00001F00)
100 1341 nogj
/* Amount to shift the instruction word right to get the operand */
101 138 markom
#define OPTYPE_SHR  (0x0000001F)
102
#define OPTYPE_SBIT_SHR (8)
103
 
104
/* MM: Data how to decode operands.  */
105 676 markom
extern struct insn_op_struct {
106 138 markom
  unsigned long type;
107
  unsigned long data;
108
} **op_start;
109
 
110 133 markom
#ifdef HAS_EXECUTION
111 676 markom
extern void l_invalid PARAMS((void));
112
extern void l_sfne PARAMS((void));
113
extern void l_bf PARAMS((void));
114
extern void l_add PARAMS((void));
115 1169 csanchez
extern void l_addc PARAMS((void));
116 676 markom
extern void l_sw PARAMS((void));
117
extern void l_sb PARAMS((void));
118
extern void l_sh PARAMS((void));
119
extern void l_lwz PARAMS((void));
120
extern void l_lbs PARAMS((void));
121
extern void l_lbz PARAMS((void));
122
extern void l_lhs PARAMS((void));
123
extern void l_lhz PARAMS((void));
124
extern void l_movhi PARAMS((void));
125
extern void l_and PARAMS((void));
126
extern void l_or PARAMS((void));
127
extern void l_xor PARAMS((void));
128
extern void l_sub PARAMS((void));
129
extern void l_mul PARAMS((void));
130
extern void l_div PARAMS((void));
131
extern void l_divu PARAMS((void));
132
extern void l_sll PARAMS((void));
133
extern void l_sra PARAMS((void));
134
extern void l_srl PARAMS((void));
135
extern void l_j PARAMS((void));
136
extern void l_jal PARAMS((void));
137
extern void l_jalr PARAMS((void));
138
extern void l_jr PARAMS((void));
139
extern void l_rfe PARAMS((void));
140
extern void l_nop PARAMS((void));
141
extern void l_bnf PARAMS((void));
142
extern void l_sfeq PARAMS((void));
143
extern void l_sfgts PARAMS((void));
144
extern void l_sfges PARAMS((void));
145
extern void l_sflts PARAMS((void));
146
extern void l_sfles PARAMS((void));
147
extern void l_sfgtu PARAMS((void));
148
extern void l_sfgeu PARAMS((void));
149
extern void l_sfltu PARAMS((void));
150
extern void l_sfleu PARAMS((void));
151
extern void l_extbs PARAMS((void));
152
extern void l_extbz PARAMS((void));
153
extern void l_exths PARAMS((void));
154
extern void l_exthz PARAMS((void));
155
extern void l_extws PARAMS((void));
156
extern void l_extwz PARAMS((void));
157
extern void l_mtspr PARAMS((void));
158
extern void l_mfspr PARAMS((void));
159
extern void l_sys PARAMS((void));
160
extern void l_trap PARAMS((void)); /* CZ 21/06/01 */
161
extern void l_macrc PARAMS((void));
162
extern void l_mac PARAMS((void));
163
extern void l_msb PARAMS((void));
164
extern void l_invalid PARAMS((void));
165
extern void l_cmov PARAMS ((void));
166 1338 andreje
extern void l_ff1 PARAMS ((void));
167 676 markom
extern void l_cust1 PARAMS ((void));
168
extern void l_cust2 PARAMS ((void));
169
extern void l_cust3 PARAMS ((void));
170
extern void l_cust4 PARAMS ((void));
171 720 markom
extern void lf_add_s PARAMS ((void));
172
extern void lf_div_s PARAMS ((void));
173
extern void lf_ftoi_s PARAMS ((void));
174
extern void lf_itof_s PARAMS ((void));
175
extern void lf_madd_s PARAMS ((void));
176
extern void lf_mul_s PARAMS ((void));
177
extern void lf_rem_s PARAMS ((void));
178
extern void lf_sfeq_s PARAMS ((void));
179
extern void lf_sfge_s PARAMS ((void));
180
extern void lf_sfgt_s PARAMS ((void));
181
extern void lf_sfle_s PARAMS ((void));
182
extern void lf_sflt_s PARAMS ((void));
183
extern void lf_sfne_s PARAMS ((void));
184
extern void lf_sub_s PARAMS((void));
185 133 markom
#endif
186 676 markom
extern void l_none PARAMS((void));
187 133 markom
 
188 676 markom
extern CONST struct or32_letter or32_letters[];
189 133 markom
 
190 676 markom
extern CONST struct  or32_opcode or32_opcodes[];
191 133 markom
 
192 680 ivang
extern CONST int num_opcodes;
193 133 markom
 
194 676 markom
/* Calculates instruction length in bytes.  Always 4 for OR32. */
195
extern int insn_len PARAMS((int insn_index));
196 133 markom
 
197 676 markom
/* Is individual insn's operand signed or unsigned? */
198
extern int letter_signed PARAMS((char l));
199 133 markom
 
200 676 markom
/* Number of letters in the individual lettered operand. */
201
extern int letter_range PARAMS((char l));
202 133 markom
 
203
/* MM: Returns index of given instruction name.  */
204 676 markom
extern int insn_index PARAMS((char *insn));
205 133 markom
 
206 138 markom
/* MM: Returns instruction name from index.  */
207 676 markom
extern CONST char *insn_name PARAMS ((int index));
208 138 markom
 
209
/* MM: Constructs new FSM, based on or32_opcodes.  */
210
extern void build_automata PARAMS ((void));
211
 
212
/* MM: Destructs FSM.  */
213
extern void destruct_automata PARAMS ((void));
214
 
215
/* MM: Decodes instruction using FSM.  Call build_automata first.  */
216 676 markom
extern int insn_decode PARAMS((unsigned int insn));
217 138 markom
 
218 371 markom
/* Disassemble one instruction from insn to disassemble.
219
   Return the size of the instruction.  */
220 676 markom
int disassemble_insn (unsigned long insn);
221 371 markom
 
222 703 markom
/* Disassemble one instruction from insn index.
223
   Return the size of the instruction.  */
224
int disassemble_index (unsigned long insn, int index);
225
 
226 879 markom
/* FOR INTERNAL USE ONLY */
227
/* Automatically does zero- or sign- extension and also finds correct
228
   sign bit position if sign extension is correct extension. Which extension
229
   is proper is figured out from letter description. */
230
unsigned long extend_imm(unsigned long imm, char l);
231
 
232
/* Extracts value from opcode */
233
unsigned long or32_extract(char param_ch, char *enc_initial, unsigned long insn);
234
 
235 133 markom
#endif
236 676 markom
 

powered by: WebSVN 2.1.0

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