mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-07 14:33:15 +00:00
R600: Emit ELF formatted code rather than raw ISA.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179544 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
467116a1c8
commit
3a63bf27c5
@ -44,7 +44,6 @@ public:
|
||||
AMDGPUAsmBackend(const Target &T)
|
||||
: MCAsmBackend() {}
|
||||
|
||||
virtual AMDGPUMCObjectWriter *createObjectWriter(raw_ostream &OS) const;
|
||||
virtual unsigned getNumFixupKinds() const { return 0; };
|
||||
virtual void applyFixup(const MCFixup &Fixup, char *Data, unsigned DataSize,
|
||||
uint64_t Value) const;
|
||||
@ -71,16 +70,6 @@ void AMDGPUMCObjectWriter::WriteObject(MCAssembler &Asm,
|
||||
}
|
||||
}
|
||||
|
||||
MCAsmBackend *llvm::createAMDGPUAsmBackend(const Target &T, StringRef TT,
|
||||
StringRef CPU) {
|
||||
return new AMDGPUAsmBackend(T);
|
||||
}
|
||||
|
||||
AMDGPUMCObjectWriter * AMDGPUAsmBackend::createObjectWriter(
|
||||
raw_ostream &OS) const {
|
||||
return new AMDGPUMCObjectWriter(OS);
|
||||
}
|
||||
|
||||
void AMDGPUAsmBackend::applyFixup(const MCFixup &Fixup, char *Data,
|
||||
unsigned DataSize, uint64_t Value) const {
|
||||
|
||||
@ -88,3 +77,21 @@ void AMDGPUAsmBackend::applyFixup(const MCFixup &Fixup, char *Data,
|
||||
assert(Fixup.getKind() == FK_PCRel_4);
|
||||
*Dst = (Value - 4) / 4;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// ELFAMDGPUAsmBackend class
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
class ELFAMDGPUAsmBackend : public AMDGPUAsmBackend {
|
||||
public:
|
||||
ELFAMDGPUAsmBackend(const Target &T) : AMDGPUAsmBackend(T) { }
|
||||
|
||||
MCObjectWriter *createObjectWriter(raw_ostream &OS) const {
|
||||
return createAMDGPUELFObjectWriter(OS);
|
||||
}
|
||||
};
|
||||
|
||||
MCAsmBackend *llvm::createAMDGPUAsmBackend(const Target &T, StringRef TT,
|
||||
StringRef CPU) {
|
||||
return new ELFAMDGPUAsmBackend(T);
|
||||
}
|
||||
|
39
lib/Target/R600/MCTargetDesc/AMDGPUELFObjectWriter.cpp
Normal file
39
lib/Target/R600/MCTargetDesc/AMDGPUELFObjectWriter.cpp
Normal file
@ -0,0 +1,39 @@
|
||||
//===-- AMDGPUELFObjectWriter.cpp - AMDGPU ELF Writer ----------------------==//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
/// \file
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "AMDGPUMCTargetDesc.h"
|
||||
#include "llvm/MC/MCELFObjectWriter.h"
|
||||
|
||||
using namespace llvm;
|
||||
|
||||
namespace {
|
||||
|
||||
class AMDGPUELFObjectWriter : public MCELFObjectTargetWriter {
|
||||
public:
|
||||
AMDGPUELFObjectWriter();
|
||||
protected:
|
||||
virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,
|
||||
bool IsPCRel, bool IsRelocWithSymbol,
|
||||
int64_t Addend) const {
|
||||
llvm_unreachable("Not implemented");
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
} // End anonymous namespace
|
||||
|
||||
AMDGPUELFObjectWriter::AMDGPUELFObjectWriter()
|
||||
: MCELFObjectTargetWriter(false, 0, 0, false) { }
|
||||
|
||||
MCObjectWriter *llvm::createAMDGPUELFObjectWriter(raw_ostream &OS) {
|
||||
MCELFObjectTargetWriter *MOTW = new AMDGPUELFObjectWriter();
|
||||
return createELFObjectWriter(MOTW, OS, true);
|
||||
}
|
@ -88,7 +88,7 @@ static MCStreamer *createMCStreamer(const Target &T, StringRef TT,
|
||||
MCCodeEmitter *_Emitter,
|
||||
bool RelaxAll,
|
||||
bool NoExecStack) {
|
||||
return createPureStreamer(Ctx, MAB, _OS, _Emitter);
|
||||
return createELFStreamer(Ctx, MAB, _OS, _Emitter, false, false);
|
||||
}
|
||||
|
||||
extern "C" void LLVMInitializeR600TargetMC() {
|
||||
|
@ -23,9 +23,11 @@ class MCAsmBackend;
|
||||
class MCCodeEmitter;
|
||||
class MCContext;
|
||||
class MCInstrInfo;
|
||||
class MCObjectWriter;
|
||||
class MCRegisterInfo;
|
||||
class MCSubtargetInfo;
|
||||
class Target;
|
||||
class raw_ostream;
|
||||
|
||||
extern Target TheAMDGPUTarget;
|
||||
|
||||
@ -41,6 +43,8 @@ MCCodeEmitter *createSIMCCodeEmitter(const MCInstrInfo &MCII,
|
||||
|
||||
MCAsmBackend *createAMDGPUAsmBackend(const Target &T, StringRef TT,
|
||||
StringRef CPU);
|
||||
|
||||
MCObjectWriter *createAMDGPUELFObjectWriter(raw_ostream &OS);
|
||||
} // End llvm namespace
|
||||
|
||||
#define GET_REGINFO_ENUM
|
||||
|
@ -1,6 +1,7 @@
|
||||
|
||||
add_llvm_library(LLVMR600Desc
|
||||
AMDGPUAsmBackend.cpp
|
||||
AMDGPUELFObjectWriter.cpp
|
||||
AMDGPUMCTargetDesc.cpp
|
||||
AMDGPUMCAsmInfo.cpp
|
||||
R600MCCodeEmitter.cpp
|
||||
|
11
test/CodeGen/R600/elf.ll
Normal file
11
test/CodeGen/R600/elf.ll
Normal file
@ -0,0 +1,11 @@
|
||||
; RUN: llc < %s -march=r600 -mcpu=SI -filetype=obj | llvm-readobj -s - | FileCheck %s
|
||||
|
||||
; CHECK: Format: ELF32
|
||||
define void @test(i32 %p) {
|
||||
%i = add i32 %p, 2
|
||||
%r = bitcast i32 %i to float
|
||||
call void @llvm.SI.export(i32 15, i32 0, i32 1, i32 12, i32 0, float %r, float %r, float %r, float %r)
|
||||
ret void
|
||||
}
|
||||
|
||||
declare void @llvm.SI.export(i32, i32, i32, i32, i32, float, float, float, float)
|
Loading…
x
Reference in New Issue
Block a user