Path: blob/main/contrib/llvm-project/llvm/lib/Target/CSKY/CSKYSubtarget.h
35269 views
//===-- CSKYSubtarget.h - Define Subtarget for the CSKY----------*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// This file declares the CSKY specific subclass of TargetSubtargetInfo.9//10//===----------------------------------------------------------------------===//1112#ifndef LLVM_LIB_TARGET_CSKY_CSKYSUBTARGET_H13#define LLVM_LIB_TARGET_CSKY_CSKYSUBTARGET_H1415#include "CSKYFrameLowering.h"16#include "CSKYISelLowering.h"17#include "CSKYInstrInfo.h"18#include "CSKYRegisterInfo.h"19#include "llvm/CodeGen/SelectionDAGTargetInfo.h"20#include "llvm/CodeGen/TargetSubtargetInfo.h"21#include "llvm/Target/TargetMachine.h"2223#define GET_SUBTARGETINFO_HEADER24#include "CSKYGenSubtargetInfo.inc"2526namespace llvm {27class StringRef;2829class CSKYSubtarget : public CSKYGenSubtargetInfo {30virtual void anchor();3132CSKYFrameLowering FrameLowering;33CSKYInstrInfo InstrInfo;34CSKYRegisterInfo RegInfo;35CSKYTargetLowering TLInfo;36SelectionDAGTargetInfo TSInfo;3738enum CSKYProcFamilyEnum {39Others,4041CK801,42CK802,43CK803,44CK803S,45CK804,46CK805,47CK807,48CK810,49CK810V,50CK860,51CK860V52};5354/// CSKYProcFamily - CSKY processor family: CK801, CK802, and others.55CSKYProcFamilyEnum CSKYProcFamily = Others;5657bool UseHardFloat;58bool UseHardFloatABI;59bool HasFPUv2SingleFloat;60bool HasFPUv2DoubleFloat;61bool HasFPUv3HalfWord;62bool HasFPUv3HalfFloat;63bool HasFPUv3SingleFloat;64bool HasFPUv3DoubleFloat;65bool HasFdivdu;66bool HasFLOATE1;67bool HasFLOAT1E2;68bool HasFLOAT1E3;69bool HasFLOAT3E4;70bool HasFLOAT7E60;71bool HasBTST16;72bool HasExtendLrw;73bool HasTrust;74bool HasJAVA;75bool HasCache;76bool HasNVIC;77bool HasDSP;78bool HasDSP1E2;79bool HasDSPE60;80bool HasDSPV2;81bool HasDSP_Silan;82bool HasDoloop;83bool HasHardwareDivide;84bool HasHighRegisters;85bool HasVDSPV2;86bool HasVDSP2E3;87bool HasVDSP2E60F;88bool ReadTPHard;89bool HasVDSPV1_128;90bool UseCCRT;91bool DumpConstPool;92bool EnableInterruptAttribute;93bool HasPushPop;94bool HasSTM;95bool SmartMode;96bool EnableStackSize;9798bool HasE1;99bool HasE2;100bool Has2E3;101bool HasMP;102bool Has3E3r1;103bool Has3r1E3r2;104bool Has3r2E3r3;105bool Has3E7;106bool HasMP1E2;107bool Has7E10;108bool Has10E60;109110public:111CSKYSubtarget(const Triple &TT, StringRef CPU, StringRef TuneCPU,112StringRef FS, const TargetMachine &TM);113114const CSKYFrameLowering *getFrameLowering() const override {115return &FrameLowering;116}117const CSKYInstrInfo *getInstrInfo() const override { return &InstrInfo; }118const CSKYRegisterInfo *getRegisterInfo() const override { return &RegInfo; }119const CSKYTargetLowering *getTargetLowering() const override {120return &TLInfo;121}122const SelectionDAGTargetInfo *getSelectionDAGInfo() const override {123return &TSInfo;124}125126/// Initializes using the passed in CPU and feature strings so that we can127/// use initializer lists for subtarget initialization.128CSKYSubtarget &initializeSubtargetDependencies(const Triple &TT,129StringRef CPU,130StringRef TuneCPU,131StringRef FS);132133// Generated by inc file134void ParseSubtargetFeatures(StringRef CPU, StringRef TuneCPU, StringRef FS);135136bool useHardFloatABI() const;137bool useHardFloat() const { return UseHardFloat; }138bool hasFPUv2SingleFloat() const { return HasFPUv2SingleFloat; }139bool hasFPUv2DoubleFloat() const { return HasFPUv2DoubleFloat; }140bool hasFPUv2() const { return HasFPUv2SingleFloat || HasFPUv2DoubleFloat; }141bool hasFPUv3HalfWord() const { return HasFPUv3HalfWord; }142bool hasFPUv3HalfFloat() const { return HasFPUv3HalfFloat; }143bool hasFPUv3SingleFloat() const { return HasFPUv3SingleFloat; }144bool hasFPUv3DoubleFloat() const { return HasFPUv3DoubleFloat; }145bool hasFPUv3() const {146return HasFPUv3HalfFloat || HasFPUv3SingleFloat || HasFPUv3DoubleFloat;147}148bool hasAnyFloatExt() const { return hasFPUv2() || hasFPUv3(); };149bool hasFdivdu() const { return HasFdivdu; }150bool hasFLOATE1() const { return HasFLOATE1; }151bool hasFLOAT1E2() const { return HasFLOAT1E2; }152bool hasFLOAT1E3() const { return HasFLOAT1E3; }153bool hasFLOAT3E4() const { return HasFLOAT3E4; }154bool hasFLOAT7E60() const { return HasFLOAT7E60; }155bool hasExtendLrw() const { return HasExtendLrw; }156bool hasBTST16() const { return HasBTST16; }157bool hasTrust() const { return HasTrust; }158bool hasJAVA() const { return HasJAVA; }159bool hasCache() const { return HasCache; }160bool hasNVIC() const { return HasNVIC; }161bool hasDSP() const { return HasDSP; }162bool hasDSP1E2() const { return HasDSP1E2; }163bool hasDSPE60() const { return HasDSPE60; }164bool hasDSPV2() const { return HasDSPV2; }165bool hasDSP_Silan() const { return HasDSP_Silan; }166bool hasDoloop() const { return HasDoloop; }167bool hasHighRegisters() const { return HasHighRegisters; }168bool hasVDSPV2() const { return HasVDSPV2; }169bool hasVDSPV2_FLOAT() const { return HasVDSPV2 && UseHardFloat; }170bool hasVDSPV2_HALF() const {171return HasVDSPV2 && UseHardFloat && HasFPUv3HalfFloat;172}173bool hasVDSP2E3() const { return HasVDSP2E3; }174bool hasVDSP2E60F() const { return HasVDSP2E60F; }175bool readTPHard() const { return ReadTPHard; }176bool hasVDSPV1_128() const { return HasVDSPV1_128; }177bool useCCRT() const { return UseCCRT; }178bool dumpConstPool() const { return DumpConstPool; }179bool enableInterruptAttribute() const { return EnableInterruptAttribute; }180bool hasPushPop() const { return HasPushPop; }181bool hasSTM() const { return HasSTM; }182bool smartMode() const { return SmartMode; }183bool enableStackSize() const { return EnableStackSize; }184185bool hasE1() const { return HasE1; }186bool hasE2() const { return HasE2; }187bool has2E3() const { return Has2E3; }188bool has3r1E3r2() const { return Has3r1E3r2; }189bool has3r2E3r3() const { return Has3r2E3r3; }190bool has3E3r1() const { return Has3E3r1; }191bool has3E7() const { return Has3E7; }192bool hasMP() const { return HasMP; }193bool hasMP1E2() const { return HasMP1E2; }194bool has7E10() const { return Has7E10; }195bool has10E60() const { return Has10E60; }196197bool isCK801() const { return CSKYProcFamily == CK801; }198bool isCK802() const { return CSKYProcFamily == CK802; }199bool isCK803() const { return CSKYProcFamily == CK803; }200bool isCK803S() const { return CSKYProcFamily == CK803S; }201bool isCK804() const { return CSKYProcFamily == CK804; }202bool isCK805() const { return CSKYProcFamily == CK805; }203bool isCK807() const { return CSKYProcFamily == CK807; }204bool isCK810() const { return CSKYProcFamily == CK810; }205bool isCK810V() const { return CSKYProcFamily == CK810V; }206bool isCK860() const { return CSKYProcFamily == CK860; }207bool isCK860V() const { return CSKYProcFamily == CK860V; }208209const unsigned XLen = 32;210};211} // namespace llvm212213#endif // LLVM_LIB_TARGET_CSKY_CSKYSUBTARGET_H214215216