Revision 6f27aba6 target-sparc/translate.c
b/target-sparc/translate.c | ||
---|---|---|
361 | 361 |
#endif |
362 | 362 |
#define gen_op_ldst(name) gen_op_##name##_raw() |
363 | 363 |
#else |
364 |
#define supervisor(dc) (dc->mem_idx == 1)
|
|
364 |
#define supervisor(dc) (dc->mem_idx >= 1)
|
|
365 | 365 |
#ifdef TARGET_SPARC64 |
366 | 366 |
#define hypervisor(dc) (dc->mem_idx == 2) |
367 |
#endif |
|
368 |
#define gen_op_ldst(name) (*gen_op_##name[dc->mem_idx])() |
|
367 |
#define OP_LD_TABLE(width) \ |
|
368 |
static GenOpFunc * const gen_op_##width[] = { \ |
|
369 |
&gen_op_##width##_user, \ |
|
370 |
&gen_op_##width##_kernel, \ |
|
371 |
&gen_op_##width##_hypv, \ |
|
372 |
}; |
|
373 |
#else |
|
369 | 374 |
#define OP_LD_TABLE(width) \ |
370 | 375 |
static GenOpFunc * const gen_op_##width[] = { \ |
371 | 376 |
&gen_op_##width##_user, \ |
372 | 377 |
&gen_op_##width##_kernel, \ |
373 | 378 |
}; |
374 | 379 |
#endif |
380 |
#define gen_op_ldst(name) (*gen_op_##name[dc->mem_idx])() |
|
381 |
#endif |
|
375 | 382 |
|
376 | 383 |
#ifndef CONFIG_USER_ONLY |
377 | 384 |
OP_LD_TABLE(ld); |
... | ... | |
3378 | 3385 |
dc->pc = pc_start; |
3379 | 3386 |
last_pc = dc->pc; |
3380 | 3387 |
dc->npc = (target_ulong) tb->cs_base; |
3381 |
#if defined(CONFIG_USER_ONLY) |
|
3382 |
dc->mem_idx = 0; |
|
3383 |
dc->fpu_enabled = 1; |
|
3384 |
#else |
|
3385 |
dc->mem_idx = ((env->psrs) != 0); |
|
3386 |
#ifdef TARGET_SPARC64 |
|
3387 |
dc->fpu_enabled = (((env->pstate & PS_PEF) != 0) && ((env->fprs & FPRS_FEF) != 0)); |
|
3388 |
#else |
|
3389 |
dc->fpu_enabled = ((env->psref) != 0); |
|
3390 |
#endif |
|
3391 |
#endif |
|
3388 |
dc->mem_idx = cpu_mmu_index(env); |
|
3389 |
dc->fpu_enabled = cpu_fpu_enabled(env); |
|
3392 | 3390 |
gen_opc_ptr = gen_opc_buf; |
3393 | 3391 |
gen_opc_end = gen_opc_buf + OPC_MAX_SIZE; |
3394 | 3392 |
gen_opparam_ptr = gen_opparam_buf; |
... | ... | |
3522 | 3520 |
env->psrps = 1; |
3523 | 3521 |
#ifdef TARGET_SPARC64 |
3524 | 3522 |
env->pstate = PS_PRIV; |
3523 |
env->hpstate = HS_PRIV; |
|
3525 | 3524 |
env->pc = 0x1fff0000000ULL; |
3526 | 3525 |
#else |
3527 | 3526 |
env->pc = 0; |
Also available in: Unified diff