* Contribute CGEN simulator build support code.
[binutils-gdb.git] / sim / i960 / i960.c
blob78fac37e6bceafef4890bd44341bc25623aa6819
1 /* i960 simulator support code
2 Copyright (C) 1998 Free Software Foundation, Inc.
3 Contributed by Cygnus Support.
5 This file is part of GDB, the GNU debugger.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2, or (at your option)
10 any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License along
18 with this program; if not, write to the Free Software Foundation, Inc.,
19 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
21 #define WANT_CPU
22 #define WANT_CPU_I960BASE
24 #include "sim-main.h"
25 #include "cgen-mem.h"
26 #include "cgen-ops.h"
28 /* The contents of BUF are in target byte order. */
30 int
31 i960base_fetch_register (SIM_CPU *current_cpu, int rn, unsigned char *buf,
32 int len)
34 if (rn < 32)
35 SETTWI (buf, a_i960_h_gr_get (current_cpu, rn));
36 else
37 switch (rn)
39 case PC_REGNUM :
40 SETTWI (buf, a_i960_h_pc_get (current_cpu));
41 break;
42 default :
43 return 0;
46 return -1; /*FIXME*/
50 /* The contents of BUF are in target byte order. */
52 int
53 i960base_store_register (SIM_CPU *current_cpu, int rn, unsigned char *buf,
54 int len)
56 if (rn < 32)
57 a_i960_h_gr_set (current_cpu, rn, GETTWI (buf));
58 else
59 switch (rn)
61 case PC_REGNUM :
62 a_i960_h_pc_set (current_cpu, GETTWI (buf));
63 break;
64 default :
65 return 0;
68 return -1; /*FIXME*/
71 /* Cover fns for mach independent register accesses. */
74 a_i960_h_gr_get (SIM_CPU *current_cpu, UINT regno)
76 switch (MACH_NUM (CPU_MACH (current_cpu)))
78 #ifdef HAVE_CPU_I960BASE
79 case MACH_I960_KA_SA :
80 case MACH_I960_CA :
81 return i960base_h_gr_get (current_cpu, regno);
82 #endif
83 default :
84 abort ();
88 void
89 a_i960_h_gr_set (SIM_CPU *current_cpu, UINT regno, SI newval)
91 switch (MACH_NUM (CPU_MACH (current_cpu)))
93 #ifdef HAVE_CPU_I960BASE
94 case MACH_I960_KA_SA :
95 case MACH_I960_CA :
96 i960base_h_gr_set (current_cpu, regno, newval);
97 break;
98 #endif
99 default :
100 abort ();
104 IADDR
105 a_i960_h_pc_get (SIM_CPU *current_cpu)
107 switch (MACH_NUM (CPU_MACH (current_cpu)))
109 #ifdef HAVE_CPU_I960BASE
110 case MACH_I960_KA_SA :
111 case MACH_I960_CA :
112 return i960base_h_pc_get (current_cpu);
113 #endif
114 default :
115 abort ();
119 void
120 a_i960_h_pc_set (SIM_CPU *current_cpu, IADDR newval)
122 switch (MACH_NUM (CPU_MACH (current_cpu)))
124 #ifdef HAVE_CPU_I960BASE
125 case MACH_I960_KA_SA :
126 case MACH_I960_CA :
127 i960base_h_pc_set (current_cpu, newval);
128 break;
129 #endif
130 default :
131 abort ();
135 #if WITH_PROFILE_MODEL_P
137 /* FIXME: Some of these should be inline or macros. Later. */
139 /* Initialize cycle counting for an insn.
140 FIRST_P is non-zero if this is the first insn in a set of parallel
141 insns. */
143 void
144 i960base_model_insn_before (SIM_CPU *cpu, int first_p)
148 /* Record the cycles computed for an insn.
149 LAST_P is non-zero if this is the last insn in a set of parallel insns,
150 and we update the total cycle count.
151 CYCLES is the cycle count of the insn. */
153 void
154 i960base_model_insn_after (SIM_CPU *cpu, int last_p, int cycles)
158 /* Initialize cycle counting for an insn.
159 FIRST_P is non-zero if this is the first insn in a set of parallel
160 insns. */
162 void
163 i960_model_init_insn_cycles (SIM_CPU *cpu, int first_p)
167 /* Record the cycles computed for an insn.
168 LAST_P is non-zero if this is the last insn in a set of parallel insns,
169 and we update the total cycle count. */
171 void
172 i960_model_update_insn_cycles (SIM_CPU *cpu, int last_p)
176 void
177 i960_model_record_cycles (SIM_CPU *cpu, unsigned long cycles)
181 void
182 i960base_model_mark_get_h_gr (SIM_CPU *cpu, ARGBUF *abuf)
186 void
187 i960base_model_mark_set_h_gr (SIM_CPU *cpu, ARGBUF *abuf)
191 #endif /* WITH_PROFILE_MODEL_P */
194 i960base_model_i960KA_u_exec (SIM_CPU *cpu, const IDESC *idesc,
195 int unit_num, int referenced)
197 return idesc->timing->units[unit_num].done;
201 i960base_model_i960CA_u_exec (SIM_CPU *cpu, const IDESC *idesc,
202 int unit_num, int referenced)
204 return idesc->timing->units[unit_num].done;