2 * Copyright (C) 2013-2015 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
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.
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.
26 #ifndef JITOperations_h
27 #define JITOperations_h
31 #include "CallFrame.h"
32 #include "CommonSlowPaths.h"
33 #include "JITExceptions.h"
35 #include "JSCJSValue.h"
36 #include "MacroAssembler.h"
38 #include "SpillRegistersMode.h"
39 #include "StructureStubInfo.h"
44 class ArrayAllocationProfile
;
46 #if CALLING_CONVENTION_IS_STDCALL
47 #define JIT_OPERATION CDECL
54 // These typedefs provide typechecking when generating calls out to helper routines;
55 // this helps prevent calling a helper routine with the wrong arguments!
59 Aap: ArrayAllocationProfile*
70 Idc: const Identifier*
76 L: JSLexicalEnvironment*
79 Pc: Instruction* i.e. bytecode PC
83 Sprt: SlowPathReturnType
84 Ssi: StructureStubInfo*
94 typedef CallFrame
* JIT_OPERATION (*F_JITOperation_EFJZZ
)(ExecState
*, CallFrame
*, EncodedJSValue
, int32_t, int32_t);
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
*);
102 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_ECI
)(ExecState
*, JSCell
*, UniquedStringImpl
*);
103 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_ECJ
)(ExecState
*, JSCell
*, EncodedJSValue
);
104 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_ECZ
)(ExecState
*, JSCell
*, int32_t);
105 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_EDA
)(ExecState
*, double, JSArray
*);
106 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_EE
)(ExecState
*, ExecState
*);
107 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_EI
)(ExecState
*, UniquedStringImpl
*);
108 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_EJ
)(ExecState
*, EncodedJSValue
);
109 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_EJZ
)(ExecState
*, EncodedJSValue
, int32_t);
110 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_EJC
)(ExecState
*, EncodedJSValue
, JSCell
*);
111 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_EJA
)(ExecState
*, EncodedJSValue
, JSArray
*);
112 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_EJI
)(ExecState
*, EncodedJSValue
, UniquedStringImpl
*);
113 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_EJIdc
)(ExecState
*, EncodedJSValue
, const Identifier
*);
114 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_EJJ
)(ExecState
*, EncodedJSValue
, EncodedJSValue
);
115 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_EJJAp
)(ExecState
*, EncodedJSValue
, EncodedJSValue
, ArrayProfile
*);
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
*);
122 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_EJscC
)(ExecState
*, JSScope
*, JSCell
*);
123 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_ESS
)(ExecState
*, size_t, size_t);
124 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_ESsiCI
)(ExecState
*, StructureStubInfo
*, JSCell
*, UniquedStringImpl
*);
125 typedef EncodedJSValue
JIT_OPERATION (*J_JITOperation_ESsiJI
)(ExecState
*, StructureStubInfo
*, EncodedJSValue
, UniquedStringImpl
*);
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
*);
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
*);
134 typedef JSCell
* JIT_OPERATION (*C_JITOperation_ECC
)(ExecState
*, JSCell
*, JSCell
*);
135 typedef JSCell
* JIT_OPERATION (*C_JITOperation_EGC
)(ExecState
*, JSGlobalObject
*, JSCell
*);
136 typedef JSCell
* JIT_OPERATION (*C_JITOperation_EIcf
)(ExecState
*, InlineCallFrame
*);
137 typedef JSCell
* JIT_OPERATION (*C_JITOperation_EJ
)(ExecState
*, EncodedJSValue
);
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);
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
*);
147 typedef JSCell
* JIT_OPERATION (*C_JITOperation_EL
)(ExecState
*, JSLexicalEnvironment
*);
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
*);
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);
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
*);
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);
170 typedef size_t JIT_OPERATION (*S_JITOperation_ECC
)(ExecState
*, JSCell
*, JSCell
*);
171 typedef size_t JIT_OPERATION (*S_JITOperation_EGC
)(ExecState
*, JSGlobalObject
*, JSCell
*);
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
*);
183 typedef void JIT_OPERATION (*V_JITOperation_ECIC
)(ExecState
*, JSCell
*, Identifier
*, JSCell
*);
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
*);
190 typedef void JIT_OPERATION (*V_JITOperation_EZSymtabJ
)(ExecState
*, int32_t, SymbolTable
*, EncodedJSValue
);
191 typedef void JIT_OPERATION (*V_JITOperation_EJ
)(ExecState
*, EncodedJSValue
);
192 typedef void JIT_OPERATION (*V_JITOperation_EJCI
)(ExecState
*, EncodedJSValue
, JSCell
*, UniquedStringImpl
*);
193 typedef void JIT_OPERATION (*V_JITOperation_EJIdJ
)(ExecState
*, EncodedJSValue
, Identifier
*, EncodedJSValue
);
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
);
196 typedef void JIT_OPERATION (*V_JITOperation_EJJJAp
)(ExecState
*, EncodedJSValue
, EncodedJSValue
, EncodedJSValue
, ArrayProfile
*);
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
);
204 typedef void JIT_OPERATION (*V_JITOperation_ESsiJJI
)(ExecState
*, StructureStubInfo
*, EncodedJSValue
, EncodedJSValue
, UniquedStringImpl
*);
205 typedef void JIT_OPERATION (*V_JITOperation_EWs
)(ExecState
*, WatchpointSet
*);
206 typedef void JIT_OPERATION (*V_JITOperation_EZ
)(ExecState
*, int32_t);
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);
209 typedef void JIT_OPERATION (*V_JITOperation_EVm
)(ExecState
*, VM
*);
210 typedef void JIT_OPERATION (*V_JITOperation_J
)(EncodedJSValue
);
211 typedef void JIT_OPERATION (*V_JITOperation_Z
)(int32_t);
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);
228 typedef StringImpl
* JIT_OPERATION (*T_JITOperation_EJss
)(ExecState
*, JSString
*);
229 typedef JSString
* JIT_OPERATION (*Jss_JITOperation_EZ
)(ExecState
*, int32_t);
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.
234 void JIT_OPERATION
lookupExceptionHandler(VM
*, ExecState
*) WTF_INTERNAL
;
235 void JIT_OPERATION
lookupExceptionHandlerFromCallerFrame(VM
*, ExecState
*) WTF_INTERNAL
;
236 void JIT_OPERATION
operationVMHandleException(ExecState
*) WTF_INTERNAL
;
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
;
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
;
260 void JIT_OPERATION
operationReallocateStorageAndFinishPut(ExecState
*, JSObject
*, Structure
*, PropertyOffset
, EncodedJSValue
) WTF_INTERNAL
;
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
;
265 EncodedJSValue JIT_OPERATION
operationCallEval(ExecState
*, ExecState
*) WTF_INTERNAL
;
266 char* JIT_OPERATION
operationLinkCall(ExecState
*, CallLinkInfo
*) WTF_INTERNAL
;
267 char* JIT_OPERATION
operationLinkPolymorphicCall(ExecState
*, CallLinkInfo
*) WTF_INTERNAL
;
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
;
272 char* JIT_OPERATION
operationLinkPolymorphicCallThatPreservesRegs(ExecState
*, CallLinkInfo
*) WTF_INTERNAL
;
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
;
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
;
284 EncodedJSValue JIT_OPERATION
operationCompareStringEq(ExecState
*, JSCell
* left
, JSCell
* right
) WTF_INTERNAL
;
286 size_t JIT_OPERATION
operationCompareStringEq(ExecState
*, JSCell
* left
, JSCell
* right
) WTF_INTERNAL
;
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
;
292 EncodedJSValue JIT_OPERATION
operationNewFunction(ExecState
*, JSScope
*, JSCell
*) WTF_INTERNAL
;
293 EncodedJSValue JIT_OPERATION
operationNewFunctionWithInvalidatedReallocationWatchpoint(ExecState
*, JSScope
*, JSCell
*) WTF_INTERNAL
;
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
;
301 SlowPathReturnType JIT_OPERATION
operationOptimize(ExecState
*, int32_t) WTF_INTERNAL
;
303 void JIT_OPERATION
operationPutByIndex(ExecState
*, EncodedJSValue
, int32_t, EncodedJSValue
);
305 void JIT_OPERATION
operationPutGetterById(ExecState
*, EncodedJSValue
, Identifier
*, EncodedJSValue
) WTF_INTERNAL
;
306 void JIT_OPERATION
operationPutSetterById(ExecState
*, EncodedJSValue
, Identifier
*, EncodedJSValue
) WTF_INTERNAL
;
307 void JIT_OPERATION
operationPutGetterSetter(ExecState
*, EncodedJSValue
, Identifier
*, EncodedJSValue
, EncodedJSValue
) WTF_INTERNAL
;
309 void JIT_OPERATION
operationPutGetterById(ExecState
*, JSCell
*, Identifier
*, JSCell
*) WTF_INTERNAL
;
310 void JIT_OPERATION
operationPutSetterById(ExecState
*, JSCell
*, Identifier
*, JSCell
*) WTF_INTERNAL
;
311 void JIT_OPERATION
operationPutGetterSetter(ExecState
*, JSCell
*, Identifier
*, JSCell
*, JSCell
*) WTF_INTERNAL
;
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
;
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
;
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
;
323 EncodedJSValue JIT_OPERATION
operationGetByValString(ExecState
*, EncodedJSValue encodedBase
, EncodedJSValue encodedSubscript
) WTF_INTERNAL
;
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
;
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
;
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
;
331 EncodedJSValue JIT_OPERATION
operationToObject(ExecState
*, EncodedJSValue
) WTF_INTERNAL
;
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
;
336 EncodedJSValue JIT_OPERATION
operationResolveScope(ExecState
*, int32_t scope
, int32_t identifierIndex
) WTF_INTERNAL
;
337 EncodedJSValue JIT_OPERATION
operationGetFromScope(ExecState
*, Instruction
* bytecodePC
) WTF_INTERNAL
;
338 void JIT_OPERATION
operationPutToScope(ExecState
*, Instruction
* bytecodePC
) WTF_INTERNAL
;
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
*);
345 void JIT_OPERATION
operationInitGlobalConst(ExecState
*, Instruction
*);
347 void JIT_OPERATION
operationExceptionFuzz();
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);
355 void JIT_OPERATION
operationProcessTypeProfilerLog(ExecState
*) WTF_INTERNAL
;
359 inline P_JITOperation_ECli
operationLinkFor(
360 CodeSpecializationKind kind
, RegisterPreservationMode registers
)
365 case RegisterPreservationNotRequired
:
366 return operationLinkCall
;
367 case MustPreserveRegisters
:
368 return operationLinkCallThatPreservesRegs
;
371 case CodeForConstruct
:
373 case RegisterPreservationNotRequired
:
374 return operationLinkConstruct
;
375 case MustPreserveRegisters
:
376 return operationLinkConstructThatPreservesRegs
;
380 RELEASE_ASSERT_NOT_REACHED();
384 inline P_JITOperation_ECli
operationVirtualFor(
385 CodeSpecializationKind kind
, RegisterPreservationMode registers
)
390 case RegisterPreservationNotRequired
:
391 return operationVirtualCall
;
392 case MustPreserveRegisters
:
393 return operationVirtualCallThatPreservesRegs
;
396 case CodeForConstruct
:
398 case RegisterPreservationNotRequired
:
399 return operationVirtualConstruct
;
400 case MustPreserveRegisters
:
401 return operationVirtualConstructThatPreservesRegs
;
405 RELEASE_ASSERT_NOT_REACHED();
409 inline P_JITOperation_ECli
operationLinkPolymorphicCallFor(RegisterPreservationMode registers
)
412 case RegisterPreservationNotRequired
:
413 return operationLinkPolymorphicCall
;
414 case MustPreserveRegisters
:
415 return operationLinkPolymorphicCallThatPreservesRegs
;
417 RELEASE_ASSERT_NOT_REACHED();
423 #endif // ENABLE(JIT)
425 #endif // JITOperations_h