check sc 1 and sc 2 too
[microwatt.git] / insn_helpers.vhdl
1 library ieee;
2 use ieee.std_logic_1164.all;
3
4 package insn_helpers is
5 function insn_rs (insn_in : std_ulogic_vector) return std_ulogic_vector;
6 function insn_rt (insn_in : std_ulogic_vector) return std_ulogic_vector;
7 function insn_ra (insn_in : std_ulogic_vector) return std_ulogic_vector;
8 function insn_rb (insn_in : std_ulogic_vector) return std_ulogic_vector;
9 function insn_rcreg (insn_in : std_ulogic_vector) return std_ulogic_vector;
10 function insn_si (insn_in : std_ulogic_vector) return std_ulogic_vector;
11 function insn_ui (insn_in : std_ulogic_vector) return std_ulogic_vector;
12 function insn_l (insn_in : std_ulogic_vector) return std_ulogic;
13 function insn_sh32 (insn_in : std_ulogic_vector) return std_ulogic_vector;
14 function insn_mb32 (insn_in : std_ulogic_vector) return std_ulogic_vector;
15 function insn_me32 (insn_in : std_ulogic_vector) return std_ulogic_vector;
16 function insn_li (insn_in : std_ulogic_vector) return std_ulogic_vector;
17 function insn_lk (insn_in : std_ulogic_vector) return std_ulogic;
18 function insn_aa (insn_in : std_ulogic_vector) return std_ulogic;
19 function insn_rc (insn_in : std_ulogic_vector) return std_ulogic;
20 function insn_oe (insn_in : std_ulogic_vector) return std_ulogic;
21 function insn_bd (insn_in : std_ulogic_vector) return std_ulogic_vector;
22 function insn_bf (insn_in : std_ulogic_vector) return std_ulogic_vector;
23 function insn_bfa (insn_in : std_ulogic_vector) return std_ulogic_vector;
24 function insn_cr (insn_in : std_ulogic_vector) return std_ulogic_vector;
25 function insn_bt (insn_in : std_ulogic_vector) return std_ulogic_vector;
26 function insn_ba (insn_in : std_ulogic_vector) return std_ulogic_vector;
27 function insn_bb (insn_in : std_ulogic_vector) return std_ulogic_vector;
28 function insn_fxm (insn_in : std_ulogic_vector) return std_ulogic_vector;
29 function insn_bo (insn_in : std_ulogic_vector) return std_ulogic_vector;
30 function insn_bi (insn_in : std_ulogic_vector) return std_ulogic_vector;
31 function insn_bh (insn_in : std_ulogic_vector) return std_ulogic_vector;
32 function insn_d (insn_in : std_ulogic_vector) return std_ulogic_vector;
33 function insn_ds (insn_in : std_ulogic_vector) return std_ulogic_vector;
34 function insn_dq (insn_in : std_ulogic_vector) return std_ulogic_vector;
35 function insn_dx (insn_in : std_ulogic_vector) return std_ulogic_vector;
36 function insn_to (insn_in : std_ulogic_vector) return std_ulogic_vector;
37 function insn_bc (insn_in : std_ulogic_vector) return std_ulogic_vector;
38 function insn_sh (insn_in : std_ulogic_vector) return std_ulogic_vector;
39 function insn_me (insn_in : std_ulogic_vector) return std_ulogic_vector;
40 function insn_mb (insn_in : std_ulogic_vector) return std_ulogic_vector;
41 function insn_frt (insn_in : std_ulogic_vector) return std_ulogic_vector;
42 function insn_fra (insn_in : std_ulogic_vector) return std_ulogic_vector;
43 function insn_frb (insn_in : std_ulogic_vector) return std_ulogic_vector;
44 function insn_frc (insn_in : std_ulogic_vector) return std_ulogic_vector;
45 function insn_u (insn_in : std_ulogic_vector) return std_ulogic_vector;
46 function insn_prefix_r(prefix : std_ulogic_vector) return std_ulogic;
47 function insn_prefixed_si(prefix : std_ulogic_vector; suffix : std_ulogic_vector)
48 return std_ulogic_vector;
49 end package insn_helpers;
50
51 package body insn_helpers is
52 function insn_rs (insn_in : std_ulogic_vector) return std_ulogic_vector is
53 begin
54 return insn_in(25 downto 21);
55 end;
56
57 function insn_rt (insn_in : std_ulogic_vector) return std_ulogic_vector is
58 begin
59 return insn_in(25 downto 21);
60 end;
61
62 function insn_ra (insn_in : std_ulogic_vector) return std_ulogic_vector is
63 begin
64 return insn_in(20 downto 16);
65 end;
66
67 function insn_rb (insn_in : std_ulogic_vector) return std_ulogic_vector is
68 begin
69 return insn_in(15 downto 11);
70 end;
71
72 function insn_rcreg (insn_in : std_ulogic_vector) return std_ulogic_vector is
73 begin
74 return insn_in(10 downto 6);
75 end;
76
77 function insn_si (insn_in : std_ulogic_vector) return std_ulogic_vector is
78 begin
79 return insn_in(15 downto 0);
80 end;
81
82 function insn_ui (insn_in : std_ulogic_vector) return std_ulogic_vector is
83 begin
84 return insn_in(15 downto 0);
85 end;
86
87 function insn_l (insn_in : std_ulogic_vector) return std_ulogic is
88 begin
89 return insn_in(21);
90 end;
91
92 function insn_sh32 (insn_in : std_ulogic_vector) return std_ulogic_vector is
93 begin
94 return insn_in(15 downto 11);
95 end;
96
97 function insn_mb32 (insn_in : std_ulogic_vector) return std_ulogic_vector is
98 begin
99 return insn_in(10 downto 6);
100 end;
101
102 function insn_me32 (insn_in : std_ulogic_vector) return std_ulogic_vector is
103 begin
104 return insn_in(5 downto 1);
105 end;
106
107 function insn_li (insn_in : std_ulogic_vector) return std_ulogic_vector is
108 begin
109 return insn_in(25 downto 2);
110 end;
111
112 function insn_lk (insn_in : std_ulogic_vector) return std_ulogic is
113 begin
114 return insn_in(0);
115 end;
116
117 function insn_aa (insn_in : std_ulogic_vector) return std_ulogic is
118 begin
119 return insn_in(1);
120 end;
121
122 function insn_rc (insn_in : std_ulogic_vector) return std_ulogic is
123 begin
124 return insn_in(0);
125 end;
126
127 function insn_oe (insn_in : std_ulogic_vector) return std_ulogic is
128 begin
129 return insn_in(10);
130 end;
131
132 function insn_bd (insn_in : std_ulogic_vector) return std_ulogic_vector is
133 begin
134 return insn_in(15 downto 2);
135 end;
136
137 function insn_bf (insn_in : std_ulogic_vector) return std_ulogic_vector is
138 begin
139 return insn_in(25 downto 23);
140 end;
141
142 function insn_bfa (insn_in : std_ulogic_vector) return std_ulogic_vector is
143 begin
144 return insn_in(20 downto 18);
145 end;
146
147 function insn_cr (insn_in : std_ulogic_vector) return std_ulogic_vector is
148 begin
149 return insn_in(10 downto 1);
150 end;
151
152 function insn_bb (insn_in : std_ulogic_vector) return std_ulogic_vector is
153 begin
154 return insn_in(15 downto 11);
155 end;
156
157 function insn_ba (insn_in : std_ulogic_vector) return std_ulogic_vector is
158 begin
159 return insn_in(20 downto 16);
160 end;
161
162 function insn_bt (insn_in : std_ulogic_vector) return std_ulogic_vector is
163 begin
164 return insn_in(25 downto 21);
165 end;
166
167 function insn_fxm (insn_in : std_ulogic_vector) return std_ulogic_vector is
168 begin
169 return insn_in(19 downto 12);
170 end;
171
172 function insn_bo (insn_in : std_ulogic_vector) return std_ulogic_vector is
173 begin
174 return insn_in(25 downto 21);
175 end;
176
177 function insn_bi (insn_in : std_ulogic_vector) return std_ulogic_vector is
178 begin
179 return insn_in(20 downto 16);
180 end;
181
182 function insn_bh (insn_in : std_ulogic_vector) return std_ulogic_vector is
183 begin
184 return insn_in(12 downto 11);
185 end;
186
187 function insn_d (insn_in : std_ulogic_vector) return std_ulogic_vector is
188 begin
189 return insn_in(15 downto 0);
190 end;
191
192 function insn_ds (insn_in : std_ulogic_vector) return std_ulogic_vector is
193 begin
194 return insn_in(15 downto 2);
195 end;
196
197 function insn_dq (insn_in : std_ulogic_vector) return std_ulogic_vector is
198 begin
199 return insn_in(15 downto 4);
200 end;
201
202 function insn_dx (insn_in : std_ulogic_vector) return std_ulogic_vector is
203 begin
204 return insn_in(15 downto 6) & insn_in(20 downto 16) & insn_in(0);
205 end;
206
207 function insn_to (insn_in : std_ulogic_vector) return std_ulogic_vector is
208 begin
209 return insn_in(25 downto 21);
210 end;
211
212 function insn_bc (insn_in : std_ulogic_vector) return std_ulogic_vector is
213 begin
214 return insn_in(10 downto 6);
215 end;
216
217 function insn_sh (insn_in : std_ulogic_vector) return std_ulogic_vector is
218 begin
219 return insn_in(1) & insn_in(15 downto 11);
220 end;
221
222 function insn_me (insn_in : std_ulogic_vector) return std_ulogic_vector is
223 begin
224 return insn_in(5) & insn_in(10 downto 6);
225 end;
226
227 function insn_mb (insn_in : std_ulogic_vector) return std_ulogic_vector is
228 begin
229 return insn_in(5) & insn_in(10 downto 6);
230 end;
231
232 function insn_frt(insn_in : std_ulogic_vector) return std_ulogic_vector is
233 begin
234 return insn_in(25 downto 21);
235 end;
236
237 function insn_fra(insn_in : std_ulogic_vector) return std_ulogic_vector is
238 begin
239 return insn_in(20 downto 16);
240 end;
241
242 function insn_frb(insn_in : std_ulogic_vector) return std_ulogic_vector is
243 begin
244 return insn_in(15 downto 11);
245 end;
246
247 function insn_frc(insn_in : std_ulogic_vector) return std_ulogic_vector is
248 begin
249 return insn_in(10 downto 6);
250 end;
251
252 function insn_u(insn_in : std_ulogic_vector) return std_ulogic_vector is
253 begin
254 return insn_in(15 downto 12);
255 end;
256
257 function insn_prefix_r(prefix : std_ulogic_vector) return std_ulogic is
258 begin
259 return prefix(20);
260 end;
261
262 function insn_prefixed_si(prefix : std_ulogic_vector; suffix : std_ulogic_vector)
263 return std_ulogic_vector is
264 begin
265 return prefix(17 downto 0) & suffix(15 downto 0);
266 end;
267
268 end package body insn_helpers;