1de10a02fSZi Xuan Wu //===-- CSKYSubtarget.h - Define Subtarget for the CSKY----------*- C++ -*-===//
2de10a02fSZi Xuan Wu //
3de10a02fSZi Xuan Wu // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4de10a02fSZi Xuan Wu // See https://llvm.org/LICENSE.txt for license information.
5de10a02fSZi Xuan Wu // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6de10a02fSZi Xuan Wu //
7de10a02fSZi Xuan Wu //===----------------------------------------------------------------------===//
8de10a02fSZi Xuan Wu //
9de10a02fSZi Xuan Wu // This file declares the CSKY specific subclass of TargetSubtargetInfo.
10de10a02fSZi Xuan Wu //
11de10a02fSZi Xuan Wu //===----------------------------------------------------------------------===//
12de10a02fSZi Xuan Wu
13de10a02fSZi Xuan Wu #include "CSKYSubtarget.h"
14*989f1c72Sserge-sans-paille #include "llvm/CodeGen/MachineFrameInfo.h"
15de10a02fSZi Xuan Wu
16de10a02fSZi Xuan Wu using namespace llvm;
17de10a02fSZi Xuan Wu
18de10a02fSZi Xuan Wu #define DEBUG_TYPE "csky-subtarget"
19de10a02fSZi Xuan Wu #define GET_SUBTARGETINFO_TARGET_DESC
20de10a02fSZi Xuan Wu #define GET_SUBTARGETINFO_CTOR
21de10a02fSZi Xuan Wu #include "CSKYGenSubtargetInfo.inc"
22de10a02fSZi Xuan Wu
anchor()23de10a02fSZi Xuan Wu void CSKYSubtarget::anchor() {}
24de10a02fSZi Xuan Wu
initializeSubtargetDependencies(const Triple & TT,StringRef CPUName,StringRef TuneCPUName,StringRef FS)25de10a02fSZi Xuan Wu CSKYSubtarget &CSKYSubtarget::initializeSubtargetDependencies(
26de10a02fSZi Xuan Wu const Triple &TT, StringRef CPUName, StringRef TuneCPUName, StringRef FS) {
27de10a02fSZi Xuan Wu
28de10a02fSZi Xuan Wu if (CPUName.empty())
29de10a02fSZi Xuan Wu CPUName = "generic";
30de10a02fSZi Xuan Wu if (TuneCPUName.empty())
31de10a02fSZi Xuan Wu TuneCPUName = CPUName;
32de10a02fSZi Xuan Wu
33cf78715cSZi Xuan Wu UseHardFloat = false;
34cf78715cSZi Xuan Wu UseHardFloatABI = false;
35cf78715cSZi Xuan Wu HasFPUv2SingleFloat = false;
36cf78715cSZi Xuan Wu HasFPUv2DoubleFloat = false;
379ee96aaaSZi Xuan Wu HasFPUv3HalfWord = false;
389ee96aaaSZi Xuan Wu HasFPUv3HalfFloat = false;
39cf78715cSZi Xuan Wu HasFPUv3SingleFloat = false;
40cf78715cSZi Xuan Wu HasFPUv3DoubleFloat = false;
419ee96aaaSZi Xuan Wu HasFdivdu = false;
429ee96aaaSZi Xuan Wu HasFLOATE1 = false;
439ee96aaaSZi Xuan Wu HasFLOAT1E2 = false;
449ee96aaaSZi Xuan Wu HasFLOAT1E3 = false;
459ee96aaaSZi Xuan Wu HasFLOAT3E4 = false;
469ee96aaaSZi Xuan Wu HasFLOAT7E60 = false;
47cf78715cSZi Xuan Wu HasExtendLrw = false;
489ee96aaaSZi Xuan Wu HasBTST16 = false;
499ee96aaaSZi Xuan Wu HasTrust = false;
509ee96aaaSZi Xuan Wu HasJAVA = false;
519ee96aaaSZi Xuan Wu HasCache = false;
529ee96aaaSZi Xuan Wu HasNVIC = false;
539ee96aaaSZi Xuan Wu HasDSP = false;
549ee96aaaSZi Xuan Wu HasDSP1E2 = false;
559ee96aaaSZi Xuan Wu HasDSPE60 = false;
569ee96aaaSZi Xuan Wu HasDSPV2 = false;
579ee96aaaSZi Xuan Wu HasDSP_Silan = false;
58cf78715cSZi Xuan Wu HasDoloop = false;
599ee96aaaSZi Xuan Wu HasHardwareDivide = false;
60cf78715cSZi Xuan Wu HasHighRegisters = false;
619ee96aaaSZi Xuan Wu HasVDSPV2 = false;
629ee96aaaSZi Xuan Wu HasVDSP2E3 = false;
639ee96aaaSZi Xuan Wu HasVDSP2E60F = false;
649ee96aaaSZi Xuan Wu ReadTPHard = false;
659ee96aaaSZi Xuan Wu HasVDSPV1_128 = false;
669ee96aaaSZi Xuan Wu UseCCRT = false;
679ee96aaaSZi Xuan Wu DumpConstPool = false;
689ee96aaaSZi Xuan Wu EnableInterruptAttribute = false;
699ee96aaaSZi Xuan Wu HasPushPop = false;
709ee96aaaSZi Xuan Wu HasSTM = false;
719ee96aaaSZi Xuan Wu SmartMode = false;
729ee96aaaSZi Xuan Wu EnableStackSize = false;
73cf78715cSZi Xuan Wu
74de10a02fSZi Xuan Wu HasE1 = false;
75de10a02fSZi Xuan Wu HasE2 = false;
76de10a02fSZi Xuan Wu Has2E3 = false;
77de10a02fSZi Xuan Wu HasMP = false;
78de10a02fSZi Xuan Wu Has3E3r1 = false;
79de10a02fSZi Xuan Wu Has3r1E3r2 = false;
80de10a02fSZi Xuan Wu Has3r2E3r3 = false;
81de10a02fSZi Xuan Wu Has3E7 = false;
82de10a02fSZi Xuan Wu HasMP1E2 = false;
83de10a02fSZi Xuan Wu Has7E10 = false;
84de10a02fSZi Xuan Wu Has10E60 = false;
85de10a02fSZi Xuan Wu
86de10a02fSZi Xuan Wu ParseSubtargetFeatures(CPUName, TuneCPUName, FS);
87de10a02fSZi Xuan Wu return *this;
88de10a02fSZi Xuan Wu }
89de10a02fSZi Xuan Wu
CSKYSubtarget(const Triple & TT,StringRef CPU,StringRef TuneCPU,StringRef FS,const TargetMachine & TM)90de10a02fSZi Xuan Wu CSKYSubtarget::CSKYSubtarget(const Triple &TT, StringRef CPU, StringRef TuneCPU,
91de10a02fSZi Xuan Wu StringRef FS, const TargetMachine &TM)
92de10a02fSZi Xuan Wu : CSKYGenSubtargetInfo(TT, CPU, TuneCPU, FS),
93de10a02fSZi Xuan Wu FrameLowering(initializeSubtargetDependencies(TT, CPU, TuneCPU, FS)),
94de10a02fSZi Xuan Wu InstrInfo(*this), RegInfo(), TLInfo(TM, *this) {}
95cf78715cSZi Xuan Wu
useHardFloatABI() const96cf78715cSZi Xuan Wu bool CSKYSubtarget::useHardFloatABI() const {
97cf78715cSZi Xuan Wu auto FloatABI = getTargetLowering()->getTargetMachine().Options.FloatABIType;
98cf78715cSZi Xuan Wu
99cf78715cSZi Xuan Wu if (FloatABI == FloatABI::Default)
100cf78715cSZi Xuan Wu return UseHardFloatABI;
101cf78715cSZi Xuan Wu else
102cf78715cSZi Xuan Wu return FloatABI == FloatABI::Hard;
103cf78715cSZi Xuan Wu }
104