SparcTargetInfo.cpp revision 4cb1e13769856716261a4d315f8202bd918502c3
1//===-- SparcTargetInfo.cpp - Sparc Target Implementation -----------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#include "Sparc.h" 11#include "llvm/Module.h" 12#include "llvm/Target/TargetRegistry.h" 13using namespace llvm; 14 15Target llvm::TheSparcTarget; 16 17static unsigned Sparc_JITMatchQuality() { 18 return 0; 19} 20 21static unsigned Sparc_TripleMatchQuality(const std::string &TT) { 22 if (TT.size() >= 6 && std::string(TT.begin(), TT.begin()+6) == "sparc-") 23 return 20; 24 25 return 0; 26} 27 28static unsigned Sparc_ModuleMatchQuality(const Module &M) { 29 // Check for a triple match. 30 if (unsigned Q = Sparc_TripleMatchQuality(M.getTargetTriple())) 31 return Q; 32 33 // Otherwise if the target triple is non-empty, we don't match. 34 if (!M.getTargetTriple().empty()) return 0; 35 36 // FIXME: This is bad, the target matching algorithm shouldn't depend on the 37 // host. 38 if (M.getEndianness() == Module::BigEndian && 39 M.getPointerSize() == Module::Pointer32) 40#ifdef __sparc__ 41 return 20; // BE/32 ==> Prefer sparc on sparc 42#else 43 return 5; // BE/32 ==> Prefer ppc elsewhere 44#endif 45 else if (M.getEndianness() != Module::AnyEndianness || 46 M.getPointerSize() != Module::AnyPointerSize) 47 return 0; // Match for some other target 48 49#if defined(__sparc__) 50 return 10; 51#else 52 return 0; 53#endif 54} 55 56extern "C" void LLVMInitializeSparcTargetInfo() { 57 TargetRegistry::RegisterTarget(TheSparcTarget, "sparc", 58 "Sparc", 59 &Sparc_TripleMatchQuality, 60 &Sparc_ModuleMatchQuality, 61 &Sparc_JITMatchQuality); 62} 63