brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · 94e412e Raw
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