]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - jit/JITDriver.h
JavaScriptCore-1218.tar.gz
[apple/javascriptcore.git] / jit / JITDriver.h
index 66cf51925427697ee481cc933177bdafa536a120..a2221fa0f1967d5831c6ddd926d7b315f58df28d 100644 (file)
 namespace JSC {
 
 template<typename CodeBlockType>
 namespace JSC {
 
 template<typename CodeBlockType>
-inline bool jitCompileIfAppropriate(JSGlobalData& globalData, OwnPtr<CodeBlockType>& codeBlock, JITCode& jitCode, JITCode::JITType jitType, JITCompilationEffort effort)
+inline bool jitCompileIfAppropriate(ExecState* exec, OwnPtr<CodeBlockType>& codeBlock, JITCode& jitCode, JITCode::JITType jitType, unsigned bytecodeIndex, JITCompilationEffort effort)
 {
 {
+    VM& vm = exec->vm();
+    
     if (jitType == codeBlock->getJITType())
         return true;
     
     if (jitType == codeBlock->getJITType())
         return true;
     
-    if (!globalData.canUseJIT())
+    if (!vm.canUseJIT())
         return true;
     
     codeBlock->unlinkIncomingCalls();
         return true;
     
     codeBlock->unlinkIncomingCalls();
@@ -52,7 +54,7 @@ inline bool jitCompileIfAppropriate(JSGlobalData& globalData, OwnPtr<CodeBlockTy
     
     bool dfgCompiled = false;
     if (jitType == JITCode::DFGJIT)
     
     bool dfgCompiled = false;
     if (jitType == JITCode::DFGJIT)
-        dfgCompiled = DFG::tryCompile(globalData, codeBlock.get(), jitCode);
+        dfgCompiled = DFG::tryCompile(exec, codeBlock.get(), jitCode, bytecodeIndex);
     if (dfgCompiled) {
         if (codeBlock->alternative())
             codeBlock->alternative()->unlinkIncomingCalls();
     if (dfgCompiled) {
         if (codeBlock->alternative())
             codeBlock->alternative()->unlinkIncomingCalls();
@@ -62,7 +64,7 @@ inline bool jitCompileIfAppropriate(JSGlobalData& globalData, OwnPtr<CodeBlockTy
             jitCode = oldJITCode;
             return false;
         }
             jitCode = oldJITCode;
             return false;
         }
-        jitCode = JIT::compile(&globalData, codeBlock.get(), effort);
+        jitCode = JIT::compile(&vm, codeBlock.get(), effort);
         if (!jitCode) {
             jitCode = oldJITCode;
             return false;
         if (!jitCode) {
             jitCode = oldJITCode;
             return false;
@@ -73,12 +75,14 @@ inline bool jitCompileIfAppropriate(JSGlobalData& globalData, OwnPtr<CodeBlockTy
     return true;
 }
 
     return true;
 }
 
-inline bool jitCompileFunctionIfAppropriate(JSGlobalData& globalData, OwnPtr<FunctionCodeBlock>& codeBlock, JITCode& jitCode, MacroAssemblerCodePtr& jitCodeWithArityCheck, SharedSymbolTable*& symbolTable, JITCode::JITType jitType, JITCompilationEffort effort)
+inline bool jitCompileFunctionIfAppropriate(ExecState* exec, OwnPtr<FunctionCodeBlock>& codeBlock, JITCode& jitCode, MacroAssemblerCodePtr& jitCodeWithArityCheck, JITCode::JITType jitType, unsigned bytecodeIndex, JITCompilationEffort effort)
 {
 {
+    VM& vm = exec->vm();
+    
     if (jitType == codeBlock->getJITType())
         return true;
     
     if (jitType == codeBlock->getJITType())
         return true;
     
-    if (!globalData.canUseJIT())
+    if (!vm.canUseJIT())
         return true;
     
     codeBlock->unlinkIncomingCalls();
         return true;
     
     codeBlock->unlinkIncomingCalls();
@@ -88,19 +92,18 @@ inline bool jitCompileFunctionIfAppropriate(JSGlobalData& globalData, OwnPtr<Fun
     
     bool dfgCompiled = false;
     if (jitType == JITCode::DFGJIT)
     
     bool dfgCompiled = false;
     if (jitType == JITCode::DFGJIT)
-        dfgCompiled = DFG::tryCompileFunction(globalData, codeBlock.get(), jitCode, jitCodeWithArityCheck);
+        dfgCompiled = DFG::tryCompileFunction(exec, codeBlock.get(), jitCode, jitCodeWithArityCheck, bytecodeIndex);
     if (dfgCompiled) {
         if (codeBlock->alternative())
             codeBlock->alternative()->unlinkIncomingCalls();
     } else {
         if (codeBlock->alternative()) {
             codeBlock = static_pointer_cast<FunctionCodeBlock>(codeBlock->releaseAlternative());
     if (dfgCompiled) {
         if (codeBlock->alternative())
             codeBlock->alternative()->unlinkIncomingCalls();
     } else {
         if (codeBlock->alternative()) {
             codeBlock = static_pointer_cast<FunctionCodeBlock>(codeBlock->releaseAlternative());
-            symbolTable = codeBlock->sharedSymbolTable();
             jitCode = oldJITCode;
             jitCodeWithArityCheck = oldJITCodeWithArityCheck;
             return false;
         }
             jitCode = oldJITCode;
             jitCodeWithArityCheck = oldJITCodeWithArityCheck;
             return false;
         }
-        jitCode = JIT::compile(&globalData, codeBlock.get(), effort, &jitCodeWithArityCheck);
+        jitCode = JIT::compile(&vm, codeBlock.get(), effort, &jitCodeWithArityCheck);
         if (!jitCode) {
             jitCode = oldJITCode;
             jitCodeWithArityCheck = oldJITCodeWithArityCheck;
         if (!jitCode) {
             jitCode = oldJITCode;
             jitCodeWithArityCheck = oldJITCodeWithArityCheck;