AArch64TargetInfo.cpp revision 360784
1//===-- AArch64TargetInfo.cpp - AArch64 Target Implementation -----------------===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8 9#include "TargetInfo/AArch64TargetInfo.h" 10#include "llvm/Support/TargetRegistry.h" 11 12using namespace llvm; 13Target &llvm::getTheAArch64leTarget() { 14 static Target TheAArch64leTarget; 15 return TheAArch64leTarget; 16} 17Target &llvm::getTheAArch64beTarget() { 18 static Target TheAArch64beTarget; 19 return TheAArch64beTarget; 20} 21Target &llvm::getTheAArch64_32Target() { 22 static Target TheAArch64leTarget; 23 return TheAArch64leTarget; 24} 25Target &llvm::getTheARM64Target() { 26 static Target TheARM64Target; 27 return TheARM64Target; 28} 29Target &llvm::getTheARM64_32Target() { 30 static Target TheARM64_32Target; 31 return TheARM64_32Target; 32} 33 34extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeAArch64TargetInfo() { 35 // Now register the "arm64" name for use with "-march". We don't want it to 36 // take possession of the Triple::aarch64 tags though. 37 TargetRegistry::RegisterTarget(getTheARM64Target(), "arm64", 38 "ARM64 (little endian)", "AArch64", 39 [](Triple::ArchType) { return false; }, true); 40 TargetRegistry::RegisterTarget(getTheARM64_32Target(), "arm64_32", 41 "ARM64 (little endian ILP32)", "AArch64", 42 [](Triple::ArchType) { return false; }, true); 43 44 RegisterTarget<Triple::aarch64, /*HasJIT=*/true> Z( 45 getTheAArch64leTarget(), "aarch64", "AArch64 (little endian)", "AArch64"); 46 RegisterTarget<Triple::aarch64_be, /*HasJIT=*/true> W( 47 getTheAArch64beTarget(), "aarch64_be", "AArch64 (big endian)", "AArch64"); 48 RegisterTarget<Triple::aarch64_32, /*HasJIT=*/true> X( 49 getTheAArch64_32Target(), "aarch64_32", "AArch64 (little endian ILP32)", "AArch64"); 50} 51