1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 19:12:56 +02:00
llvm-mirror/lib/Target/M68k/MCTargetDesc/M68kMCTargetDesc.cpp
John Paul Adrian Glaubitz eb59dc67d9 [M68k] Mark public functions with the LLVM_EXTERNAL_VISIBILITY macro
In 0dbcb3639451, most most target symbols were made hidden by default
with the public ones marked with LLVM_EXTERNAL_VISIBILITY. When the
M68k target was added, this particular change was forgotten so that
external tools cannot make use of the public M68k target functions
in libLLVM.so. Thus, add the missing LLVM_EXTERNAL_VISIBILITY macro
to all public target functions in the M68k backend.

Differential Revision: https://reviews.llvm.org/D99869
2021-04-05 09:24:30 -07:00

136 lines
4.5 KiB
C++

//===-- M68kMCTargetDesc.cpp - M68k Target Descriptions -----*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
///
/// \file
/// This file provides M68k target specific descriptions.
///
//===----------------------------------------------------------------------===//
#include "M68kMCTargetDesc.h"
#include "M68kInstPrinter.h"
#include "M68kMCAsmInfo.h"
#include "TargetInfo/M68kTargetInfo.h"
#include "llvm/MC/MCELFStreamer.h"
#include "llvm/MC/MCInstPrinter.h"
#include "llvm/MC/MCInstrInfo.h"
#include "llvm/MC/MCRegisterInfo.h"
#include "llvm/MC/MCSubtargetInfo.h"
#include "llvm/MC/MCSymbol.h"
#include "llvm/MC/MachineLocation.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/FormattedStream.h"
#include "llvm/Support/TargetRegistry.h"
using namespace llvm;
#define GET_INSTRINFO_MC_DESC
#include "M68kGenInstrInfo.inc"
#define GET_SUBTARGETINFO_MC_DESC
#include "M68kGenSubtargetInfo.inc"
#define GET_REGINFO_MC_DESC
#include "M68kGenRegisterInfo.inc"
// TODO Implement feature set parsing logics
static std::string ParseM68kTriple(const Triple &TT, StringRef CPU) {
return "";
}
static MCInstrInfo *createM68kMCInstrInfo() {
MCInstrInfo *X = new MCInstrInfo();
InitM68kMCInstrInfo(X); // defined in M68kGenInstrInfo.inc
return X;
}
static MCRegisterInfo *createM68kMCRegisterInfo(const Triple &TT) {
MCRegisterInfo *X = new MCRegisterInfo();
InitM68kMCRegisterInfo(X, llvm::M68k::A0, 0, 0, llvm::M68k::PC);
return X;
}
static MCSubtargetInfo *createM68kMCSubtargetInfo(const Triple &TT,
StringRef CPU, StringRef FS) {
std::string ArchFS = ParseM68kTriple(TT, CPU);
if (!FS.empty()) {
if (!ArchFS.empty()) {
ArchFS = (ArchFS + "," + FS).str();
} else {
ArchFS = FS.str();
}
}
return createM68kMCSubtargetInfoImpl(TT, CPU, /*TuneCPU=*/CPU, ArchFS);
}
static MCAsmInfo *createM68kMCAsmInfo(const MCRegisterInfo &MRI,
const Triple &TT,
const MCTargetOptions &TO) {
MCAsmInfo *MAI = new M68kELFMCAsmInfo(TT);
// Initialize initial frame state.
// Calculate amount of bytes used for return address storing
int StackGrowth = -4;
// Initial state of the frame pointer is SP+StackGrowth.
// TODO: Add tests for `cfi_*` directives
MCCFIInstruction Inst = MCCFIInstruction::cfiDefCfa(
nullptr, MRI.getDwarfRegNum(llvm::M68k::SP, true), -StackGrowth);
MAI->addInitialFrameState(Inst);
// Add return address to move list
Inst = MCCFIInstruction::createOffset(
nullptr, MRI.getDwarfRegNum(M68k::PC, true), StackGrowth);
MAI->addInitialFrameState(Inst);
return MAI;
}
static MCRelocationInfo *createM68kMCRelocationInfo(const Triple &TheTriple,
MCContext &Ctx) {
// Default to the stock relocation info.
return llvm::createMCRelocationInfo(TheTriple, Ctx);
}
static MCInstPrinter *createM68kMCInstPrinter(const Triple &T,
unsigned SyntaxVariant,
const MCAsmInfo &MAI,
const MCInstrInfo &MII,
const MCRegisterInfo &MRI) {
return new M68kInstPrinter(MAI, MII, MRI);
}
extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeM68kTargetMC() {
Target &T = getTheM68kTarget();
// Register the MC asm info.
RegisterMCAsmInfoFn X(T, createM68kMCAsmInfo);
// Register the MC instruction info.
TargetRegistry::RegisterMCInstrInfo(T, createM68kMCInstrInfo);
// Register the MC register info.
TargetRegistry::RegisterMCRegInfo(T, createM68kMCRegisterInfo);
// Register the MC subtarget info.
TargetRegistry::RegisterMCSubtargetInfo(T, createM68kMCSubtargetInfo);
// Register the code emitter.
TargetRegistry::RegisterMCCodeEmitter(T, createM68kMCCodeEmitter);
// Register the MCInstPrinter.
TargetRegistry::RegisterMCInstPrinter(T, createM68kMCInstPrinter);
// Register the MC relocation info.
TargetRegistry::RegisterMCRelocationInfo(T, createM68kMCRelocationInfo);
// Register the asm backend.
TargetRegistry::RegisterMCAsmBackend(T, createM68kAsmBackend);
}