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 HasFPUv3SingleFloat = false; 37 HasFPUv3DoubleFloat = false; 38 39 HasBTST16 = false; 40 HasJAVA = false; 41 HasExtendLrw = false; 42 HasDoloop = false; 43 HasHighRegisters = false; 44 45 HasE1 = false; 46 HasE2 = false; 47 Has2E3 = false; 48 HasMP = false; 49 Has3E3r1 = false; 50 Has3r1E3r2 = false; 51 Has3r2E3r3 = false; 52 Has3E7 = false; 53 HasMP1E2 = false; 54 Has7E10 = false; 55 Has10E60 = false; 56 57 ParseSubtargetFeatures(CPUName, TuneCPUName, FS); 58 return *this; 59 } 60 61 CSKYSubtarget::CSKYSubtarget(const Triple &TT, StringRef CPU, StringRef TuneCPU, 62 StringRef FS, const TargetMachine &TM) 63 : CSKYGenSubtargetInfo(TT, CPU, TuneCPU, FS), 64 FrameLowering(initializeSubtargetDependencies(TT, CPU, TuneCPU, FS)), 65 InstrInfo(*this), RegInfo(), TLInfo(TM, *this) {} 66 67 bool CSKYSubtarget::useHardFloatABI() const { 68 auto FloatABI = getTargetLowering()->getTargetMachine().Options.FloatABIType; 69 70 if (FloatABI == FloatABI::Default) 71 return UseHardFloatABI; 72 else 73 return FloatABI == FloatABI::Hard; 74 } 75