]>
Commit | Line | Data |
---|---|---|
81345200 | 1 | /* |
ed1e77d3 | 2 | * Copyright (C) 2013-2015 Apple Inc. All rights reserved. |
81345200 A |
3 | * |
4 | * Redistribution and use in source and binary forms, with or without | |
5 | * modification, are permitted provided that the following conditions | |
6 | * are met: | |
7 | * 1. Redistributions of source code must retain the above copyright | |
8 | * notice, this list of conditions and the following disclaimer. | |
9 | * 2. Redistributions in binary form must reproduce the above copyright | |
10 | * notice, this list of conditions and the following disclaimer in the | |
11 | * documentation and/or other materials provided with the distribution. | |
12 | * | |
13 | * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY | |
14 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
15 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |
16 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR | |
17 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | |
18 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | |
19 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |
20 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY | |
21 | * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
22 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
23 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
24 | */ | |
25 | ||
26 | #ifndef JITOperations_h | |
27 | #define JITOperations_h | |
28 | ||
29 | #if ENABLE(JIT) | |
30 | ||
31 | #include "CallFrame.h" | |
32 | #include "CommonSlowPaths.h" | |
33 | #include "JITExceptions.h" | |
34 | #include "JSArray.h" | |
35 | #include "JSCJSValue.h" | |
36 | #include "MacroAssembler.h" | |
37 | #include "PutKind.h" | |
38 | #include "SpillRegistersMode.h" | |
39 | #include "StructureStubInfo.h" | |
81345200 A |
40 | |
41 | ||
42 | namespace JSC { | |
43 | ||
44 | class ArrayAllocationProfile; | |
45 | ||
46 | #if CALLING_CONVENTION_IS_STDCALL | |
47 | #define JIT_OPERATION CDECL | |
48 | #else | |
49 | #define JIT_OPERATION | |
50 | #endif | |
51 | ||
52 | extern "C" { | |
53 | ||
54 | // These typedefs provide typechecking when generating calls out to helper routines; | |
55 | // this helps prevent calling a helper routine with the wrong arguments! | |
56 | /* | |
57 | Key: | |
58 | A: JSArray* | |
59 | Aap: ArrayAllocationProfile* | |
ed1e77d3 | 60 | Ap: ArrayProfile* |
81345200 A |
61 | C: JSCell* |
62 | Cb: CodeBlock* | |
63 | Cli: CallLinkInfo* | |
64 | D: double | |
65 | E: ExecState* | |
66 | F: CallFrame* | |
ed1e77d3 A |
67 | G: JSGlobalObject* |
68 | I: UniquedStringImpl* | |
69 | Icf: InlineCallFrame* | |
81345200 A |
70 | Idc: const Identifier* |
71 | J: EncodedJSValue | |
72 | Jcp: const JSValue* | |
ed1e77d3 A |
73 | Jsc: JSScope* |
74 | Jsf: JSFunction* | |
81345200 | 75 | Jss: JSString* |
ed1e77d3 | 76 | L: JSLexicalEnvironment* |
81345200 A |
77 | O: JSObject* |
78 | P: pointer (char*) | |
79 | Pc: Instruction* i.e. bytecode PC | |
80 | Q: int64_t | |
81 | R: Register | |
82 | S: size_t | |
83 | Sprt: SlowPathReturnType | |
84 | Ssi: StructureStubInfo* | |
85 | St: Structure* | |
ed1e77d3 A |
86 | Symtab: SymbolTable* |
87 | T: StringImpl* | |
81345200 A |
88 | V: void |
89 | Vm: VM* | |
ed1e77d3 | 90 | Ws: WatchpointSet* |
81345200 A |
91 | Z: int32_t |
92 | */ | |
93 | ||
ed1e77d3 | 94 | typedef CallFrame* JIT_OPERATION (*F_JITOperation_EFJZZ)(ExecState*, CallFrame*, EncodedJSValue, int32_t, int32_t); |
81345200 A |
95 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_E)(ExecState*); |
96 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EA)(ExecState*, JSArray*); | |
97 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EAZ)(ExecState*, JSArray*, int32_t); | |
98 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EAapJ)(ExecState*, ArrayAllocationProfile*, EncodedJSValue); | |
99 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EAapJcpZ)(ExecState*, ArrayAllocationProfile*, const JSValue*, int32_t); | |
100 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EC)(ExecState*, JSCell*); | |
101 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_ECC)(ExecState*, JSCell*, JSCell*); | |
ed1e77d3 | 102 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_ECI)(ExecState*, JSCell*, UniquedStringImpl*); |
81345200 | 103 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_ECJ)(ExecState*, JSCell*, EncodedJSValue); |
ed1e77d3 | 104 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_ECZ)(ExecState*, JSCell*, int32_t); |
81345200 A |
105 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EDA)(ExecState*, double, JSArray*); |
106 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EE)(ExecState*, ExecState*); | |
ed1e77d3 | 107 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EI)(ExecState*, UniquedStringImpl*); |
81345200 | 108 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJ)(ExecState*, EncodedJSValue); |
ed1e77d3 A |
109 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJZ)(ExecState*, EncodedJSValue, int32_t); |
110 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJC)(ExecState*, EncodedJSValue, JSCell*); | |
81345200 | 111 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJA)(ExecState*, EncodedJSValue, JSArray*); |
ed1e77d3 | 112 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJI)(ExecState*, EncodedJSValue, UniquedStringImpl*); |
81345200 A |
113 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJIdc)(ExecState*, EncodedJSValue, const Identifier*); |
114 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJJ)(ExecState*, EncodedJSValue, EncodedJSValue); | |
ed1e77d3 | 115 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJJAp)(ExecState*, EncodedJSValue, EncodedJSValue, ArrayProfile*); |
81345200 A |
116 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJssZ)(ExecState*, JSString*, int32_t); |
117 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJP)(ExecState*, EncodedJSValue, void*); | |
118 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EP)(ExecState*, void*); | |
119 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EPP)(ExecState*, void*, void*); | |
120 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EPS)(ExecState*, void*, size_t); | |
121 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EPc)(ExecState*, Instruction*); | |
ed1e77d3 | 122 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EJscC)(ExecState*, JSScope*, JSCell*); |
81345200 | 123 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_ESS)(ExecState*, size_t, size_t); |
ed1e77d3 A |
124 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_ESsiCI)(ExecState*, StructureStubInfo*, JSCell*, UniquedStringImpl*); |
125 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_ESsiJI)(ExecState*, StructureStubInfo*, EncodedJSValue, UniquedStringImpl*); | |
81345200 A |
126 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EZ)(ExecState*, int32_t); |
127 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EZIcfZ)(ExecState*, int32_t, InlineCallFrame*, int32_t); | |
128 | typedef EncodedJSValue JIT_OPERATION (*J_JITOperation_EZZ)(ExecState*, int32_t, int32_t); | |
129 | typedef JSCell* JIT_OPERATION (*C_JITOperation_E)(ExecState*); | |
130 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EZ)(ExecState*, int32_t); | |
131 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EC)(ExecState*, JSCell*); | |
ed1e77d3 A |
132 | typedef JSCell* JIT_OPERATION (*C_JITOperation_ECZ)(ExecState*, JSCell*, int32_t); |
133 | typedef JSCell* JIT_OPERATION (*C_JITOperation_ECZC)(ExecState*, JSCell*, int32_t, JSCell*); | |
81345200 | 134 | typedef JSCell* JIT_OPERATION (*C_JITOperation_ECC)(ExecState*, JSCell*, JSCell*); |
ed1e77d3 | 135 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EGC)(ExecState*, JSGlobalObject*, JSCell*); |
81345200 A |
136 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EIcf)(ExecState*, InlineCallFrame*); |
137 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EJ)(ExecState*, EncodedJSValue); | |
ed1e77d3 A |
138 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EJsc)(ExecState*, JSScope*); |
139 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EJscC)(ExecState*, JSScope*, JSCell*); | |
140 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EJZ)(ExecState*, EncodedJSValue, int32_t); | |
141 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EJZC)(ExecState*, EncodedJSValue, int32_t, JSCell*); | |
142 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EJJC)(ExecState*, EncodedJSValue, EncodedJSValue, JSCell*); | |
143 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EJscZ)(ExecState*, JSScope*, int32_t); | |
81345200 A |
144 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EJssSt)(ExecState*, JSString*, Structure*); |
145 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EJssJss)(ExecState*, JSString*, JSString*); | |
146 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EJssJssJss)(ExecState*, JSString*, JSString*, JSString*); | |
ed1e77d3 | 147 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EL)(ExecState*, JSLexicalEnvironment*); |
81345200 A |
148 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EO)(ExecState*, JSObject*); |
149 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EOZ)(ExecState*, JSObject*, int32_t); | |
150 | typedef JSCell* JIT_OPERATION (*C_JITOperation_ESt)(ExecState*, Structure*); | |
ed1e77d3 A |
151 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EStJscSymtab)(ExecState*, Structure*, JSScope*, SymbolTable*); |
152 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EStRZJsfL)(ExecState*, Structure*, Register*, int32_t, JSFunction*, JSLexicalEnvironment*); | |
153 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EStRZJsf)(ExecState*, Structure*, Register*, int32_t, JSFunction*); | |
154 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EStZ)(ExecState*, Structure*, int32_t); | |
155 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EStZZ)(ExecState*, Structure*, int32_t, int32_t); | |
81345200 A |
156 | typedef JSCell* JIT_OPERATION (*C_JITOperation_EZ)(ExecState*, int32_t); |
157 | typedef double JIT_OPERATION (*D_JITOperation_D)(double); | |
158 | typedef double JIT_OPERATION (*D_JITOperation_DD)(double, double); | |
159 | typedef double JIT_OPERATION (*D_JITOperation_ZZ)(int32_t, int32_t); | |
160 | typedef double JIT_OPERATION (*D_JITOperation_EJ)(ExecState*, EncodedJSValue); | |
161 | typedef int64_t JIT_OPERATION(*Q_JITOperation_J)(EncodedJSValue); | |
162 | typedef int64_t JIT_OPERATION(*Q_JITOperation_D)(double); | |
163 | typedef int32_t JIT_OPERATION (*Z_JITOperation_D)(double); | |
164 | typedef int32_t JIT_OPERATION (*Z_JITOperation_E)(ExecState*); | |
ed1e77d3 A |
165 | typedef int32_t JIT_OPERATION (*Z_JITOperation_EC)(ExecState*, JSCell*); |
166 | typedef int32_t JIT_OPERATION (*Z_JITOperation_EGC)(ExecState*, JSGlobalObject*, JSCell*); | |
167 | typedef int32_t JIT_OPERATION (*Z_JITOperation_ESJss)(ExecState*, size_t, JSString*); | |
168 | typedef int32_t JIT_OPERATION (*Z_JITOperation_EJZ)(ExecState*, EncodedJSValue, int32_t); | |
169 | typedef int32_t JIT_OPERATION (*Z_JITOperation_EJZZ)(ExecState*, EncodedJSValue, int32_t, int32_t); | |
81345200 | 170 | typedef size_t JIT_OPERATION (*S_JITOperation_ECC)(ExecState*, JSCell*, JSCell*); |
ed1e77d3 | 171 | typedef size_t JIT_OPERATION (*S_JITOperation_EGC)(ExecState*, JSGlobalObject*, JSCell*); |
81345200 A |
172 | typedef size_t JIT_OPERATION (*S_JITOperation_EJ)(ExecState*, EncodedJSValue); |
173 | typedef size_t JIT_OPERATION (*S_JITOperation_EJJ)(ExecState*, EncodedJSValue, EncodedJSValue); | |
174 | typedef size_t JIT_OPERATION (*S_JITOperation_EOJss)(ExecState*, JSObject*, JSString*); | |
175 | typedef size_t JIT_OPERATION (*S_JITOperation_J)(EncodedJSValue); | |
176 | typedef SlowPathReturnType JIT_OPERATION (*Sprt_JITOperation_EZ)(ExecState*, int32_t); | |
177 | typedef void JIT_OPERATION (*V_JITOperation)(); | |
178 | typedef void JIT_OPERATION (*V_JITOperation_E)(ExecState*); | |
179 | typedef void JIT_OPERATION (*V_JITOperation_EC)(ExecState*, JSCell*); | |
180 | typedef void JIT_OPERATION (*V_JITOperation_ECb)(ExecState*, CodeBlock*); | |
181 | typedef void JIT_OPERATION (*V_JITOperation_ECC)(ExecState*, JSCell*, JSCell*); | |
182 | typedef void JIT_OPERATION (*V_JITOperation_ECIcf)(ExecState*, JSCell*, InlineCallFrame*); | |
ed1e77d3 | 183 | typedef void JIT_OPERATION (*V_JITOperation_ECIC)(ExecState*, JSCell*, Identifier*, JSCell*); |
81345200 A |
184 | typedef void JIT_OPERATION (*V_JITOperation_ECICC)(ExecState*, JSCell*, Identifier*, JSCell*, JSCell*); |
185 | typedef void JIT_OPERATION (*V_JITOperation_ECCIcf)(ExecState*, JSCell*, JSCell*, InlineCallFrame*); | |
186 | typedef void JIT_OPERATION (*V_JITOperation_ECJJ)(ExecState*, JSCell*, EncodedJSValue, EncodedJSValue); | |
187 | typedef void JIT_OPERATION (*V_JITOperation_ECPSPS)(ExecState*, JSCell*, void*, size_t, void*, size_t); | |
188 | typedef void JIT_OPERATION (*V_JITOperation_ECZ)(ExecState*, JSCell*, int32_t); | |
189 | typedef void JIT_OPERATION (*V_JITOperation_ECC)(ExecState*, JSCell*, JSCell*); | |
ed1e77d3 | 190 | typedef void JIT_OPERATION (*V_JITOperation_EZSymtabJ)(ExecState*, int32_t, SymbolTable*, EncodedJSValue); |
81345200 | 191 | typedef void JIT_OPERATION (*V_JITOperation_EJ)(ExecState*, EncodedJSValue); |
ed1e77d3 A |
192 | typedef void JIT_OPERATION (*V_JITOperation_EJCI)(ExecState*, EncodedJSValue, JSCell*, UniquedStringImpl*); |
193 | typedef void JIT_OPERATION (*V_JITOperation_EJIdJ)(ExecState*, EncodedJSValue, Identifier*, EncodedJSValue); | |
81345200 A |
194 | typedef void JIT_OPERATION (*V_JITOperation_EJIdJJ)(ExecState*, EncodedJSValue, Identifier*, EncodedJSValue, EncodedJSValue); |
195 | typedef void JIT_OPERATION (*V_JITOperation_EJJJ)(ExecState*, EncodedJSValue, EncodedJSValue, EncodedJSValue); | |
ed1e77d3 | 196 | typedef void JIT_OPERATION (*V_JITOperation_EJJJAp)(ExecState*, EncodedJSValue, EncodedJSValue, EncodedJSValue, ArrayProfile*); |
81345200 A |
197 | typedef void JIT_OPERATION (*V_JITOperation_EJPP)(ExecState*, EncodedJSValue, void*, void*); |
198 | typedef void JIT_OPERATION (*V_JITOperation_EJZJ)(ExecState*, EncodedJSValue, int32_t, EncodedJSValue); | |
199 | typedef void JIT_OPERATION (*V_JITOperation_EJZ)(ExecState*, EncodedJSValue, int32_t); | |
200 | typedef void JIT_OPERATION (*V_JITOperation_EOZD)(ExecState*, JSObject*, int32_t, double); | |
201 | typedef void JIT_OPERATION (*V_JITOperation_EOZJ)(ExecState*, JSObject*, int32_t, EncodedJSValue); | |
202 | typedef void JIT_OPERATION (*V_JITOperation_EPc)(ExecState*, Instruction*); | |
203 | typedef void JIT_OPERATION (*V_JITOperation_EPZJ)(ExecState*, void*, int32_t, EncodedJSValue); | |
ed1e77d3 A |
204 | typedef void JIT_OPERATION (*V_JITOperation_ESsiJJI)(ExecState*, StructureStubInfo*, EncodedJSValue, EncodedJSValue, UniquedStringImpl*); |
205 | typedef void JIT_OPERATION (*V_JITOperation_EWs)(ExecState*, WatchpointSet*); | |
81345200 | 206 | typedef void JIT_OPERATION (*V_JITOperation_EZ)(ExecState*, int32_t); |
ed1e77d3 A |
207 | typedef void JIT_OPERATION (*V_JITOperation_EZJ)(ExecState*, int32_t, EncodedJSValue); |
208 | typedef void JIT_OPERATION (*V_JITOperation_EZJZZZ)(ExecState*, int32_t, EncodedJSValue, int32_t, int32_t, int32_t); | |
81345200 | 209 | typedef void JIT_OPERATION (*V_JITOperation_EVm)(ExecState*, VM*); |
ed1e77d3 A |
210 | typedef void JIT_OPERATION (*V_JITOperation_J)(EncodedJSValue); |
211 | typedef void JIT_OPERATION (*V_JITOperation_Z)(int32_t); | |
81345200 A |
212 | typedef char* JIT_OPERATION (*P_JITOperation_E)(ExecState*); |
213 | typedef char* JIT_OPERATION (*P_JITOperation_EC)(ExecState*, JSCell*); | |
214 | typedef char* JIT_OPERATION (*P_JITOperation_ECli)(ExecState*, CallLinkInfo*); | |
215 | typedef char* JIT_OPERATION (*P_JITOperation_EJS)(ExecState*, EncodedJSValue, size_t); | |
216 | typedef char* JIT_OPERATION (*P_JITOperation_EO)(ExecState*, JSObject*); | |
217 | typedef char* JIT_OPERATION (*P_JITOperation_EOS)(ExecState*, JSObject*, size_t); | |
218 | typedef char* JIT_OPERATION (*P_JITOperation_EOZ)(ExecState*, JSObject*, int32_t); | |
219 | typedef char* JIT_OPERATION (*P_JITOperation_EPS)(ExecState*, void*, size_t); | |
220 | typedef char* JIT_OPERATION (*P_JITOperation_ES)(ExecState*, size_t); | |
221 | typedef char* JIT_OPERATION (*P_JITOperation_ESJss)(ExecState*, size_t, JSString*); | |
222 | typedef char* JIT_OPERATION (*P_JITOperation_ESt)(ExecState*, Structure*); | |
223 | typedef char* JIT_OPERATION (*P_JITOperation_EStJ)(ExecState*, Structure*, EncodedJSValue); | |
224 | typedef char* JIT_OPERATION (*P_JITOperation_EStPS)(ExecState*, Structure*, void*, size_t); | |
225 | typedef char* JIT_OPERATION (*P_JITOperation_EStSS)(ExecState*, Structure*, size_t, size_t); | |
226 | typedef char* JIT_OPERATION (*P_JITOperation_EStZ)(ExecState*, Structure*, int32_t); | |
227 | typedef char* JIT_OPERATION (*P_JITOperation_EZZ)(ExecState*, int32_t, int32_t); | |
ed1e77d3 | 228 | typedef StringImpl* JIT_OPERATION (*T_JITOperation_EJss)(ExecState*, JSString*); |
81345200 A |
229 | typedef JSString* JIT_OPERATION (*Jss_JITOperation_EZ)(ExecState*, int32_t); |
230 | ||
231 | // This method is used to lookup an exception hander, keyed by faultLocation, which is | |
232 | // the return location from one of the calls out to one of the helper operations above. | |
233 | ||
234 | void JIT_OPERATION lookupExceptionHandler(VM*, ExecState*) WTF_INTERNAL; | |
ed1e77d3 | 235 | void JIT_OPERATION lookupExceptionHandlerFromCallerFrame(VM*, ExecState*) WTF_INTERNAL; |
81345200 A |
236 | void JIT_OPERATION operationVMHandleException(ExecState*) WTF_INTERNAL; |
237 | ||
238 | void JIT_OPERATION operationThrowStackOverflowError(ExecState*, CodeBlock*) WTF_INTERNAL; | |
239 | int32_t JIT_OPERATION operationCallArityCheck(ExecState*) WTF_INTERNAL; | |
240 | int32_t JIT_OPERATION operationConstructArityCheck(ExecState*) WTF_INTERNAL; | |
ed1e77d3 A |
241 | EncodedJSValue JIT_OPERATION operationGetById(ExecState*, StructureStubInfo*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL; |
242 | EncodedJSValue JIT_OPERATION operationGetByIdGeneric(ExecState*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL; | |
243 | EncodedJSValue JIT_OPERATION operationGetByIdBuildList(ExecState*, StructureStubInfo*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL; | |
244 | EncodedJSValue JIT_OPERATION operationGetByIdOptimize(ExecState*, StructureStubInfo*, EncodedJSValue, UniquedStringImpl*) WTF_INTERNAL; | |
245 | EncodedJSValue JIT_OPERATION operationInOptimize(ExecState*, StructureStubInfo*, JSCell*, UniquedStringImpl*) WTF_INTERNAL; | |
246 | EncodedJSValue JIT_OPERATION operationIn(ExecState*, StructureStubInfo*, JSCell*, UniquedStringImpl*) WTF_INTERNAL; | |
247 | EncodedJSValue JIT_OPERATION operationGenericIn(ExecState*, JSCell*, EncodedJSValue) WTF_INTERNAL; | |
248 | void JIT_OPERATION operationPutByIdStrict(ExecState*, StructureStubInfo*, EncodedJSValue encodedValue, EncodedJSValue encodedBase, UniquedStringImpl*) WTF_INTERNAL; | |
249 | void JIT_OPERATION operationPutByIdNonStrict(ExecState*, StructureStubInfo*, EncodedJSValue encodedValue, EncodedJSValue encodedBase, UniquedStringImpl*) WTF_INTERNAL; | |
250 | void JIT_OPERATION operationPutByIdDirectStrict(ExecState*, StructureStubInfo*, EncodedJSValue encodedValue, EncodedJSValue encodedBase, UniquedStringImpl*) WTF_INTERNAL; | |
251 | void JIT_OPERATION operationPutByIdDirectNonStrict(ExecState*, StructureStubInfo*, EncodedJSValue encodedValue, EncodedJSValue encodedBase, UniquedStringImpl*) WTF_INTERNAL; | |
252 | void JIT_OPERATION operationPutByIdStrictOptimize(ExecState*, StructureStubInfo*, EncodedJSValue encodedValue, EncodedJSValue encodedBase, UniquedStringImpl*) WTF_INTERNAL; | |
253 | void JIT_OPERATION operationPutByIdNonStrictOptimize(ExecState*, StructureStubInfo*, EncodedJSValue encodedValue, EncodedJSValue encodedBase, UniquedStringImpl*) WTF_INTERNAL; | |
254 | void JIT_OPERATION operationPutByIdDirectStrictOptimize(ExecState*, StructureStubInfo*, EncodedJSValue encodedValue, EncodedJSValue encodedBase, UniquedStringImpl*) WTF_INTERNAL; | |
255 | void JIT_OPERATION operationPutByIdDirectNonStrictOptimize(ExecState*, StructureStubInfo*, EncodedJSValue encodedValue, EncodedJSValue encodedBase, UniquedStringImpl*) WTF_INTERNAL; | |
256 | void JIT_OPERATION operationPutByIdStrictBuildList(ExecState*, StructureStubInfo*, EncodedJSValue encodedValue, EncodedJSValue encodedBase, UniquedStringImpl*) WTF_INTERNAL; | |
257 | void JIT_OPERATION operationPutByIdNonStrictBuildList(ExecState*, StructureStubInfo*, EncodedJSValue encodedValue, EncodedJSValue encodedBase, UniquedStringImpl*) WTF_INTERNAL; | |
258 | void JIT_OPERATION operationPutByIdDirectStrictBuildList(ExecState*, StructureStubInfo*, EncodedJSValue encodedValue, EncodedJSValue encodedBase, UniquedStringImpl*) WTF_INTERNAL; | |
259 | void JIT_OPERATION operationPutByIdDirectNonStrictBuildList(ExecState*, StructureStubInfo*, EncodedJSValue encodedValue, EncodedJSValue encodedBase, UniquedStringImpl*) WTF_INTERNAL; | |
81345200 | 260 | void JIT_OPERATION operationReallocateStorageAndFinishPut(ExecState*, JSObject*, Structure*, PropertyOffset, EncodedJSValue) WTF_INTERNAL; |
ed1e77d3 A |
261 | void JIT_OPERATION operationPutByVal(ExecState*, EncodedJSValue, EncodedJSValue, EncodedJSValue, ArrayProfile*) WTF_INTERNAL; |
262 | void JIT_OPERATION operationDirectPutByVal(ExecState*, EncodedJSValue, EncodedJSValue, EncodedJSValue, ArrayProfile*) WTF_INTERNAL; | |
263 | void JIT_OPERATION operationPutByValGeneric(ExecState*, EncodedJSValue, EncodedJSValue, EncodedJSValue, ArrayProfile*) WTF_INTERNAL; | |
264 | void JIT_OPERATION operationDirectPutByValGeneric(ExecState*, EncodedJSValue, EncodedJSValue, EncodedJSValue, ArrayProfile*) WTF_INTERNAL; | |
81345200 A |
265 | EncodedJSValue JIT_OPERATION operationCallEval(ExecState*, ExecState*) WTF_INTERNAL; |
266 | char* JIT_OPERATION operationLinkCall(ExecState*, CallLinkInfo*) WTF_INTERNAL; | |
ed1e77d3 | 267 | char* JIT_OPERATION operationLinkPolymorphicCall(ExecState*, CallLinkInfo*) WTF_INTERNAL; |
81345200 A |
268 | char* JIT_OPERATION operationVirtualCall(ExecState*, CallLinkInfo*) WTF_INTERNAL; |
269 | char* JIT_OPERATION operationVirtualConstruct(ExecState*, CallLinkInfo*) WTF_INTERNAL; | |
270 | char* JIT_OPERATION operationLinkConstruct(ExecState*, CallLinkInfo*) WTF_INTERNAL; | |
271 | char* JIT_OPERATION operationLinkCallThatPreservesRegs(ExecState*, CallLinkInfo*) WTF_INTERNAL; | |
ed1e77d3 | 272 | char* JIT_OPERATION operationLinkPolymorphicCallThatPreservesRegs(ExecState*, CallLinkInfo*) WTF_INTERNAL; |
81345200 A |
273 | char* JIT_OPERATION operationVirtualCallThatPreservesRegs(ExecState*, CallLinkInfo*) WTF_INTERNAL; |
274 | char* JIT_OPERATION operationVirtualConstructThatPreservesRegs(ExecState*, CallLinkInfo*) WTF_INTERNAL; | |
275 | char* JIT_OPERATION operationLinkConstructThatPreservesRegs(ExecState*, CallLinkInfo*) WTF_INTERNAL; | |
276 | ||
277 | size_t JIT_OPERATION operationCompareLess(ExecState*, EncodedJSValue, EncodedJSValue) WTF_INTERNAL; | |
278 | size_t JIT_OPERATION operationCompareLessEq(ExecState*, EncodedJSValue, EncodedJSValue) WTF_INTERNAL; | |
279 | size_t JIT_OPERATION operationCompareGreater(ExecState*, EncodedJSValue, EncodedJSValue) WTF_INTERNAL; | |
280 | size_t JIT_OPERATION operationCompareGreaterEq(ExecState*, EncodedJSValue, EncodedJSValue) WTF_INTERNAL; | |
281 | size_t JIT_OPERATION operationConvertJSValueToBoolean(ExecState*, EncodedJSValue) WTF_INTERNAL; | |
282 | size_t JIT_OPERATION operationCompareEq(ExecState*, EncodedJSValue, EncodedJSValue) WTF_INTERNAL; | |
283 | #if USE(JSVALUE64) | |
284 | EncodedJSValue JIT_OPERATION operationCompareStringEq(ExecState*, JSCell* left, JSCell* right) WTF_INTERNAL; | |
285 | #else | |
286 | size_t JIT_OPERATION operationCompareStringEq(ExecState*, JSCell* left, JSCell* right) WTF_INTERNAL; | |
287 | #endif | |
288 | size_t JIT_OPERATION operationHasProperty(ExecState*, JSObject*, JSString*) WTF_INTERNAL; | |
289 | EncodedJSValue JIT_OPERATION operationNewArrayWithProfile(ExecState*, ArrayAllocationProfile*, const JSValue* values, int32_t size) WTF_INTERNAL; | |
290 | EncodedJSValue JIT_OPERATION operationNewArrayBufferWithProfile(ExecState*, ArrayAllocationProfile*, const JSValue* values, int32_t size) WTF_INTERNAL; | |
291 | EncodedJSValue JIT_OPERATION operationNewArrayWithSizeAndProfile(ExecState*, ArrayAllocationProfile*, EncodedJSValue size) WTF_INTERNAL; | |
ed1e77d3 A |
292 | EncodedJSValue JIT_OPERATION operationNewFunction(ExecState*, JSScope*, JSCell*) WTF_INTERNAL; |
293 | EncodedJSValue JIT_OPERATION operationNewFunctionWithInvalidatedReallocationWatchpoint(ExecState*, JSScope*, JSCell*) WTF_INTERNAL; | |
81345200 A |
294 | JSCell* JIT_OPERATION operationNewObject(ExecState*, Structure*) WTF_INTERNAL; |
295 | EncodedJSValue JIT_OPERATION operationNewRegexp(ExecState*, void*) WTF_INTERNAL; | |
296 | void JIT_OPERATION operationHandleWatchdogTimer(ExecState*) WTF_INTERNAL; | |
297 | void JIT_OPERATION operationThrowStaticError(ExecState*, EncodedJSValue, int32_t) WTF_INTERNAL; | |
298 | void JIT_OPERATION operationThrow(ExecState*, EncodedJSValue) WTF_INTERNAL; | |
299 | void JIT_OPERATION operationDebug(ExecState*, int32_t) WTF_INTERNAL; | |
300 | #if ENABLE(DFG_JIT) | |
301 | SlowPathReturnType JIT_OPERATION operationOptimize(ExecState*, int32_t) WTF_INTERNAL; | |
302 | #endif | |
303 | void JIT_OPERATION operationPutByIndex(ExecState*, EncodedJSValue, int32_t, EncodedJSValue); | |
304 | #if USE(JSVALUE64) | |
ed1e77d3 A |
305 | void JIT_OPERATION operationPutGetterById(ExecState*, EncodedJSValue, Identifier*, EncodedJSValue) WTF_INTERNAL; |
306 | void JIT_OPERATION operationPutSetterById(ExecState*, EncodedJSValue, Identifier*, EncodedJSValue) WTF_INTERNAL; | |
81345200 A |
307 | void JIT_OPERATION operationPutGetterSetter(ExecState*, EncodedJSValue, Identifier*, EncodedJSValue, EncodedJSValue) WTF_INTERNAL; |
308 | #else | |
ed1e77d3 A |
309 | void JIT_OPERATION operationPutGetterById(ExecState*, JSCell*, Identifier*, JSCell*) WTF_INTERNAL; |
310 | void JIT_OPERATION operationPutSetterById(ExecState*, JSCell*, Identifier*, JSCell*) WTF_INTERNAL; | |
81345200 A |
311 | void JIT_OPERATION operationPutGetterSetter(ExecState*, JSCell*, Identifier*, JSCell*, JSCell*) WTF_INTERNAL; |
312 | #endif | |
ed1e77d3 A |
313 | void JIT_OPERATION operationPushCatchScope(ExecState*, int32_t, SymbolTable*, EncodedJSValue) WTF_INTERNAL; |
314 | void JIT_OPERATION operationPushFunctionNameScope(ExecState*, int32_t, SymbolTable*, EncodedJSValue) WTF_INTERNAL; | |
315 | void JIT_OPERATION operationPushWithScope(ExecState*, int32_t, EncodedJSValue) WTF_INTERNAL; | |
316 | void JIT_OPERATION operationPopScope(ExecState*, int32_t) WTF_INTERNAL; | |
81345200 A |
317 | void JIT_OPERATION operationProfileDidCall(ExecState*, EncodedJSValue) WTF_INTERNAL; |
318 | void JIT_OPERATION operationProfileWillCall(ExecState*, EncodedJSValue) WTF_INTERNAL; | |
319 | EncodedJSValue JIT_OPERATION operationCheckHasInstance(ExecState*, EncodedJSValue, EncodedJSValue baseVal) WTF_INTERNAL; | |
ed1e77d3 A |
320 | JSCell* JIT_OPERATION operationCreateActivation(ExecState*, JSScope* currentScope) WTF_INTERNAL; |
321 | EncodedJSValue JIT_OPERATION operationGetByValDefault(ExecState*, EncodedJSValue encodedBase, EncodedJSValue encodedSubscript, ArrayProfile*) WTF_INTERNAL; | |
322 | EncodedJSValue JIT_OPERATION operationGetByValGeneric(ExecState*, EncodedJSValue encodedBase, EncodedJSValue encodedSubscript, ArrayProfile*) WTF_INTERNAL; | |
81345200 | 323 | EncodedJSValue JIT_OPERATION operationGetByValString(ExecState*, EncodedJSValue encodedBase, EncodedJSValue encodedSubscript) WTF_INTERNAL; |
ed1e77d3 A |
324 | EncodedJSValue JIT_OPERATION operationHasIndexedPropertyDefault(ExecState*, EncodedJSValue encodedBase, EncodedJSValue encodedSubscript, ArrayProfile*) WTF_INTERNAL; |
325 | EncodedJSValue JIT_OPERATION operationHasIndexedPropertyGeneric(ExecState*, EncodedJSValue encodedBase, EncodedJSValue encodedSubscript, ArrayProfile*) WTF_INTERNAL; | |
81345200 A |
326 | EncodedJSValue JIT_OPERATION operationDeleteById(ExecState*, EncodedJSValue base, const Identifier*) WTF_INTERNAL; |
327 | JSCell* JIT_OPERATION operationGetPNames(ExecState*, JSObject*) WTF_INTERNAL; | |
328 | EncodedJSValue JIT_OPERATION operationInstanceOf(ExecState*, EncodedJSValue, EncodedJSValue proto) WTF_INTERNAL; | |
ed1e77d3 A |
329 | int32_t JIT_OPERATION operationSizeFrameForVarargs(ExecState*, EncodedJSValue arguments, int32_t numUsedStackSlots, int32_t firstVarArgOffset) WTF_INTERNAL; |
330 | CallFrame* JIT_OPERATION operationSetupVarargsFrame(ExecState*, CallFrame*, EncodedJSValue arguments, int32_t firstVarArgOffset, int32_t length) WTF_INTERNAL; | |
81345200 A |
331 | EncodedJSValue JIT_OPERATION operationToObject(ExecState*, EncodedJSValue) WTF_INTERNAL; |
332 | ||
333 | char* JIT_OPERATION operationSwitchCharWithUnknownKeyType(ExecState*, EncodedJSValue key, size_t tableIndex) WTF_INTERNAL; | |
334 | char* JIT_OPERATION operationSwitchImmWithUnknownKeyType(ExecState*, EncodedJSValue key, size_t tableIndex) WTF_INTERNAL; | |
335 | char* JIT_OPERATION operationSwitchStringWithUnknownKeyType(ExecState*, EncodedJSValue key, size_t tableIndex) WTF_INTERNAL; | |
ed1e77d3 | 336 | EncodedJSValue JIT_OPERATION operationResolveScope(ExecState*, int32_t scope, int32_t identifierIndex) WTF_INTERNAL; |
81345200 A |
337 | EncodedJSValue JIT_OPERATION operationGetFromScope(ExecState*, Instruction* bytecodePC) WTF_INTERNAL; |
338 | void JIT_OPERATION operationPutToScope(ExecState*, Instruction* bytecodePC) WTF_INTERNAL; | |
339 | ||
340 | void JIT_OPERATION operationFlushWriteBarrierBuffer(ExecState*, JSCell*); | |
341 | void JIT_OPERATION operationWriteBarrier(ExecState*, JSCell*, JSCell*); | |
342 | void JIT_OPERATION operationUnconditionalWriteBarrier(ExecState*, JSCell*); | |
343 | void JIT_OPERATION operationOSRWriteBarrier(ExecState*, JSCell*); | |
344 | ||
345 | void JIT_OPERATION operationInitGlobalConst(ExecState*, Instruction*); | |
346 | ||
347 | void JIT_OPERATION operationExceptionFuzz(); | |
348 | ||
ed1e77d3 A |
349 | EncodedJSValue JIT_OPERATION operationHasGenericProperty(ExecState*, EncodedJSValue, JSCell*); |
350 | EncodedJSValue JIT_OPERATION operationHasIndexedProperty(ExecState*, JSCell*, int32_t); | |
351 | JSCell* JIT_OPERATION operationGetPropertyEnumerator(ExecState*, JSCell*); | |
352 | EncodedJSValue JIT_OPERATION operationNextEnumeratorPname(ExecState*, JSCell*, int32_t); | |
353 | JSCell* JIT_OPERATION operationToIndexString(ExecState*, int32_t); | |
354 | ||
355 | void JIT_OPERATION operationProcessTypeProfilerLog(ExecState*) WTF_INTERNAL; | |
356 | ||
81345200 A |
357 | } // extern "C" |
358 | ||
359 | inline P_JITOperation_ECli operationLinkFor( | |
360 | CodeSpecializationKind kind, RegisterPreservationMode registers) | |
361 | { | |
362 | switch (kind) { | |
363 | case CodeForCall: | |
364 | switch (registers) { | |
365 | case RegisterPreservationNotRequired: | |
366 | return operationLinkCall; | |
367 | case MustPreserveRegisters: | |
368 | return operationLinkCallThatPreservesRegs; | |
369 | } | |
370 | break; | |
371 | case CodeForConstruct: | |
372 | switch (registers) { | |
373 | case RegisterPreservationNotRequired: | |
374 | return operationLinkConstruct; | |
375 | case MustPreserveRegisters: | |
376 | return operationLinkConstructThatPreservesRegs; | |
377 | } | |
378 | break; | |
379 | } | |
380 | RELEASE_ASSERT_NOT_REACHED(); | |
381 | return 0; | |
382 | } | |
383 | ||
384 | inline P_JITOperation_ECli operationVirtualFor( | |
385 | CodeSpecializationKind kind, RegisterPreservationMode registers) | |
386 | { | |
387 | switch (kind) { | |
388 | case CodeForCall: | |
389 | switch (registers) { | |
390 | case RegisterPreservationNotRequired: | |
391 | return operationVirtualCall; | |
392 | case MustPreserveRegisters: | |
393 | return operationVirtualCallThatPreservesRegs; | |
394 | } | |
395 | break; | |
396 | case CodeForConstruct: | |
397 | switch (registers) { | |
398 | case RegisterPreservationNotRequired: | |
399 | return operationVirtualConstruct; | |
400 | case MustPreserveRegisters: | |
401 | return operationVirtualConstructThatPreservesRegs; | |
402 | } | |
403 | break; | |
404 | } | |
405 | RELEASE_ASSERT_NOT_REACHED(); | |
406 | return 0; | |
407 | } | |
408 | ||
ed1e77d3 | 409 | inline P_JITOperation_ECli operationLinkPolymorphicCallFor(RegisterPreservationMode registers) |
81345200 A |
410 | { |
411 | switch (registers) { | |
412 | case RegisterPreservationNotRequired: | |
ed1e77d3 | 413 | return operationLinkPolymorphicCall; |
81345200 | 414 | case MustPreserveRegisters: |
ed1e77d3 | 415 | return operationLinkPolymorphicCallThatPreservesRegs; |
81345200 A |
416 | } |
417 | RELEASE_ASSERT_NOT_REACHED(); | |
418 | return 0; | |
419 | } | |
420 | ||
421 | } // namespace JSC | |
422 | ||
423 | #endif // ENABLE(JIT) | |
424 | ||
425 | #endif // JITOperations_h | |
426 |