summaryrefslogtreecommitdiffstats
path: root/target/openrisc/insns.decode
blob: 0d6f7c29f82d4344ef09cd8b03bba66fc59a9a40 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
#
# OpenRISC instruction decode definitions.
#
# Copyright (c) 2018 Richard Henderson <rth@twiddle.net>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, see <http://www.gnu.org/licenses/>.
#

&dab            d a b
&da             d a
&ab             a b
&dal            d a l
&ai             a i
&dab_pair       d a b dp ap bp
&ab_pair        a b ap bp
&da_pair        d a dp ap

####
# System Instructions
####

l_sys           001000 0000000000 k:16
l_trap          001000 0100000000 k:16
l_msync         001000 1000000000 00000000 00000000
l_psync         001000 1010000000 00000000 00000000
l_csync         001000 1100000000 00000000 00000000

l_rfe           001001 ----- ----- -------- --------

####
# Branch Instructions
####

l_j             000000 n:s26
l_jal           000001 n:s26
l_bnf           000011 n:s26
l_bf            000100 n:s26

l_jr            010001 ---------- b:5 -----------
l_jalr          010010 ---------- b:5 -----------

####
# Memory Instructions
####

&load           d a i
@load           ...... d:5 a:5 i:s16                    &load

%store_i        21:s5 0:11
&store          a b i
@store          ...... ..... a:5 b:5 ...........        &store i=%store_i

l_lwa           011011 ..... ..... ........ ........    @load
l_lwz           100001 ..... ..... ........ ........    @load
l_lws           100010 ..... ..... ........ ........    @load
l_lbz           100011 ..... ..... ........ ........    @load
l_lbs           100100 ..... ..... ........ ........    @load
l_lhz           100101 ..... ..... ........ ........    @load
l_lhs           100110 ..... ..... ........ ........    @load

l_swa           110011 ..... ..... ..... ...........    @store
l_sw            110101 ..... ..... ..... ...........    @store
l_sb            110110 ..... ..... ..... ...........    @store
l_sh            110111 ..... ..... ..... ...........    @store

####
# Immediate Operand Instructions
####

%mtspr_k        21:5 0:11

&rri            d a i
&rrk            d a k
@rri            ...... d:5 a:5 i:s16                    &rri
@rrk            ...... d:5 a:5 k:16                     &rrk

l_nop           000101 01--- ----- k:16

l_addi          100111 ..... ..... ........ ........    @rri
l_addic         101000 ..... ..... ........ ........    @rri
l_andi          101001 ..... ..... ........ ........    @rrk
l_ori           101010 ..... ..... ........ ........    @rrk
l_xori          101011 ..... ..... ........ ........    @rri
l_muli          101100 ..... ..... ........ ........    @rri

l_mfspr         101101 ..... ..... ........ ........    @rrk
l_mtspr         110000 ..... a:5 b:5 ...........        k=%mtspr_k

l_maci          010011 ----- a:5 i:s16

l_movhi         000110 d:5 ----0 k:16
l_macrc         000110 d:5 ----1 00000000 00000000

l_adrp          000010 d:5 i:s21

####
# Arithmetic Instructions
####

l_exths         111000 d:5 a:5 ----- - 0000 -- 1100
l_extbs         111000 d:5 a:5 ----- - 0001 -- 1100
l_exthz         111000 d:5 a:5 ----- - 0010 -- 1100
l_extbz         111000 d:5 a:5 ----- - 0011 -- 1100

l_add           111000 d:5 a:5 b:5   - 00 ---- 0000
l_addc          111000 d:5 a:5 b:5   - 00 ---- 0001
l_sub           111000 d:5 a:5 b:5   - 00 ---- 0010
l_and           111000 d:5 a:5 b:5   - 00 ---- 0011
l_or            111000 d:5 a:5 b:5   - 00 ---- 0100
l_xor           111000 d:5 a:5 b:5   - 00 ---- 0101
l_cmov          111000 d:5 a:5 b:5   - 00 ---- 1110
l_ff1           111000 d:5 a:5 ----- - 00 ---- 1111
l_fl1           111000 d:5 a:5 ----- - 01 ---- 1111

l_sll           111000 d:5 a:5 b:5   - 0000 -- 1000
l_srl           111000 d:5 a:5 b:5   - 0001 -- 1000
l_sra           111000 d:5 a:5 b:5   - 0010 -- 1000
l_ror           111000 d:5 a:5 b:5   - 0011 -- 1000

l_mul           111000 d:5 a:5 b:5   - 11 ---- 0110
l_mulu          111000 d:5 a:5 b:5   - 11 ---- 1011
l_div           111000 d:5 a:5 b:5   - 11 ---- 1001
l_divu          111000 d:5 a:5 b:5   - 11 ---- 1010

l_muld          111000 ----- a:5 b:5 - 11 ---- 0111
l_muldu         111000 ----- a:5 b:5 - 11 ---- 1100

l_mac           110001 ----- a:5 b:5 ------- 0001
l_macu          110001 ----- a:5 b:5 ------- 0011
l_msb           110001 ----- a:5 b:5 ------- 0010
l_msbu          110001 ----- a:5 b:5 ------- 0100

