Added MIN.S and MAX.S and some missing CodeGen cases.

git-svn-id: http://svn.purei.org/purei/trunk@512 b36208d7-6611-0410-8bec-b1987f11c4a2
This commit is contained in:
jpd002 2009-05-02 02:11:55 +00:00
parent 965705ad39
commit d0fef1d64a
9 changed files with 93 additions and 3 deletions

View file

@ -1247,6 +1247,19 @@ void CCodeGen::Cmp(CONDITION nCondition)
Cmp(nCondition);
}
else if(FitsPattern<ConstantRegister>())
{
RegisterConstant::PatternValue ops = GetPattern<ConstantRegister>();
unsigned int register1 = AllocateRegister();
unsigned int register2 = ops.second;
LoadConstantInRegister(register1, ops.first);
PushReg(register1);
PushReg(register2);
Cmp(nCondition);
}
else if(FitsPattern<RegisterConstant>())
{
RegisterConstant::PatternValue ops = GetPattern<RegisterConstant>();
@ -2035,6 +2048,34 @@ void CCodeGen::Shl64(uint8 nAmount)
ops.q <<= nAmount;
PushCst(ops.d0);
PushCst(ops.d1);
}
else if(FitsPattern<ConstantRelative>())
{
//Upper = Relative
//Lower = Constant
ConstantRelative::PatternValue ops(GetPattern<ConstantRelative>());
if(nAmount < 32)
{
unsigned int register1 = AllocateRegister();
unsigned int register2 = AllocateRegister();
LoadConstantInRegister(register1, ops.first);
LoadRelativeInRegister(register2, ops.second);
m_Assembler.ShldEd(
CX86Assembler::MakeRegisterAddress(m_nRegisterLookupEx[register2]),
m_nRegisterLookupEx[register1], nAmount);
m_Assembler.ShlEd(CX86Assembler::MakeRegisterAddress(m_nRegisterLookupEx[register1]), nAmount);
PushReg(register1);
PushReg(register2);
}
else
{
assert(0);
}
}
else
{