diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-06-24 19:25:34 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-06-24 19:25:34 +0000 |
commit | 84a2926fb7ab388d688a133b0b375a26e669fd55 (patch) | |
tree | 15243cb6095f4f5eb5c00b47dd28a5a6998f11de /lib/MC/MCAsmStreamer.cpp | |
parent | b5299dd06a56a494e37af1656e6accf8fcbdacf4 (diff) | |
download | external_llvm-84a2926fb7ab388d688a133b0b375a26e669fd55.zip external_llvm-84a2926fb7ab388d688a133b0b375a26e669fd55.tar.gz external_llvm-84a2926fb7ab388d688a133b0b375a26e669fd55.tar.bz2 |
Sketch streamer support for .align, .org functionality.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74109 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/MC/MCAsmStreamer.cpp')
-rw-r--r-- | lib/MC/MCAsmStreamer.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/lib/MC/MCAsmStreamer.cpp b/lib/MC/MCAsmStreamer.cpp index 73d6f04..f1f5a64 100644 --- a/lib/MC/MCAsmStreamer.cpp +++ b/lib/MC/MCAsmStreamer.cpp @@ -44,6 +44,13 @@ namespace { virtual void EmitValue(const MCValue &Value, unsigned Size); + virtual void EmitValueToAlignment(unsigned ByteAlignment, int64_t Value = 0, + unsigned ValueSize = 1, + unsigned MaxBytesToEmit = 0); + + virtual void EmitValueToOffset(const MCValue &Offset, + unsigned char Value = 0); + virtual void EmitInstruction(const MCInst &Inst); virtual void Finish(); @@ -144,6 +151,36 @@ void MCAsmStreamer::EmitValue(const MCValue &Value, unsigned Size) { OS << ' ' << Value << '\n'; } +void MCAsmStreamer::EmitValueToAlignment(unsigned ByteAlignment, int64_t Value, + unsigned ValueSize, + unsigned MaxBytesToEmit) { + unsigned Pow2 = Log2_32(ByteAlignment); + assert((1U << Pow2) == ByteAlignment && "Invalid alignment!"); + + switch (ValueSize) { + default: + assert(0 && "Invalid size for machine code value!"); + case 8: + assert(0 && "Unsupported alignment size!"); + case 1: OS << ".p2align"; break; + case 2: OS << ".p2alignw"; break; + case 4: OS << ".p2alignl"; break; + } + + OS << ' ' << Pow2; + + OS << ", " << Value; + if (MaxBytesToEmit) + OS << ", " << MaxBytesToEmit; + OS << '\n'; +} + +void MCAsmStreamer::EmitValueToOffset(const MCValue &Offset, + unsigned char Value) { + // FIXME: Verify that Offset is associated with the current section. + OS << ".org " << Offset << ", " << (unsigned) Value << '\n'; +} + void MCAsmStreamer::EmitInstruction(const MCInst &Inst) { assert(CurSection && "Cannot emit contents before setting section!"); // FIXME: Implement. |