OSDN Git Service

4100652e66c1a93e29f617391a97d84f6b0195ec
[pf3gnuchains/pf3gnuchains3x.git] / sid / component / cgen-cpu / sh / sh4a-nofpu-model.h
1 /* Simulator model support for sh4a_nofpu.
2
3 THIS FILE IS MACHINE GENERATED WITH CGEN.
4
5 Copyright (C) 2000-2009 Red Hat, Inc.
6
7 This file is part of the Red Hat simulators.
8
9
10 */
11
12 #ifndef SH4A_NOFPU_MODEL_H
13 #define SH4A_NOFPU_MODEL_H
14
15 #include "cgen-cpu.h"
16 #include "cgen-model.h"
17
18 namespace sh4a_nofpu
19 {
20 using namespace cgen;
21
22 class sh4a_nofpu_sh4a_nofpu_model : public cgen_model
23 {
24 public:
25   sh4a_nofpu_sh4a_nofpu_model (sh4a_nofpu_cpu *cpu);
26
27   // Call the proper unit modelling function for the given insn.
28   UINT model_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache* sem)
29     {
30       return (this->*(timing[sem->idesc->sem_index].model_before)) (current_cpu, sem);
31     } 
32   UINT model_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache* sem)
33     {
34       return (this->*(timing[sem->idesc->sem_index].model_after)) (current_cpu, sem);
35     } 
36
37 // Function unit handlers
38 // To be overridden as needed.
39   virtual UINT model_u_ocb_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
40     {
41       return 0;
42     }
43   virtual UINT model_u_ocb_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
44     {
45       return timing[idesc->sem_index].units[unit_num].done;
46     }
47   virtual UINT model_u_mulr_gr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, INT /*loadreg*/)
48     {
49       return 0;
50     }
51   virtual UINT model_u_mulr_gr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced, INT /*loadreg*/)
52     {
53       return timing[idesc->sem_index].units[unit_num].done;
54     }
55   virtual UINT model_u_mulr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
56     {
57       return 0;
58     }
59   virtual UINT model_u_mulr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
60     {
61       return timing[idesc->sem_index].units[unit_num].done;
62     }
63   virtual UINT model_u_fcnv_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
64     {
65       return 0;
66     }
67   virtual UINT model_u_fcnv_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
68     {
69       return timing[idesc->sem_index].units[unit_num].done;
70     }
71   virtual UINT model_u_fcmp_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
72     {
73       return 0;
74     }
75   virtual UINT model_u_fcmp_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
76     {
77       return timing[idesc->sem_index].units[unit_num].done;
78     }
79   virtual UINT model_u_fsqrt_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, INT /*loadreg*/)
80     {
81       return 0;
82     }
83   virtual UINT model_u_fsqrt_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced, INT /*loadreg*/)
84     {
85       return timing[idesc->sem_index].units[unit_num].done;
86     }
87   virtual UINT model_u_fdiv_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, INT /*loadreg*/)
88     {
89       return 0;
90     }
91   virtual UINT model_u_fdiv_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced, INT /*loadreg*/)
92     {
93       return timing[idesc->sem_index].units[unit_num].done;
94     }
95   virtual UINT model_u_fpu_load_gr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, INT /*loadreg*/)
96     {
97       return 0;
98     }
99   virtual UINT model_u_fpu_load_gr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced, INT /*loadreg*/)
100     {
101       return timing[idesc->sem_index].units[unit_num].done;
102     }
103   virtual UINT model_u_use_fpscr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
104     {
105       return 0;
106     }
107   virtual UINT model_u_use_fpscr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
108     {
109       return timing[idesc->sem_index].units[unit_num].done;
110     }
111   virtual UINT model_u_ldsl_fpscr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
112     {
113       return 0;
114     }
115   virtual UINT model_u_ldsl_fpscr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
116     {
117       return timing[idesc->sem_index].units[unit_num].done;
118     }
119   virtual UINT model_u_lds_fpscr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
120     {
121       return 0;
122     }
123   virtual UINT model_u_lds_fpscr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
124     {
125       return timing[idesc->sem_index].units[unit_num].done;
126     }
127   virtual UINT model_u_use_fpul_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
128     {
129       return 0;
130     }
131   virtual UINT model_u_use_fpul_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
132     {
133       return timing[idesc->sem_index].units[unit_num].done;
134     }
135   virtual UINT model_u_flds_fpul_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
136     {
137       return 0;
138     }
139   virtual UINT model_u_flds_fpul_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
140     {
141       return timing[idesc->sem_index].units[unit_num].done;
142     }
143   virtual UINT model_u_load_fpul_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
144     {
145       return 0;
146     }
147   virtual UINT model_u_load_fpul_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
148     {
149       return timing[idesc->sem_index].units[unit_num].done;
150     }
151   virtual UINT model_u_set_fpul_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
152     {
153       return 0;
154     }
155   virtual UINT model_u_set_fpul_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
156     {
157       return timing[idesc->sem_index].units[unit_num].done;
158     }
159   virtual UINT model_u_fpu_memory_access_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
160     {
161       return 0;
162     }
163   virtual UINT model_u_fpu_memory_access_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
164     {
165       return timing[idesc->sem_index].units[unit_num].done;
166     }
167   virtual UINT model_u_use_fr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, INT /*usereg*/)
168     {
169       return 0;
170     }
171   virtual UINT model_u_use_fr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced, INT /*usereg*/)
172     {
173       return timing[idesc->sem_index].units[unit_num].done;
174     }
175   virtual UINT model_u_set_fr_0_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, INT /*loadreg*/)
176     {
177       return 0;
178     }
179   virtual UINT model_u_set_fr_0_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced, INT /*loadreg*/)
180     {
181       return timing[idesc->sem_index].units[unit_num].done;
182     }
183   virtual UINT model_u_set_fr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, INT /*loadreg*/)
184     {
185       return 0;
186     }
187   virtual UINT model_u_set_fr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced, INT /*loadreg*/)
188     {
189       return timing[idesc->sem_index].units[unit_num].done;
190     }
191   virtual UINT model_u_load_fr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, INT /*loadreg*/)
192     {
193       return 0;
194     }
195   virtual UINT model_u_load_fr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced, INT /*loadreg*/)
196     {
197       return timing[idesc->sem_index].units[unit_num].done;
198     }
199   virtual UINT model_u_maybe_fpu_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
200     {
201       return 0;
202     }
203   virtual UINT model_u_maybe_fpu_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
204     {
205       return timing[idesc->sem_index].units[unit_num].done;
206     }
207   virtual UINT model_u_fpu_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
208     {
209       return 0;
210     }
211   virtual UINT model_u_fpu_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
212     {
213       return timing[idesc->sem_index].units[unit_num].done;
214     }
215   virtual UINT model_u_trap_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
216     {
217       return 0;
218     }
219   virtual UINT model_u_trap_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
220     {
221       return timing[idesc->sem_index].units[unit_num].done;
222     }
223   virtual UINT model_u_write_back_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
224     {
225       return 0;
226     }
227   virtual UINT model_u_write_back_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
228     {
229       return timing[idesc->sem_index].units[unit_num].done;
230     }
231   virtual UINT model_u_use_multiply_result_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
232     {
233       return 0;
234     }
235   virtual UINT model_u_use_multiply_result_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
236     {
237       return timing[idesc->sem_index].units[unit_num].done;
238     }
239   virtual UINT model_u_shift_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
240     {
241       return 0;
242     }
243   virtual UINT model_u_shift_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
244     {
245       return timing[idesc->sem_index].units[unit_num].done;
246     }
247   virtual UINT model_u_tas_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
248     {
249       return 0;
250     }
251   virtual UINT model_u_tas_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
252     {
253       return timing[idesc->sem_index].units[unit_num].done;
254     }
255   virtual UINT model_u_mulsw_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
256     {
257       return 0;
258     }
259   virtual UINT model_u_mulsw_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
260     {
261       return timing[idesc->sem_index].units[unit_num].done;
262     }
263   virtual UINT model_u_mull_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
264     {
265       return 0;
266     }
267   virtual UINT model_u_mull_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
268     {
269       return timing[idesc->sem_index].units[unit_num].done;
270     }
271   virtual UINT model_u_dmul_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
272     {
273       return 0;
274     }
275   virtual UINT model_u_dmul_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
276     {
277       return timing[idesc->sem_index].units[unit_num].done;
278     }
279   virtual UINT model_u_macl_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
280     {
281       return 0;
282     }
283   virtual UINT model_u_macl_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
284     {
285       return timing[idesc->sem_index].units[unit_num].done;
286     }
287   virtual UINT model_u_macw_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
288     {
289       return 0;
290     }
291   virtual UINT model_u_macw_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
292     {
293       return timing[idesc->sem_index].units[unit_num].done;
294     }
295   virtual UINT model_u_multiply_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
296     {
297       return 0;
298     }
299   virtual UINT model_u_multiply_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
300     {
301       return timing[idesc->sem_index].units[unit_num].done;
302     }
303   virtual UINT model_u_set_mac_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
304     {
305       return 0;
306     }
307   virtual UINT model_u_set_mac_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
308     {
309       return timing[idesc->sem_index].units[unit_num].done;
310     }
311   virtual UINT model_u_load_mac_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
312     {
313       return 0;
314     }
315   virtual UINT model_u_load_mac_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
316     {
317       return timing[idesc->sem_index].units[unit_num].done;
318     }
319   virtual UINT model_u_load_vbr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
320     {
321       return 0;
322     }
323   virtual UINT model_u_load_vbr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
324     {
325       return timing[idesc->sem_index].units[unit_num].done;
326     }
327   virtual UINT model_u_load_gbr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
328     {
329       return 0;
330     }
331   virtual UINT model_u_load_gbr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
332     {
333       return timing[idesc->sem_index].units[unit_num].done;
334     }
335   virtual UINT model_u_use_gr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, INT /*usereg*/)
336     {
337       return 0;
338     }
339   virtual UINT model_u_use_gr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced, INT /*usereg*/)
340     {
341       return timing[idesc->sem_index].units[unit_num].done;
342     }
343   virtual UINT model_u_load_gr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, INT /*loadreg*/)
344     {
345       return 0;
346     }
347   virtual UINT model_u_load_gr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced, INT /*loadreg*/)
348     {
349       return timing[idesc->sem_index].units[unit_num].done;
350     }
351   virtual UINT model_u_stc_vbr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
352     {
353       return 0;
354     }
355   virtual UINT model_u_stc_vbr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
356     {
357       return timing[idesc->sem_index].units[unit_num].done;
358     }
359   virtual UINT model_u_ldcl_vbr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
360     {
361       return 0;
362     }
363   virtual UINT model_u_ldcl_vbr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
364     {
365       return timing[idesc->sem_index].units[unit_num].done;
366     }
367   virtual UINT model_u_ldcl_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
368     {
369       return 0;
370     }
371   virtual UINT model_u_ldcl_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
372     {
373       return timing[idesc->sem_index].units[unit_num].done;
374     }
375   virtual UINT model_u_use_tbit_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
376     {
377       return 0;
378     }
379   virtual UINT model_u_use_tbit_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
380     {
381       return timing[idesc->sem_index].units[unit_num].done;
382     }
383   virtual UINT model_u_ldc_gbr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
384     {
385       return 0;
386     }
387   virtual UINT model_u_ldc_gbr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
388     {
389       return timing[idesc->sem_index].units[unit_num].done;
390     }
391   virtual UINT model_u_ldc_sr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
392     {
393       return 0;
394     }
395   virtual UINT model_u_ldc_sr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
396     {
397       return timing[idesc->sem_index].units[unit_num].done;
398     }
399   virtual UINT model_u_set_sr_bit_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
400     {
401       return 0;
402     }
403   virtual UINT model_u_set_sr_bit_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
404     {
405       return timing[idesc->sem_index].units[unit_num].done;
406     }
407   virtual UINT model_u_use_pr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
408     {
409       return 0;
410     }
411   virtual UINT model_u_use_pr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
412     {
413       return timing[idesc->sem_index].units[unit_num].done;
414     }
415   virtual UINT model_u_load_pr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
416     {
417       return 0;
418     }
419   virtual UINT model_u_load_pr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
420     {
421       return timing[idesc->sem_index].units[unit_num].done;
422     }
423   virtual UINT model_u_sts_pr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
424     {
425       return 0;
426     }
427   virtual UINT model_u_sts_pr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
428     {
429       return timing[idesc->sem_index].units[unit_num].done;
430     }
431   virtual UINT model_u_lds_pr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
432     {
433       return 0;
434     }
435   virtual UINT model_u_lds_pr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
436     {
437       return timing[idesc->sem_index].units[unit_num].done;
438     }
439   virtual UINT model_u_memory_access_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
440     {
441       return 0;
442     }
443   virtual UINT model_u_memory_access_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
444     {
445       return timing[idesc->sem_index].units[unit_num].done;
446     }
447   virtual UINT model_u_logic_b_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
448     {
449       return 0;
450     }
451   virtual UINT model_u_logic_b_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
452     {
453       return timing[idesc->sem_index].units[unit_num].done;
454     }
455   virtual UINT model_u_jsr_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
456     {
457       return 0;
458     }
459   virtual UINT model_u_jsr_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
460     {
461       return timing[idesc->sem_index].units[unit_num].done;
462     }
463   virtual UINT model_u_jmp_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
464     {
465       return 0;
466     }
467   virtual UINT model_u_jmp_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
468     {
469       return timing[idesc->sem_index].units[unit_num].done;
470     }
471   virtual UINT model_u_branch_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
472     {
473       return 0;
474     }
475   virtual UINT model_u_branch_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
476     {
477       return timing[idesc->sem_index].units[unit_num].done;
478     }
479   virtual UINT model_u_sx_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
480     {
481       return 0;
482     }
483   virtual UINT model_u_sx_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
484     {
485       return timing[idesc->sem_index].units[unit_num].done;
486     }
487   virtual UINT model_u_exec_before (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num)
488     {
489       return 0;
490     }
491   virtual UINT model_u_exec_after (sh4a_nofpu_cpu *cpu, const struct sh4a_nofpu_idesc *idesc, int unit_num, unsigned long long referenced)
492     {
493       return timing[idesc->sem_index].units[unit_num].done;
494     }
495
496 protected:
497   // These methods call the appropriate unit modeller(s) for each insn.
498   UINT model_add_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
499   UINT model_add_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
500   UINT model_addi_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
501   UINT model_addi_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
502   UINT model_addc_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
503   UINT model_addc_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
504   UINT model_addv_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
505   UINT model_addv_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
506   UINT model_and_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
507   UINT model_and_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
508   UINT model_andi_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
509   UINT model_andi_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
510   UINT model_andb_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
511   UINT model_andb_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
512   UINT model_bf_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
513   UINT model_bf_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
514   UINT model_bfs_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
515   UINT model_bfs_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
516   UINT model_bra_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
517   UINT model_bra_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
518   UINT model_braf_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
519   UINT model_braf_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
520   UINT model_bsr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
521   UINT model_bsr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
522   UINT model_bsrf_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
523   UINT model_bsrf_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
524   UINT model_bt_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
525   UINT model_bt_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
526   UINT model_bts_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
527   UINT model_bts_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
528   UINT model_clrmac_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
529   UINT model_clrmac_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
530   UINT model_clrs_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
531   UINT model_clrs_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
532   UINT model_clrt_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
533   UINT model_clrt_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
534   UINT model_cmpeq_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
535   UINT model_cmpeq_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
536   UINT model_cmpeqi_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
537   UINT model_cmpeqi_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
538   UINT model_cmpge_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
539   UINT model_cmpge_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
540   UINT model_cmpgt_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
541   UINT model_cmpgt_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
542   UINT model_cmphi_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
543   UINT model_cmphi_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
544   UINT model_cmphs_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
545   UINT model_cmphs_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
546   UINT model_cmppl_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
547   UINT model_cmppl_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
548   UINT model_cmppz_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
549   UINT model_cmppz_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
550   UINT model_cmpstr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
551   UINT model_cmpstr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
552   UINT model_div0s_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
553   UINT model_div0s_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
554   UINT model_div0u_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
555   UINT model_div0u_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
556   UINT model_div1_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
557   UINT model_div1_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
558   UINT model_dmulsl_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
559   UINT model_dmulsl_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
560   UINT model_dmulul_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
561   UINT model_dmulul_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
562   UINT model_dt_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
563   UINT model_dt_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
564   UINT model_extsb_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
565   UINT model_extsb_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
566   UINT model_extsw_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
567   UINT model_extsw_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
568   UINT model_extub_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
569   UINT model_extub_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
570   UINT model_extuw_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
571   UINT model_extuw_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
572   UINT model_frchg_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
573   UINT model_frchg_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
574   UINT model_fschg_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
575   UINT model_fschg_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
576   UINT model_jmp_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
577   UINT model_jmp_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
578   UINT model_jsr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
579   UINT model_jsr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
580   UINT model_ldc_gbr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
581   UINT model_ldc_gbr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
582   UINT model_ldc_vbr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
583   UINT model_ldc_vbr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
584   UINT model_ldc_sr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
585   UINT model_ldc_sr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
586   UINT model_ldcl_gbr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
587   UINT model_ldcl_gbr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
588   UINT model_ldcl_vbr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
589   UINT model_ldcl_vbr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
590   UINT model_lds_mach_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
591   UINT model_lds_mach_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
592   UINT model_ldsl_mach_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
593   UINT model_ldsl_mach_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
594   UINT model_lds_macl_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
595   UINT model_lds_macl_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
596   UINT model_ldsl_macl_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
597   UINT model_ldsl_macl_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
598   UINT model_lds_pr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
599   UINT model_lds_pr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
600   UINT model_ldsl_pr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
601   UINT model_ldsl_pr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
602   UINT model_macl_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
603   UINT model_macl_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
604   UINT model_macw_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
605   UINT model_macw_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
606   UINT model_mov_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
607   UINT model_mov_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
608   UINT model_movi_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
609   UINT model_movi_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
610   UINT model_movb1_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
611   UINT model_movb1_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
612   UINT model_movb2_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
613   UINT model_movb2_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
614   UINT model_movb3_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
615   UINT model_movb3_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
616   UINT model_movb4_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
617   UINT model_movb4_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
618   UINT model_movb5_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
619   UINT model_movb5_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
620   UINT model_movb6_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
621   UINT model_movb6_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
622   UINT model_movb7_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
623   UINT model_movb7_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
624   UINT model_movb8_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
625   UINT model_movb8_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
626   UINT model_movb9_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
627   UINT model_movb9_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
628   UINT model_movb10_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
629   UINT model_movb10_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
630   UINT model_movl1_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
631   UINT model_movl1_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
632   UINT model_movl2_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
633   UINT model_movl2_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
634   UINT model_movl3_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
635   UINT model_movl3_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
636   UINT model_movl4_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
637   UINT model_movl4_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
638   UINT model_movl5_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
639   UINT model_movl5_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
640   UINT model_movl6_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
641   UINT model_movl6_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
642   UINT model_movl7_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
643   UINT model_movl7_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
644   UINT model_movl8_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
645   UINT model_movl8_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
646   UINT model_movl9_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
647   UINT model_movl9_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
648   UINT model_movl10_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
649   UINT model_movl10_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
650   UINT model_movl11_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
651   UINT model_movl11_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
652   UINT model_movw1_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
653   UINT model_movw1_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
654   UINT model_movw2_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
655   UINT model_movw2_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
656   UINT model_movw3_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
657   UINT model_movw3_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
658   UINT model_movw4_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
659   UINT model_movw4_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
660   UINT model_movw5_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
661   UINT model_movw5_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
662   UINT model_movw6_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
663   UINT model_movw6_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
664   UINT model_movw7_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
665   UINT model_movw7_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
666   UINT model_movw8_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
667   UINT model_movw8_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
668   UINT model_movw9_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
669   UINT model_movw9_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
670   UINT model_movw10_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
671   UINT model_movw10_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
672   UINT model_movw11_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
673   UINT model_movw11_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
674   UINT model_mova_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
675   UINT model_mova_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
676   UINT model_movcal_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
677   UINT model_movcal_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
678   UINT model_movcol_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
679   UINT model_movcol_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
680   UINT model_movt_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
681   UINT model_movt_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
682   UINT model_movual_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
683   UINT model_movual_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
684   UINT model_movual2_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
685   UINT model_movual2_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
686   UINT model_mull_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
687   UINT model_mull_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
688   UINT model_mulsw_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
689   UINT model_mulsw_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
690   UINT model_muluw_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
691   UINT model_muluw_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
692   UINT model_neg_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
693   UINT model_neg_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
694   UINT model_negc_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
695   UINT model_negc_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
696   UINT model_nop_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
697   UINT model_nop_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
698   UINT model_not_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
699   UINT model_not_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
700   UINT model_ocbi_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
701   UINT model_ocbi_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
702   UINT model_ocbp_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
703   UINT model_ocbp_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
704   UINT model_ocbwb_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
705   UINT model_ocbwb_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
706   UINT model_or_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
707   UINT model_or_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
708   UINT model_ori_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
709   UINT model_ori_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
710   UINT model_orb_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
711   UINT model_orb_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
712   UINT model_pref_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
713   UINT model_pref_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
714   UINT model_rotcl_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
715   UINT model_rotcl_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
716   UINT model_rotcr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
717   UINT model_rotcr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
718   UINT model_rotl_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
719   UINT model_rotl_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
720   UINT model_rotr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
721   UINT model_rotr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
722   UINT model_rts_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
723   UINT model_rts_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
724   UINT model_sets_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
725   UINT model_sets_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
726   UINT model_sett_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
727   UINT model_sett_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
728   UINT model_shad_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
729   UINT model_shad_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
730   UINT model_shal_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
731   UINT model_shal_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
732   UINT model_shar_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
733   UINT model_shar_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
734   UINT model_shld_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
735   UINT model_shld_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
736   UINT model_shll_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
737   UINT model_shll_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
738   UINT model_shll2_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
739   UINT model_shll2_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
740   UINT model_shll8_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
741   UINT model_shll8_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
742   UINT model_shll16_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
743   UINT model_shll16_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
744   UINT model_shlr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
745   UINT model_shlr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
746   UINT model_shlr2_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
747   UINT model_shlr2_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
748   UINT model_shlr8_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
749   UINT model_shlr8_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
750   UINT model_shlr16_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
751   UINT model_shlr16_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
752   UINT model_stc_gbr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
753   UINT model_stc_gbr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
754   UINT model_stc_vbr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
755   UINT model_stc_vbr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
756   UINT model_stcl_gbr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
757   UINT model_stcl_gbr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
758   UINT model_stcl_vbr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
759   UINT model_stcl_vbr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
760   UINT model_sts_mach_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
761   UINT model_sts_mach_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
762   UINT model_stsl_mach_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
763   UINT model_stsl_mach_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
764   UINT model_sts_macl_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
765   UINT model_sts_macl_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
766   UINT model_stsl_macl_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
767   UINT model_stsl_macl_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
768   UINT model_sts_pr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
769   UINT model_sts_pr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
770   UINT model_stsl_pr_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
771   UINT model_stsl_pr_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
772   UINT model_sub_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
773   UINT model_sub_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
774   UINT model_subc_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
775   UINT model_subc_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
776   UINT model_subv_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
777   UINT model_subv_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
778   UINT model_swapb_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
779   UINT model_swapb_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
780   UINT model_swapw_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
781   UINT model_swapw_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
782   UINT model_tasb_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
783   UINT model_tasb_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
784   UINT model_trapa_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
785   UINT model_trapa_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
786   UINT model_tst_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
787   UINT model_tst_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
788   UINT model_tsti_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
789   UINT model_tsti_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
790   UINT model_tstb_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
791   UINT model_tstb_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
792   UINT model_xor_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
793   UINT model_xor_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
794   UINT model_xori_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
795   UINT model_xori_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
796   UINT model_xorb_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
797   UINT model_xorb_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
798   UINT model_xtrct_compact_before (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
799   UINT model_xtrct_compact_after (sh4a_nofpu_cpu *current_cpu, sh4a_nofpu_scache *sem);
800
801   /* Enum declaration for unit types.  */
802 typedef enum unit_number {
803   UNIT_NONE, UNIT_U_OCB, UNIT_U_MULR_GR, UNIT_U_MULR
804  , UNIT_U_FCNV, UNIT_U_FCMP, UNIT_U_FSQRT, UNIT_U_FDIV
805  , UNIT_U_FPU_LOAD_GR, UNIT_U_USE_FPSCR, UNIT_U_LDSL_FPSCR, UNIT_U_LDS_FPSCR
806  , UNIT_U_USE_FPUL, UNIT_U_FLDS_FPUL, UNIT_U_LOAD_FPUL, UNIT_U_SET_FPUL
807  , UNIT_U_FPU_MEMORY_ACCESS, UNIT_U_USE_FR, UNIT_U_SET_FR_0, UNIT_U_SET_FR
808  , UNIT_U_LOAD_FR, UNIT_U_MAYBE_FPU, UNIT_U_FPU, UNIT_U_TRAP
809  , UNIT_U_WRITE_BACK, UNIT_U_USE_MULTIPLY_RESULT, UNIT_U_SHIFT, UNIT_U_TAS
810  , UNIT_U_MULSW, UNIT_U_MULL, UNIT_U_DMUL, UNIT_U_MACL
811  , UNIT_U_MACW, UNIT_U_MULTIPLY, UNIT_U_SET_MAC, UNIT_U_LOAD_MAC
812  , UNIT_U_LOAD_VBR, UNIT_U_LOAD_GBR, UNIT_U_USE_GR, UNIT_U_LOAD_GR
813  , UNIT_U_STC_VBR, UNIT_U_LDCL_VBR, UNIT_U_LDCL, UNIT_U_USE_TBIT
814  , UNIT_U_LDC_GBR, UNIT_U_LDC_SR, UNIT_U_SET_SR_BIT, UNIT_U_USE_PR
815  , UNIT_U_LOAD_PR, UNIT_U_STS_PR, UNIT_U_LDS_PR, UNIT_U_MEMORY_ACCESS
816  , UNIT_U_LOGIC_B, UNIT_U_JSR, UNIT_U_JMP, UNIT_U_BRANCH
817  , UNIT_U_SX, UNIT_U_EXEC, UNIT_MAX
818 } UNIT_NUMBER;
819
820   struct unit {
821     unit_number unit;
822     UINT issue;
823     UINT done;
824   };
825
826   static const int MAX_UNITS = 6;
827
828   typedef UINT (sh4a_nofpu_sh4a_nofpu_model::*model_function) (sh4a_nofpu_cpu* current_cpu, sh4a_nofpu_scache* sem);
829
830   struct insn_timing {
831     // This is an integer that identifies this insn.
832     UINT num;
833     // Functions to handle insn-specific profiling.
834     model_function model_before;
835     model_function model_after;
836     // Array of function units used by this insn.
837     unit units[MAX_UNITS];
838   };
839
840   static const insn_timing timing[];
841 };
842
843 } // namespace sh4a_nofpu
844
845 #endif // SH4A_NOFPU_MODEL_H