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/MC/TargetRegistry.h" 11 12 using namespace llvm; 13 Target &llvm::getTheAArch64leTarget() { 14 static Target TheAArch64leTarget; 15 return TheAArch64leTarget; 16 } 17 Target &llvm::getTheAArch64beTarget() { 18 static Target TheAArch64beTarget; 19 return TheAArch64beTarget; 20 } 21 Target &llvm::getTheAArch64_32Target() { 22 static Target TheAArch64leTarget; 23 return TheAArch64leTarget; 24 } 25 Target &llvm::getTheARM64Target() { 26 static Target TheARM64Target; 27 return TheARM64Target; 28 } 29 Target &llvm::getTheARM64_32Target() { 30 static Target TheARM64_32Target; 31 return TheARM64_32Target; 32 } 33 34 extern "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