sparc32: add asi debug info
PATCH 1/1 sparc32: add asi debug info
Add asi debug info printing.
op_helper.c +46 -8
@@ -6,6 +6,7 @@//#define DEBUG_MXCC //#define DEBUG_UNALIGNED //#define DEBUG_UNASSIGNED +//#define DEBUG_ASI #ifdef DEBUG_MMU #define DPRINTF_MMU(fmt, args...) \
@@ -21,6 +22,13 @@ do { printf("MXCC: " fmt , ##args); } wh #define DPRINTF_MXCC(fmt, args...)#endif +#ifdef DEBUG_ASI +#define DPRINTF_ASI(fmt, args...) \ +do { printf("ASI: " fmt , ##args); } while (0) +#else +#define DPRINTF_ASI(fmt, args...) +#endif +void raise_exception (int tt) { env->exception_index = tt;
@@ -229,11 +237,34 @@ static void dump_mxcc(CPUState *env) }#endif +#ifdef DEBUG_ASI +static void dump_asi (const char * txt,uint32_t addr,int asi,int size, +uint32_t r1,uint32_t r2) +{ +switch (size) + { +case 1 : +DPRINTF_ASI ("%s %08x asi 0x%02x = %02x\n" , txt, addr, asi, r1 &0xff ); +break ; +case 2 : +DPRINTF_ASI ("%s %08x asi 0x%02x = %04x\n" , txt, addr, asi, r1 &0xffff ); +break ; +case 4 : +DPRINTF_ASI ("%s %08x asi 0x%02x = %08x\n" , txt, addr, asi, r1); +break ; +case 8 : +DPRINTF_ASI ("%s %08x asi 0x%02x = %016llx\n" , txt, addr, asi, + r2 | ((uint64_t )r1 <<32 )); +break ; + } +} +#endif +void helper_ld_asi (int asi,int size,int sign) {uint32_t ret =0 ;uint64_t tmp; -#ifdef DEBUG_MXCC +#if defined(DEBUG_MXCC ) || defined(DEBUG_ASI )uint32_t last_T0 =T0 ;#endif
@@ -435,6 +466,10 @@ void helper_ld_asi(int asi, int size, in }else T1 = ret; + +#ifdef DEBUG_ASI +dump_asi ("read " , last_T0, asi, size,T1 ,T0 ); +#endif }void helper_st_asi (int asi,int size)
@@ -542,8 +577,8 @@ void helper_st_asi(int asi, int size)#ifdef DEBUG_MMU dump_mmu (env);#endif -return ; } +break ;case 4 :/* write MMU regs */ {int reg = (T0 >>8 ) &0x1f ;
@@ -587,8 +622,8 @@ void helper_st_asi(int asi, int size)#ifdef DEBUG_MMU dump_mmu (env);#endif -return ; } +break ;case 0xa :/* User data access */ switch (size) {case 1 :
@@ -646,7 +681,7 @@ void helper_st_asi(int asi, int size)stl_kernel (dst, temp); } } -return ; +break ;case 0x1f :/* Block fill, stda access */ {// value (T1, T2)
@@ -661,7 +696,7 @@ void helper_st_asi(int asi, int size)for (i =0 ; i <32 ; i +=8 , dst +=8 )stq_kernel (dst, val); } -return ; +break ;case 0x20 :/* MMU passthrough */ {switch (size) {
@@ -680,7 +715,7 @@ void helper_st_asi(int asi, int size)break ; } } -return ; +break ;case 0x2e :/* MMU passthrough, 0xexxxxxxxx */ case 0x2f :/* MMU passthrough, 0xfxxxxxxxx */ {
@@ -705,7 +740,7 @@ void helper_st_asi(int asi, int size)break ; } } -return ; +break ;case 0x30 :/* store buffer tags */ case 0x31 :/* store buffer data or Ross RT620 I-cache flush */ case 0x32 :/* store buffer control */
@@ -718,8 +753,11 @@ void helper_st_asi(int asi, int size) case 0x21 ... 0x2d: /* MMU passthrough, unassigned */default :do_unassigned_access (T0 ,1 ,0 ,1 ); - return; + break; } +#ifdef DEBUG_ASI +dump_asi ("write" ,T0 , asi, size,T1 ,T2 ); +#endif }#endif /* CONFIG_USER_ONLY */