28 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
29 |
* |
* |
30 |
* |
* |
31 |
* $Id: cpu_arm.h,v 1.53 2005/10/27 14:01:15 debug Exp $ |
* $Id: cpu_arm.h,v 1.57 2005/11/16 21:15:19 debug Exp $ |
32 |
*/ |
*/ |
33 |
|
|
34 |
#include "misc.h" |
#include "misc.h" |
92 |
}; |
}; |
93 |
|
|
94 |
|
|
95 |
|
#define ARM_F_N 8 /* Same as ARM_FLAG_*, but */ |
96 |
|
#define ARM_F_Z 4 /* for the 'flags' field instead */ |
97 |
|
#define ARM_F_C 2 /* of cpsr. */ |
98 |
|
#define ARM_F_V 1 |
99 |
|
|
100 |
#define ARM_FLAG_N 0x80000000 /* Negative flag */ |
#define ARM_FLAG_N 0x80000000 /* Negative flag */ |
101 |
#define ARM_FLAG_Z 0x40000000 /* Zero flag */ |
#define ARM_FLAG_Z 0x40000000 /* Zero flag */ |
102 |
#define ARM_FLAG_C 0x20000000 /* Carry flag */ |
#define ARM_FLAG_C 0x20000000 /* Carry flag */ |
139 |
|
|
140 |
#define ARM_MAX_VPH_TLB_ENTRIES 128 |
#define ARM_MAX_VPH_TLB_ENTRIES 128 |
141 |
struct arm_vpg_tlb_entry { |
struct arm_vpg_tlb_entry { |
142 |
int valid; |
unsigned char valid; |
143 |
int writeflag; |
unsigned char writeflag; |
|
int64_t timestamp; |
|
|
unsigned char *host_page; |
|
144 |
uint32_t vaddr_page; |
uint32_t vaddr_page; |
145 |
uint32_t paddr_page; |
uint32_t paddr_page; |
146 |
|
unsigned char *host_page; |
147 |
}; |
}; |
148 |
|
|
149 |
|
|
177 |
|
|
178 |
uint32_t tmp_pc; /* Used for load/stores */ |
uint32_t tmp_pc; /* Used for load/stores */ |
179 |
|
|
180 |
/* Flag/status registers: */ |
/* |
181 |
|
* Flag/status registers: |
182 |
|
* |
183 |
|
* NOTE: 'flags' just contains the 4 flag bits. When cpsr is read, |
184 |
|
* the flags should be copied from 'flags', and when cpsr is written |
185 |
|
* to, 'flags' should be updated as well. |
186 |
|
*/ |
187 |
|
size_t flags; |
188 |
uint32_t cpsr; |
uint32_t cpsr; |
189 |
uint32_t spsr_svc; |
uint32_t spsr_svc; |
190 |
uint32_t spsr_abt; |
uint32_t spsr_abt; |
225 |
struct arm_instr_call *cur_ic_page; |
struct arm_instr_call *cur_ic_page; |
226 |
struct arm_instr_call *next_ic; |
struct arm_instr_call *next_ic; |
227 |
|
|
228 |
|
void (*combination_check)(struct cpu *, |
229 |
|
struct arm_instr_call *, int low_addr); |
230 |
|
|
231 |
/* |
/* |
232 |
* Virtual -> physical -> host address translation: |
* Virtual -> physical -> host address translation: |
243 |
struct arm_tc_physpage *phys_page[ARM_N_VPH_ENTRIES]; |
struct arm_tc_physpage *phys_page[ARM_N_VPH_ENTRIES]; |
244 |
|
|
245 |
uint32_t phystranslation[ARM_N_VPH_ENTRIES/32]; |
uint32_t phystranslation[ARM_N_VPH_ENTRIES/32]; |
246 |
int16_t vaddr_to_tlbindex[ARM_N_VPH_ENTRIES]; |
uint8_t vaddr_to_tlbindex[ARM_N_VPH_ENTRIES]; |
247 |
|
|
248 |
/* ARM specific: */ |
/* ARM specific: */ |
249 |
unsigned char is_userpage[ARM_N_VPH_ENTRIES/8]; |
uint32_t is_userpage[ARM_N_VPH_ENTRIES/32]; |
250 |
}; |
}; |
251 |
|
|
252 |
|
|