| 217 | | const char *cpu_model_str; \ |
|---|
| 218 | | /* Codegenerator context */ \ |
|---|
| 219 | | struct TCGContext *tcg_context; |
|---|
| 220 | | #else |
|---|
| 221 | | |
|---|
| 222 | | #define CPU_COMMON \ |
|---|
| 223 | | struct TranslationBlock *current_tb; /* currently executing TB */ \ |
|---|
| 224 | | /* soft mmu support */ \ |
|---|
| 225 | | /* in order to avoid passing too many arguments to the MMIO \ |
|---|
| 226 | | helpers, we store some rarely used information in the CPU \ |
|---|
| 227 | | context) */ \ |
|---|
| 228 | | unsigned long mem_io_pc; /* host pc at which the memory was \ |
|---|
| 229 | | accessed */ \ |
|---|
| 230 | | target_ulong mem_io_vaddr; /* target virtual addr at which the \ |
|---|
| 231 | | memory was accessed */ \ |
|---|
| 232 | | uint32_t halted; /* Nonzero if the CPU is in suspend state */ \ |
|---|
| 233 | | uint32_t interrupt_request; \ |
|---|
| 234 | | /* The meaning of the MMU modes is defined in the target code. */ \ |
|---|
| 235 | | CPUTLBEntry tlb_table[NB_MMU_MODES][CPU_TLB_SIZE]; \ |
|---|
| 236 | | target_phys_addr_t iotlb[NB_MMU_MODES][CPU_TLB_SIZE]; \ |
|---|
| 237 | | struct TranslationBlock *tb_jmp_cache[TB_JMP_CACHE_SIZE]; \ |
|---|
| 238 | | /* buffer for temporaries in the code generator */ \ |
|---|
| 239 | | long temp_buf[CPU_TEMP_BUF_NLONGS]; \ |
|---|
| 240 | | \ |
|---|
| 241 | | int64_t icount_extra; /* Instructions until next timer event. */ \ |
|---|
| 242 | | /* Number of cycles left, with interrupt flag in high bit. \ |
|---|
| 243 | | This allows a single read-compare-cbranch-write sequence to test \ |
|---|
| 244 | | for both decrementer underflow and exceptions. */ \ |
|---|
| 245 | | union { \ |
|---|
| 246 | | uint32_t u32; \ |
|---|
| 247 | | icount_decr_u16 u16; \ |
|---|
| 248 | | } icount_decr; \ |
|---|
| 249 | | uint32_t can_do_io; /* nonzero if memory mapped IO is safe. */ \ |
|---|
| 250 | | \ |
|---|
| 251 | | /* from this point: preserved by CPU reset */ \ |
|---|
| 252 | | /* ice debug support */ \ |
|---|
| 253 | | target_ulong breakpoints[MAX_BREAKPOINTS]; \ |
|---|
| 254 | | int nb_breakpoints; \ |
|---|
| 255 | | int singlestep_enabled; \ |
|---|
| 256 | | \ |
|---|
| 257 | | struct { \ |
|---|
| 258 | | target_ulong vaddr; \ |
|---|
| 259 | | int type; /* PAGE_READ/PAGE_WRITE */ \ |
|---|
| 260 | | } watchpoint[MAX_WATCHPOINTS]; \ |
|---|
| 261 | | int nb_watchpoints; \ |
|---|
| 262 | | int watchpoint_hit; \ |
|---|
| 263 | | \ |
|---|
| 264 | | /* Core interrupt code */ \ |
|---|
| 265 | | jmp_buf jmp_env; \ |
|---|
| 266 | | int exception_index; \ |
|---|
| 267 | | \ |
|---|
| 268 | | int user_mode_only; \ |
|---|
| 269 | | \ |
|---|
| 270 | | void *next_cpu; /* next CPU sharing TB cache */ \ |
|---|
| 271 | | int cpu_index; /* CPU index (informative) */ \ |
|---|
| 272 | | int running; /* Nonzero if cpu is currently running(usermode). */ \ |
|---|
| 273 | | /* user data */ \ |
|---|
| 274 | | void *opaque; \ |
|---|
| 275 | | \ |
|---|