Thu Aug 1 17:05:24 1996 Martin M. Hunt <hunt@pizza.cygnus.com>
[deliverable/binutils-gdb.git] / sim / d10v / d10v_sim.h
CommitLineData
2934d1c9
MH
1#include <stdio.h>
2#include <ctype.h>
3#include "ansidecl.h"
4#include "opcode/d10v.h"
5
6/* FIXME: host defines */
7typedef unsigned char uint8;
8typedef unsigned short uint16;
9typedef unsigned int uint32;
10typedef signed char int8;
11typedef signed short int16;
12typedef signed int int32;
13typedef signed long long int64;
14
15/* FIXME: D10V defines */
16typedef uint16 reg_t;
17
18struct simops
19{
20 long opcode;
21 long mask;
22 int format;
23 int cycles;
24 int unit;
25 int exec_type;
26 void (*func)();
27 int numops;
28 int operands[9];
29};
30
31struct _state
32{
33 reg_t regs[16]; /* general-purpose registers */
34 reg_t cregs[15]; /* control registers */
35 int64 a[2]; /* accumulators */
36 uint8 SM;
37 uint8 EA;
38 uint8 DB;
39 uint8 IE;
40 uint8 RP;
41 uint8 MD;
42 uint8 FX;
43 uint8 ST;
44 uint8 F0;
45 uint8 F1;
46 uint8 C;
47 uint8 exe;
48 uint8 *imem;
49 uint8 *dmem;
50} State;
51
52extern uint16 OP[4];
53extern struct simops Simops[];
54
55#define PC (State.cregs[2])
56#define PSW (State.cregs[0])
57#define BPSW (State.cregs[1])
58#define BPC (State.cregs[3])
59#define RPT_C (State.cregs[7])
60#define RPT_S (State.cregs[8])
61#define RPT_E (State.cregs[9])
62#define MOD_S (State.cregs[10])
63#define MOD_E (State.cregs[11])
64#define IBA (State.cregs[14])
65
66#define SEXT3(x) ((((x)&0x7)^(~3))+4)
67
68/* sign-extend a 4-bit number */
69#define SEXT4(x) ((((x)&0xf)^(~7))+8)
70
71/* sign-extend an 8-bit number */
72#define SEXT8(x) ((((x)&0xff)^(~0x7f))+0x80)
73
74/* sign-extend a 16-bit number */
75#define SEXT16(x) ((((x)&0xffff)^(~0x7fff))+0x8000)
76
77#define BIT40 0x8000000000LL
78#define BIT44 0x80000000000LL
79#define MAX32 0x7fffffffLL
80#define MIN32 0xff80000000LL
81#define MASK32 0xffffffffLL
82#define MASK40 0xffffffffffLL
83#define MASK44 0xfffffffffffLL
84
85
86#define RB(x) (*((uint8 *)((x)+State.imem)))
87
88#ifdef WORDS_BIGENDIAN
89
90#define RW(x) (*((uint16 *)((x)+State.imem)))
91#define RLW(x) (*((uint32 *)((x)+State.imem)))
92#define SW(addr,data) RW(addr)=data
93
94#else
95
96uint32 get_longword_swap PARAMS ((uint16 x));
97uint16 get_word_swap PARAMS ((uint16 x));
98void write_word_swap PARAMS ((uint16 addr, uint16 data));
99
100#define SW(addr,data) write_word_swap(addr,data)
101#define RW(x) get_word_swap(x)
102#define RLW(x) get_longword_swap(x)
103
104#endif /* not WORDS_BIGENDIAN */
This page took 0.025877 seconds and 4 git commands to generate.