1 /* Memory ops header for CGEN-based simlators.
3 This file is machine generated.
5 Copyright (C) 1996, 1997 Free Software Foundation, Inc.
7 This file is part of the GNU Binutils and/or GDB, the GNU debugger.
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License along
20 with this program; if not, write to the Free Software Foundation, Inc.,
21 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25 #ifndef CGEN_MEM_OPS_H
26 #define CGEN_MEM_OPS_H
28 #ifdef MEMOPS_DEFINE_INLINE
31 #define MEMOPS_INLINE extern inline
34 /* Only used in this file. */
35 typedef unsigned char *ptr
;
37 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
41 if (TARGET_BIG_ENDIAN
)
47 extern QI
GETTQI (ptr
);
50 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
54 if (TARGET_BIG_ENDIAN
)
55 return ((p
[0] << 8) | p
[1]);
57 return ((p
[1] << 8) | p
[0]);
60 extern HI
GETTHI (ptr
);
63 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
67 if (TARGET_BIG_ENDIAN
)
68 return ((p
[0] << 24) | (p
[1] << 16) | (p
[2] << 8) | p
[3]);
70 return ((p
[3] << 24) | (p
[2] << 16) | (p
[1] << 8) | p
[0]);
73 extern SI
GETTSI (ptr
);
76 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
80 if (TARGET_BIG_ENDIAN
)
81 return MAKEDI ((p
[0] << 24) | (p
[1] << 16) | (p
[2] << 8) | p
[3], (p
[4] << 24) | (p
[5] << 16) | (p
[6] << 8) | p
[7]);
83 return MAKEDI ((p
[7] << 24) | (p
[6] << 16) | (p
[5] << 8) | p
[4], (p
[3] << 24) | (p
[2] << 16) | (p
[1] << 8) | p
[0]);
86 extern DI
GETTDI (ptr
);
89 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
93 if (TARGET_BIG_ENDIAN
)
99 extern UQI
GETTUQI (ptr
);
102 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
106 if (TARGET_BIG_ENDIAN
)
107 return ((p
[0] << 8) | p
[1]);
109 return ((p
[1] << 8) | p
[0]);
112 extern UHI
GETTUHI (ptr
);
115 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
119 if (TARGET_BIG_ENDIAN
)
120 return ((p
[0] << 24) | (p
[1] << 16) | (p
[2] << 8) | p
[3]);
122 return ((p
[3] << 24) | (p
[2] << 16) | (p
[1] << 8) | p
[0]);
125 extern USI
GETTUSI (ptr
);
128 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
132 if (TARGET_BIG_ENDIAN
)
133 return MAKEDI ((p
[0] << 24) | (p
[1] << 16) | (p
[2] << 8) | p
[3], (p
[4] << 24) | (p
[5] << 16) | (p
[6] << 8) | p
[7]);
135 return MAKEDI ((p
[7] << 24) | (p
[6] << 16) | (p
[5] << 8) | p
[4], (p
[3] << 24) | (p
[2] << 16) | (p
[1] << 8) | p
[0]);
138 extern UDI
GETTUDI (ptr
);
141 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
143 SETTQI (ptr p
, QI val
)
145 if (TARGET_BIG_ENDIAN
)
146 do { p
[0] = val
; } while (0);
148 do { p
[0] = val
; } while (0);
151 extern void SETTQI (ptr
, QI
);
154 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
156 SETTHI (ptr p
, HI val
)
158 if (TARGET_BIG_ENDIAN
)
159 do { p
[0] = val
>> 8; p
[1] = val
; } while (0);
161 do { p
[1] = val
>> 8; p
[0] = val
; } while (0);
164 extern void SETTHI (ptr
, HI
);
167 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
169 SETTSI (ptr p
, SI val
)
171 if (TARGET_BIG_ENDIAN
)
172 do { p
[0] = val
>> 24; p
[1] = val
>> 16; p
[2] = val
>> 8; p
[3] = val
; } while (0);
174 do { p
[3] = val
>> 24; p
[2] = val
>> 16; p
[1] = val
>> 8; p
[0] = val
; } while (0);
177 extern void SETTSI (ptr
, SI
);
180 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
182 SETTDI (ptr p
, DI val
)
184 if (TARGET_BIG_ENDIAN
)
185 do { SI t
= GETHIDI (val
); p
[0] = t
>> 24; p
[1] = t
>> 16; p
[2] = t
>> 8; p
[3] = t
; t
= GETLODI (val
); p
[4] = t
>> 24; p
[5] = t
>> 16; p
[6] = t
>> 8; p
[7] = t
; } while (0);
187 do { SI t
= GETHIDI (val
); p
[7] = t
>> 24; p
[6] = t
>> 16; p
[5] = t
>> 8; p
[4] = t
; t
= GETLODI (val
); p
[3] = t
>> 24; p
[2] = t
>> 16; p
[1] = t
>> 8; p
[0] = t
; } while (0);
190 extern void SETTDI (ptr
, DI
);
193 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
195 SETTUQI (ptr p
, UQI val
)
197 if (TARGET_BIG_ENDIAN
)
198 do { p
[0] = val
; } while (0);
200 do { p
[0] = val
; } while (0);
203 extern void SETTUQI (ptr
, UQI
);
206 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
208 SETTUHI (ptr p
, UHI val
)
210 if (TARGET_BIG_ENDIAN
)
211 do { p
[0] = val
>> 8; p
[1] = val
; } while (0);
213 do { p
[1] = val
>> 8; p
[0] = val
; } while (0);
216 extern void SETTUHI (ptr
, UHI
);
219 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
221 SETTUSI (ptr p
, USI val
)
223 if (TARGET_BIG_ENDIAN
)
224 do { p
[0] = val
>> 24; p
[1] = val
>> 16; p
[2] = val
>> 8; p
[3] = val
; } while (0);
226 do { p
[3] = val
>> 24; p
[2] = val
>> 16; p
[1] = val
>> 8; p
[0] = val
; } while (0);
229 extern void SETTUSI (ptr
, USI
);
232 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
234 SETTUDI (ptr p
, UDI val
)
236 if (TARGET_BIG_ENDIAN
)
237 do { SI t
= GETHIDI (val
); p
[0] = t
>> 24; p
[1] = t
>> 16; p
[2] = t
>> 8; p
[3] = t
; t
= GETLODI (val
); p
[4] = t
>> 24; p
[5] = t
>> 16; p
[6] = t
>> 8; p
[7] = t
; } while (0);
239 do { SI t
= GETHIDI (val
); p
[7] = t
>> 24; p
[6] = t
>> 16; p
[5] = t
>> 8; p
[4] = t
; t
= GETLODI (val
); p
[3] = t
>> 24; p
[2] = t
>> 16; p
[1] = t
>> 8; p
[0] = t
; } while (0);
242 extern void SETTUDI (ptr
, UDI
);
246 /* FIXME: Need to merge with sim-core. */
247 /* FIXME: Don't perform >= 4, text section checks if OEA. */
248 #ifndef MEM_CHECK_READ
249 #define MEM_CHECK_READ(addr, type) \
250 ((addr) >= 4 /*&& (addr) < STATE_MEM_SIZE (current_state)*/)
252 #ifndef MEM_CHECK_WRITE
253 #define MEM_CHECK_WRITE(addr, type) \
254 ((addr) >= 4 /*&& (addr) < STATE_MEM_SIZE (current_state)*/ \
255 && ((addr) >= STATE_TEXT_END (current_state) \
256 || (addr) < STATE_TEXT_START (current_state)))
258 #ifndef MEM_CHECK_ALIGNMENT
259 #define MEM_CHECK_ALIGNMENT(addr, type) \
260 (((addr) & (sizeof (type) - 1)) == 0)
263 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
265 GETMEMQI (SIM_CPU
*cpu
, ADDR a
)
267 if (! MEM_CHECK_READ (a
, QI
))
268 { engine_signal (cpu
, SIM_SIGACCESS
); }
269 if (! MEM_CHECK_ALIGNMENT (a
, QI
))
270 { engine_signal (cpu
, SIM_SIGALIGN
); }
271 PROFILE_COUNT_READ (cpu
, a
, MODE_QI
);
272 return sim_core_read_aligned_1 (cpu
, NULL_CIA
, sim_core_read_map
, a
);
275 extern QI
GETMEMQI (SIM_CPU
*, ADDR
);
278 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
280 GETMEMHI (SIM_CPU
*cpu
, ADDR a
)
282 if (! MEM_CHECK_READ (a
, HI
))
283 { engine_signal (cpu
, SIM_SIGACCESS
); }
284 if (! MEM_CHECK_ALIGNMENT (a
, HI
))
285 { engine_signal (cpu
, SIM_SIGALIGN
); }
286 PROFILE_COUNT_READ (cpu
, a
, MODE_HI
);
287 return sim_core_read_aligned_2 (cpu
, NULL_CIA
, sim_core_read_map
, a
);
290 extern HI
GETMEMHI (SIM_CPU
*, ADDR
);
293 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
295 GETMEMSI (SIM_CPU
*cpu
, ADDR a
)
297 if (! MEM_CHECK_READ (a
, SI
))
298 { engine_signal (cpu
, SIM_SIGACCESS
); }
299 if (! MEM_CHECK_ALIGNMENT (a
, SI
))
300 { engine_signal (cpu
, SIM_SIGALIGN
); }
301 PROFILE_COUNT_READ (cpu
, a
, MODE_SI
);
302 return sim_core_read_aligned_4 (cpu
, NULL_CIA
, sim_core_read_map
, a
);
305 extern SI
GETMEMSI (SIM_CPU
*, ADDR
);
308 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
310 GETMEMDI (SIM_CPU
*cpu
, ADDR a
)
312 if (! MEM_CHECK_READ (a
, DI
))
313 { engine_signal (cpu
, SIM_SIGACCESS
); }
314 if (! MEM_CHECK_ALIGNMENT (a
, DI
))
315 { engine_signal (cpu
, SIM_SIGALIGN
); }
316 PROFILE_COUNT_READ (cpu
, a
, MODE_DI
);
317 return sim_core_read_aligned_8 (cpu
, NULL_CIA
, sim_core_read_map
, a
);
320 extern DI
GETMEMDI (SIM_CPU
*, ADDR
);
323 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
325 GETMEMUQI (SIM_CPU
*cpu
, ADDR a
)
327 if (! MEM_CHECK_READ (a
, UQI
))
328 { engine_signal (cpu
, SIM_SIGACCESS
); }
329 if (! MEM_CHECK_ALIGNMENT (a
, UQI
))
330 { engine_signal (cpu
, SIM_SIGALIGN
); }
331 PROFILE_COUNT_READ (cpu
, a
, MODE_UQI
);
332 return sim_core_read_aligned_1 (cpu
, NULL_CIA
, sim_core_read_map
, a
);
335 extern UQI
GETMEMUQI (SIM_CPU
*, ADDR
);
338 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
340 GETMEMUHI (SIM_CPU
*cpu
, ADDR a
)
342 if (! MEM_CHECK_READ (a
, UHI
))
343 { engine_signal (cpu
, SIM_SIGACCESS
); }
344 if (! MEM_CHECK_ALIGNMENT (a
, UHI
))
345 { engine_signal (cpu
, SIM_SIGALIGN
); }
346 PROFILE_COUNT_READ (cpu
, a
, MODE_UHI
);
347 return sim_core_read_aligned_2 (cpu
, NULL_CIA
, sim_core_read_map
, a
);
350 extern UHI
GETMEMUHI (SIM_CPU
*, ADDR
);
353 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
355 GETMEMUSI (SIM_CPU
*cpu
, ADDR a
)
357 if (! MEM_CHECK_READ (a
, USI
))
358 { engine_signal (cpu
, SIM_SIGACCESS
); }
359 if (! MEM_CHECK_ALIGNMENT (a
, USI
))
360 { engine_signal (cpu
, SIM_SIGALIGN
); }
361 PROFILE_COUNT_READ (cpu
, a
, MODE_USI
);
362 return sim_core_read_aligned_4 (cpu
, NULL_CIA
, sim_core_read_map
, a
);
365 extern USI
GETMEMUSI (SIM_CPU
*, ADDR
);
368 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
370 GETMEMUDI (SIM_CPU
*cpu
, ADDR a
)
372 if (! MEM_CHECK_READ (a
, UDI
))
373 { engine_signal (cpu
, SIM_SIGACCESS
); }
374 if (! MEM_CHECK_ALIGNMENT (a
, UDI
))
375 { engine_signal (cpu
, SIM_SIGALIGN
); }
376 PROFILE_COUNT_READ (cpu
, a
, MODE_UDI
);
377 return sim_core_read_aligned_8 (cpu
, NULL_CIA
, sim_core_read_map
, a
);
380 extern UDI
GETMEMUDI (SIM_CPU
*, ADDR
);
383 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
385 SETMEMQI (SIM_CPU
*cpu
, ADDR a
, QI val
)
387 if (! MEM_CHECK_WRITE (a
, QI
))
388 { engine_signal (cpu
, SIM_SIGACCESS
); return; }
389 if (! MEM_CHECK_ALIGNMENT (a
, QI
))
390 { engine_signal (cpu
, SIM_SIGALIGN
); return; }
391 PROFILE_COUNT_WRITE (cpu
, a
, MODE_QI
);
392 sim_core_write_aligned_1 (cpu
, NULL_CIA
, sim_core_read_map
, a
, val
);
395 extern void SETMEMQI (SIM_CPU
*, ADDR
, QI
);
398 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
400 SETMEMHI (SIM_CPU
*cpu
, ADDR a
, HI val
)
402 if (! MEM_CHECK_WRITE (a
, HI
))
403 { engine_signal (cpu
, SIM_SIGACCESS
); return; }
404 if (! MEM_CHECK_ALIGNMENT (a
, HI
))
405 { engine_signal (cpu
, SIM_SIGALIGN
); return; }
406 PROFILE_COUNT_WRITE (cpu
, a
, MODE_HI
);
407 sim_core_write_aligned_2 (cpu
, NULL_CIA
, sim_core_read_map
, a
, val
);
410 extern void SETMEMHI (SIM_CPU
*, ADDR
, HI
);
413 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
415 SETMEMSI (SIM_CPU
*cpu
, ADDR a
, SI val
)
417 if (! MEM_CHECK_WRITE (a
, SI
))
418 { engine_signal (cpu
, SIM_SIGACCESS
); return; }
419 if (! MEM_CHECK_ALIGNMENT (a
, SI
))
420 { engine_signal (cpu
, SIM_SIGALIGN
); return; }
421 PROFILE_COUNT_WRITE (cpu
, a
, MODE_SI
);
422 sim_core_write_aligned_4 (cpu
, NULL_CIA
, sim_core_read_map
, a
, val
);
425 extern void SETMEMSI (SIM_CPU
*, ADDR
, SI
);
428 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
430 SETMEMDI (SIM_CPU
*cpu
, ADDR a
, DI val
)
432 if (! MEM_CHECK_WRITE (a
, DI
))
433 { engine_signal (cpu
, SIM_SIGACCESS
); return; }
434 if (! MEM_CHECK_ALIGNMENT (a
, DI
))
435 { engine_signal (cpu
, SIM_SIGALIGN
); return; }
436 PROFILE_COUNT_WRITE (cpu
, a
, MODE_DI
);
437 sim_core_write_aligned_8 (cpu
, NULL_CIA
, sim_core_read_map
, a
, val
);
440 extern void SETMEMDI (SIM_CPU
*, ADDR
, DI
);
443 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
445 SETMEMUQI (SIM_CPU
*cpu
, ADDR a
, UQI val
)
447 if (! MEM_CHECK_WRITE (a
, UQI
))
448 { engine_signal (cpu
, SIM_SIGACCESS
); return; }
449 if (! MEM_CHECK_ALIGNMENT (a
, UQI
))
450 { engine_signal (cpu
, SIM_SIGALIGN
); return; }
451 PROFILE_COUNT_WRITE (cpu
, a
, MODE_UQI
);
452 sim_core_write_aligned_1 (cpu
, NULL_CIA
, sim_core_read_map
, a
, val
);
455 extern void SETMEMUQI (SIM_CPU
*, ADDR
, UQI
);
458 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
460 SETMEMUHI (SIM_CPU
*cpu
, ADDR a
, UHI val
)
462 if (! MEM_CHECK_WRITE (a
, UHI
))
463 { engine_signal (cpu
, SIM_SIGACCESS
); return; }
464 if (! MEM_CHECK_ALIGNMENT (a
, UHI
))
465 { engine_signal (cpu
, SIM_SIGALIGN
); return; }
466 PROFILE_COUNT_WRITE (cpu
, a
, MODE_UHI
);
467 sim_core_write_aligned_2 (cpu
, NULL_CIA
, sim_core_read_map
, a
, val
);
470 extern void SETMEMUHI (SIM_CPU
*, ADDR
, UHI
);
473 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
475 SETMEMUSI (SIM_CPU
*cpu
, ADDR a
, USI val
)
477 if (! MEM_CHECK_WRITE (a
, USI
))
478 { engine_signal (cpu
, SIM_SIGACCESS
); return; }
479 if (! MEM_CHECK_ALIGNMENT (a
, USI
))
480 { engine_signal (cpu
, SIM_SIGALIGN
); return; }
481 PROFILE_COUNT_WRITE (cpu
, a
, MODE_USI
);
482 sim_core_write_aligned_4 (cpu
, NULL_CIA
, sim_core_read_map
, a
, val
);
485 extern void SETMEMUSI (SIM_CPU
*, ADDR
, USI
);
488 #if defined (__GNUC__) || defined (MEMOPS_DEFINE_INLINE)
490 SETMEMUDI (SIM_CPU
*cpu
, ADDR a
, UDI val
)
492 if (! MEM_CHECK_WRITE (a
, UDI
))
493 { engine_signal (cpu
, SIM_SIGACCESS
); return; }
494 if (! MEM_CHECK_ALIGNMENT (a
, UDI
))
495 { engine_signal (cpu
, SIM_SIGALIGN
); return; }
496 PROFILE_COUNT_WRITE (cpu
, a
, MODE_UDI
);
497 sim_core_write_aligned_8 (cpu
, NULL_CIA
, sim_core_read_map
, a
, val
);
500 extern void SETMEMUDI (SIM_CPU
*, ADDR
, UDI
);
503 #endif /* MEM_OPS_H */
This page took 0.039347 seconds and 4 git commands to generate.