⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 core.c

📁 32cpu的代码
💻 C
📖 第 1 页 / 共 2 页
字号:
		  case  33 :// printf(" lh  \n");
		                   result_first_ep=dcache((unsigned long)opa_mp,opb_mp,2,0);
		                   #ifdef DEBUG
		                   printf("opa_mp=%08x,opb_mp=%08x",opa_mp,opb_mp);
		                   printf("______result_first_ep=%08x",result_first_ep);
		                   #endif
		                   result_second_mp=0;
		                   if(exception_flag_mp == 25){
		                   	exception_flag_mp=24;
		                    ErrorEPC=pc_address_mp;
		                    EPC=pc_address_mp;
		                    CPR[30]=pc_address_mp;
		                    CPR[14]=pc_address_mp;
		                }
		                   if(exception_flag_mp == 30){
		                   	exception_flag_mp=29;
		                    ErrorEPC=pc_address_mp;
		                    EPC=pc_address_mp;
		                    CPR[30]=pc_address_mp;
		                    CPR[14]=pc_address_mp;
		                   	}
		                   break;
		  case  34 : //printf(" lwl  \n");
		                   result_first_ep=dcache((unsigned long)opa_mp,opb_mp,4,0);
		                   result_second_mp=0;
		                   if(exception_flag_mp == 25){
		                   	exception_flag_mp=24;
		                    ErrorEPC=pc_address_mp;
		                    EPC=pc_address_mp;
		                    CPR[30]=pc_address_mp;
		                    CPR[14]=pc_address_mp;
		                }
		                   if(exception_flag_mp == 30){
		                        exception_flag_mp=29;
		                    ErrorEPC=pc_address_mp;
		                    EPC=pc_address_mp;
		                    CPR[30]=pc_address_mp;
		                    CPR[14]=pc_address_mp;
		                   	}
		                   break;
		  case  35 : //printf(" lw  \n");
		                   result_first_ep=dcache((unsigned long)opa_mp,opb_mp,4,0);
		                   #ifdef DEBUG
		                   printf("______result_first_ep=%08x",result_first_ep);
		                   #endif
		                   result_second_mp=0;
		                   if(exception_flag_mp == 25){
		                   	exception_flag_mp=24;
		                    ErrorEPC=pc_address_mp;
		                    EPC=pc_address_mp;
		                    CPR[30]=pc_address_mp;
		                    CPR[14]=pc_address_mp;
		                }
		                   if(exception_flag_mp == 30){
		                   	exception_flag_mp=29;
		                    ErrorEPC=pc_address_mp;
		                    EPC=pc_address_mp;
		                    CPR[30]=pc_address_mp;
		                    CPR[14]=pc_address_mp;
		                   	}
		                   break;
		  case  36 : //printf(" lbu  \n");
