Revision: 1905 http://trac.macosforge.org/projects/ruby/changeset/1905 Author: lsansonetti@apple.com Date: 2009-06-19 22:20:37 -0700 (Fri, 19 Jun 2009) Log Message: ----------- introduce a cache to avoid optimizing+JITing the same function twice Modified Paths: -------------- MacRuby/branches/experimental/vm.cpp MacRuby/branches/experimental/vm.h Modified: MacRuby/branches/experimental/vm.cpp =================================================================== --- MacRuby/branches/experimental/vm.cpp 2009-06-20 05:06:56 UTC (rev 1904) +++ MacRuby/branches/experimental/vm.cpp 2009-06-20 05:20:37 UTC (rev 1905) @@ -284,6 +284,11 @@ IMP RoxorVM::compile(Function *func) { + std::map<Function *, IMP>::iterator iter = JITcache.find(func); + if (iter != JITcache.end()) { + return iter->second; + } + #if ROXOR_COMPILER_DEBUG if (verifyModule(*RoxorCompiler::module)) { printf("Error during module verification\n"); @@ -296,6 +301,7 @@ // Optimize & compile. optimize(func); IMP imp = (IMP)ee->getPointerToFunction(func); + JITcache[func] = imp; #if ROXOR_COMPILER_DEBUG uint64_t elapsed = mach_absolute_time() - start; Modified: MacRuby/branches/experimental/vm.h =================================================================== --- MacRuby/branches/experimental/vm.h 2009-06-20 05:06:56 UTC (rev 1904) +++ MacRuby/branches/experimental/vm.h 2009-06-20 05:20:37 UTC (rev 1905) @@ -429,6 +429,7 @@ ExecutionEngine *iee; FunctionPassManager *fpm; bool running; + std::map<Function *, IMP> JITcache; std::map<IMP, rb_vm_method_node_t *> ruby_imps; std::map<SEL, struct mcache *> mcache;
participants (1)
-
source_changes@macosforge.org