void r4300i_JAL (void) { NextInstruction = DELAY_SLOT; JumpToLocation = (PROGRAM_COUNTER & 0xF0000000) + (Opcode.target << 2); TestInterpreterJump(PROGRAM_COUNTER,JumpToLocation,0,0); GPR[31].DW= (int32_t)(PROGRAM_COUNTER + 8); }
void _fastcall r4300i_BLEZ (void) { NextInstruction = DELAY_SLOT; if (GPR[Opcode.rs].DW <= 0) { JumpToLocation = PROGRAM_COUNTER + ((short)Opcode.offset << 2) + 4; TestInterpreterJump(PROGRAM_COUNTER,JumpToLocation,Opcode.rs,0); } else { JumpToLocation = PROGRAM_COUNTER + 8; } }
void r4300i_BNE (void) { NextInstruction = DELAY_SLOT; if (GPR[Opcode.rs].DW != GPR[Opcode.rt].DW) { JumpToLocation = PROGRAM_COUNTER + ((short)Opcode.offset << 2) + 4; TestInterpreterJump(PROGRAM_COUNTER,JumpToLocation,Opcode.rs,Opcode.rt); } else { JumpToLocation = PROGRAM_COUNTER + 8; } }
void _fastcall r4300i_BEQL (void) { if (GPR[Opcode.rs].DW == GPR[Opcode.rt].DW) { NextInstruction = DELAY_SLOT; JumpToLocation = PROGRAM_COUNTER + ((short)Opcode.offset << 2) + 4; TestInterpreterJump(PROGRAM_COUNTER,JumpToLocation,Opcode.rs,Opcode.rt); } else { NextInstruction = JUMP; JumpToLocation = PROGRAM_COUNTER + 8; } }
void r4300i_BGTZL (void) { if (GPR[Opcode.rs].DW > 0) { NextInstruction = DELAY_SLOT; JumpToLocation = PROGRAM_COUNTER + ((short)Opcode.offset << 2) + 4; TestInterpreterJump(PROGRAM_COUNTER,JumpToLocation,Opcode.rs,0); } else { NextInstruction = JUMP; JumpToLocation = PROGRAM_COUNTER + 8; } }
/************************* OpCode functions *************************/ void _fastcall r4300i_J (void) { NextInstruction = DELAY_SLOT; JumpToLocation = (PROGRAM_COUNTER & 0xF0000000) + (Opcode.target << 2); TestInterpreterJump(PROGRAM_COUNTER,JumpToLocation,0,0); }