| //===-- CSKYSubtarget.h - Define Subtarget for the CSKY----------*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file declares the CSKY specific subclass of TargetSubtargetInfo. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "CSKYSubtarget.h" |
| #include "llvm/CodeGen/MachineFrameInfo.h" |
| |
| using namespace llvm; |
| |
| #define DEBUG_TYPE "csky-subtarget" |
| #define GET_SUBTARGETINFO_TARGET_DESC |
| #define GET_SUBTARGETINFO_CTOR |
| #include "CSKYGenSubtargetInfo.inc" |
| |
| void CSKYSubtarget::anchor() {} |
| |
| CSKYSubtarget &CSKYSubtarget::initializeSubtargetDependencies( |
| const Triple &TT, StringRef CPUName, StringRef TuneCPUName, StringRef FS) { |
| |
| if (CPUName.empty()) |
| CPUName = "generic"; |
| if (TuneCPUName.empty()) |
| TuneCPUName = CPUName; |
| |
| UseHardFloat = false; |
| UseHardFloatABI = false; |
| HasFPUv2SingleFloat = false; |
| HasFPUv2DoubleFloat = false; |
| HasFPUv3HalfWord = false; |
| HasFPUv3HalfFloat = false; |
| HasFPUv3SingleFloat = false; |
| HasFPUv3DoubleFloat = false; |
| HasFdivdu = false; |
| HasFLOATE1 = false; |
| HasFLOAT1E2 = false; |
| HasFLOAT1E3 = false; |
| HasFLOAT3E4 = false; |
| HasFLOAT7E60 = false; |
| HasExtendLrw = false; |
| HasBTST16 = false; |
| HasTrust = false; |
| HasJAVA = false; |
| HasCache = false; |
| HasNVIC = false; |
| HasDSP = false; |
| HasDSP1E2 = false; |
| HasDSPE60 = false; |
| HasDSPV2 = false; |
| HasDSP_Silan = false; |
| HasDoloop = false; |
| HasHardwareDivide = false; |
| HasHighRegisters = false; |
| HasVDSPV2 = false; |
| HasVDSP2E3 = false; |
| HasVDSP2E60F = false; |
| ReadTPHard = false; |
| HasVDSPV1_128 = false; |
| UseCCRT = false; |
| DumpConstPool = false; |
| EnableInterruptAttribute = false; |
| HasPushPop = false; |
| HasSTM = false; |
| SmartMode = false; |
| EnableStackSize = false; |
| |
| HasE1 = false; |
| HasE2 = false; |
| Has2E3 = false; |
| HasMP = false; |
| Has3E3r1 = false; |
| Has3r1E3r2 = false; |
| Has3r2E3r3 = false; |
| Has3E7 = false; |
| HasMP1E2 = false; |
| Has7E10 = false; |
| Has10E60 = false; |
| |
| ParseSubtargetFeatures(CPUName, TuneCPUName, FS); |
| return *this; |
| } |
| |
| CSKYSubtarget::CSKYSubtarget(const Triple &TT, StringRef CPU, StringRef TuneCPU, |
| StringRef FS, const TargetMachine &TM) |
| : CSKYGenSubtargetInfo(TT, CPU, TuneCPU, FS), |
| FrameLowering(initializeSubtargetDependencies(TT, CPU, TuneCPU, FS)), |
| InstrInfo(*this), RegInfo(), TLInfo(TM, *this) {} |
| |
| bool CSKYSubtarget::useHardFloatABI() const { |
| auto FloatABI = getTargetLowering()->getTargetMachine().Options.FloatABIType; |
| |
| if (FloatABI == FloatABI::Default) |
| return UseHardFloatABI; |
| else |
| return FloatABI == FloatABI::Hard; |
| } |