Coverage Report

Created: 2025-07-15 06:22

/src/keystone/llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCTargetDesc.cpp
Line
Count
Source (jump to first uncovered line)
1
//===-- AArch64MCTargetDesc.cpp - AArch64 Target Descriptions ---*- C++ -*-===//
2
//
3
//                     The LLVM Compiler Infrastructure
4
//
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
7
//
8
//===----------------------------------------------------------------------===//
9
//
10
// This file provides AArch64 specific target descriptions.
11
//
12
//===----------------------------------------------------------------------===//
13
14
#include "AArch64MCTargetDesc.h"
15
#include "AArch64ELFStreamer.h"
16
#include "AArch64MCAsmInfo.h"
17
#include "llvm/ADT/STLExtras.h"
18
#include "llvm/MC/MCInstrInfo.h"
19
#include "llvm/MC/MCRegisterInfo.h"
20
#include "llvm/MC/MCStreamer.h"
21
#include "llvm/MC/MCSubtargetInfo.h"
22
#include "llvm/Support/ErrorHandling.h"
23
#include "llvm/Support/TargetRegistry.h"
24
25
using namespace llvm_ks;
26
27
#define GET_INSTRINFO_MC_DESC
28
#include "AArch64GenInstrInfo.inc"
29
30
#define GET_SUBTARGETINFO_MC_DESC
31
#include "AArch64GenSubtargetInfo.inc"
32
33
#define GET_REGINFO_MC_DESC
34
#include "AArch64GenRegisterInfo.inc"
35
36
1.58k
static MCInstrInfo *createAArch64MCInstrInfo() {
37
1.58k
  MCInstrInfo *X = new MCInstrInfo();
38
1.58k
  InitAArch64MCInstrInfo(X);
39
1.58k
  return X;
40
1.58k
}
41
42
static MCSubtargetInfo *
43
1.58k
createAArch64MCSubtargetInfo(const Triple &TT, StringRef CPU, StringRef FS) {
44
1.58k
  if (CPU.empty())
45
1.58k
    CPU = "generic";
46
47
1.58k
  return createAArch64MCSubtargetInfoImpl(TT, CPU, FS);
48
1.58k
}
49
50
1.58k
static MCRegisterInfo *createAArch64MCRegisterInfo(const Triple &Triple) {
51
1.58k
  MCRegisterInfo *X = new MCRegisterInfo();
52
1.58k
  InitAArch64MCRegisterInfo(X, AArch64::LR);
53
1.58k
  return X;
54
1.58k
}
55
56
static MCAsmInfo *createAArch64MCAsmInfo(const MCRegisterInfo &MRI,
57
1.58k
                                         const Triple &TheTriple) {
58
1.58k
  MCAsmInfo *MAI;
59
1.58k
  if (TheTriple.isOSBinFormatMachO())
60
0
    MAI = new AArch64MCAsmInfoDarwin();
61
1.58k
  else {
62
1.58k
    assert(TheTriple.isOSBinFormatELF() && "Only expect Darwin or ELF");
63
1.58k
    MAI = new AArch64MCAsmInfoELF(TheTriple);
64
1.58k
  }
65
66
  // Initial state of the frame pointer is SP.
67
1.58k
  unsigned Reg = MRI.getDwarfRegNum(AArch64::SP, true);
68
1.58k
  MCCFIInstruction Inst = MCCFIInstruction::createDefCfa(nullptr, Reg, 0);
69
1.58k
  MAI->addInitialFrameState(Inst);
70
71
1.58k
  return MAI;
72
1.58k
}
73
74
// Force static initialization.
75
26
extern "C" void LLVMInitializeAArch64TargetMC() {
76
26
  for (Target *T :
77
78
       {&TheAArch64leTarget, &TheAArch64beTarget, &TheARM64Target}) {
78
    // Register the MC asm info.
79
78
    RegisterMCAsmInfoFn X(*T, createAArch64MCAsmInfo);
80
81
    // Register the MC instruction info.
82
78
    TargetRegistry::RegisterMCInstrInfo(*T, createAArch64MCInstrInfo);
83
84
    // Register the MC register info.
85
78
    TargetRegistry::RegisterMCRegInfo(*T, createAArch64MCRegisterInfo);
86
87
    // Register the MC subtarget info.
88
78
    TargetRegistry::RegisterMCSubtargetInfo(*T, createAArch64MCSubtargetInfo);
89
90
    // Register the MC Code Emitter
91
78
    TargetRegistry::RegisterMCCodeEmitter(*T, createAArch64MCCodeEmitter);
92
78
  }
93
94
  // Register the asm backend.
95
26
  for (Target *T : {&TheAArch64leTarget, &TheARM64Target})
96
52
    TargetRegistry::RegisterMCAsmBackend(*T, createAArch64leAsmBackend);
97
26
  TargetRegistry::RegisterMCAsmBackend(TheAArch64beTarget,
98
26
                                       createAArch64beAsmBackend);
99
26
}