1 | //===-- CSKYSubtarget.h - Define Subtarget for the CSKY----------*- C++ -*-===// |
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 | // This file declares the CSKY specific subclass of TargetSubtargetInfo. |
10 | // |
11 | //===----------------------------------------------------------------------===// |
12 | |
13 | #include "CSKYSubtarget.h" |
14 | #include "llvm/CodeGen/MachineFrameInfo.h" |
15 | |
16 | using namespace llvm; |
17 | |
18 | #define DEBUG_TYPE "csky-subtarget" |
19 | #define GET_SUBTARGETINFO_TARGET_DESC |
20 | #define GET_SUBTARGETINFO_CTOR |
21 | #include "CSKYGenSubtargetInfo.inc" |
22 | |
23 | void CSKYSubtarget::anchor() {} |
24 | |
25 | CSKYSubtarget &CSKYSubtarget::initializeSubtargetDependencies( |
26 | const Triple &TT, StringRef CPUName, StringRef TuneCPUName, StringRef FS) { |
27 | |
28 | if (CPUName.empty()) |
29 | CPUName = "generic" ; |
30 | if (TuneCPUName.empty()) |
31 | TuneCPUName = CPUName; |
32 | |
33 | UseHardFloat = false; |
34 | UseHardFloatABI = false; |
35 | HasFPUv2SingleFloat = false; |
36 | HasFPUv2DoubleFloat = false; |
37 | HasFPUv3HalfWord = false; |
38 | HasFPUv3HalfFloat = false; |
39 | HasFPUv3SingleFloat = false; |
40 | HasFPUv3DoubleFloat = false; |
41 | HasFdivdu = false; |
42 | HasFLOATE1 = false; |
43 | HasFLOAT1E2 = false; |
44 | HasFLOAT1E3 = false; |
45 | HasFLOAT3E4 = false; |
46 | HasFLOAT7E60 = false; |
47 | HasExtendLrw = false; |
48 | HasBTST16 = false; |
49 | HasTrust = false; |
50 | HasJAVA = false; |
51 | HasCache = false; |
52 | HasNVIC = false; |
53 | HasDSP = false; |
54 | HasDSP1E2 = false; |
55 | HasDSPE60 = false; |
56 | HasDSPV2 = false; |
57 | HasDSP_Silan = false; |
58 | HasDoloop = false; |
59 | HasHardwareDivide = false; |
60 | HasHighRegisters = false; |
61 | HasVDSPV2 = false; |
62 | HasVDSP2E3 = false; |
63 | HasVDSP2E60F = false; |
64 | ReadTPHard = false; |
65 | HasVDSPV1_128 = false; |
66 | UseCCRT = false; |
67 | DumpConstPool = false; |
68 | EnableInterruptAttribute = false; |
69 | HasPushPop = false; |
70 | HasSTM = false; |
71 | SmartMode = false; |
72 | EnableStackSize = false; |
73 | |
74 | HasE1 = false; |
75 | HasE2 = false; |
76 | Has2E3 = false; |
77 | HasMP = false; |
78 | Has3E3r1 = false; |
79 | Has3r1E3r2 = false; |
80 | Has3r2E3r3 = false; |
81 | Has3E7 = false; |
82 | HasMP1E2 = false; |
83 | Has7E10 = false; |
84 | Has10E60 = false; |
85 | |
86 | ParseSubtargetFeatures(CPU: CPUName, TuneCPU: TuneCPUName, FS); |
87 | return *this; |
88 | } |
89 | |
90 | CSKYSubtarget::CSKYSubtarget(const Triple &TT, StringRef CPU, StringRef TuneCPU, |
91 | StringRef FS, const TargetMachine &TM) |
92 | : CSKYGenSubtargetInfo(TT, CPU, TuneCPU, FS), |
93 | FrameLowering(initializeSubtargetDependencies(TT, CPUName: CPU, TuneCPUName: TuneCPU, FS)), |
94 | InstrInfo(*this), RegInfo(), TLInfo(TM, *this) {} |
95 | |
96 | bool CSKYSubtarget::useHardFloatABI() const { |
97 | auto FloatABI = getTargetLowering()->getTargetMachine().Options.FloatABIType; |
98 | |
99 | if (FloatABI == FloatABI::Default) |
100 | return UseHardFloatABI; |
101 | else |
102 | return FloatABI == FloatABI::Hard; |
103 | } |
104 | |