1317019Sdim//===--- ARM.h - ARM-specific (not AArch64) Tool Helpers --------*- C++ -*-===// 2317019Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6317019Sdim// 7317019Sdim//===----------------------------------------------------------------------===// 8317019Sdim 9317019Sdim#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ARCH_ARM_H 10317019Sdim#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ARCH_ARM_H 11317019Sdim 12317019Sdim#include "clang/Driver/ToolChain.h" 13317019Sdim#include "llvm/ADT/StringRef.h" 14317019Sdim#include "llvm/ADT/Triple.h" 15317019Sdim#include "llvm/Option/Option.h" 16353358Sdim#include "llvm/Support/TargetParser.h" 17317019Sdim#include <string> 18317019Sdim#include <vector> 19317019Sdim 20317019Sdimnamespace clang { 21317019Sdimnamespace driver { 22317019Sdimnamespace tools { 23317019Sdimnamespace arm { 24317019Sdim 25317019Sdimstd::string getARMTargetCPU(StringRef CPU, llvm::StringRef Arch, 26317019Sdim const llvm::Triple &Triple); 27317019Sdimconst std::string getARMArch(llvm::StringRef Arch, const llvm::Triple &Triple); 28317019SdimStringRef getARMCPUForMArch(llvm::StringRef Arch, const llvm::Triple &Triple); 29353358Sdimllvm::ARM::ArchKind getLLVMArchKindForARM(StringRef CPU, StringRef Arch, 30353358Sdim const llvm::Triple &Triple); 31317019SdimStringRef getLLVMArchSuffixForARM(llvm::StringRef CPU, llvm::StringRef Arch, 32317019Sdim const llvm::Triple &Triple); 33317019Sdim 34344779Sdimvoid appendBE8LinkFlag(const llvm::opt::ArgList &Args, 35317019Sdim llvm::opt::ArgStringList &CmdArgs, 36317019Sdim const llvm::Triple &Triple); 37327952Sdimenum class ReadTPMode { 38327952Sdim Invalid, 39327952Sdim Soft, 40327952Sdim Cp15, 41327952Sdim}; 42327952Sdim 43317019Sdimenum class FloatABI { 44317019Sdim Invalid, 45317019Sdim Soft, 46317019Sdim SoftFP, 47317019Sdim Hard, 48317019Sdim}; 49317019Sdim 50317019SdimFloatABI getARMFloatABI(const ToolChain &TC, const llvm::opt::ArgList &Args); 51327952SdimReadTPMode getReadTPMode(const ToolChain &TC, const llvm::opt::ArgList &Args); 52317019Sdim 53317019Sdimbool useAAPCSForMachO(const llvm::Triple &T); 54317019Sdimvoid getARMArchCPUFromArgs(const llvm::opt::ArgList &Args, 55317019Sdim llvm::StringRef &Arch, llvm::StringRef &CPU, 56317019Sdim bool FromAs = false); 57317019Sdimvoid getARMTargetFeatures(const ToolChain &TC, const llvm::Triple &Triple, 58317019Sdim const llvm::opt::ArgList &Args, 59317019Sdim llvm::opt::ArgStringList &CmdArgs, 60317019Sdim std::vector<llvm::StringRef> &Features, bool ForAS); 61317019Sdimint getARMSubArchVersionNumber(const llvm::Triple &Triple); 62317019Sdimbool isARMMProfile(const llvm::Triple &Triple); 63317019Sdim 64317019Sdim} // end namespace arm 65317019Sdim} // end namespace tools 66317019Sdim} // end namespace driver 67317019Sdim} // end namespace clang 68317019Sdim 69317019Sdim#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ARCH_ARM_H 70