mirror of
https://github.com/jpd002/Play-.git
synced 2025-04-28 13:47:57 +03:00
Spice up test case.
This commit is contained in:
parent
5ba13c4eed
commit
088fbe16b9
3 changed files with 19 additions and 1 deletions
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -98,6 +98,11 @@ public:
|
|||
FVF_W
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
INSTRUCTION_SIZE = 8,
|
||||
};
|
||||
|
||||
CVuAssembler(uint32*);
|
||||
virtual ~CVuAssembler();
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue