📄 core.c
字号:
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 + -