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