llvm-6502/lib/Target/SparcV9/SparcV9InstrSelectionSupport.h
2003-05-20 20:32:24 +00:00

81 lines
2.0 KiB
C++

//===-- llvm/CodeGen/SparcInstrSelectionSupport.h ---------------*- C++ -*-===//
//
//
//
//===----------------------------------------------------------------------===//
#ifndef SPARC_INSTR_SELECTION_SUPPORT_h
#define SPARC_INSTR_SELECTION_SUPPORT_h
#include "llvm/DerivedTypes.h"
inline MachineOpCode
ChooseLoadInstruction(const Type *DestTy)
{
switch (DestTy->getPrimitiveID()) {
case Type::BoolTyID:
case Type::UByteTyID: return V9::LDUB;
case Type::SByteTyID: return V9::LDSB;
case Type::UShortTyID: return V9::LDUH;
case Type::ShortTyID: return V9::LDSH;
case Type::UIntTyID: return V9::LDUW;
case Type::IntTyID: return V9::LDSW;
case Type::PointerTyID:
case Type::ULongTyID:
case Type::LongTyID: return V9::LDX;
case Type::FloatTyID: return V9::LD;
case Type::DoubleTyID: return V9::LDD;
default: assert(0 && "Invalid type for Load instruction");
}
return 0;
}
inline MachineOpCode
ChooseStoreInstruction(const Type *DestTy)
{
switch (DestTy->getPrimitiveID()) {
case Type::BoolTyID:
case Type::UByteTyID:
case Type::SByteTyID: return V9::STB;
case Type::UShortTyID:
case Type::ShortTyID: return V9::STH;
case Type::UIntTyID:
case Type::IntTyID: return V9::STW;
case Type::PointerTyID:
case Type::ULongTyID:
case Type::LongTyID: return V9::STX;
case Type::FloatTyID: return V9::ST;
case Type::DoubleTyID: return V9::STD;
default: assert(0 && "Invalid type for Store instruction");
}
return 0;
}
inline MachineOpCode
ChooseAddInstructionByType(const Type* resultType)
{
MachineOpCode opCode = V9::INVALID_OPCODE;
if (resultType->isIntegral() ||
isa<PointerType>(resultType) ||
isa<FunctionType>(resultType) ||
resultType == Type::LabelTy)
{
opCode = V9::ADD;
}
else
switch(resultType->getPrimitiveID())
{
case Type::FloatTyID: opCode = V9::FADDS; break;
case Type::DoubleTyID: opCode = V9::FADDD; break;
default: assert(0 && "Invalid type for ADD instruction"); break;
}
return opCode;
}
#endif