summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/jit/JITCode.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/JavaScriptCore/jit/JITCode.h
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/JavaScriptCore/jit/JITCode.h')
-rw-r--r--Source/JavaScriptCore/jit/JITCode.h82
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