📄 cp0.c
字号:
CPR[14]=pc_address_wp - 4;
/* if((Status&(0x00000004)) == 0){
//ERL == 0
EPC=pc_address_wp - 4;
CPR[14]=pc_address_wp - 4;
}else{
//ERL == 1
ErrorEPC=pc_address_wp - 4;
CPR[30]=pc_address_wp - 4;
}*/
}else{
EPC=pc_address_wp;
CPR[14]=pc_address_wp;
/*if((Status&(0x00000004)) == 0){
//ERL == 0
EPC=pc_address_wp;
CPR[14]=pc_address_wp;
}else{
//ERL == 1
ErrorEPC=pc_address_wp;
CPR[30]=pc_address_wp;
}*/
}
}
Status=Status|(0x00000002);
CPR[12]=Status;
Cause=(Cause&(0xffffff03))|(0x00000020); //Exc Code in Cause is 8
CPR[13]=Cause;
instruction_dp=instruction_ip;
instruction_ip=icache(pc_address_ip,0);
pc_ip=(pc_address_ip&(0x0000ffff))/4;
break;
case 16 : //BP general exception
exception_flag=0;
exception_invalid_instr_flag=5;
if(((Status>>22)&(0x00000001)) == 1){
//BEV in Status is one
pc_address_ip=0xbfc00380;
}else{
//BEV in Status is zero
pc_address_ip=0x80000180;
}
if((Status&(0x00000002)) == 0){
if(branch_flag_wp == 1){
EPC=pc_address_wp - 4;
CPR[14]=pc_address_wp - 4;
/* if((Status&(0x00000004)) == 0){
//ERL == 0
EPC=pc_address_wp - 4;
CPR[14]=pc_address_wp - 4;
}else{
//ERL == 1
ErrorEPC=pc_address_wp - 4;
CPR[30]=pc_address_wp - 4;
}*/
}else{
EPC=pc_address_wp;
CPR[14]=pc_address_wp;
/* if((Status&(0x00000004)) == 0){
//ERL == 0
EPC=pc_address_wp;
CPR[14]=pc_address_wp;
}else{
//ERL == 1
ErrorEPC=pc_address_wp;
CPR[30]=pc_address_wp;
}*/
}
}
Status=Status|(0x00000002);
CPR[12]=Status;
Cause=(Cause&(0xffffff03))|(0x00000024); //Exc Code in Cause is 9
CPR[13]=Cause;
instruction_dp=instruction_ip;
instruction_ip=icache(pc_address_ip,0);
pc_ip=(pc_address_ip&(0x0000ffff))/4;
break;
case 17 : //CPU general exception
exception_flag=0;
exception_invalid_instr_flag=5;
if(((Status>>22)&(0x00000001)) == 1){
//BEV in Status is one
pc_address_ip=0xbfc00380;
}else{
//BEV in Status is zero
pc_address_ip=0x80000180;
}
if((Status&(0x00000002)) == 0){
if(branch_flag_wp == 1){
EPC=pc_address_wp - 4;
CPR[14]=pc_address_wp - 4;
/* if((Status&(0x00000004)) == 0){
//ERL == 0
EPC=pc_address_wp - 4;
CPR[14]=pc_address_wp - 4;
}else{
//ERL == 1
ErrorEPC=pc_address_wp - 4;
CPR[30]=pc_address_wp - 4;
}*/
}else{
EPC=pc_address_wp;
CPR[14]=pc_address_wp;
/* if((Status&(0x00000004)) == 0){
//ERL == 0
EPC=pc_address_wp;
CPR[14]=pc_address_wp;
}else{
//ERL == 1
ErrorEPC=pc_address_wp;
CPR[30]=pc_address_wp;
}*/
}
}
Status=Status|(0x00000002);
CPR[12]=Status;
Cause=(Cause&(0xffffff03))|(0x0000002c); //Exc Code in Cause is 11
CPR[13]=Cause;
instruction_dp=instruction_ip;
instruction_ip=icache(pc_address_ip,0);
pc_ip=(pc_address_ip&(0x0000ffff))/4;
break;
case 18 : //RI general exception
exception_flag=0;
exception_invalid_instr_flag=5;
if(((Status>>22)&(0x00000001)) == 1){
//BEV in Status is one
pc_address_ip=0xbfc00380;
}else{
//BEV in Status is zero
pc_address_ip=0x80000180;
}
if((Status&(0x00000002)) == 0){
if(branch_flag_wp == 1){
EPC=pc_address_wp - 4;
CPR[14]=pc_address_wp - 4;
/* if((Status&(0x00000004)) == 0){
//ERL == 0
EPC=pc_address_wp - 4;
CPR[14]=pc_address_wp - 4;
}else{
//ERL == 1
ErrorEPC=pc_address_wp - 4;
CPR[30]=pc_address_wp - 4;
}*/
}else{
EPC=pc_address_wp;
CPR[14]=pc_address_wp;
/* if((Status&(0x00000004)) == 0){
//ERL == 0
EPC=pc_address_wp;
CPR[14]=pc_address_wp;
}else{
//ERL == 1
ErrorEPC=pc_address_wp;
CPR[30]=pc_address_wp;
}*/
}
}
Status=Status|(0x00000002);
CPR[12]=Status;
Cause=(Cause&(0xffffff03))|(0x00000028); //Exc Code in Cause is 10
CPR[13]=Cause;
instruction_dp=instruction_ip;
instruction_ip=icache(pc_address_ip,0);
pc_ip=(pc_address_ip&(0x0000ffff))/4;
break;
case 19 : //OV general exception
exception_flag=0;
exception_invalid_instr_flag=5;
if(((Status>>22)&(0x00000001)) == 1){
//BEV in Status is one
pc_address_ip=0xbfc00380;
}else{
//BEV in Status is zero
pc_address_ip=0x80000180;
}
if((Status&(0x00000002)) == 0){
if(branch_flag_wp == 1){
EPC=pc_address_wp - 4;
CPR[14]=pc_address_wp - 4;
/* if((Status&(0x00000004)) == 0){
//ERL == 0
EPC=pc_address_wp - 4;
CPR[14]=pc_address_wp - 4;
}else{
//ERL == 1
ErrorEPC=pc_address_wp - 4;
CPR[30]=pc_address_wp - 4;
}*/
}else{
EPC=pc_address_wp;
CPR[14]=pc_address_wp;
/* if((Status&(0x00000004)) == 0){
//ERL == 0
EPC=pc_address_wp;
CPR[14]=pc_address_wp;
}else{
//ERL == 1
ErrorEPC=pc_address_wp;
CPR[30]=pc_address_wp;
}*/
}
}
Status=Status|(0x00000002);
CPR[12]=Status;
Cause=(Cause&(0xffffff03))|(0x00000030); //Exc Code in Cause is 12
CPR[13]=Cause;
instruction_dp=instruction_ip;
instruction_ip=icache(pc_address_ip,0);
pc_ip=(pc_address_ip&(0x0000ffff))/4;
break;
case 20 : //TR general exception
exception_flag=0;
exception_invalid_instr_flag=5;
if(((Status>>22)&(0x00000001)) == 1){
//BEV in Status is one
pc_address_ip=0xbfc00380;
}else{
//BEV in Status is zero
pc_address_ip=0x80000180;
}
if((Status&(0x00000002)) == 0){
if(branch_flag_wp == 1){
EPC=pc_address_wp - 4;
CPR[14]=pc_address_wp - 4;
/* if((Status&(0x00000004)) == 0){
//ERL == 0
EPC=pc_address_wp - 4;
CPR[14]=pc_address_wp - 4;
}else{
//ERL == 1
ErrorEPC=pc_address_wp - 4;
CPR[30]=pc_address_wp - 4;
}*/
}else{
EPC=pc_address_wp;
CPR[14]=pc_address_wp;
/* if((Status&(0x00000004)) == 0){
//ERL == 0
EPC=pc_address_wp;
CPR[14]=pc_address_wp;
}else{
//ERL == 1
ErrorEPC=pc_address_wp;
CPR[30]=pc_address_wp;
}*/
}
}
printf("\nStatus=%08x\n",Status);
Status=Status|(0x00000002);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -