1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20: #ifndef CPU_DEFS_H
21: #define CPU_DEFS_H
22:
23: #ifndef NEED_CPU_H
24: #error cpu.h included from common code
25: #endif
26:
27: #include "config.h"
28: #include <setjmp.h>
29: #include <inttypes.h>
30: #include "osdep.h"
31:
32: #ifndef TARGET_LONG_BITS
33: #error TARGET_LONG_BITS must be defined before including this header
34: #endif
35:
36: #ifndef TARGET_PHYS_ADDR_BITS
37: #if TARGET_LONG_BITS >= HOST_LONG_BITS
38: #define TARGET_PHYS_ADDR_BITS TARGET_LONG_BITS
39: #else
40: #define TARGET_PHYS_ADDR_BITS HOST_LONG_BITS
41: #endif
42: #endif
43:
44: #define TARGET_LONG_SIZE (TARGET_LONG_BITS / 8)
45:
46:
47: #if TARGET_LONG_SIZE == 4
48: typedef int32_t target_long;
49: typedef uint32_t target_ulong;
50: #define TARGET_FMT_lx "%08x"
51: #define TARGET_FMT_ld "%d"
52: #define TARGET_FMT_lu "%u"
53: #elif TARGET_LONG_SIZE == 8
54: typedef int64_t target_long;
55: typedef uint64_t target_ulong;
56: #define TARGET_FMT_lx "%016" PRIx64
57: #define TARGET_FMT_ld "%" PRId64
58: #define TARGET_FMT_lu "%" PRIu64
59: #else
60: #error TARGET_LONG_SIZE undefined
61: #endif
62:
63:
64:
65:
66:
67:
68:
69: #if TARGET_PHYS_ADDR_BITS == 32
70: typedef uint32_t target_phys_addr_t;
71: #define TARGET_FMT_plx "%08x"
72: #elif TARGET_PHYS_ADDR_BITS == 64
73: typedef uint64_t target_phys_addr_t;
74: #define TARGET_FMT_plx "%016" PRIx64
75: #else
76: #error TARGET_PHYS_ADDR_BITS undefined
77: #endif
78:
79:
80: typedef unsigned long ram_addr_t;
81:
82: #define HOST_LONG_SIZE (HOST_LONG_BITS / 8)
83:
84: #define EXCP_INTERRUPT 0x10000
85: #define EXCP_HLT 0x10001
86: #define EXCP_DEBUG 0x10002
87: #define EXCP_HALTED 0x10003
88: #define MAX_BREAKPOINTS 32
89: #define MAX_WATCHPOINTS 32
90:
91: #define TB_JMP_CACHE_BITS 12
92: #define TB_JMP_CACHE_SIZE (1 << TB_JMP_CACHE_BITS)
93:
94:
95:
96:
97: #define TB_JMP_PAGE_BITS (TB_JMP_CACHE_BITS / 2)
98: #define TB_JMP_PAGE_SIZE (1 << TB_JMP_PAGE_BITS)
99: #define TB_JMP_ADDR_MASK (TB_JMP_PAGE_SIZE - 1)
100: #define TB_JMP_PAGE_MASK (TB_JMP_CACHE_SIZE - TB_JMP_PAGE_SIZE)
101:
102: #define CPU_TLB_BITS 8
103: #define CPU_TLB_SIZE (1 << CPU_TLB_BITS)
104:
105: typedef struct CPUTLBEntry {
106:
107:
108:
109:
110:
111:
112: target_ulong addr_read;
113: target_ulong addr_write;
114: target_ulong addr_code;
115:
116: target_phys_addr_t addend;
117: } CPUTLBEntry;
118:
119: #define CPU_COMMON \
120: struct TranslationBlock *current_tb; \
121: \
122:
123:
124: \
125: unsigned long mem_write_pc;
126: \
127: target_ulong mem_write_vaddr;
128: \
129: \
130: CPUTLBEntry tlb_table[NB_MMU_MODES][CPU_TLB_SIZE]; \
131: struct TranslationBlock *tb_jmp_cache[TB_JMP_CACHE_SIZE]; \
132: \
133: \
134: \
135: target_ulong breakpoints[MAX_BREAKPOINTS]; \
136: int nb_breakpoints; \
137: int singlestep_enabled; \
138: \
139: struct { \
140: target_ulong vaddr; \
141: target_phys_addr_t addend; \
142: } watchpoint[MAX_WATCHPOINTS]; \
143: int nb_watchpoints; \
144: int watchpoint_hit; \
145: \
146: void *next_cpu; \
147: int cpu_index; \
148: \
149: void *opaque; \
150: \
151: const char *cpu_model_str;
152:
153: #endif