[vmkit-commits] [vmkit] r138886 - in /vmkit/trunk: include/mvm/MethodInfo.h include/mvm/System.h lib/Mvm/Runtime/MethodInfo.cpp lib/Mvm/StaticGCPrinter/VmkitGCPrinter.cpp mmtk/mmtk-j3/ObjectModel.cpp tools/precompiler/trainer/Makefile

Nicolas Geoffray nicolas.geoffray at lip6.fr
Wed Aug 31 13:12:36 PDT 2011


Author: geoffray
Date: Wed Aug 31 15:12:36 2011
New Revision: 138886

URL: http://llvm.org/viewvc/llvm-project?rev=138886&view=rev
Log:
Additional fixes to get linux/x64 working.


Added:
    vmkit/trunk/include/mvm/System.h
Modified:
    vmkit/trunk/include/mvm/MethodInfo.h
    vmkit/trunk/lib/Mvm/Runtime/MethodInfo.cpp
    vmkit/trunk/lib/Mvm/StaticGCPrinter/VmkitGCPrinter.cpp
    vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
    vmkit/trunk/tools/precompiler/trainer/Makefile

Modified: vmkit/trunk/include/mvm/MethodInfo.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/MethodInfo.h?rev=138886&r1=138885&r2=138886&view=diff
==============================================================================
--- vmkit/trunk/include/mvm/MethodInfo.h (original)
+++ vmkit/trunk/include/mvm/MethodInfo.h Wed Aug 31 15:12:36 2011
@@ -11,6 +11,7 @@
 #define MVM_METHODINFO_H
 
 #include "mvm/Allocator.h"
+#include "mvm/System.h"
 #include "mvm/GC/GC.h"
 
 namespace mvm {
@@ -33,9 +34,7 @@
   
   static uint32_t FrameInfoSize(uint32_t NumOffsets) {
     uint32_t FrameInfoSize = sizeof(FrameInfo) + (NumOffsets - 1) * sizeof(int16_t);
-    if (FrameInfoSize & 2) {
-      FrameInfoSize += sizeof(int16_t);
-    }
+    FrameInfoSize = System::WordAlignUp(FrameInfoSize);
     return FrameInfoSize;
   }
 };
@@ -46,13 +45,13 @@
   uint32_t NumDescriptors;
   FrameInfo* frames() const {
     return reinterpret_cast<FrameInfo*>(
-        reinterpret_cast<uintptr_t>(this) + sizeof(Frames));
+        reinterpret_cast<uintptr_t>(this) + kWordSize);
   }
 
   void* operator new(size_t sz, mvm::BumpPtrAllocator& allocator, uint32_t NumDescriptors, uint32_t NumOffsets) {
     Frames* res = reinterpret_cast<Frames*>(
-        allocator.Allocate(sizeof(Frames) + NumDescriptors * MethodInfoHelper::FrameInfoSize(NumOffsets), "Frames"));
-    assert((reinterpret_cast<uintptr_t>(res) & 2) == 0);
+        allocator.Allocate(kWordSize + NumDescriptors * MethodInfoHelper::FrameInfoSize(NumOffsets), "Frames"));
+    assert(System::IsWordAligned(reinterpret_cast<uintptr_t>(res)));
     return res;
   }
 };

Added: vmkit/trunk/include/mvm/System.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/System.h?rev=138886&view=auto
==============================================================================
--- vmkit/trunk/include/mvm/System.h (added)
+++ vmkit/trunk/include/mvm/System.h Wed Aug 31 15:12:36 2011
@@ -0,0 +1,36 @@
+//===-------------------- System.h - System utils -------------------------===//
+//
+//                            The VMKit project
+//
+// This file is distributed under the University of Illinois Open Source 
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef MVM_SYSTEM_H
+#define MVM_SYSTEM_H
+
+#include <stdint.h>
+
+namespace mvm {
+
+const int kWordSize = sizeof(intptr_t);
+const int kWordSizeLog2 = kWordSize == 4 ? 2 : 3;
+
+class System {
+public:
+  static bool IsWordAligned(intptr_t ptr) {
+    return (ptr & (kWordSize - 1)) == 0;
+  }
+
+  static intptr_t WordAlignUp(intptr_t ptr) {
+    if (!IsWorldAligned(ptr)) {
+      return (ptr & ~(kWordSize - 1)) + kWordSize;
+    }
+    return ptr;
+  }
+};
+
+}
+
+#endif

