diff options
author | Blue Swirl <blauwirbel@gmail.com> | 2011-07-04 20:34:28 +0000 |
---|---|---|
committer | Blue Swirl <blauwirbel@gmail.com> | 2012-03-18 12:22:00 +0000 |
commit | fe8d8f0f1c3ed0f5e84edffbbc8fcdf3b7da589b (patch) | |
tree | cfca47af264c78b35cce720ff37e2c2bcccbf0f1 /target-sparc/cpu.h | |
parent | 57d585f7d14fefc8ebf2b29b2b5a955bec77b5da (diff) |
Sparc: avoid AREG0 for memory access helpers
Make memory access helpers take a parameter for CPUState instead
of relying on global env. Introduce wrappers for load and store ops.
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
Diffstat (limited to 'target-sparc/cpu.h')
-rw-r--r-- | target-sparc/cpu.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/target-sparc/cpu.h b/target-sparc/cpu.h index f638457a89..ee28daa507 100644 --- a/target-sparc/cpu.h +++ b/target-sparc/cpu.h @@ -586,8 +586,90 @@ void cpu_unassigned_access(CPUSPARCState *env1, target_phys_addr_t addr, #if defined(TARGET_SPARC64) target_phys_addr_t cpu_get_phys_page_nofault(CPUSPARCState *env, target_ulong addr, int mmu_idx); +#endif + +#define WRAP_LD(rettype, fn) \ + rettype cpu_ ## fn (CPUSPARCState *env1, target_ulong addr) + +WRAP_LD(uint32_t, ldub_kernel); +WRAP_LD(uint32_t, lduw_kernel); +WRAP_LD(uint32_t, ldl_kernel); +WRAP_LD(uint64_t, ldq_kernel); + +WRAP_LD(uint32_t, ldub_user); +WRAP_LD(uint32_t, lduw_user); +WRAP_LD(uint32_t, ldl_user); +WRAP_LD(uint64_t, ldq_user); + +WRAP_LD(uint64_t, ldfq_kernel); +WRAP_LD(uint64_t, ldfq_user); + +#ifdef TARGET_SPARC64 +WRAP_LD(uint32_t, ldub_hypv); +WRAP_LD(uint32_t, lduw_hypv); +WRAP_LD(uint32_t, ldl_hypv); +WRAP_LD(uint64_t, ldq_hypv); + +WRAP_LD(uint64_t, ldfq_hypv); + +WRAP_LD(uint32_t, ldub_nucleus); +WRAP_LD(uint32_t, lduw_nucleus); +WRAP_LD(uint32_t, ldl_nucleus); +WRAP_LD(uint64_t, ldq_nucleus); + +WRAP_LD(uint32_t, ldub_kernel_secondary); +WRAP_LD(uint32_t, lduw_kernel_secondary); +WRAP_LD(uint32_t, ldl_kernel_secondary); +WRAP_LD(uint64_t, ldq_kernel_secondary); + +WRAP_LD(uint32_t, ldub_user_secondary); +WRAP_LD(uint32_t, lduw_user_secondary); +WRAP_LD(uint32_t, ldl_user_secondary); +WRAP_LD(uint64_t, ldq_user_secondary); +#endif +#undef WRAP_LD + +#define WRAP_ST(datatype, fn) \ + void cpu_ ## fn (CPUSPARCState *env1, target_ulong addr, datatype val) + +WRAP_ST(uint32_t, stb_kernel); +WRAP_ST(uint32_t, stw_kernel); +WRAP_ST(uint32_t, stl_kernel); +WRAP_ST(uint64_t, stq_kernel); + +WRAP_ST(uint32_t, stb_user); +WRAP_ST(uint32_t, stw_user); +WRAP_ST(uint32_t, stl_user); +WRAP_ST(uint64_t, stq_user); +WRAP_ST(uint64_t, stfq_kernel); +WRAP_ST(uint64_t, stfq_user); + +#ifdef TARGET_SPARC64 +WRAP_ST(uint32_t, stb_hypv); +WRAP_ST(uint32_t, stw_hypv); +WRAP_ST(uint32_t, stl_hypv); +WRAP_ST(uint64_t, stq_hypv); + +WRAP_ST(uint64_t, stfq_hypv); + +WRAP_ST(uint32_t, stb_nucleus); +WRAP_ST(uint32_t, stw_nucleus); +WRAP_ST(uint32_t, stl_nucleus); +WRAP_ST(uint64_t, stq_nucleus); + +WRAP_ST(uint32_t, stb_kernel_secondary); +WRAP_ST(uint32_t, stw_kernel_secondary); +WRAP_ST(uint32_t, stl_kernel_secondary); +WRAP_ST(uint64_t, stq_kernel_secondary); + +WRAP_ST(uint32_t, stb_user_secondary); +WRAP_ST(uint32_t, stw_user_secondary); +WRAP_ST(uint32_t, stl_user_secondary); +WRAP_ST(uint64_t, stq_user_secondary); #endif + +#undef WRAP_ST #endif int cpu_sparc_signal_handler(int host_signum, void *pinfo, void *puc); |