aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/JSBackend/TargetInfo/JSBackendTargetInfo.cpp
blob: 66a3f4d6e83fd2a5af174b6267cf3602215adfdf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//===-- JSBackendTargetInfo.cpp - JSBackend Target Implementation -------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===--------------------------------------------------------------------===//

#include "JSTargetMachine.h"
#include "MCTargetDesc/JSBackendMCTargetDesc.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/TargetRegistry.h"
using namespace llvm;

Target llvm::TheJSBackendTarget;

static unsigned JSBackend_TripleMatchQuality(const std::string &TT) {
  switch (Triple(TT).getArch()) {
  case Triple::asmjs:
    // That's us!
    return 20;

  case Triple::le32:
  case Triple::x86:
    // For compatibility with older versions of Emscripten, we also basically
    // support generating code for le32-unknown-nacl and i386-pc-linux-gnu,
    // but we use a low number here so that we're not the default.
    return 1;

  default:
    return 0;
  }
}

extern "C" void LLVMInitializeJSBackendTargetInfo() { 
  TargetRegistry::RegisterTarget(TheJSBackendTarget, "js",
                                 "JavaScript (asm.js, emscripten) backend",
                                 &JSBackend_TripleMatchQuality);
}