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