xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/CSKY/CSKYSubtarget.cpp (revision 81ad626541db97eb356e2c1d4a20eb2a26a766ab)
1349cc55cSDimitry Andric //===-- CSKYSubtarget.h - Define Subtarget for the CSKY----------*- C++ -*-===//
2349cc55cSDimitry Andric //
3349cc55cSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4349cc55cSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5349cc55cSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6349cc55cSDimitry Andric //
7349cc55cSDimitry Andric //===----------------------------------------------------------------------===//
8349cc55cSDimitry Andric //
9349cc55cSDimitry Andric // This file declares the CSKY specific subclass of TargetSubtargetInfo.
10349cc55cSDimitry Andric //
11349cc55cSDimitry Andric //===----------------------------------------------------------------------===//
12349cc55cSDimitry Andric 
13349cc55cSDimitry Andric #include "CSKYSubtarget.h"
14*81ad6265SDimitry Andric #include "llvm/CodeGen/MachineFrameInfo.h"
15349cc55cSDimitry Andric 
16349cc55cSDimitry Andric using namespace llvm;
17349cc55cSDimitry Andric 
18349cc55cSDimitry Andric #define DEBUG_TYPE "csky-subtarget"
19349cc55cSDimitry Andric #define GET_SUBTARGETINFO_TARGET_DESC
20349cc55cSDimitry Andric #define GET_SUBTARGETINFO_CTOR
21349cc55cSDimitry Andric #include "CSKYGenSubtargetInfo.inc"
22349cc55cSDimitry Andric 
anchor()23349cc55cSDimitry Andric void CSKYSubtarget::anchor() {}
24349cc55cSDimitry Andric 
initializeSubtargetDependencies(const Triple & TT,StringRef CPUName,StringRef TuneCPUName,StringRef FS)25349cc55cSDimitry Andric CSKYSubtarget &CSKYSubtarget::initializeSubtargetDependencies(
26349cc55cSDimitry Andric     const Triple &TT, StringRef CPUName, StringRef TuneCPUName, StringRef FS) {
27349cc55cSDimitry Andric 
28349cc55cSDimitry Andric   if (CPUName.empty())
29349cc55cSDimitry Andric     CPUName = "generic";
30349cc55cSDimitry Andric   if (TuneCPUName.empty())
31349cc55cSDimitry Andric     TuneCPUName = CPUName;
32349cc55cSDimitry Andric 
33349cc55cSDimitry Andric   UseHardFloat = false;
34349cc55cSDimitry Andric   UseHardFloatABI = false;
35349cc55cSDimitry Andric   HasFPUv2SingleFloat = false;
36349cc55cSDimitry Andric   HasFPUv2DoubleFloat = false;
37*81ad6265SDimitry Andric   HasFPUv3HalfWord = false;
38*81ad6265SDimitry Andric   HasFPUv3HalfFloat = false;
39349cc55cSDimitry Andric   HasFPUv3SingleFloat = false;
40349cc55cSDimitry Andric   HasFPUv3DoubleFloat = false;
41*81ad6265SDimitry Andric   HasFdivdu = false;
42*81ad6265SDimitry Andric   HasFLOATE1 = false;
43*81ad6265SDimitry Andric   HasFLOAT1E2 = false;
44*81ad6265SDimitry Andric   HasFLOAT1E3 = false;
45*81ad6265SDimitry Andric   HasFLOAT3E4 = false;
46*81ad6265SDimitry Andric   HasFLOAT7E60 = false;
47349cc55cSDimitry Andric   HasExtendLrw = false;
48*81ad6265SDimitry Andric   HasBTST16 = false;
49*81ad6265SDimitry Andric   HasTrust = false;
50*81ad6265SDimitry Andric   HasJAVA = false;
51*81ad6265SDimitry Andric   HasCache = false;
52*81ad6265SDimitry Andric   HasNVIC = false;
53*81ad6265SDimitry Andric   HasDSP = false;
54*81ad6265SDimitry Andric   HasDSP1E2 = false;
55*81ad6265SDimitry Andric   HasDSPE60 = false;
56*81ad6265SDimitry Andric   HasDSPV2 = false;
57*81ad6265SDimitry Andric   HasDSP_Silan = false;
58349cc55cSDimitry Andric   HasDoloop = false;
59*81ad6265SDimitry Andric   HasHardwareDivide = false;
60349cc55cSDimitry Andric   HasHighRegisters = false;
61*81ad6265SDimitry Andric   HasVDSPV2 = false;
62*81ad6265SDimitry Andric   HasVDSP2E3 = false;
63*81ad6265SDimitry Andric   HasVDSP2E60F = false;
64*81ad6265SDimitry Andric   ReadTPHard = false;
65*81ad6265SDimitry Andric   HasVDSPV1_128 = false;
66*81ad6265SDimitry Andric   UseCCRT = false;
67*81ad6265SDimitry Andric   DumpConstPool = false;
68*81ad6265SDimitry Andric   EnableInterruptAttribute = false;
69*81ad6265SDimitry Andric   HasPushPop = false;
70*81ad6265SDimitry Andric   HasSTM = false;
71*81ad6265SDimitry Andric   SmartMode = false;
72*81ad6265SDimitry Andric   EnableStackSize = false;
73349cc55cSDimitry Andric 
74349cc55cSDimitry Andric   HasE1 = false;
75349cc55cSDimitry Andric   HasE2 = false;
76349cc55cSDimitry Andric   Has2E3 = false;
77349cc55cSDimitry Andric   HasMP = false;
78349cc55cSDimitry Andric   Has3E3r1 = false;
79349cc55cSDimitry Andric   Has3r1E3r2 = false;
80349cc55cSDimitry Andric   Has3r2E3r3 = false;
81349cc55cSDimitry Andric   Has3E7 = false;
82349cc55cSDimitry Andric   HasMP1E2 = false;
83349cc55cSDimitry Andric   Has7E10 = false;
84349cc55cSDimitry Andric   Has10E60 = false;
85349cc55cSDimitry Andric 
86349cc55cSDimitry Andric   ParseSubtargetFeatures(CPUName, TuneCPUName, FS);
87349cc55cSDimitry Andric   return *this;
88349cc55cSDimitry Andric }
89349cc55cSDimitry Andric 
CSKYSubtarget(const Triple & TT,StringRef CPU,StringRef TuneCPU,StringRef FS,const TargetMachine & TM)90349cc55cSDimitry Andric CSKYSubtarget::CSKYSubtarget(const Triple &TT, StringRef CPU, StringRef TuneCPU,
91349cc55cSDimitry Andric                              StringRef FS, const TargetMachine &TM)
92349cc55cSDimitry Andric     : CSKYGenSubtargetInfo(TT, CPU, TuneCPU, FS),
93349cc55cSDimitry Andric       FrameLowering(initializeSubtargetDependencies(TT, CPU, TuneCPU, FS)),
94349cc55cSDimitry Andric       InstrInfo(*this), RegInfo(), TLInfo(TM, *this) {}
95349cc55cSDimitry Andric 
useHardFloatABI() const96349cc55cSDimitry Andric bool CSKYSubtarget::useHardFloatABI() const {
97349cc55cSDimitry Andric   auto FloatABI = getTargetLowering()->getTargetMachine().Options.FloatABIType;
98349cc55cSDimitry Andric 
99349cc55cSDimitry Andric   if (FloatABI == FloatABI::Default)
100349cc55cSDimitry Andric     return UseHardFloatABI;
101349cc55cSDimitry Andric   else
102349cc55cSDimitry Andric     return FloatABI == FloatABI::Hard;
103349cc55cSDimitry Andric }
104