Adding support for adding LLInt opcode extensions. This will be needed
by the LLInt C loop interpreter later.
https://bugs.webkit.org/show_bug.cgi?id=95277.
Patch by Mark Lam <mark.lam@apple.com> on 2012-08-28
Reviewed by Geoffrey Garen.
* JavaScriptCore.xcodeproj/project.pbxproj:
* bytecode/Opcode.h:
* llint/LLIntOpcode.h: Added.
* llint/LowLevelInterpreter.h:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@126955 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/JavaScriptCore/ChangeLog b/Source/JavaScriptCore/ChangeLog
index abf7e4a..64920ec 100644
--- a/Source/JavaScriptCore/ChangeLog
+++ b/Source/JavaScriptCore/ChangeLog
@@ -1,3 +1,16 @@
+2012-08-28 Mark Lam <mark.lam@apple.com>
+
+ Adding support for adding LLInt opcode extensions. This will be needed
+ by the LLInt C loop interpreter later.
+ https://bugs.webkit.org/show_bug.cgi?id=95277.
+
+ Reviewed by Geoffrey Garen.
+
+ * JavaScriptCore.xcodeproj/project.pbxproj:
+ * bytecode/Opcode.h:
+ * llint/LLIntOpcode.h: Added.
+ * llint/LowLevelInterpreter.h:
+
2012-08-28 Gavin Barraclough <barraclough@apple.com>
Rolled out r126928, this broke stuff :'-(
diff --git a/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj b/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
index 764f56c..cb3b86b 100644
--- a/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
+++ b/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
@@ -720,6 +720,7 @@
E49DC16D12EF295300184A1F /* SourceProviderCacheItem.h in Headers */ = {isa = PBXBuildFile; fileRef = E49DC14912EF261A00184A1F /* SourceProviderCacheItem.h */; settings = {ATTRIBUTES = (Private, ); }; };
FE4A331F15BD2E07006F54F3 /* VMInspector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FE4A331D15BD2E07006F54F3 /* VMInspector.cpp */; };
FE4A332015BD2E07006F54F3 /* VMInspector.h in Headers */ = {isa = PBXBuildFile; fileRef = FE4A331E15BD2E07006F54F3 /* VMInspector.h */; };
+ FED287B215EC9A5700DA8161 /* LLIntOpcode.h in Headers */ = {isa = PBXBuildFile; fileRef = FED287B115EC9A5700DA8161 /* LLIntOpcode.h */; settings = {ATTRIBUTES = (Private, ); }; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -1519,6 +1520,7 @@
FE4A331D15BD2E07006F54F3 /* VMInspector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VMInspector.cpp; sourceTree = "<group>"; };
FE4A331E15BD2E07006F54F3 /* VMInspector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VMInspector.h; sourceTree = "<group>"; };
FEB63AA2159B9DA3008932A6 /* Comment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Comment.h; sourceTree = "<group>"; };
+ FED287B115EC9A5700DA8161 /* LLIntOpcode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LLIntOpcode.h; path = llint/LLIntOpcode.h; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -1651,6 +1653,7 @@
0F46809C14BA7F4D00BFE272 /* llint */ = {
isa = PBXGroup;
children = (
+ FED287B115EC9A5700DA8161 /* LLIntOpcode.h */,
5DDDF44614FEE72200B4FB4D /* LLIntDesiredOffsets.h */,
0F0B839514BCF45A00885B4F /* LLIntEntrypoints.cpp */,
0F0B839614BCF45A00885B4F /* LLIntEntrypoints.h */,
@@ -2905,6 +2908,7 @@
0F63947815DCE34B006A597C /* DFGStructureAbstractValue.h in Headers */,
14874AE415EBDE4A002E3587 /* JSNameScope.h in Headers */,
14874AE615EBDE4A002E3587 /* JSScope.h in Headers */,
+ FED287B215EC9A5700DA8161 /* LLIntOpcode.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/Source/JavaScriptCore/bytecode/Opcode.h b/Source/JavaScriptCore/bytecode/Opcode.h
index 777b487..ef6b734 100644
--- a/Source/JavaScriptCore/bytecode/Opcode.h
+++ b/Source/JavaScriptCore/bytecode/Opcode.h
@@ -30,6 +30,8 @@
#ifndef Opcode_h
#define Opcode_h
+#include "LLIntOpcode.h"
+
#include <algorithm>
#include <string.h>
@@ -198,6 +200,8 @@
macro(op_profile_will_call, 2) \
macro(op_profile_did_call, 2) \
\
+ FOR_EACH_LLINT_OPCODE_EXTENSION(macro) \
+ \
macro(op_end, 2) // end must be the last opcode in the list
#define OPCODE_ID_ENUM(opcode, length) opcode,
diff --git a/Source/JavaScriptCore/llint/LLIntOpcode.h b/Source/JavaScriptCore/llint/LLIntOpcode.h
new file mode 100644
index 0000000..326d1b3
--- /dev/null
+++ b/Source/JavaScriptCore/llint/LLIntOpcode.h
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2012 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef LLIntOpcode_h
+#define LLIntOpcode_h
+
+#include <wtf/Platform.h>
+
+#if ENABLE(LLINT)
+
+#define FOR_EACH_LLINT_NOJIT_NATIVE_HELPER(macro) \
+ // Nothing to do here. Use the JIT impl instead.
+
+
+#define FOR_EACH_LLINT_NATIVE_HELPER(macro) \
+ FOR_EACH_LLINT_NOJIT_NATIVE_HELPER(macro) \
+ \
+ macro(llint_begin, 1) \
+ \
+ macro(llint_program_prologue, 1) \
+ macro(llint_eval_prologue, 1) \
+ macro(llint_function_for_call_prologue, 1) \
+ macro(llint_function_for_construct_prologue, 1) \
+ macro(llint_function_for_call_arity_check, 1) \
+ macro(llint_function_for_construct_arity_check, 1) \
+ macro(llint_generic_return_point, 1) \
+ macro(llint_throw_from_slow_path_trampoline, 1) \
+ macro(llint_throw_during_call_trampoline, 1) \
+ \
+ /* Native call trampolines */ \
+ macro(llint_native_call_trampoline, 1) \
+ macro(llint_native_construct_trampoline, 1) \
+ \
+ macro(llint_end, 1)
+
+
+#define FOR_EACH_LLINT_OPCODE_EXTENSION(macro) // Nothing to add.
+
+#else // !ENABLE(LLINT)
+
+#define FOR_EACH_LLINT_OPCODE_EXTENSION(macro) // Nothing to add.
+
+#endif // !ENABLE(LLINT)
+
+#endif // LLIntOpcode_h
diff --git a/Source/JavaScriptCore/llint/LowLevelInterpreter.h b/Source/JavaScriptCore/llint/LowLevelInterpreter.h
index 6383757..f78c427 100644
--- a/Source/JavaScriptCore/llint/LowLevelInterpreter.h
+++ b/Source/JavaScriptCore/llint/LowLevelInterpreter.h
@@ -36,21 +36,10 @@
FOR_EACH_OPCODE_ID(LLINT_INSTRUCTION_DECL);
#undef LLINT_INSTRUCTION_DECL
-extern "C" void llint_begin();
-extern "C" void llint_end();
-extern "C" void llint_program_prologue();
-extern "C" void llint_eval_prologue();
-extern "C" void llint_function_for_call_prologue();
-extern "C" void llint_function_for_construct_prologue();
-extern "C" void llint_function_for_call_arity_check();
-extern "C" void llint_function_for_construct_arity_check();
-extern "C" void llint_generic_return_point();
-extern "C" void llint_throw_from_slow_path_trampoline();
-extern "C" void llint_throw_during_call_trampoline();
+#define DECLARE_LLINT_NATIVE_HELPER(name, length) extern "C" void name();
+ FOR_EACH_LLINT_NATIVE_HELPER(DECLARE_LLINT_NATIVE_HELPER)
+#undef DECLARE_LLINT_NATIVE_HELPER
-// Native call trampolines
-extern "C" void llint_native_call_trampoline();
-extern "C" void llint_native_construct_trampoline();
#endif // ENABLE(LLINT)