@@ -793,6 +793,54 @@ static ObjectClass *loongarch_cpu_class_by_name(const char *cpu_model)
793
793
return oc ;
794
794
}
795
795
796
+ static void loongarch_cpu_dump_csr (CPUState * cs , FILE * f )
797
+ {
798
+ #ifndef CONFIG_USER_ONLY
799
+ CPULoongArchState * env = cpu_env (cs );
800
+ CSRInfo * csr_info ;
801
+ int64_t * addr ;
802
+ int i , j , len , col = 0 ;
803
+
804
+ qemu_fprintf (f , "\n" );
805
+
806
+ /* Dump all generic CSR register */
807
+ for (i = 0 ; i < LOONGARCH_CSR_DBG ; i ++ ) {
808
+ csr_info = get_csr (i );
809
+ if (!csr_info || (csr_info -> flags & CSRFL_UNUSED )) {
810
+ if (i == (col + 3 )) {
811
+ qemu_fprintf (f , "\n" );
812
+ }
813
+
814
+ continue ;
815
+ }
816
+
817
+ if ((i > (col + 3 )) || (i == col )) {
818
+ col = i & ~3 ;
819
+ qemu_fprintf (f , " CSR%03d:" , col );
820
+ }
821
+
822
+ addr = (void * )env + csr_info -> offset ;
823
+ qemu_fprintf (f , " %s " , csr_info -> name );
824
+ len = strlen (csr_info -> name );
825
+ for (; len < 6 ; len ++ ) {
826
+ qemu_fprintf (f , " " );
827
+ }
828
+
829
+ qemu_fprintf (f , "%" PRIx64 , * addr );
830
+ j = find_last_bit ((void * )addr , BITS_PER_LONG ) & (BITS_PER_LONG - 1 );
831
+ len += j / 4 + 1 ;
832
+ for (; len < 22 ; len ++ ) {
833
+ qemu_fprintf (f , " " );
834
+ }
835
+
836
+ if (i == (col + 3 )) {
837
+ qemu_fprintf (f , "\n" );
838
+ }
839
+ }
840
+ qemu_fprintf (f , "\n" );
841
+ #endif
842
+ }
843
+
796
844
static void loongarch_cpu_dump_state (CPUState * cs , FILE * f , int flags )
797
845
{
798
846
CPULoongArchState * env = cpu_env (cs );
@@ -812,22 +860,8 @@ static void loongarch_cpu_dump_state(CPUState *cs, FILE *f, int flags)
812
860
}
813
861
}
814
862
815
- qemu_fprintf (f , "CRMD=%016" PRIx64 "\n" , env -> CSR_CRMD );
816
- qemu_fprintf (f , "PRMD=%016" PRIx64 "\n" , env -> CSR_PRMD );
817
- qemu_fprintf (f , "EUEN=%016" PRIx64 "\n" , env -> CSR_EUEN );
818
- qemu_fprintf (f , "ESTAT=%016" PRIx64 "\n" , env -> CSR_ESTAT );
819
- qemu_fprintf (f , "ERA=%016" PRIx64 "\n" , env -> CSR_ERA );
820
- qemu_fprintf (f , "BADV=%016" PRIx64 "\n" , env -> CSR_BADV );
821
- qemu_fprintf (f , "BADI=%016" PRIx64 "\n" , env -> CSR_BADI );
822
- qemu_fprintf (f , "EENTRY=%016" PRIx64 "\n" , env -> CSR_EENTRY );
823
- qemu_fprintf (f , "PRCFG1=%016" PRIx64 ", PRCFG2=%016" PRIx64 ","
824
- " PRCFG3=%016" PRIx64 "\n" ,
825
- env -> CSR_PRCFG1 , env -> CSR_PRCFG2 , env -> CSR_PRCFG3 );
826
- qemu_fprintf (f , "TLBRENTRY=%016" PRIx64 "\n" , env -> CSR_TLBRENTRY );
827
- qemu_fprintf (f , "TLBRBADV=%016" PRIx64 "\n" , env -> CSR_TLBRBADV );
828
- qemu_fprintf (f , "TLBRERA=%016" PRIx64 "\n" , env -> CSR_TLBRERA );
829
- qemu_fprintf (f , "TCFG=%016" PRIx64 "\n" , env -> CSR_TCFG );
830
- qemu_fprintf (f , "TVAL=%016" PRIx64 "\n" , env -> CSR_TVAL );
863
+ /* csr */
864
+ loongarch_cpu_dump_csr (cs , f );
831
865
832
866
/* fpr */
833
867
if (flags & CPU_DUMP_FPU ) {
0 commit comments