diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/JavaScriptCore/ftl/FTLJITFinalizer.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/JavaScriptCore/ftl/FTLJITFinalizer.cpp')
-rw-r--r-- | Source/JavaScriptCore/ftl/FTLJITFinalizer.cpp | 88 |
1 files changed, 31 insertions, 57 deletions
diff --git a/Source/JavaScriptCore/ftl/FTLJITFinalizer.cpp b/Source/JavaScriptCore/ftl/FTLJITFinalizer.cpp index a8a99b63a..00ea651e1 100644 --- a/Source/JavaScriptCore/ftl/FTLJITFinalizer.cpp +++ b/Source/JavaScriptCore/ftl/FTLJITFinalizer.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013 Apple Inc. All rights reserved. + * Copyright (C) 2013-2014, 2016 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -30,7 +30,10 @@ #include "CodeBlockWithJITType.h" #include "DFGPlan.h" +#include "FTLState.h" #include "FTLThunks.h" +#include "JSCInlines.h" +#include "ProfilerDatabase.h" namespace JSC { namespace FTL { @@ -45,6 +48,19 @@ JITFinalizer::~JITFinalizer() { } +size_t JITFinalizer::codeSize() +{ + size_t result = 0; + + if (b3CodeLinkBuffer) + result += b3CodeLinkBuffer->size(); + + if (entrypointLinkBuffer) + result += entrypointLinkBuffer->size(); + + return result; +} + bool JITFinalizer::finalize() { RELEASE_ASSERT_NOT_REACHED(); @@ -53,64 +69,22 @@ bool JITFinalizer::finalize() bool JITFinalizer::finalizeFunction() { - for (unsigned i = jitCode->handles().size(); i--;) { - MacroAssembler::cacheFlush( - jitCode->handles()[i]->start(), jitCode->handles()[i]->sizeInBytes()); - } - - if (exitThunksLinkBuffer) { - StackMaps::RecordMap recordMap = jitCode->stackmaps.getRecordMap(); - - for (unsigned i = 0; i < osrExit.size(); ++i) { - OSRExitCompilationInfo& info = osrExit[i]; - OSRExit& exit = jitCode->osrExit[i]; - StackMaps::RecordMap::iterator iter = recordMap.find(exit.m_stackmapID); - if (iter == recordMap.end()) { - // It's OK, it was optimized out. - continue; - } - - exitThunksLinkBuffer->link( - info.m_thunkJump, - CodeLocationLabel( - m_plan.vm.ftlThunks->getOSRExitGenerationThunk( - m_plan.vm, Location::forStackmaps( - &jitCode->stackmaps, iter->value.locations[0])).code())); - } - - jitCode->initializeExitThunks( - FINALIZE_DFG_CODE( - *exitThunksLinkBuffer, - ("FTL exit thunks for %s", toCString(CodeBlockWithJITType(m_plan.codeBlock.get(), JITCode::FTLJIT)).data()))); - } // else this function had no OSR exits, so no exit thunks. - - if (sideCodeLinkBuffer) { - // Side code is for special slow paths that we generate ourselves, like for inline - // caches. - - for (unsigned i = slowPathCalls.size(); i--;) { - SlowPathCall& call = slowPathCalls[i]; - sideCodeLinkBuffer->link( - call.call(), - CodeLocationLabel(m_plan.vm.ftlThunks->getSlowPathCallThunk(m_plan.vm, call.key()).code())); - } - - jitCode->addHandle(FINALIZE_DFG_CODE( - *sideCodeLinkBuffer, - ("FTL side code for %s", - toCString(CodeBlockWithJITType(m_plan.codeBlock.get(), JITCode::FTLJIT)).data())) - .executableMemory()); - } + bool dumpDisassembly = shouldDumpDisassembly() || Options::asyncDisassembly(); - MacroAssemblerCodePtr withArityCheck; - if (arityCheck.isSet()) - withArityCheck = entrypointLinkBuffer->locationOf(arityCheck); - jitCode->initializeCode( - FINALIZE_DFG_CODE( - *entrypointLinkBuffer, - ("FTL entrypoint thunk for %s with LLVM generated code at %p", toCString(CodeBlockWithJITType(m_plan.codeBlock.get(), JITCode::FTLJIT)).data(), function))); + jitCode->initializeB3Code( + FINALIZE_CODE_IF( + dumpDisassembly, *b3CodeLinkBuffer, + ("FTL B3 code for %s", toCString(CodeBlockWithJITType(m_plan.codeBlock, JITCode::FTLJIT)).data()))); + + jitCode->initializeArityCheckEntrypoint( + FINALIZE_CODE_IF( + dumpDisassembly, *entrypointLinkBuffer, + ("FTL entrypoint thunk for %s with B3 generated code at %p", toCString(CodeBlockWithJITType(m_plan.codeBlock, JITCode::FTLJIT)).data(), function))); - m_plan.codeBlock->setJITCode(jitCode, withArityCheck); + m_plan.codeBlock->setJITCode(*jitCode); + + if (m_plan.compilation) + m_plan.vm->m_perBytecodeProfiler->addCompilation(m_plan.codeBlock, *m_plan.compilation); return true; } |