l_slli          101110 d:5 a:5 -------- 00 l:6
l_srli          101110 d:5 a:5 -------- 01 l:6
l_srai          101110 d:5 a:5 -------- 10 l:6
l_rori          101110 d:5 a:5 -------- 11 l:6

####
# Compare Instructions
####

l_sfeq          111001 00000 a:5 b:5 -----------
l_sfne          111001 00001 a:5 b:5 -----------
l_sfgtu         111001 00010 a:5 b:5 -----------
l_sfgeu         111001 00011 a:5 b:5 -----------
l_sfltu         111001 00100 a:5 b:5 -----------
l_sfleu         111001 00101 a:5 b:5 -----------
l_sfgts         111001 01010 a:5 b:5 -----------
l_sfges         111001 01011 a:5 b:5 -----------
l_sflts         111001 01100 a:5 b:5 -----------
l_sfles         111001 01101 a:5 b:5 -----------

l_sfeqi         101111 00000 a:5 i:s16
l_sfnei         101111 00001 a:5 i:s16
l_sfgtui        101111 00010 a:5 i:s16
l_sfgeui        101111 00011 a:5 i:s16
l_sfltui        101111 00100 a:5 i:s16
l_sfleui        101111 00101 a:5 i:s16
l_sfgtsi        101111 01010 a:5 i:s16
l_sfgesi        101111 01011 a:5 i:s16
l_sfltsi        101111 01100 a:5 i:s16
l_sflesi        101111 01101 a:5 i:s16

####
# FP Instructions
####

lf_add_s        110010 d:5 a:5 b:5   --- 00000000
lf_sub_s        110010 d:5 a:5 b:5   --- 00000001
lf_mul_s        110010 d:5 a:5 b:5   --- 00000010
lf_div_s        110010 d:5 a:5 b:5   --- 00000011
lf_rem_s        110010 d:5 a:5 b:5   --- 00000110
lf_madd_s       110010 d:5 a:5 b:5   --- 00000111

lf_itof_s       110010 d:5 a:5 00000 --- 00000100
lf_ftoi_s       110010 d:5 a:5 00000 --- 00000101

lf_sfeq_s       110010 ----- a:5 b:5 --- 00001000
lf_sfne_s       110010 ----- a:5 b:5 --- 00001001
lf_sfgt_s       110010 ----- a:5 b:5 --- 00001010
lf_sfge_s       110010 ----- a:5 b:5 --- 00001011
lf_sflt_s       110010 ----- a:5 b:5 --- 00001100
lf_sfle_s       110010 ----- a:5 b:5 --- 00001101
lf_sfueq_s      110010 ----- a:5 b:5 --- 00101000
lf_sfuge_s      110010 ----- a:5 b:5 --- 00101011
lf_sfugt_s      110010 ----- a:5 b:5 --- 00101010
lf_sfule_s      110010 ----- a:5 b:5 --- 00101101
lf_sfult_s      110010 ----- a:5 b:5 --- 00101100
lf_sfun_s       110010 ----- a:5 b:5 --- 00101110

####
# DP Instructions
####

@dab_pair       ...... d:5   a:5 b:5   dp:1 ap:1 bp:1 ........  &dab_pair
@ab_pair        ...... ..... a:5 b:5   .    ap:1 bp:1 ........  &ab_pair
@da_pair        ...... d:5   a:5 ..... dp:1 ap:1 .    ........  &da_pair

lf_add_d        110010 ..... ..... ..... ... 00010000  @dab_pair
lf_sub_d        110010 ..... ..... ..... ... 00010001  @dab_pair
lf_mul_d        110010 ..... ..... ..... ... 00010010  @dab_pair
lf_div_d        110010 ..... ..... ..... ... 00010011  @dab_pair
lf_rem_d        110010 ..... ..... ..... ... 00010110  @dab_pair
lf_madd_d       110010 ..... ..... ..... ... 00010111  @dab_pair

lf_itof_d       110010 ..... ..... 00000 ..0 00010100  @da_pair
lf_ftoi_d       110010 ..... ..... 00000 ..0 00010101  @da_pair

lf_stod_d       110010 d:5 a:5 00000 dp:1 0 0 00110100
lf_dtos_d       110010 d:5 a:5 00000 0 ap:1 0 00110101

lf_sfeq_d       110010 00000 ..... ..... 0.. 00011000  @ab_pair
lf_sfne_d       110010 00000 ..... ..... 0.. 00011001  @ab_pair
lf_sfgt_d       110010 00000 ..... ..... 0.. 00011010  @ab_pair
lf_sfge_d       110010 00000 ..... ..... 0.. 00011011  @ab_pair
lf_sflt_d       110010 00000 ..... ..... 0.. 00011100  @ab_pair
lf_sfle_d       110010 00000 ..... ..... 0.. 00011101  @ab_pair
lf_sfueq_d      110010 00000 ..... ..... 0.. 00111000  @ab_pair
lf_sfuge_d      110010 00000 ..... ..... 0.. 00111011  @ab_pair
lf_sfugt_d      110010 00000 ..... ..... 0.. 00111010  @ab_pair
lf_sfule_d      110010 00000 ..... ..... 0.. 00111101  @ab_pair
lf_sfult_d      110010 00000 ..... ..... 0.. 00111100  @ab_pair
lf_sfun_d       110010 00000 ..... ..... 0.. 00111110  @ab_pair