mirror of
https://github.com/libretro/Play-.git
synced 2025-03-04 17:28:29 +00:00
git-svn-id: http://svn.purei.org/purei/trunk@137 b36208d7-6611-0410-8bec-b1987f11c4a2
This commit is contained in:
parent
794d99503a
commit
00bd1c1978
@ -45,6 +45,41 @@ namespace MipsAssemblerDefinitions
|
|||||||
AssemblerFunctionType m_Assembler;
|
AssemblerFunctionType m_Assembler;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//RdRsRt Parser
|
||||||
|
//-----------------------------
|
||||||
|
struct RdRsRt
|
||||||
|
{
|
||||||
|
typedef void (CMIPSAssembler::*AssemblerFunctionType) (unsigned int, unsigned int, unsigned int);
|
||||||
|
|
||||||
|
RdRsRt(AssemblerFunctionType Assembler) :
|
||||||
|
m_Assembler(Assembler)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void operator ()(tokenizer<>& Tokens, tokenizer<>::iterator& itToken, CMIPSAssembler* pAssembler)
|
||||||
|
{
|
||||||
|
unsigned int nRT, nRS, nRD;
|
||||||
|
|
||||||
|
if(itToken == Tokens.end()) throw exception();
|
||||||
|
nRD = CMIPSAssembler::GetRegisterIndex((*(++itToken)).c_str());
|
||||||
|
|
||||||
|
if(itToken == Tokens.end()) throw exception();
|
||||||
|
nRS = CMIPSAssembler::GetRegisterIndex((*(++itToken)).c_str());
|
||||||
|
|
||||||
|
if(itToken == Tokens.end()) throw exception();
|
||||||
|
nRT = CMIPSAssembler::GetRegisterIndex((*(++itToken)).c_str());
|
||||||
|
|
||||||
|
if(nRT == -1) throw exception();
|
||||||
|
if(nRS == -1) throw exception();
|
||||||
|
if(nRD == -1) throw exception();
|
||||||
|
|
||||||
|
bind(m_Assembler, pAssembler, _1, _2, _3)(nRD, nRS, nRT);
|
||||||
|
}
|
||||||
|
|
||||||
|
AssemblerFunctionType m_Assembler;
|
||||||
|
};
|
||||||
|
|
||||||
//RtImm Parser
|
//RtImm Parser
|
||||||
//-----------------------------
|
//-----------------------------
|
||||||
struct RtImm
|
struct RtImm
|
||||||
@ -134,6 +169,7 @@ namespace MipsAssemblerDefinitions
|
|||||||
SpecInstruction<RtRsImm> Instruction_ADDIU = SpecInstruction<RtRsImm>("ADDIU", RtRsImm(&CMIPSAssembler::ADDIU));
|
SpecInstruction<RtRsImm> Instruction_ADDIU = SpecInstruction<RtRsImm>("ADDIU", RtRsImm(&CMIPSAssembler::ADDIU));
|
||||||
SpecInstruction<RtImm> Instruction_LUI = SpecInstruction<RtImm>("LUI", RtImm(&CMIPSAssembler::LUI));
|
SpecInstruction<RtImm> Instruction_LUI = SpecInstruction<RtImm>("LUI", RtImm(&CMIPSAssembler::LUI));
|
||||||
SpecInstruction<RtRsSa> Instruction_SLL = SpecInstruction<RtRsSa>("SLL", RtRsSa(&CMIPSAssembler::SLL));
|
SpecInstruction<RtRsSa> Instruction_SLL = SpecInstruction<RtRsSa>("SLL", RtRsSa(&CMIPSAssembler::SLL));
|
||||||
|
SpecInstruction<RdRsRt> Instruction_SLTU = SpecInstruction<RdRsRt>("SLTU", RdRsRt(&CMIPSAssembler::SLTU));
|
||||||
SpecInstruction<RtRsSa> Instruction_SRA = SpecInstruction<RtRsSa>("SRA", RtRsSa(&CMIPSAssembler::SRA));
|
SpecInstruction<RtRsSa> Instruction_SRA = SpecInstruction<RtRsSa>("SRA", RtRsSa(&CMIPSAssembler::SRA));
|
||||||
|
|
||||||
Instruction* g_Instructions[] =
|
Instruction* g_Instructions[] =
|
||||||
@ -141,6 +177,7 @@ namespace MipsAssemblerDefinitions
|
|||||||
&Instruction_ADDIU,
|
&Instruction_ADDIU,
|
||||||
&Instruction_LUI,
|
&Instruction_LUI,
|
||||||
&Instruction_SLL,
|
&Instruction_SLL,
|
||||||
|
&Instruction_SLTU,
|
||||||
&Instruction_SRA,
|
&Instruction_SRA,
|
||||||
NULL,
|
NULL,
|
||||||
};
|
};
|
||||||
|
54
tests/SLTU.xml
Normal file
54
tests/SLTU.xml
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<Test>
|
||||||
|
<Inputs>
|
||||||
|
|
||||||
|
<!-- Less Than -->
|
||||||
|
<ValueSet InputId="0">
|
||||||
|
<Register Name="T0" Value0="0xFFFFFFFF" Value1="0xFFFFFFFF"/>
|
||||||
|
<Register Name="T1" Value0="0x00000001" />
|
||||||
|
</ValueSet>
|
||||||
|
|
||||||
|
<!-- Greater Than -->
|
||||||
|
<ValueSet InputId="1">
|
||||||
|
<Register Name="T0" Value0="0x00000001" />
|
||||||
|
<Register Name="T1" Value0="0xFFFFFFFF" Value1="0xFFFFFFFF"/>
|
||||||
|
</ValueSet>
|
||||||
|
|
||||||
|
<!-- Equal -->
|
||||||
|
<ValueSet InputId="2">
|
||||||
|
<Register Name="T0" Value0="0xFFFFFFFF" Value1="0xFFFFFFFF"/>
|
||||||
|
<Register Name="T1" Value0="0xFFFFFFFF" Value1="0xFFFFFFFF"/>
|
||||||
|
</ValueSet>
|
||||||
|
|
||||||
|
</Inputs>
|
||||||
|
|
||||||
|
<Instances>
|
||||||
|
|
||||||
|
<Instance Id="0">
|
||||||
|
SLTU T2, T1, T0
|
||||||
|
</Instance>
|
||||||
|
|
||||||
|
</Instances>
|
||||||
|
|
||||||
|
<Outputs>
|
||||||
|
|
||||||
|
<ValueSet InputId="0" InstanceId="0">
|
||||||
|
<Register Name="T0" Value0="0xFFFFFFFF" Value1="0xFFFFFFFF"/>
|
||||||
|
<Register Name="T1" Value0="0x00000001" />
|
||||||
|
<Register Name="T2" Value0="0x00000001" />
|
||||||
|
</ValueSet>
|
||||||
|
|
||||||
|
<ValueSet InputId="1" InstanceId="0">
|
||||||
|
<Register Name="T0" Value0="0x00000001" />
|
||||||
|
<Register Name="T1" Value0="0xFFFFFFFF" Value1="0xFFFFFFFF"/>
|
||||||
|
<Register Name="T2" Value0="0x00000000" />
|
||||||
|
</ValueSet>
|
||||||
|
|
||||||
|
<ValueSet InputId="2" InstanceId="0">
|
||||||
|
<Register Name="T0" Value0="0xFFFFFFFF" Value1="0xFFFFFFFF"/>
|
||||||
|
<Register Name="T1" Value0="0xFFFFFFFF" Value1="0xFFFFFFFF"/>
|
||||||
|
<Register Name="T2" Value0="0x00000000" />
|
||||||
|
</ValueSet>
|
||||||
|
|
||||||
|
</Outputs>
|
||||||
|
|
||||||
|
</Test>
|
Loading…
x
Reference in New Issue
Block a user