X-Git-Url: http://vcs.maemo.org/git/?a=blobdiff_plain;f=softmmu_header.h;h=0798cf5721233cc83760d3c19abe80f1cf3e19de;hb=667f38b167caebb38a16aef6df56db0dcb34d684;hp=0bbc3681cc575d8974c832e09b3ca5f406b96827;hpb=2d603d2216444a0654223fd80f51300f36e52076;p=qemu diff --git a/softmmu_header.h b/softmmu_header.h index 0bbc368..0798cf5 100644 --- a/softmmu_header.h +++ b/softmmu_header.h @@ -55,6 +55,10 @@ #define CPU_MEM_INDEX ((env->hflags & HF_CPL_MASK) == 3) #elif defined (TARGET_PPC) #define CPU_MEM_INDEX (msr_pr) +#elif defined (TARGET_MIPS) +#define CPU_MEM_INDEX ((env->hflags & MIPS_HFLAG_MODE) == MIPS_HFLAG_UM) +#elif defined (TARGET_SPARC) +#define CPU_MEM_INDEX ((env->psrs) == 0) #endif #define MMUSUFFIX _mmu @@ -64,6 +68,10 @@ #define CPU_MEM_INDEX ((env->hflags & HF_CPL_MASK) == 3) #elif defined (TARGET_PPC) #define CPU_MEM_INDEX (msr_pr) +#elif defined (TARGET_MIPS) +#define CPU_MEM_INDEX ((env->hflags & MIPS_HFLAG_MODE) == MIPS_HFLAG_UM) +#elif defined (TARGET_SPARC) +#define CPU_MEM_INDEX ((env->psrs) == 0) #endif #define MMUSUFFIX _cmmu @@ -78,13 +86,14 @@ #endif -DATA_TYPE REGPARM(1) glue(glue(__ld, SUFFIX), MMUSUFFIX)(unsigned long addr, +DATA_TYPE REGPARM(1) glue(glue(__ld, SUFFIX), MMUSUFFIX)(target_ulong addr, int is_user); -void REGPARM(2) glue(glue(__st, SUFFIX), MMUSUFFIX)(unsigned long addr, DATA_TYPE v, int is_user); +void REGPARM(2) glue(glue(__st, SUFFIX), MMUSUFFIX)(target_ulong addr, DATA_TYPE v, int is_user); -#if (DATA_SIZE <= 4) && defined(__i386__) && (ACCESS_TYPE <= 1) && defined(ASM_SOFTMMU) +#if (DATA_SIZE <= 4) && (TARGET_LONG_BITS == 32) && defined(__i386__) && \ + (ACCESS_TYPE <= 1) && defined(ASM_SOFTMMU) -static inline RES_TYPE glue(glue(ld, USUFFIX), MEMSUFFIX)(void *ptr) +static inline RES_TYPE glue(glue(ld, USUFFIX), MEMSUFFIX)(target_ulong ptr) { int res; @@ -127,7 +136,7 @@ static inline RES_TYPE glue(glue(ld, USUFFIX), MEMSUFFIX)(void *ptr) } #if DATA_SIZE <= 2 -static inline int glue(glue(lds, SUFFIX), MEMSUFFIX)(void *ptr) +static inline int glue(glue(lds, SUFFIX), MEMSUFFIX)(target_ulong ptr) { int res; @@ -174,7 +183,7 @@ static inline int glue(glue(lds, SUFFIX), MEMSUFFIX)(void *ptr) } #endif -static inline void glue(glue(st, SUFFIX), MEMSUFFIX)(void *ptr, RES_TYPE v) +static inline void glue(glue(st, SUFFIX), MEMSUFFIX)(target_ulong ptr, RES_TYPE v) { asm volatile ("movl %0, %%edx\n" "movl %0, %%eax\n" @@ -228,14 +237,15 @@ static inline void glue(glue(st, SUFFIX), MEMSUFFIX)(void *ptr, RES_TYPE v) /* generic load/store macros */ -static inline RES_TYPE glue(glue(ld, USUFFIX), MEMSUFFIX)(void *ptr) +static inline RES_TYPE glue(glue(ld, USUFFIX), MEMSUFFIX)(target_ulong ptr) { int index; RES_TYPE res; - unsigned long addr, physaddr; + target_ulong addr; + unsigned long physaddr; int is_user; - addr = (unsigned long)ptr; + addr = ptr; index = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1); is_user = CPU_MEM_INDEX; if (__builtin_expect(env->tlb_read[is_user][index].address != @@ -249,13 +259,14 @@ static inline RES_TYPE glue(glue(ld, USUFFIX), MEMSUFFIX)(void *ptr) } #if DATA_SIZE <= 2 -static inline int glue(glue(lds, SUFFIX), MEMSUFFIX)(void *ptr) +static inline int glue(glue(lds, SUFFIX), MEMSUFFIX)(target_ulong ptr) { int res, index; - unsigned long addr, physaddr; + target_ulong addr; + unsigned long physaddr; int is_user; - addr = (unsigned long)ptr; + addr = ptr; index = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1); is_user = CPU_MEM_INDEX; if (__builtin_expect(env->tlb_read[is_user][index].address != @@ -271,13 +282,14 @@ static inline int glue(glue(lds, SUFFIX), MEMSUFFIX)(void *ptr) /* generic store macro */ -static inline void glue(glue(st, SUFFIX), MEMSUFFIX)(void *ptr, RES_TYPE v) +static inline void glue(glue(st, SUFFIX), MEMSUFFIX)(target_ulong ptr, RES_TYPE v) { int index; - unsigned long addr, physaddr; + target_ulong addr; + unsigned long physaddr; int is_user; - addr = (unsigned long)ptr; + addr = ptr; index = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1); is_user = CPU_MEM_INDEX; if (__builtin_expect(env->tlb_write[is_user][index].address != @@ -292,7 +304,7 @@ static inline void glue(glue(st, SUFFIX), MEMSUFFIX)(void *ptr, RES_TYPE v) #endif #if DATA_SIZE == 8 -static inline double glue(ldfq, MEMSUFFIX)(void *ptr) +static inline double glue(ldfq, MEMSUFFIX)(target_ulong ptr) { union { double d; @@ -302,7 +314,7 @@ static inline double glue(ldfq, MEMSUFFIX)(void *ptr) return u.d; } -static inline void glue(stfq, MEMSUFFIX)(void *ptr, double v) +static inline void glue(stfq, MEMSUFFIX)(target_ulong ptr, double v) { union { double d; @@ -314,7 +326,7 @@ static inline void glue(stfq, MEMSUFFIX)(void *ptr, double v) #endif /* DATA_SIZE == 8 */ #if DATA_SIZE == 4 -static inline float glue(ldfl, MEMSUFFIX)(void *ptr) +static inline float glue(ldfl, MEMSUFFIX)(target_ulong ptr) { union { float f; @@ -324,7 +336,7 @@ static inline float glue(ldfl, MEMSUFFIX)(void *ptr) return u.f; } -static inline void glue(stfl, MEMSUFFIX)(void *ptr, float v) +static inline void glue(stfl, MEMSUFFIX)(target_ulong ptr, float v) { union { float f;