1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | #ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ARCH_MIPS_H |
10 | #define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_ARCH_MIPS_H |
11 | |
12 | #include "clang/Driver/Driver.h" |
13 | #include "llvm/ADT/StringRef.h" |
14 | #include "llvm/ADT/Triple.h" |
15 | #include "llvm/Option/Option.h" |
16 | #include <string> |
17 | #include <vector> |
18 | |
19 | namespace clang { |
20 | namespace driver { |
21 | namespace tools { |
22 | |
23 | namespace mips { |
24 | typedef enum { Legacy = 1, Std2008 = 2 } IEEE754Standard; |
25 | |
26 | enum class FloatABI { |
27 | Invalid, |
28 | Soft, |
29 | Hard, |
30 | }; |
31 | |
32 | IEEE754Standard getIEEE754Standard(StringRef &CPU); |
33 | bool hasCompactBranches(StringRef &CPU); |
34 | void getMipsCPUAndABI(const llvm::opt::ArgList &Args, |
35 | const llvm::Triple &Triple, StringRef &CPUName, |
36 | StringRef &ABIName); |
37 | void getMIPSTargetFeatures(const Driver &D, const llvm::Triple &Triple, |
38 | const llvm::opt::ArgList &Args, |
39 | std::vector<StringRef> &Features); |
40 | StringRef getGnuCompatibleMipsABIName(StringRef ABI); |
41 | mips::FloatABI getMipsFloatABI(const Driver &D, const llvm::opt::ArgList &Args); |
42 | std::string getMipsABILibSuffix(const llvm::opt::ArgList &Args, |
43 | const llvm::Triple &Triple); |
44 | bool hasMipsAbiArg(const llvm::opt::ArgList &Args, const char *Value); |
45 | bool isUCLibc(const llvm::opt::ArgList &Args); |
46 | bool isNaN2008(const llvm::opt::ArgList &Args, const llvm::Triple &Triple); |
47 | bool isFP64ADefault(const llvm::Triple &Triple, StringRef CPUName); |
48 | bool isFPXXDefault(const llvm::Triple &Triple, StringRef CPUName, |
49 | StringRef ABIName, mips::FloatABI FloatABI); |
50 | bool shouldUseFPXX(const llvm::opt::ArgList &Args, const llvm::Triple &Triple, |
51 | StringRef CPUName, StringRef ABIName, |
52 | mips::FloatABI FloatABI); |
53 | bool supportsIndirectJumpHazardBarrier(StringRef &CPU); |
54 | |
55 | } |
56 | } |
57 | } |
58 | } |
59 | |
60 | #endif |
61 | |