// $Id$ -*-c++-*- //*************************************************************************** // File: // SparcInstrSelectionSupport.h // // Purpose: // // History: // 10/17/01 - Vikram Adve - Created //**************************************************************************/ #ifndef SPARC_INSTR_SELECTION_SUPPORT_h #define SPARC_INSTR_SELECTION_SUPPORT_h #include "llvm/DerivedTypes.h" #include "llvm/Value.h" inline MachineOpCode ChooseLoadInstruction(const Type *DestTy) { switch (DestTy->getPrimitiveID()) { case Type::BoolTyID: case Type::UByteTyID: return LDUB; case Type::SByteTyID: return LDSB; case Type::UShortTyID: return LDUH; case Type::ShortTyID: return LDSH; case Type::UIntTyID: return LDUW; case Type::IntTyID: return LDSW; case Type::PointerTyID: case Type::ULongTyID: case Type::LongTyID: return LDX; case Type::FloatTyID: return LD; case Type::DoubleTyID: return 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 STB; case Type::UShortTyID: case Type::ShortTyID: return STH; case Type::UIntTyID: case Type::IntTyID: return STW; case Type::PointerTyID: case Type::ULongTyID: case Type::LongTyID: return STX; case Type::FloatTyID: return ST; case Type::DoubleTyID: return STD; default: assert(0 && "Invalid type for Store instruction"); } return 0; } inline MachineOpCode ChooseAddInstructionByType(const Type* resultType) { MachineOpCode opCode = INVALID_OPCODE; if (resultType->isIntegral() || isa(resultType) || isa(resultType) || resultType == Type::LabelTy || resultType == Type::BoolTy) { opCode = ADD; } else switch(resultType->getPrimitiveID()) { case Type::FloatTyID: opCode = FADDS; break; case Type::DoubleTyID: opCode = FADDD; break; default: assert(0 && "Invalid type for ADD instruction"); break; } return opCode; } #endif