No empty .Rs/.Re
[netbsd-mini2440.git] / gnu / dist / gdb6 / sim / m32c / cpu.h
blob3daa733d01587ca33c71987ab00268b61b6ab4be
1 /* cpu.h --- declarations for the M32C core.
3 Copyright (C) 2005 Free Software Foundation, Inc.
4 Contributed by Red Hat, Inc.
6 This file is part of the GNU simulators.
8 The GNU simulators are free software; you can redistribute them and/or
9 modify them under the terms of the GNU General Public License as
10 published by the Free Software Foundation; either version 2 of the
11 License, or (at your option) any later version.
13 The GNU simulators are distributed in the hope that they will be
14 useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with the GNU simulators; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21 02110-1301, USA */
24 extern int verbose;
25 extern int trace;
26 extern int enable_counting;
28 typedef unsigned char QI;
29 typedef unsigned short HI;
30 typedef unsigned long SI;
31 typedef unsigned long long DI;
33 #define CPU_R8C 0x11
34 #define CPU_M16C 0x12
35 #define CPU_M32CM 0x23
36 #define CPU_M32C 0x24
37 extern int m32c_cpu;
38 void m32c_set_cpu (int cpu);
40 #define A16 (m32c_cpu & 0x10)
41 #define A24 (m32c_cpu & 0x20)
43 typedef struct
45 HI r_r0;
46 HI r_r2;
47 HI r_r1;
48 HI r_r3;
49 SI r_a0;
50 SI r_a1;
51 SI r_sb;
52 SI r_fb;
53 } reg_bank_type;
55 typedef struct
57 reg_bank_type r[2];
58 QI r_intbh;
59 HI r_intbl;
60 SI r_usp;
61 SI r_isp;
62 SI r_pc;
63 HI r_flags;
64 } regs_type;
66 extern regs_type regs;
67 extern int addr_mask;
68 extern int membus_mask;
70 #define FLAGBIT_C 0x0001
71 #define FLAGBIT_D 0x0002
72 #define FLAGBIT_Z 0x0004
73 #define FLAGBIT_S 0x0008
74 #define FLAGBIT_B 0x0010
75 #define FLAGBIT_O 0x0020
76 #define FLAGBIT_I 0x0040
77 #define FLAGBIT_U 0x0080
79 #define REG_BANK (regs.r_flags & FLAG_B ? 1 : 0)
81 typedef enum
83 mem,
84 r0, r0h, r0l,
85 r1, r1h, r1l,
86 r2, r2r0,
87 r3, r3r1,
88 r3r1r2r0,
89 r3r2r1r0,
90 a0,
91 a1, a1a0,
92 sb, fb,
93 intb, intbl, intbh,
94 sp, usp, isp, pc, flags,
95 num_regs
96 } reg_id;
98 extern char *reg_names[];
99 extern int reg_bytes[];
101 extern unsigned int b2mask[];
102 extern unsigned int b2signbit[];
103 extern int b2maxsigned[];
104 extern int b2minsigned[];
106 void init_regs (void);
107 void stack_heap_stats (void);
108 void set_pointer_width (int bytes);
109 unsigned int get_reg (reg_id id);
110 DI get_reg_ll (reg_id id);
111 void put_reg (reg_id id, unsigned int value);
112 void put_reg_ll (reg_id id, DI value);
114 void set_flags (int mask, int newbits);
115 void set_oszc (int value, int bytes, int c);
116 void set_szc (int value, int bytes, int c);
117 void set_osz (int value, int bytes);
118 void set_sz (int value, int bytes);
119 void set_zc (int z, int c);
120 void set_c (int c);
122 const char *bits (int v, int b);
124 typedef struct
126 QI bytes;
127 QI mem;
128 HI mask;
129 union
131 unsigned int addr;
132 reg_id reg;
133 } u;
134 } srcdest;
136 void decode_indirect (int src_indirect, int dest_indirect);
137 void decode_index (int src_addend, int dest_addend);
139 /* r8c */
140 srcdest decode_srcdest4 (int destcode, int bw);
141 srcdest decode_dest3 (int destcode, int bw);
142 srcdest decode_src2 (int srccode, int bw, int d);
143 srcdest decode_dest1 (int destcode, int bw);
144 srcdest decode_jumpdest (int destcode, int w);
145 srcdest decode_cr (int crcode);
146 srcdest decode_cr_b (int crcode, int bank);
147 #define CR_B_DCT0 0
148 #define CR_B_INTB 1
149 #define CR_B_DMA0 2
151 /* m32c */
152 srcdest decode_dest23 (int ddd, int dd, int bytes);
153 srcdest decode_src23 (int sss, int ss, int bytes);
154 srcdest decode_src3 (int sss, int bytes);
155 srcdest decode_dest2 (int dd, int bytes);
157 srcdest widen_sd (srcdest sd);
158 srcdest reg_sd (reg_id reg);
160 /* Mask has the one appropriate bit set. */
161 srcdest decode_bit (int destcode);
162 srcdest decode_bit11 (int op0);
163 int get_bit (srcdest sd);
164 void put_bit (srcdest sd, int val);
165 int get_bit2 (srcdest sd, int bit);
166 void put_bit2 (srcdest sd, int bit, int val);
168 int get_src (srcdest sd);
169 void put_dest (srcdest sd, int value);
171 int condition_true (int cond_id);
173 #define FLAG(f) (regs.r_flags & f ? 1 : 0)
174 #define FLAG_C FLAG(FLAGBIT_C)
175 #define FLAG_D FLAG(FLAGBIT_D)
176 #define FLAG_Z FLAG(FLAGBIT_Z)
177 #define FLAG_S FLAG(FLAGBIT_S)
178 #define FLAG_B FLAG(FLAGBIT_B)
179 #define FLAG_O FLAG(FLAGBIT_O)
180 #define FLAG_I FLAG(FLAGBIT_I)
181 #define FLAG_U FLAG(FLAGBIT_U)
183 /* Instruction step return codes.
184 Suppose one of the decode_* functions below returns a value R:
185 - If M32C_STEPPED (R), then the single-step completed normally.
186 - If M32C_HIT_BREAK (R), then the program hit a breakpoint.
187 - If M32C_EXITED (R), then the program has done an 'exit' system
188 call, and the exit code is M32C_EXIT_STATUS (R).
189 - If M32C_STOPPED (R), then a signal (number M32C_STOP_SIG (R)) was
190 generated.
192 For building step return codes:
193 - M32C_MAKE_STEPPED is the return code for finishing a normal step.
194 - M32C_MAKE_HIT_BREAK is the return code for hitting a breakpoint.
195 - M32C_MAKE_EXITED (C) is the return code for exiting with status C.
196 - M32C_MAKE_STOPPED (S) is the return code for stopping on signal S. */
197 #define M32C_MAKE_STEPPED() (0)
198 #define M32C_MAKE_HIT_BREAK() (1)
199 #define M32C_MAKE_EXITED(c) (((int) (c) << 8) + 2)
200 #define M32C_MAKE_STOPPED(s) (((int) (s) << 8) + 3)
202 #define M32C_STEPPED(r) ((r) == M32C_MAKE_STEPPED ())
203 #define M32C_HIT_BREAK(r) ((r) == M32C_MAKE_HIT_BREAK ())
204 #define M32C_EXITED(r) (((r) & 0xff) == 2)
205 #define M32C_EXIT_STATUS(r) ((r) >> 8)
206 #define M32C_STOPPED(r) (((r) & 0xff) == 3)
207 #define M32C_STOP_SIG(r) ((r) >> 8)
209 /* The step result for the current step. Global to allow
210 communication between the stepping function and the system
211 calls. */
212 extern int step_result;
214 /* Used to detect heap/stack collisions */
215 extern unsigned int heaptop;
216 extern unsigned int heapbottom;
218 /* Points to one of the below functions, set by m32c_load(). */
219 extern int (*decode_opcode) ();
221 extern int decode_r8c ();
222 extern int decode_m32c ();
224 extern void trace_register_changes ();