Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(267)

Side by Side Diff: JavaScriptCore/jit/JITStubs.h

Issue 28077: WebKit side of merge from r41149 to r41181. (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/WebKit/
Patch Set: Created 11 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « JavaScriptCore/jit/JITPropertyAccess.cpp ('k') | JavaScriptCore/jit/JITStubs.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2008 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 11 matching lines...) Expand all
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */ 27 */
28 28
29 #ifndef JITStubs_h 29 #ifndef JITStubs_h
30 #define JITStubs_h 30 #define JITStubs_h
31 31
32 #include "Register.h"
33 #include <wtf/Platform.h>
34
35 #if ENABLE(JIT)
36
32 namespace JSC { 37 namespace JSC {
33 38
39 class ExecutablePool;
40 class JSGlobalData;
41 class JSObject;
42 class JSPropertyNameIterator;
43 class JSValueEncodedAsPointer;
44 class CodeBlock;
45 class JSValuePtr;
46 class Identifier;
47 class PropertySlot;
48 class PutPropertySlot;
49
50 #if USE(JIT_STUB_ARGUMENT_VA_LIST)
51 #define STUB_ARGS void* args, ...
52 #define ARGS (reinterpret_cast<void**>(vl_args) - 1)
53 #else // JIT_STUB_ARGUMENT_REGISTER or JIT_STUB_ARGUMENT_STACK
54 #define STUB_ARGS void** args
55 #define ARGS (args)
56 #endif
57
58 #if USE(JIT_STUB_ARGUMENT_REGISTER)
59 #if PLATFORM(X86_64)
60 #define JIT_STUB
61 #elif COMPILER(MSVC)
62 #define JIT_STUB __fastcall
63 #elif COMPILER(GCC)
64 #define JIT_STUB __attribute__ ((fastcall))
65 #else
66 #error Need to support register calling convention in this compiler
67 #endif
68 #else // JIT_STUB_ARGUMENT_VA_LIST or JIT_STUB_ARGUMENT_STACK
69 #if COMPILER(MSVC)
70 #define JIT_STUB __cdecl
71 #else
72 #define JIT_STUB
73 #endif
74 #endif
75
76 // The Mac compilers are fine with this,
77 #if PLATFORM(MAC)
78 struct VoidPtrPair {
79 void* first;
80 void* second;
81 };
82 #define RETURN_PAIR(a,b) VoidPtrPair pair = { a, b }; return pair
83 #else
84 typedef uint64_t VoidPtrPair;
85 union VoidPtrPairValue {
86 struct { void* first; void* second; } s;
87 VoidPtrPair i;
88 };
89 #define RETURN_PAIR(a,b) VoidPtrPairValue pair = {{ a, b }}; return pair.i
90 #endif
91
92 class JITStubs {
93 public:
94 JITStubs(JSGlobalData*);
95
96 static JSObject* JIT_STUB cti_op_construct_JSConstruct(STUB_ARGS);
97 static JSObject* JIT_STUB cti_op_convert_this(STUB_ARGS);
98 static JSObject* JIT_STUB cti_op_new_array(STUB_ARGS);
99 static JSObject* JIT_STUB cti_op_new_error(STUB_ARGS);
100 static JSObject* JIT_STUB cti_op_new_func(STUB_ARGS);
101 static JSObject* JIT_STUB cti_op_new_func_exp(STUB_ARGS);
102 static JSObject* JIT_STUB cti_op_new_object(STUB_ARGS);
103 static JSObject* JIT_STUB cti_op_new_regexp(STUB_ARGS);
104 static JSObject* JIT_STUB cti_op_push_activation(STUB_ARGS);
105 static JSObject* JIT_STUB cti_op_push_new_scope(STUB_ARGS);
106 static JSObject* JIT_STUB cti_op_push_scope(STUB_ARGS);
107 static JSPropertyNameIterator* JIT_STUB cti_op_get_pnames(STUB_ARGS);
108 static JSValueEncodedAsPointer* JIT_STUB cti_op_add(STUB_ARGS);
109 static JSValueEncodedAsPointer* JIT_STUB cti_op_bitand(STUB_ARGS);
110 static JSValueEncodedAsPointer* JIT_STUB cti_op_bitnot(STUB_ARGS);
111 static JSValueEncodedAsPointer* JIT_STUB cti_op_bitor(STUB_ARGS);
112 static JSValueEncodedAsPointer* JIT_STUB cti_op_bitxor(STUB_ARGS);
113 static JSValueEncodedAsPointer* JIT_STUB cti_op_call_NotJSFunction(STUB_ ARGS);
114 static JSValueEncodedAsPointer* JIT_STUB cti_op_call_eval(STUB_ARGS);
115 static JSValueEncodedAsPointer* JIT_STUB cti_op_construct_NotJSConstruct (STUB_ARGS);
116 static JSValueEncodedAsPointer* JIT_STUB cti_op_del_by_id(STUB_ARGS);
117 static JSValueEncodedAsPointer* JIT_STUB cti_op_del_by_val(STUB_ARGS);
118 static JSValueEncodedAsPointer* JIT_STUB cti_op_div(STUB_ARGS);
119 static JSValueEncodedAsPointer* JIT_STUB cti_op_eq(STUB_ARGS);
120 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id(STUB_ARGS);
121 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id_array_fail(STU B_ARGS);
122 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id_generic(STUB_A RGS);
123 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id_proto_fail(STU B_ARGS);
124 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id_proto_list(STU B_ARGS);
125 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id_proto_list_ful l(STUB_ARGS);
126 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id_second(STUB_AR GS);
127 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id_self_fail(STUB _ARGS);
128 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_id_string_fail(ST UB_ARGS);
129 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_val(STUB_ARGS);
130 static JSValueEncodedAsPointer* JIT_STUB cti_op_get_by_val_byte_array(ST UB_ARGS);
131 static JSValueEncodedAsPointer* JIT_STUB cti_op_in(STUB_ARGS);
132 static JSValueEncodedAsPointer* JIT_STUB cti_op_instanceof(STUB_ARGS);
133 static JSValueEncodedAsPointer* JIT_STUB cti_op_is_boolean(STUB_ARGS);
134 static JSValueEncodedAsPointer* JIT_STUB cti_op_is_function(STUB_ARGS);
135 static JSValueEncodedAsPointer* JIT_STUB cti_op_is_number(STUB_ARGS);
136 static JSValueEncodedAsPointer* JIT_STUB cti_op_is_object(STUB_ARGS);
137 static JSValueEncodedAsPointer* JIT_STUB cti_op_is_string(STUB_ARGS);
138 static JSValueEncodedAsPointer* JIT_STUB cti_op_is_undefined(STUB_ARGS);
139 static JSValueEncodedAsPointer* JIT_STUB cti_op_less(STUB_ARGS);
140 static JSValueEncodedAsPointer* JIT_STUB cti_op_lesseq(STUB_ARGS);
141 static JSValueEncodedAsPointer* JIT_STUB cti_op_lshift(STUB_ARGS);
142 static JSValueEncodedAsPointer* JIT_STUB cti_op_mod(STUB_ARGS);
143 static JSValueEncodedAsPointer* JIT_STUB cti_op_mul(STUB_ARGS);
144 static JSValueEncodedAsPointer* JIT_STUB cti_op_negate(STUB_ARGS);
145 static JSValueEncodedAsPointer* JIT_STUB cti_op_neq(STUB_ARGS);
146 static JSValueEncodedAsPointer* JIT_STUB cti_op_next_pname(STUB_ARGS);
147 static JSValueEncodedAsPointer* JIT_STUB cti_op_not(STUB_ARGS);
148 static JSValueEncodedAsPointer* JIT_STUB cti_op_nstricteq(STUB_ARGS);
149 static JSValueEncodedAsPointer* JIT_STUB cti_op_pre_dec(STUB_ARGS);
150 static JSValueEncodedAsPointer* JIT_STUB cti_op_pre_inc(STUB_ARGS);
151 static JSValueEncodedAsPointer* JIT_STUB cti_op_resolve(STUB_ARGS);
152 static JSValueEncodedAsPointer* JIT_STUB cti_op_resolve_base(STUB_ARGS);
153 static JSValueEncodedAsPointer* JIT_STUB cti_op_resolve_global(STUB_ARGS );
154 static JSValueEncodedAsPointer* JIT_STUB cti_op_resolve_skip(STUB_ARGS);
155 static JSValueEncodedAsPointer* JIT_STUB cti_op_rshift(STUB_ARGS);
156 static JSValueEncodedAsPointer* JIT_STUB cti_op_stricteq(STUB_ARGS);
157 static JSValueEncodedAsPointer* JIT_STUB cti_op_sub(STUB_ARGS);
158 static JSValueEncodedAsPointer* JIT_STUB cti_op_throw(STUB_ARGS);
159 static JSValueEncodedAsPointer* JIT_STUB cti_op_to_jsnumber(STUB_ARGS);
160 static JSValueEncodedAsPointer* JIT_STUB cti_op_typeof(STUB_ARGS);
161 static JSValueEncodedAsPointer* JIT_STUB cti_op_urshift(STUB_ARGS);
162 static JSValueEncodedAsPointer* JIT_STUB cti_vm_throw(STUB_ARGS);
163 static VoidPtrPair JIT_STUB cti_op_call_arityCheck(STUB_ARGS);
164 static VoidPtrPair JIT_STUB cti_op_post_dec(STUB_ARGS);
165 static VoidPtrPair JIT_STUB cti_op_post_inc(STUB_ARGS);
166 static VoidPtrPair JIT_STUB cti_op_resolve_func(STUB_ARGS);
167 static VoidPtrPair JIT_STUB cti_op_resolve_with_base(STUB_ARGS);
168 static int JIT_STUB cti_op_jless(STUB_ARGS);
169 static int JIT_STUB cti_op_jtrue(STUB_ARGS);
170 static int JIT_STUB cti_op_loop_if_less(STUB_ARGS);
171 static int JIT_STUB cti_op_loop_if_lesseq(STUB_ARGS);
172 static int JIT_STUB cti_op_loop_if_true(STUB_ARGS);
173 static int JIT_STUB cti_timeout_check(STUB_ARGS);
174 static void JIT_STUB cti_op_create_arguments(STUB_ARGS);
175 static void JIT_STUB cti_op_create_arguments_no_params(STUB_ARGS);
176 static void JIT_STUB cti_op_debug(STUB_ARGS);
177 static void JIT_STUB cti_op_end(STUB_ARGS);
178 static void JIT_STUB cti_op_jmp_scopes(STUB_ARGS);
179 static void JIT_STUB cti_op_pop_scope(STUB_ARGS);
180 static void JIT_STUB cti_op_profile_did_call(STUB_ARGS);
181 static void JIT_STUB cti_op_profile_will_call(STUB_ARGS);
182 static void JIT_STUB cti_op_put_by_id(STUB_ARGS);
183 static void JIT_STUB cti_op_put_by_id_fail(STUB_ARGS);
184 static void JIT_STUB cti_op_put_by_id_generic(STUB_ARGS);
185 static void JIT_STUB cti_op_put_by_id_second(STUB_ARGS);
186 static void JIT_STUB cti_op_put_by_index(STUB_ARGS);
187 static void JIT_STUB cti_op_put_by_val(STUB_ARGS);
188 static void JIT_STUB cti_op_put_by_val_array(STUB_ARGS);
189 static void JIT_STUB cti_op_put_by_val_byte_array(STUB_ARGS);
190 static void JIT_STUB cti_op_put_getter(STUB_ARGS);
191 static void JIT_STUB cti_op_put_setter(STUB_ARGS);
192 static void JIT_STUB cti_op_ret_scopeChain(STUB_ARGS);
193 static void JIT_STUB cti_op_tear_off_activation(STUB_ARGS);
194 static void JIT_STUB cti_op_tear_off_arguments(STUB_ARGS);
195 static void JIT_STUB cti_register_file_check(STUB_ARGS);
196 static void* JIT_STUB cti_op_call_JSFunction(STUB_ARGS);
197 static void* JIT_STUB cti_op_switch_char(STUB_ARGS);
198 static void* JIT_STUB cti_op_switch_imm(STUB_ARGS);
199 static void* JIT_STUB cti_op_switch_string(STUB_ARGS);
200 static void* JIT_STUB cti_vm_dontLazyLinkCall(STUB_ARGS);
201 static void* JIT_STUB cti_vm_lazyLinkCall(STUB_ARGS);
202
203 static void tryCacheGetByID(CallFrame*, CodeBlock*, void* returnAddress, JSValuePtr baseValue, const Identifier& propertyName, const PropertySlot&);
204 static void tryCachePutByID(CallFrame*, CodeBlock*, void* returnAddress, JSValuePtr baseValue, const PutPropertySlot&);
205
206 void* ctiArrayLengthTrampoline() { return m_ctiArrayLengthTrampoline; }
207 void* ctiStringLengthTrampoline() { return m_ctiStringLengthTrampoline; }
208 void* ctiVirtualCallPreLink() { return m_ctiVirtualCallPreLink; }
209 void* ctiVirtualCallLink() { return m_ctiVirtualCallLink; }
210 void* ctiVirtualCall() { return m_ctiVirtualCall; }
211
212 private:
213 RefPtr<ExecutablePool> m_executablePool;
214
215 void* m_ctiArrayLengthTrampoline;
216 void* m_ctiStringLengthTrampoline;
217 void* m_ctiVirtualCallPreLink;
218 void* m_ctiVirtualCallLink;
219 void* m_ctiVirtualCall;
220 };
221
34 } // namespace JSC 222 } // namespace JSC
35 223
224 #endif // ENABLE(JIT)
225
36 #endif // JITStubs_h 226 #endif // JITStubs_h
OLDNEW
« no previous file with comments | « JavaScriptCore/jit/JITPropertyAccess.cpp ('k') | JavaScriptCore/jit/JITStubs.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698