Revision f838e2c5 target-sparc/cpu.h
b/target-sparc/cpu.h | ||
---|---|---|
606 | 606 |
#endif |
607 | 607 |
} |
608 | 608 |
|
609 |
static inline int cpu_fpu_enabled(CPUState *env1) |
|
610 |
{ |
|
611 |
#if defined(CONFIG_USER_ONLY) |
|
612 |
return 1; |
|
613 |
#elif !defined(TARGET_SPARC64) |
|
614 |
return env1->psref; |
|
615 |
#else |
|
616 |
return ((env1->pstate & PS_PEF) != 0) && ((env1->fprs & FPRS_FEF) != 0); |
|
617 |
#endif |
|
618 |
} |
|
619 |
|
|
620 | 609 |
#if defined(CONFIG_USER_ONLY) |
621 | 610 |
static inline void cpu_clone_regs(CPUState *env, target_ulong newsp) |
622 | 611 |
{ |
... | ... | |
639 | 628 |
trap_state* cpu_tsptr(CPUState* env); |
640 | 629 |
#endif |
641 | 630 |
|
631 |
#define TB_FLAG_FPU_ENABLED (1 << 4) |
|
632 |
#define TB_FLAG_AM_ENABLED (1 << 5) |
|
633 |
|
|
642 | 634 |
static inline void cpu_get_tb_cpu_state(CPUState *env, target_ulong *pc, |
643 | 635 |
target_ulong *cs_base, int *flags) |
644 | 636 |
{ |
... | ... | |
646 | 638 |
*cs_base = env->npc; |
647 | 639 |
#ifdef TARGET_SPARC64 |
648 | 640 |
// AM . Combined FPU enable bits . PRIV . DMMU enabled . IMMU enabled |
649 |
*flags = ((env->pstate & PS_AM) << 2) /* 5 */ |
|
650 |
| (((env->pstate & PS_PEF) >> 1) /* 3 */ |
|
651 |
| ((env->fprs & FPRS_FEF) << 2)) /* 4 */ |
|
652 |
| (env->pstate & PS_PRIV) /* 2 */ |
|
641 |
*flags = (env->pstate & PS_PRIV) /* 2 */ |
|
653 | 642 |
| ((env->lsu & (DMMU_E | IMMU_E)) >> 2) /* 1, 0 */ |
654 | 643 |
| ((env->tl & 0xff) << 8) |
655 | 644 |
| (env->dmmu.mmu_primary_context << 16); /* 16... */ |
645 |
if (env->pstate & PS_AM) { |
|
646 |
*flags |= TB_FLAG_AM_ENABLED; |
|
647 |
} |
|
648 |
if ((env->def->features & CPU_FEATURE_FLOAT) && (env->pstate & PS_PEF) |
|
649 |
&& (env->fprs & FPRS_FEF)) { |
|
650 |
*flags |= TB_FLAG_FPU_ENABLED; |
|
651 |
} |
|
656 | 652 |
#else |
657 | 653 |
// FPU enable . Supervisor |
658 |
*flags = (env->psref << 4) | env->psrs; |
|
654 |
*flags = env->psrs; |
|
655 |
if ((env->def->features & CPU_FEATURE_FLOAT) && env->psref) { |
|
656 |
*flags |= TB_FLAG_FPU_ENABLED; |
|
657 |
} |
|
658 |
#endif |
|
659 |
} |
|
660 |
|
|
661 |
static inline bool tb_fpu_enabled(int tb_flags) |
|
662 |
{ |
|
663 |
#if defined(CONFIG_USER_ONLY) |
|
664 |
return true; |
|
665 |
#else |
|
666 |
return tb_flags & TB_FLAG_FPU_ENABLED; |
|
667 |
#endif |
|
668 |
} |
|
669 |
|
|
670 |
static inline bool tb_am_enabled(int tb_flags) |
|
671 |
{ |
|
672 |
#ifndef TARGET_SPARC64 |
|
673 |
return false; |
|
674 |
#else |
|
675 |
return tb_flags & TB_FLAG_AM_ENABLED; |
|
659 | 676 |
#endif |
660 | 677 |
} |
661 | 678 |
|
Also available in: Unified diff