📄 alu.c
字号:
}else if(result_regnum_wp==100){
result_first_ep=result_first_ep + result_first_wp + mult_hi(opa_ep,opb_ep);
}else if(result_regnum_wp==300){
result_first_ep=result_first_ep + result_first_wp + mult_hi(opa_ep,opb_ep);
}else{
result_first_ep=result_first_ep + HI + mult_hi(opa_ep,opb_ep);
}
trap_flag_ep=0;
branch_flag_ep=0;
exception_flag_ep=0;
nullify_flag_ep=0;
#ifdef DEBUG
printf("opa_ep=%08x,opa_ep=%08x,hi=%08x,lo=%08x\n",opa_ep,opb_ep,HI,LO);
#endif
break;
case 1 : printf("current pc value: 0x%08x\ncurrent instruction: maddu \n",pc_address_ep);
printf("instruction code: 0x%08x\n",instruction_ep);
if(result_regnum_mp==200){
result_second_ep=result_first_mp + multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep);
// if(((result_first_mp>0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)>0)&&((result_second_ep<result_first_mp)||(result_second_ep<(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))))||((result_first_mp<0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)<0)&&((result_second_ep>result_first_mp)||(result_second_ep>(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))))){
if(((((result_first_mp < 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) > 0))||((result_first_mp > 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0)))&&(result_second_ep >= 0))||((result_first_mp < 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))){
result_first_ep=1;
}else{
result_first_ep=0;
}
}else if(result_regnum_mp==300){
result_second_ep=result_second_mp + multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep);
// if(((result_second_mp>0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)>0)&&((result_second_ep<result_second_mp)||(result_second_ep<(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))))||((result_second_mp<0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)<0)&&((result_second_ep>result_second_mp)||(result_second_ep>(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))))){
if(((((result_second_mp < 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) > 0))||((result_second_mp > 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0)))&&(result_second_ep >= 0))||((result_second_mp < 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))){
result_first_ep=1;
}else{
result_first_ep=0;
}
}else if(result_regnum_wp==200){
result_second_ep=result_first_wp + multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep);
//if(((result_first_wp>0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)>0)&&((result_second_ep<result_first_wp)||(result_second_ep<(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))))||((result_first_wp<0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)<0)&&((result_second_ep>result_first_wp)||(result_second_ep>(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))))){
if(((((result_first_wp < 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) > 0))||((result_first_wp > 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0)))&&(result_second_ep >= 0))||((result_first_wp < 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))){
result_first_ep=1;
}else{
result_first_ep=0;
}
}else if(result_regnum_wp==300){
result_second_ep=result_second_wp + multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep);
//if(((result_second_wp>0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)>0)&&((result_second_ep<result_second_wp)||(result_second_ep<(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))))||((result_second_wp<0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)<0)&&((result_second_ep>result_second_wp)||(result_second_ep>(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))))){
if(((((result_second_wp < 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) > 0))||((result_second_wp > 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0)))&&(result_second_ep >= 0))||((result_second_wp < 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))){
result_first_ep=1;
}else{
result_first_ep=0;
}
}else{
result_second_ep=LO + mult_lo((unsigned long)opa_ep,(unsigned long)opb_ep);
//if(((LO>0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)>0)&&((result_second_ep<LO)||(result_second_ep<(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))))||((LO<0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)<0)&&((result_second_ep>LO)||(result_second_ep>(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))))){
if(((((LO < 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) > 0))||((LO > 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0)))&&(result_second_ep >= 0))||((LO < 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))){
result_first_ep=1;
}else{
result_first_ep=0;
}
}
if(result_regnum_mp==100){
result_first_ep=result_first_ep + result_first_mp + multu_hi((unsigned long)opa_ep,(unsigned long)opb_ep);
}else if(result_regnum_mp==300){
result_first_ep=result_first_ep + result_first_mp + multu_hi((unsigned long)opa_ep,(unsigned long)opb_ep);
}else if(result_regnum_wp==100){
result_first_ep=result_first_ep + result_first_wp + multu_hi((unsigned long)opa_ep,(unsigned long)opb_ep);
}else if(result_regnum_wp==300){
result_first_ep=result_first_ep + result_first_wp + multu_hi((unsigned long)opa_ep,(unsigned long)opb_ep);
}else{
result_first_ep=result_first_ep + HI + multu_hi((unsigned long)opa_ep,(unsigned long)opb_ep);
}
trap_flag_ep=0;
branch_flag_ep=0;
exception_flag_ep=0;
nullify_flag_ep=0;
break;
case 2 : printf("current pc value: 0x%08x\ncurrent instruction: mul \n",pc_address_ep);
printf("instruction code: 0x%08x\n",instruction_ep);
result_first_ep=opa_ep*opb_ep;
result_second_ep=0;
trap_flag_ep=0;
branch_flag_ep=0;
exception_flag_ep=0;
nullify_flag_ep=0;
break;
case 4 : printf("current pc value: 0x%08x\ncurrent instruction: msub \n",pc_address_ep);
printf("instruction code: 0x%08x\n",instruction_ep);
if(result_regnum_mp==200){
result_second_ep=result_first_mp - mult_lo(opa_ep,opb_ep);
//if(result_first_mp<mult_lo(opa_ep,opb_ep)){
if(((((result_first_mp < 0)&&(mult_lo(opa_ep,opb_ep) < 0))||((result_first_mp > 0)&&(mult_lo(opa_ep,opb_ep) > 0)))&&(result_first_mp < mult_lo(opa_ep,opb_ep)))||((result_first_mp > 0)&&(mult_lo(opa_ep,opb_ep) < 0))||((result_first_mp == 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) != 0))){
result_first_ep=1;
}else{
result_first_ep=0;
}
}else if(result_regnum_mp==300){
result_second_ep=result_second_mp - mult_lo(opa_ep,opb_ep);
//if(result_second_mp<mult_lo(opa_ep,opb_ep)){
if(((((result_second_mp < 0)&&(mult_lo(opa_ep,opb_ep) < 0))||((result_second_mp > 0)&&(mult_lo(opa_ep,opb_ep) > 0)))&&(result_second_mp < mult_lo(opa_ep,opb_ep)))||((result_second_mp > 0)&&(mult_lo(opa_ep,opb_ep) < 0))||((result_second_mp == 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) != 0))){
result_first_ep=1;
}else{
result_first_ep=0;
}
}else if(result_regnum_wp==200){
result_second_ep=result_first_wp - mult_lo(opa_ep,opb_ep);
//if(result_first_wp<mult_lo(opa_ep,opb_ep)){
if(((((result_first_wp < 0)&&(mult_lo(opa_ep,opb_ep) < 0))||((result_first_wp > 0)&&(mult_lo(opa_ep,opb_ep) > 0)))&&(result_first_wp < mult_lo(opa_ep,opb_ep)))||((result_first_wp > 0)&&(mult_lo(opa_ep,opb_ep) < 0))||((result_first_wp == 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) != 0))){
result_first_ep=1;
}else{
result_first_ep=0;
}
}else if(result_regnum_wp==300){
result_second_ep=result_second_wp - mult_lo(opa_ep,opb_ep);
//if(result_second_wp<mult_lo(opa_ep,opb_ep)){
if(((((result_second_wp < 0)&&(mult_lo(opa_ep,opb_ep) < 0))||((result_second_wp > 0)&&(mult_lo(opa_ep,opb_ep) > 0)))&&(result_second_wp < mult_lo(opa_ep,opb_ep)))||((result_second_wp > 0)&&(mult_lo(opa_ep,opb_ep) < 0))||((result_second_wp == 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) != 0))){
result_first_ep=1;
}else{
result_first_ep=0;
}
}else{
result_second_ep=LO - mult_lo(opa_ep,opb_ep);
//if(LO<mult_lo(opa_ep,opb_ep)){
if(((((LO < 0)&&(mult_lo(opa_ep,opb_ep) < 0))||((LO > 0)&&(mult_lo(opa_ep,opb_ep) > 0)))&&(LO < mult_lo(opa_ep,opb_ep)))||((LO > 0)&&(mult_lo(opa_ep,opb_ep) < 0))||((LO == 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) != 0))||((LO == 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) != 0))){
result_first_ep=1;
}else{
result_first_ep=0;
}
}
if(result_regnum_mp==100){
result_first_ep=result_first_mp - mult_hi(opa_ep,opb_ep) - result_first_ep;
}else if(result_regnum_mp==300){
result_first_ep=result_first_mp - mult_hi(opa_ep,opb_ep) - result_first_ep;
}else if(result_regnum_wp==100){
result_first_ep=result_first_wp - mult_hi(opa_ep,opb_ep) - result_first_ep;
}else if(result_regnum_wp==300){
result_first_ep=result_first_wp - mult_hi(opa_ep,opb_ep) - result_first_ep;
}else{
result_first_ep=HI - mult_hi(opa_ep,opb_ep) - result_first_ep;
}
trap_flag_ep=0;
branch_flag_ep=0;
exception_flag_ep=0;
nullify_flag_ep=0;
#ifdef DEBUG
printf("opa_ep=%08x,opa_ep=%08x,hi=%08x,lo=%08x\n",opa_ep,opb_ep,HI,LO);
#endif
break;
case 5 : printf("current pc value: 0x%08x\ncurrent instruction: msubu \n",pc_address_ep);
printf("instruction code: 0x%08x\n",instruction_ep);
if(result_regnum_mp==200){
result_second_ep=result_first_mp - multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep);
//if(result_first_mp<multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)){
if(((((result_first_mp < 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))||((result_first_mp > 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) > 0)))&&(result_first_mp < multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))||((result_first_mp > 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))||((result_first_mp == 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) != 0))){
// if(((((result_first_mp >= 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) >= 0)))&&(result_first_mp < multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))||((result_first_mp >= 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))){
result_first_ep=1;
}else{
result_first_ep=0;
}
}else if(result_regnum_mp==300){
result_second_ep=result_second_mp - multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep);
//if(result_second_mp<multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)){
if(((((result_second_mp < 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))||((result_second_mp > 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) > 0)))&&(result_second_mp < multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))||((result_second_mp > 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))||((result_second_mp == 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) != 0))){
// if(((((result_second_mp >= 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) >= 0)))&&(result_second_mp < multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))||((result_second_mp >= 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))){
result_first_ep=1;
}else{
result_first_ep=0;
}
}else if(result_regnum_wp==200){
result_second_ep=result_first_wp - multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep);
// if(result_first_wp<multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)){
if(((((result_first_wp < 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))||((result_first_wp > 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) > 0)))&&(result_first_wp < multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))||((result_first_wp > 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))||((result_first_wp == 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) != 0))){
// if(((((result_first_wp >= 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) >= 0)))&&(result_first_wp < multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))||((result_first_wp >= 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))){
result_first_ep=1;
}else{
result_first_ep=0;
}
}else if(result_regnum_wp==300){
result_second_ep=result_second_wp - multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep);
// if(result_second_wp<multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)){
if(((((result_second_wp < 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))||((result_second_wp > 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) > 0)))&&(result_second_wp < multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))||((result_second_wp > 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))||((result_second_wp == 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) != 0))){
// if(((((result_second_wp >= 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) >= 0)))&&(result_second_wp < multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))||((result_second_wp >= 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))){
result_first_ep=1;
}else{
result_first_ep=0;
}
}else{
result_second_ep=LO - multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep);
//if(LO<multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)){
if(((((LO < 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))||((LO > 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) > 0)))&&(LO < multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))||((LO > 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))||((LO == 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) != 0))){
// if(((((LO >= 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) >= 0)))&&((unsigned long)LO < multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep)))||((LO >= 0)&&(multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep) < 0))){
result_first_ep=1;
}else{
// printf("lo=%08x, %08x\n",LO,multu_lo((unsigned long)opa_ep,(unsigned long)opb_ep));
result_first_ep=0;
}
}
if(result_regnum_mp==100){
result_first_ep=result_first_mp - multu_hi((unsigned long)opa_ep,(unsigned long)opb_ep) - result_first_ep;
}else if(result_regnum_mp==300){
result_first_ep=result_first_mp - multu_hi((unsigned long)opa_ep,(unsigned long)opb_ep) - result_first_ep;
}else if(result_regnum_wp==100){
result_first_ep=result_first_wp - multu_hi((unsigned long)opa_ep,(unsigned long)opb_ep) - result_first_ep;
}else if(result_regnum_wp==300){
result_first_ep=result_first_wp - multu_hi((unsigned long)opa_ep,(unsigned long)opb_ep) - result_first_ep;
}else{
result_first_ep=HI - multu_hi((unsigned long)opa_ep,(unsigned long)opb_ep) - result_first_ep;
}
trap_flag_ep=0;
branch_flag_ep=0;
exception_flag_ep=0;
nullify_flag_ep=0;
break;
case 32 : printf("current pc value: 0x%08x\ncurrent instruction: clz \n",pc_address_ep);
printf("instruction code: 0x%08x\n",instruction_ep);
result_first_ep=32;
if(opa_ep<0){
result_first_ep=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -