[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