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