xref: /llvm-project/llvm/lib/Target/CSKY/CSKYSubtarget.cpp (revision 989f1c72e0f4236ac35a35cc9998ea34bc62d5cd)
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