modelx.c revision 1.1.1.3 1 1.1 christos /* Simulator model support for m32rxf.
2 1.1 christos
3 1.1 christos THIS FILE IS MACHINE GENERATED WITH CGEN.
4 1.1 christos
5 1.1.1.3 christos Copyright 1996-2016 Free Software Foundation, Inc.
6 1.1 christos
7 1.1 christos This file is part of the GNU simulators.
8 1.1 christos
9 1.1 christos This file is free software; you can redistribute it and/or modify
10 1.1 christos it under the terms of the GNU General Public License as published by
11 1.1 christos the Free Software Foundation; either version 3, or (at your option)
12 1.1 christos any later version.
13 1.1 christos
14 1.1 christos It is distributed in the hope that it will be useful, but WITHOUT
15 1.1 christos ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 1.1 christos or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 1.1 christos License for more details.
18 1.1 christos
19 1.1 christos You should have received a copy of the GNU General Public License along
20 1.1 christos with this program; if not, see <http://www.gnu.org/licenses/>.
21 1.1 christos
22 1.1 christos */
23 1.1 christos
24 1.1 christos #define WANT_CPU m32rxf
25 1.1 christos #define WANT_CPU_M32RXF
26 1.1 christos
27 1.1 christos #include "sim-main.h"
28 1.1 christos
29 1.1 christos /* The profiling data is recorded here, but is accessed via the profiling
30 1.1 christos mechanism. After all, this is information for profiling. */
31 1.1 christos
32 1.1 christos #if WITH_PROFILE_MODEL_P
33 1.1 christos
34 1.1 christos /* Model handlers for each insn. */
35 1.1 christos
36 1.1 christos static int
37 1.1 christos model_m32rx_add (SIM_CPU *current_cpu, void *sem_arg)
38 1.1 christos {
39 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
40 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
41 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
42 1.1 christos int cycles = 0;
43 1.1 christos {
44 1.1 christos int referenced = 0;
45 1.1 christos int UNUSED insn_referenced = abuf->written;
46 1.1 christos INT in_sr = -1;
47 1.1 christos INT in_dr = -1;
48 1.1 christos INT out_dr = -1;
49 1.1 christos in_sr = FLD (in_sr);
50 1.1 christos in_dr = FLD (in_dr);
51 1.1 christos out_dr = FLD (out_dr);
52 1.1 christos referenced |= 1 << 0;
53 1.1 christos referenced |= 1 << 1;
54 1.1 christos referenced |= 1 << 2;
55 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
56 1.1 christos }
57 1.1 christos return cycles;
58 1.1 christos #undef FLD
59 1.1 christos }
60 1.1 christos
61 1.1 christos static int
62 1.1 christos model_m32rx_add3 (SIM_CPU *current_cpu, void *sem_arg)
63 1.1 christos {
64 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
65 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
66 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
67 1.1 christos int cycles = 0;
68 1.1 christos {
69 1.1 christos int referenced = 0;
70 1.1 christos int UNUSED insn_referenced = abuf->written;
71 1.1 christos INT in_sr = -1;
72 1.1 christos INT in_dr = -1;
73 1.1 christos INT out_dr = -1;
74 1.1 christos in_sr = FLD (in_sr);
75 1.1 christos out_dr = FLD (out_dr);
76 1.1 christos referenced |= 1 << 0;
77 1.1 christos referenced |= 1 << 2;
78 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
79 1.1 christos }
80 1.1 christos return cycles;
81 1.1 christos #undef FLD
82 1.1 christos }
83 1.1 christos
84 1.1 christos static int
85 1.1 christos model_m32rx_and (SIM_CPU *current_cpu, void *sem_arg)
86 1.1 christos {
87 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
88 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
89 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
90 1.1 christos int cycles = 0;
91 1.1 christos {
92 1.1 christos int referenced = 0;
93 1.1 christos int UNUSED insn_referenced = abuf->written;
94 1.1 christos INT in_sr = -1;
95 1.1 christos INT in_dr = -1;
96 1.1 christos INT out_dr = -1;
97 1.1 christos in_sr = FLD (in_sr);
98 1.1 christos in_dr = FLD (in_dr);
99 1.1 christos out_dr = FLD (out_dr);
100 1.1 christos referenced |= 1 << 0;
101 1.1 christos referenced |= 1 << 1;
102 1.1 christos referenced |= 1 << 2;
103 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
104 1.1 christos }
105 1.1 christos return cycles;
106 1.1 christos #undef FLD
107 1.1 christos }
108 1.1 christos
109 1.1 christos static int
110 1.1 christos model_m32rx_and3 (SIM_CPU *current_cpu, void *sem_arg)
111 1.1 christos {
112 1.1 christos #define FLD(f) abuf->fields.sfmt_and3.f
113 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
114 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
115 1.1 christos int cycles = 0;
116 1.1 christos {
117 1.1 christos int referenced = 0;
118 1.1 christos int UNUSED insn_referenced = abuf->written;
119 1.1 christos INT in_sr = -1;
120 1.1 christos INT in_dr = -1;
121 1.1 christos INT out_dr = -1;
122 1.1 christos in_sr = FLD (in_sr);
123 1.1 christos out_dr = FLD (out_dr);
124 1.1 christos referenced |= 1 << 0;
125 1.1 christos referenced |= 1 << 2;
126 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
127 1.1 christos }
128 1.1 christos return cycles;
129 1.1 christos #undef FLD
130 1.1 christos }
131 1.1 christos
132 1.1 christos static int
133 1.1 christos model_m32rx_or (SIM_CPU *current_cpu, void *sem_arg)
134 1.1 christos {
135 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
136 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
137 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
138 1.1 christos int cycles = 0;
139 1.1 christos {
140 1.1 christos int referenced = 0;
141 1.1 christos int UNUSED insn_referenced = abuf->written;
142 1.1 christos INT in_sr = -1;
143 1.1 christos INT in_dr = -1;
144 1.1 christos INT out_dr = -1;
145 1.1 christos in_sr = FLD (in_sr);
146 1.1 christos in_dr = FLD (in_dr);
147 1.1 christos out_dr = FLD (out_dr);
148 1.1 christos referenced |= 1 << 0;
149 1.1 christos referenced |= 1 << 1;
150 1.1 christos referenced |= 1 << 2;
151 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
152 1.1 christos }
153 1.1 christos return cycles;
154 1.1 christos #undef FLD
155 1.1 christos }
156 1.1 christos
157 1.1 christos static int
158 1.1 christos model_m32rx_or3 (SIM_CPU *current_cpu, void *sem_arg)
159 1.1 christos {
160 1.1 christos #define FLD(f) abuf->fields.sfmt_and3.f
161 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
162 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
163 1.1 christos int cycles = 0;
164 1.1 christos {
165 1.1 christos int referenced = 0;
166 1.1 christos int UNUSED insn_referenced = abuf->written;
167 1.1 christos INT in_sr = -1;
168 1.1 christos INT in_dr = -1;
169 1.1 christos INT out_dr = -1;
170 1.1 christos in_sr = FLD (in_sr);
171 1.1 christos out_dr = FLD (out_dr);
172 1.1 christos referenced |= 1 << 0;
173 1.1 christos referenced |= 1 << 2;
174 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
175 1.1 christos }
176 1.1 christos return cycles;
177 1.1 christos #undef FLD
178 1.1 christos }
179 1.1 christos
180 1.1 christos static int
181 1.1 christos model_m32rx_xor (SIM_CPU *current_cpu, void *sem_arg)
182 1.1 christos {
183 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
184 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
185 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
186 1.1 christos int cycles = 0;
187 1.1 christos {
188 1.1 christos int referenced = 0;
189 1.1 christos int UNUSED insn_referenced = abuf->written;
190 1.1 christos INT in_sr = -1;
191 1.1 christos INT in_dr = -1;
192 1.1 christos INT out_dr = -1;
193 1.1 christos in_sr = FLD (in_sr);
194 1.1 christos in_dr = FLD (in_dr);
195 1.1 christos out_dr = FLD (out_dr);
196 1.1 christos referenced |= 1 << 0;
197 1.1 christos referenced |= 1 << 1;
198 1.1 christos referenced |= 1 << 2;
199 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
200 1.1 christos }
201 1.1 christos return cycles;
202 1.1 christos #undef FLD
203 1.1 christos }
204 1.1 christos
205 1.1 christos static int
206 1.1 christos model_m32rx_xor3 (SIM_CPU *current_cpu, void *sem_arg)
207 1.1 christos {
208 1.1 christos #define FLD(f) abuf->fields.sfmt_and3.f
209 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
210 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
211 1.1 christos int cycles = 0;
212 1.1 christos {
213 1.1 christos int referenced = 0;
214 1.1 christos int UNUSED insn_referenced = abuf->written;
215 1.1 christos INT in_sr = -1;
216 1.1 christos INT in_dr = -1;
217 1.1 christos INT out_dr = -1;
218 1.1 christos in_sr = FLD (in_sr);
219 1.1 christos out_dr = FLD (out_dr);
220 1.1 christos referenced |= 1 << 0;
221 1.1 christos referenced |= 1 << 2;
222 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
223 1.1 christos }
224 1.1 christos return cycles;
225 1.1 christos #undef FLD
226 1.1 christos }
227 1.1 christos
228 1.1 christos static int
229 1.1 christos model_m32rx_addi (SIM_CPU *current_cpu, void *sem_arg)
230 1.1 christos {
231 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f
232 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
233 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
234 1.1 christos int cycles = 0;
235 1.1 christos {
236 1.1 christos int referenced = 0;
237 1.1 christos int UNUSED insn_referenced = abuf->written;
238 1.1 christos INT in_sr = -1;
239 1.1 christos INT in_dr = -1;
240 1.1 christos INT out_dr = -1;
241 1.1 christos in_dr = FLD (in_dr);
242 1.1 christos out_dr = FLD (out_dr);
243 1.1 christos referenced |= 1 << 1;
244 1.1 christos referenced |= 1 << 2;
245 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
246 1.1 christos }
247 1.1 christos return cycles;
248 1.1 christos #undef FLD
249 1.1 christos }
250 1.1 christos
251 1.1 christos static int
252 1.1 christos model_m32rx_addv (SIM_CPU *current_cpu, void *sem_arg)
253 1.1 christos {
254 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
255 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
256 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
257 1.1 christos int cycles = 0;
258 1.1 christos {
259 1.1 christos int referenced = 0;
260 1.1 christos int UNUSED insn_referenced = abuf->written;
261 1.1 christos INT in_sr = -1;
262 1.1 christos INT in_dr = -1;
263 1.1 christos INT out_dr = -1;
264 1.1 christos in_sr = FLD (in_sr);
265 1.1 christos in_dr = FLD (in_dr);
266 1.1 christos out_dr = FLD (out_dr);
267 1.1 christos referenced |= 1 << 0;
268 1.1 christos referenced |= 1 << 1;
269 1.1 christos referenced |= 1 << 2;
270 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
271 1.1 christos }
272 1.1 christos return cycles;
273 1.1 christos #undef FLD
274 1.1 christos }
275 1.1 christos
276 1.1 christos static int
277 1.1 christos model_m32rx_addv3 (SIM_CPU *current_cpu, void *sem_arg)
278 1.1 christos {
279 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
280 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
281 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
282 1.1 christos int cycles = 0;
283 1.1 christos {
284 1.1 christos int referenced = 0;
285 1.1 christos int UNUSED insn_referenced = abuf->written;
286 1.1 christos INT in_sr = -1;
287 1.1 christos INT in_dr = -1;
288 1.1 christos INT out_dr = -1;
289 1.1 christos in_sr = FLD (in_sr);
290 1.1 christos out_dr = FLD (out_dr);
291 1.1 christos referenced |= 1 << 0;
292 1.1 christos referenced |= 1 << 2;
293 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
294 1.1 christos }
295 1.1 christos return cycles;
296 1.1 christos #undef FLD
297 1.1 christos }
298 1.1 christos
299 1.1 christos static int
300 1.1 christos model_m32rx_addx (SIM_CPU *current_cpu, void *sem_arg)
301 1.1 christos {
302 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
303 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
304 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
305 1.1 christos int cycles = 0;
306 1.1 christos {
307 1.1 christos int referenced = 0;
308 1.1 christos int UNUSED insn_referenced = abuf->written;
309 1.1 christos INT in_sr = -1;
310 1.1 christos INT in_dr = -1;
311 1.1 christos INT out_dr = -1;
312 1.1 christos in_sr = FLD (in_sr);
313 1.1 christos in_dr = FLD (in_dr);
314 1.1 christos out_dr = FLD (out_dr);
315 1.1 christos referenced |= 1 << 0;
316 1.1 christos referenced |= 1 << 1;
317 1.1 christos referenced |= 1 << 2;
318 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
319 1.1 christos }
320 1.1 christos return cycles;
321 1.1 christos #undef FLD
322 1.1 christos }
323 1.1 christos
324 1.1 christos static int
325 1.1 christos model_m32rx_bc8 (SIM_CPU *current_cpu, void *sem_arg)
326 1.1 christos {
327 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f
328 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
329 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
330 1.1 christos int cycles = 0;
331 1.1 christos {
332 1.1 christos int referenced = 0;
333 1.1 christos int UNUSED insn_referenced = abuf->written;
334 1.1 christos INT in_sr = -1;
335 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1;
336 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
337 1.1 christos }
338 1.1 christos return cycles;
339 1.1 christos #undef FLD
340 1.1 christos }
341 1.1 christos
342 1.1 christos static int
343 1.1 christos model_m32rx_bc24 (SIM_CPU *current_cpu, void *sem_arg)
344 1.1 christos {
345 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f
346 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
347 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
348 1.1 christos int cycles = 0;
349 1.1 christos {
350 1.1 christos int referenced = 0;
351 1.1 christos int UNUSED insn_referenced = abuf->written;
352 1.1 christos INT in_sr = -1;
353 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1;
354 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
355 1.1 christos }
356 1.1 christos return cycles;
357 1.1 christos #undef FLD
358 1.1 christos }
359 1.1 christos
360 1.1 christos static int
361 1.1 christos model_m32rx_beq (SIM_CPU *current_cpu, void *sem_arg)
362 1.1 christos {
363 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f
364 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
365 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
366 1.1 christos int cycles = 0;
367 1.1 christos {
368 1.1 christos int referenced = 0;
369 1.1 christos int UNUSED insn_referenced = abuf->written;
370 1.1 christos INT in_sr = -1;
371 1.1 christos if (insn_referenced & (1 << 3)) referenced |= 1 << 1;
372 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
373 1.1 christos }
374 1.1 christos {
375 1.1 christos int referenced = 0;
376 1.1 christos int UNUSED insn_referenced = abuf->written;
377 1.1 christos INT in_src1 = -1;
378 1.1 christos INT in_src2 = -1;
379 1.1 christos in_src1 = FLD (in_src1);
380 1.1 christos in_src2 = FLD (in_src2);
381 1.1 christos referenced |= 1 << 0;
382 1.1 christos referenced |= 1 << 1;
383 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2);
384 1.1 christos }
385 1.1 christos return cycles;
386 1.1 christos #undef FLD
387 1.1 christos }
388 1.1 christos
389 1.1 christos static int
390 1.1 christos model_m32rx_beqz (SIM_CPU *current_cpu, void *sem_arg)
391 1.1 christos {
392 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f
393 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
394 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
395 1.1 christos int cycles = 0;
396 1.1 christos {
397 1.1 christos int referenced = 0;
398 1.1 christos int UNUSED insn_referenced = abuf->written;
399 1.1 christos INT in_sr = -1;
400 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1;
401 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
402 1.1 christos }
403 1.1 christos {
404 1.1 christos int referenced = 0;
405 1.1 christos int UNUSED insn_referenced = abuf->written;
406 1.1 christos INT in_src1 = -1;
407 1.1 christos INT in_src2 = -1;
408 1.1 christos in_src2 = FLD (in_src2);
409 1.1 christos referenced |= 1 << 1;
410 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2);
411 1.1 christos }
412 1.1 christos return cycles;
413 1.1 christos #undef FLD
414 1.1 christos }
415 1.1 christos
416 1.1 christos static int
417 1.1 christos model_m32rx_bgez (SIM_CPU *current_cpu, void *sem_arg)
418 1.1 christos {
419 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f
420 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
421 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
422 1.1 christos int cycles = 0;
423 1.1 christos {
424 1.1 christos int referenced = 0;
425 1.1 christos int UNUSED insn_referenced = abuf->written;
426 1.1 christos INT in_sr = -1;
427 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1;
428 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
429 1.1 christos }
430 1.1 christos {
431 1.1 christos int referenced = 0;
432 1.1 christos int UNUSED insn_referenced = abuf->written;
433 1.1 christos INT in_src1 = -1;
434 1.1 christos INT in_src2 = -1;
435 1.1 christos in_src2 = FLD (in_src2);
436 1.1 christos referenced |= 1 << 1;
437 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2);
438 1.1 christos }
439 1.1 christos return cycles;
440 1.1 christos #undef FLD
441 1.1 christos }
442 1.1 christos
443 1.1 christos static int
444 1.1 christos model_m32rx_bgtz (SIM_CPU *current_cpu, void *sem_arg)
445 1.1 christos {
446 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f
447 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
448 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
449 1.1 christos int cycles = 0;
450 1.1 christos {
451 1.1 christos int referenced = 0;
452 1.1 christos int UNUSED insn_referenced = abuf->written;
453 1.1 christos INT in_sr = -1;
454 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1;
455 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
456 1.1 christos }
457 1.1 christos {
458 1.1 christos int referenced = 0;
459 1.1 christos int UNUSED insn_referenced = abuf->written;
460 1.1 christos INT in_src1 = -1;
461 1.1 christos INT in_src2 = -1;
462 1.1 christos in_src2 = FLD (in_src2);
463 1.1 christos referenced |= 1 << 1;
464 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2);
465 1.1 christos }
466 1.1 christos return cycles;
467 1.1 christos #undef FLD
468 1.1 christos }
469 1.1 christos
470 1.1 christos static int
471 1.1 christos model_m32rx_blez (SIM_CPU *current_cpu, void *sem_arg)
472 1.1 christos {
473 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f
474 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
475 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
476 1.1 christos int cycles = 0;
477 1.1 christos {
478 1.1 christos int referenced = 0;
479 1.1 christos int UNUSED insn_referenced = abuf->written;
480 1.1 christos INT in_sr = -1;
481 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1;
482 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
483 1.1 christos }
484 1.1 christos {
485 1.1 christos int referenced = 0;
486 1.1 christos int UNUSED insn_referenced = abuf->written;
487 1.1 christos INT in_src1 = -1;
488 1.1 christos INT in_src2 = -1;
489 1.1 christos in_src2 = FLD (in_src2);
490 1.1 christos referenced |= 1 << 1;
491 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2);
492 1.1 christos }
493 1.1 christos return cycles;
494 1.1 christos #undef FLD
495 1.1 christos }
496 1.1 christos
497 1.1 christos static int
498 1.1 christos model_m32rx_bltz (SIM_CPU *current_cpu, void *sem_arg)
499 1.1 christos {
500 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f
501 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
502 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
503 1.1 christos int cycles = 0;
504 1.1 christos {
505 1.1 christos int referenced = 0;
506 1.1 christos int UNUSED insn_referenced = abuf->written;
507 1.1 christos INT in_sr = -1;
508 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1;
509 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
510 1.1 christos }
511 1.1 christos {
512 1.1 christos int referenced = 0;
513 1.1 christos int UNUSED insn_referenced = abuf->written;
514 1.1 christos INT in_src1 = -1;
515 1.1 christos INT in_src2 = -1;
516 1.1 christos in_src2 = FLD (in_src2);
517 1.1 christos referenced |= 1 << 1;
518 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2);
519 1.1 christos }
520 1.1 christos return cycles;
521 1.1 christos #undef FLD
522 1.1 christos }
523 1.1 christos
524 1.1 christos static int
525 1.1 christos model_m32rx_bnez (SIM_CPU *current_cpu, void *sem_arg)
526 1.1 christos {
527 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f
528 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
529 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
530 1.1 christos int cycles = 0;
531 1.1 christos {
532 1.1 christos int referenced = 0;
533 1.1 christos int UNUSED insn_referenced = abuf->written;
534 1.1 christos INT in_sr = -1;
535 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1;
536 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
537 1.1 christos }
538 1.1 christos {
539 1.1 christos int referenced = 0;
540 1.1 christos int UNUSED insn_referenced = abuf->written;
541 1.1 christos INT in_src1 = -1;
542 1.1 christos INT in_src2 = -1;
543 1.1 christos in_src2 = FLD (in_src2);
544 1.1 christos referenced |= 1 << 1;
545 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2);
546 1.1 christos }
547 1.1 christos return cycles;
548 1.1 christos #undef FLD
549 1.1 christos }
550 1.1 christos
551 1.1 christos static int
552 1.1 christos model_m32rx_bl8 (SIM_CPU *current_cpu, void *sem_arg)
553 1.1 christos {
554 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f
555 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
556 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
557 1.1 christos int cycles = 0;
558 1.1 christos {
559 1.1 christos int referenced = 0;
560 1.1 christos int UNUSED insn_referenced = abuf->written;
561 1.1 christos INT in_sr = -1;
562 1.1 christos referenced |= 1 << 1;
563 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
564 1.1 christos }
565 1.1 christos return cycles;
566 1.1 christos #undef FLD
567 1.1 christos }
568 1.1 christos
569 1.1 christos static int
570 1.1 christos model_m32rx_bl24 (SIM_CPU *current_cpu, void *sem_arg)
571 1.1 christos {
572 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f
573 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
574 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
575 1.1 christos int cycles = 0;
576 1.1 christos {
577 1.1 christos int referenced = 0;
578 1.1 christos int UNUSED insn_referenced = abuf->written;
579 1.1 christos INT in_sr = -1;
580 1.1 christos referenced |= 1 << 1;
581 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
582 1.1 christos }
583 1.1 christos return cycles;
584 1.1 christos #undef FLD
585 1.1 christos }
586 1.1 christos
587 1.1 christos static int
588 1.1 christos model_m32rx_bcl8 (SIM_CPU *current_cpu, void *sem_arg)
589 1.1 christos {
590 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f
591 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
592 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
593 1.1 christos int cycles = 0;
594 1.1 christos {
595 1.1 christos int referenced = 0;
596 1.1 christos int UNUSED insn_referenced = abuf->written;
597 1.1 christos INT in_sr = -1;
598 1.1 christos if (insn_referenced & (1 << 4)) referenced |= 1 << 1;
599 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
600 1.1 christos }
601 1.1 christos return cycles;
602 1.1 christos #undef FLD
603 1.1 christos }
604 1.1 christos
605 1.1 christos static int
606 1.1 christos model_m32rx_bcl24 (SIM_CPU *current_cpu, void *sem_arg)
607 1.1 christos {
608 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f
609 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
610 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
611 1.1 christos int cycles = 0;
612 1.1 christos {
613 1.1 christos int referenced = 0;
614 1.1 christos int UNUSED insn_referenced = abuf->written;
615 1.1 christos INT in_sr = -1;
616 1.1 christos if (insn_referenced & (1 << 4)) referenced |= 1 << 1;
617 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
618 1.1 christos }
619 1.1 christos return cycles;
620 1.1 christos #undef FLD
621 1.1 christos }
622 1.1 christos
623 1.1 christos static int
624 1.1 christos model_m32rx_bnc8 (SIM_CPU *current_cpu, void *sem_arg)
625 1.1 christos {
626 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f
627 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
628 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
629 1.1 christos int cycles = 0;
630 1.1 christos {
631 1.1 christos int referenced = 0;
632 1.1 christos int UNUSED insn_referenced = abuf->written;
633 1.1 christos INT in_sr = -1;
634 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1;
635 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
636 1.1 christos }
637 1.1 christos return cycles;
638 1.1 christos #undef FLD
639 1.1 christos }
640 1.1 christos
641 1.1 christos static int
642 1.1 christos model_m32rx_bnc24 (SIM_CPU *current_cpu, void *sem_arg)
643 1.1 christos {
644 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f
645 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
646 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
647 1.1 christos int cycles = 0;
648 1.1 christos {
649 1.1 christos int referenced = 0;
650 1.1 christos int UNUSED insn_referenced = abuf->written;
651 1.1 christos INT in_sr = -1;
652 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1;
653 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
654 1.1 christos }
655 1.1 christos return cycles;
656 1.1 christos #undef FLD
657 1.1 christos }
658 1.1 christos
659 1.1 christos static int
660 1.1 christos model_m32rx_bne (SIM_CPU *current_cpu, void *sem_arg)
661 1.1 christos {
662 1.1 christos #define FLD(f) abuf->fields.sfmt_beq.f
663 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
664 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
665 1.1 christos int cycles = 0;
666 1.1 christos {
667 1.1 christos int referenced = 0;
668 1.1 christos int UNUSED insn_referenced = abuf->written;
669 1.1 christos INT in_sr = -1;
670 1.1 christos if (insn_referenced & (1 << 3)) referenced |= 1 << 1;
671 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
672 1.1 christos }
673 1.1 christos {
674 1.1 christos int referenced = 0;
675 1.1 christos int UNUSED insn_referenced = abuf->written;
676 1.1 christos INT in_src1 = -1;
677 1.1 christos INT in_src2 = -1;
678 1.1 christos in_src1 = FLD (in_src1);
679 1.1 christos in_src2 = FLD (in_src2);
680 1.1 christos referenced |= 1 << 0;
681 1.1 christos referenced |= 1 << 1;
682 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 1, referenced, in_src1, in_src2);
683 1.1 christos }
684 1.1 christos return cycles;
685 1.1 christos #undef FLD
686 1.1 christos }
687 1.1 christos
688 1.1 christos static int
689 1.1 christos model_m32rx_bra8 (SIM_CPU *current_cpu, void *sem_arg)
690 1.1 christos {
691 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f
692 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
693 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
694 1.1 christos int cycles = 0;
695 1.1 christos {
696 1.1 christos int referenced = 0;
697 1.1 christos int UNUSED insn_referenced = abuf->written;
698 1.1 christos INT in_sr = -1;
699 1.1 christos referenced |= 1 << 1;
700 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
701 1.1 christos }
702 1.1 christos return cycles;
703 1.1 christos #undef FLD
704 1.1 christos }
705 1.1 christos
706 1.1 christos static int
707 1.1 christos model_m32rx_bra24 (SIM_CPU *current_cpu, void *sem_arg)
708 1.1 christos {
709 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f
710 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
711 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
712 1.1 christos int cycles = 0;
713 1.1 christos {
714 1.1 christos int referenced = 0;
715 1.1 christos int UNUSED insn_referenced = abuf->written;
716 1.1 christos INT in_sr = -1;
717 1.1 christos referenced |= 1 << 1;
718 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
719 1.1 christos }
720 1.1 christos return cycles;
721 1.1 christos #undef FLD
722 1.1 christos }
723 1.1 christos
724 1.1 christos static int
725 1.1 christos model_m32rx_bncl8 (SIM_CPU *current_cpu, void *sem_arg)
726 1.1 christos {
727 1.1 christos #define FLD(f) abuf->fields.sfmt_bl8.f
728 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
729 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
730 1.1 christos int cycles = 0;
731 1.1 christos {
732 1.1 christos int referenced = 0;
733 1.1 christos int UNUSED insn_referenced = abuf->written;
734 1.1 christos INT in_sr = -1;
735 1.1 christos if (insn_referenced & (1 << 4)) referenced |= 1 << 1;
736 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
737 1.1 christos }
738 1.1 christos return cycles;
739 1.1 christos #undef FLD
740 1.1 christos }
741 1.1 christos
742 1.1 christos static int
743 1.1 christos model_m32rx_bncl24 (SIM_CPU *current_cpu, void *sem_arg)
744 1.1 christos {
745 1.1 christos #define FLD(f) abuf->fields.sfmt_bl24.f
746 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
747 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
748 1.1 christos int cycles = 0;
749 1.1 christos {
750 1.1 christos int referenced = 0;
751 1.1 christos int UNUSED insn_referenced = abuf->written;
752 1.1 christos INT in_sr = -1;
753 1.1 christos if (insn_referenced & (1 << 4)) referenced |= 1 << 1;
754 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
755 1.1 christos }
756 1.1 christos return cycles;
757 1.1 christos #undef FLD
758 1.1 christos }
759 1.1 christos
760 1.1 christos static int
761 1.1 christos model_m32rx_cmp (SIM_CPU *current_cpu, void *sem_arg)
762 1.1 christos {
763 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
764 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
765 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
766 1.1 christos int cycles = 0;
767 1.1 christos {
768 1.1 christos int referenced = 0;
769 1.1 christos int UNUSED insn_referenced = abuf->written;
770 1.1 christos INT in_src1 = -1;
771 1.1 christos INT in_src2 = -1;
772 1.1 christos in_src1 = FLD (in_src1);
773 1.1 christos in_src2 = FLD (in_src2);
774 1.1 christos referenced |= 1 << 0;
775 1.1 christos referenced |= 1 << 1;
776 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2);
777 1.1 christos }
778 1.1 christos return cycles;
779 1.1 christos #undef FLD
780 1.1 christos }
781 1.1 christos
782 1.1 christos static int
783 1.1 christos model_m32rx_cmpi (SIM_CPU *current_cpu, void *sem_arg)
784 1.1 christos {
785 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f
786 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
787 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
788 1.1 christos int cycles = 0;
789 1.1 christos {
790 1.1 christos int referenced = 0;
791 1.1 christos int UNUSED insn_referenced = abuf->written;
792 1.1 christos INT in_src1 = -1;
793 1.1 christos INT in_src2 = -1;
794 1.1 christos in_src2 = FLD (in_src2);
795 1.1 christos referenced |= 1 << 1;
796 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2);
797 1.1 christos }
798 1.1 christos return cycles;
799 1.1 christos #undef FLD
800 1.1 christos }
801 1.1 christos
802 1.1 christos static int
803 1.1 christos model_m32rx_cmpu (SIM_CPU *current_cpu, void *sem_arg)
804 1.1 christos {
805 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
806 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
807 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
808 1.1 christos int cycles = 0;
809 1.1 christos {
810 1.1 christos int referenced = 0;
811 1.1 christos int UNUSED insn_referenced = abuf->written;
812 1.1 christos INT in_src1 = -1;
813 1.1 christos INT in_src2 = -1;
814 1.1 christos in_src1 = FLD (in_src1);
815 1.1 christos in_src2 = FLD (in_src2);
816 1.1 christos referenced |= 1 << 0;
817 1.1 christos referenced |= 1 << 1;
818 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2);
819 1.1 christos }
820 1.1 christos return cycles;
821 1.1 christos #undef FLD
822 1.1 christos }
823 1.1 christos
824 1.1 christos static int
825 1.1 christos model_m32rx_cmpui (SIM_CPU *current_cpu, void *sem_arg)
826 1.1 christos {
827 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f
828 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
829 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
830 1.1 christos int cycles = 0;
831 1.1 christos {
832 1.1 christos int referenced = 0;
833 1.1 christos int UNUSED insn_referenced = abuf->written;
834 1.1 christos INT in_src1 = -1;
835 1.1 christos INT in_src2 = -1;
836 1.1 christos in_src2 = FLD (in_src2);
837 1.1 christos referenced |= 1 << 1;
838 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2);
839 1.1 christos }
840 1.1 christos return cycles;
841 1.1 christos #undef FLD
842 1.1 christos }
843 1.1 christos
844 1.1 christos static int
845 1.1 christos model_m32rx_cmpeq (SIM_CPU *current_cpu, void *sem_arg)
846 1.1 christos {
847 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
848 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
849 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
850 1.1 christos int cycles = 0;
851 1.1 christos {
852 1.1 christos int referenced = 0;
853 1.1 christos int UNUSED insn_referenced = abuf->written;
854 1.1 christos INT in_src1 = -1;
855 1.1 christos INT in_src2 = -1;
856 1.1 christos in_src1 = FLD (in_src1);
857 1.1 christos in_src2 = FLD (in_src2);
858 1.1 christos referenced |= 1 << 0;
859 1.1 christos referenced |= 1 << 1;
860 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2);
861 1.1 christos }
862 1.1 christos return cycles;
863 1.1 christos #undef FLD
864 1.1 christos }
865 1.1 christos
866 1.1 christos static int
867 1.1 christos model_m32rx_cmpz (SIM_CPU *current_cpu, void *sem_arg)
868 1.1 christos {
869 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
870 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
871 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
872 1.1 christos int cycles = 0;
873 1.1 christos {
874 1.1 christos int referenced = 0;
875 1.1 christos int UNUSED insn_referenced = abuf->written;
876 1.1 christos INT in_src1 = -1;
877 1.1 christos INT in_src2 = -1;
878 1.1 christos in_src2 = FLD (in_src2);
879 1.1 christos referenced |= 1 << 1;
880 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2);
881 1.1 christos }
882 1.1 christos return cycles;
883 1.1 christos #undef FLD
884 1.1 christos }
885 1.1 christos
886 1.1 christos static int
887 1.1 christos model_m32rx_div (SIM_CPU *current_cpu, void *sem_arg)
888 1.1 christos {
889 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
890 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
891 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
892 1.1 christos int cycles = 0;
893 1.1 christos {
894 1.1 christos int referenced = 0;
895 1.1 christos int UNUSED insn_referenced = abuf->written;
896 1.1 christos INT in_sr = -1;
897 1.1 christos INT in_dr = -1;
898 1.1 christos INT out_dr = -1;
899 1.1 christos in_sr = FLD (in_sr);
900 1.1 christos in_dr = FLD (in_dr);
901 1.1 christos out_dr = FLD (out_dr);
902 1.1 christos referenced |= 1 << 0;
903 1.1 christos if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
904 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 2;
905 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
906 1.1 christos }
907 1.1 christos return cycles;
908 1.1 christos #undef FLD
909 1.1 christos }
910 1.1 christos
911 1.1 christos static int
912 1.1 christos model_m32rx_divu (SIM_CPU *current_cpu, void *sem_arg)
913 1.1 christos {
914 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
915 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
916 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
917 1.1 christos int cycles = 0;
918 1.1 christos {
919 1.1 christos int referenced = 0;
920 1.1 christos int UNUSED insn_referenced = abuf->written;
921 1.1 christos INT in_sr = -1;
922 1.1 christos INT in_dr = -1;
923 1.1 christos INT out_dr = -1;
924 1.1 christos in_sr = FLD (in_sr);
925 1.1 christos in_dr = FLD (in_dr);
926 1.1 christos out_dr = FLD (out_dr);
927 1.1 christos referenced |= 1 << 0;
928 1.1 christos if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
929 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 2;
930 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
931 1.1 christos }
932 1.1 christos return cycles;
933 1.1 christos #undef FLD
934 1.1 christos }
935 1.1 christos
936 1.1 christos static int
937 1.1 christos model_m32rx_rem (SIM_CPU *current_cpu, void *sem_arg)
938 1.1 christos {
939 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
940 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
941 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
942 1.1 christos int cycles = 0;
943 1.1 christos {
944 1.1 christos int referenced = 0;
945 1.1 christos int UNUSED insn_referenced = abuf->written;
946 1.1 christos INT in_sr = -1;
947 1.1 christos INT in_dr = -1;
948 1.1 christos INT out_dr = -1;
949 1.1 christos in_sr = FLD (in_sr);
950 1.1 christos in_dr = FLD (in_dr);
951 1.1 christos out_dr = FLD (out_dr);
952 1.1 christos referenced |= 1 << 0;
953 1.1 christos if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
954 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 2;
955 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
956 1.1 christos }
957 1.1 christos return cycles;
958 1.1 christos #undef FLD
959 1.1 christos }
960 1.1 christos
961 1.1 christos static int
962 1.1 christos model_m32rx_remu (SIM_CPU *current_cpu, void *sem_arg)
963 1.1 christos {
964 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
965 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
966 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
967 1.1 christos int cycles = 0;
968 1.1 christos {
969 1.1 christos int referenced = 0;
970 1.1 christos int UNUSED insn_referenced = abuf->written;
971 1.1 christos INT in_sr = -1;
972 1.1 christos INT in_dr = -1;
973 1.1 christos INT out_dr = -1;
974 1.1 christos in_sr = FLD (in_sr);
975 1.1 christos in_dr = FLD (in_dr);
976 1.1 christos out_dr = FLD (out_dr);
977 1.1 christos referenced |= 1 << 0;
978 1.1 christos if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
979 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 2;
980 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
981 1.1 christos }
982 1.1 christos return cycles;
983 1.1 christos #undef FLD
984 1.1 christos }
985 1.1 christos
986 1.1 christos static int
987 1.1 christos model_m32rx_divh (SIM_CPU *current_cpu, void *sem_arg)
988 1.1 christos {
989 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
990 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
991 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
992 1.1 christos int cycles = 0;
993 1.1 christos {
994 1.1 christos int referenced = 0;
995 1.1 christos int UNUSED insn_referenced = abuf->written;
996 1.1 christos INT in_sr = -1;
997 1.1 christos INT in_dr = -1;
998 1.1 christos INT out_dr = -1;
999 1.1 christos in_sr = FLD (in_sr);
1000 1.1 christos in_dr = FLD (in_dr);
1001 1.1 christos out_dr = FLD (out_dr);
1002 1.1 christos referenced |= 1 << 0;
1003 1.1 christos if (insn_referenced & (1 << 0)) referenced |= 1 << 1;
1004 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 2;
1005 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1006 1.1 christos }
1007 1.1 christos return cycles;
1008 1.1 christos #undef FLD
1009 1.1 christos }
1010 1.1 christos
1011 1.1 christos static int
1012 1.1 christos model_m32rx_jc (SIM_CPU *current_cpu, void *sem_arg)
1013 1.1 christos {
1014 1.1 christos #define FLD(f) abuf->fields.sfmt_jl.f
1015 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1016 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1017 1.1 christos int cycles = 0;
1018 1.1 christos {
1019 1.1 christos int referenced = 0;
1020 1.1 christos int UNUSED insn_referenced = abuf->written;
1021 1.1 christos INT in_sr = -1;
1022 1.1 christos in_sr = FLD (in_sr);
1023 1.1 christos if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
1024 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1;
1025 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
1026 1.1 christos }
1027 1.1 christos return cycles;
1028 1.1 christos #undef FLD
1029 1.1 christos }
1030 1.1 christos
1031 1.1 christos static int
1032 1.1 christos model_m32rx_jnc (SIM_CPU *current_cpu, void *sem_arg)
1033 1.1 christos {
1034 1.1 christos #define FLD(f) abuf->fields.sfmt_jl.f
1035 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1036 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1037 1.1 christos int cycles = 0;
1038 1.1 christos {
1039 1.1 christos int referenced = 0;
1040 1.1 christos int UNUSED insn_referenced = abuf->written;
1041 1.1 christos INT in_sr = -1;
1042 1.1 christos in_sr = FLD (in_sr);
1043 1.1 christos if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
1044 1.1 christos if (insn_referenced & (1 << 2)) referenced |= 1 << 1;
1045 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
1046 1.1 christos }
1047 1.1 christos return cycles;
1048 1.1 christos #undef FLD
1049 1.1 christos }
1050 1.1 christos
1051 1.1 christos static int
1052 1.1 christos model_m32rx_jl (SIM_CPU *current_cpu, void *sem_arg)
1053 1.1 christos {
1054 1.1 christos #define FLD(f) abuf->fields.sfmt_jl.f
1055 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1056 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1057 1.1 christos int cycles = 0;
1058 1.1 christos {
1059 1.1 christos int referenced = 0;
1060 1.1 christos int UNUSED insn_referenced = abuf->written;
1061 1.1 christos INT in_sr = -1;
1062 1.1 christos in_sr = FLD (in_sr);
1063 1.1 christos referenced |= 1 << 0;
1064 1.1 christos referenced |= 1 << 1;
1065 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
1066 1.1 christos }
1067 1.1 christos return cycles;
1068 1.1 christos #undef FLD
1069 1.1 christos }
1070 1.1 christos
1071 1.1 christos static int
1072 1.1 christos model_m32rx_jmp (SIM_CPU *current_cpu, void *sem_arg)
1073 1.1 christos {
1074 1.1 christos #define FLD(f) abuf->fields.sfmt_jl.f
1075 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1076 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1077 1.1 christos int cycles = 0;
1078 1.1 christos {
1079 1.1 christos int referenced = 0;
1080 1.1 christos int UNUSED insn_referenced = abuf->written;
1081 1.1 christos INT in_sr = -1;
1082 1.1 christos in_sr = FLD (in_sr);
1083 1.1 christos referenced |= 1 << 0;
1084 1.1 christos referenced |= 1 << 1;
1085 1.1 christos cycles += m32rxf_model_m32rx_u_cti (current_cpu, idesc, 0, referenced, in_sr);
1086 1.1 christos }
1087 1.1 christos return cycles;
1088 1.1 christos #undef FLD
1089 1.1 christos }
1090 1.1 christos
1091 1.1 christos static int
1092 1.1 christos model_m32rx_ld (SIM_CPU *current_cpu, void *sem_arg)
1093 1.1 christos {
1094 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1095 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1096 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1097 1.1 christos int cycles = 0;
1098 1.1 christos {
1099 1.1 christos int referenced = 0;
1100 1.1 christos int UNUSED insn_referenced = abuf->written;
1101 1.1 christos INT in_sr = 0;
1102 1.1 christos INT out_dr = 0;
1103 1.1 christos in_sr = FLD (in_sr);
1104 1.1 christos out_dr = FLD (out_dr);
1105 1.1 christos referenced |= 1 << 0;
1106 1.1 christos referenced |= 1 << 1;
1107 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
1108 1.1 christos }
1109 1.1 christos return cycles;
1110 1.1 christos #undef FLD
1111 1.1 christos }
1112 1.1 christos
1113 1.1 christos static int
1114 1.1 christos model_m32rx_ld_d (SIM_CPU *current_cpu, void *sem_arg)
1115 1.1 christos {
1116 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
1117 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1118 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1119 1.1 christos int cycles = 0;
1120 1.1 christos {
1121 1.1 christos int referenced = 0;
1122 1.1 christos int UNUSED insn_referenced = abuf->written;
1123 1.1 christos INT in_sr = 0;
1124 1.1 christos INT out_dr = 0;
1125 1.1 christos in_sr = FLD (in_sr);
1126 1.1 christos out_dr = FLD (out_dr);
1127 1.1 christos referenced |= 1 << 0;
1128 1.1 christos referenced |= 1 << 1;
1129 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
1130 1.1 christos }
1131 1.1 christos return cycles;
1132 1.1 christos #undef FLD
1133 1.1 christos }
1134 1.1 christos
1135 1.1 christos static int
1136 1.1 christos model_m32rx_ldb (SIM_CPU *current_cpu, void *sem_arg)
1137 1.1 christos {
1138 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1139 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1140 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1141 1.1 christos int cycles = 0;
1142 1.1 christos {
1143 1.1 christos int referenced = 0;
1144 1.1 christos int UNUSED insn_referenced = abuf->written;
1145 1.1 christos INT in_sr = 0;
1146 1.1 christos INT out_dr = 0;
1147 1.1 christos in_sr = FLD (in_sr);
1148 1.1 christos out_dr = FLD (out_dr);
1149 1.1 christos referenced |= 1 << 0;
1150 1.1 christos referenced |= 1 << 1;
1151 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
1152 1.1 christos }
1153 1.1 christos return cycles;
1154 1.1 christos #undef FLD
1155 1.1 christos }
1156 1.1 christos
1157 1.1 christos static int
1158 1.1 christos model_m32rx_ldb_d (SIM_CPU *current_cpu, void *sem_arg)
1159 1.1 christos {
1160 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
1161 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1162 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1163 1.1 christos int cycles = 0;
1164 1.1 christos {
1165 1.1 christos int referenced = 0;
1166 1.1 christos int UNUSED insn_referenced = abuf->written;
1167 1.1 christos INT in_sr = 0;
1168 1.1 christos INT out_dr = 0;
1169 1.1 christos in_sr = FLD (in_sr);
1170 1.1 christos out_dr = FLD (out_dr);
1171 1.1 christos referenced |= 1 << 0;
1172 1.1 christos referenced |= 1 << 1;
1173 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
1174 1.1 christos }
1175 1.1 christos return cycles;
1176 1.1 christos #undef FLD
1177 1.1 christos }
1178 1.1 christos
1179 1.1 christos static int
1180 1.1 christos model_m32rx_ldh (SIM_CPU *current_cpu, void *sem_arg)
1181 1.1 christos {
1182 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1183 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1184 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1185 1.1 christos int cycles = 0;
1186 1.1 christos {
1187 1.1 christos int referenced = 0;
1188 1.1 christos int UNUSED insn_referenced = abuf->written;
1189 1.1 christos INT in_sr = 0;
1190 1.1 christos INT out_dr = 0;
1191 1.1 christos in_sr = FLD (in_sr);
1192 1.1 christos out_dr = FLD (out_dr);
1193 1.1 christos referenced |= 1 << 0;
1194 1.1 christos referenced |= 1 << 1;
1195 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
1196 1.1 christos }
1197 1.1 christos return cycles;
1198 1.1 christos #undef FLD
1199 1.1 christos }
1200 1.1 christos
1201 1.1 christos static int
1202 1.1 christos model_m32rx_ldh_d (SIM_CPU *current_cpu, void *sem_arg)
1203 1.1 christos {
1204 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
1205 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1206 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1207 1.1 christos int cycles = 0;
1208 1.1 christos {
1209 1.1 christos int referenced = 0;
1210 1.1 christos int UNUSED insn_referenced = abuf->written;
1211 1.1 christos INT in_sr = 0;
1212 1.1 christos INT out_dr = 0;
1213 1.1 christos in_sr = FLD (in_sr);
1214 1.1 christos out_dr = FLD (out_dr);
1215 1.1 christos referenced |= 1 << 0;
1216 1.1 christos referenced |= 1 << 1;
1217 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
1218 1.1 christos }
1219 1.1 christos return cycles;
1220 1.1 christos #undef FLD
1221 1.1 christos }
1222 1.1 christos
1223 1.1 christos static int
1224 1.1 christos model_m32rx_ldub (SIM_CPU *current_cpu, void *sem_arg)
1225 1.1 christos {
1226 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1227 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1228 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1229 1.1 christos int cycles = 0;
1230 1.1 christos {
1231 1.1 christos int referenced = 0;
1232 1.1 christos int UNUSED insn_referenced = abuf->written;
1233 1.1 christos INT in_sr = 0;
1234 1.1 christos INT out_dr = 0;
1235 1.1 christos in_sr = FLD (in_sr);
1236 1.1 christos out_dr = FLD (out_dr);
1237 1.1 christos referenced |= 1 << 0;
1238 1.1 christos referenced |= 1 << 1;
1239 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
1240 1.1 christos }
1241 1.1 christos return cycles;
1242 1.1 christos #undef FLD
1243 1.1 christos }
1244 1.1 christos
1245 1.1 christos static int
1246 1.1 christos model_m32rx_ldub_d (SIM_CPU *current_cpu, void *sem_arg)
1247 1.1 christos {
1248 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
1249 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1250 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1251 1.1 christos int cycles = 0;
1252 1.1 christos {
1253 1.1 christos int referenced = 0;
1254 1.1 christos int UNUSED insn_referenced = abuf->written;
1255 1.1 christos INT in_sr = 0;
1256 1.1 christos INT out_dr = 0;
1257 1.1 christos in_sr = FLD (in_sr);
1258 1.1 christos out_dr = FLD (out_dr);
1259 1.1 christos referenced |= 1 << 0;
1260 1.1 christos referenced |= 1 << 1;
1261 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
1262 1.1 christos }
1263 1.1 christos return cycles;
1264 1.1 christos #undef FLD
1265 1.1 christos }
1266 1.1 christos
1267 1.1 christos static int
1268 1.1 christos model_m32rx_lduh (SIM_CPU *current_cpu, void *sem_arg)
1269 1.1 christos {
1270 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1271 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1272 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1273 1.1 christos int cycles = 0;
1274 1.1 christos {
1275 1.1 christos int referenced = 0;
1276 1.1 christos int UNUSED insn_referenced = abuf->written;
1277 1.1 christos INT in_sr = 0;
1278 1.1 christos INT out_dr = 0;
1279 1.1 christos in_sr = FLD (in_sr);
1280 1.1 christos out_dr = FLD (out_dr);
1281 1.1 christos referenced |= 1 << 0;
1282 1.1 christos referenced |= 1 << 1;
1283 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
1284 1.1 christos }
1285 1.1 christos return cycles;
1286 1.1 christos #undef FLD
1287 1.1 christos }
1288 1.1 christos
1289 1.1 christos static int
1290 1.1 christos model_m32rx_lduh_d (SIM_CPU *current_cpu, void *sem_arg)
1291 1.1 christos {
1292 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
1293 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1294 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1295 1.1 christos int cycles = 0;
1296 1.1 christos {
1297 1.1 christos int referenced = 0;
1298 1.1 christos int UNUSED insn_referenced = abuf->written;
1299 1.1 christos INT in_sr = 0;
1300 1.1 christos INT out_dr = 0;
1301 1.1 christos in_sr = FLD (in_sr);
1302 1.1 christos out_dr = FLD (out_dr);
1303 1.1 christos referenced |= 1 << 0;
1304 1.1 christos referenced |= 1 << 1;
1305 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
1306 1.1 christos }
1307 1.1 christos return cycles;
1308 1.1 christos #undef FLD
1309 1.1 christos }
1310 1.1 christos
1311 1.1 christos static int
1312 1.1 christos model_m32rx_ld_plus (SIM_CPU *current_cpu, void *sem_arg)
1313 1.1 christos {
1314 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1315 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1316 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1317 1.1 christos int cycles = 0;
1318 1.1 christos {
1319 1.1 christos int referenced = 0;
1320 1.1 christos int UNUSED insn_referenced = abuf->written;
1321 1.1 christos INT in_sr = 0;
1322 1.1 christos INT out_dr = 0;
1323 1.1 christos in_sr = FLD (in_sr);
1324 1.1 christos out_dr = FLD (out_dr);
1325 1.1 christos referenced |= 1 << 0;
1326 1.1 christos referenced |= 1 << 1;
1327 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
1328 1.1 christos }
1329 1.1 christos {
1330 1.1 christos int referenced = 0;
1331 1.1 christos int UNUSED insn_referenced = abuf->written;
1332 1.1 christos INT in_sr = -1;
1333 1.1 christos INT in_dr = -1;
1334 1.1 christos INT out_dr = -1;
1335 1.1 christos in_dr = FLD (in_sr);
1336 1.1 christos out_dr = FLD (out_sr);
1337 1.1 christos referenced |= 1 << 0;
1338 1.1 christos referenced |= 1 << 2;
1339 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr);
1340 1.1 christos }
1341 1.1 christos return cycles;
1342 1.1 christos #undef FLD
1343 1.1 christos }
1344 1.1 christos
1345 1.1 christos static int
1346 1.1 christos model_m32rx_ld24 (SIM_CPU *current_cpu, void *sem_arg)
1347 1.1 christos {
1348 1.1 christos #define FLD(f) abuf->fields.sfmt_ld24.f
1349 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1350 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1351 1.1 christos int cycles = 0;
1352 1.1 christos {
1353 1.1 christos int referenced = 0;
1354 1.1 christos int UNUSED insn_referenced = abuf->written;
1355 1.1 christos INT in_sr = -1;
1356 1.1 christos INT in_dr = -1;
1357 1.1 christos INT out_dr = -1;
1358 1.1 christos out_dr = FLD (out_dr);
1359 1.1 christos referenced |= 1 << 2;
1360 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1361 1.1 christos }
1362 1.1 christos return cycles;
1363 1.1 christos #undef FLD
1364 1.1 christos }
1365 1.1 christos
1366 1.1 christos static int
1367 1.1 christos model_m32rx_ldi8 (SIM_CPU *current_cpu, void *sem_arg)
1368 1.1 christos {
1369 1.1 christos #define FLD(f) abuf->fields.sfmt_addi.f
1370 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1371 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1372 1.1 christos int cycles = 0;
1373 1.1 christos {
1374 1.1 christos int referenced = 0;
1375 1.1 christos int UNUSED insn_referenced = abuf->written;
1376 1.1 christos INT in_sr = -1;
1377 1.1 christos INT in_dr = -1;
1378 1.1 christos INT out_dr = -1;
1379 1.1 christos out_dr = FLD (out_dr);
1380 1.1 christos referenced |= 1 << 2;
1381 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1382 1.1 christos }
1383 1.1 christos return cycles;
1384 1.1 christos #undef FLD
1385 1.1 christos }
1386 1.1 christos
1387 1.1 christos static int
1388 1.1 christos model_m32rx_ldi16 (SIM_CPU *current_cpu, void *sem_arg)
1389 1.1 christos {
1390 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
1391 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1392 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1393 1.1 christos int cycles = 0;
1394 1.1 christos {
1395 1.1 christos int referenced = 0;
1396 1.1 christos int UNUSED insn_referenced = abuf->written;
1397 1.1 christos INT in_sr = -1;
1398 1.1 christos INT in_dr = -1;
1399 1.1 christos INT out_dr = -1;
1400 1.1 christos out_dr = FLD (out_dr);
1401 1.1 christos referenced |= 1 << 2;
1402 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1403 1.1 christos }
1404 1.1 christos return cycles;
1405 1.1 christos #undef FLD
1406 1.1 christos }
1407 1.1 christos
1408 1.1 christos static int
1409 1.1 christos model_m32rx_lock (SIM_CPU *current_cpu, void *sem_arg)
1410 1.1 christos {
1411 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1412 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1413 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1414 1.1 christos int cycles = 0;
1415 1.1 christos {
1416 1.1 christos int referenced = 0;
1417 1.1 christos int UNUSED insn_referenced = abuf->written;
1418 1.1 christos INT in_sr = 0;
1419 1.1 christos INT out_dr = 0;
1420 1.1 christos in_sr = FLD (in_sr);
1421 1.1 christos out_dr = FLD (out_dr);
1422 1.1 christos referenced |= 1 << 0;
1423 1.1 christos referenced |= 1 << 1;
1424 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
1425 1.1 christos }
1426 1.1 christos return cycles;
1427 1.1 christos #undef FLD
1428 1.1 christos }
1429 1.1 christos
1430 1.1 christos static int
1431 1.1 christos model_m32rx_machi_a (SIM_CPU *current_cpu, void *sem_arg)
1432 1.1 christos {
1433 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f
1434 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1435 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1436 1.1 christos int cycles = 0;
1437 1.1 christos {
1438 1.1 christos int referenced = 0;
1439 1.1 christos int UNUSED insn_referenced = abuf->written;
1440 1.1 christos INT in_src1 = -1;
1441 1.1 christos INT in_src2 = -1;
1442 1.1 christos in_src1 = FLD (in_src1);
1443 1.1 christos in_src2 = FLD (in_src2);
1444 1.1 christos referenced |= 1 << 0;
1445 1.1 christos referenced |= 1 << 1;
1446 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
1447 1.1 christos }
1448 1.1 christos return cycles;
1449 1.1 christos #undef FLD
1450 1.1 christos }
1451 1.1 christos
1452 1.1 christos static int
1453 1.1 christos model_m32rx_maclo_a (SIM_CPU *current_cpu, void *sem_arg)
1454 1.1 christos {
1455 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f
1456 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1457 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1458 1.1 christos int cycles = 0;
1459 1.1 christos {
1460 1.1 christos int referenced = 0;
1461 1.1 christos int UNUSED insn_referenced = abuf->written;
1462 1.1 christos INT in_src1 = -1;
1463 1.1 christos INT in_src2 = -1;
1464 1.1 christos in_src1 = FLD (in_src1);
1465 1.1 christos in_src2 = FLD (in_src2);
1466 1.1 christos referenced |= 1 << 0;
1467 1.1 christos referenced |= 1 << 1;
1468 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
1469 1.1 christos }
1470 1.1 christos return cycles;
1471 1.1 christos #undef FLD
1472 1.1 christos }
1473 1.1 christos
1474 1.1 christos static int
1475 1.1 christos model_m32rx_macwhi_a (SIM_CPU *current_cpu, void *sem_arg)
1476 1.1 christos {
1477 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f
1478 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1479 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1480 1.1 christos int cycles = 0;
1481 1.1 christos {
1482 1.1 christos int referenced = 0;
1483 1.1 christos int UNUSED insn_referenced = abuf->written;
1484 1.1 christos INT in_src1 = -1;
1485 1.1 christos INT in_src2 = -1;
1486 1.1 christos in_src1 = FLD (in_src1);
1487 1.1 christos in_src2 = FLD (in_src2);
1488 1.1 christos referenced |= 1 << 0;
1489 1.1 christos referenced |= 1 << 1;
1490 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
1491 1.1 christos }
1492 1.1 christos return cycles;
1493 1.1 christos #undef FLD
1494 1.1 christos }
1495 1.1 christos
1496 1.1 christos static int
1497 1.1 christos model_m32rx_macwlo_a (SIM_CPU *current_cpu, void *sem_arg)
1498 1.1 christos {
1499 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f
1500 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1501 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1502 1.1 christos int cycles = 0;
1503 1.1 christos {
1504 1.1 christos int referenced = 0;
1505 1.1 christos int UNUSED insn_referenced = abuf->written;
1506 1.1 christos INT in_src1 = -1;
1507 1.1 christos INT in_src2 = -1;
1508 1.1 christos in_src1 = FLD (in_src1);
1509 1.1 christos in_src2 = FLD (in_src2);
1510 1.1 christos referenced |= 1 << 0;
1511 1.1 christos referenced |= 1 << 1;
1512 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
1513 1.1 christos }
1514 1.1 christos return cycles;
1515 1.1 christos #undef FLD
1516 1.1 christos }
1517 1.1 christos
1518 1.1 christos static int
1519 1.1 christos model_m32rx_mul (SIM_CPU *current_cpu, void *sem_arg)
1520 1.1 christos {
1521 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
1522 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1523 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1524 1.1 christos int cycles = 0;
1525 1.1 christos {
1526 1.1 christos int referenced = 0;
1527 1.1 christos int UNUSED insn_referenced = abuf->written;
1528 1.1 christos INT in_sr = -1;
1529 1.1 christos INT in_dr = -1;
1530 1.1 christos INT out_dr = -1;
1531 1.1 christos in_sr = FLD (in_sr);
1532 1.1 christos in_dr = FLD (in_dr);
1533 1.1 christos out_dr = FLD (out_dr);
1534 1.1 christos referenced |= 1 << 0;
1535 1.1 christos referenced |= 1 << 1;
1536 1.1 christos referenced |= 1 << 2;
1537 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1538 1.1 christos }
1539 1.1 christos return cycles;
1540 1.1 christos #undef FLD
1541 1.1 christos }
1542 1.1 christos
1543 1.1 christos static int
1544 1.1 christos model_m32rx_mulhi_a (SIM_CPU *current_cpu, void *sem_arg)
1545 1.1 christos {
1546 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f
1547 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1548 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1549 1.1 christos int cycles = 0;
1550 1.1 christos {
1551 1.1 christos int referenced = 0;
1552 1.1 christos int UNUSED insn_referenced = abuf->written;
1553 1.1 christos INT in_src1 = -1;
1554 1.1 christos INT in_src2 = -1;
1555 1.1 christos in_src1 = FLD (in_src1);
1556 1.1 christos in_src2 = FLD (in_src2);
1557 1.1 christos referenced |= 1 << 0;
1558 1.1 christos referenced |= 1 << 1;
1559 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
1560 1.1 christos }
1561 1.1 christos return cycles;
1562 1.1 christos #undef FLD
1563 1.1 christos }
1564 1.1 christos
1565 1.1 christos static int
1566 1.1 christos model_m32rx_mullo_a (SIM_CPU *current_cpu, void *sem_arg)
1567 1.1 christos {
1568 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f
1569 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1570 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1571 1.1 christos int cycles = 0;
1572 1.1 christos {
1573 1.1 christos int referenced = 0;
1574 1.1 christos int UNUSED insn_referenced = abuf->written;
1575 1.1 christos INT in_src1 = -1;
1576 1.1 christos INT in_src2 = -1;
1577 1.1 christos in_src1 = FLD (in_src1);
1578 1.1 christos in_src2 = FLD (in_src2);
1579 1.1 christos referenced |= 1 << 0;
1580 1.1 christos referenced |= 1 << 1;
1581 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
1582 1.1 christos }
1583 1.1 christos return cycles;
1584 1.1 christos #undef FLD
1585 1.1 christos }
1586 1.1 christos
1587 1.1 christos static int
1588 1.1 christos model_m32rx_mulwhi_a (SIM_CPU *current_cpu, void *sem_arg)
1589 1.1 christos {
1590 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f
1591 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1592 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1593 1.1 christos int cycles = 0;
1594 1.1 christos {
1595 1.1 christos int referenced = 0;
1596 1.1 christos int UNUSED insn_referenced = abuf->written;
1597 1.1 christos INT in_src1 = -1;
1598 1.1 christos INT in_src2 = -1;
1599 1.1 christos in_src1 = FLD (in_src1);
1600 1.1 christos in_src2 = FLD (in_src2);
1601 1.1 christos referenced |= 1 << 0;
1602 1.1 christos referenced |= 1 << 1;
1603 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
1604 1.1 christos }
1605 1.1 christos return cycles;
1606 1.1 christos #undef FLD
1607 1.1 christos }
1608 1.1 christos
1609 1.1 christos static int
1610 1.1 christos model_m32rx_mulwlo_a (SIM_CPU *current_cpu, void *sem_arg)
1611 1.1 christos {
1612 1.1 christos #define FLD(f) abuf->fields.sfmt_machi_a.f
1613 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1614 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1615 1.1 christos int cycles = 0;
1616 1.1 christos {
1617 1.1 christos int referenced = 0;
1618 1.1 christos int UNUSED insn_referenced = abuf->written;
1619 1.1 christos INT in_src1 = -1;
1620 1.1 christos INT in_src2 = -1;
1621 1.1 christos in_src1 = FLD (in_src1);
1622 1.1 christos in_src2 = FLD (in_src2);
1623 1.1 christos referenced |= 1 << 0;
1624 1.1 christos referenced |= 1 << 1;
1625 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
1626 1.1 christos }
1627 1.1 christos return cycles;
1628 1.1 christos #undef FLD
1629 1.1 christos }
1630 1.1 christos
1631 1.1 christos static int
1632 1.1 christos model_m32rx_mv (SIM_CPU *current_cpu, void *sem_arg)
1633 1.1 christos {
1634 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1635 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1636 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1637 1.1 christos int cycles = 0;
1638 1.1 christos {
1639 1.1 christos int referenced = 0;
1640 1.1 christos int UNUSED insn_referenced = abuf->written;
1641 1.1 christos INT in_sr = -1;
1642 1.1 christos INT in_dr = -1;
1643 1.1 christos INT out_dr = -1;
1644 1.1 christos in_sr = FLD (in_sr);
1645 1.1 christos out_dr = FLD (out_dr);
1646 1.1 christos referenced |= 1 << 0;
1647 1.1 christos referenced |= 1 << 2;
1648 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1649 1.1 christos }
1650 1.1 christos return cycles;
1651 1.1 christos #undef FLD
1652 1.1 christos }
1653 1.1 christos
1654 1.1 christos static int
1655 1.1 christos model_m32rx_mvfachi_a (SIM_CPU *current_cpu, void *sem_arg)
1656 1.1 christos {
1657 1.1 christos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
1658 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1659 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1660 1.1 christos int cycles = 0;
1661 1.1 christos {
1662 1.1 christos int referenced = 0;
1663 1.1 christos int UNUSED insn_referenced = abuf->written;
1664 1.1 christos INT in_sr = -1;
1665 1.1 christos INT in_dr = -1;
1666 1.1 christos INT out_dr = -1;
1667 1.1 christos out_dr = FLD (out_dr);
1668 1.1 christos referenced |= 1 << 2;
1669 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1670 1.1 christos }
1671 1.1 christos return cycles;
1672 1.1 christos #undef FLD
1673 1.1 christos }
1674 1.1 christos
1675 1.1 christos static int
1676 1.1 christos model_m32rx_mvfaclo_a (SIM_CPU *current_cpu, void *sem_arg)
1677 1.1 christos {
1678 1.1 christos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
1679 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1680 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1681 1.1 christos int cycles = 0;
1682 1.1 christos {
1683 1.1 christos int referenced = 0;
1684 1.1 christos int UNUSED insn_referenced = abuf->written;
1685 1.1 christos INT in_sr = -1;
1686 1.1 christos INT in_dr = -1;
1687 1.1 christos INT out_dr = -1;
1688 1.1 christos out_dr = FLD (out_dr);
1689 1.1 christos referenced |= 1 << 2;
1690 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1691 1.1 christos }
1692 1.1 christos return cycles;
1693 1.1 christos #undef FLD
1694 1.1 christos }
1695 1.1 christos
1696 1.1 christos static int
1697 1.1 christos model_m32rx_mvfacmi_a (SIM_CPU *current_cpu, void *sem_arg)
1698 1.1 christos {
1699 1.1 christos #define FLD(f) abuf->fields.sfmt_mvfachi_a.f
1700 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1701 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1702 1.1 christos int cycles = 0;
1703 1.1 christos {
1704 1.1 christos int referenced = 0;
1705 1.1 christos int UNUSED insn_referenced = abuf->written;
1706 1.1 christos INT in_sr = -1;
1707 1.1 christos INT in_dr = -1;
1708 1.1 christos INT out_dr = -1;
1709 1.1 christos out_dr = FLD (out_dr);
1710 1.1 christos referenced |= 1 << 2;
1711 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1712 1.1 christos }
1713 1.1 christos return cycles;
1714 1.1 christos #undef FLD
1715 1.1 christos }
1716 1.1 christos
1717 1.1 christos static int
1718 1.1 christos model_m32rx_mvfc (SIM_CPU *current_cpu, void *sem_arg)
1719 1.1 christos {
1720 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1721 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1722 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1723 1.1 christos int cycles = 0;
1724 1.1 christos {
1725 1.1 christos int referenced = 0;
1726 1.1 christos int UNUSED insn_referenced = abuf->written;
1727 1.1 christos INT in_sr = -1;
1728 1.1 christos INT in_dr = -1;
1729 1.1 christos INT out_dr = -1;
1730 1.1 christos out_dr = FLD (out_dr);
1731 1.1 christos referenced |= 1 << 2;
1732 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1733 1.1 christos }
1734 1.1 christos return cycles;
1735 1.1 christos #undef FLD
1736 1.1 christos }
1737 1.1 christos
1738 1.1 christos static int
1739 1.1 christos model_m32rx_mvtachi_a (SIM_CPU *current_cpu, void *sem_arg)
1740 1.1 christos {
1741 1.1 christos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
1742 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1743 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1744 1.1 christos int cycles = 0;
1745 1.1 christos {
1746 1.1 christos int referenced = 0;
1747 1.1 christos int UNUSED insn_referenced = abuf->written;
1748 1.1 christos INT in_sr = -1;
1749 1.1 christos INT in_dr = -1;
1750 1.1 christos INT out_dr = -1;
1751 1.1 christos in_sr = FLD (in_src1);
1752 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1753 1.1 christos }
1754 1.1 christos return cycles;
1755 1.1 christos #undef FLD
1756 1.1 christos }
1757 1.1 christos
1758 1.1 christos static int
1759 1.1 christos model_m32rx_mvtaclo_a (SIM_CPU *current_cpu, void *sem_arg)
1760 1.1 christos {
1761 1.1 christos #define FLD(f) abuf->fields.sfmt_mvtachi_a.f
1762 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1763 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1764 1.1 christos int cycles = 0;
1765 1.1 christos {
1766 1.1 christos int referenced = 0;
1767 1.1 christos int UNUSED insn_referenced = abuf->written;
1768 1.1 christos INT in_sr = -1;
1769 1.1 christos INT in_dr = -1;
1770 1.1 christos INT out_dr = -1;
1771 1.1 christos in_sr = FLD (in_src1);
1772 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1773 1.1 christos }
1774 1.1 christos return cycles;
1775 1.1 christos #undef FLD
1776 1.1 christos }
1777 1.1 christos
1778 1.1 christos static int
1779 1.1 christos model_m32rx_mvtc (SIM_CPU *current_cpu, void *sem_arg)
1780 1.1 christos {
1781 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1782 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1783 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1784 1.1 christos int cycles = 0;
1785 1.1 christos {
1786 1.1 christos int referenced = 0;
1787 1.1 christos int UNUSED insn_referenced = abuf->written;
1788 1.1 christos INT in_sr = -1;
1789 1.1 christos INT in_dr = -1;
1790 1.1 christos INT out_dr = -1;
1791 1.1 christos in_sr = FLD (in_sr);
1792 1.1 christos referenced |= 1 << 0;
1793 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1794 1.1 christos }
1795 1.1 christos return cycles;
1796 1.1 christos #undef FLD
1797 1.1 christos }
1798 1.1 christos
1799 1.1 christos static int
1800 1.1 christos model_m32rx_neg (SIM_CPU *current_cpu, void *sem_arg)
1801 1.1 christos {
1802 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1803 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1804 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1805 1.1 christos int cycles = 0;
1806 1.1 christos {
1807 1.1 christos int referenced = 0;
1808 1.1 christos int UNUSED insn_referenced = abuf->written;
1809 1.1 christos INT in_sr = -1;
1810 1.1 christos INT in_dr = -1;
1811 1.1 christos INT out_dr = -1;
1812 1.1 christos in_sr = FLD (in_sr);
1813 1.1 christos out_dr = FLD (out_dr);
1814 1.1 christos referenced |= 1 << 0;
1815 1.1 christos referenced |= 1 << 2;
1816 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1817 1.1 christos }
1818 1.1 christos return cycles;
1819 1.1 christos #undef FLD
1820 1.1 christos }
1821 1.1 christos
1822 1.1 christos static int
1823 1.1 christos model_m32rx_nop (SIM_CPU *current_cpu, void *sem_arg)
1824 1.1 christos {
1825 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
1826 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1827 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1828 1.1 christos int cycles = 0;
1829 1.1 christos {
1830 1.1 christos int referenced = 0;
1831 1.1 christos int UNUSED insn_referenced = abuf->written;
1832 1.1 christos INT in_sr = -1;
1833 1.1 christos INT in_dr = -1;
1834 1.1 christos INT out_dr = -1;
1835 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1836 1.1 christos }
1837 1.1 christos return cycles;
1838 1.1 christos #undef FLD
1839 1.1 christos }
1840 1.1 christos
1841 1.1 christos static int
1842 1.1 christos model_m32rx_not (SIM_CPU *current_cpu, void *sem_arg)
1843 1.1 christos {
1844 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
1845 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1846 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1847 1.1 christos int cycles = 0;
1848 1.1 christos {
1849 1.1 christos int referenced = 0;
1850 1.1 christos int UNUSED insn_referenced = abuf->written;
1851 1.1 christos INT in_sr = -1;
1852 1.1 christos INT in_dr = -1;
1853 1.1 christos INT out_dr = -1;
1854 1.1 christos in_sr = FLD (in_sr);
1855 1.1 christos out_dr = FLD (out_dr);
1856 1.1 christos referenced |= 1 << 0;
1857 1.1 christos referenced |= 1 << 2;
1858 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1859 1.1 christos }
1860 1.1 christos return cycles;
1861 1.1 christos #undef FLD
1862 1.1 christos }
1863 1.1 christos
1864 1.1 christos static int
1865 1.1 christos model_m32rx_rac_dsi (SIM_CPU *current_cpu, void *sem_arg)
1866 1.1 christos {
1867 1.1 christos #define FLD(f) abuf->fields.sfmt_rac_dsi.f
1868 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1869 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1870 1.1 christos int cycles = 0;
1871 1.1 christos {
1872 1.1 christos int referenced = 0;
1873 1.1 christos int UNUSED insn_referenced = abuf->written;
1874 1.1 christos INT in_src1 = -1;
1875 1.1 christos INT in_src2 = -1;
1876 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
1877 1.1 christos }
1878 1.1 christos return cycles;
1879 1.1 christos #undef FLD
1880 1.1 christos }
1881 1.1 christos
1882 1.1 christos static int
1883 1.1 christos model_m32rx_rach_dsi (SIM_CPU *current_cpu, void *sem_arg)
1884 1.1 christos {
1885 1.1 christos #define FLD(f) abuf->fields.sfmt_rac_dsi.f
1886 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1887 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1888 1.1 christos int cycles = 0;
1889 1.1 christos {
1890 1.1 christos int referenced = 0;
1891 1.1 christos int UNUSED insn_referenced = abuf->written;
1892 1.1 christos INT in_src1 = -1;
1893 1.1 christos INT in_src2 = -1;
1894 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
1895 1.1 christos }
1896 1.1 christos return cycles;
1897 1.1 christos #undef FLD
1898 1.1 christos }
1899 1.1 christos
1900 1.1 christos static int
1901 1.1 christos model_m32rx_rte (SIM_CPU *current_cpu, void *sem_arg)
1902 1.1 christos {
1903 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
1904 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1905 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1906 1.1 christos int cycles = 0;
1907 1.1 christos {
1908 1.1 christos int referenced = 0;
1909 1.1 christos int UNUSED insn_referenced = abuf->written;
1910 1.1 christos INT in_sr = -1;
1911 1.1 christos INT in_dr = -1;
1912 1.1 christos INT out_dr = -1;
1913 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1914 1.1 christos }
1915 1.1 christos return cycles;
1916 1.1 christos #undef FLD
1917 1.1 christos }
1918 1.1 christos
1919 1.1 christos static int
1920 1.1 christos model_m32rx_seth (SIM_CPU *current_cpu, void *sem_arg)
1921 1.1 christos {
1922 1.1 christos #define FLD(f) abuf->fields.sfmt_seth.f
1923 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1924 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1925 1.1 christos int cycles = 0;
1926 1.1 christos {
1927 1.1 christos int referenced = 0;
1928 1.1 christos int UNUSED insn_referenced = abuf->written;
1929 1.1 christos INT in_sr = -1;
1930 1.1 christos INT in_dr = -1;
1931 1.1 christos INT out_dr = -1;
1932 1.1 christos out_dr = FLD (out_dr);
1933 1.1 christos referenced |= 1 << 2;
1934 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1935 1.1 christos }
1936 1.1 christos return cycles;
1937 1.1 christos #undef FLD
1938 1.1 christos }
1939 1.1 christos
1940 1.1 christos static int
1941 1.1 christos model_m32rx_sll (SIM_CPU *current_cpu, void *sem_arg)
1942 1.1 christos {
1943 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
1944 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1945 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1946 1.1 christos int cycles = 0;
1947 1.1 christos {
1948 1.1 christos int referenced = 0;
1949 1.1 christos int UNUSED insn_referenced = abuf->written;
1950 1.1 christos INT in_sr = -1;
1951 1.1 christos INT in_dr = -1;
1952 1.1 christos INT out_dr = -1;
1953 1.1 christos in_sr = FLD (in_sr);
1954 1.1 christos in_dr = FLD (in_dr);
1955 1.1 christos out_dr = FLD (out_dr);
1956 1.1 christos referenced |= 1 << 0;
1957 1.1 christos referenced |= 1 << 1;
1958 1.1 christos referenced |= 1 << 2;
1959 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1960 1.1 christos }
1961 1.1 christos return cycles;
1962 1.1 christos #undef FLD
1963 1.1 christos }
1964 1.1 christos
1965 1.1 christos static int
1966 1.1 christos model_m32rx_sll3 (SIM_CPU *current_cpu, void *sem_arg)
1967 1.1 christos {
1968 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
1969 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1970 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1971 1.1 christos int cycles = 0;
1972 1.1 christos {
1973 1.1 christos int referenced = 0;
1974 1.1 christos int UNUSED insn_referenced = abuf->written;
1975 1.1 christos INT in_sr = -1;
1976 1.1 christos INT in_dr = -1;
1977 1.1 christos INT out_dr = -1;
1978 1.1 christos in_sr = FLD (in_sr);
1979 1.1 christos out_dr = FLD (out_dr);
1980 1.1 christos referenced |= 1 << 0;
1981 1.1 christos referenced |= 1 << 2;
1982 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
1983 1.1 christos }
1984 1.1 christos return cycles;
1985 1.1 christos #undef FLD
1986 1.1 christos }
1987 1.1 christos
1988 1.1 christos static int
1989 1.1 christos model_m32rx_slli (SIM_CPU *current_cpu, void *sem_arg)
1990 1.1 christos {
1991 1.1 christos #define FLD(f) abuf->fields.sfmt_slli.f
1992 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
1993 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
1994 1.1 christos int cycles = 0;
1995 1.1 christos {
1996 1.1 christos int referenced = 0;
1997 1.1 christos int UNUSED insn_referenced = abuf->written;
1998 1.1 christos INT in_sr = -1;
1999 1.1 christos INT in_dr = -1;
2000 1.1 christos INT out_dr = -1;
2001 1.1 christos in_dr = FLD (in_dr);
2002 1.1 christos out_dr = FLD (out_dr);
2003 1.1 christos referenced |= 1 << 1;
2004 1.1 christos referenced |= 1 << 2;
2005 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2006 1.1 christos }
2007 1.1 christos return cycles;
2008 1.1 christos #undef FLD
2009 1.1 christos }
2010 1.1 christos
2011 1.1 christos static int
2012 1.1 christos model_m32rx_sra (SIM_CPU *current_cpu, void *sem_arg)
2013 1.1 christos {
2014 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
2015 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2016 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2017 1.1 christos int cycles = 0;
2018 1.1 christos {
2019 1.1 christos int referenced = 0;
2020 1.1 christos int UNUSED insn_referenced = abuf->written;
2021 1.1 christos INT in_sr = -1;
2022 1.1 christos INT in_dr = -1;
2023 1.1 christos INT out_dr = -1;
2024 1.1 christos in_sr = FLD (in_sr);
2025 1.1 christos in_dr = FLD (in_dr);
2026 1.1 christos out_dr = FLD (out_dr);
2027 1.1 christos referenced |= 1 << 0;
2028 1.1 christos referenced |= 1 << 1;
2029 1.1 christos referenced |= 1 << 2;
2030 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2031 1.1 christos }
2032 1.1 christos return cycles;
2033 1.1 christos #undef FLD
2034 1.1 christos }
2035 1.1 christos
2036 1.1 christos static int
2037 1.1 christos model_m32rx_sra3 (SIM_CPU *current_cpu, void *sem_arg)
2038 1.1 christos {
2039 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
2040 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2041 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2042 1.1 christos int cycles = 0;
2043 1.1 christos {
2044 1.1 christos int referenced = 0;
2045 1.1 christos int UNUSED insn_referenced = abuf->written;
2046 1.1 christos INT in_sr = -1;
2047 1.1 christos INT in_dr = -1;
2048 1.1 christos INT out_dr = -1;
2049 1.1 christos in_sr = FLD (in_sr);
2050 1.1 christos out_dr = FLD (out_dr);
2051 1.1 christos referenced |= 1 << 0;
2052 1.1 christos referenced |= 1 << 2;
2053 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2054 1.1 christos }
2055 1.1 christos return cycles;
2056 1.1 christos #undef FLD
2057 1.1 christos }
2058 1.1 christos
2059 1.1 christos static int
2060 1.1 christos model_m32rx_srai (SIM_CPU *current_cpu, void *sem_arg)
2061 1.1 christos {
2062 1.1 christos #define FLD(f) abuf->fields.sfmt_slli.f
2063 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2064 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2065 1.1 christos int cycles = 0;
2066 1.1 christos {
2067 1.1 christos int referenced = 0;
2068 1.1 christos int UNUSED insn_referenced = abuf->written;
2069 1.1 christos INT in_sr = -1;
2070 1.1 christos INT in_dr = -1;
2071 1.1 christos INT out_dr = -1;
2072 1.1 christos in_dr = FLD (in_dr);
2073 1.1 christos out_dr = FLD (out_dr);
2074 1.1 christos referenced |= 1 << 1;
2075 1.1 christos referenced |= 1 << 2;
2076 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2077 1.1 christos }
2078 1.1 christos return cycles;
2079 1.1 christos #undef FLD
2080 1.1 christos }
2081 1.1 christos
2082 1.1 christos static int
2083 1.1 christos model_m32rx_srl (SIM_CPU *current_cpu, void *sem_arg)
2084 1.1 christos {
2085 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
2086 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2087 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2088 1.1 christos int cycles = 0;
2089 1.1 christos {
2090 1.1 christos int referenced = 0;
2091 1.1 christos int UNUSED insn_referenced = abuf->written;
2092 1.1 christos INT in_sr = -1;
2093 1.1 christos INT in_dr = -1;
2094 1.1 christos INT out_dr = -1;
2095 1.1 christos in_sr = FLD (in_sr);
2096 1.1 christos in_dr = FLD (in_dr);
2097 1.1 christos out_dr = FLD (out_dr);
2098 1.1 christos referenced |= 1 << 0;
2099 1.1 christos referenced |= 1 << 1;
2100 1.1 christos referenced |= 1 << 2;
2101 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2102 1.1 christos }
2103 1.1 christos return cycles;
2104 1.1 christos #undef FLD
2105 1.1 christos }
2106 1.1 christos
2107 1.1 christos static int
2108 1.1 christos model_m32rx_srl3 (SIM_CPU *current_cpu, void *sem_arg)
2109 1.1 christos {
2110 1.1 christos #define FLD(f) abuf->fields.sfmt_add3.f
2111 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2112 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2113 1.1 christos int cycles = 0;
2114 1.1 christos {
2115 1.1 christos int referenced = 0;
2116 1.1 christos int UNUSED insn_referenced = abuf->written;
2117 1.1 christos INT in_sr = -1;
2118 1.1 christos INT in_dr = -1;
2119 1.1 christos INT out_dr = -1;
2120 1.1 christos in_sr = FLD (in_sr);
2121 1.1 christos out_dr = FLD (out_dr);
2122 1.1 christos referenced |= 1 << 0;
2123 1.1 christos referenced |= 1 << 2;
2124 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2125 1.1 christos }
2126 1.1 christos return cycles;
2127 1.1 christos #undef FLD
2128 1.1 christos }
2129 1.1 christos
2130 1.1 christos static int
2131 1.1 christos model_m32rx_srli (SIM_CPU *current_cpu, void *sem_arg)
2132 1.1 christos {
2133 1.1 christos #define FLD(f) abuf->fields.sfmt_slli.f
2134 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2135 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2136 1.1 christos int cycles = 0;
2137 1.1 christos {
2138 1.1 christos int referenced = 0;
2139 1.1 christos int UNUSED insn_referenced = abuf->written;
2140 1.1 christos INT in_sr = -1;
2141 1.1 christos INT in_dr = -1;
2142 1.1 christos INT out_dr = -1;
2143 1.1 christos in_dr = FLD (in_dr);
2144 1.1 christos out_dr = FLD (out_dr);
2145 1.1 christos referenced |= 1 << 1;
2146 1.1 christos referenced |= 1 << 2;
2147 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2148 1.1 christos }
2149 1.1 christos return cycles;
2150 1.1 christos #undef FLD
2151 1.1 christos }
2152 1.1 christos
2153 1.1 christos static int
2154 1.1 christos model_m32rx_st (SIM_CPU *current_cpu, void *sem_arg)
2155 1.1 christos {
2156 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2157 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2158 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2159 1.1 christos int cycles = 0;
2160 1.1 christos {
2161 1.1 christos int referenced = 0;
2162 1.1 christos int UNUSED insn_referenced = abuf->written;
2163 1.1 christos INT in_src1 = 0;
2164 1.1 christos INT in_src2 = 0;
2165 1.1 christos in_src1 = FLD (in_src1);
2166 1.1 christos in_src2 = FLD (in_src2);
2167 1.1 christos referenced |= 1 << 0;
2168 1.1 christos referenced |= 1 << 1;
2169 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
2170 1.1 christos }
2171 1.1 christos return cycles;
2172 1.1 christos #undef FLD
2173 1.1 christos }
2174 1.1 christos
2175 1.1 christos static int
2176 1.1 christos model_m32rx_st_d (SIM_CPU *current_cpu, void *sem_arg)
2177 1.1 christos {
2178 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f
2179 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2180 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2181 1.1 christos int cycles = 0;
2182 1.1 christos {
2183 1.1 christos int referenced = 0;
2184 1.1 christos int UNUSED insn_referenced = abuf->written;
2185 1.1 christos INT in_src1 = 0;
2186 1.1 christos INT in_src2 = 0;
2187 1.1 christos in_src1 = FLD (in_src1);
2188 1.1 christos in_src2 = FLD (in_src2);
2189 1.1 christos referenced |= 1 << 0;
2190 1.1 christos referenced |= 1 << 1;
2191 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
2192 1.1 christos }
2193 1.1 christos return cycles;
2194 1.1 christos #undef FLD
2195 1.1 christos }
2196 1.1 christos
2197 1.1 christos static int
2198 1.1 christos model_m32rx_stb (SIM_CPU *current_cpu, void *sem_arg)
2199 1.1 christos {
2200 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2201 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2202 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2203 1.1 christos int cycles = 0;
2204 1.1 christos {
2205 1.1 christos int referenced = 0;
2206 1.1 christos int UNUSED insn_referenced = abuf->written;
2207 1.1 christos INT in_src1 = 0;
2208 1.1 christos INT in_src2 = 0;
2209 1.1 christos in_src1 = FLD (in_src1);
2210 1.1 christos in_src2 = FLD (in_src2);
2211 1.1 christos referenced |= 1 << 0;
2212 1.1 christos referenced |= 1 << 1;
2213 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
2214 1.1 christos }
2215 1.1 christos return cycles;
2216 1.1 christos #undef FLD
2217 1.1 christos }
2218 1.1 christos
2219 1.1 christos static int
2220 1.1 christos model_m32rx_stb_d (SIM_CPU *current_cpu, void *sem_arg)
2221 1.1 christos {
2222 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f
2223 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2224 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2225 1.1 christos int cycles = 0;
2226 1.1 christos {
2227 1.1 christos int referenced = 0;
2228 1.1 christos int UNUSED insn_referenced = abuf->written;
2229 1.1 christos INT in_src1 = 0;
2230 1.1 christos INT in_src2 = 0;
2231 1.1 christos in_src1 = FLD (in_src1);
2232 1.1 christos in_src2 = FLD (in_src2);
2233 1.1 christos referenced |= 1 << 0;
2234 1.1 christos referenced |= 1 << 1;
2235 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
2236 1.1 christos }
2237 1.1 christos return cycles;
2238 1.1 christos #undef FLD
2239 1.1 christos }
2240 1.1 christos
2241 1.1 christos static int
2242 1.1 christos model_m32rx_sth (SIM_CPU *current_cpu, void *sem_arg)
2243 1.1 christos {
2244 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2245 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2246 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2247 1.1 christos int cycles = 0;
2248 1.1 christos {
2249 1.1 christos int referenced = 0;
2250 1.1 christos int UNUSED insn_referenced = abuf->written;
2251 1.1 christos INT in_src1 = 0;
2252 1.1 christos INT in_src2 = 0;
2253 1.1 christos in_src1 = FLD (in_src1);
2254 1.1 christos in_src2 = FLD (in_src2);
2255 1.1 christos referenced |= 1 << 0;
2256 1.1 christos referenced |= 1 << 1;
2257 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
2258 1.1 christos }
2259 1.1 christos return cycles;
2260 1.1 christos #undef FLD
2261 1.1 christos }
2262 1.1 christos
2263 1.1 christos static int
2264 1.1 christos model_m32rx_sth_d (SIM_CPU *current_cpu, void *sem_arg)
2265 1.1 christos {
2266 1.1 christos #define FLD(f) abuf->fields.sfmt_st_d.f
2267 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2268 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2269 1.1 christos int cycles = 0;
2270 1.1 christos {
2271 1.1 christos int referenced = 0;
2272 1.1 christos int UNUSED insn_referenced = abuf->written;
2273 1.1 christos INT in_src1 = 0;
2274 1.1 christos INT in_src2 = 0;
2275 1.1 christos in_src1 = FLD (in_src1);
2276 1.1 christos in_src2 = FLD (in_src2);
2277 1.1 christos referenced |= 1 << 0;
2278 1.1 christos referenced |= 1 << 1;
2279 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
2280 1.1 christos }
2281 1.1 christos return cycles;
2282 1.1 christos #undef FLD
2283 1.1 christos }
2284 1.1 christos
2285 1.1 christos static int
2286 1.1 christos model_m32rx_st_plus (SIM_CPU *current_cpu, void *sem_arg)
2287 1.1 christos {
2288 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2289 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2290 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2291 1.1 christos int cycles = 0;
2292 1.1 christos {
2293 1.1 christos int referenced = 0;
2294 1.1 christos int UNUSED insn_referenced = abuf->written;
2295 1.1 christos INT in_src1 = 0;
2296 1.1 christos INT in_src2 = 0;
2297 1.1 christos in_src1 = FLD (in_src1);
2298 1.1 christos in_src2 = FLD (in_src2);
2299 1.1 christos referenced |= 1 << 0;
2300 1.1 christos referenced |= 1 << 1;
2301 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
2302 1.1 christos }
2303 1.1 christos {
2304 1.1 christos int referenced = 0;
2305 1.1 christos int UNUSED insn_referenced = abuf->written;
2306 1.1 christos INT in_sr = -1;
2307 1.1 christos INT in_dr = -1;
2308 1.1 christos INT out_dr = -1;
2309 1.1 christos in_dr = FLD (in_src2);
2310 1.1 christos out_dr = FLD (out_src2);
2311 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr);
2312 1.1 christos }
2313 1.1 christos return cycles;
2314 1.1 christos #undef FLD
2315 1.1 christos }
2316 1.1 christos
2317 1.1 christos static int
2318 1.1 christos model_m32rx_sth_plus (SIM_CPU *current_cpu, void *sem_arg)
2319 1.1 christos {
2320 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2321 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2322 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2323 1.1 christos int cycles = 0;
2324 1.1 christos {
2325 1.1 christos int referenced = 0;
2326 1.1 christos int UNUSED insn_referenced = abuf->written;
2327 1.1 christos INT in_src1 = 0;
2328 1.1 christos INT in_src2 = 0;
2329 1.1 christos in_src1 = FLD (in_src1);
2330 1.1 christos in_src2 = FLD (in_src2);
2331 1.1 christos referenced |= 1 << 0;
2332 1.1 christos referenced |= 1 << 1;
2333 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
2334 1.1 christos }
2335 1.1 christos {
2336 1.1 christos int referenced = 0;
2337 1.1 christos int UNUSED insn_referenced = abuf->written;
2338 1.1 christos INT in_sr = -1;
2339 1.1 christos INT in_dr = -1;
2340 1.1 christos INT out_dr = -1;
2341 1.1 christos in_dr = FLD (in_src2);
2342 1.1 christos out_dr = FLD (out_src2);
2343 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr);
2344 1.1 christos }
2345 1.1 christos return cycles;
2346 1.1 christos #undef FLD
2347 1.1 christos }
2348 1.1 christos
2349 1.1 christos static int
2350 1.1 christos model_m32rx_stb_plus (SIM_CPU *current_cpu, void *sem_arg)
2351 1.1 christos {
2352 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2353 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2354 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2355 1.1 christos int cycles = 0;
2356 1.1 christos {
2357 1.1 christos int referenced = 0;
2358 1.1 christos int UNUSED insn_referenced = abuf->written;
2359 1.1 christos INT in_src1 = 0;
2360 1.1 christos INT in_src2 = 0;
2361 1.1 christos in_src1 = FLD (in_src1);
2362 1.1 christos in_src2 = FLD (in_src2);
2363 1.1 christos referenced |= 1 << 0;
2364 1.1 christos referenced |= 1 << 1;
2365 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
2366 1.1 christos }
2367 1.1 christos {
2368 1.1 christos int referenced = 0;
2369 1.1 christos int UNUSED insn_referenced = abuf->written;
2370 1.1 christos INT in_sr = -1;
2371 1.1 christos INT in_dr = -1;
2372 1.1 christos INT out_dr = -1;
2373 1.1 christos in_dr = FLD (in_src2);
2374 1.1 christos out_dr = FLD (out_src2);
2375 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr);
2376 1.1 christos }
2377 1.1 christos return cycles;
2378 1.1 christos #undef FLD
2379 1.1 christos }
2380 1.1 christos
2381 1.1 christos static int
2382 1.1 christos model_m32rx_st_minus (SIM_CPU *current_cpu, void *sem_arg)
2383 1.1 christos {
2384 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2385 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2386 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2387 1.1 christos int cycles = 0;
2388 1.1 christos {
2389 1.1 christos int referenced = 0;
2390 1.1 christos int UNUSED insn_referenced = abuf->written;
2391 1.1 christos INT in_src1 = 0;
2392 1.1 christos INT in_src2 = 0;
2393 1.1 christos in_src1 = FLD (in_src1);
2394 1.1 christos in_src2 = FLD (in_src2);
2395 1.1 christos referenced |= 1 << 0;
2396 1.1 christos referenced |= 1 << 1;
2397 1.1 christos cycles += m32rxf_model_m32rx_u_store (current_cpu, idesc, 0, referenced, in_src1, in_src2);
2398 1.1 christos }
2399 1.1 christos {
2400 1.1 christos int referenced = 0;
2401 1.1 christos int UNUSED insn_referenced = abuf->written;
2402 1.1 christos INT in_sr = -1;
2403 1.1 christos INT in_dr = -1;
2404 1.1 christos INT out_dr = -1;
2405 1.1 christos in_dr = FLD (in_src2);
2406 1.1 christos out_dr = FLD (out_src2);
2407 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 1, referenced, in_sr, in_dr, out_dr);
2408 1.1 christos }
2409 1.1 christos return cycles;
2410 1.1 christos #undef FLD
2411 1.1 christos }
2412 1.1 christos
2413 1.1 christos static int
2414 1.1 christos model_m32rx_sub (SIM_CPU *current_cpu, void *sem_arg)
2415 1.1 christos {
2416 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
2417 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2418 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2419 1.1 christos int cycles = 0;
2420 1.1 christos {
2421 1.1 christos int referenced = 0;
2422 1.1 christos int UNUSED insn_referenced = abuf->written;
2423 1.1 christos INT in_sr = -1;
2424 1.1 christos INT in_dr = -1;
2425 1.1 christos INT out_dr = -1;
2426 1.1 christos in_sr = FLD (in_sr);
2427 1.1 christos in_dr = FLD (in_dr);
2428 1.1 christos out_dr = FLD (out_dr);
2429 1.1 christos referenced |= 1 << 0;
2430 1.1 christos referenced |= 1 << 1;
2431 1.1 christos referenced |= 1 << 2;
2432 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2433 1.1 christos }
2434 1.1 christos return cycles;
2435 1.1 christos #undef FLD
2436 1.1 christos }
2437 1.1 christos
2438 1.1 christos static int
2439 1.1 christos model_m32rx_subv (SIM_CPU *current_cpu, void *sem_arg)
2440 1.1 christos {
2441 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
2442 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2443 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2444 1.1 christos int cycles = 0;
2445 1.1 christos {
2446 1.1 christos int referenced = 0;
2447 1.1 christos int UNUSED insn_referenced = abuf->written;
2448 1.1 christos INT in_sr = -1;
2449 1.1 christos INT in_dr = -1;
2450 1.1 christos INT out_dr = -1;
2451 1.1 christos in_sr = FLD (in_sr);
2452 1.1 christos in_dr = FLD (in_dr);
2453 1.1 christos out_dr = FLD (out_dr);
2454 1.1 christos referenced |= 1 << 0;
2455 1.1 christos referenced |= 1 << 1;
2456 1.1 christos referenced |= 1 << 2;
2457 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2458 1.1 christos }
2459 1.1 christos return cycles;
2460 1.1 christos #undef FLD
2461 1.1 christos }
2462 1.1 christos
2463 1.1 christos static int
2464 1.1 christos model_m32rx_subx (SIM_CPU *current_cpu, void *sem_arg)
2465 1.1 christos {
2466 1.1 christos #define FLD(f) abuf->fields.sfmt_add.f
2467 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2468 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2469 1.1 christos int cycles = 0;
2470 1.1 christos {
2471 1.1 christos int referenced = 0;
2472 1.1 christos int UNUSED insn_referenced = abuf->written;
2473 1.1 christos INT in_sr = -1;
2474 1.1 christos INT in_dr = -1;
2475 1.1 christos INT out_dr = -1;
2476 1.1 christos in_sr = FLD (in_sr);
2477 1.1 christos in_dr = FLD (in_dr);
2478 1.1 christos out_dr = FLD (out_dr);
2479 1.1 christos referenced |= 1 << 0;
2480 1.1 christos referenced |= 1 << 1;
2481 1.1 christos referenced |= 1 << 2;
2482 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2483 1.1 christos }
2484 1.1 christos return cycles;
2485 1.1 christos #undef FLD
2486 1.1 christos }
2487 1.1 christos
2488 1.1 christos static int
2489 1.1 christos model_m32rx_trap (SIM_CPU *current_cpu, void *sem_arg)
2490 1.1 christos {
2491 1.1 christos #define FLD(f) abuf->fields.sfmt_trap.f
2492 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2493 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2494 1.1 christos int cycles = 0;
2495 1.1 christos {
2496 1.1 christos int referenced = 0;
2497 1.1 christos int UNUSED insn_referenced = abuf->written;
2498 1.1 christos INT in_sr = -1;
2499 1.1 christos INT in_dr = -1;
2500 1.1 christos INT out_dr = -1;
2501 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2502 1.1 christos }
2503 1.1 christos return cycles;
2504 1.1 christos #undef FLD
2505 1.1 christos }
2506 1.1 christos
2507 1.1 christos static int
2508 1.1 christos model_m32rx_unlock (SIM_CPU *current_cpu, void *sem_arg)
2509 1.1 christos {
2510 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2511 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2512 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2513 1.1 christos int cycles = 0;
2514 1.1 christos {
2515 1.1 christos int referenced = 0;
2516 1.1 christos int UNUSED insn_referenced = abuf->written;
2517 1.1 christos INT in_sr = 0;
2518 1.1 christos INT out_dr = 0;
2519 1.1 christos cycles += m32rxf_model_m32rx_u_load (current_cpu, idesc, 0, referenced, in_sr, out_dr);
2520 1.1 christos }
2521 1.1 christos return cycles;
2522 1.1 christos #undef FLD
2523 1.1 christos }
2524 1.1 christos
2525 1.1 christos static int
2526 1.1 christos model_m32rx_satb (SIM_CPU *current_cpu, void *sem_arg)
2527 1.1 christos {
2528 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
2529 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2530 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2531 1.1 christos int cycles = 0;
2532 1.1 christos {
2533 1.1 christos int referenced = 0;
2534 1.1 christos int UNUSED insn_referenced = abuf->written;
2535 1.1 christos INT in_sr = -1;
2536 1.1 christos INT in_dr = -1;
2537 1.1 christos INT out_dr = -1;
2538 1.1 christos in_sr = FLD (in_sr);
2539 1.1 christos out_dr = FLD (out_dr);
2540 1.1 christos referenced |= 1 << 0;
2541 1.1 christos referenced |= 1 << 2;
2542 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2543 1.1 christos }
2544 1.1 christos return cycles;
2545 1.1 christos #undef FLD
2546 1.1 christos }
2547 1.1 christos
2548 1.1 christos static int
2549 1.1 christos model_m32rx_sath (SIM_CPU *current_cpu, void *sem_arg)
2550 1.1 christos {
2551 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
2552 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2553 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2554 1.1 christos int cycles = 0;
2555 1.1 christos {
2556 1.1 christos int referenced = 0;
2557 1.1 christos int UNUSED insn_referenced = abuf->written;
2558 1.1 christos INT in_sr = -1;
2559 1.1 christos INT in_dr = -1;
2560 1.1 christos INT out_dr = -1;
2561 1.1 christos in_sr = FLD (in_sr);
2562 1.1 christos out_dr = FLD (out_dr);
2563 1.1 christos referenced |= 1 << 0;
2564 1.1 christos referenced |= 1 << 2;
2565 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2566 1.1 christos }
2567 1.1 christos return cycles;
2568 1.1 christos #undef FLD
2569 1.1 christos }
2570 1.1 christos
2571 1.1 christos static int
2572 1.1 christos model_m32rx_sat (SIM_CPU *current_cpu, void *sem_arg)
2573 1.1 christos {
2574 1.1 christos #define FLD(f) abuf->fields.sfmt_ld_plus.f
2575 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2576 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2577 1.1 christos int cycles = 0;
2578 1.1 christos {
2579 1.1 christos int referenced = 0;
2580 1.1 christos int UNUSED insn_referenced = abuf->written;
2581 1.1 christos INT in_sr = -1;
2582 1.1 christos INT in_dr = -1;
2583 1.1 christos INT out_dr = -1;
2584 1.1 christos in_sr = FLD (in_sr);
2585 1.1 christos out_dr = FLD (out_dr);
2586 1.1 christos if (insn_referenced & (1 << 1)) referenced |= 1 << 0;
2587 1.1 christos referenced |= 1 << 2;
2588 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2589 1.1 christos }
2590 1.1 christos return cycles;
2591 1.1 christos #undef FLD
2592 1.1 christos }
2593 1.1 christos
2594 1.1 christos static int
2595 1.1 christos model_m32rx_pcmpbz (SIM_CPU *current_cpu, void *sem_arg)
2596 1.1 christos {
2597 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2598 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2599 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2600 1.1 christos int cycles = 0;
2601 1.1 christos {
2602 1.1 christos int referenced = 0;
2603 1.1 christos int UNUSED insn_referenced = abuf->written;
2604 1.1 christos INT in_src1 = -1;
2605 1.1 christos INT in_src2 = -1;
2606 1.1 christos in_src2 = FLD (in_src2);
2607 1.1 christos referenced |= 1 << 1;
2608 1.1 christos cycles += m32rxf_model_m32rx_u_cmp (current_cpu, idesc, 0, referenced, in_src1, in_src2);
2609 1.1 christos }
2610 1.1 christos return cycles;
2611 1.1 christos #undef FLD
2612 1.1 christos }
2613 1.1 christos
2614 1.1 christos static int
2615 1.1 christos model_m32rx_sadd (SIM_CPU *current_cpu, void *sem_arg)
2616 1.1 christos {
2617 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2618 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2619 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2620 1.1 christos int cycles = 0;
2621 1.1 christos {
2622 1.1 christos int referenced = 0;
2623 1.1 christos int UNUSED insn_referenced = abuf->written;
2624 1.1 christos INT in_src1 = -1;
2625 1.1 christos INT in_src2 = -1;
2626 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
2627 1.1 christos }
2628 1.1 christos return cycles;
2629 1.1 christos #undef FLD
2630 1.1 christos }
2631 1.1 christos
2632 1.1 christos static int
2633 1.1 christos model_m32rx_macwu1 (SIM_CPU *current_cpu, void *sem_arg)
2634 1.1 christos {
2635 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2636 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2637 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2638 1.1 christos int cycles = 0;
2639 1.1 christos {
2640 1.1 christos int referenced = 0;
2641 1.1 christos int UNUSED insn_referenced = abuf->written;
2642 1.1 christos INT in_src1 = -1;
2643 1.1 christos INT in_src2 = -1;
2644 1.1 christos in_src1 = FLD (in_src1);
2645 1.1 christos in_src2 = FLD (in_src2);
2646 1.1 christos referenced |= 1 << 0;
2647 1.1 christos referenced |= 1 << 1;
2648 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
2649 1.1 christos }
2650 1.1 christos return cycles;
2651 1.1 christos #undef FLD
2652 1.1 christos }
2653 1.1 christos
2654 1.1 christos static int
2655 1.1 christos model_m32rx_msblo (SIM_CPU *current_cpu, void *sem_arg)
2656 1.1 christos {
2657 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2658 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2659 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2660 1.1 christos int cycles = 0;
2661 1.1 christos {
2662 1.1 christos int referenced = 0;
2663 1.1 christos int UNUSED insn_referenced = abuf->written;
2664 1.1 christos INT in_src1 = -1;
2665 1.1 christos INT in_src2 = -1;
2666 1.1 christos in_src1 = FLD (in_src1);
2667 1.1 christos in_src2 = FLD (in_src2);
2668 1.1 christos referenced |= 1 << 0;
2669 1.1 christos referenced |= 1 << 1;
2670 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
2671 1.1 christos }
2672 1.1 christos return cycles;
2673 1.1 christos #undef FLD
2674 1.1 christos }
2675 1.1 christos
2676 1.1 christos static int
2677 1.1 christos model_m32rx_mulwu1 (SIM_CPU *current_cpu, void *sem_arg)
2678 1.1 christos {
2679 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2680 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2681 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2682 1.1 christos int cycles = 0;
2683 1.1 christos {
2684 1.1 christos int referenced = 0;
2685 1.1 christos int UNUSED insn_referenced = abuf->written;
2686 1.1 christos INT in_src1 = -1;
2687 1.1 christos INT in_src2 = -1;
2688 1.1 christos in_src1 = FLD (in_src1);
2689 1.1 christos in_src2 = FLD (in_src2);
2690 1.1 christos referenced |= 1 << 0;
2691 1.1 christos referenced |= 1 << 1;
2692 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
2693 1.1 christos }
2694 1.1 christos return cycles;
2695 1.1 christos #undef FLD
2696 1.1 christos }
2697 1.1 christos
2698 1.1 christos static int
2699 1.1 christos model_m32rx_maclh1 (SIM_CPU *current_cpu, void *sem_arg)
2700 1.1 christos {
2701 1.1 christos #define FLD(f) abuf->fields.sfmt_st_plus.f
2702 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2703 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2704 1.1 christos int cycles = 0;
2705 1.1 christos {
2706 1.1 christos int referenced = 0;
2707 1.1 christos int UNUSED insn_referenced = abuf->written;
2708 1.1 christos INT in_src1 = -1;
2709 1.1 christos INT in_src2 = -1;
2710 1.1 christos in_src1 = FLD (in_src1);
2711 1.1 christos in_src2 = FLD (in_src2);
2712 1.1 christos referenced |= 1 << 0;
2713 1.1 christos referenced |= 1 << 1;
2714 1.1 christos cycles += m32rxf_model_m32rx_u_mac (current_cpu, idesc, 0, referenced, in_src1, in_src2);
2715 1.1 christos }
2716 1.1 christos return cycles;
2717 1.1 christos #undef FLD
2718 1.1 christos }
2719 1.1 christos
2720 1.1 christos static int
2721 1.1 christos model_m32rx_sc (SIM_CPU *current_cpu, void *sem_arg)
2722 1.1 christos {
2723 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2724 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2725 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2726 1.1 christos int cycles = 0;
2727 1.1 christos {
2728 1.1 christos int referenced = 0;
2729 1.1 christos int UNUSED insn_referenced = abuf->written;
2730 1.1 christos INT in_sr = -1;
2731 1.1 christos INT in_dr = -1;
2732 1.1 christos INT out_dr = -1;
2733 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2734 1.1 christos }
2735 1.1 christos return cycles;
2736 1.1 christos #undef FLD
2737 1.1 christos }
2738 1.1 christos
2739 1.1 christos static int
2740 1.1 christos model_m32rx_snc (SIM_CPU *current_cpu, void *sem_arg)
2741 1.1 christos {
2742 1.1 christos #define FLD(f) abuf->fields.sfmt_empty.f
2743 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2744 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2745 1.1 christos int cycles = 0;
2746 1.1 christos {
2747 1.1 christos int referenced = 0;
2748 1.1 christos int UNUSED insn_referenced = abuf->written;
2749 1.1 christos INT in_sr = -1;
2750 1.1 christos INT in_dr = -1;
2751 1.1 christos INT out_dr = -1;
2752 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2753 1.1 christos }
2754 1.1 christos return cycles;
2755 1.1 christos #undef FLD
2756 1.1 christos }
2757 1.1 christos
2758 1.1 christos static int
2759 1.1 christos model_m32rx_clrpsw (SIM_CPU *current_cpu, void *sem_arg)
2760 1.1 christos {
2761 1.1 christos #define FLD(f) abuf->fields.sfmt_clrpsw.f
2762 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2763 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2764 1.1 christos int cycles = 0;
2765 1.1 christos {
2766 1.1 christos int referenced = 0;
2767 1.1 christos int UNUSED insn_referenced = abuf->written;
2768 1.1 christos INT in_sr = -1;
2769 1.1 christos INT in_dr = -1;
2770 1.1 christos INT out_dr = -1;
2771 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2772 1.1 christos }
2773 1.1 christos return cycles;
2774 1.1 christos #undef FLD
2775 1.1 christos }
2776 1.1 christos
2777 1.1 christos static int
2778 1.1 christos model_m32rx_setpsw (SIM_CPU *current_cpu, void *sem_arg)
2779 1.1 christos {
2780 1.1 christos #define FLD(f) abuf->fields.sfmt_clrpsw.f
2781 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2782 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2783 1.1 christos int cycles = 0;
2784 1.1 christos {
2785 1.1 christos int referenced = 0;
2786 1.1 christos int UNUSED insn_referenced = abuf->written;
2787 1.1 christos INT in_sr = -1;
2788 1.1 christos INT in_dr = -1;
2789 1.1 christos INT out_dr = -1;
2790 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2791 1.1 christos }
2792 1.1 christos return cycles;
2793 1.1 christos #undef FLD
2794 1.1 christos }
2795 1.1 christos
2796 1.1 christos static int
2797 1.1 christos model_m32rx_bset (SIM_CPU *current_cpu, void *sem_arg)
2798 1.1 christos {
2799 1.1 christos #define FLD(f) abuf->fields.sfmt_bset.f
2800 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2801 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2802 1.1 christos int cycles = 0;
2803 1.1 christos {
2804 1.1 christos int referenced = 0;
2805 1.1 christos int UNUSED insn_referenced = abuf->written;
2806 1.1 christos INT in_sr = -1;
2807 1.1 christos INT in_dr = -1;
2808 1.1 christos INT out_dr = -1;
2809 1.1 christos in_sr = FLD (in_sr);
2810 1.1 christos referenced |= 1 << 0;
2811 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2812 1.1 christos }
2813 1.1 christos return cycles;
2814 1.1 christos #undef FLD
2815 1.1 christos }
2816 1.1 christos
2817 1.1 christos static int
2818 1.1 christos model_m32rx_bclr (SIM_CPU *current_cpu, void *sem_arg)
2819 1.1 christos {
2820 1.1 christos #define FLD(f) abuf->fields.sfmt_bset.f
2821 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2822 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2823 1.1 christos int cycles = 0;
2824 1.1 christos {
2825 1.1 christos int referenced = 0;
2826 1.1 christos int UNUSED insn_referenced = abuf->written;
2827 1.1 christos INT in_sr = -1;
2828 1.1 christos INT in_dr = -1;
2829 1.1 christos INT out_dr = -1;
2830 1.1 christos in_sr = FLD (in_sr);
2831 1.1 christos referenced |= 1 << 0;
2832 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2833 1.1 christos }
2834 1.1 christos return cycles;
2835 1.1 christos #undef FLD
2836 1.1 christos }
2837 1.1 christos
2838 1.1 christos static int
2839 1.1 christos model_m32rx_btst (SIM_CPU *current_cpu, void *sem_arg)
2840 1.1 christos {
2841 1.1 christos #define FLD(f) abuf->fields.sfmt_bset.f
2842 1.1 christos const ARGBUF * UNUSED abuf = SEM_ARGBUF ((SEM_ARG) sem_arg);
2843 1.1 christos const IDESC * UNUSED idesc = abuf->idesc;
2844 1.1 christos int cycles = 0;
2845 1.1 christos {
2846 1.1 christos int referenced = 0;
2847 1.1 christos int UNUSED insn_referenced = abuf->written;
2848 1.1 christos INT in_sr = -1;
2849 1.1 christos INT in_dr = -1;
2850 1.1 christos INT out_dr = -1;
2851 1.1 christos in_sr = FLD (in_sr);
2852 1.1 christos referenced |= 1 << 0;
2853 1.1 christos cycles += m32rxf_model_m32rx_u_exec (current_cpu, idesc, 0, referenced, in_sr, in_dr, out_dr);
2854 1.1 christos }
2855 1.1 christos return cycles;
2856 1.1 christos #undef FLD
2857 1.1 christos }
2858 1.1 christos
2859 1.1 christos /* We assume UNIT_NONE == 0 because the tables don't always terminate
2860 1.1 christos entries with it. */
2861 1.1 christos
2862 1.1 christos /* Model timing data for `m32rx'. */
2863 1.1 christos
2864 1.1 christos static const INSN_TIMING m32rx_timing[] = {
2865 1.1 christos { M32RXF_INSN_X_INVALID, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2866 1.1 christos { M32RXF_INSN_X_AFTER, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2867 1.1 christos { M32RXF_INSN_X_BEFORE, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2868 1.1 christos { M32RXF_INSN_X_CTI_CHAIN, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2869 1.1 christos { M32RXF_INSN_X_CHAIN, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2870 1.1 christos { M32RXF_INSN_X_BEGIN, 0, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2871 1.1 christos { M32RXF_INSN_ADD, model_m32rx_add, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2872 1.1 christos { M32RXF_INSN_ADD3, model_m32rx_add3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2873 1.1 christos { M32RXF_INSN_AND, model_m32rx_and, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2874 1.1 christos { M32RXF_INSN_AND3, model_m32rx_and3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2875 1.1 christos { M32RXF_INSN_OR, model_m32rx_or, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2876 1.1 christos { M32RXF_INSN_OR3, model_m32rx_or3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2877 1.1 christos { M32RXF_INSN_XOR, model_m32rx_xor, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2878 1.1 christos { M32RXF_INSN_XOR3, model_m32rx_xor3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2879 1.1 christos { M32RXF_INSN_ADDI, model_m32rx_addi, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2880 1.1 christos { M32RXF_INSN_ADDV, model_m32rx_addv, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2881 1.1 christos { M32RXF_INSN_ADDV3, model_m32rx_addv3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2882 1.1 christos { M32RXF_INSN_ADDX, model_m32rx_addx, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2883 1.1 christos { M32RXF_INSN_BC8, model_m32rx_bc8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } },
2884 1.1 christos { M32RXF_INSN_BC24, model_m32rx_bc24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } },
2885 1.1 christos { M32RXF_INSN_BEQ, model_m32rx_beq, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } },
2886 1.1 christos { M32RXF_INSN_BEQZ, model_m32rx_beqz, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } },
2887 1.1 christos { M32RXF_INSN_BGEZ, model_m32rx_bgez, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } },
2888 1.1 christos { M32RXF_INSN_BGTZ, model_m32rx_bgtz, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } },
2889 1.1 christos { M32RXF_INSN_BLEZ, model_m32rx_blez, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } },
2890 1.1 christos { M32RXF_INSN_BLTZ, model_m32rx_bltz, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } },
2891 1.1 christos { M32RXF_INSN_BNEZ, model_m32rx_bnez, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } },
2892 1.1 christos { M32RXF_INSN_BL8, model_m32rx_bl8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } },
2893 1.1 christos { M32RXF_INSN_BL24, model_m32rx_bl24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } },
2894 1.1 christos { M32RXF_INSN_BCL8, model_m32rx_bcl8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } },
2895 1.1 christos { M32RXF_INSN_BCL24, model_m32rx_bcl24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } },
2896 1.1 christos { M32RXF_INSN_BNC8, model_m32rx_bnc8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } },
2897 1.1 christos { M32RXF_INSN_BNC24, model_m32rx_bnc24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } },
2898 1.1 christos { M32RXF_INSN_BNE, model_m32rx_bne, { { (int) UNIT_M32RX_U_CTI, 1, 1 }, { (int) UNIT_M32RX_U_CMP, 1, 0 } } },
2899 1.1 christos { M32RXF_INSN_BRA8, model_m32rx_bra8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } },
2900 1.1 christos { M32RXF_INSN_BRA24, model_m32rx_bra24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } },
2901 1.1 christos { M32RXF_INSN_BNCL8, model_m32rx_bncl8, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } },
2902 1.1 christos { M32RXF_INSN_BNCL24, model_m32rx_bncl24, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } },
2903 1.1 christos { M32RXF_INSN_CMP, model_m32rx_cmp, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } },
2904 1.1 christos { M32RXF_INSN_CMPI, model_m32rx_cmpi, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } },
2905 1.1 christos { M32RXF_INSN_CMPU, model_m32rx_cmpu, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } },
2906 1.1 christos { M32RXF_INSN_CMPUI, model_m32rx_cmpui, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } },
2907 1.1 christos { M32RXF_INSN_CMPEQ, model_m32rx_cmpeq, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } },
2908 1.1 christos { M32RXF_INSN_CMPZ, model_m32rx_cmpz, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } },
2909 1.1 christos { M32RXF_INSN_DIV, model_m32rx_div, { { (int) UNIT_M32RX_U_EXEC, 1, 37 } } },
2910 1.1 christos { M32RXF_INSN_DIVU, model_m32rx_divu, { { (int) UNIT_M32RX_U_EXEC, 1, 37 } } },
2911 1.1 christos { M32RXF_INSN_REM, model_m32rx_rem, { { (int) UNIT_M32RX_U_EXEC, 1, 37 } } },
2912 1.1 christos { M32RXF_INSN_REMU, model_m32rx_remu, { { (int) UNIT_M32RX_U_EXEC, 1, 37 } } },
2913 1.1 christos { M32RXF_INSN_DIVH, model_m32rx_divh, { { (int) UNIT_M32RX_U_EXEC, 1, 21 } } },
2914 1.1 christos { M32RXF_INSN_JC, model_m32rx_jc, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } },
2915 1.1 christos { M32RXF_INSN_JNC, model_m32rx_jnc, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } },
2916 1.1 christos { M32RXF_INSN_JL, model_m32rx_jl, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } },
2917 1.1 christos { M32RXF_INSN_JMP, model_m32rx_jmp, { { (int) UNIT_M32RX_U_CTI, 1, 1 } } },
2918 1.1 christos { M32RXF_INSN_LD, model_m32rx_ld, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } },
2919 1.1 christos { M32RXF_INSN_LD_D, model_m32rx_ld_d, { { (int) UNIT_M32RX_U_LOAD, 1, 2 } } },
2920 1.1 christos { M32RXF_INSN_LDB, model_m32rx_ldb, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } },
2921 1.1 christos { M32RXF_INSN_LDB_D, model_m32rx_ldb_d, { { (int) UNIT_M32RX_U_LOAD, 1, 2 } } },
2922 1.1 christos { M32RXF_INSN_LDH, model_m32rx_ldh, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } },
2923 1.1 christos { M32RXF_INSN_LDH_D, model_m32rx_ldh_d, { { (int) UNIT_M32RX_U_LOAD, 1, 2 } } },
2924 1.1 christos { M32RXF_INSN_LDUB, model_m32rx_ldub, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } },
2925 1.1 christos { M32RXF_INSN_LDUB_D, model_m32rx_ldub_d, { { (int) UNIT_M32RX_U_LOAD, 1, 2 } } },
2926 1.1 christos { M32RXF_INSN_LDUH, model_m32rx_lduh, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } },
2927 1.1 christos { M32RXF_INSN_LDUH_D, model_m32rx_lduh_d, { { (int) UNIT_M32RX_U_LOAD, 1, 2 } } },
2928 1.1 christos { M32RXF_INSN_LD_PLUS, model_m32rx_ld_plus, { { (int) UNIT_M32RX_U_LOAD, 1, 1 }, { (int) UNIT_M32RX_U_EXEC, 1, 0 } } },
2929 1.1 christos { M32RXF_INSN_LD24, model_m32rx_ld24, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2930 1.1 christos { M32RXF_INSN_LDI8, model_m32rx_ldi8, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2931 1.1 christos { M32RXF_INSN_LDI16, model_m32rx_ldi16, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2932 1.1 christos { M32RXF_INSN_LOCK, model_m32rx_lock, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } },
2933 1.1 christos { M32RXF_INSN_MACHI_A, model_m32rx_machi_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } },
2934 1.1 christos { M32RXF_INSN_MACLO_A, model_m32rx_maclo_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } },
2935 1.1 christos { M32RXF_INSN_MACWHI_A, model_m32rx_macwhi_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } },
2936 1.1 christos { M32RXF_INSN_MACWLO_A, model_m32rx_macwlo_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } },
2937 1.1 christos { M32RXF_INSN_MUL, model_m32rx_mul, { { (int) UNIT_M32RX_U_EXEC, 1, 4 } } },
2938 1.1 christos { M32RXF_INSN_MULHI_A, model_m32rx_mulhi_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } },
2939 1.1 christos { M32RXF_INSN_MULLO_A, model_m32rx_mullo_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } },
2940 1.1 christos { M32RXF_INSN_MULWHI_A, model_m32rx_mulwhi_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } },
2941 1.1 christos { M32RXF_INSN_MULWLO_A, model_m32rx_mulwlo_a, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } },
2942 1.1 christos { M32RXF_INSN_MV, model_m32rx_mv, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2943 1.1 christos { M32RXF_INSN_MVFACHI_A, model_m32rx_mvfachi_a, { { (int) UNIT_M32RX_U_EXEC, 1, 2 } } },
2944 1.1 christos { M32RXF_INSN_MVFACLO_A, model_m32rx_mvfaclo_a, { { (int) UNIT_M32RX_U_EXEC, 1, 2 } } },
2945 1.1 christos { M32RXF_INSN_MVFACMI_A, model_m32rx_mvfacmi_a, { { (int) UNIT_M32RX_U_EXEC, 1, 2 } } },
2946 1.1 christos { M32RXF_INSN_MVFC, model_m32rx_mvfc, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2947 1.1 christos { M32RXF_INSN_MVTACHI_A, model_m32rx_mvtachi_a, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2948 1.1 christos { M32RXF_INSN_MVTACLO_A, model_m32rx_mvtaclo_a, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2949 1.1 christos { M32RXF_INSN_MVTC, model_m32rx_mvtc, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2950 1.1 christos { M32RXF_INSN_NEG, model_m32rx_neg, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2951 1.1 christos { M32RXF_INSN_NOP, model_m32rx_nop, { { (int) UNIT_M32RX_U_EXEC, 1, 0 } } },
2952 1.1 christos { M32RXF_INSN_NOT, model_m32rx_not, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2953 1.1 christos { M32RXF_INSN_RAC_DSI, model_m32rx_rac_dsi, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } },
2954 1.1 christos { M32RXF_INSN_RACH_DSI, model_m32rx_rach_dsi, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } },
2955 1.1 christos { M32RXF_INSN_RTE, model_m32rx_rte, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2956 1.1 christos { M32RXF_INSN_SETH, model_m32rx_seth, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2957 1.1 christos { M32RXF_INSN_SLL, model_m32rx_sll, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2958 1.1 christos { M32RXF_INSN_SLL3, model_m32rx_sll3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2959 1.1 christos { M32RXF_INSN_SLLI, model_m32rx_slli, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2960 1.1 christos { M32RXF_INSN_SRA, model_m32rx_sra, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2961 1.1 christos { M32RXF_INSN_SRA3, model_m32rx_sra3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2962 1.1 christos { M32RXF_INSN_SRAI, model_m32rx_srai, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2963 1.1 christos { M32RXF_INSN_SRL, model_m32rx_srl, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2964 1.1 christos { M32RXF_INSN_SRL3, model_m32rx_srl3, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2965 1.1 christos { M32RXF_INSN_SRLI, model_m32rx_srli, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2966 1.1 christos { M32RXF_INSN_ST, model_m32rx_st, { { (int) UNIT_M32RX_U_STORE, 1, 1 } } },
2967 1.1 christos { M32RXF_INSN_ST_D, model_m32rx_st_d, { { (int) UNIT_M32RX_U_STORE, 1, 2 } } },
2968 1.1 christos { M32RXF_INSN_STB, model_m32rx_stb, { { (int) UNIT_M32RX_U_STORE, 1, 1 } } },
2969 1.1 christos { M32RXF_INSN_STB_D, model_m32rx_stb_d, { { (int) UNIT_M32RX_U_STORE, 1, 2 } } },
2970 1.1 christos { M32RXF_INSN_STH, model_m32rx_sth, { { (int) UNIT_M32RX_U_STORE, 1, 1 } } },
2971 1.1 christos { M32RXF_INSN_STH_D, model_m32rx_sth_d, { { (int) UNIT_M32RX_U_STORE, 1, 2 } } },
2972 1.1 christos { M32RXF_INSN_ST_PLUS, model_m32rx_st_plus, { { (int) UNIT_M32RX_U_STORE, 1, 1 }, { (int) UNIT_M32RX_U_EXEC, 1, 0 } } },
2973 1.1 christos { M32RXF_INSN_STH_PLUS, model_m32rx_sth_plus, { { (int) UNIT_M32RX_U_STORE, 1, 1 }, { (int) UNIT_M32RX_U_EXEC, 1, 0 } } },
2974 1.1 christos { M32RXF_INSN_STB_PLUS, model_m32rx_stb_plus, { { (int) UNIT_M32RX_U_STORE, 1, 1 }, { (int) UNIT_M32RX_U_EXEC, 1, 0 } } },
2975 1.1 christos { M32RXF_INSN_ST_MINUS, model_m32rx_st_minus, { { (int) UNIT_M32RX_U_STORE, 1, 1 }, { (int) UNIT_M32RX_U_EXEC, 1, 0 } } },
2976 1.1 christos { M32RXF_INSN_SUB, model_m32rx_sub, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2977 1.1 christos { M32RXF_INSN_SUBV, model_m32rx_subv, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2978 1.1 christos { M32RXF_INSN_SUBX, model_m32rx_subx, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2979 1.1 christos { M32RXF_INSN_TRAP, model_m32rx_trap, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2980 1.1 christos { M32RXF_INSN_UNLOCK, model_m32rx_unlock, { { (int) UNIT_M32RX_U_LOAD, 1, 1 } } },
2981 1.1 christos { M32RXF_INSN_SATB, model_m32rx_satb, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2982 1.1 christos { M32RXF_INSN_SATH, model_m32rx_sath, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2983 1.1 christos { M32RXF_INSN_SAT, model_m32rx_sat, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2984 1.1 christos { M32RXF_INSN_PCMPBZ, model_m32rx_pcmpbz, { { (int) UNIT_M32RX_U_CMP, 1, 1 } } },
2985 1.1 christos { M32RXF_INSN_SADD, model_m32rx_sadd, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } },
2986 1.1 christos { M32RXF_INSN_MACWU1, model_m32rx_macwu1, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } },
2987 1.1 christos { M32RXF_INSN_MSBLO, model_m32rx_msblo, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } },
2988 1.1 christos { M32RXF_INSN_MULWU1, model_m32rx_mulwu1, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } },
2989 1.1 christos { M32RXF_INSN_MACLH1, model_m32rx_maclh1, { { (int) UNIT_M32RX_U_MAC, 1, 1 } } },
2990 1.1 christos { M32RXF_INSN_SC, model_m32rx_sc, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2991 1.1 christos { M32RXF_INSN_SNC, model_m32rx_snc, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2992 1.1 christos { M32RXF_INSN_CLRPSW, model_m32rx_clrpsw, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2993 1.1 christos { M32RXF_INSN_SETPSW, model_m32rx_setpsw, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2994 1.1 christos { M32RXF_INSN_BSET, model_m32rx_bset, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2995 1.1 christos { M32RXF_INSN_BCLR, model_m32rx_bclr, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2996 1.1 christos { M32RXF_INSN_BTST, model_m32rx_btst, { { (int) UNIT_M32RX_U_EXEC, 1, 1 } } },
2997 1.1 christos };
2998 1.1 christos
2999 1.1 christos #endif /* WITH_PROFILE_MODEL_P */
3000 1.1 christos
3001 1.1 christos static void
3002 1.1 christos m32rx_model_init (SIM_CPU *cpu)
3003 1.1 christos {
3004 1.1 christos CPU_MODEL_DATA (cpu) = (void *) zalloc (sizeof (MODEL_M32RX_DATA));
3005 1.1 christos }
3006 1.1 christos
3007 1.1 christos #if WITH_PROFILE_MODEL_P
3008 1.1 christos #define TIMING_DATA(td) td
3009 1.1 christos #else
3010 1.1 christos #define TIMING_DATA(td) 0
3011 1.1 christos #endif
3012 1.1 christos
3013 1.1.1.3 christos static const SIM_MODEL m32rx_models[] =
3014 1.1 christos {
3015 1.1 christos { "m32rx", & m32rx_mach, MODEL_M32RX, TIMING_DATA (& m32rx_timing[0]), m32rx_model_init },
3016 1.1 christos { 0 }
3017 1.1 christos };
3018 1.1 christos
3019 1.1 christos /* The properties of this cpu's implementation. */
3020 1.1 christos
3021 1.1.1.3 christos static const SIM_MACH_IMP_PROPERTIES m32rxf_imp_properties =
3022 1.1 christos {
3023 1.1 christos sizeof (SIM_CPU),
3024 1.1 christos #if WITH_SCACHE
3025 1.1 christos sizeof (SCACHE)
3026 1.1 christos #else
3027 1.1 christos 0
3028 1.1 christos #endif
3029 1.1 christos };
3030 1.1 christos
3031 1.1 christos
3032 1.1 christos static void
3033 1.1 christos m32rxf_prepare_run (SIM_CPU *cpu)
3034 1.1 christos {
3035 1.1 christos if (CPU_IDESC (cpu) == NULL)
3036 1.1 christos m32rxf_init_idesc_table (cpu);
3037 1.1 christos }
3038 1.1 christos
3039 1.1 christos static const CGEN_INSN *
3040 1.1 christos m32rxf_get_idata (SIM_CPU *cpu, int inum)
3041 1.1 christos {
3042 1.1 christos return CPU_IDESC (cpu) [inum].idata;
3043 1.1 christos }
3044 1.1 christos
3045 1.1 christos static void
3046 1.1 christos m32rx_init_cpu (SIM_CPU *cpu)
3047 1.1 christos {
3048 1.1 christos CPU_REG_FETCH (cpu) = m32rxf_fetch_register;
3049 1.1 christos CPU_REG_STORE (cpu) = m32rxf_store_register;
3050 1.1 christos CPU_PC_FETCH (cpu) = m32rxf_h_pc_get;
3051 1.1 christos CPU_PC_STORE (cpu) = m32rxf_h_pc_set;
3052 1.1 christos CPU_GET_IDATA (cpu) = m32rxf_get_idata;
3053 1.1 christos CPU_MAX_INSNS (cpu) = M32RXF_INSN__MAX;
3054 1.1 christos CPU_INSN_NAME (cpu) = cgen_insn_name;
3055 1.1 christos CPU_FULL_ENGINE_FN (cpu) = m32rxf_engine_run_full;
3056 1.1 christos #if WITH_FAST
3057 1.1 christos CPU_FAST_ENGINE_FN (cpu) = m32rxf_engine_run_fast;
3058 1.1 christos #else
3059 1.1 christos CPU_FAST_ENGINE_FN (cpu) = m32rxf_engine_run_full;
3060 1.1 christos #endif
3061 1.1 christos }
3062 1.1 christos
3063 1.1.1.3 christos const SIM_MACH m32rx_mach =
3064 1.1 christos {
3065 1.1 christos "m32rx", "m32rx", MACH_M32RX,
3066 1.1 christos 32, 32, & m32rx_models[0], & m32rxf_imp_properties,
3067 1.1 christos m32rx_init_cpu,
3068 1.1 christos m32rxf_prepare_run
3069 1.1 christos };
3070 1.1 christos
3071