//===-- 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::LDUBr; case Type::SByteTyID: return V9::LDSBr; case Type::UShortTyID: return V9::LDUHr; case Type::ShortTyID: return V9::LDSHr; case Type::UIntTyID: return V9::LDUWr; case Type::IntTyID: return V9::LDSWr; case Type::PointerTyID: case Type::ULongTyID: case Type::LongTyID: return V9::LDXr; case Type::FloatTyID: return V9::LDFr; case Type::DoubleTyID: return V9::LDDFr; 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::STBr; case Type::UShortTyID: case Type::ShortTyID: return V9::STHr; case Type::UIntTyID: case Type::IntTyID: return V9::STWr; case Type::PointerTyID: case Type::ULongTyID: case Type::LongTyID: return V9::STXr; case Type::FloatTyID: return V9::STFr; case Type::DoubleTyID: return V9::STDFr; 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(resultType) || isa(resultType) || resultType == Type::LabelTy) { opCode = V9::ADDr; } 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