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

📄 alu.c

📁 32cpu的代码
💻 C
📖 第 1 页 / 共 5 页
字号:
		                }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 + -