mirror of
https://github.com/libretro/Play-.git
synced 2025-02-03 23:46:08 +00:00
git-svn-id: http://svn.purei.org/purei/trunk@135 b36208d7-6611-0410-8bec-b1987f11c4a2
This commit is contained in:
parent
a386c1ed84
commit
fc3bb74573
@ -4,8 +4,8 @@ Microsoft Visual Studio Solution File, Format Version 9.00
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Purei", "Purei.vcproj", "{DF7BEC15-DC00-4C86-94AF-72CA742590CC}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{CF8E8640-24C8-49F1-B510-CF5BB945F99C} = {CF8E8640-24C8-49F1-B510-CF5BB945F99C}
|
||||
{9B46B4A7-0FBD-44FD-8E9C-BC2CBA64643A} = {9B46B4A7-0FBD-44FD-8E9C-BC2CBA64643A}
|
||||
{8AD44184-94A7-461B-8076-CE4455B7559A} = {8AD44184-94A7-461B-8076-CE4455B7559A}
|
||||
{9B46B4A7-0FBD-44FD-8E9C-BC2CBA64643A} = {9B46B4A7-0FBD-44FD-8E9C-BC2CBA64643A}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlib-1.2.3", "..\zlib-1.2.3\zlib-1.2.3.vcproj", "{8AD44184-94A7-461B-8076-CE4455B7559A}"
|
||||
@ -62,7 +62,8 @@ Global
|
||||
{CF8E8640-24C8-49F1-B510-CF5BB945F99C}.Release|x64.Build.0 = Release|x64
|
||||
{9B46B4A7-0FBD-44FD-8E9C-BC2CBA64643A}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{9B46B4A7-0FBD-44FD-8E9C-BC2CBA64643A}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{9B46B4A7-0FBD-44FD-8E9C-BC2CBA64643A}.Debug|x64.ActiveCfg = Debug|Win32
|
||||
{9B46B4A7-0FBD-44FD-8E9C-BC2CBA64643A}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{9B46B4A7-0FBD-44FD-8E9C-BC2CBA64643A}.Debug|x64.Build.0 = Debug|x64
|
||||
{9B46B4A7-0FBD-44FD-8E9C-BC2CBA64643A}.Debug+|Win32.ActiveCfg = Debug|Win32
|
||||
{9B46B4A7-0FBD-44FD-8E9C-BC2CBA64643A}.Debug+|Win32.Build.0 = Debug|Win32
|
||||
{9B46B4A7-0FBD-44FD-8E9C-BC2CBA64643A}.Debug+|x64.ActiveCfg = Debug|Win32
|
||||
|
@ -1,11 +1,123 @@
|
||||
#include "MIPSAssembler.h"
|
||||
#include "MIPS.h"
|
||||
#include <boost/tokenizer.hpp>
|
||||
#include <boost/function.hpp>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include <boost/bind.hpp>
|
||||
#include "lexical_cast_ex.h"
|
||||
|
||||
using namespace boost;
|
||||
using namespace std;
|
||||
|
||||
struct RtRsImm
|
||||
{
|
||||
typedef void (CMIPSAssembler::*AssemblerFunctionType) (unsigned int, unsigned int, uint16);
|
||||
|
||||
RtRsImm(AssemblerFunctionType Assembler) :
|
||||
m_Assembler(Assembler)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void operator ()(tokenizer<>& Tokens, tokenizer<>::iterator& itToken, CMIPSAssembler* pAssembler)
|
||||
{
|
||||
unsigned int nRT, nRS;
|
||||
uint16 nImm;
|
||||
|
||||
if(itToken == Tokens.end()) throw exception();
|
||||
nRT = CMIPSAssembler::GetRegisterIndex((*(++itToken)).c_str());
|
||||
|
||||
if(itToken == Tokens.end()) throw exception();
|
||||
nRS = CMIPSAssembler::GetRegisterIndex((*(++itToken)).c_str());
|
||||
|
||||
if(itToken == Tokens.end()) throw exception();
|
||||
nImm = lexical_cast_hex<string>((*(++itToken)).c_str());
|
||||
|
||||
if(nRT == -1) throw exception();
|
||||
if(nRS == -1) throw exception();
|
||||
|
||||
bind(m_Assembler, pAssembler, _1, _2, _3)(nRT, nRS, nImm);
|
||||
}
|
||||
|
||||
AssemblerFunctionType m_Assembler;
|
||||
};
|
||||
|
||||
struct RtRsSa
|
||||
{
|
||||
typedef void (CMIPSAssembler::*AssemblerFunctionType) (unsigned int, unsigned int, unsigned int);
|
||||
|
||||
RtRsSa(AssemblerFunctionType Assembler) :
|
||||
m_Assembler(Assembler)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void operator()(tokenizer<>& Tokens, tokenizer<>::iterator& itToken, CMIPSAssembler* pAssembler)
|
||||
{
|
||||
unsigned int nRT, nRS, nSA;
|
||||
|
||||
if(itToken == Tokens.end()) throw exception();
|
||||
nRT = CMIPSAssembler::GetRegisterIndex((*(++itToken)).c_str());
|
||||
|
||||
if(itToken == Tokens.end()) throw exception();
|
||||
nRS = CMIPSAssembler::GetRegisterIndex((*(++itToken)).c_str());
|
||||
|
||||
if(itToken == Tokens.end()) throw exception();
|
||||
nSA = lexical_cast<unsigned int>((*(++itToken)).c_str());
|
||||
|
||||
if(nRT == -1) throw exception();
|
||||
if(nRS == -1) throw exception();
|
||||
|
||||
bind(m_Assembler, pAssembler, _1, _2, _3)(nRT, nRS, nSA);
|
||||
}
|
||||
|
||||
AssemblerFunctionType m_Assembler;
|
||||
};
|
||||
|
||||
struct Instruction
|
||||
{
|
||||
Instruction(const char* sMnemonic) :
|
||||
m_sMnemonic(sMnemonic)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
const char* m_sMnemonic;
|
||||
virtual void Invoke(tokenizer<>&, tokenizer<>::iterator&, CMIPSAssembler*) = 0;
|
||||
};
|
||||
|
||||
|
||||
template <typename Functor>
|
||||
struct SpecInstruction : public Instruction
|
||||
{
|
||||
SpecInstruction(const char* sMnemonic, const Functor& Parser) :
|
||||
Instruction(sMnemonic),
|
||||
m_Parser(Parser)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
virtual void Invoke(tokenizer<>& Tokens, tokenizer<>::iterator& itToken, CMIPSAssembler* pAssembler)
|
||||
{
|
||||
m_Parser(Tokens, itToken, pAssembler);
|
||||
}
|
||||
|
||||
Functor m_Parser;
|
||||
};
|
||||
|
||||
|
||||
SpecInstruction<RtRsImm> Instruction_ADDIU = SpecInstruction<RtRsImm>("ADDIU", RtRsImm(&CMIPSAssembler::ADDIU));
|
||||
SpecInstruction<RtRsSa> Instruction_SLL = SpecInstruction<RtRsSa>("SLL", RtRsSa(&CMIPSAssembler::SLL));
|
||||
SpecInstruction<RtRsSa> Instruction_SRA = SpecInstruction<RtRsSa>("SRA", RtRsSa(&CMIPSAssembler::SRA));
|
||||
|
||||
Instruction* Instrs[] =
|
||||
{
|
||||
&Instruction_ADDIU,
|
||||
&Instruction_SLL,
|
||||
&Instruction_SRA,
|
||||
NULL,
|
||||
};
|
||||
|
||||
CMIPSAssembler::CMIPSAssembler(uint32* pPtr)
|
||||
{
|
||||
m_pPtr = pPtr;
|
||||
@ -336,24 +448,21 @@ void CMIPSAssembler::AssembleString(const char* sCode)
|
||||
//First token must be the instruction mnemonic
|
||||
sMnemonic = (*itToken).c_str();
|
||||
|
||||
if(!strcmp(sMnemonic, "ADDIU"))
|
||||
bool nFound(false);
|
||||
|
||||
for(unsigned int i = 0; Instrs[i] != NULL; i++)
|
||||
{
|
||||
unsigned int nRT, nRS;
|
||||
uint16 nImm;
|
||||
if(!strcmp(Instrs[i]->m_sMnemonic, sMnemonic))
|
||||
{
|
||||
Instrs[i]->Invoke(Tokens, itToken, this);
|
||||
nFound = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(itToken == Tokens.end()) throw exception();
|
||||
nRT = GetRegisterIndex((*(++itToken)).c_str());
|
||||
|
||||
if(itToken == Tokens.end()) throw exception();
|
||||
nRS = GetRegisterIndex((*(++itToken)).c_str());
|
||||
|
||||
if(itToken == Tokens.end()) throw exception();
|
||||
nImm = lexical_cast_hex<string>((*(++itToken)).c_str());
|
||||
|
||||
if(nRT == -1) throw exception();
|
||||
if(nRS == -1) throw exception();
|
||||
|
||||
ADDIU(nRT, nRS, nImm);
|
||||
if(nFound == false)
|
||||
{
|
||||
throw runtime_error("Invalid mnemonic specified.");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -49,6 +49,23 @@ CMipsTestEngine::CValueSet* CMipsTestEngine::GetInput(unsigned int nId)
|
||||
return (itInput != m_InputsById.end()) ? (itInput->second) : (NULL);
|
||||
}
|
||||
|
||||
CMipsTestEngine::CValueSet* CMipsTestEngine::GetOutput(unsigned int nInputId, unsigned int nInstanceId)
|
||||
{
|
||||
for(OutputsType::iterator itOutput(m_Outputs.begin());
|
||||
itOutput != m_Outputs.end(); itOutput++)
|
||||
{
|
||||
if(
|
||||
(itOutput->GetInputId() == nInputId) &&
|
||||
(itOutput->GetInstanceId() == nInstanceId)
|
||||
)
|
||||
{
|
||||
return &(*itOutput);
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
CMipsTestEngine::CInstance* CMipsTestEngine::GetInstance(unsigned int nId)
|
||||
{
|
||||
InstancesByIdMapType::iterator itInstance;
|
||||
@ -144,6 +161,16 @@ unsigned int CMipsTestEngine::CValueSet::GetInstanceId() const
|
||||
return m_nInstanceId;
|
||||
}
|
||||
|
||||
CMipsTestEngine::CValueSet::ValueIterator CMipsTestEngine::CValueSet::GetValuesBegin() const
|
||||
{
|
||||
return m_Values.begin();
|
||||
}
|
||||
|
||||
CMipsTestEngine::CValueSet::ValueIterator CMipsTestEngine::CValueSet::GetValuesEnd() const
|
||||
{
|
||||
return m_Values.end();
|
||||
}
|
||||
|
||||
void CMipsTestEngine::CValueSet::AssembleLoad(CMIPSAssembler& Assembler)
|
||||
{
|
||||
for(ValueListType::iterator itValue(m_Values.begin());
|
||||
@ -258,17 +285,25 @@ void CMipsTestEngine::CRegisterValue::AssembleLoad(CMIPSAssembler& Assembler)
|
||||
nHalf[2] = (m_nValue1 >> 0) & 0xFFFF;
|
||||
nHalf[3] = (m_nValue1 >> 16) & 0xFFFF;
|
||||
|
||||
Assembler.LUI(m_nRegister, nHalf[1]);
|
||||
Assembler.ORI(m_nRegister, m_nRegister, nHalf[0]);
|
||||
|
||||
nSignExtension = ((m_nValue0 & 0x80000000) == 0) ? (0x00000000) : (0xFFFFFFFF);
|
||||
|
||||
if(m_nValue1 != nSignExtension)
|
||||
{
|
||||
Assembler.DSRL(m_nRegister, m_nRegister, 4);
|
||||
Assembler.ORI(m_nRegister, m_nRegister, nHalf[2]);
|
||||
Assembler.DSRL(m_nRegister, m_nRegister, 4);
|
||||
Assembler.ORI(m_nRegister, m_nRegister, nHalf[3]);
|
||||
Assembler.ADDIU(m_nRegister, 0, 0x0000);
|
||||
|
||||
for(int i = 3; i >= 0; i--)
|
||||
{
|
||||
Assembler.ORI(m_nRegister, m_nRegister, nHalf[i]);
|
||||
if(i != 0)
|
||||
{
|
||||
Assembler.DSLL(m_nRegister, m_nRegister, 16);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Assembler.LUI(m_nRegister, nHalf[1]);
|
||||
Assembler.ORI(m_nRegister, m_nRegister, nHalf[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -287,3 +322,10 @@ bool CMipsTestEngine::CRegisterValue::Verify(CMIPS& Context)
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
string CMipsTestEngine::CRegisterValue::GetString() const
|
||||
{
|
||||
return string(CMIPS::m_sGPRName[m_nRegister]) +
|
||||
": 0x" + lexical_cast_hex<string>(m_nValue1, 8) +
|
||||
" 0x" + lexical_cast_hex<string>(m_nValue0, 8);
|
||||
}
|
||||
|
@ -12,39 +12,48 @@ public:
|
||||
class CValue
|
||||
{
|
||||
public:
|
||||
virtual ~CValue();
|
||||
virtual void AssembleLoad(CMIPSAssembler&) = 0;
|
||||
virtual bool Verify(CMIPS&) = 0;
|
||||
virtual ~CValue();
|
||||
virtual void AssembleLoad(CMIPSAssembler&) = 0;
|
||||
virtual bool Verify(CMIPS&) = 0;
|
||||
virtual std::string GetString() const = 0;
|
||||
};
|
||||
|
||||
class CRegisterValue : public CValue
|
||||
{
|
||||
public:
|
||||
CRegisterValue(Framework::Xml::CNode*);
|
||||
virtual ~CRegisterValue();
|
||||
virtual void AssembleLoad(CMIPSAssembler&);
|
||||
virtual bool Verify(CMIPS&);
|
||||
CRegisterValue(Framework::Xml::CNode*);
|
||||
virtual ~CRegisterValue();
|
||||
virtual void AssembleLoad(CMIPSAssembler&);
|
||||
virtual bool Verify(CMIPS&);
|
||||
virtual std::string GetString() const;
|
||||
|
||||
private:
|
||||
unsigned int m_nRegister;
|
||||
unsigned int m_nValue0;
|
||||
unsigned int m_nValue1;
|
||||
unsigned int m_nRegister;
|
||||
unsigned int m_nValue0;
|
||||
unsigned int m_nValue1;
|
||||
};
|
||||
|
||||
class CValueSet
|
||||
{
|
||||
private:
|
||||
typedef boost::ptr_list<CValue> ValueListType;
|
||||
|
||||
public:
|
||||
typedef ValueListType::const_iterator ValueIterator;
|
||||
|
||||
CValueSet(Framework::Xml::CNode*);
|
||||
virtual ~CValueSet();
|
||||
|
||||
unsigned int GetInputId() const;
|
||||
unsigned int GetInstanceId() const;
|
||||
|
||||
ValueIterator GetValuesBegin() const;
|
||||
ValueIterator GetValuesEnd() const;
|
||||
|
||||
void AssembleLoad(CMIPSAssembler&);
|
||||
bool Verify(CMIPS&);
|
||||
|
||||
private:
|
||||
typedef boost::ptr_list<CValue> ValueListType;
|
||||
|
||||
unsigned int m_nInputId;
|
||||
unsigned int m_nInstanceId;
|
||||
@ -77,6 +86,7 @@ public:
|
||||
OutputsType::iterator GetOutputsEnd();
|
||||
|
||||
CValueSet* GetInput(unsigned int);
|
||||
CValueSet* GetOutput(unsigned int, unsigned int);
|
||||
CInstance* GetInstance(unsigned int);
|
||||
|
||||
private:
|
||||
|
Binary file not shown.
@ -94,7 +94,7 @@ BEGIN
|
||||
MENUITEM "&Functions\tCtrl+F", ID_VIEW_FUNCTIONS
|
||||
MENUITEM "&ELF File Information", ID_VIEW_ELF
|
||||
MENUITEM "OS Events", ID_VIEW_OSEVENTS
|
||||
MENUITEM "Test Engine Console", ID_VIEW_TESTENGINECONSOLE
|
||||
MENUITEM "Test Engine Console\tCtrl+T", ID_VIEW_TESTENGINECONSOLE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "EmotionEngine View\tAlt+1", ID_VIEW_EEVIEW
|
||||
MENUITEM "Vector Unit 1 View\tAlt+3", ID_VIEW_VU1VIEW
|
||||
|
@ -2,6 +2,8 @@
|
||||
#include "win32/Rect.h"
|
||||
#include <boost/filesystem/operations.hpp>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include <boost/bind.hpp>
|
||||
#include <boost/algorithm/string.hpp>
|
||||
#include "string_cast.h"
|
||||
#include "../PS2VM.h"
|
||||
|
||||
@ -38,8 +40,10 @@ m_pTestAllButton(NULL)
|
||||
m_pInstructionList->GetHeader()->InsertItem(_T("Error"), 100);
|
||||
|
||||
m_pTestAllButton = new Win32::CButton(_T("Test All"), m_hWnd, Win32::CRect(0, 0, 1, 1));
|
||||
m_pDescriptionEdit = new Win32::CEdit(m_hWnd, Win32::CRect(0, 0, 1, 1), NULL, ES_READONLY | ES_MULTILINE | WS_VSCROLL);
|
||||
|
||||
m_Layout.InsertObject(new Win32::CLayoutWindow(1, 1, 1, 1, m_pInstructionList));
|
||||
m_Layout.InsertObject(new Win32::CLayoutWindow(1, 1, 1, 1, m_pDescriptionEdit));
|
||||
|
||||
{
|
||||
CHorizontalLayout* pTempLayout(new CHorizontalLayout());
|
||||
@ -83,7 +87,10 @@ long CTestEngineWnd::OnNotify(WPARAM wParam, NMHDR* pHdr)
|
||||
switch(pMsg->code)
|
||||
{
|
||||
case NM_DBLCLK:
|
||||
OnItemDblClick();
|
||||
ProcessListEvent(bind(&CTestEngineWnd::OnItemDblClick, this, _1, _2));
|
||||
break;
|
||||
case TVN_SELCHANGED:
|
||||
ProcessListEvent(bind(&CTestEngineWnd::OnListSelChange, this, _1, _2));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -109,6 +116,9 @@ void CTestEngineWnd::Test(INSTRUCTION& Instruction)
|
||||
|
||||
nFailed = nSuccess = nError = nTotal = 0;
|
||||
|
||||
//Delete all existing nodes
|
||||
m_pInstructionList->GetTreeView()->DeleteChildren(Instruction.nTreeItem);
|
||||
|
||||
for(CMipsTestEngine::OutputsType::iterator itOutput(Engine.GetOutputsBegin());
|
||||
itOutput != Engine.GetOutputsEnd(); itOutput++)
|
||||
{
|
||||
@ -259,7 +269,7 @@ void CTestEngineWnd::RefreshInstructionList()
|
||||
}
|
||||
}
|
||||
|
||||
void CTestEngineWnd::OnItemDblClick()
|
||||
void CTestEngineWnd::ProcessListEvent(ListMessageHandlerType Handler)
|
||||
{
|
||||
Win32::CTreeView* pTreeView(m_pInstructionList->GetTreeView());
|
||||
HTREEITEM nItem(pTreeView->GetSelection());
|
||||
@ -283,11 +293,23 @@ void CTestEngineWnd::OnItemDblClick()
|
||||
|
||||
const INSTRUCTION::TestCaseType& TestCase(itTestCase->second);
|
||||
|
||||
Handler(&Instruction, &TestCase);
|
||||
}
|
||||
else
|
||||
{
|
||||
//Instruction
|
||||
}
|
||||
}
|
||||
|
||||
void CTestEngineWnd::OnItemDblClick(const INSTRUCTION* pInstruction, const INSTRUCTION::TestCaseType* pTestCase)
|
||||
{
|
||||
if(pTestCase != NULL)
|
||||
{
|
||||
try
|
||||
{
|
||||
CMipsTestEngine Engine(("./tests/" + Instruction.sName + ".xml").c_str());
|
||||
CMipsTestEngine::CValueSet* pInput(Engine.GetInput(TestCase.first));
|
||||
CMipsTestEngine::CInstance* pInstance(Engine.GetInstance(TestCase.second));
|
||||
CMipsTestEngine Engine(("./tests/" + pInstruction->sName + ".xml").c_str());
|
||||
CMipsTestEngine::CValueSet* pInput(Engine.GetInput(pTestCase->first));
|
||||
CMipsTestEngine::CInstance* pInstance(Engine.GetInstance(pTestCase->second));
|
||||
|
||||
if((pInput != NULL) && (pInstance != NULL))
|
||||
{
|
||||
@ -311,3 +333,44 @@ void CTestEngineWnd::OnItemDblClick()
|
||||
//Instruction
|
||||
}
|
||||
}
|
||||
|
||||
void CTestEngineWnd::OnListSelChange(const INSTRUCTION* pInstruction, const INSTRUCTION::TestCaseType* pTestCase)
|
||||
{
|
||||
if(pTestCase != NULL)
|
||||
{
|
||||
try
|
||||
{
|
||||
CMipsTestEngine Engine(("./tests/" + pInstruction->sName + ".xml").c_str());
|
||||
CMipsTestEngine::CValueSet* pInput(Engine.GetInput(pTestCase->first));
|
||||
CMipsTestEngine::CValueSet* pOutput(Engine.GetOutput(pTestCase->first, pTestCase->second));
|
||||
CMipsTestEngine::CInstance* pInstance(Engine.GetInstance(pTestCase->second));
|
||||
|
||||
if((pInput != NULL) && (pInstance != NULL) && (pOutput != NULL))
|
||||
{
|
||||
tstring sText;
|
||||
|
||||
for(CMipsTestEngine::CValueSet::ValueIterator itValue(pInput->GetValuesBegin());
|
||||
itValue != pInput->GetValuesEnd(); itValue++)
|
||||
{
|
||||
sText += string_cast<tstring>(itValue->GetString()) + _T("\r\n");
|
||||
}
|
||||
|
||||
sText += _T("\r\n") + algorithm::trim_copy(string_cast<tstring>(pInstance->GetSource())) + _T("\r\n\r\n");
|
||||
|
||||
for(CMipsTestEngine::CValueSet::ValueIterator itValue(pOutput->GetValuesBegin());
|
||||
itValue != pOutput->GetValuesEnd(); itValue++)
|
||||
{
|
||||
sText += string_cast<tstring>(itValue->GetString()) + _T("\r\n");
|
||||
}
|
||||
|
||||
m_pDescriptionEdit->SetText(sText.c_str());
|
||||
}
|
||||
}
|
||||
catch(const exception& Exception)
|
||||
{
|
||||
m_pDescriptionEdit->SetText(
|
||||
(_T("Error occured while trying to assemble the test case: \r\n\r\n") +
|
||||
string_cast<tstring>(Exception.what())).c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include "DebuggerChildWnd.h"
|
||||
#include "win32/ColumnTreeView.h"
|
||||
#include "win32/Button.h"
|
||||
#include "win32/Edit.h"
|
||||
#include "win32/Layouts.h"
|
||||
#include "../MipsTestEngine.h"
|
||||
#include <map>
|
||||
@ -34,6 +35,7 @@ private:
|
||||
};
|
||||
|
||||
typedef std::map<unsigned int, INSTRUCTION> InstructionByIdMapType;
|
||||
typedef boost::function<void (const INSTRUCTION*, const INSTRUCTION::TestCaseType*)> ListMessageHandlerType;
|
||||
|
||||
void TestAll();
|
||||
void Test(INSTRUCTION&);
|
||||
@ -41,9 +43,12 @@ private:
|
||||
void RefreshLayout();
|
||||
void RefreshInstructionMap();
|
||||
void RefreshInstructionList();
|
||||
void OnItemDblClick();
|
||||
void ProcessListEvent(ListMessageHandlerType);
|
||||
void OnItemDblClick(const INSTRUCTION*, const INSTRUCTION::TestCaseType*);
|
||||
void OnListSelChange(const INSTRUCTION*, const INSTRUCTION::TestCaseType*);
|
||||
|
||||
Framework::Win32::CColumnTreeView* m_pInstructionList;
|
||||
Framework::Win32::CEdit* m_pDescriptionEdit;
|
||||
Framework::Win32::CButton* m_pTestAllButton;
|
||||
Framework::CVerticalLayout m_Layout;
|
||||
InstructionByIdMapType m_InstructionsById;
|
||||
|
@ -46,8 +46,8 @@
|
||||
</ValueSet>
|
||||
|
||||
<ValueSet InputId="1" InstanceId="2">
|
||||
<Register Name="T0" Value0="0x00000000" />
|
||||
<Register Name="T1" Value0="0xFFFF7FFF" Value1="0xFFFFFFFF" />
|
||||
<Register Name="T0" Value0="0x00000001" />
|
||||
<Register Name="T1" Value0="0xFFFF8001" Value1="0xFFFFFFFF" />
|
||||
</ValueSet>
|
||||
|
||||
<ValueSet InputId="0" InstanceId="3">
|
||||
|
34
tests/LUI.xml
Normal file
34
tests/LUI.xml
Normal file
@ -0,0 +1,34 @@
|
||||
<Test>
|
||||
<Inputs>
|
||||
|
||||
<ValueSet InputId="0">
|
||||
<Register Name="T0" Value0="0xFFFF0256" />
|
||||
</ValueSet>
|
||||
|
||||
</Inputs>
|
||||
|
||||
<Instances>
|
||||
|
||||
<Instance Id="0">
|
||||
LUI T0, 0x0800
|
||||
</Instance>
|
||||
|
||||
<Instance Id="1">
|
||||
LUI T0, 0x8000
|
||||
</Instance>
|
||||
|
||||
</Instances>
|
||||
|
||||
<Outputs>
|
||||
|
||||
<ValueSet InputId="0" InstanceId="0">
|
||||
<Register Name="T0" Value0="0x08000000" />
|
||||
</ValueSet>
|
||||
|
||||
<ValueSet InputId="0" InstanceId="1">
|
||||
<Register Name="T0" Value0="0x80000000" Value1="0xFFFFFFFF" />
|
||||
</ValueSet>
|
||||
|
||||
</Outputs>
|
||||
|
||||
</Test>
|
@ -0,0 +1,64 @@
|
||||
<Test>
|
||||
<Inputs>
|
||||
|
||||
<ValueSet InputId="0">
|
||||
<Register Name="T0" Value0="0x808080FF" Value1="0xFFFFFFFF" />
|
||||
<Register Name="T1" Value0="0xDEADBEEF" Value1="0xFFFFFFFF" />
|
||||
</ValueSet>
|
||||
|
||||
</Inputs>
|
||||
|
||||
<Instances>
|
||||
|
||||
<Instance Id="0">
|
||||
SLL T1, T0, 0
|
||||
</Instance>
|
||||
|
||||
<Instance Id="1">
|
||||
SLL T1, T0, 4
|
||||
</Instance>
|
||||
|
||||
<Instance Id="2">
|
||||
SLL T1, T0, 8
|
||||
</Instance>
|
||||
|
||||
<Instance Id="3">
|
||||
SLL T1, T0, 16
|
||||
</Instance>
|
||||
|
||||
<Instance Id="4">
|
||||
SLL T1, T0, 32
|
||||
</Instance>
|
||||
|
||||
</Instances>
|
||||
|
||||
<Outputs>
|
||||
|
||||
<ValueSet InputId="0" InstanceId="0">
|
||||
<Register Name="T0" Value0="0x808080FF" Value1="0xFFFFFFFF" />
|
||||
<Register Name="T1" Value0="0x808080FF" Value1="0xFFFFFFFF" />
|
||||
</ValueSet>
|
||||
|
||||
<ValueSet InputId="0" InstanceId="1">
|
||||
<Register Name="T0" Value0="0x808080FF" Value1="0xFFFFFFFF" />
|
||||
<Register Name="T1" Value0="0x08080FF0" />
|
||||
</ValueSet>
|
||||
|
||||
<ValueSet InputId="0" InstanceId="2">
|
||||
<Register Name="T0" Value0="0x808080FF" Value1="0xFFFFFFFF" />
|
||||
<Register Name="T1" Value0="0x8080FF00" Value1="0xFFFFFFFF" />
|
||||
</ValueSet>
|
||||
|
||||
<ValueSet InputId="0" InstanceId="3">
|
||||
<Register Name="T0" Value0="0x808080FF" Value1="0xFFFFFFFF" />
|
||||
<Register Name="T1" Value0="0x80FF0000" Value1="0xFFFFFFFF" />
|
||||
</ValueSet>
|
||||
|
||||
<ValueSet InputId="0" InstanceId="4">
|
||||
<Register Name="T0" Value0="0x808080FF" Value1="0xFFFFFFFF" />
|
||||
<Register Name="T1" Value0="0x808080FF" Value1="0xFFFFFFFF" />
|
||||
</ValueSet>
|
||||
|
||||
</Outputs>
|
||||
|
||||
</Test>
|
73
tests/SRA.xml
Normal file
73
tests/SRA.xml
Normal file
@ -0,0 +1,73 @@
|
||||
<Test>
|
||||
<Inputs>
|
||||
|
||||
<ValueSet InputId="0">
|
||||
<Register Name="T0" Value0="0x808080FF" Value1="0xFFFFFFFF" />
|
||||
<Register Name="T1" Value0="0xDEADBEEF" Value1="0xFFFFFFFF" />
|
||||
</ValueSet>
|
||||
|
||||
<ValueSet InputId="1">
|
||||
<Register Name="T0" Value0="0x008080FF" />
|
||||
<Register Name="T1" Value0="0xDEADBEEF" Value1="0xFFFFFFFF" />
|
||||
</ValueSet>
|
||||
|
||||
</Inputs>
|
||||
|
||||
<Instances>
|
||||
|
||||
<Instance Id="0">
|
||||
SRA T1, T0, 0
|
||||
</Instance>
|
||||
|
||||
<Instance Id="1">
|
||||
SRA T1, T0, 4
|
||||
</Instance>
|
||||
|
||||
<Instance Id="2">
|
||||
SRA T1, T0, 8
|
||||
</Instance>
|
||||
|
||||
<Instance Id="3">
|
||||
SRA T1, T0, 16
|
||||
</Instance>
|
||||
|
||||
<Instance Id="4">
|
||||
SRA T1, T0, 32
|
||||
</Instance>
|
||||
|
||||
</Instances>
|
||||
|
||||
<Outputs>
|
||||
|
||||
<ValueSet InputId="0" InstanceId="0">
|
||||
<Register Name="T0" Value0="0x808080FF" Value1="0xFFFFFFFF" />
|
||||
<Register Name="T1" Value0="0x808080FF" Value1="0xFFFFFFFF" />
|
||||
</ValueSet>
|
||||
|
||||
<ValueSet InputId="0" InstanceId="1">
|
||||
<Register Name="T0" Value0="0x808080FF" Value1="0xFFFFFFFF" />
|
||||
<Register Name="T1" Value0="0xF808080F" Value1="0xFFFFFFFF" />
|
||||
</ValueSet>
|
||||
|
||||
<ValueSet InputId="0" InstanceId="2">
|
||||
<Register Name="T0" Value0="0x808080FF" Value1="0xFFFFFFFF" />
|
||||
<Register Name="T1" Value0="0xFF808080" Value1="0xFFFFFFFF" />
|
||||
</ValueSet>
|
||||
|
||||
<ValueSet InputId="0" InstanceId="3">
|
||||
<Register Name="T0" Value0="0x808080FF" Value1="0xFFFFFFFF" />
|
||||
<Register Name="T1" Value0="0xFFFF8080" Value1="0xFFFFFFFF" />
|
||||
</ValueSet>
|
||||
|
||||
<ValueSet InputId="0" InstanceId="4">
|
||||
<Register Name="T0" Value0="0x808080FF" Value1="0xFFFFFFFF" />
|
||||
<Register Name="T1" Value0="0x808080FF" Value1="0xFFFFFFFF" />
|
||||
</ValueSet>
|
||||
|
||||
<ValueSet InputId="1" InstanceId="3">
|
||||
<Register Name="T0" Value0="0x008080FF" />
|
||||
<Register Name="T1" Value0="0x00000080" />
|
||||
</ValueSet>
|
||||
</Outputs>
|
||||
|
||||
</Test>
|
Loading…
x
Reference in New Issue
Block a user