Preserve the name for this variant of IRBuilder::CreateCall
[oota-llvm.git] / include / llvm / Support / OutputBuffer.h
index 0fedb15e40507a64faf9edef7d9fbc2f832488bf..6b98e99e28e06face9cbef5997206ee4d9e5a5a5 100644 (file)
 #ifndef LLVM_SUPPORT_OUTPUTBUFFER_H
 #define LLVM_SUPPORT_OUTPUTBUFFER_H
 
+#include <cassert>
 #include <string>
 #include <vector>
 
 namespace llvm {
-  
+
   class OutputBuffer {
     /// Output buffer.
     std::vector<unsigned char> &Output;
@@ -37,7 +38,7 @@ namespace llvm {
       assert(Boundary && (Boundary & (Boundary - 1)) == 0 &&
              "Must align to 2^k boundary");
       size_t Size = Output.size();
-      
+
       if (Size & (Boundary - 1)) {
         // Add padding to get alignment to the correct place.
         size_t Pad = Boundary - (Size & (Boundary - 1));
@@ -111,10 +112,10 @@ namespace llvm {
         ? static_cast<unsigned>(S.length()) : Length;
       unsigned len_to_fill = static_cast<unsigned>(S.length()) < Length
         ? Length - static_cast<unsigned>(S.length()) : 0;
-      
+
       for (unsigned i = 0; i < len_to_copy; ++i)
         outbyte(S[i]);
-      
+
       for (unsigned i = 0; i < len_to_fill; ++i)
         outbyte(0);
     }
@@ -134,11 +135,22 @@ namespace llvm {
       P[2] = (X >> (isLittleEndian ? 16 :  8)) & 255;
       P[3] = (X >> (isLittleEndian ? 24 :  0)) & 255;
     }
+    void fixxword(uint64_t X, unsigned Offset) {
+      unsigned char *P = &Output[Offset];
+      P[0] = (X >> (isLittleEndian ?  0 : 56)) & 255;
+      P[1] = (X >> (isLittleEndian ?  8 : 48)) & 255;
+      P[2] = (X >> (isLittleEndian ? 16 : 40)) & 255;
+      P[3] = (X >> (isLittleEndian ? 24 : 32)) & 255;
+      P[4] = (X >> (isLittleEndian ? 32 : 24)) & 255;
+      P[5] = (X >> (isLittleEndian ? 40 : 16)) & 255;
+      P[6] = (X >> (isLittleEndian ? 48 :  8)) & 255;
+      P[7] = (X >> (isLittleEndian ? 56 :  0)) & 255;
+    }
     void fixaddr(uint64_t X, unsigned Offset) {
       if (!is64Bit)
         fixword((unsigned)X, Offset);
       else
-        assert(0 && "Emission of 64-bit data not implemented yet!");
+        fixxword(X, Offset);
     }
 
     unsigned char &operator[](unsigned Index) {
@@ -148,7 +160,7 @@ namespace llvm {
       return Output[Index];
     }
   };
-  
+
 } // end llvm namespace
 
 #endif // LLVM_SUPPORT_OUTPUTBUFFER_H