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/jit/JITCode.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/JavaScriptCore/jit/JITCode.h')
-rw-r--r-- | Source/JavaScriptCore/jit/JITCode.h | 82 |
1 files changed, 59 insertions, 23 deletions
diff --git a/Source/JavaScriptCore/jit/JITCode.h b/Source/JavaScriptCore/jit/JITCode.h index 52c78111a..75c70c7f7 100644 --- a/Source/JavaScriptCore/jit/JITCode.h +++ b/Source/JavaScriptCore/jit/JITCode.h @@ -23,17 +23,16 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef JITCode_h -#define JITCode_h +#pragma once -#if ENABLE(JIT) || ENABLE(LLINT) +#include "ArityCheckMode.h" #include "CallFrame.h" +#include "CodeOrigin.h" #include "Disassembler.h" -#include "JITStubs.h" #include "JSCJSValue.h" -#include "LegacyProfiler.h" #include "MacroAssemblerCodeRef.h" -#endif +#include "RegisterSet.h" +#include <wtf/Optional.h> namespace JSC { @@ -47,6 +46,7 @@ class JITCode; } struct ProtoCallFrame; +class TrackedReferences; class VM; class JITCode : public ThreadSafeRefCounted<JITCode> { @@ -54,8 +54,17 @@ public: typedef MacroAssemblerCodeRef CodeRef; typedef MacroAssemblerCodePtr CodePtr; - enum JITType { None, HostCallThunk, InterpreterThunk, BaselineJIT, DFGJIT, FTLJIT }; + enum JITType : uint8_t { + None, + HostCallThunk, + InterpreterThunk, + BaselineJIT, + DFGJIT, + FTLJIT + }; + static const char* typeName(JITType); + static JITType bottomTierJIT() { return BaselineJIT; @@ -112,7 +121,7 @@ public: return false; } } - + static bool isLowerTier(JITType expectedLower, JITType expectedHigher) { RELEASE_ASSERT(isExecutableScript(expectedLower)); @@ -164,7 +173,7 @@ public: return jitCode->jitType(); } - virtual CodePtr addressForCall() = 0; + virtual CodePtr addressForCall(ArityCheckMode) = 0; virtual void* executableAddressAtOffset(size_t offset) = 0; void* executableAddress() { return executableAddressAtOffset(0); } virtual void* dataAddressAtOffset(size_t offset) = 0; @@ -175,7 +184,9 @@ public: virtual FTL::JITCode* ftl(); virtual FTL::ForOSREntryJITCode* ftlForOSREntry(); - JSValue execute(VM*, ProtoCallFrame*, Register*); + virtual void validateReferences(const TrackedReferences&); + + JSValue execute(VM*, ProtoCallFrame*); void* start() { return dataAddressAtOffset(0); } virtual size_t size() = 0; @@ -183,29 +194,56 @@ public: virtual bool contains(void*) = 0; - static PassRefPtr<JITCode> hostFunction(CodeRef); +#if ENABLE(JIT) + virtual RegisterSet liveRegistersToPreserveAtExceptionHandlingCallSite(CodeBlock*, CallSiteIndex); + virtual std::optional<CodeOrigin> findPC(CodeBlock*, void* pc) { UNUSED_PARAM(pc); return std::nullopt; } +#endif private: JITType m_jitType; }; -class DirectJITCode : public JITCode { +class JITCodeWithCodeRef : public JITCode { +protected: + JITCodeWithCodeRef(JITType); + JITCodeWithCodeRef(CodeRef, JITType); + +public: + virtual ~JITCodeWithCodeRef(); + + void* executableAddressAtOffset(size_t offset) override; + void* dataAddressAtOffset(size_t offset) override; + unsigned offsetOf(void* pointerIntoCode) override; + size_t size() override; + bool contains(void*) override; + +protected: + CodeRef m_ref; +}; + +class DirectJITCode : public JITCodeWithCodeRef { public: DirectJITCode(JITType); - DirectJITCode(const CodeRef, JITType); + DirectJITCode(CodeRef, CodePtr withArityCheck, JITType); virtual ~DirectJITCode(); - void initializeCodeRef(CodeRef ref); + void initializeCodeRef(CodeRef, CodePtr withArityCheck); - virtual CodePtr addressForCall() override; - virtual void* executableAddressAtOffset(size_t offset) override; - virtual void* dataAddressAtOffset(size_t offset) override; - virtual unsigned offsetOf(void* pointerIntoCode) override; - virtual size_t size() override; - virtual bool contains(void*) override; + CodePtr addressForCall(ArityCheckMode) override; private: - CodeRef m_ref; + CodePtr m_withArityCheck; +}; + +class NativeJITCode : public JITCodeWithCodeRef { +public: + NativeJITCode(JITType); + NativeJITCode(CodeRef, JITType); + virtual ~NativeJITCode(); + + void initializeCodeRef(CodeRef); + + CodePtr addressForCall(ArityCheckMode) override; }; } // namespace JSC @@ -216,5 +254,3 @@ class PrintStream; void printInternal(PrintStream&, JSC::JITCode::JITType); } // namespace WTF - -#endif |