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