mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 20:29:48 +00:00
86b535b085
r200064 depends on r200051. r200051 is broken: I tries to replace .mips_hack_elf_flags, which is a good thing, but what it replaces it with is even worse. The new emitMipsELFFlags it adds corresponds to no assembly directive, is not marked as a hack and is not even printed to the .s file. The patch also introduces more uses of hasRawTextSupport. The correct way to remove .mips_hack_elf_flags is to have the mips target streamer handle the default flags (and command line options). That way the same code path is used for asm and obj. The streamer interface should *really* correspond to what is printed in the .s file. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200078 91177308-0d34-0410-b5e6-96231b3b80d8
70 lines
2.2 KiB
C++
70 lines
2.2 KiB
C++
//===-- MipsTargetStreamer.h - Mips Target Streamer ------------*- C++ -*--===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef MIPSTARGETSTREAMER_H
|
|
#define MIPSTARGETSTREAMER_H
|
|
|
|
#include "llvm/MC/MCELFStreamer.h"
|
|
#include "llvm/MC/MCStreamer.h"
|
|
|
|
namespace llvm {
|
|
class MipsTargetStreamer : public MCTargetStreamer {
|
|
virtual void anchor();
|
|
|
|
public:
|
|
virtual void emitMipsHackELFFlags(unsigned Flags) = 0;
|
|
virtual void emitDirectiveSetMicroMips() = 0;
|
|
virtual void emitDirectiveSetNoMicroMips() = 0;
|
|
virtual void emitDirectiveSetMips16() = 0;
|
|
virtual void emitDirectiveSetNoMips16() = 0;
|
|
virtual void emitDirectiveEnt(const MCSymbol &Symbol) = 0;
|
|
virtual void emitDirectiveAbiCalls() = 0;
|
|
virtual void emitDirectiveOptionPic0() = 0;
|
|
};
|
|
|
|
// This part is for ascii assembly output
|
|
class MipsTargetAsmStreamer : public MipsTargetStreamer {
|
|
formatted_raw_ostream &OS;
|
|
|
|
public:
|
|
MipsTargetAsmStreamer(formatted_raw_ostream &OS);
|
|
virtual void emitMipsHackELFFlags(unsigned Flags);
|
|
virtual void emitDirectiveSetMicroMips();
|
|
virtual void emitDirectiveSetNoMicroMips();
|
|
virtual void emitDirectiveSetMips16();
|
|
virtual void emitDirectiveSetNoMips16();
|
|
virtual void emitDirectiveEnt(const MCSymbol &Symbol);
|
|
virtual void emitDirectiveAbiCalls();
|
|
virtual void emitDirectiveOptionPic0();
|
|
};
|
|
|
|
// This part is for ELF object output
|
|
class MipsTargetELFStreamer : public MipsTargetStreamer {
|
|
bool MicroMipsEnabled;
|
|
|
|
public:
|
|
bool isMicroMipsEnabled() const { return MicroMipsEnabled; }
|
|
MCELFStreamer &getStreamer();
|
|
MipsTargetELFStreamer();
|
|
|
|
virtual void emitLabel(MCSymbol *Symbol) LLVM_OVERRIDE;
|
|
|
|
// FIXME: emitMipsHackELFFlags() will be removed from this class.
|
|
virtual void emitMipsHackELFFlags(unsigned Flags);
|
|
virtual void emitDirectiveSetMicroMips();
|
|
virtual void emitDirectiveSetNoMicroMips();
|
|
virtual void emitDirectiveSetMips16();
|
|
virtual void emitDirectiveSetNoMips16();
|
|
virtual void emitDirectiveEnt(const MCSymbol &Symbol);
|
|
virtual void emitDirectiveAbiCalls();
|
|
virtual void emitDirectiveOptionPic0();
|
|
};
|
|
}
|
|
#endif
|