* tuiSourceWin.c (tuiSetIsExecPointAt): Redraw the previous and
[deliverable/binutils-gdb.git] / sim / fr30 / fr30.c
1 // OBSOLETE /* fr30 simulator support code
2 // OBSOLETE Copyright (C) 1998, 1999 Free Software Foundation, Inc.
3 // OBSOLETE Contributed by Cygnus Solutions.
4 // OBSOLETE
5 // OBSOLETE This file is part of the GNU simulators.
6 // OBSOLETE
7 // OBSOLETE This program is free software; you can redistribute it and/or modify
8 // OBSOLETE it under the terms of the GNU General Public License as published by
9 // OBSOLETE the Free Software Foundation; either version 2, or (at your option)
10 // OBSOLETE any later version.
11 // OBSOLETE
12 // OBSOLETE This program is distributed in the hope that it will be useful,
13 // OBSOLETE but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // OBSOLETE MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // OBSOLETE GNU General Public License for more details.
16 // OBSOLETE
17 // OBSOLETE You should have received a copy of the GNU General Public License along
18 // OBSOLETE with this program; if not, write to the Free Software Foundation, Inc.,
19 // OBSOLETE 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
20 // OBSOLETE
21 // OBSOLETE #define WANT_CPU
22 // OBSOLETE #define WANT_CPU_FR30BF
23 // OBSOLETE
24 // OBSOLETE #include "sim-main.h"
25 // OBSOLETE #include "cgen-mem.h"
26 // OBSOLETE #include "cgen-ops.h"
27 // OBSOLETE
28 // OBSOLETE /* Convert gdb dedicated register number to actual dr reg number. */
29 // OBSOLETE
30 // OBSOLETE static int
31 // OBSOLETE decode_gdb_dr_regnum (int gdb_regnum)
32 // OBSOLETE {
33 // OBSOLETE switch (gdb_regnum)
34 // OBSOLETE {
35 // OBSOLETE case TBR_REGNUM : return H_DR_TBR;
36 // OBSOLETE case RP_REGNUM : return H_DR_RP;
37 // OBSOLETE case SSP_REGNUM : return H_DR_SSP;
38 // OBSOLETE case USP_REGNUM : return H_DR_USP;
39 // OBSOLETE case MDH_REGNUM : return H_DR_MDH;
40 // OBSOLETE case MDL_REGNUM : return H_DR_MDL;
41 // OBSOLETE }
42 // OBSOLETE abort ();
43 // OBSOLETE }
44 // OBSOLETE
45 // OBSOLETE /* The contents of BUF are in target byte order. */
46 // OBSOLETE
47 // OBSOLETE int
48 // OBSOLETE fr30bf_fetch_register (SIM_CPU *current_cpu, int rn, unsigned char *buf, int len)
49 // OBSOLETE {
50 // OBSOLETE if (rn < 16)
51 // OBSOLETE SETTWI (buf, fr30bf_h_gr_get (current_cpu, rn));
52 // OBSOLETE else
53 // OBSOLETE switch (rn)
54 // OBSOLETE {
55 // OBSOLETE case PC_REGNUM :
56 // OBSOLETE SETTWI (buf, fr30bf_h_pc_get (current_cpu));
57 // OBSOLETE break;
58 // OBSOLETE case PS_REGNUM :
59 // OBSOLETE SETTWI (buf, fr30bf_h_ps_get (current_cpu));
60 // OBSOLETE break;
61 // OBSOLETE case TBR_REGNUM :
62 // OBSOLETE case RP_REGNUM :
63 // OBSOLETE case SSP_REGNUM :
64 // OBSOLETE case USP_REGNUM :
65 // OBSOLETE case MDH_REGNUM :
66 // OBSOLETE case MDL_REGNUM :
67 // OBSOLETE SETTWI (buf, fr30bf_h_dr_get (current_cpu,
68 // OBSOLETE decode_gdb_dr_regnum (rn)));
69 // OBSOLETE break;
70 // OBSOLETE default :
71 // OBSOLETE return 0;
72 // OBSOLETE }
73 // OBSOLETE
74 // OBSOLETE return -1; /*FIXME*/
75 // OBSOLETE }
76 // OBSOLETE
77 // OBSOLETE /* The contents of BUF are in target byte order. */
78 // OBSOLETE
79 // OBSOLETE int
80 // OBSOLETE fr30bf_store_register (SIM_CPU *current_cpu, int rn, unsigned char *buf, int len)
81 // OBSOLETE {
82 // OBSOLETE if (rn < 16)
83 // OBSOLETE fr30bf_h_gr_set (current_cpu, rn, GETTWI (buf));
84 // OBSOLETE else
85 // OBSOLETE switch (rn)
86 // OBSOLETE {
87 // OBSOLETE case PC_REGNUM :
88 // OBSOLETE fr30bf_h_pc_set (current_cpu, GETTWI (buf));
89 // OBSOLETE break;
90 // OBSOLETE case PS_REGNUM :
91 // OBSOLETE fr30bf_h_ps_set (current_cpu, GETTWI (buf));
92 // OBSOLETE break;
93 // OBSOLETE case TBR_REGNUM :
94 // OBSOLETE case RP_REGNUM :
95 // OBSOLETE case SSP_REGNUM :
96 // OBSOLETE case USP_REGNUM :
97 // OBSOLETE case MDH_REGNUM :
98 // OBSOLETE case MDL_REGNUM :
99 // OBSOLETE fr30bf_h_dr_set (current_cpu,
100 // OBSOLETE decode_gdb_dr_regnum (rn),
101 // OBSOLETE GETTWI (buf));
102 // OBSOLETE break;
103 // OBSOLETE default :
104 // OBSOLETE return 0;
105 // OBSOLETE }
106 // OBSOLETE
107 // OBSOLETE return -1; /*FIXME*/
108 // OBSOLETE }
109 // OBSOLETE \f
110 // OBSOLETE /* Cover fns to access the ccr bits. */
111 // OBSOLETE
112 // OBSOLETE BI
113 // OBSOLETE fr30bf_h_sbit_get_handler (SIM_CPU *current_cpu)
114 // OBSOLETE {
115 // OBSOLETE return CPU (h_sbit);
116 // OBSOLETE }
117 // OBSOLETE
118 // OBSOLETE void
119 // OBSOLETE fr30bf_h_sbit_set_handler (SIM_CPU *current_cpu, BI newval)
120 // OBSOLETE {
121 // OBSOLETE int old_sbit = CPU (h_sbit);
122 // OBSOLETE int new_sbit = (newval != 0);
123 // OBSOLETE
124 // OBSOLETE CPU (h_sbit) = new_sbit;
125 // OBSOLETE
126 // OBSOLETE /* When switching stack modes, update the registers. */
127 // OBSOLETE if (old_sbit != new_sbit)
128 // OBSOLETE {
129 // OBSOLETE if (old_sbit)
130 // OBSOLETE {
131 // OBSOLETE /* Switching user -> system. */
132 // OBSOLETE CPU (h_dr[H_DR_USP]) = CPU (h_gr[H_GR_SP]);
133 // OBSOLETE CPU (h_gr[H_GR_SP]) = CPU (h_dr[H_DR_SSP]);
134 // OBSOLETE }
135 // OBSOLETE else
136 // OBSOLETE {
137 // OBSOLETE /* Switching system -> user. */
138 // OBSOLETE CPU (h_dr[H_DR_SSP]) = CPU (h_gr[H_GR_SP]);
139 // OBSOLETE CPU (h_gr[H_GR_SP]) = CPU (h_dr[H_DR_USP]);
140 // OBSOLETE }
141 // OBSOLETE }
142 // OBSOLETE
143 // OBSOLETE /* TODO: r15 interlock */
144 // OBSOLETE }
145 // OBSOLETE \f
146 // OBSOLETE /* Cover fns to access the ccr bits. */
147 // OBSOLETE
148 // OBSOLETE UQI
149 // OBSOLETE fr30bf_h_ccr_get_handler (SIM_CPU *current_cpu)
150 // OBSOLETE {
151 // OBSOLETE int ccr = ( (GET_H_CBIT () << 0)
152 // OBSOLETE | (GET_H_VBIT () << 1)
153 // OBSOLETE | (GET_H_ZBIT () << 2)
154 // OBSOLETE | (GET_H_NBIT () << 3)
155 // OBSOLETE | (GET_H_IBIT () << 4)
156 // OBSOLETE | (GET_H_SBIT () << 5));
157 // OBSOLETE
158 // OBSOLETE return ccr;
159 // OBSOLETE }
160 // OBSOLETE
161 // OBSOLETE void
162 // OBSOLETE fr30bf_h_ccr_set_handler (SIM_CPU *current_cpu, UQI newval)
163 // OBSOLETE {
164 // OBSOLETE int ccr = newval & 0x3f;
165 // OBSOLETE
166 // OBSOLETE SET_H_CBIT ((ccr & 1) != 0);
167 // OBSOLETE SET_H_VBIT ((ccr & 2) != 0);
168 // OBSOLETE SET_H_ZBIT ((ccr & 4) != 0);
169 // OBSOLETE SET_H_NBIT ((ccr & 8) != 0);
170 // OBSOLETE SET_H_IBIT ((ccr & 0x10) != 0);
171 // OBSOLETE SET_H_SBIT ((ccr & 0x20) != 0);
172 // OBSOLETE }
173 // OBSOLETE \f
174 // OBSOLETE /* Cover fns to access the scr bits. */
175 // OBSOLETE
176 // OBSOLETE UQI
177 // OBSOLETE fr30bf_h_scr_get_handler (SIM_CPU *current_cpu)
178 // OBSOLETE {
179 // OBSOLETE int scr = ( (GET_H_TBIT () << 0)
180 // OBSOLETE | (GET_H_D0BIT () << 1)
181 // OBSOLETE | (GET_H_D1BIT () << 2));
182 // OBSOLETE return scr;
183 // OBSOLETE }
184 // OBSOLETE
185 // OBSOLETE void
186 // OBSOLETE fr30bf_h_scr_set_handler (SIM_CPU *current_cpu, UQI newval)
187 // OBSOLETE {
188 // OBSOLETE int scr = newval & 7;
189 // OBSOLETE
190 // OBSOLETE SET_H_TBIT ((scr & 1) != 0);
191 // OBSOLETE SET_H_D0BIT ((scr & 2) != 0);
192 // OBSOLETE SET_H_D1BIT ((scr & 4) != 0);
193 // OBSOLETE }
194 // OBSOLETE \f
195 // OBSOLETE /* Cover fns to access the ilm bits. */
196 // OBSOLETE
197 // OBSOLETE UQI
198 // OBSOLETE fr30bf_h_ilm_get_handler (SIM_CPU *current_cpu)
199 // OBSOLETE {
200 // OBSOLETE return CPU (h_ilm);
201 // OBSOLETE }
202 // OBSOLETE
203 // OBSOLETE void
204 // OBSOLETE fr30bf_h_ilm_set_handler (SIM_CPU *current_cpu, UQI newval)
205 // OBSOLETE {
206 // OBSOLETE int ilm = newval & 0x1f;
207 // OBSOLETE int current_ilm = CPU (h_ilm);
208 // OBSOLETE
209 // OBSOLETE /* We can only set new ilm values < 16 if the current ilm is < 16. Otherwise
210 // OBSOLETE we add 16 to the value we are given. */
211 // OBSOLETE if (current_ilm >= 16 && ilm < 16)
212 // OBSOLETE ilm += 16;
213 // OBSOLETE
214 // OBSOLETE CPU (h_ilm) = ilm;
215 // OBSOLETE }
216 // OBSOLETE \f
217 // OBSOLETE /* Cover fns to access the ps register. */
218 // OBSOLETE
219 // OBSOLETE USI
220 // OBSOLETE fr30bf_h_ps_get_handler (SIM_CPU *current_cpu)
221 // OBSOLETE {
222 // OBSOLETE int ccr = GET_H_CCR ();
223 // OBSOLETE int scr = GET_H_SCR ();
224 // OBSOLETE int ilm = GET_H_ILM ();
225 // OBSOLETE
226 // OBSOLETE return ccr | (scr << 8) | (ilm << 16);
227 // OBSOLETE }
228 // OBSOLETE
229 // OBSOLETE void
230 // OBSOLETE fr30bf_h_ps_set_handler (SIM_CPU *current_cpu, USI newval)
231 // OBSOLETE {
232 // OBSOLETE int ccr = newval & 0xff;
233 // OBSOLETE int scr = (newval >> 8) & 7;
234 // OBSOLETE int ilm = (newval >> 16) & 0x1f;
235 // OBSOLETE
236 // OBSOLETE SET_H_CCR (ccr);
237 // OBSOLETE SET_H_SCR (scr);
238 // OBSOLETE SET_H_ILM (ilm);
239 // OBSOLETE }
240 // OBSOLETE \f
241 // OBSOLETE /* Cover fns to access the dedicated registers. */
242 // OBSOLETE
243 // OBSOLETE SI
244 // OBSOLETE fr30bf_h_dr_get_handler (SIM_CPU *current_cpu, UINT dr)
245 // OBSOLETE {
246 // OBSOLETE switch (dr)
247 // OBSOLETE {
248 // OBSOLETE case H_DR_SSP :
249 // OBSOLETE if (! GET_H_SBIT ())
250 // OBSOLETE return GET_H_GR (H_GR_SP);
251 // OBSOLETE else
252 // OBSOLETE return CPU (h_dr[H_DR_SSP]);
253 // OBSOLETE case H_DR_USP :
254 // OBSOLETE if (GET_H_SBIT ())
255 // OBSOLETE return GET_H_GR (H_GR_SP);
256 // OBSOLETE else
257 // OBSOLETE return CPU (h_dr[H_DR_USP]);
258 // OBSOLETE case H_DR_TBR :
259 // OBSOLETE case H_DR_RP :
260 // OBSOLETE case H_DR_MDH :
261 // OBSOLETE case H_DR_MDL :
262 // OBSOLETE return CPU (h_dr[dr]);
263 // OBSOLETE }
264 // OBSOLETE return 0;
265 // OBSOLETE }
266 // OBSOLETE
267 // OBSOLETE void
268 // OBSOLETE fr30bf_h_dr_set_handler (SIM_CPU *current_cpu, UINT dr, SI newval)
269 // OBSOLETE {
270 // OBSOLETE switch (dr)
271 // OBSOLETE {
272 // OBSOLETE case H_DR_SSP :
273 // OBSOLETE if (! GET_H_SBIT ())
274 // OBSOLETE SET_H_GR (H_GR_SP, newval);
275 // OBSOLETE else
276 // OBSOLETE CPU (h_dr[H_DR_SSP]) = newval;
277 // OBSOLETE break;
278 // OBSOLETE case H_DR_USP :
279 // OBSOLETE if (GET_H_SBIT ())
280 // OBSOLETE SET_H_GR (H_GR_SP, newval);
281 // OBSOLETE else
282 // OBSOLETE CPU (h_dr[H_DR_USP]) = newval;
283 // OBSOLETE break;
284 // OBSOLETE case H_DR_TBR :
285 // OBSOLETE case H_DR_RP :
286 // OBSOLETE case H_DR_MDH :
287 // OBSOLETE case H_DR_MDL :
288 // OBSOLETE CPU (h_dr[dr]) = newval;
289 // OBSOLETE break;
290 // OBSOLETE }
291 // OBSOLETE }
292 // OBSOLETE \f
293 // OBSOLETE #if WITH_PROFILE_MODEL_P
294 // OBSOLETE
295 // OBSOLETE /* FIXME: Some of these should be inline or macros. Later. */
296 // OBSOLETE
297 // OBSOLETE /* Initialize cycle counting for an insn.
298 // OBSOLETE FIRST_P is non-zero if this is the first insn in a set of parallel
299 // OBSOLETE insns. */
300 // OBSOLETE
301 // OBSOLETE void
302 // OBSOLETE fr30bf_model_insn_before (SIM_CPU *cpu, int first_p)
303 // OBSOLETE {
304 // OBSOLETE MODEL_FR30_1_DATA *d = CPU_MODEL_DATA (cpu);
305 // OBSOLETE d->load_regs_pending = 0;
306 // OBSOLETE }
307 // OBSOLETE
308 // OBSOLETE /* Record the cycles computed for an insn.
309 // OBSOLETE LAST_P is non-zero if this is the last insn in a set of parallel insns,
310 // OBSOLETE and we update the total cycle count.
311 // OBSOLETE CYCLES is the cycle count of the insn. */
312 // OBSOLETE
313 // OBSOLETE void
314 // OBSOLETE fr30bf_model_insn_after (SIM_CPU *cpu, int last_p, int cycles)
315 // OBSOLETE {
316 // OBSOLETE PROFILE_DATA *p = CPU_PROFILE_DATA (cpu);
317 // OBSOLETE MODEL_FR30_1_DATA *d = CPU_MODEL_DATA (cpu);
318 // OBSOLETE
319 // OBSOLETE PROFILE_MODEL_TOTAL_CYCLES (p) += cycles;
320 // OBSOLETE PROFILE_MODEL_CUR_INSN_CYCLES (p) = cycles;
321 // OBSOLETE d->load_regs = d->load_regs_pending;
322 // OBSOLETE }
323 // OBSOLETE
324 // OBSOLETE static INLINE int
325 // OBSOLETE check_load_stall (SIM_CPU *cpu, int regno)
326 // OBSOLETE {
327 // OBSOLETE const MODEL_FR30_1_DATA *d = CPU_MODEL_DATA (cpu);
328 // OBSOLETE UINT load_regs = d->load_regs;
329 // OBSOLETE
330 // OBSOLETE if (regno != -1
331 // OBSOLETE && (load_regs & (1 << regno)) != 0)
332 // OBSOLETE {
333 // OBSOLETE PROFILE_DATA *p = CPU_PROFILE_DATA (cpu);
334 // OBSOLETE ++ PROFILE_MODEL_LOAD_STALL_CYCLES (p);
335 // OBSOLETE if (TRACE_INSN_P (cpu))
336 // OBSOLETE cgen_trace_printf (cpu, " ; Load stall.");
337 // OBSOLETE return 1;
338 // OBSOLETE }
339 // OBSOLETE else
340 // OBSOLETE return 0;
341 // OBSOLETE }
342 // OBSOLETE
343 // OBSOLETE int
344 // OBSOLETE fr30bf_model_fr30_1_u_exec (SIM_CPU *cpu, const IDESC *idesc,
345 // OBSOLETE int unit_num, int referenced,
346 // OBSOLETE INT in_Ri, INT in_Rj, INT out_Ri)
347 // OBSOLETE {
348 // OBSOLETE int cycles = idesc->timing->units[unit_num].done;
349 // OBSOLETE cycles += check_load_stall (cpu, in_Ri);
350 // OBSOLETE cycles += check_load_stall (cpu, in_Rj);
351 // OBSOLETE return cycles;
352 // OBSOLETE }
353 // OBSOLETE
354 // OBSOLETE int
355 // OBSOLETE fr30bf_model_fr30_1_u_cti (SIM_CPU *cpu, const IDESC *idesc,
356 // OBSOLETE int unit_num, int referenced,
357 // OBSOLETE INT in_Ri)
358 // OBSOLETE {
359 // OBSOLETE PROFILE_DATA *p = CPU_PROFILE_DATA (cpu);
360 // OBSOLETE /* (1 << 1): The pc is the 2nd element in inputs, outputs.
361 // OBSOLETE ??? can be cleaned up */
362 // OBSOLETE int taken_p = (referenced & (1 << 1)) != 0;
363 // OBSOLETE int cycles = idesc->timing->units[unit_num].done;
364 // OBSOLETE int delay_slot_p = CGEN_ATTR_VALUE (NULL, idesc->attrs, CGEN_INSN_DELAY_SLOT);
365 // OBSOLETE
366 // OBSOLETE cycles += check_load_stall (cpu, in_Ri);
367 // OBSOLETE if (taken_p)
368 // OBSOLETE {
369 // OBSOLETE /* ??? Handling cti's without delay slots this way will run afoul of
370 // OBSOLETE accurate system simulation. Later. */
371 // OBSOLETE if (! delay_slot_p)
372 // OBSOLETE {
373 // OBSOLETE ++cycles;
374 // OBSOLETE ++PROFILE_MODEL_CTI_STALL_CYCLES (p);
375 // OBSOLETE }
376 // OBSOLETE ++PROFILE_MODEL_TAKEN_COUNT (p);
377 // OBSOLETE }
378 // OBSOLETE else
379 // OBSOLETE ++PROFILE_MODEL_UNTAKEN_COUNT (p);
380 // OBSOLETE
381 // OBSOLETE return cycles;
382 // OBSOLETE }
383 // OBSOLETE
384 // OBSOLETE int
385 // OBSOLETE fr30bf_model_fr30_1_u_load (SIM_CPU *cpu, const IDESC *idesc,
386 // OBSOLETE int unit_num, int referenced,
387 // OBSOLETE INT in_Rj, INT out_Ri)
388 // OBSOLETE {
389 // OBSOLETE MODEL_FR30_1_DATA *d = CPU_MODEL_DATA (cpu);
390 // OBSOLETE int cycles = idesc->timing->units[unit_num].done;
391 // OBSOLETE d->load_regs_pending |= 1 << out_Ri;
392 // OBSOLETE cycles += check_load_stall (cpu, in_Rj);
393 // OBSOLETE return cycles;
394 // OBSOLETE }
395 // OBSOLETE
396 // OBSOLETE int
397 // OBSOLETE fr30bf_model_fr30_1_u_store (SIM_CPU *cpu, const IDESC *idesc,
398 // OBSOLETE int unit_num, int referenced,
399 // OBSOLETE INT in_Ri, INT in_Rj)
400 // OBSOLETE {
401 // OBSOLETE int cycles = idesc->timing->units[unit_num].done;
402 // OBSOLETE cycles += check_load_stall (cpu, in_Ri);
403 // OBSOLETE cycles += check_load_stall (cpu, in_Rj);
404 // OBSOLETE return cycles;
405 // OBSOLETE }
406 // OBSOLETE
407 // OBSOLETE int
408 // OBSOLETE fr30bf_model_fr30_1_u_ldm (SIM_CPU *cpu, const IDESC *idesc,
409 // OBSOLETE int unit_num, int referenced,
410 // OBSOLETE INT reglist)
411 // OBSOLETE {
412 // OBSOLETE return idesc->timing->units[unit_num].done;
413 // OBSOLETE }
414 // OBSOLETE
415 // OBSOLETE int
416 // OBSOLETE fr30bf_model_fr30_1_u_stm (SIM_CPU *cpu, const IDESC *idesc,
417 // OBSOLETE int unit_num, int referenced,
418 // OBSOLETE INT reglist)
419 // OBSOLETE {
420 // OBSOLETE return idesc->timing->units[unit_num].done;
421 // OBSOLETE }
422 // OBSOLETE
423 // OBSOLETE #endif /* WITH_PROFILE_MODEL_P */
This page took 0.053921 seconds and 4 git commands to generate.