aboutsummaryrefslogtreecommitdiffstats
path: root/lib/MC
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-06-24 19:25:34 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-06-24 19:25:34 +0000
commit84a2926fb7ab388d688a133b0b375a26e669fd55 (patch)
tree15243cb6095f4f5eb5c00b47dd28a5a6998f11de /lib/MC
parentb5299dd06a56a494e37af1656e6accf8fcbdacf4 (diff)
downloadexternal_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')
-rw-r--r--lib/MC/MCAsmStreamer.cpp37
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.