[vmkit-commits] [vmkit] r200834 - Stack size is now fixed (important for inlining)

Gael Thomas gael.thomas at lip6.fr
Wed Feb 5 04:34:25 PST 2014


Author: gthomas
Date: Wed Feb  5 06:34:25 2014
New Revision: 200834

URL: http://llvm.org/viewvc/llvm-project?rev=200834&view=rev
Log:
Stack size is now fixed (important for inlining)

Modified:
    vmkit/branches/mcjit/include/j3/j3options.h
    vmkit/branches/mcjit/include/vmkit/allocator.h
    vmkit/branches/mcjit/include/vmkit/config.h.in
    vmkit/branches/mcjit/lib/j3/vm/j3.cc
    vmkit/branches/mcjit/lib/j3/vm/j3arch-dep.s
    vmkit/branches/mcjit/lib/j3/vm/j3options.cc
    vmkit/branches/mcjit/lib/vmkit/allocator.cc
    vmkit/branches/mcjit/lib/vmkit/inliner.cc

Modified: vmkit/branches/mcjit/include/j3/j3options.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3options.h?rev=200834&r1=200833&r2=200834&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3options.h (original)
+++ vmkit/branches/mcjit/include/j3/j3options.h Wed Feb  5 06:34:25 2014
@@ -49,8 +49,6 @@ namespace j3 {
 		uint32_t       debugLinking;
 		uint32_t       debugLifeCycle;
 		
-		uintptr_t      stackSize;
-
 		bool           isAOT;
 		const char*    aotFile;
 		bool           enableInlining;

Modified: vmkit/branches/mcjit/include/vmkit/allocator.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/vmkit/allocator.h?rev=200834&r1=200833&r2=200834&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/vmkit/allocator.h (original)
+++ vmkit/branches/mcjit/include/vmkit/allocator.h Wed Feb  5 06:34:25 2014
@@ -15,17 +15,19 @@
 #include <map>
 #include <vector>
 
+#include "vmkit/config.h"
+
 namespace vmkit {
 	class BumpAllocatorNode { /* always the first bytes of a bucket */
 	public:
 		BumpAllocatorNode* next;
-		uint8_t*                top;
+		uint8_t*           top;
 	};
 
 	class BumpAllocator {
 		static const size_t bucketSize = 64*1024;
 	private:
-		pthread_mutex_t         mutex;
+		pthread_mutex_t    mutex;
 		BumpAllocatorNode* current;
 
 		void* operator new(size_t n);
@@ -121,13 +123,12 @@ namespace vmkit {
 
 		static pthread_mutex_t     mutex;
 		static uintptr_t           baseStack;
-		static uintptr_t           topStack;
 		static uintptr_t           _magic;
 		static std::vector<void*>* spaces;
 		static std::vector<void*>* freeThreads;
 
 	public:
-		static void initialize(uintptr_t minThreadStruct, uintptr_t minFullSize);
+		static void initialize(uintptr_t minThreadStruct);
 
 		static void* allocate();
 		static void  release(void* thread);
@@ -138,7 +139,7 @@ namespace vmkit {
 		static void*     stackAddr(void* thread);
 		static size_t    stackSize(void* thread); 
 
-		static uintptr_t magic() { return _magic; }
+		static uintptr_t magic() { return -VMKIT_STACK_SIZE; }
 	};
 } // end namespace vmkit
 

Modified: vmkit/branches/mcjit/include/vmkit/config.h.in
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/vmkit/config.h.in?rev=200834&r1=200833&r2=200834&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/vmkit/config.h.in (original)
+++ vmkit/branches/mcjit/include/vmkit/config.h.in Wed Feb  5 06:34:25 2014
@@ -1,3 +1,5 @@
 
 
-#define SHLIBEXT      "@SHLIBEXT@"
\ No newline at end of file
+#define SHLIBEXT      "@SHLIBEXT@"
+
+#define VMKIT_STACK_SIZE  0x80*0x1000

Modified: vmkit/branches/mcjit/lib/j3/vm/j3.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3.cc?rev=200834&r1=200833&r2=200834&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Wed Feb  5 06:34:25 2014
@@ -79,7 +79,7 @@ void J3::start(int argc, char** argv) {
 	_options.process(argc, argv);
 	J3Lib::processOptions(this);
 
-	vmkit::ThreadAllocator::initialize(sizeof(J3Thread), options()->stackSize);
+	vmkit::ThreadAllocator::initialize(sizeof(J3Thread));
 
 	J3Thread* thread = new J3ThreadBootstrap(this);
 

Modified: vmkit/branches/mcjit/lib/j3/vm/j3arch-dep.s
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3arch-dep.s?rev=200834&r1=200833&r2=200834&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3arch-dep.s (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3arch-dep.s Wed Feb  5 06:34:25 2014
@@ -1,5 +1,7 @@
+#include "vmkit/config.h"
+	
 	.section	__DATA,__data
-	.globl __ZN2j312J3Trampoline9argOffsetE, __ZN5vmkit15ThreadAllocator6_magicE
+	.globl __ZN2j312J3Trampoline9argOffsetE
 	.globl _trampoline_generic, _trampoline_generic_method, _trampoline_generic_resolver, _trampoline_generic_end
 	
 _trampoline_generic:
@@ -20,7 +22,7 @@ _trampoline_generic_end:
 	
 _trampoline_save:
 	mov 		%rsp, %rax
-	and 		__ZN5vmkit15ThreadAllocator6_magicE(%rip), %rax
+	and 		$-VMKIT_STACK_SIZE, %rax
 	add 		__ZN2j312J3Trampoline9argOffsetE(%rip), %rax
 
 	mov 		%xmm0, 0(%rax)

Modified: vmkit/branches/mcjit/lib/j3/vm/j3options.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3options.cc?rev=200834&r1=200833&r2=200834&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3options.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3options.cc Wed Feb  5 06:34:25 2014
@@ -26,8 +26,6 @@ J3Options::J3Options() {
 
 	genDebugExecute = 0;//debugExecute ? 1 : 0;
 
-	stackSize = 0x80*0x1000;
-
 	isAOT = 0;
 	enableInlining = 1;
 }

Modified: vmkit/branches/mcjit/lib/vmkit/allocator.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/vmkit/allocator.cc?rev=200834&r1=200833&r2=200834&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/vmkit/allocator.cc (original)
+++ vmkit/branches/mcjit/lib/vmkit/allocator.cc Wed Feb  5 06:34:25 2014
@@ -10,7 +10,6 @@ using namespace vmkit;
 
 pthread_mutex_t     ThreadAllocator::mutex;
 uintptr_t           ThreadAllocator::baseStack = 0;
-uintptr_t           ThreadAllocator::topStack = 0;
 uintptr_t           ThreadAllocator::_magic = 0;
 std::vector<void*>* ThreadAllocator::spaces = 0;
 std::vector<void*>* ThreadAllocator::freeThreads = 0;
@@ -94,7 +93,7 @@ void PermanentObject::operator delete[](
 	//Thread::get()->vm()->internalError("should not happen");
 }
 
-void ThreadAllocator::initialize(uintptr_t minThreadStruct, uintptr_t minFullSize) {
+void ThreadAllocator::initialize(uintptr_t minThreadStruct) {
 	if(spaces)
 		VMKit::internalError("thread allocation system is already initialized");
 	spaces = new std::vector<void*>();
@@ -107,18 +106,13 @@ void ThreadAllocator::initialize(uintptr
 	minThreadStruct = ((minThreadStruct - 1) & -PAGE_SIZE) + PAGE_SIZE;
 	baseStack = minThreadStruct + PAGE_SIZE;
 
-	uintptr_t min = PTHREAD_STACK_MIN + minThreadStruct + (PAGE_SIZE<<1);
-	if(minFullSize < min)
-		minFullSize = min;
-
-	topStack = 1L << (__builtin_clzl(0) - __builtin_clzl(minFullSize-1));
-	_magic = -topStack;
+	_magic = -VMKIT_STACK_SIZE;
 }
 
 void* ThreadAllocator::allocate() {
 	pthread_mutex_lock(&mutex);
 	if(!freeThreads->size()) {
-		void* space = mmap(0, topStack*refill, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
+		void* space = mmap(0, VMKIT_STACK_SIZE*refill, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
 
 		if(space == MAP_FAILED) {
 			fprintf(stderr, "unable to allocate a thread\n");
@@ -127,13 +121,13 @@ void* ThreadAllocator::allocate() {
 
 		spaces->push_back(space);
 
-		uintptr_t base = (((uintptr_t)space - 1) & -topStack) + topStack;
+		uintptr_t base = (((uintptr_t)space - 1) & -VMKIT_STACK_SIZE) + VMKIT_STACK_SIZE;
 		uint32_t n = (base == (uintptr_t)space) ? refill : (refill - 1);
 
 		for(uint32_t i=0; i<n; i++) {
 			mprotect((void*)(base + baseStack), PROT_NONE, PAGE_SIZE);
 			freeThreads->push_back((void*)base);
-			base += topStack;
+			base += VMKIT_STACK_SIZE;
 		}
 	}
 
@@ -154,7 +148,7 @@ void* ThreadAllocator::stackAddr(void* t
 }
 
 size_t ThreadAllocator::stackSize(void* thread) {
-	return topStack - baseStack;
+	return VMKIT_STACK_SIZE - baseStack;
 }
 
 void* ThreadAllocator::alternateStackAddr(void* thread) {

Modified: vmkit/branches/mcjit/lib/vmkit/inliner.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/vmkit/inliner.cc?rev=200834&r1=200833&r2=200834&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/vmkit/inliner.cc (original)
+++ vmkit/branches/mcjit/lib/vmkit/inliner.cc Wed Feb  5 06:34:25 2014
@@ -163,7 +163,7 @@ namespace vmkit {
 				if(symbol) {
 					llvm::Function* bc = symbol->llvmFunction();
 					
-					fprintf(stderr, "            inlining %s in %s\n", bc->getName().data(), function->getName().data());
+					//fprintf(stderr, "            inlining %s in %s\n", bc->getName().data(), function->getName().data());
 
 					if(llvm::isa<llvm::TerminatorInst>(insn)) {
 						llvm::TerminatorInst* terminator = llvm::cast<llvm::TerminatorInst>(insn);





More information about the vmkit-commits mailing list