sparc32: add MXCC support
PATCH 1/1 sparc32: add MXCC support
Updated patch base of feedback.
This patch adds SuperSparc MXCC support.DPRINTF_MMU and DPRINTF_MXCC added.
I decided not to use do_unassigned_access() at this time because I don't know what real hardware does.
Index: hw/sun4m.c
===================================================================
RCS file: /sources/qemu/qemu/hw/sun4m.c,v
retrieving revision 1.55
sun4m.c +1 -1
@@ -327,7 +327,7 @@ static void *sun4m_hw_init(const structfor (i =0 ; i < smp_cpus; i++) { env =cpu_init (); -cpu_sparc_register (env, def); +cpu_sparc_register (env, def, i); envs[i] = env;if (i ==0 ) {qemu_register_reset (main_cpu_reset, env);
Index: linux-user/main.c
===================================================================
RCS file: /sources/qemu/qemu/linux-user/main.c,v
retrieving revision 1.132
main.c +1 -1
@@ -2139,7 +2139,7 @@ int main(int argc, char **argv)fprintf (stderr,"Unable to find Sparc CPU definition\n" );exit (1 ); } -cpu_sparc_register (env, def); +cpu_sparc_register (env, def,0 ); env->pc = regs->pc; env->npc = regs->npc; env->y = regs->y;
Index: target-sparc/cpu.h
===================================================================
RCS file: /sources/qemu/qemu/target-sparc/cpu.h,v
retrieving revision 1.53
cpu.h +3 -1
@@ -210,6 +210,8 @@ typedef struct CPUSPARCState {uint64_t dtlb_tte[64 ];#else uint32_t mmuregs[16 ]; +uint64_t mxccdata[4 ]; +uint64_t mxccregs[8 ];#endif /* temporary float registers */ float32 ft0, ft1;
@@ -266,7 +268,7 @@ int cpu_sparc_close(CPUSPARCState *s);int sparc_find_by_name (const unsigned char *name,const sparc_def_t **def);void sparc_cpu_list (FILE *f,int (*cpu_fprintf)(FILE *f,const char *fmt, ...)); -int cpu_sparc_register (CPUSPARCState *env,const sparc_def_t *def); +int cpu_sparc_register (CPUSPARCState *env,const sparc_def_t *def,unsigned int cpu);#define GET_PSR (env) (env->version | (env->psr & PSR_ICC) | \ (env->psref? PSR_EF : 0) | \
Index: target-sparc/op_helper.c
===================================================================
RCS file: /sources/qemu/qemu/target-sparc/op_helper.c,v retrieving revision 1.41
op_helper.c +150 -16
242 lines not on this page · raw message
Index: target-sparc/translate.c
===================================================================
RCS file: /sources/qemu/qemu/target-sparc/translate.c,v retrieving revision 1.74
translate.c +2 -1
@@ -3618,12 +3618,13 @@ void sparc_cpu_list (FILE *f, int (*cpu_ } } -int cpu_sparc_register (CPUSPARCState *env,const sparc_def_t *def) +int cpu_sparc_register (CPUSPARCState *env,const sparc_def_t *def,unsigned int cpu) { env->version = def->iu_version; env->fsr = def->fpu_version;#if !defined(TARGET_SPARC64 ) env->mmuregs[0 ] |= def->mmu_version; + env->mxccregs[7 ] = ((cpu +8 ) &0xf ) <<24 ;#endif return 0 ; }