113 lines · cpp
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-exception6//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 17using namespace llvm;18 19#define DEBUG_TYPE "csky-subtarget"20#define GET_SUBTARGETINFO_TARGET_DESC21#define GET_SUBTARGETINFO_CTOR22#include "CSKYGenSubtargetInfo.inc"23 24void CSKYSubtarget::anchor() {}25 26CSKYSubtarget &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 91CSKYSubtarget::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 99CSKYSubtarget::~CSKYSubtarget() = default;100 101const SelectionDAGTargetInfo *CSKYSubtarget::getSelectionDAGInfo() const {102 return TSInfo.get();103}104 105bool CSKYSubtarget::useHardFloatABI() const {106 auto FloatABI = getTargetLowering()->getTargetMachine().Options.FloatABIType;107 108 if (FloatABI == FloatABI::Default)109 return UseHardFloatABI;110 else111 return FloatABI == FloatABI::Hard;112}113