Spice up test case.

This commit is contained in:
Jean-Philip Desjardins 2020-05-25 16:25:52 -04:00
parent 5ba13c4eed
commit 088fbe16b9
3 changed files with 19 additions and 1 deletions

View file

@ -6,6 +6,9 @@ void CBranchTest::Execute(CTestVm& virtualMachine)
//Inspired by Star Ocean 3
auto branch1HitRegister = CVuAssembler::VI8;
auto branch2HitRegister = CVuAssembler::VI9;
auto nextBlockAddress = 0u;
auto branch1Address = 0u;
auto branch2Address = 0u;
virtualMachine.Reset();
@ -24,6 +27,8 @@ void CBranchTest::Execute(CTestVm& virtualMachine)
CVuAssembler::Upper::NOP(),
CVuAssembler::Lower::IBEQ(CVuAssembler::VI2, CVuAssembler::VI0, branch2Label));
nextBlockAddress = assembler.GetProgramSize() * CVuAssembler::INSTRUCTION_SIZE;
assembler.Write(
CVuAssembler::Upper::NOP(),
CVuAssembler::Lower::NOP());
@ -38,6 +43,7 @@ void CBranchTest::Execute(CTestVm& virtualMachine)
//Branch 1
assembler.MarkLabel(branch1Label);
branch1Address = assembler.GetProgramSize() * CVuAssembler::INSTRUCTION_SIZE;
assembler.Write(
CVuAssembler::Upper::NOP(),
@ -53,6 +59,7 @@ void CBranchTest::Execute(CTestVm& virtualMachine)
//Branch 2
assembler.MarkLabel(branch2Label);
branch2Address = assembler.GetProgramSize() * CVuAssembler::INSTRUCTION_SIZE;
assembler.Write(
CVuAssembler::Upper::NOP(),
@ -67,6 +74,12 @@ void CBranchTest::Execute(CTestVm& virtualMachine)
CVuAssembler::Lower::NOP());
}
//Execute all possible blocks to make sure all possible links are here
virtualMachine.ExecuteTest(0);
virtualMachine.ExecuteTest(nextBlockAddress);
virtualMachine.ExecuteTest(branch1Address);
virtualMachine.ExecuteTest(branch2Address);
//If VI2 is zero, should end up in branch 2 and we executed the starting instruction of branch 1
virtualMachine.m_cpu.m_State.nCOP2VI[2] = 0;
virtualMachine.m_cpu.m_State.nCOP2VI[branch1HitRegister] = 0;

View file

@ -28,7 +28,7 @@ CVuAssembler::LABEL CVuAssembler::CreateLabel()
return m_nextLabelId++;
}
void CVuAssembler::MarkLabel(CVuAssembler::LABEL label)
void CVuAssembler::MarkLabel(LABEL label)
{
m_labels[label] = GetProgramSize();
}

View file

@ -98,6 +98,11 @@ public:
FVF_W
};
enum
{
INSTRUCTION_SIZE = 8,
};
CVuAssembler(uint32*);
virtual ~CVuAssembler();