1 //===-- CSKYMCTargetDesc.cpp - CSKY Target Descriptions -------------------===//
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 provides CSKY specific target descriptions.
10 ///
11 //===----------------------------------------------------------------------===//
12
13 #include "CSKYMCTargetDesc.h"
14 #include "CSKYAsmBackend.h"
15 #include "CSKYMCAsmInfo.h"
16 #include "CSKYMCCodeEmitter.h"
17 #include "TargetInfo/CSKYTargetInfo.h"
18 #include "llvm/MC/MCInstrInfo.h"
19 #include "llvm/MC/MCRegisterInfo.h"
20 #include "llvm/MC/MCSubtargetInfo.h"
21 #include "llvm/Support/TargetRegistry.h"
22
23 #define GET_INSTRINFO_MC_DESC
24 #include "CSKYGenInstrInfo.inc"
25
26 #define GET_REGINFO_MC_DESC
27 #include "CSKYGenRegisterInfo.inc"
28
29 using namespace llvm;
30
createCSKYMCAsmInfo(const MCRegisterInfo & MRI,const Triple & TT,const MCTargetOptions & Options)31 static MCAsmInfo *createCSKYMCAsmInfo(const MCRegisterInfo &MRI,
32 const Triple &TT,
33 const MCTargetOptions &Options) {
34 MCAsmInfo *MAI = new CSKYMCAsmInfo(TT);
35
36 // Initial state of the frame pointer is SP.
37 unsigned Reg = MRI.getDwarfRegNum(CSKY::R14, true);
38 MCCFIInstruction Inst = MCCFIInstruction::cfiDefCfa(nullptr, Reg, 0);
39 MAI->addInitialFrameState(Inst);
40 return MAI;
41 }
42
createCSKYMCInstrInfo()43 static MCInstrInfo *createCSKYMCInstrInfo() {
44 MCInstrInfo *Info = new MCInstrInfo();
45 InitCSKYMCInstrInfo(Info);
46 return Info;
47 }
48
createCSKYMCRegisterInfo(const Triple & TT)49 static MCRegisterInfo *createCSKYMCRegisterInfo(const Triple &TT) {
50 MCRegisterInfo *Info = new MCRegisterInfo();
51 InitCSKYMCRegisterInfo(Info, CSKY::R15);
52 return Info;
53 }
54
LLVMInitializeCSKYTargetMC()55 extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeCSKYTargetMC() {
56 auto &CSKYTarget = getTheCSKYTarget();
57 TargetRegistry::RegisterMCAsmBackend(CSKYTarget, createCSKYAsmBackend);
58 TargetRegistry::RegisterMCAsmInfo(CSKYTarget, createCSKYMCAsmInfo);
59 TargetRegistry::RegisterMCInstrInfo(CSKYTarget, createCSKYMCInstrInfo);
60 TargetRegistry::RegisterMCRegInfo(CSKYTarget, createCSKYMCRegisterInfo);
61 TargetRegistry::RegisterMCCodeEmitter(CSKYTarget, createCSKYMCCodeEmitter);
62 }
63