xref: /netbsd-src/external/gpl3/gdb.old/dist/sim/frv/profile-fr450.c (revision cef8759bd76c1b621f8eab8faa6f208faabc2e15)
1 /* frv simulator fr450 dependent profiling code.
2 
3    Copyright (C) 2001-2017 Free Software Foundation, Inc.
4    Contributed by Red Hat
5 
6 This file is part of the GNU simulators.
7 
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
12 
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 GNU General Public License for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with this program.  If not, see <http://www.gnu.org/licenses/>.
20 
21 */
22 #define WANT_CPU
23 #define WANT_CPU_FRVBF
24 
25 #include "sim-main.h"
26 #include "bfd.h"
27 
28 #if WITH_PROFILE_MODEL_P
29 
30 #include "profile.h"
31 #include "profile-fr400.h"
32 
33 int
34 frvbf_model_fr450_u_exec (SIM_CPU *cpu, const IDESC *idesc,
35 			    int unit_num, int referenced)
36 {
37   return idesc->timing->units[unit_num].done;
38 }
39 
40 int
41 frvbf_model_fr450_u_integer (SIM_CPU *cpu, const IDESC *idesc,
42 			     int unit_num, int referenced,
43 			     INT in_GRi, INT in_GRj, INT out_GRk,
44 			     INT out_ICCi_1)
45 {
46   /* Modelling for this unit is the same as for fr500.  */
47   return frvbf_model_fr500_u_integer (cpu, idesc, unit_num, referenced,
48 				      in_GRi, in_GRj, out_GRk, out_ICCi_1);
49 }
50 
51 int
52 frvbf_model_fr450_u_imul (SIM_CPU *cpu, const IDESC *idesc,
53 			  int unit_num, int referenced,
54 			  INT in_GRi, INT in_GRj, INT out_GRk, INT out_ICCi_1)
55 {
56   int cycles;
57 
58   if (model_insn == FRV_INSN_MODEL_PASS_1)
59     {
60       /* Pass 1 is the same as for fr500.  */
61       return frvbf_model_fr500_u_imul (cpu, idesc, unit_num, referenced,
62 				       in_GRi, in_GRj, out_GRk, out_ICCi_1);
63     }
64 
65   /* icc0-icc4 are the upper 4 fields of the CCR.  */
66   if (out_ICCi_1 >= 0)
67     out_ICCi_1 += 4;
68 
69   /* GRk and IACCi_1 have a latency of 1 cycle.  */
70   cycles = idesc->timing->units[unit_num].done;
71   update_GRdouble_latency (cpu, out_GRk, cycles + 1);
72   update_CCR_latency (cpu, out_ICCi_1, cycles + 1);
73 
74   return cycles;
75 }
76 
77 int
78 frvbf_model_fr450_u_idiv (SIM_CPU *cpu, const IDESC *idesc,
79 			  int unit_num, int referenced,
80 			  INT in_GRi, INT in_GRj, INT out_GRk, INT out_ICCi_1)
81 {
82   int cycles;
83 
84   if (model_insn == FRV_INSN_MODEL_PASS_1)
85     {
86       /* Pass 1 is the same as for fr500.  */
87       return frvbf_model_fr500_u_idiv (cpu, idesc, unit_num, referenced,
88 				       in_GRi, in_GRj, out_GRk, out_ICCi_1);
89     }
90 
91   /* icc0-icc4 are the upper 4 fields of the CCR.  */
92   if (out_ICCi_1 >= 0)
93     out_ICCi_1 += 4;
94 
95   /* GRk, ICCi_1 and the divider have a latency of 18 cycles  */
96   cycles = idesc->timing->units[unit_num].done;
97   update_GR_latency (cpu, out_GRk, cycles + 18);
98   update_CCR_latency (cpu, out_ICCi_1, cycles + 18);
99   update_idiv_resource_latency (cpu, 0, cycles + 18);
100 
101   return cycles;
102 }
103 
104 int
105 frvbf_model_fr450_u_branch (SIM_CPU *cpu, const IDESC *idesc,
106 			    int unit_num, int referenced,
107 			    INT in_GRi, INT in_GRj,
108 			    INT in_ICCi_2, INT in_ICCi_3)
109 {
110   /* Modelling for this unit is the same as for fr400.  */
111   return frvbf_model_fr400_u_branch (cpu, idesc, unit_num, referenced,
112 				     in_GRi, in_GRj, in_ICCi_2, in_ICCi_3);
113 }
114 
115 int
116 frvbf_model_fr450_u_trap (SIM_CPU *cpu, const IDESC *idesc,
117 			  int unit_num, int referenced,
118 			  INT in_GRi, INT in_GRj,
119 			  INT in_ICCi_2, INT in_FCCi_2)
120 {
121   /* Modelling for this unit is the same as for fr500.  */
122   return frvbf_model_fr500_u_trap (cpu, idesc, unit_num, referenced,
123 				   in_GRi, in_GRj, in_ICCi_2, in_FCCi_2);
124 }
125 
126 int
127 frvbf_model_fr450_u_check (SIM_CPU *cpu, const IDESC *idesc,
128 			   int unit_num, int referenced,
129 			   INT in_ICCi_3, INT in_FCCi_3)
130 {
131   /* Modelling for this unit is the same as for fr500.  */
132   return frvbf_model_fr500_u_check (cpu, idesc, unit_num, referenced,
133 				    in_ICCi_3, in_FCCi_3);
134 }
135 
136 int
137 frvbf_model_fr450_u_set_hilo (SIM_CPU *cpu, const IDESC *idesc,
138 			     int unit_num, int referenced,
139 			     INT out_GRkhi, INT out_GRklo)
140 {
141   /* Modelling for this unit is the same as for fr500.  */
142   return frvbf_model_fr500_u_set_hilo (cpu, idesc, unit_num, referenced,
143 				       out_GRkhi, out_GRklo);
144 }
145 
146 int
147 frvbf_model_fr450_u_gr_load (SIM_CPU *cpu, const IDESC *idesc,
148 			     int unit_num, int referenced,
149 			     INT in_GRi, INT in_GRj,
150 			     INT out_GRk, INT out_GRdoublek)
151 {
152   int cycles;
153 
154   if (model_insn == FRV_INSN_MODEL_PASS_1)
155     {
156       /* Pass 1 is the same as for fr500.  */
157       return frvbf_model_fr500_u_fr_load (cpu, idesc, unit_num, referenced,
158 					  in_GRi, in_GRj, out_GRk,
159 					  out_GRdoublek);
160     }
161 
162   cycles = idesc->timing->units[unit_num].done;
163 
164   /* The latency of GRk for a load will depend on how long it takes to retrieve
165      the the data from the cache or memory.  */
166   update_GR_latency_for_load (cpu, out_GRk, cycles);
167   update_GRdouble_latency_for_load (cpu, out_GRdoublek, cycles);
168 
169   if (CGEN_ATTR_VALUE(idesc, idesc->attrs, CGEN_INSN_NON_EXCEPTING))
170     {
171       /* GNER has a latency of 2 cycles.  */
172       update_SPR_latency (cpu, GNER_FOR_GR (out_GRk), cycles + 2);
173       update_SPR_latency (cpu, GNER_FOR_GR (out_GRdoublek), cycles + 2);
174     }
175 
176   return cycles;
177 }
178 
179 int
180 frvbf_model_fr450_u_gr_store (SIM_CPU *cpu, const IDESC *idesc,
181 			      int unit_num, int referenced,
182 			      INT in_GRi, INT in_GRj,
183 			      INT in_GRk, INT in_GRdoublek)
184 {
185   /* Modelling for this unit is the same as for fr500.  */
186   return frvbf_model_fr500_u_gr_store (cpu, idesc, unit_num, referenced,
187 				       in_GRi, in_GRj, in_GRk, in_GRdoublek);
188 }
189 
190 int
191 frvbf_model_fr450_u_fr_load (SIM_CPU *cpu, const IDESC *idesc,
192 			     int unit_num, int referenced,
193 			     INT in_GRi, INT in_GRj,
194 			     INT out_FRk, INT out_FRdoublek)
195 {
196   /* Modelling for this unit is the same as for fr400.  */
197   return frvbf_model_fr400_u_fr_load (cpu, idesc, unit_num, referenced,
198 				      in_GRi, in_GRj, out_FRk, out_FRdoublek);
199 }
200 
201 int
202 frvbf_model_fr450_u_fr_store (SIM_CPU *cpu, const IDESC *idesc,
203 			      int unit_num, int referenced,
204 			      INT in_GRi, INT in_GRj,
205 			      INT in_FRk, INT in_FRdoublek)
206 {
207   /* Modelling for this unit is the same as for fr400.  */
208   return frvbf_model_fr400_u_fr_load (cpu, idesc, unit_num, referenced,
209 				      in_GRi, in_GRj, in_FRk, in_FRdoublek);
210 }
211 
212 int
213 frvbf_model_fr450_u_swap (SIM_CPU *cpu, const IDESC *idesc,
214 			  int unit_num, int referenced,
215 			  INT in_GRi, INT in_GRj, INT out_GRk)
216 {
217   /* Modelling for this unit is the same as for fr500.  */
218   return frvbf_model_fr500_u_swap (cpu, idesc, unit_num, referenced,
219 				   in_GRi, in_GRj, out_GRk);
220 }
221 
222 int
223 frvbf_model_fr450_u_fr2gr (SIM_CPU *cpu, const IDESC *idesc,
224 			   int unit_num, int referenced,
225 			   INT in_FRk, INT out_GRj)
226 {
227   int cycles;
228 
229   if (model_insn == FRV_INSN_MODEL_PASS_1)
230     {
231       /* Pass 1 is the same as for fr400.  */
232       return frvbf_model_fr500_u_fr2gr (cpu, idesc, unit_num, referenced,
233 					in_FRk, out_GRj);
234     }
235 
236   /* The latency of GRj is 1 cycle.  */
237   cycles = idesc->timing->units[unit_num].done;
238   update_GR_latency (cpu, out_GRj, cycles + 1);
239 
240   return cycles;
241 }
242 
243 int
244 frvbf_model_fr450_u_spr2gr (SIM_CPU *cpu, const IDESC *idesc,
245 			   int unit_num, int referenced,
246 			   INT in_spr, INT out_GRj)
247 {
248   /* Modelling for this unit is the same as for fr500.  */
249   return frvbf_model_fr500_u_spr2gr (cpu, idesc, unit_num, referenced,
250 				     in_spr, out_GRj);
251 }
252 
253 int
254 frvbf_model_fr450_u_gr2fr (SIM_CPU *cpu, const IDESC *idesc,
255 			   int unit_num, int referenced,
256 			   INT in_GRj, INT out_FRk)
257 {
258   /* Modelling for this unit is the same as for fr400.  */
259   return frvbf_model_fr400_u_gr2fr (cpu, idesc, unit_num, referenced,
260 				    in_GRj, out_FRk);
261 }
262 
263 int
264 frvbf_model_fr450_u_gr2spr (SIM_CPU *cpu, const IDESC *idesc,
265 			    int unit_num, int referenced,
266 			    INT in_GRj, INT out_spr)
267 {
268   /* Modelling for this unit is the same as for fr500.  */
269   return frvbf_model_fr500_u_gr2spr (cpu, idesc, unit_num, referenced,
270 				     in_GRj, out_spr);
271 }
272 
273 int
274 frvbf_model_fr450_u_media_1 (SIM_CPU *cpu, const IDESC *idesc,
275 			     int unit_num, int referenced,
276 			     INT in_FRi, INT in_FRj,
277 			     INT out_FRk)
278 {
279   /* Modelling for this unit is the same as for fr400.  */
280   return frvbf_model_fr400_u_media_1 (cpu, idesc, unit_num, referenced,
281 				      in_FRi, in_FRj, out_FRk);
282 }
283 
284 int
285 frvbf_model_fr450_u_media_1_quad (SIM_CPU *cpu, const IDESC *idesc,
286 				  int unit_num, int referenced,
287 				  INT in_FRi, INT in_FRj,
288 				  INT out_FRk)
289 {
290   /* Modelling for this unit is the same as for fr400.  */
291   return frvbf_model_fr400_u_media_1_quad (cpu, idesc, unit_num, referenced,
292 					   in_FRi, in_FRj, out_FRk);
293 }
294 
295 int
296 frvbf_model_fr450_u_media_hilo (SIM_CPU *cpu, const IDESC *idesc,
297 				int unit_num, int referenced,
298 				INT out_FRkhi, INT out_FRklo)
299 {
300   /* Modelling for this unit is the same as for fr400.  */
301   return frvbf_model_fr400_u_media_hilo (cpu, idesc, unit_num, referenced,
302 					 out_FRkhi, out_FRklo);
303 }
304 
305 int
306 frvbf_model_fr450_u_media_2 (SIM_CPU *cpu, const IDESC *idesc,
307 			     int unit_num, int referenced,
308 			     INT in_FRi, INT in_FRj,
309 			     INT out_ACC40Sk, INT out_ACC40Uk)
310 {
311   /* Modelling for this unit is the same as for fr400.  */
312   return frvbf_model_fr400_u_media_2 (cpu, idesc, unit_num, referenced,
313 				      in_FRi, in_FRj, out_ACC40Sk,
314 				      out_ACC40Uk);
315 }
316 
317 int
318 frvbf_model_fr450_u_media_2_quad (SIM_CPU *cpu, const IDESC *idesc,
319 				  int unit_num, int referenced,
320 				  INT in_FRi, INT in_FRj,
321 				  INT out_ACC40Sk, INT out_ACC40Uk)
322 {
323   /* Modelling for this unit is the same as for fr400.  */
324   return frvbf_model_fr400_u_media_2_quad (cpu, idesc, unit_num, referenced,
325 					   in_FRi, in_FRj, out_ACC40Sk,
326 					   out_ACC40Uk);
327 }
328 
329 int
330 frvbf_model_fr450_u_media_2_acc (SIM_CPU *cpu, const IDESC *idesc,
331 				 int unit_num, int referenced,
332 				 INT in_ACC40Si, INT out_ACC40Sk)
333 {
334   /* Modelling for this unit is the same as for fr400.  */
335   return frvbf_model_fr400_u_media_2_acc (cpu, idesc, unit_num, referenced,
336 					  in_ACC40Si, out_ACC40Sk);
337 }
338 
339 int
340 frvbf_model_fr450_u_media_2_acc_dual (SIM_CPU *cpu, const IDESC *idesc,
341 				      int unit_num, int referenced,
342 				      INT in_ACC40Si, INT out_ACC40Sk)
343 {
344   /* Modelling for this unit is the same as for fr400.  */
345   return frvbf_model_fr400_u_media_2_acc_dual (cpu, idesc, unit_num,
346 					       referenced, in_ACC40Si,
347 					       out_ACC40Sk);
348 }
349 
350 int
351 frvbf_model_fr450_u_media_2_add_sub (SIM_CPU *cpu, const IDESC *idesc,
352 				     int unit_num, int referenced,
353 				     INT in_ACC40Si, INT out_ACC40Sk)
354 {
355   /* Modelling for this unit is the same as for fr400.  */
356   return frvbf_model_fr400_u_media_2_add_sub (cpu, idesc, unit_num,
357 					      referenced, in_ACC40Si,
358 					      out_ACC40Sk);
359 }
360 
361 int
362 frvbf_model_fr450_u_media_2_add_sub_dual (SIM_CPU *cpu, const IDESC *idesc,
363 					  int unit_num, int referenced,
364 					  INT in_ACC40Si, INT out_ACC40Sk)
365 {
366   /* Modelling for this unit is the same as for fr400.  */
367   return frvbf_model_fr400_u_media_2_add_sub_dual (cpu, idesc, unit_num,
368 						   referenced, in_ACC40Si,
369 						   out_ACC40Sk);
370 }
371 
372 int
373 frvbf_model_fr450_u_media_3 (SIM_CPU *cpu, const IDESC *idesc,
374 			     int unit_num, int referenced,
375 			     INT in_FRi, INT in_FRj,
376 			     INT out_FRk)
377 {
378   /* Modelling is the same as media unit 1.  */
379   return frvbf_model_fr450_u_media_1 (cpu, idesc, unit_num, referenced,
380 				      in_FRi, in_FRj, out_FRk);
381 }
382 
383 int
384 frvbf_model_fr450_u_media_3_dual (SIM_CPU *cpu, const IDESC *idesc,
385 				  int unit_num, int referenced,
386 				  INT in_FRi, INT out_FRk)
387 {
388   /* Modelling for this unit is the same as for fr400.  */
389   return frvbf_model_fr400_u_media_3_dual (cpu, idesc, unit_num, referenced,
390 					   in_FRi, out_FRk);
391 }
392 
393 int
394 frvbf_model_fr450_u_media_3_quad (SIM_CPU *cpu, const IDESC *idesc,
395 				  int unit_num, int referenced,
396 				  INT in_FRi, INT in_FRj,
397 				  INT out_FRk)
398 {
399   /* Modelling is the same as media unit 1.  */
400   return frvbf_model_fr450_u_media_1_quad (cpu, idesc, unit_num, referenced,
401 					   in_FRi, in_FRj, out_FRk);
402 }
403 
404 int
405 frvbf_model_fr450_u_media_4 (SIM_CPU *cpu, const IDESC *idesc,
406 			     int unit_num, int referenced,
407 			     INT in_ACC40Si, INT in_FRj,
408 			     INT out_ACC40Sk, INT out_FRk)
409 {
410   /* Modelling for this unit is the same as for fr400.  */
411   return frvbf_model_fr400_u_media_4 (cpu, idesc, unit_num, referenced,
412 				      in_ACC40Si, in_FRj,
413 				      out_ACC40Sk, out_FRk);
414 }
415 
416 int
417 frvbf_model_fr450_u_media_4_accg (SIM_CPU *cpu, const IDESC *idesc,
418 				  int unit_num, int referenced,
419 				  INT in_ACCGi, INT in_FRinti,
420 				  INT out_ACCGk, INT out_FRintk)
421 {
422   /* Modelling is the same as media-4 unit except use accumulator guards
423      as input instead of accumulators.  */
424   return frvbf_model_fr450_u_media_4 (cpu, idesc, unit_num, referenced,
425 				      in_ACCGi, in_FRinti,
426 				      out_ACCGk, out_FRintk);
427 }
428 
429 int
430 frvbf_model_fr450_u_media_4_acc_dual (SIM_CPU *cpu, const IDESC *idesc,
431 				      int unit_num, int referenced,
432 				      INT in_ACC40Si, INT out_FRk)
433 {
434   /* Modelling for this unit is the same as for fr400.  */
435   return frvbf_model_fr400_u_media_4_acc_dual (cpu, idesc, unit_num,
436 					       referenced, in_ACC40Si,
437 					       out_FRk);
438 }
439 
440 int
441 frvbf_model_fr450_u_media_4_mclracca (SIM_CPU *cpu, const IDESC *idesc,
442 				      int unit_num, int referenced)
443 {
444   int cycles;
445   int acc;
446   FRV_PROFILE_STATE *ps;
447 
448   if (model_insn == FRV_INSN_MODEL_PASS_1)
449     return 0;
450 
451   /* The preprocessing can execute right away.  */
452   cycles = idesc->timing->units[unit_num].done;
453 
454   ps = CPU_PROFILE_STATE (cpu);
455 
456   /* The post processing must wait for any pending ACC writes.  */
457   ps->post_wait = cycles;
458   for (acc = 0; acc < 4; acc++)
459     post_wait_for_ACC (cpu, acc);
460   for (acc = 8; acc < 12; acc++)
461     post_wait_for_ACC (cpu, acc);
462 
463   for (acc = 0; acc < 4; acc++)
464     {
465       update_ACC_latency (cpu, acc, ps->post_wait);
466       update_ACC_ptime (cpu, acc, 2);
467     }
468   for (acc = 8; acc < 12; acc++)
469     {
470       update_ACC_latency (cpu, acc, ps->post_wait);
471       update_ACC_ptime (cpu, acc, 2);
472     }
473 
474   return cycles;
475 }
476 
477 int
478 frvbf_model_fr450_u_media_6 (SIM_CPU *cpu, const IDESC *idesc,
479 			     int unit_num, int referenced,
480 			     INT in_FRi, INT out_FRk)
481 {
482   /* Modelling for this unit is the same as for fr400.  */
483   return frvbf_model_fr400_u_media_6 (cpu, idesc, unit_num, referenced,
484 				      in_FRi, out_FRk);
485 }
486 
487 int
488 frvbf_model_fr450_u_media_7 (SIM_CPU *cpu, const IDESC *idesc,
489 			     int unit_num, int referenced,
490 			     INT in_FRinti, INT in_FRintj,
491 			     INT out_FCCk)
492 {
493   /* Modelling for this unit is the same as for fr400.  */
494   return frvbf_model_fr400_u_media_7 (cpu, idesc, unit_num, referenced,
495 				      in_FRinti, in_FRintj, out_FCCk);
496 }
497 
498 int
499 frvbf_model_fr450_u_media_dual_expand (SIM_CPU *cpu, const IDESC *idesc,
500 				       int unit_num, int referenced,
501 				       INT in_FRi,
502 				       INT out_FRk)
503 {
504   /* Modelling for this unit is the same as for fr400.  */
505   return frvbf_model_fr400_u_media_dual_expand (cpu, idesc, unit_num,
506 						referenced, in_FRi, out_FRk);
507 }
508 
509 int
510 frvbf_model_fr450_u_media_dual_htob (SIM_CPU *cpu, const IDESC *idesc,
511 				     int unit_num, int referenced,
512 				     INT in_FRj,
513 				     INT out_FRk)
514 {
515   /* Modelling for this unit is the same as for fr400.  */
516   return frvbf_model_fr400_u_media_dual_htob (cpu, idesc, unit_num,
517 					      referenced, in_FRj, out_FRk);
518 }
519 
520 int
521 frvbf_model_fr450_u_ici (SIM_CPU *cpu, const IDESC *idesc,
522 			 int unit_num, int referenced,
523 			 INT in_GRi, INT in_GRj)
524 {
525   /* Modelling for this unit is the same as for fr500.  */
526   return frvbf_model_fr500_u_ici (cpu, idesc, unit_num, referenced,
527 				  in_GRi, in_GRj);
528 }
529 
530 int
531 frvbf_model_fr450_u_dci (SIM_CPU *cpu, const IDESC *idesc,
532 			 int unit_num, int referenced,
533 			 INT in_GRi, INT in_GRj)
534 {
535   /* Modelling for this unit is the same as for fr500.  */
536   return frvbf_model_fr500_u_dci (cpu, idesc, unit_num, referenced,
537 				  in_GRi, in_GRj);
538 }
539 
540 int
541 frvbf_model_fr450_u_dcf (SIM_CPU *cpu, const IDESC *idesc,
542 			 int unit_num, int referenced,
543 			 INT in_GRi, INT in_GRj)
544 {
545   /* Modelling for this unit is the same as for fr500.  */
546   return frvbf_model_fr500_u_dcf (cpu, idesc, unit_num, referenced,
547 				  in_GRi, in_GRj);
548 }
549 
550 int
551 frvbf_model_fr450_u_icpl (SIM_CPU *cpu, const IDESC *idesc,
552 			  int unit_num, int referenced,
553 			  INT in_GRi, INT in_GRj)
554 {
555   /* Modelling for this unit is the same as for fr500.  */
556   return frvbf_model_fr500_u_icpl (cpu, idesc, unit_num, referenced,
557 				   in_GRi, in_GRj);
558 }
559 
560 int
561 frvbf_model_fr450_u_dcpl (SIM_CPU *cpu, const IDESC *idesc,
562 			  int unit_num, int referenced,
563 			  INT in_GRi, INT in_GRj)
564 {
565   /* Modelling for this unit is the same as for fr500.  */
566   return frvbf_model_fr500_u_dcpl (cpu, idesc, unit_num, referenced,
567 				   in_GRi, in_GRj);
568 }
569 
570 int
571 frvbf_model_fr450_u_icul (SIM_CPU *cpu, const IDESC *idesc,
572 			  int unit_num, int referenced,
573 			  INT in_GRi, INT in_GRj)
574 {
575   /* Modelling for this unit is the same as for fr500.  */
576   return frvbf_model_fr500_u_icul (cpu, idesc, unit_num, referenced,
577 				   in_GRi, in_GRj);
578 }
579 
580 int
581 frvbf_model_fr450_u_dcul (SIM_CPU *cpu, const IDESC *idesc,
582 			  int unit_num, int referenced,
583 			  INT in_GRi, INT in_GRj)
584 {
585   /* Modelling for this unit is the same as for fr500.  */
586   return frvbf_model_fr500_u_dcul (cpu, idesc, unit_num, referenced,
587 				   in_GRi, in_GRj);
588 }
589 
590 int
591 frvbf_model_fr450_u_barrier (SIM_CPU *cpu, const IDESC *idesc,
592 			     int unit_num, int referenced)
593 {
594   /* Modelling for this unit is the same as for fr500.  */
595   return frvbf_model_fr500_u_barrier (cpu, idesc, unit_num, referenced);
596 }
597 
598 int
599 frvbf_model_fr450_u_membar (SIM_CPU *cpu, const IDESC *idesc,
600 			    int unit_num, int referenced)
601 {
602   /* Modelling for this unit is the same as for fr500.  */
603   return frvbf_model_fr500_u_membar (cpu, idesc, unit_num, referenced);
604 }
605 
606 #endif /* WITH_PROFILE_MODEL_P */
607