1
/* Table of opcodes for the OpenRISC 1000 ISA.
2
Copyright 2002, 2003, 2010 Free Software Foundation, Inc.
3
Contributed by Damjan Lampret (lampret@opencores.org).
5
This file is part of or1k_gen_isa, or1ksim, GDB and GAS.
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 3 of the License, or
10
(at your option) any later version.
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.
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., 51 Franklin Street - Fifth Floor, Boston,
20
MA 02110-1301, USA. */
22
/* We treat all letters the same in encode/decode routines so
23
we need to assign some characteristics to them like signess etc. */
28
#define NUM_UNSIGNED (0)
29
#define NUM_SIGNED (1)
32
#define PAGE_SIZE 4096
33
#undef __HALF_WORD_INSN__
35
#define OPERAND_DELIM (',')
37
#define OR32_IF_DELAY (1)
38
#define OR32_W_FLAG (2)
39
#define OR32_R_FLAG (4)
45
/* int reloc; relocation per letter ?? */
48
/* Main instruction specification array. */
51
/* Name of the instruction. */
54
/* A string of characters which describe the operands.
56
,() Itself. Characters appears in the assembly code.
60
I An immediate operand, range -32768 to 32767.
61
J An immediate operand, range . (unused)
62
K An immediate operand, range 0 to 65535.
63
L An immediate operand, range 0 to 63.
64
M An immediate operand, range . (unused)
65
N An immediate operand, range -33554432 to 33554431.
66
O An immediate operand, range . (unused). */
69
/* Opcode and operand encoding. */
75
#define OPTYPE_LAST (0x80000000)
76
#define OPTYPE_OP (0x40000000)
77
#define OPTYPE_REG (0x20000000)
78
#define OPTYPE_SIG (0x10000000)
79
#define OPTYPE_DIS (0x08000000)
80
#define OPTYPE_DST (0x04000000)
81
#define OPTYPE_SBIT (0x00001F00)
82
#define OPTYPE_SHR (0x0000001F)
83
#define OPTYPE_SBIT_SHR (8)
85
/* MM: Data how to decode operands. */
86
extern struct insn_op_struct
93
extern void l_invalid (void);
94
extern void l_sfne (void);
95
extern void l_bf (void);
96
extern void l_add (void);
97
extern void l_sw (void);
98
extern void l_sb (void);
99
extern void l_sh (void);
100
extern void l_lwz (void);
101
extern void l_lbs (void);
102
extern void l_lbz (void);
103
extern void l_lhs (void);
104
extern void l_lhz (void);
105
extern void l_movhi (void);
106
extern void l_and (void);
107
extern void l_or (void);
108
extern void l_xor (void);
109
extern void l_sub (void);
110
extern void l_mul (void);
111
extern void l_div (void);
112
extern void l_divu (void);
113
extern void l_sll (void);
114
extern void l_sra (void);
115
extern void l_srl (void);
116
extern void l_j (void);
117
extern void l_jal (void);
118
extern void l_jalr (void);
119
extern void l_jr (void);
120
extern void l_rfe (void);
121
extern void l_nop (void);
122
extern void l_bnf (void);
123
extern void l_sfeq (void);
124
extern void l_sfgts (void);
125
extern void l_sfges (void);
126
extern void l_sflts (void);
127
extern void l_sfles (void);
128
extern void l_sfgtu (void);
129
extern void l_sfgeu (void);
130
extern void l_sfltu (void);
131
extern void l_sfleu (void);
132
extern void l_mtspr (void);
133
extern void l_mfspr (void);
134
extern void l_sys (void);
135
extern void l_trap (void); /* CZ 21/06/01. */
136
extern void l_macrc (void);
137
extern void l_mac (void);
138
extern void l_msb (void);
139
extern void l_invalid (void);
140
extern void l_cust1 (void);
141
extern void l_cust2 (void);
142
extern void l_cust3 (void);
143
extern void l_cust4 (void);
145
extern void l_none (void);
147
extern const struct or32_letter or32_letters[];
149
extern const struct or32_opcode or32_opcodes[];
151
extern const unsigned int or32_num_opcodes;
153
/* Calculates instruction length in bytes. Always 4 for OR32. */
154
extern int insn_len (int);
156
/* Is individual insn's operand signed or unsigned? */
157
extern int letter_signed (char);
159
/* Number of letters in the individual lettered operand. */
160
extern int letter_range (char);
162
/* MM: Returns index of given instruction name. */
163
extern int insn_index (char *);
165
/* MM: Returns instruction name from index. */
166
extern const char *insn_name (int);
168
/* MM: Constructs new FSM, based on or32_opcodes. */
169
extern void build_automata (void);
171
/* MM: Destructs FSM. */
172
extern void destruct_automata (void);
174
/* MM: Decodes instruction using FSM. Call build_automata first. */
175
extern int insn_decode (unsigned int);
177
/* Disassemble one instruction from insn to disassemble.
178
Return the size of the instruction. */
179
int disassemble_insn (unsigned long);