| // $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<PointerType>(resultType) || |
| isa<FunctionType>(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 |