Revision b5dc7732 target-mips/cpu.h
b/target-mips/cpu.h | ||
---|---|---|
134 | 134 |
#define MIPS_TC_MAX 5 |
135 | 135 |
#define MIPS_DSP_ACC 4 |
136 | 136 |
|
137 |
typedef struct TCState TCState; |
|
138 |
struct TCState { |
|
139 |
target_ulong gpr[32]; |
|
140 |
target_ulong PC; |
|
141 |
target_ulong HI[MIPS_DSP_ACC]; |
|
142 |
target_ulong LO[MIPS_DSP_ACC]; |
|
143 |
target_ulong ACX[MIPS_DSP_ACC]; |
|
144 |
target_ulong DSPControl; |
|
145 |
int32_t CP0_TCStatus; |
|
146 |
#define CP0TCSt_TCU3 31 |
|
147 |
#define CP0TCSt_TCU2 30 |
|
148 |
#define CP0TCSt_TCU1 29 |
|
149 |
#define CP0TCSt_TCU0 28 |
|
150 |
#define CP0TCSt_TMX 27 |
|
151 |
#define CP0TCSt_RNST 23 |
|
152 |
#define CP0TCSt_TDS 21 |
|
153 |
#define CP0TCSt_DT 20 |
|
154 |
#define CP0TCSt_DA 15 |
|
155 |
#define CP0TCSt_A 13 |
|
156 |
#define CP0TCSt_TKSU 11 |
|
157 |
#define CP0TCSt_IXMT 10 |
|
158 |
#define CP0TCSt_TASID 0 |
|
159 |
int32_t CP0_TCBind; |
|
160 |
#define CP0TCBd_CurTC 21 |
|
161 |
#define CP0TCBd_TBE 17 |
|
162 |
#define CP0TCBd_CurVPE 0 |
|
163 |
target_ulong CP0_TCHalt; |
|
164 |
target_ulong CP0_TCContext; |
|
165 |
target_ulong CP0_TCSchedule; |
|
166 |
target_ulong CP0_TCScheFBack; |
|
167 |
int32_t CP0_Debug_tcstatus; |
|
168 |
}; |
|
169 |
|
|
137 | 170 |
typedef struct CPUMIPSState CPUMIPSState; |
138 | 171 |
struct CPUMIPSState { |
139 |
/* General integer registers */ |
|
140 |
target_ulong gpr[MIPS_SHADOW_SET_MAX][32]; |
|
141 |
/* Special registers */ |
|
142 |
target_ulong PC[MIPS_TC_MAX]; |
|
172 |
TCState active_tc; |
|
173 |
|
|
143 | 174 |
/* temporary hack for FP globals */ |
144 | 175 |
#ifndef USE_HOST_FLOAT_REGS |
145 | 176 |
fpr_t ft0; |
146 | 177 |
fpr_t ft1; |
147 | 178 |
fpr_t ft2; |
148 | 179 |
#endif |
149 |
target_ulong HI[MIPS_TC_MAX][MIPS_DSP_ACC]; |
|
150 |
target_ulong LO[MIPS_TC_MAX][MIPS_DSP_ACC]; |
|
151 |
target_ulong ACX[MIPS_TC_MAX][MIPS_DSP_ACC]; |
|
152 |
target_ulong DSPControl[MIPS_TC_MAX]; |
|
153 |
|
|
154 | 180 |
CPUMIPSMVPContext *mvp; |
155 | 181 |
CPUMIPSTLBContext *tlb; |
156 | 182 |
CPUMIPSFPUContext *fpu; |
157 | 183 |
uint32_t current_tc; |
158 |
target_ulong *current_tc_gprs; |
|
159 |
target_ulong *current_tc_hi; |
|
160 | 184 |
|
161 | 185 |
uint32_t SEGBITS; |
162 | 186 |
target_ulong SEGMask; |
... | ... | |
206 | 230 |
#define CP0VPEOpt_DWX1 1 |
207 | 231 |
#define CP0VPEOpt_DWX0 0 |
208 | 232 |
target_ulong CP0_EntryLo0; |
209 |
int32_t CP0_TCStatus[MIPS_TC_MAX]; |
|
210 |
#define CP0TCSt_TCU3 31 |
|
211 |
#define CP0TCSt_TCU2 30 |
|
212 |
#define CP0TCSt_TCU1 29 |
|
213 |
#define CP0TCSt_TCU0 28 |
|
214 |
#define CP0TCSt_TMX 27 |
|
215 |
#define CP0TCSt_RNST 23 |
|
216 |
#define CP0TCSt_TDS 21 |
|
217 |
#define CP0TCSt_DT 20 |
|
218 |
#define CP0TCSt_DA 15 |
|
219 |
#define CP0TCSt_A 13 |
|
220 |
#define CP0TCSt_TKSU 11 |
|
221 |
#define CP0TCSt_IXMT 10 |
|
222 |
#define CP0TCSt_TASID 0 |
|
223 |
int32_t CP0_TCBind[MIPS_TC_MAX]; |
|
224 |
#define CP0TCBd_CurTC 21 |
|
225 |
#define CP0TCBd_TBE 17 |
|
226 |
#define CP0TCBd_CurVPE 0 |
|
227 |
target_ulong CP0_TCHalt[MIPS_TC_MAX]; |
|
228 |
target_ulong CP0_TCContext[MIPS_TC_MAX]; |
|
229 |
target_ulong CP0_TCSchedule[MIPS_TC_MAX]; |
|
230 |
target_ulong CP0_TCScheFBack[MIPS_TC_MAX]; |
|
231 | 233 |
target_ulong CP0_EntryLo1; |
232 | 234 |
target_ulong CP0_Context; |
233 | 235 |
int32_t CP0_PageMask; |
... | ... | |
398 | 400 |
#define CP0DB_DDBL 2 |
399 | 401 |
#define CP0DB_DBp 1 |
400 | 402 |
#define CP0DB_DSS 0 |
401 |
int32_t CP0_Debug_tcstatus[MIPS_TC_MAX]; |
|
402 | 403 |
target_ulong CP0_DEPC; |
403 | 404 |
int32_t CP0_Performance0; |
404 | 405 |
int32_t CP0_TagLo; |
... | ... | |
407 | 408 |
int32_t CP0_DataHi; |
408 | 409 |
target_ulong CP0_ErrorEPC; |
409 | 410 |
int32_t CP0_DESAVE; |
411 |
/* We waste some space so we can handle shadow registers like TCs. */ |
|
412 |
TCState tcs[MIPS_SHADOW_SET_MAX]; |
|
410 | 413 |
/* Qemu */ |
411 | 414 |
int interrupt_request; |
412 | 415 |
int error_code; |
... | ... | |
501 | 504 |
static inline void cpu_clone_regs(CPUState *env, target_ulong newsp) |
502 | 505 |
{ |
503 | 506 |
if (newsp) |
504 |
env->gpr[env->current_tc][29] = newsp;
|
|
505 |
env->gpr[env->current_tc][7] = 0;
|
|
506 |
env->gpr[env->current_tc][2] = 0;
|
|
507 |
env->active_tc.gpr[29] = newsp;
|
|
508 |
env->active_tc.gpr[7] = 0;
|
|
509 |
env->active_tc.gpr[2] = 0;
|
|
507 | 510 |
} |
508 | 511 |
#endif |
509 | 512 |
|
Also available in: Unified diff