Modified: vmkit/trunk/lib/Mvm/Runtime/MethodInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/MethodInfo.cpp?rev=138886&r1=138885&r2=138886&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/MethodInfo.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/MethodInfo.cpp Wed Aug 31 15:12:36 2011
@@ -55,6 +55,7 @@
       FrameInfo* frame = NULL;
       while (iterator.hasNext()) {
         frame = iterator.next();
+        assert(frame->ReturnAddress);
         addFrameInfoNoLock(frame->ReturnAddress, frame);
       }
       if (frame != NULL) {

Modified: vmkit/trunk/lib/Mvm/StaticGCPrinter/VmkitGCPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/StaticGCPrinter/VmkitGCPrinter.cpp?rev=138886&r1=138885&r2=138886&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/StaticGCPrinter/VmkitGCPrinter.cpp (original)
+++ vmkit/trunk/lib/Mvm/StaticGCPrinter/VmkitGCPrinter.cpp Wed Aug 31 15:12:36 2011
@@ -178,6 +178,7 @@
     NumMethodFrames++;
   }
   AP.EmitInt32(NumMethodFrames);
+  AP.EmitAlignment(IntPtrSize == 4 ? 2 : 3);
 
   for (iterator I = begin(), IE = end(); I != IE; ++I) {
     GCFunctionInfo &FI = **I;

Modified: vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp?rev=138886&r1=138885&r2=138886&view=diff
==============================================================================
--- vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp (original)
+++ vmkit/trunk/mmtk/mmtk-j3/ObjectModel.cpp Wed Aug 31 15:12:36 2011
@@ -7,6 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "mvm/System.h"
 #include "mvm/VirtualMachine.h"
 #include "MMTkObject.h"
 #include "debug.h"
@@ -40,17 +41,17 @@
 
 extern "C" uint8_t Java_org_j3_mmtk_ObjectModel_readAvailableByte__Lorg_vmmagic_unboxed_ObjectReference_2 (MMTkObject* OM, gc* obj) {
 #if defined(__PPC__)
-  return ((uint8_t*)obj)[7];
+  return ((uint8_t*)obj)[2 * mvm::kWordSize - 1];
 #else
-  return ((uint8_t*)obj)[4];
+  return ((uint8_t*)obj)[mvm::kWordSize];
 #endif
 }
 
 extern "C" void Java_org_j3_mmtk_ObjectModel_writeAvailableByte__Lorg_vmmagic_unboxed_ObjectReference_2B (MMTkObject* OM, gc* obj, uint8_t val) {
 #if defined(__PPC__)
-  ((uint8_t*)obj)[7] = val;
+  ((uint8_t*)obj)[2 * mvm::kWordSize - 1] = val;
 #else
-  ((uint8_t*)obj)[4] = val;
+  ((uint8_t*)obj)[mvm::kWordSize] = val;
 #endif
 }
 

Modified: vmkit/trunk/tools/precompiler/trainer/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/precompiler/trainer/Makefile?rev=138886&r1=138885&r2=138886&view=diff
==============================================================================
--- vmkit/trunk/tools/precompiler/trainer/Makefile (original)
+++ vmkit/trunk/tools/precompiler/trainer/Makefile Wed Aug 31 15:12:36 2011
@@ -22,7 +22,7 @@
 
 HelloWorld.class: HelloWorld.java
 	$(Echo) "Compiling trainer"
-	$(Verb) javac $<
+	$(Verb) javac $< -d .
 
 generated.bc: $(PRECOMPILER) HelloWorld.class
 	$(Echo) "Pre-compiling bootstrap code"





More information about the vmkit-commits mailing list