make mcasmstreamer handle expanding 8 byte integer constants to
authorChris Lattner <sabre@nondot.org>
Wed, 20 Jan 2010 06:45:39 +0000 (06:45 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 20 Jan 2010 06:45:39 +0000 (06:45 +0000)
4-byte constants if .quad isn't supported.  Switch a bunch of
methods used by the dwarf writer to use OutStreamer.EmitIntValue.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93987 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/AsmPrinter.cpp
lib/MC/MCAsmStreamer.cpp

index d439fb6e3c1b3fee39f73af04cce1c1871d421e8..d008b8f99d6f6ef252f796a19093be05b9f90464 100644 (file)
@@ -784,39 +784,25 @@ void AsmPrinter::EmitSLEB128Bytes(int Value) const {
 /// EmitInt8 - Emit a byte directive and value.
 ///
 void AsmPrinter::EmitInt8(int Value) const {
-  O << MAI->getData8bitsDirective();
-  PrintHex(Value & 0xFF);
+  OutStreamer.EmitIntValue(Value, 1, 0/*addrspace*/);
 }
 
 /// EmitInt16 - Emit a short directive and value.
 ///
 void AsmPrinter::EmitInt16(int Value) const {
-  O << MAI->getData16bitsDirective();
-  PrintHex(Value & 0xFFFF);
+  OutStreamer.EmitIntValue(Value, 2, 0/*addrspace*/);
 }
 
 /// EmitInt32 - Emit a long directive and value.
 ///
 void AsmPrinter::EmitInt32(int Value) const {
-  O << MAI->getData32bitsDirective();
-  PrintHex(Value);
+  OutStreamer.EmitIntValue(Value, 4, 0/*addrspace*/);
 }
 
 /// EmitInt64 - Emit a long long directive and value.
 ///
 void AsmPrinter::EmitInt64(uint64_t Value) const {
-  if (MAI->getData64bitsDirective()) {
-    O << MAI->getData64bitsDirective();
-    PrintHex(Value);
-  } else {
-    if (TM.getTargetData()->isBigEndian()) {
-      EmitInt32(unsigned(Value >> 32)); O << '\n';
-      EmitInt32(unsigned(Value));
-    } else {
-      EmitInt32(unsigned(Value)); O << '\n';
-      EmitInt32(unsigned(Value >> 32));
-    }
-  }
+  OutStreamer.EmitIntValue(Value, 8, 0/*addrspace*/);
 }
 
 /// toOctal - Convert the low order bits of X into an octal digit.
index 23489095893e22d8e55f59e62fcd2906b3a4b13b..1121232808eb062a38fcbad2bf705ebfc8ffe386 100644 (file)
@@ -198,14 +198,24 @@ void MCAsmStreamer::EmitBytes(StringRef Data, unsigned AddrSpace) {
 void MCAsmStreamer::EmitIntValue(uint64_t Value, unsigned Size,
                                  unsigned AddrSpace) {
   assert(CurSection && "Cannot emit contents before setting section!");
-  // Need target hooks to know how to print this.
   const char *Directive = 0;
   switch (Size) {
   default: break;
   case 1: Directive = MAI.getData8bitsDirective(AddrSpace); break;
   case 2: Directive = MAI.getData16bitsDirective(AddrSpace); break;
   case 4: Directive = MAI.getData32bitsDirective(AddrSpace); break;
-  case 8: Directive = MAI.getData64bitsDirective(AddrSpace); break;
+  case 8:
+    Directive = MAI.getData64bitsDirective(AddrSpace);
+    // If the target doesn't support 64-bit data, emit as two 32-bit halves.
+    if (Directive) break;
+    if (isLittleEndian()) {
+      EmitIntValue((uint32_t)(Value >> 0 ), 4, AddrSpace);
+      EmitIntValue((uint32_t)(Value >> 32), 4, AddrSpace);
+    } else {
+      EmitIntValue((uint32_t)(Value >> 32), 4, AddrSpace);
+      EmitIntValue((uint32_t)(Value >> 0 ), 4, AddrSpace);
+    }
+    return;
   }
   
   assert(Directive && "Invalid size for machine code value!");
@@ -215,7 +225,6 @@ void MCAsmStreamer::EmitIntValue(uint64_t Value, unsigned Size,
 void MCAsmStreamer::EmitValue(const MCExpr *Value, unsigned Size,
                               unsigned AddrSpace) {
   assert(CurSection && "Cannot emit contents before setting section!");
-  // Need target hooks to know how to print this.
   const char *Directive = 0;
   switch (Size) {
   default: break;