2 * Copyright (C) 2011 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 DFGOperations_h
27 #define DFGOperations_h
31 #include "DFGJITCompiler.h"
40 #if CALLING_CONVENTION_IS_STDCALL
41 #define DFG_OPERATION CDECL
46 // These typedefs provide typechecking when generating calls out to helper routines;
47 // this helps prevent calling a helper routine with the wrong arguments!
61 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_E
)(ExecState
*);
62 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EA
)(ExecState
*, JSArray
*);
63 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EAZ
)(ExecState
*, JSArray
*, int32_t);
64 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EC
)(ExecState
*, JSCell
*);
65 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_ECC
)(ExecState
*, JSCell
*, JSCell
*);
66 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_ECI
)(ExecState
*, JSCell
*, Identifier
*);
67 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_ECJ
)(ExecState
*, JSCell
*, EncodedJSValue
);
68 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EDA
)(ExecState
*, double, JSArray
*);
69 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EGriJsgI
)(ExecState
*, ResolveOperation
*, JSGlobalObject
*, Identifier
*);
70 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EI
)(ExecState
*, Identifier
*);
71 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EIRo
)(ExecState
*, Identifier
*, ResolveOperations
*);
72 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EIRoPtbo
)(ExecState
*, Identifier
*, ResolveOperations
*, PutToBaseOperation
*);
73 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EJ
)(ExecState
*, EncodedJSValue
);
74 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EJA
)(ExecState
*, EncodedJSValue
, JSArray
*);
75 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EJI
)(ExecState
*, EncodedJSValue
, Identifier
*);
76 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EJJ
)(ExecState
*, EncodedJSValue
, EncodedJSValue
);
77 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EJP
)(ExecState
*, EncodedJSValue
, void*);
78 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EP
)(ExecState
*, void*);
79 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EPP
)(ExecState
*, void*, void*);
80 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EPS
)(ExecState
*, void*, size_t);
81 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_ESS
)(ExecState
*, size_t, size_t);
82 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EZ
)(ExecState
*, int32_t);
83 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EZIcfZ
)(ExecState
*, int32_t, InlineCallFrame
*, int32_t);
84 typedef EncodedJSValue
DFG_OPERATION (*J_DFGOperation_EZZ
)(ExecState
*, int32_t, int32_t);
85 typedef JSCell
* DFG_OPERATION (*C_DFGOperation_E
)(ExecState
*);
86 typedef JSCell
* DFG_OPERATION (*C_DFGOperation_EZ
)(ExecState
*, int32_t);
87 typedef JSCell
* DFG_OPERATION (*C_DFGOperation_EC
)(ExecState
*, JSCell
*);
88 typedef JSCell
* DFG_OPERATION (*C_DFGOperation_ECC
)(ExecState
*, JSCell
*, JSCell
*);
89 typedef JSCell
* DFG_OPERATION (*C_DFGOperation_EIcf
)(ExecState
*, InlineCallFrame
*);
90 typedef JSCell
* DFG_OPERATION (*C_DFGOperation_EJ
)(ExecState
*, EncodedJSValue
);
91 typedef JSCell
* DFG_OPERATION (*C_DFGOperation_EJssSt
)(ExecState
*, JSString
*, Structure
*);
92 typedef JSCell
* DFG_OPERATION (*C_DFGOperation_EJssJss
)(ExecState
*, JSString
*, JSString
*);
93 typedef JSCell
* DFG_OPERATION (*C_DFGOperation_EJssJssJss
)(ExecState
*, JSString
*, JSString
*, JSString
*);
94 typedef JSCell
* DFG_OPERATION (*C_DFGOperation_EOZ
)(ExecState
*, JSObject
*, int32_t);
95 typedef JSCell
* DFG_OPERATION (*C_DFGOperation_ESt
)(ExecState
*, Structure
*);
96 typedef JSCell
* DFG_OPERATION (*C_DFGOperation_EZ
)(ExecState
*, int32_t);
97 typedef double DFG_OPERATION (*D_DFGOperation_DD
)(double, double);
98 typedef double DFG_OPERATION (*D_DFGOperation_ZZ
)(int32_t, int32_t);
99 typedef double DFG_OPERATION (*D_DFGOperation_EJ
)(ExecState
*, EncodedJSValue
);
100 typedef int32_t DFG_OPERATION (*Z_DFGOperation_D
)(double);
101 typedef size_t DFG_OPERATION (*S_DFGOperation_ECC
)(ExecState
*, JSCell
*, JSCell
*);
102 typedef size_t DFG_OPERATION (*S_DFGOperation_EJ
)(ExecState
*, EncodedJSValue
);
103 typedef size_t DFG_OPERATION (*S_DFGOperation_EJJ
)(ExecState
*, EncodedJSValue
, EncodedJSValue
);
104 typedef size_t DFG_OPERATION (*S_DFGOperation_J
)(EncodedJSValue
);
105 typedef void DFG_OPERATION (*V_DFGOperation_EOZD
)(ExecState
*, JSObject
*, int32_t, double);
106 typedef void DFG_OPERATION (*V_DFGOperation_EOZJ
)(ExecState
*, JSObject
*, int32_t, EncodedJSValue
);
107 typedef void DFG_OPERATION (*V_DFGOperation_EC
)(ExecState
*, JSCell
*);
108 typedef void DFG_OPERATION (*V_DFGOperation_ECIcf
)(ExecState
*, JSCell
*, InlineCallFrame
*);
109 typedef void DFG_OPERATION (*V_DFGOperation_ECCIcf
)(ExecState
*, JSCell
*, JSCell
*, InlineCallFrame
*);
110 typedef void DFG_OPERATION (*V_DFGOperation_ECJJ
)(ExecState
*, JSCell
*, EncodedJSValue
, EncodedJSValue
);
111 typedef void DFG_OPERATION (*V_DFGOperation_ECZ
)(ExecState
*, JSCell
*, int32_t);
112 typedef void DFG_OPERATION (*V_DFGOperation_ECC
)(ExecState
*, JSCell
*, JSCell
*);
113 typedef void DFG_OPERATION (*V_DFGOperation_EJCI
)(ExecState
*, EncodedJSValue
, JSCell
*, Identifier
*);
114 typedef void DFG_OPERATION (*V_DFGOperation_EJJJ
)(ExecState
*, EncodedJSValue
, EncodedJSValue
, EncodedJSValue
);
115 typedef void DFG_OPERATION (*V_DFGOperation_EJPP
)(ExecState
*, EncodedJSValue
, EncodedJSValue
, void*);
116 typedef void DFG_OPERATION (*V_DFGOperation_EPZJ
)(ExecState
*, void*, int32_t, EncodedJSValue
);
117 typedef void DFG_OPERATION (*V_DFGOperation_W
)(WatchpointSet
*);
118 typedef char* DFG_OPERATION (*P_DFGOperation_E
)(ExecState
*);
119 typedef char* DFG_OPERATION (*P_DFGOperation_EC
)(ExecState
*, JSCell
*);
120 typedef char* DFG_OPERATION (*P_DFGOperation_EO
)(ExecState
*, JSObject
*);
121 typedef char* DFG_OPERATION (*P_DFGOperation_EOS
)(ExecState
*, JSObject
*, size_t);
122 typedef char* DFG_OPERATION (*P_DFGOperation_EOZ
)(ExecState
*, JSObject
*, int32_t);
123 typedef char* DFG_OPERATION (*P_DFGOperation_EPS
)(ExecState
*, void*, size_t);
124 typedef char* DFG_OPERATION (*P_DFGOperation_ES
)(ExecState
*, size_t);
125 typedef char* DFG_OPERATION (*P_DFGOperation_ESt
)(ExecState
*, Structure
*);
126 typedef char* DFG_OPERATION (*P_DFGOperation_EStPS
)(ExecState
*, Structure
*, void*, size_t);
127 typedef char* DFG_OPERATION (*P_DFGOperation_EStSS
)(ExecState
*, Structure
*, size_t, size_t);
128 typedef char* DFG_OPERATION (*P_DFGOperation_EStZ
)(ExecState
*, Structure
*, int32_t);
129 typedef StringImpl
* DFG_OPERATION (*Str_DFGOperation_EJss
)(ExecState
*, JSString
*);
130 JSCell
* DFG_OPERATION
operationStringFromCharCode(ExecState
*, int32_t) WTF_INTERNAL
;
132 // These routines are provide callbacks out to C++ implementations of operations too complex to JIT.
133 JSCell
* DFG_OPERATION
operationNewObject(ExecState
*, Structure
*) WTF_INTERNAL
;
134 JSCell
* DFG_OPERATION
operationCreateThis(ExecState
*, JSObject
* constructor
, int32_t inlineCapacity
) WTF_INTERNAL
;
135 EncodedJSValue DFG_OPERATION
operationConvertThis(ExecState
*, EncodedJSValue encodedOp1
) WTF_INTERNAL
;
136 EncodedJSValue DFG_OPERATION
operationValueAdd(ExecState
*, EncodedJSValue encodedOp1
, EncodedJSValue encodedOp2
) WTF_INTERNAL
;
137 EncodedJSValue DFG_OPERATION
operationValueAddNotNumber(ExecState
*, EncodedJSValue encodedOp1
, EncodedJSValue encodedOp2
) WTF_INTERNAL
;
138 EncodedJSValue DFG_OPERATION
operationGetByVal(ExecState
*, EncodedJSValue encodedBase
, EncodedJSValue encodedProperty
) WTF_INTERNAL
;
139 EncodedJSValue DFG_OPERATION
operationGetByValCell(ExecState
*, JSCell
*, EncodedJSValue encodedProperty
) WTF_INTERNAL
;
140 EncodedJSValue DFG_OPERATION
operationGetByValArrayInt(ExecState
*, JSArray
*, int32_t) WTF_INTERNAL
;
141 EncodedJSValue DFG_OPERATION
operationGetById(ExecState
*, EncodedJSValue
, Identifier
*) WTF_INTERNAL
;
142 EncodedJSValue DFG_OPERATION
operationGetByIdBuildList(ExecState
*, EncodedJSValue
, Identifier
*) WTF_INTERNAL
;
143 EncodedJSValue DFG_OPERATION
operationGetByIdProtoBuildList(ExecState
*, EncodedJSValue
, Identifier
*) WTF_INTERNAL
;
144 EncodedJSValue DFG_OPERATION
operationGetByIdOptimize(ExecState
*, EncodedJSValue
, Identifier
*) WTF_INTERNAL
;
145 EncodedJSValue DFG_OPERATION
operationCallCustomGetter(ExecState
*, JSCell
*, PropertySlot::GetValueFunc
, Identifier
*) WTF_INTERNAL
;
146 EncodedJSValue DFG_OPERATION
operationCallGetter(ExecState
*, JSCell
*, JSCell
*) WTF_INTERNAL
;
147 void DFG_OPERATION
operationNotifyGlobalVarWrite(WatchpointSet
* watchpointSet
) WTF_INTERNAL
;
148 EncodedJSValue DFG_OPERATION
operationResolve(ExecState
*, Identifier
*, ResolveOperations
*) WTF_INTERNAL
;
149 EncodedJSValue DFG_OPERATION
operationResolveBase(ExecState
*, Identifier
*, ResolveOperations
*, PutToBaseOperation
*) WTF_INTERNAL
;
150 EncodedJSValue DFG_OPERATION
operationResolveBaseStrictPut(ExecState
*, Identifier
*, ResolveOperations
*, PutToBaseOperation
*) WTF_INTERNAL
;
151 EncodedJSValue DFG_OPERATION
operationResolveGlobal(ExecState
*, ResolveOperation
*, JSGlobalObject
*, Identifier
*) WTF_INTERNAL
;
152 EncodedJSValue DFG_OPERATION
operationToPrimitive(ExecState
*, EncodedJSValue
) WTF_INTERNAL
;
153 char* DFG_OPERATION
operationNewArray(ExecState
*, Structure
*, void*, size_t) WTF_INTERNAL
;
154 char* DFG_OPERATION
operationNewArrayBuffer(ExecState
*, Structure
*, size_t, size_t) WTF_INTERNAL
;
155 char* DFG_OPERATION
operationNewEmptyArray(ExecState
*, Structure
*) WTF_INTERNAL
;
156 char* DFG_OPERATION
operationNewArrayWithSize(ExecState
*, Structure
*, int32_t) WTF_INTERNAL
;
157 EncodedJSValue DFG_OPERATION
operationNewRegexp(ExecState
*, void*) WTF_INTERNAL
;
158 void DFG_OPERATION
operationPutByValStrict(ExecState
*, EncodedJSValue encodedBase
, EncodedJSValue encodedProperty
, EncodedJSValue encodedValue
) WTF_INTERNAL
;
159 void DFG_OPERATION
operationPutByValNonStrict(ExecState
*, EncodedJSValue encodedBase
, EncodedJSValue encodedProperty
, EncodedJSValue encodedValue
) WTF_INTERNAL
;
160 void DFG_OPERATION
operationPutByValCellStrict(ExecState
*, JSCell
*, EncodedJSValue encodedProperty
, EncodedJSValue encodedValue
) WTF_INTERNAL
;
161 void DFG_OPERATION
operationPutByValCellNonStrict(ExecState
*, JSCell
*, EncodedJSValue encodedProperty
, EncodedJSValue encodedValue
) WTF_INTERNAL
;
162 void DFG_OPERATION
operationPutByValBeyondArrayBoundsStrict(ExecState
*, JSObject
*, int32_t index
, EncodedJSValue encodedValue
) WTF_INTERNAL
;
163 void DFG_OPERATION
operationPutByValBeyondArrayBoundsNonStrict(ExecState
*, JSObject
*, int32_t index
, EncodedJSValue encodedValue
) WTF_INTERNAL
;
164 void DFG_OPERATION
operationPutDoubleByValBeyondArrayBoundsStrict(ExecState
*, JSObject
*, int32_t index
, double value
) WTF_INTERNAL
;
165 void DFG_OPERATION
operationPutDoubleByValBeyondArrayBoundsNonStrict(ExecState
*, JSObject
*, int32_t index
, double value
) WTF_INTERNAL
;
166 EncodedJSValue DFG_OPERATION
operationArrayPush(ExecState
*, EncodedJSValue encodedValue
, JSArray
*) WTF_INTERNAL
;
167 EncodedJSValue DFG_OPERATION
operationArrayPushDouble(ExecState
*, double value
, JSArray
*) WTF_INTERNAL
;
168 EncodedJSValue DFG_OPERATION
operationArrayPop(ExecState
*, JSArray
*) WTF_INTERNAL
;
169 EncodedJSValue DFG_OPERATION
operationArrayPopAndRecoverLength(ExecState
*, JSArray
*) WTF_INTERNAL
;
170 EncodedJSValue DFG_OPERATION
operationRegExpExec(ExecState
*, JSCell
*, JSCell
*) WTF_INTERNAL
;
171 void DFG_OPERATION
operationPutByIdStrict(ExecState
*, EncodedJSValue encodedValue
, JSCell
* base
, Identifier
*) WTF_INTERNAL
;
172 void DFG_OPERATION
operationPutByIdNonStrict(ExecState
*, EncodedJSValue encodedValue
, JSCell
* base
, Identifier
*) WTF_INTERNAL
;
173 void DFG_OPERATION
operationPutByIdDirectStrict(ExecState
*, EncodedJSValue encodedValue
, JSCell
* base
, Identifier
*) WTF_INTERNAL
;
174 void DFG_OPERATION
operationPutByIdDirectNonStrict(ExecState
*, EncodedJSValue encodedValue
, JSCell
* base
, Identifier
*) WTF_INTERNAL
;
175 void DFG_OPERATION
operationPutByIdStrictOptimize(ExecState
*, EncodedJSValue encodedValue
, JSCell
* base
, Identifier
*) WTF_INTERNAL
;
176 void DFG_OPERATION
operationPutByIdNonStrictOptimize(ExecState
*, EncodedJSValue encodedValue
, JSCell
* base
, Identifier
*) WTF_INTERNAL
;
177 void DFG_OPERATION
operationPutByIdDirectStrictOptimize(ExecState
*, EncodedJSValue encodedValue
, JSCell
* base
, Identifier
*) WTF_INTERNAL
;
178 void DFG_OPERATION
operationPutByIdDirectNonStrictOptimize(ExecState
*, EncodedJSValue encodedValue
, JSCell
* base
, Identifier
*) WTF_INTERNAL
;
179 void DFG_OPERATION
operationPutByIdStrictBuildList(ExecState
*, EncodedJSValue encodedValue
, JSCell
* base
, Identifier
*) WTF_INTERNAL
;
180 void DFG_OPERATION
operationPutByIdNonStrictBuildList(ExecState
*, EncodedJSValue encodedValue
, JSCell
* base
, Identifier
*) WTF_INTERNAL
;
181 void DFG_OPERATION
operationPutByIdDirectStrictBuildList(ExecState
*, EncodedJSValue encodedValue
, JSCell
* base
, Identifier
*) WTF_INTERNAL
;
182 void DFG_OPERATION
operationPutByIdDirectNonStrictBuildList(ExecState
*, EncodedJSValue encodedValue
, JSCell
* base
, Identifier
*) WTF_INTERNAL
;
183 // These comparisons return a boolean within a size_t such that the value is zero extended to fill the register.
184 size_t DFG_OPERATION
operationRegExpTest(ExecState
*, JSCell
*, JSCell
*) WTF_INTERNAL
;
185 size_t DFG_OPERATION
operationCompareLess(ExecState
*, EncodedJSValue encodedOp1
, EncodedJSValue encodedOp2
) WTF_INTERNAL
;
186 size_t DFG_OPERATION
operationCompareLessEq(ExecState
*, EncodedJSValue encodedOp1
, EncodedJSValue encodedOp2
) WTF_INTERNAL
;
187 size_t DFG_OPERATION
operationCompareGreater(ExecState
*, EncodedJSValue encodedOp1
, EncodedJSValue encodedOp2
) WTF_INTERNAL
;
188 size_t DFG_OPERATION
operationCompareGreaterEq(ExecState
*, EncodedJSValue encodedOp1
, EncodedJSValue encodedOp2
) WTF_INTERNAL
;
189 size_t DFG_OPERATION
operationCompareEq(ExecState
*, EncodedJSValue encodedOp1
, EncodedJSValue encodedOp2
) WTF_INTERNAL
;
191 EncodedJSValue DFG_OPERATION
operationCompareStringEq(ExecState
*, JSCell
* left
, JSCell
* right
) WTF_INTERNAL
;
193 size_t DFG_OPERATION
operationCompareStringEq(ExecState
*, JSCell
* left
, JSCell
* right
) WTF_INTERNAL
;
195 size_t DFG_OPERATION
operationCompareStrictEqCell(ExecState
*, EncodedJSValue encodedOp1
, EncodedJSValue encodedOp2
) WTF_INTERNAL
;
196 size_t DFG_OPERATION
operationCompareStrictEq(ExecState
*, EncodedJSValue encodedOp1
, EncodedJSValue encodedOp2
) WTF_INTERNAL
;
197 char* DFG_OPERATION
operationVirtualCall(ExecState
*) WTF_INTERNAL
;
198 char* DFG_OPERATION
operationLinkCall(ExecState
*) WTF_INTERNAL
;
199 char* DFG_OPERATION
operationLinkClosureCall(ExecState
*) WTF_INTERNAL
;
200 char* DFG_OPERATION
operationVirtualConstruct(ExecState
*) WTF_INTERNAL
;
201 char* DFG_OPERATION
operationLinkConstruct(ExecState
*) WTF_INTERNAL
;
202 JSCell
* DFG_OPERATION
operationCreateActivation(ExecState
*) WTF_INTERNAL
;
203 JSCell
* DFG_OPERATION
operationCreateArguments(ExecState
*) WTF_INTERNAL
;
204 JSCell
* DFG_OPERATION
operationCreateInlinedArguments(ExecState
*, InlineCallFrame
*) WTF_INTERNAL
;
205 void DFG_OPERATION
operationTearOffArguments(ExecState
*, JSCell
*, JSCell
*) WTF_INTERNAL
;
206 void DFG_OPERATION
operationTearOffInlinedArguments(ExecState
*, JSCell
*, JSCell
*, InlineCallFrame
*) WTF_INTERNAL
;
207 EncodedJSValue DFG_OPERATION
operationGetArgumentsLength(ExecState
*, int32_t) WTF_INTERNAL
;
208 EncodedJSValue DFG_OPERATION
operationGetInlinedArgumentByVal(ExecState
*, int32_t, InlineCallFrame
*, int32_t) WTF_INTERNAL
;
209 EncodedJSValue DFG_OPERATION
operationGetArgumentByVal(ExecState
*, int32_t, int32_t) WTF_INTERNAL
;
210 JSCell
* DFG_OPERATION
operationNewFunctionNoCheck(ExecState
*, JSCell
*) WTF_INTERNAL
;
211 EncodedJSValue DFG_OPERATION
operationNewFunction(ExecState
*, JSCell
*) WTF_INTERNAL
;
212 JSCell
* DFG_OPERATION
operationNewFunctionExpression(ExecState
*, JSCell
*) WTF_INTERNAL
;
213 double DFG_OPERATION
operationFModOnInts(int32_t, int32_t) WTF_INTERNAL
;
214 size_t DFG_OPERATION
operationIsObject(ExecState
*, EncodedJSValue
) WTF_INTERNAL
;
215 size_t DFG_OPERATION
operationIsFunction(EncodedJSValue
) WTF_INTERNAL
;
216 JSCell
* DFG_OPERATION
operationTypeOf(ExecState
*, JSCell
*) WTF_INTERNAL
;
217 void DFG_OPERATION
operationReallocateStorageAndFinishPut(ExecState
*, JSObject
*, Structure
*, PropertyOffset
, EncodedJSValue
) WTF_INTERNAL
;
218 char* DFG_OPERATION
operationAllocatePropertyStorageWithInitialCapacity(ExecState
*) WTF_INTERNAL
;
219 char* DFG_OPERATION
operationAllocatePropertyStorage(ExecState
*, size_t newSize
) WTF_INTERNAL
;
220 char* DFG_OPERATION
operationReallocateButterflyToHavePropertyStorageWithInitialCapacity(ExecState
*, JSObject
*) WTF_INTERNAL
;
221 char* DFG_OPERATION
operationReallocateButterflyToGrowPropertyStorage(ExecState
*, JSObject
*, size_t newSize
) WTF_INTERNAL
;
222 char* DFG_OPERATION
operationEnsureInt32(ExecState
*, JSCell
*);
223 char* DFG_OPERATION
operationEnsureDouble(ExecState
*, JSCell
*);
224 char* DFG_OPERATION
operationEnsureContiguous(ExecState
*, JSCell
*);
225 char* DFG_OPERATION
operationRageEnsureContiguous(ExecState
*, JSCell
*);
226 char* DFG_OPERATION
operationEnsureArrayStorage(ExecState
*, JSCell
*);
227 StringImpl
* DFG_OPERATION
operationResolveRope(ExecState
*, JSString
*);
228 JSCell
* DFG_OPERATION
operationNewStringObject(ExecState
*, JSString
*, Structure
*);
229 JSCell
* DFG_OPERATION
operationToStringOnCell(ExecState
*, JSCell
*);
230 JSCell
* DFG_OPERATION
operationToString(ExecState
*, EncodedJSValue
);
231 JSCell
* DFG_OPERATION
operationMakeRope2(ExecState
*, JSString
*, JSString
*);
232 JSCell
* DFG_OPERATION
operationMakeRope3(ExecState
*, JSString
*, JSString
*, JSString
*);
234 // This method is used to lookup an exception hander, keyed by faultLocation, which is
235 // the return location from one of the calls out to one of the helper operations above.
237 // According to C++ rules, a type used for the return signature of function with C linkage (i.e.
238 // 'extern "C"') needs to be POD; hence putting any constructors into it could cause either compiler
239 // warnings, or worse, a change in the ABI used to return these types.
250 inline DFGHandler
createDFGHandler(ExecState
* exec
, void* handler
)
253 result
.u
.s
.exec
= exec
;
254 result
.u
.s
.handler
= handler
;
259 typedef DFGHandler DFGHandlerEncoded
;
260 inline DFGHandlerEncoded
dfgHandlerEncoded(ExecState
* exec
, void* handler
)
262 return createDFGHandler(exec
, handler
);
265 typedef uint64_t DFGHandlerEncoded
;
266 inline DFGHandlerEncoded
dfgHandlerEncoded(ExecState
* exec
, void* handler
)
268 COMPILE_ASSERT(sizeof(DFGHandler::Union
) == sizeof(uint64_t), DFGHandler_Union_is_64bit
);
269 return createDFGHandler(exec
, handler
).u
.encoded
;
272 DFGHandlerEncoded DFG_OPERATION
lookupExceptionHandler(ExecState
*, uint32_t) WTF_INTERNAL
;
273 DFGHandlerEncoded DFG_OPERATION
lookupExceptionHandlerInStub(ExecState
*, StructureStubInfo
*) WTF_INTERNAL
;
275 // These operations implement the implicitly called ToInt32 and ToBoolean conversions from ES5.
276 // This conversion returns an int32_t within a size_t such that the value is zero extended to fill the register.
277 size_t DFG_OPERATION
dfgConvertJSValueToInt32(ExecState
*, EncodedJSValue
) WTF_INTERNAL
;
278 size_t DFG_OPERATION
dfgConvertJSValueToBoolean(ExecState
*, EncodedJSValue
) WTF_INTERNAL
;
280 void DFG_OPERATION
debugOperationPrintSpeculationFailure(ExecState
*, void*, void*) WTF_INTERNAL
;
282 void DFG_OPERATION
triggerReoptimizationNow(CodeBlock
*) WTF_INTERNAL
;
285 } } // namespace JSC::DFG