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