/* Pcsx2 - Pc Ps2 Emulator * Copyright (C) 2002-2005 Pcsx2 Team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "Common.h" #include "InterTables.h" #include "ix86/ix86.h" #include "iR5900.h" #include "iMMI.h" #include "iFPU.h" #include "iCP0.h" #include "VUmicro.h" #include "iVUmicro.h" #include "iVU0micro.h" #include "iVUops.h" #include "VUops.h" #include "iVUzerorec.h" #ifdef __MSCW32__ #pragma warning(disable:4244) #pragma warning(disable:4761) #endif static VURegs * const VU = (VURegs*)&VU0; //u32 vu0time = 0; //static LARGE_INTEGER vu0base, vu0final; #ifdef PCSX2_DEVBUILD extern u32 vudump; #endif #define VF_VAL(x) ((x==0x80000000)?0:x) static u32 vuprogcount = 0; void iDumpVU0Registers() { int i; for(i = 1; i < 32; ++i) { __Log("v%d: %x %x %x %x, vi: ", i, VF_VAL(VU0.VF[i].UL[3]), VF_VAL(VU0.VF[i].UL[2]), VF_VAL(VU0.VF[i].UL[1]), VF_VAL(VU0.VF[i].UL[0])); if( i == REG_Q || i == REG_P ) __Log("%f\n", VU0.VI[i].F); else if( i == REG_MAC_FLAG ) __Log("%x\n", VU0.VI[i].UL&0xff); else if( i == REG_STATUS_FLAG ) __Log("%x\n", VU0.VI[i].UL&0x03); else if( i == REG_CLIP_FLAG ) __Log("0\n"); else __Log("%x\n", VU0.VI[i].UL); } __Log("vfACC: %f %f %f %f\n", VU0.ACC.F[3], VU0.ACC.F[2], VU0.ACC.F[1], VU0.ACC.F[0]); } void recExecuteVU0Block( void ) { //SysPrintf("executeVU0 %x\n", VU0.VI[ REG_TPC ].UL); //QueryPerformanceCounter(&vu0base); assert( VU0.VI[REG_VPU_STAT].UL & 1 ); #ifdef _DEBUG vuprogcount++; // __Log("VU: %x %x\n", VU0.VI[ REG_TPC ].UL, vuprogcount); // iDumpVU0Registers(); //vudump |= 0x10; //vudump |= 8; if( (vudump&8) && !CHECK_VU0REC ) { __Log("tVU: %x\n", VU0.VI[ REG_TPC ].UL); iDumpVU0Registers(); } #endif ///while( (VU0.VI[ REG_VPU_STAT ].UL&1) ) { if( CHECK_VU0REC) { FreezeXMMRegs(1); SuperVUExecuteProgram(VU0.VI[ REG_TPC ].UL, 0); } else { intExecuteVU0Block(); } //} // __Log("eVU: %x %x\n", VU0.VI[ REG_TPC ].UL, vuprogcount); // iDumpVU0Registers(); // QueryPerformanceCounter(&vu0final); // vu0time += (u32)(vu0final.QuadPart-vu0final.QuadPart); } void recClearVU0( u32 Addr, u32 Size ) { if( CHECK_VU0REC ) { SuperVUClear(Addr, Size*4, 0); } } void (*recVU0_LOWER_OPCODE[128])() = { recVU0MI_LQ , recVU0MI_SQ , recVU0unknown , recVU0unknown, recVU0MI_ILW , recVU0MI_ISW , recVU0unknown , recVU0unknown, recVU0MI_IADDIU, recVU0MI_ISUBIU, recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0MI_FCEQ , recVU0MI_FCSET , recVU0MI_FCAND, recVU0MI_FCOR, /* 0x10 */ recVU0MI_FSEQ , recVU0MI_FSSET , recVU0MI_FSAND, recVU0MI_FSOR, recVU0MI_FMEQ , recVU0unknown , recVU0MI_FMAND, recVU0MI_FMOR, recVU0MI_FCGET , recVU0unknown , recVU0unknown , recVU0unknown, recVU0MI_B , recVU0MI_BAL , recVU0unknown , recVU0unknown, /* 0x20 */ recVU0MI_JR , recVU0MI_JALR , recVU0unknown , recVU0unknown, recVU0MI_IBEQ , recVU0MI_IBNE , recVU0unknown , recVU0unknown, recVU0MI_IBLTZ , recVU0MI_IBGTZ , recVU0MI_IBLEZ, recVU0MI_IBGEZ, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, /* 0x30 */ recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0LowerOP , recVU0unknown , recVU0unknown , recVU0unknown, /* 0x40*/ recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, /* 0x50 */ recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, /* 0x60 */ recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, /* 0x70 */ recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, }; void (*recVU0LowerOP_T3_00_OPCODE[32])() = { recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0MI_MOVE , recVU0MI_LQI , recVU0MI_DIV , recVU0MI_MTIR, recVU0MI_RNEXT , recVU0unknown , recVU0unknown , recVU0unknown, /* 0x10 */ recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0MI_MFP , recVU0unknown , recVU0unknown, recVU0MI_ESADD , recVU0MI_EATANxy, recVU0MI_ESQRT, recVU0MI_ESIN, }; void (*recVU0LowerOP_T3_01_OPCODE[32])() = { recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0MI_MR32 , recVU0MI_SQI , recVU0MI_SQRT , recVU0MI_MFIR, recVU0MI_RGET , recVU0unknown , recVU0unknown , recVU0unknown, /* 0x10 */ recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0MI_XITOP, recVU0unknown, recVU0MI_ERSADD, recVU0MI_EATANxz, recVU0MI_ERSQRT, recVU0MI_EATAN, }; void (*recVU0LowerOP_T3_10_OPCODE[32])() = { recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0MI_LQD , recVU0MI_RSQRT, recVU0MI_ILWR, recVU0MI_RINIT , recVU0unknown , recVU0unknown , recVU0unknown, /* 0x10 */ recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0MI_ELENG , recVU0MI_ESUM , recVU0MI_ERCPR, recVU0MI_EEXP, }; void (*recVU0LowerOP_T3_11_OPCODE[32])() = { recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0MI_SQD , recVU0MI_WAITQ, recVU0MI_ISWR, recVU0MI_RXOR , recVU0unknown , recVU0unknown , recVU0unknown, /* 0x10 */ recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0MI_ERLENG, recVU0unknown , recVU0MI_WAITP, recVU0unknown, }; void (*recVU0LowerOP_OPCODE[64])() = { recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, /* 0x10 */ recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, /* 0x20 */ recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0MI_IADD , recVU0MI_ISUB , recVU0MI_IADDI, recVU0unknown, /* 0x30 */ recVU0MI_IAND , recVU0MI_IOR , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0LowerOP_T3_00, recVU0LowerOP_T3_01, recVU0LowerOP_T3_10, recVU0LowerOP_T3_11, }; void (*recVU0_UPPER_OPCODE[64])() = { recVU0MI_ADDx , recVU0MI_ADDy , recVU0MI_ADDz , recVU0MI_ADDw, recVU0MI_SUBx , recVU0MI_SUBy , recVU0MI_SUBz , recVU0MI_SUBw, recVU0MI_MADDx , recVU0MI_MADDy , recVU0MI_MADDz , recVU0MI_MADDw, recVU0MI_MSUBx , recVU0MI_MSUBy , recVU0MI_MSUBz , recVU0MI_MSUBw, recVU0MI_MAXx , recVU0MI_MAXy , recVU0MI_MAXz , recVU0MI_MAXw, /* 0x10 */ recVU0MI_MINIx , recVU0MI_MINIy , recVU0MI_MINIz , recVU0MI_MINIw, recVU0MI_MULx , recVU0MI_MULy , recVU0MI_MULz , recVU0MI_MULw, recVU0MI_MULq , recVU0MI_MAXi , recVU0MI_MULi , recVU0MI_MINIi, recVU0MI_ADDq , recVU0MI_MADDq , recVU0MI_ADDi , recVU0MI_MADDi, /* 0x20 */ recVU0MI_SUBq , recVU0MI_MSUBq , recVU0MI_SUBi , recVU0MI_MSUBi, recVU0MI_ADD , recVU0MI_MADD , recVU0MI_MUL , recVU0MI_MAX, recVU0MI_SUB , recVU0MI_MSUB , recVU0MI_OPMSUB, recVU0MI_MINI, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, /* 0x30 */ recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown, recVU0_UPPER_FD_00, recVU0_UPPER_FD_01, recVU0_UPPER_FD_10, recVU0_UPPER_FD_11, }; void (*recVU0_UPPER_FD_00_TABLE[32])() = { recVU0MI_ADDAx, recVU0MI_SUBAx , recVU0MI_MADDAx, recVU0MI_MSUBAx, recVU0MI_ITOF0, recVU0MI_FTOI0, recVU0MI_MULAx , recVU0MI_MULAq , recVU0MI_ADDAq, recVU0MI_SUBAq, recVU0MI_ADDA , recVU0MI_SUBA , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , }; void (*recVU0_UPPER_FD_01_TABLE[32])() = { recVU0MI_ADDAy , recVU0MI_SUBAy , recVU0MI_MADDAy, recVU0MI_MSUBAy, recVU0MI_ITOF4 , recVU0MI_FTOI4 , recVU0MI_MULAy , recVU0MI_ABS , recVU0MI_MADDAq, recVU0MI_MSUBAq, recVU0MI_MADDA , recVU0MI_MSUBA , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , }; void (*recVU0_UPPER_FD_10_TABLE[32])() = { recVU0MI_ADDAz , recVU0MI_SUBAz , recVU0MI_MADDAz, recVU0MI_MSUBAz, recVU0MI_ITOF12, recVU0MI_FTOI12, recVU0MI_MULAz , recVU0MI_MULAi , recVU0MI_MADDAi, recVU0MI_SUBAi , recVU0MI_MULA , recVU0MI_OPMULA, recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , }; void (*recVU0_UPPER_FD_11_TABLE[32])() = { recVU0MI_ADDAw , recVU0MI_SUBAw , recVU0MI_MADDAw, recVU0MI_MSUBAw, recVU0MI_ITOF15, recVU0MI_FTOI15, recVU0MI_MULAw , recVU0MI_CLIP , recVU0MI_MADDAi, recVU0MI_MSUBAi, recVU0unknown , recVU0MI_NOP , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , recVU0unknown , }; void recVU0_UPPER_FD_00( void ) { recVU0_UPPER_FD_00_TABLE[ ( VU0.code >> 6 ) & 0x1f ]( ); } void recVU0_UPPER_FD_01( void ) { recVU0_UPPER_FD_01_TABLE[ ( VU0.code >> 6 ) & 0x1f ]( ); } void recVU0_UPPER_FD_10( void ) { recVU0_UPPER_FD_10_TABLE[ ( VU0.code >> 6 ) & 0x1f ]( ); } void recVU0_UPPER_FD_11( void ) { recVU0_UPPER_FD_11_TABLE[ ( VU0.code >> 6 ) & 0x1f ]( ); } void recVU0LowerOP( void ) { recVU0LowerOP_OPCODE[ VU0.code & 0x3f ]( ); } void recVU0LowerOP_T3_00( void ) { recVU0LowerOP_T3_00_OPCODE[ ( VU0.code >> 6 ) & 0x1f ]( ); } void recVU0LowerOP_T3_01( void ) { recVU0LowerOP_T3_01_OPCODE[ ( VU0.code >> 6 ) & 0x1f ]( ); } void recVU0LowerOP_T3_10( void ) { recVU0LowerOP_T3_10_OPCODE[ ( VU0.code >> 6 ) & 0x1f ]( ); } void recVU0LowerOP_T3_11( void ) { recVU0LowerOP_T3_11_OPCODE[ ( VU0.code >> 6 ) & 0x1f ]( ); } void recVU0unknown( void ) { #ifdef CPU_LOG CPU_LOG("Unknown VU0 micromode opcode calledn"); #endif } /****************************************/ /* VU Micromode Upper instructions */ /****************************************/ #ifdef RECOMPILE_VUMI_ABS void recVU0MI_ABS() { recVUMI_ABS(VU, VUREC_INFO); } #else void recVU0MI_ABS() { REC_VUOP(VU0, ABS); } #endif #ifdef RECOMPILE_VUMI_ADD void recVU0MI_ADD() { recVUMI_ADD(VU, VUREC_INFO); } void recVU0MI_ADDi() { recVUMI_ADDi(VU, VUREC_INFO); } void recVU0MI_ADDq() { recVUMI_ADDq(VU, VUREC_INFO); } void recVU0MI_ADDx() { recVUMI_ADDx(VU, VUREC_INFO); } void recVU0MI_ADDy() { recVUMI_ADDy(VU, VUREC_INFO); } void recVU0MI_ADDz() { recVUMI_ADDz(VU, VUREC_INFO); } void recVU0MI_ADDw() { recVUMI_ADDw(VU, VUREC_INFO); } #else void recVU0MI_ADD() { REC_VUOP(VU0, ADD); } void recVU0MI_ADDi() { REC_VUOP(VU0, ADDi); } void recVU0MI_ADDq() { REC_VUOP(VU0, ADDq); } void recVU0MI_ADDx() { REC_VUOP(VU0, ADDx); } void recVU0MI_ADDy() { REC_VUOP(VU0, ADDy); } void recVU0MI_ADDz() { REC_VUOP(VU0, ADDz); } void recVU0MI_ADDw() { REC_VUOP(VU0, ADDw); } #endif #ifdef RECOMPILE_VUMI_ADDA void recVU0MI_ADDA() { recVUMI_ADDA(VU, VUREC_INFO); } void recVU0MI_ADDAi() { recVUMI_ADDAi(VU, VUREC_INFO); } void recVU0MI_ADDAq() { recVUMI_ADDAq(VU, VUREC_INFO); } void recVU0MI_ADDAx() { recVUMI_ADDAx(VU, VUREC_INFO); } void recVU0MI_ADDAy() { recVUMI_ADDAy(VU, VUREC_INFO); } void recVU0MI_ADDAz() { recVUMI_ADDAz(VU, VUREC_INFO); } void recVU0MI_ADDAw() { recVUMI_ADDAw(VU, VUREC_INFO); } #else void recVU0MI_ADDA() { REC_VUOP(VU0, ADDA); } void recVU0MI_ADDAi() { REC_VUOP(VU0, ADDAi); } void recVU0MI_ADDAq() { REC_VUOP(VU0, ADDAq); } void recVU0MI_ADDAx() { REC_VUOP(VU0, ADDAx); } void recVU0MI_ADDAy() { REC_VUOP(VU0, ADDAy); } void recVU0MI_ADDAz() { REC_VUOP(VU0, ADDAz); } void recVU0MI_ADDAw() { REC_VUOP(VU0, ADDAw); } #endif #ifdef RECOMPILE_VUMI_SUB void recVU0MI_SUB() { recVUMI_SUB(VU, VUREC_INFO); } void recVU0MI_SUBi() { recVUMI_SUBi(VU, VUREC_INFO); } void recVU0MI_SUBq() { recVUMI_SUBq(VU, VUREC_INFO); } void recVU0MI_SUBx() { recVUMI_SUBx(VU, VUREC_INFO); } void recVU0MI_SUBy() { recVUMI_SUBy(VU, VUREC_INFO); } void recVU0MI_SUBz() { recVUMI_SUBz(VU, VUREC_INFO); } void recVU0MI_SUBw() { recVUMI_SUBw(VU, VUREC_INFO); } #else void recVU0MI_SUB() { REC_VUOP(VU0, SUB); } void recVU0MI_SUBi() { REC_VUOP(VU0, SUBi); } void recVU0MI_SUBq() { REC_VUOP(VU0, SUBq); } void recVU0MI_SUBx() { REC_VUOP(VU0, SUBx); } void recVU0MI_SUBy() { REC_VUOP(VU0, SUBy); } void recVU0MI_SUBz() { REC_VUOP(VU0, SUBz); } void recVU0MI_SUBw() { REC_VUOP(VU0, SUBw); } #endif #ifdef RECOMPILE_VUMI_SUBA void recVU0MI_SUBA() { recVUMI_SUBA(VU, VUREC_INFO); } void recVU0MI_SUBAi() { recVUMI_SUBAi(VU, VUREC_INFO); } void recVU0MI_SUBAq() { recVUMI_SUBAq(VU, VUREC_INFO); } void recVU0MI_SUBAx() { recVUMI_SUBAx(VU, VUREC_INFO); } void recVU0MI_SUBAy() { recVUMI_SUBAy(VU, VUREC_INFO); } void recVU0MI_SUBAz() { recVUMI_SUBAz(VU, VUREC_INFO); } void recVU0MI_SUBAw() { recVUMI_SUBAw(VU, VUREC_INFO); } #else void recVU0MI_SUBA() { REC_VUOP(VU0, SUBA); } void recVU0MI_SUBAi() { REC_VUOP(VU0, SUBAi); } void recVU0MI_SUBAq() { REC_VUOP(VU0, SUBAq); } void recVU0MI_SUBAx() { REC_VUOP(VU0, SUBAx); } void recVU0MI_SUBAy() { REC_VUOP(VU0, SUBAy); } void recVU0MI_SUBAz() { REC_VUOP(VU0, SUBAz); } void recVU0MI_SUBAw() { REC_VUOP(VU0, SUBAw); } #endif #ifdef RECOMPILE_VUMI_MUL void recVU0MI_MUL() { recVUMI_MUL(VU, VUREC_INFO); } void recVU0MI_MULi() { recVUMI_MULi(VU, VUREC_INFO); } void recVU0MI_MULq() { recVUMI_MULq(VU, VUREC_INFO); } void recVU0MI_MULx() { recVUMI_MULx(VU, VUREC_INFO); } void recVU0MI_MULy() { recVUMI_MULy(VU, VUREC_INFO); } void recVU0MI_MULz() { recVUMI_MULz(VU, VUREC_INFO); } void recVU0MI_MULw() { recVUMI_MULw(VU, VUREC_INFO); } #else void recVU0MI_MUL() { REC_VUOP(VU0, MUL); } void recVU0MI_MULi() { REC_VUOP(VU0, MULi); } void recVU0MI_MULq() { REC_VUOP(VU0, MULq); } void recVU0MI_MULx() { REC_VUOP(VU0, MULx); } void recVU0MI_MULy() { REC_VUOP(VU0, MULy); } void recVU0MI_MULz() { REC_VUOP(VU0, MULz); } void recVU0MI_MULw() { REC_VUOP(VU0, MULw); } #endif #ifdef RECOMPILE_VUMI_MULA void recVU0MI_MULA() { recVUMI_MULA(VU, VUREC_INFO); } void recVU0MI_MULAi() { recVUMI_MULAi(VU, VUREC_INFO); } void recVU0MI_MULAq() { recVUMI_MULAq(VU, VUREC_INFO); } void recVU0MI_MULAx() { recVUMI_MULAx(VU, VUREC_INFO); } void recVU0MI_MULAy() { recVUMI_MULAy(VU, VUREC_INFO); } void recVU0MI_MULAz() { recVUMI_MULAz(VU, VUREC_INFO); } void recVU0MI_MULAw() { recVUMI_MULAw(VU, VUREC_INFO); } #else void recVU0MI_MULA() { REC_VUOP(VU0, MULA); } void recVU0MI_MULAi() { REC_VUOP(VU0, MULAi); } void recVU0MI_MULAq() { REC_VUOP(VU0, MULAq); } void recVU0MI_MULAx() { REC_VUOP(VU0, MULAx); } void recVU0MI_MULAy() { REC_VUOP(VU0, MULAy); } void recVU0MI_MULAz() { REC_VUOP(VU0, MULAz); } void recVU0MI_MULAw() { REC_VUOP(VU0, MULAw); } #endif #ifdef RECOMPILE_VUMI_MADD void recVU0MI_MADD() { recVUMI_MADD(VU, VUREC_INFO); } void recVU0MI_MADDi() { recVUMI_MADDi(VU, VUREC_INFO); } void recVU0MI_MADDq() { recVUMI_MADDq(VU, VUREC_INFO); } void recVU0MI_MADDx() { recVUMI_MADDx(VU, VUREC_INFO); } void recVU0MI_MADDy() { recVUMI_MADDy(VU, VUREC_INFO); } void recVU0MI_MADDz() { recVUMI_MADDz(VU, VUREC_INFO); } void recVU0MI_MADDw() { recVUMI_MADDw(VU, VUREC_INFO); } #else void recVU0MI_MADD() { REC_VUOP(VU0, MADD); } void recVU0MI_MADDi() { REC_VUOP(VU0, MADDi); } void recVU0MI_MADDq() { REC_VUOP(VU0, MADDq); } void recVU0MI_MADDx() { REC_VUOP(VU0, MADDx); } void recVU0MI_MADDy() { REC_VUOP(VU0, MADDy); } void recVU0MI_MADDz() { REC_VUOP(VU0, MADDz); } void recVU0MI_MADDw() { REC_VUOP(VU0, MADDw); } #endif #ifdef RECOMPILE_VUMI_MADDA void recVU0MI_MADDA() { recVUMI_MADDA(VU, VUREC_INFO); } void recVU0MI_MADDAi() { recVUMI_MADDAi(VU, VUREC_INFO); } void recVU0MI_MADDAq() { recVUMI_MADDAq(VU, VUREC_INFO); } void recVU0MI_MADDAx() { recVUMI_MADDAx(VU, VUREC_INFO); } void recVU0MI_MADDAy() { recVUMI_MADDAy(VU, VUREC_INFO); } void recVU0MI_MADDAz() { recVUMI_MADDAz(VU, VUREC_INFO); } void recVU0MI_MADDAw() { recVUMI_MADDAw(VU, VUREC_INFO); } #else void recVU0MI_MADDA() { REC_VUOP(VU0, MADDA); } void recVU0MI_MADDAi() { REC_VUOP(VU0, MADDAi); } void recVU0MI_MADDAq() { REC_VUOP(VU0, MADDAq); } void recVU0MI_MADDAx() { REC_VUOP(VU0, MADDAx); } void recVU0MI_MADDAy() { REC_VUOP(VU0, MADDAy); } void recVU0MI_MADDAz() { REC_VUOP(VU0, MADDAz); } void recVU0MI_MADDAw() { REC_VUOP(VU0, MADDAw); } #endif #ifdef RECOMPILE_VUMI_MSUB void recVU0MI_MSUB() { recVUMI_MSUB(VU, VUREC_INFO); } void recVU0MI_MSUBi() { recVUMI_MSUBi(VU, VUREC_INFO); } void recVU0MI_MSUBq() { recVUMI_MSUBq(VU, VUREC_INFO); } void recVU0MI_MSUBx() { recVUMI_MSUBx(VU, VUREC_INFO); } void recVU0MI_MSUBy() { recVUMI_MSUBy(VU, VUREC_INFO); } void recVU0MI_MSUBz() { recVUMI_MSUBz(VU, VUREC_INFO); } void recVU0MI_MSUBw() { recVUMI_MSUBw(VU, VUREC_INFO); } #else void recVU0MI_MSUB() { REC_VUOP(VU0, MSUB); } void recVU0MI_MSUBi() { REC_VUOP(VU0, MSUBi); } void recVU0MI_MSUBq() { REC_VUOP(VU0, MSUBq); } void recVU0MI_MSUBx() { REC_VUOP(VU0, MSUBx); } void recVU0MI_MSUBy() { REC_VUOP(VU0, MSUBy); } void recVU0MI_MSUBz() { REC_VUOP(VU0, MSUBz); } void recVU0MI_MSUBw() { REC_VUOP(VU0, MSUBw); } #endif #ifdef RECOMPILE_VUMI_MSUBA void recVU0MI_MSUBA() { recVUMI_MSUBA(VU, VUREC_INFO); } void recVU0MI_MSUBAi() { recVUMI_MSUBAi(VU, VUREC_INFO); } void recVU0MI_MSUBAq() { recVUMI_MSUBAq(VU, VUREC_INFO); } void recVU0MI_MSUBAx() { recVUMI_MSUBAx(VU, VUREC_INFO); } void recVU0MI_MSUBAy() { recVUMI_MSUBAy(VU, VUREC_INFO); } void recVU0MI_MSUBAz() { recVUMI_MSUBAz(VU, VUREC_INFO); } void recVU0MI_MSUBAw() { recVUMI_MSUBAw(VU, VUREC_INFO); } #else void recVU0MI_MSUBA() { REC_VUOP(VU0, MSUBA); } void recVU0MI_MSUBAi() { REC_VUOP(VU0, MSUBAi); } void recVU0MI_MSUBAq() { REC_VUOP(VU0, MSUBAq); } void recVU0MI_MSUBAx() { REC_VUOP(VU0, MSUBAx); } void recVU0MI_MSUBAy() { REC_VUOP(VU0, MSUBAy); } void recVU0MI_MSUBAz() { REC_VUOP(VU0, MSUBAz); } void recVU0MI_MSUBAw() { REC_VUOP(VU0, MSUBAw); } #endif #ifdef RECOMPILE_VUMI_MAX void recVU0MI_MAX() { recVUMI_MAX(VU, VUREC_INFO); } void recVU0MI_MAXi() { recVUMI_MAXi(VU, VUREC_INFO); } void recVU0MI_MAXx() { recVUMI_MAXx(VU, VUREC_INFO); } void recVU0MI_MAXy() { recVUMI_MAXy(VU, VUREC_INFO); } void recVU0MI_MAXz() { recVUMI_MAXz(VU, VUREC_INFO); } void recVU0MI_MAXw() { recVUMI_MAXw(VU, VUREC_INFO); } #else void recVU0MI_MAX() { REC_VUOP(VU0, MAX); } void recVU0MI_MAXi() { REC_VUOP(VU0, MAXi); } void recVU0MI_MAXx() { REC_VUOP(VU0, MAXx); } void recVU0MI_MAXy() { REC_VUOP(VU0, MAXy); } void recVU0MI_MAXz() { REC_VUOP(VU0, MAXz); } void recVU0MI_MAXw() { REC_VUOP(VU0, MAXw); } #endif #ifdef RECOMPILE_VUMI_MINI void recVU0MI_MINI() { recVUMI_MINI(VU, VUREC_INFO); } void recVU0MI_MINIi() { recVUMI_MINIi(VU, VUREC_INFO); } void recVU0MI_MINIx() { recVUMI_MINIx(VU, VUREC_INFO); } void recVU0MI_MINIy() { recVUMI_MINIy(VU, VUREC_INFO); } void recVU0MI_MINIz() { recVUMI_MINIz(VU, VUREC_INFO); } void recVU0MI_MINIw() { recVUMI_MINIw(VU, VUREC_INFO); } #else void recVU0MI_MINI() { REC_VUOP(VU0, MINI); } void recVU0MI_MINIi() { REC_VUOP(VU0, MINIi); } void recVU0MI_MINIx() { REC_VUOP(VU0, MINIx); } void recVU0MI_MINIy() { REC_VUOP(VU0, MINIy); } void recVU0MI_MINIz() { REC_VUOP(VU0, MINIz); } void recVU0MI_MINIw() { REC_VUOP(VU0, MINIw); } #endif #ifdef RECOMPILE_VUMI_FTOI void recVU0MI_FTOI0() { recVUMI_FTOI0(VU, VUREC_INFO); } void recVU0MI_FTOI4() { recVUMI_FTOI4(VU, VUREC_INFO); } void recVU0MI_FTOI12() { recVUMI_FTOI12(VU, VUREC_INFO); } void recVU0MI_FTOI15() { recVUMI_FTOI15(VU, VUREC_INFO); } void recVU0MI_ITOF0() { recVUMI_ITOF0(VU, VUREC_INFO); } void recVU0MI_ITOF4() { recVUMI_ITOF4(VU, VUREC_INFO); } void recVU0MI_ITOF12() { recVUMI_ITOF12(VU, VUREC_INFO); } void recVU0MI_ITOF15() { recVUMI_ITOF15(VU, VUREC_INFO); } #else void recVU0MI_FTOI0() { REC_VUOP(VU0, FTOI0); } void recVU0MI_FTOI4() { REC_VUOP(VU0, FTOI4); } void recVU0MI_FTOI12() { REC_VUOP(VU0, FTOI12); } void recVU0MI_FTOI15() { REC_VUOP(VU0, FTOI15); } void recVU0MI_ITOF0() { REC_VUOP(VU0, ITOF0); } void recVU0MI_ITOF4() { REC_VUOP(VU0, ITOF4); } void recVU0MI_ITOF12() { REC_VUOP(VU0, ITOF12); } void recVU0MI_ITOF15() { REC_VUOP(VU0, ITOF15); } #endif void recVU0MI_OPMULA() { recVUMI_OPMULA(VU, VUREC_INFO); } void recVU0MI_OPMSUB() { recVUMI_OPMSUB(VU, VUREC_INFO); } void recVU0MI_NOP() { } void recVU0MI_CLIP() { recVUMI_CLIP(VU, VUREC_INFO); } /*****************************************/ /* VU Micromode Lower instructions */ /*****************************************/ #ifdef RECOMPILE_VUMI_MISC void recVU0MI_MTIR() { recVUMI_MTIR(VU, VUREC_INFO); } void recVU0MI_MR32() { recVUMI_MR32(VU, VUREC_INFO); } void recVU0MI_MFIR() { recVUMI_MFIR(VU, VUREC_INFO); } void recVU0MI_MOVE() { recVUMI_MOVE(VU, VUREC_INFO); } void recVU0MI_WAITQ() { recVUMI_WAITQ(VU, VUREC_INFO); } void recVU0MI_MFP() { recVUMI_MFP(VU, VUREC_INFO); } void recVU0MI_WAITP() { SysPrintf("vu0 wait p?\n"); } #else void recVU0MI_MOVE() { REC_VUOP(VU0, MOVE); } void recVU0MI_MFIR() { REC_VUOP(VU0, MFIR); } void recVU0MI_MTIR() { REC_VUOP(VU0, MTIR); } void recVU0MI_MR32() { REC_VUOP(VU0, MR32); } void recVU0MI_WAITQ() { } void recVU0MI_MFP() { REC_VUOP(VU0, MFP); } void recVU0MI_WAITP() { REC_VUOP(VU0, WAITP); } #endif #ifdef RECOMPILE_VUMI_MATH void recVU0MI_SQRT() { recVUMI_SQRT(VU, VUREC_INFO); } void recVU0MI_RSQRT() { recVUMI_RSQRT(VU, VUREC_INFO); } void recVU0MI_DIV() { recVUMI_DIV(VU, VUREC_INFO); } #else void recVU0MI_DIV() { REC_VUOP(VU0, DIV);} void recVU0MI_SQRT() { REC_VUOP(VU0, SQRT); } void recVU0MI_RSQRT() { REC_VUOP(VU0, RSQRT); } #endif #ifdef RECOMPILE_VUMI_E void recVU0MI_ESADD() { REC_VUOP(VU0, ESADD); } void recVU0MI_ERSADD() { REC_VUOP(VU0, ERSADD); } void recVU0MI_ELENG() { recVUMI_ELENG(VU, VUREC_INFO); } void recVU0MI_ERLENG() { REC_VUOP(VU0, ERLENG); } void recVU0MI_EATANxy() { REC_VUOP(VU0, EATANxy); } void recVU0MI_EATANxz() { REC_VUOP(VU0, EATANxz); } void recVU0MI_ESUM() { REC_VUOP(VU0, ESUM); } void recVU0MI_ERCPR() { REC_VUOP(VU0, ERCPR); } void recVU0MI_ESQRT() { REC_VUOP(VU0, ESQRT); } void recVU0MI_ERSQRT() { REC_VUOP(VU0, ERSQRT); } void recVU0MI_ESIN() { REC_VUOP(VU0, ESIN); } void recVU0MI_EATAN() { REC_VUOP(VU0, EATAN); } void recVU0MI_EEXP() { REC_VUOP(VU0, EEXP); } #else void recVU0MI_ESADD() { REC_VUOP(VU0, ESADD); } void recVU0MI_ERSADD() { REC_VUOP(VU0, ERSADD); } void recVU0MI_ELENG() { REC_VUOP(VU0, ELENG); } void recVU0MI_ERLENG() { REC_VUOP(VU0, ERLENG); } void recVU0MI_EATANxy() { REC_VUOP(VU0, EATANxy); } void recVU0MI_EATANxz() { REC_VUOP(VU0, EATANxz); } void recVU0MI_ESUM() { REC_VUOP(VU0, ESUM); } void recVU0MI_ERCPR() { REC_VUOP(VU0, ERCPR); } void recVU0MI_ESQRT() { REC_VUOP(VU0, ESQRT); } void recVU0MI_ERSQRT() { REC_VUOP(VU0, ERSQRT); } void recVU0MI_ESIN() { REC_VUOP(VU0, ESIN); } void recVU0MI_EATAN() { REC_VUOP(VU0, EATAN); } void recVU0MI_EEXP() { REC_VUOP(VU0, EEXP); } #endif #ifdef RECOMPILE_VUMI_X void recVU0MI_XITOP() { recVUMI_XITOP(VU, VUREC_INFO); } void recVU0MI_XGKICK() { recVUMI_XGKICK(VU, VUREC_INFO); } void recVU0MI_XTOP() { recVUMI_XTOP(VU, VUREC_INFO); } #else void recVU0MI_XITOP() { REC_VUOP(VU0, XITOP); } void recVU0MI_XGKICK() { REC_VUOP(VU0, XGKICK);} void recVU0MI_XTOP() { REC_VUOP(VU0, XTOP);} #endif #ifdef RECOMPILE_VUMI_RANDOM void recVU0MI_RINIT() { recVUMI_RINIT(VU, VUREC_INFO); } void recVU0MI_RGET() { recVUMI_RGET(VU, VUREC_INFO); } void recVU0MI_RNEXT() { recVUMI_RNEXT(VU, VUREC_INFO); } void recVU0MI_RXOR() { recVUMI_RXOR(VU, VUREC_INFO); } #else void recVU0MI_RINIT() { REC_VUOP(VU0, RINIT); } void recVU0MI_RGET() { REC_VUOP(VU0, RGET); } void recVU0MI_RNEXT() { REC_VUOP(VU0, RNEXT); } void recVU0MI_RXOR() { REC_VUOP(VU0, RXOR); } #endif #ifdef RECOMPILE_VUMI_FLAG void recVU0MI_FSAND() { recVUMI_FSAND(VU, VUREC_INFO); } void recVU0MI_FSEQ() { recVUMI_FSEQ(VU, VUREC_INFO); } void recVU0MI_FSOR() { recVUMI_FSOR(VU, VUREC_INFO); } void recVU0MI_FSSET() { recVUMI_FSSET(VU, VUREC_INFO); } void recVU0MI_FMEQ() { recVUMI_FMEQ(VU, VUREC_INFO); } void recVU0MI_FMOR() { recVUMI_FMOR(VU, VUREC_INFO); } void recVU0MI_FCEQ() { recVUMI_FCEQ(VU, VUREC_INFO); } void recVU0MI_FCOR() { recVUMI_FCOR(VU, VUREC_INFO); } void recVU0MI_FCSET() { recVUMI_FCSET(VU, VUREC_INFO); } void recVU0MI_FCGET() { recVUMI_FCGET(VU, VUREC_INFO); } void recVU0MI_FCAND() { recVUMI_FCAND(VU, VUREC_INFO); } void recVU0MI_FMAND() { recVUMI_FMAND(VU, VUREC_INFO); } #else void recVU0MI_FSAND() { REC_VUOP(VU0, FSAND); } void recVU0MI_FSEQ() { REC_VUOP(VU0, FSEQ); } void recVU0MI_FSOR() { REC_VUOP(VU0, FSOR); } void recVU0MI_FSSET() { REC_VUOP(VU0, FSSET); } void recVU0MI_FMAND() { REC_VUOP(VU0, FMAND); } void recVU0MI_FMEQ() { REC_VUOP(VU0, FMEQ); } void recVU0MI_FMOR() { REC_VUOP(VU0, FMOR); } void recVU0MI_FCAND() { REC_VUOP(VU0, FCAND); } void recVU0MI_FCEQ() { REC_VUOP(VU0, FCEQ); } void recVU0MI_FCOR() { REC_VUOP(VU0, FCOR); } void recVU0MI_FCSET() { REC_VUOP(VU0, FCSET); } void recVU0MI_FCGET() { REC_VUOP(VU0, FCGET); } #endif #ifdef RECOMPILE_VUMI_LOADSTORE void recVU0MI_LQ() { recVUMI_LQ(VU, VUREC_INFO); } void recVU0MI_LQD() { recVUMI_LQD(VU, VUREC_INFO); } void recVU0MI_LQI() { recVUMI_LQI(VU, VUREC_INFO); } void recVU0MI_SQ() { recVUMI_SQ(VU, VUREC_INFO); } void recVU0MI_SQD() { recVUMI_SQD(VU, VUREC_INFO); } void recVU0MI_SQI() { recVUMI_SQI(VU, VUREC_INFO); } void recVU0MI_ILW() { recVUMI_ILW(VU, VUREC_INFO); } void recVU0MI_ISW() { recVUMI_ISW(VU, VUREC_INFO); } void recVU0MI_ILWR() { recVUMI_ILWR(VU, VUREC_INFO); } void recVU0MI_ISWR() { recVUMI_ISWR(VU, VUREC_INFO); } #else void recVU0MI_LQ() { REC_VUOP(VU0, LQ); } void recVU0MI_LQD() { REC_VUOP(VU0, LQD); } void recVU0MI_LQI() { REC_VUOP(VU0, LQI); } void recVU0MI_SQ() { REC_VUOP(VU0, SQ); } void recVU0MI_SQD() { REC_VUOP(VU0, SQD); } void recVU0MI_SQI() { REC_VUOP(VU0, SQI); } void recVU0MI_ILW() { REC_VUOP(VU0, ILW); } void recVU0MI_ISW() { REC_VUOP(VU0, ISW); } void recVU0MI_ILWR() { REC_VUOP(VU0, ILWR); } void recVU0MI_ISWR() { REC_VUOP(VU0, ISWR); } #endif #ifdef RECOMPILE_VUMI_ARITHMETIC void recVU0MI_IADD() { recVUMI_IADD(VU, VUREC_INFO); } void recVU0MI_IADDI() { recVUMI_IADDI(VU, VUREC_INFO); } void recVU0MI_IADDIU() { recVUMI_IADDIU(VU, VUREC_INFO); } void recVU0MI_IOR() { recVUMI_IOR(VU, VUREC_INFO); } void recVU0MI_ISUB() { recVUMI_ISUB(VU, VUREC_INFO); } void recVU0MI_IAND() { recVUMI_IAND(VU, VUREC_INFO); } void recVU0MI_ISUBIU() { recVUMI_ISUBIU(VU, VUREC_INFO); } #else void recVU0MI_IADD() { REC_VUOP(VU0, IADD); } void recVU0MI_IADDI() { REC_VUOP(VU0, IADDI); } void recVU0MI_IADDIU() { REC_VUOP(VU0, IADDIU); } void recVU0MI_IOR() { REC_VUOP(VU0, IOR); } void recVU0MI_ISUB() { REC_VUOP(VU0, ISUB); } void recVU0MI_IAND() { REC_VUOP(VU0, IAND); } void recVU0MI_ISUBIU() { REC_VUOP(VU0, ISUBIU); } #endif #ifdef RECOMPILE_VUMI_BRANCH void recVU0MI_IBEQ() { recVUMI_IBEQ(VU, VUREC_INFO); } void recVU0MI_IBGEZ() { recVUMI_IBGEZ(VU, VUREC_INFO); } void recVU0MI_IBLTZ() { recVUMI_IBLTZ(VU, VUREC_INFO); } void recVU0MI_IBLEZ() { recVUMI_IBLEZ(VU, VUREC_INFO); } void recVU0MI_IBGTZ() { recVUMI_IBGTZ(VU, VUREC_INFO); } void recVU0MI_IBNE() { recVUMI_IBNE(VU, VUREC_INFO); } void recVU0MI_B() { recVUMI_B(VU, VUREC_INFO); } void recVU0MI_BAL() { recVUMI_BAL(VU, VUREC_INFO); } void recVU0MI_JR() { recVUMI_JR(VU, VUREC_INFO); } void recVU0MI_JALR() { recVUMI_JALR(VU, VUREC_INFO); } #else void recVU0MI_IBEQ() { REC_VUOP(VU0, IBEQ); } void recVU0MI_IBGEZ() { REC_VUOP(VU0, IBGEZ); } void recVU0MI_IBGTZ() { REC_VUOP(VU0, IBGTZ); } void recVU0MI_IBLTZ() { REC_VUOP(VU0, IBLTZ); } void recVU0MI_IBLEZ() { REC_VUOP(VU0, IBLEZ); } void recVU0MI_IBNE() { REC_VUOP(VU0, IBNE); } void recVU0MI_B() { REC_VUOP(VU0, B); } void recVU0MI_BAL() { REC_VUOP(VU0, BAL); } void recVU0MI_JR() { REC_VUOP(VU0, JR); } void recVU0MI_JALR() { REC_VUOP(VU0, JALR); } #endif