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