make mcasmstreamer handle expanding 8 byte integer constants to 
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
diff --git a/lib/MC/MCAsmStreamer.cpp b/lib/MC/MCAsmStreamer.cpp
index 2348909..1121232 100644
--- a/lib/MC/MCAsmStreamer.cpp
+++ b/lib/MC/MCAsmStreamer.cpp
@@ -198,14 +198,24 @@
 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::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;