mirror of
https://github.com/yuzu-emu/unicorn.git
synced 2025-02-01 23:31:15 +00:00
target/sparc: Use env_cpu, env_archcpu
Cleanup in the boilerplate that each target must define. Replace sparc_env_get_cpu with env_archcpu. The combination CPU(sparc_env_get_cpu) should have used ENV_GET_CPU to begin; use env_cpu now. Backports commit 5a59fbce9141c40db0f0a5a6e17583ad9189b48b from qemu
This commit is contained in:
parent
47b797f1bb
commit
a11dd94ce7
|
@ -528,11 +528,6 @@ struct SPARCCPU {
|
|||
CPUSPARCState env;
|
||||
};
|
||||
|
||||
static inline SPARCCPU *sparc_env_get_cpu(CPUSPARCState *env)
|
||||
{
|
||||
return container_of(env, SPARCCPU, env);
|
||||
}
|
||||
|
||||
#define ENV_OFFSET offsetof(SPARCCPU, env)
|
||||
|
||||
void sparc_cpu_do_interrupt(CPUState *cpu);
|
||||
|
|
|
@ -53,7 +53,7 @@ static target_ulong do_check_ieee_exceptions(CPUSPARCState *env, uintptr_t ra)
|
|||
}
|
||||
|
||||
if ((fsr & FSR_CEXC_MASK) & ((fsr & FSR_TEM_MASK) >> 23)) {
|
||||
CPUState *cs = CPU(sparc_env_get_cpu(env));
|
||||
CPUState *cs = env_cpu(env);
|
||||
|
||||
/* Unmasked exception, generate a trap. Note that while
|
||||
the helper is marked as NO_WG, we can get away with
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
void cpu_raise_exception_ra(CPUSPARCState *env, int tt, uintptr_t ra)
|
||||
{
|
||||
CPUState *cs = CPU(sparc_env_get_cpu(env));
|
||||
CPUState *cs = env_cpu(env);
|
||||
|
||||
cs->exception_index = tt;
|
||||
cpu_loop_exit_restore(cs, ra);
|
||||
|
@ -34,7 +34,7 @@ void cpu_raise_exception_ra(CPUSPARCState *env, int tt, uintptr_t ra)
|
|||
|
||||
void helper_raise_exception(CPUSPARCState *env, int tt)
|
||||
{
|
||||
CPUState *cs = CPU(sparc_env_get_cpu(env));
|
||||
CPUState *cs = env_cpu(env);
|
||||
|
||||
cs->exception_index = tt;
|
||||
cpu_loop_exit(cs);
|
||||
|
@ -42,7 +42,7 @@ void helper_raise_exception(CPUSPARCState *env, int tt)
|
|||
|
||||
void helper_debug(CPUSPARCState *env)
|
||||
{
|
||||
CPUState *cs = CPU(sparc_env_get_cpu(env));
|
||||
CPUState *cs = env_cpu(env);
|
||||
|
||||
cs->exception_index = EXCP_DEBUG;
|
||||
cpu_loop_exit(cs);
|
||||
|
@ -244,7 +244,7 @@ target_ulong helper_tsubcctv(CPUSPARCState *env, target_ulong src1,
|
|||
//#ifndef TARGET_SPARC64
|
||||
void helper_power_down(CPUSPARCState *env)
|
||||
{
|
||||
CPUState *cs = CPU(sparc_env_get_cpu(env));
|
||||
CPUState *cs = env_cpu(env);
|
||||
|
||||
cs->halted = 1;
|
||||
cs->exception_index = EXCP_HLT;
|
||||
|
|
|
@ -122,13 +122,13 @@ static uint64_t ultrasparc_tag_target(uint64_t tag_access_register)
|
|||
|
||||
static void replace_tlb_entry(SparcTLBEntry *tlb,
|
||||
uint64_t tlb_tag, uint64_t tlb_tte,
|
||||
CPUSPARCState *env1)
|
||||
CPUSPARCState *env)
|
||||
{
|
||||
target_ulong mask, size, va, offset;
|
||||
|
||||
/* flush page range if translation is valid */
|
||||
if (TTE_IS_VALID(tlb->tte)) {
|
||||
CPUState *cs = CPU(sparc_env_get_cpu(env1));
|
||||
CPUState *cs = env_cpu(env);
|
||||
|
||||
size = 8192ULL << 3 * TTE_PGSIZE(tlb->tte);
|
||||
mask = 1ULL + ~size;
|
||||
|
@ -500,7 +500,7 @@ uint64_t helper_ld_asi(CPUSPARCState *env, target_ulong addr,
|
|||
{
|
||||
int size = 1 << (memop & MO_SIZE);
|
||||
int sign = memop & MO_SIGN;
|
||||
CPUState *cs = CPU(sparc_env_get_cpu(env));
|
||||
CPUState *cs = env_cpu(env);
|
||||
uint64_t ret = 0;
|
||||
#if defined(DEBUG_MXCC) || defined(DEBUG_ASI)
|
||||
uint32_t last_addr = addr;
|
||||
|
@ -728,8 +728,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, uint64_t val,
|
|||
int asi, uint32_t memop)
|
||||
{
|
||||
int size = 1 << (memop & MO_SIZE);
|
||||
SPARCCPU *cpu = sparc_env_get_cpu(env);
|
||||
CPUState *cs = CPU(cpu);
|
||||
CPUState *cs = env_cpu(env);
|
||||
|
||||
do_check_align(env, addr, size - 1, GETPC());
|
||||
switch (asi) {
|
||||
|
@ -877,13 +876,13 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, uint64_t val,
|
|||
DPRINTF_MMU("mmu flush level %d\n", mmulev);
|
||||
switch (mmulev) {
|
||||
case 0: /* flush page */
|
||||
tlb_flush_page(CPU(cpu), addr & 0xfffff000);
|
||||
tlb_flush_page(cs, addr & 0xfffff000);
|
||||
break;
|
||||
case 1: /* flush segment (256k) */
|
||||
case 2: /* flush region (16M) */
|
||||
case 3: /* flush context (4G) */
|
||||
case 4: /* flush entire */
|
||||
tlb_flush(CPU(cpu));
|
||||
tlb_flush(cs);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -908,7 +907,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, uint64_t val,
|
|||
are invalid in normal mode. */
|
||||
if ((oldreg ^ env->mmuregs[reg])
|
||||
& (MMU_NF | env->def.mmu_bm)) {
|
||||
tlb_flush(CPU(cpu));
|
||||
tlb_flush(cs);
|
||||
}
|
||||
break;
|
||||
case 1: /* Context Table Pointer Register */
|
||||
|
@ -919,7 +918,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, uint64_t val,
|
|||
if (oldreg != env->mmuregs[reg]) {
|
||||
/* we flush when the MMU context changes because
|
||||
QEMU has no MMU context support */
|
||||
tlb_flush(CPU(cpu));
|
||||
tlb_flush(cs);
|
||||
}
|
||||
break;
|
||||
case 3: /* Synchronous Fault Status Register with Clear */
|
||||
|
@ -1032,8 +1031,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, uint64_t val,
|
|||
case ASI_USERTXT: /* User code access, XXX */
|
||||
case ASI_KERNELTXT: /* Supervisor code access, XXX */
|
||||
default:
|
||||
cpu_unassigned_access(CPU(sparc_env_get_cpu(env)),
|
||||
addr, true, false, asi, size);
|
||||
cpu_unassigned_access(cs, addr, true, false, asi, size);
|
||||
break;
|
||||
|
||||
case ASI_USERDATA: /* User data access */
|
||||
|
@ -1180,7 +1178,7 @@ uint64_t helper_ld_asi(CPUSPARCState *env, target_ulong addr,
|
|||
{
|
||||
int size = 1 << (memop & MO_SIZE);
|
||||
int sign = memop & MO_SIGN;
|
||||
CPUState *cs = CPU(sparc_env_get_cpu(env));
|
||||
CPUState *cs = env_cpu(env);
|
||||
uint64_t ret = 0;
|
||||
#if defined(DEBUG_ASI)
|
||||
target_ulong last_addr = addr;
|
||||
|
@ -1486,8 +1484,7 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
|
|||
int asi, uint32_t memop)
|
||||
{
|
||||
int size = 1 << (memop & MO_SIZE);
|
||||
SPARCCPU *cpu = sparc_env_get_cpu(env);
|
||||
CPUState *cs = CPU(cpu);
|
||||
CPUState *cs = env_cpu(env);
|
||||
|
||||
#ifdef DEBUG_ASI
|
||||
dump_asi("write", addr, asi, size, val);
|
||||
|
@ -1691,13 +1688,13 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
|
|||
env->dmmu.mmu_primary_context = val;
|
||||
/* can be optimized to only flush MMU_USER_IDX
|
||||
and MMU_KERNEL_IDX entries */
|
||||
tlb_flush(CPU(cpu));
|
||||
tlb_flush(cs);
|
||||
break;
|
||||
case 2: /* Secondary context */
|
||||
env->dmmu.mmu_secondary_context = val;
|
||||
/* can be optimized to only flush MMU_USER_SECONDARY_IDX
|
||||
and MMU_KERNEL_SECONDARY_IDX entries */
|
||||
tlb_flush(CPU(cpu));
|
||||
tlb_flush(cs);
|
||||
break;
|
||||
case 5: /* TSB access */
|
||||
DPRINTF_MMU("dmmu TSB write: 0x%016" PRIx64 " -> 0x%016"
|
||||
|
@ -1773,13 +1770,13 @@ void helper_st_asi(CPUSPARCState *env, target_ulong addr, target_ulong val,
|
|||
case 1:
|
||||
env->dmmu.mmu_primary_context = val;
|
||||
env->immu.mmu_primary_context = val;
|
||||
tlb_flush_by_mmuidx(CPU(cpu),
|
||||
tlb_flush_by_mmuidx(cs,
|
||||
(1 << MMU_USER_IDX) | (1 << MMU_KERNEL_IDX));
|
||||
break;
|
||||
case 2:
|
||||
env->dmmu.mmu_secondary_context = val;
|
||||
env->immu.mmu_secondary_context = val;
|
||||
tlb_flush_by_mmuidx(CPU(cpu),
|
||||
tlb_flush_by_mmuidx(cs,
|
||||
(1 << MMU_USER_SECONDARY_IDX) |
|
||||
(1 << MMU_KERNEL_SECONDARY_IDX));
|
||||
break;
|
||||
|
|
|
@ -95,7 +95,7 @@ static int get_physical_address(CPUSPARCState *env, hwaddr *physical,
|
|||
uint32_t pde;
|
||||
int error_code = 0, is_dirty, is_user;
|
||||
unsigned long page_offset;
|
||||
CPUState *cs = CPU(sparc_env_get_cpu(env));
|
||||
CPUState *cs = env_cpu(env);
|
||||
|
||||
is_user = mmu_idx == MMU_USER_IDX;
|
||||
|
||||
|
@ -266,7 +266,7 @@ bool sparc_cpu_tlb_fill(CPUState *cs, vaddr address, int size,
|
|||
|
||||
target_ulong mmu_probe(CPUSPARCState *env, target_ulong address, int mmulev)
|
||||
{
|
||||
CPUState *cs = CPU(sparc_env_get_cpu(env));
|
||||
CPUState *cs = env_cpu(env);
|
||||
hwaddr pde_ptr;
|
||||
uint32_t pde;
|
||||
|
||||
|
@ -333,7 +333,7 @@ target_ulong mmu_probe(CPUSPARCState *env, target_ulong address, int mmulev)
|
|||
|
||||
void dump_mmu(FILE *f, fprintf_function cpu_fprintf, CPUSPARCState *env)
|
||||
{
|
||||
CPUState *cs = CPU(sparc_env_get_cpu(env));
|
||||
CPUState *cs = env_cpu(env);
|
||||
target_ulong va, va1, va2;
|
||||
unsigned int n, m, o;
|
||||
hwaddr pde_ptr, pa;
|
||||
|
@ -492,7 +492,7 @@ static int get_physical_address_data(CPUSPARCState *env,
|
|||
hwaddr *physical, int *prot,
|
||||
target_ulong address, int rw, int mmu_idx)
|
||||
{
|
||||
CPUState *cs = CPU(sparc_env_get_cpu(env));
|
||||
CPUState *cs = env_cpu(env);
|
||||
unsigned int i;
|
||||
uint64_t context;
|
||||
uint64_t sfsr = 0;
|
||||
|
@ -611,7 +611,7 @@ static int get_physical_address_code(CPUSPARCState *env,
|
|||
hwaddr *physical, int *prot,
|
||||
target_ulong address, int mmu_idx)
|
||||
{
|
||||
CPUState *cs = CPU(sparc_env_get_cpu(env));
|
||||
CPUState *cs = env_cpu(env);
|
||||
unsigned int i;
|
||||
uint64_t context;
|
||||
bool is_user = false;
|
||||
|
|
Loading…
Reference in a new issue