//		                   printf("result_first_mp=%08x  opa_mp=%08x  opb_mp=%08x\n",result_first_mp,opa_mp,opb_mp);
		                   result_first_ep=dcache((unsigned long)opa_mp,opb_mp,1,0);
		                   result_first_ep=(result_first_ep&(0x000000ff));
		                   #ifdef DEBUG
		                    printf("result_first_mp=%08x  opa_mp=%08x  opb_mp=%08x\n",result_first_mp,opa_mp,opb_mp);
		                   #endif
		                   result_second_mp=0;
		                   if(exception_flag_mp == 25){
		                   	exception_flag_mp=24;
		                    ErrorEPC=pc_address_mp;
		                    EPC=pc_address_mp;
		                    CPR[30]=pc_address_mp;
		                    CPR[14]=pc_address_mp;
		                }
		                   if(exception_flag_mp == 30){
		                   	exception_flag_mp=29;
		                    ErrorEPC=pc_address_mp;
		                    EPC=pc_address_mp;
		                    CPR[30]=pc_address_mp;
		                    CPR[14]=pc_address_mp;
		                   	}
		                   break;
		  case  37 : //printf(" lhu  \n");
		                   result_first_ep=dcache((unsigned long)opa_mp,opb_mp,2,0);
		                   result_first_ep=(result_first_ep&(0x0000ffff));
		                   result_second_mp=0;
		                   if(exception_flag_mp == 25){
		                   	exception_flag_mp=24;
		                    ErrorEPC=pc_address_mp;
		                    EPC=pc_address_mp;
		                    CPR[30]=pc_address_mp;
		                    CPR[14]=pc_address_mp;
		                       }
		                   if(exception_flag_mp == 30){
		                   	exception_flag_mp=29;
		                    ErrorEPC=pc_address_mp;
		                    EPC=pc_address_mp;
		                    CPR[30]=pc_address_mp;
		                    CPR[14]=pc_address_mp;
		                   	}
		                   break;
		  case  38 : //printf(" lwr  \n");
		                   result_first_ep=dcache((unsigned long)opa_mp,opb_mp,4,0);
		                   result_second_mp=0;
		                   if(exception_flag_mp == 25){
		                   	exception_flag_mp=24;
		                    ErrorEPC=pc_address_mp;
		                    EPC=pc_address_mp;
		                    CPR[30]=pc_address_mp;
		                    CPR[14]=pc_address_mp;
		                      }
		                   if(exception_flag_mp == 30){
		                   	exception_flag_mp=29;
		                    ErrorEPC=pc_address_mp;
		                    EPC=pc_address_mp;
		                    CPR[30]=pc_address_mp;
		                    CPR[14]=pc_address_mp;
		                   	}
		                   break;
		  case  40 :// printf(" sb  \n");
		                   #ifdef DEBUG
		  		   printf("opa_ep=0x%08x,opa_mp=0x%08x,opa_wp=0x%08x\n",opa_ep,opa_mp,opa_wp);
		                   printf("opb_ep=0x%08x,opb_mp=0x%08x,opb_wp=0x%08x\n",opb_ep,opb_mp,opb_wp);
		                   #endif
		                   dcache((unsigned long)opa_mp,opb_mp,1,1);
		                   break;
		  case  41 : //printf(" sh  \n");
		                  #ifdef DEBUG
		                  printf("opa_ep=0x%08x,opa_mp=0x%08x,opa_wp=0x%08x\n",opa_ep,opa_mp,opa_wp);
		                  printf("opb_ep=0x%08x,opb_mp=0x%08x,opb_wp=0x%08x\n",opb_ep,opb_mp,opb_wp);
		                  #endif
		                  dcache((unsigned long)opa_mp,opb_mp,2,1);
		                   break;
		  case  42 :// printf(" swl  \n");
		                  old_value=dcache((unsigned long)opa_mp,opb_mp,4,0);
		                  switch(load_store_byte_select_mp){
		                  	case 1: old_value=old_value&(0xffffff00);
		                  	        opb_mp=old_value|((opb_mp>>24)&(0x000000ff));
                                                break; 
		                  	case 3: old_value=old_value&(0xffff0000);
		                  	        opb_mp=old_value|((opb_mp>>16)&(0x0000ffff));
                                                break; 
		                  	case 7: old_value=old_value&(0xff000000);
		                  	        opb_mp=old_value|((opb_mp>>8)&(0x00ffffff));
                                                break; 
		                  	case 15: old_value=old_value&(0x00000000);
		                  	         opb_mp=old_value|opb_mp;
                                                break; 
                                        default:printf("swl instruction error in m step!\n");
		                  	}
		                   dcache((unsigned long)opa_mp,opb_mp,4,1);
		                   break;
		  case  43 : //printf(" sw  \n");
		                  #ifdef DEBUG
		                  printf("opa_ep=0x%08x,opa_mp=0x%08x,opa_wp=0x%08x\n",opa_ep,opa_mp,opa_wp);
		                  printf("opb_ep=0x%08x,opb_mp=0x%08x,opb_wp=0x%08x\n",opb_ep,opb_mp,opb_wp);
		                  #endif
		                  dcache((unsigned long)opa_mp,opb_mp,4,1);
		                   break;
		  case  46 :// printf(" swr  \n");
		                  old_value=dcache((unsigned long)opa_mp,opb_mp,4,0);
		                  switch(load_store_byte_select_mp){
		                  	case 8: old_value=old_value&(0x00ffffff);
		                  	        opb_mp=old_value|(opb_mp<<24);
                                                break; 
		                  	case 12: old_value=old_value&(0x0000ffff);
		                  	        opb_mp=old_value|(opb_mp<<16);
                                                break; 
		                  	case 14: old_value=old_value&(0x000000ff);
		                  	        opb_mp=old_value|(opb_mp<<8);
                                                break; 
		                  	case 15: old_value=old_value&(0x00000000);
		                  	         opb_mp=old_value|opb_mp;
                                                break; 
                                        default:printf("swl instruction error in m step!\n");
		                  	}
		                  dcache((unsigned long)opa_mp,opb_mp,4,1);
		                   break;
		  case  47 : //printf(" cache  \n");
		             break;
		  case  48 : //printf(" ll  \n");
		              break;
		  case  51 : //printf(" pref  \n");
		             break;
		  case  56 : //printf(" sc  \n");
		              break;
		  default: printf("normal instrution error! normal_instr_num_mp=%d \n",normal_instr_num_mp);
		           exception_flag_mp=18;
		}

       }
	
}

//////////////////////////////////end///////////////////////////////
	
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -