Add option to dump JIT memory
[WebKit-https.git] / Source / JavaScriptCore / ChangeLog
1 2019-04-19  Tadeu Zagallo  <tzagallo@apple.com>
2
3         Add option to dump JIT memory
4         https://bugs.webkit.org/show_bug.cgi?id=197062
5         <rdar://problem/49744332>
6
7         Reviewed by Saam Barati.
8
9         Dump all writes into JIT memory to the specified file. The format is:
10         - 64-bit destination address for the write
11         - 64-bit size of the content written
12         - Copy of the data that was written to JIT memory
13
14         * assembler/LinkBuffer.cpp:
15         (JSC::LinkBuffer::copyCompactAndLinkCode):
16         * jit/ExecutableAllocator.cpp:
17         (JSC::dumpJITMemory):
18         * jit/ExecutableAllocator.h:
19         (JSC::performJITMemcpy):
20         * runtime/Options.h:
21
22 2019-04-19  Keith Rollin  <krollin@apple.com>
23
24         Add postprocess-header-rule scripts
25         https://bugs.webkit.org/show_bug.cgi?id=197072
26         <rdar://problem/50027299>
27
28         Reviewed by Brent Fulgham.
29
30         Several projects have post-processing build phases where exported
31         headers are tweaked after they've been copied. This post-processing is
32         performed via scripts called postprocess-headers.sh. For reasons
33         related to XCBuild, we are now transitioning to a build process where
34         the post-processing is performed at the same time as the
35         exporting/copying. To support this process, add similar scripts named
36         postprocess-header-rule, which are geared towards processing a single
37         file at a time rather than all exported files at once. Also add a
38         build rule that makes use of these scripts. These scripts and build
39         rules are not used at the moment; they will come into use in an
40         imminent patch.
41
42         Note that I've named these postprocess-header-rule rather than
43         postprocess-header-rule.sh. Scripts in Tools/Scripts do not have
44         suffixes indicating how the tool is implemented. Scripts in
45         per-project Scripts folders appear to be mixed regarding the use of
46         suffixes. I'm opting here to follow the Tools/Scripts convention, with
47         the expectation that over time we completely standardize on that.
48
49         * JavaScriptCore.xcodeproj/project.pbxproj:
50         * Scripts/postprocess-header-rule: Added.
51
52 2019-04-18  Saam barati  <sbarati@apple.com>
53
54         Remove useConcurrentBarriers option
55         https://bugs.webkit.org/show_bug.cgi?id=197066
56
57         Reviewed by Michael Saboff.
58
59         This isn't a helpful option as it will lead us to crash when using the
60         concurrent GC.
61
62         * dfg/DFGStoreBarrierClusteringPhase.cpp:
63         * dfg/DFGStoreBarrierInsertionPhase.cpp:
64         * jit/AssemblyHelpers.h:
65         (JSC::AssemblyHelpers::barrierStoreLoadFence):
66         * runtime/Options.h:
67
68 2019-04-17  Saam Barati  <sbarati@apple.com>
69
70         Remove deprecated JSScript SPI
71         https://bugs.webkit.org/show_bug.cgi?id=194909
72         <rdar://problem/48283499>
73
74         Reviewed by Keith Miller.
75
76         * API/JSAPIGlobalObject.mm:
77         (JSC::JSAPIGlobalObject::moduleLoaderFetch):
78         * API/JSScript.h:
79         * API/JSScript.mm:
80         (+[JSScript scriptWithSource:inVirtualMachine:]): Deleted.
81         (fillBufferWithContentsOfFile): Deleted.
82         (+[JSScript scriptFromASCIIFile:inVirtualMachine:withCodeSigning:andBytecodeCache:]): Deleted.
83         (+[JSScript scriptFromUTF8File:inVirtualMachine:withCodeSigning:andBytecodeCache:]): Deleted.
84         (-[JSScript setSourceURL:]): Deleted.
85         * API/JSScriptInternal.h:
86         * API/tests/testapi.mm:
87         (testFetch):
88         (testFetchWithTwoCycle):
89         (testFetchWithThreeCycle):
90         (testLoaderResolvesAbsoluteScriptURL):
91         (testImportModuleTwice):
92         (-[JSContextFileLoaderDelegate context:fetchModuleForIdentifier:withResolveHandler:andRejectHandler:]):
93
94 2019-04-17  Keith Rollin  <krollin@apple.com>
95
96         Remove JSCBuiltins.cpp from Copy Headers phase
97         https://bugs.webkit.org/show_bug.cgi?id=196981
98         <rdar://problem/49952133>
99
100         Reviewed by Alex Christensen.
101
102         JSCBuiltins.cpp is not a header and so doesn't need to be in the Copy
103         Headers phase. Checking its history, it seems to have been added
104         accidentally at the same time that JSCBuiltins.h was added.
105
106         * JavaScriptCore.xcodeproj/project.pbxproj:
107
108 2019-04-16  Stephan Szabo  <stephan.szabo@sony.com>
109
110         [PlayStation] Update port for system library changes
111         https://bugs.webkit.org/show_bug.cgi?id=196978
112
113         Reviewed by Ross Kirsling.
114
115         * shell/playstation/Initializer.cpp:
116         Add reference to new posix compatibility library.
117
118 2019-04-16  Robin Morisset  <rmorisset@apple.com>
119
120         [WTF] holdLock should be marked WARN_UNUSED_RETURN
121         https://bugs.webkit.org/show_bug.cgi?id=196922
122
123         Reviewed by Keith Miller.
124
125         There was one case where holdLock was used and the result ignored.
126         From a comment that was deleted in https://bugs.webkit.org/attachment.cgi?id=328438&action=prettypatch, I believe that it is on purpose.
127         So I brought back a variant of the comment, and made the ignoring of the return explicit.
128
129         * heap/BlockDirectory.cpp:
130         (JSC::BlockDirectory::isPagedOut):
131
132 2019-04-16  Caitlin Potter  <caitp@igalia.com>
133
134         [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames()
135         https://bugs.webkit.org/show_bug.cgi?id=176810
136
137         Reviewed by Saam Barati.
138
139         This adds conditional logic following the invariant checks, to perform
140         filtering in common uses of getOwnPropertyNames.
141
142         While this would ideally only be done in JSPropertyNameEnumerator, adding
143         the filtering to ProxyObject::performGetOwnPropertyNames maintains the
144         invariant that the EnumerationMode is properly followed.
145
146         This was originally rolled out in r244020, as DontEnum filtering code
147         in ObjectConstructor.cpp's ownPropertyKeys() had not been removed. It's
148         now redundant due to being handled in ProxyObject::getOwnPropertyNames().
149
150         * runtime/PropertyNameArray.h:
151         (JSC::PropertyNameArray::reset):
152         * runtime/ProxyObject.cpp:
153         (JSC::ProxyObject::performGetOwnPropertyNames):
154
155 2019-04-15  Saam barati  <sbarati@apple.com>
156
157         Modify how we do SetArgument when we inline varargs calls
158         https://bugs.webkit.org/show_bug.cgi?id=196712
159         <rdar://problem/49605012>
160
161         Reviewed by Michael Saboff.
162
163         When we inline varargs calls, we guarantee that the number of arguments that
164         go on the stack are somewhere between the "mandatoryMinimum" and the "limit - 1".
165         However, we can't statically guarantee that the arguments between these two
166         ranges was filled out by Load/ForwardVarargs. This is because in the general
167         case we don't know the argument count statically.
168         
169         However, we used to always emit SetArgumentDefinitely up to "limit - 1" for
170         all arguments, even when some arguments aren't guaranteed to be in a valid
171         state. Emitting these SetArgumentDefinitely were helpful because they let us
172         handle variable liveness and OSR exit metadata. However, when we converted
173         to SSA, we ended up emitting a GetStack for each such SetArgumentDefinitely.
174         
175         This is wrong, as we can't guarantee such SetArgumentDefinitely nodes are
176         actually looking at a range of the stack that are guaranteed to be initialized.
177         This patch introduces a new form of SetArgument node: SetArgumentMaybe. In terms
178         of OSR exit metadata and variable liveness tracking, it behaves like SetArgumentDefinitely.
179         
180         However, it differs in a couple key ways:
181         1. In ThreadedCPS, GetLocal(@SetArgumentMaybe) is invalid IR, as this implies
182         you might be loading uninitialized stack. (This same rule applies when you do
183         the full data flow reachability analysis over CPS Phis.) If someone logically
184         wanted to emit code like this, the correct node to emit would be GetArgument,
185         not GetLocal. For similar reasons, PhantomLocal(@SetArgumentMaybe) is also
186         invalid IR.
187         2. To track liveness, Flush(@SetArgumentMaybe) is valid, and is the main user
188         of SetArgumentMaybe.
189         3. In SSA conversion, we don't lower SetArgumentMaybe to GetStack, as there
190         should be no data flow user of SetArgumentMaybe.
191         
192         SetArgumentDefinitely guarantees that the stack slot is initialized.
193         SetArgumentMaybe makes no such guarantee.
194
195         * dfg/DFGAbstractInterpreterInlines.h:
196         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
197         * dfg/DFGByteCodeParser.cpp:
198         (JSC::DFG::ByteCodeParser::handleVarargsInlining):
199         * dfg/DFGCPSRethreadingPhase.cpp:
200         (JSC::DFG::CPSRethreadingPhase::freeUnnecessaryNodes):
201         (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor):
202         (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
203         (JSC::DFG::CPSRethreadingPhase::canonicalizeLocalsInBlock):
204         (JSC::DFG::CPSRethreadingPhase::propagatePhis):
205         (JSC::DFG::CPSRethreadingPhase::computeIsFlushed):
206         * dfg/DFGClobberize.h:
207         (JSC::DFG::clobberize):
208         * dfg/DFGCommon.h:
209         * dfg/DFGDoesGC.cpp:
210         (JSC::DFG::doesGC):
211         * dfg/DFGFixupPhase.cpp:
212         (JSC::DFG::FixupPhase::fixupNode):
213         * dfg/DFGInPlaceAbstractState.cpp:
214         (JSC::DFG::InPlaceAbstractState::endBasicBlock):
215         * dfg/DFGLiveCatchVariablePreservationPhase.cpp:
216         (JSC::DFG::LiveCatchVariablePreservationPhase::handleBlockForTryCatch):
217         * dfg/DFGMaximalFlushInsertionPhase.cpp:
218         (JSC::DFG::MaximalFlushInsertionPhase::treatRegularBlock):
219         (JSC::DFG::MaximalFlushInsertionPhase::treatRootBlock):
220         * dfg/DFGMayExit.cpp:
221         * dfg/DFGNode.cpp:
222         (JSC::DFG::Node::hasVariableAccessData):
223         * dfg/DFGNodeType.h:
224         * dfg/DFGPhantomInsertionPhase.cpp:
225         * dfg/DFGPredictionPropagationPhase.cpp:
226         * dfg/DFGSSAConversionPhase.cpp:
227         (JSC::DFG::SSAConversionPhase::run):
228         * dfg/DFGSafeToExecute.h:
229         (JSC::DFG::safeToExecute):
230         * dfg/DFGSpeculativeJIT32_64.cpp:
231         (JSC::DFG::SpeculativeJIT::compile):
232         * dfg/DFGSpeculativeJIT64.cpp:
233         (JSC::DFG::SpeculativeJIT::compile):
234         * dfg/DFGValidate.cpp:
235         * ftl/FTLCapabilities.cpp:
236         (JSC::FTL::canCompile):
237
238 2019-04-15  Commit Queue  <commit-queue@webkit.org>
239
240         Unreviewed, rolling out r243672.
241         https://bugs.webkit.org/show_bug.cgi?id=196952
242
243         [JSValue release] should be thread-safe (Requested by
244         yusukesuzuki on #webkit).
245
246         Reverted changeset:
247
248         "[JSC] JSWrapperMap should not use Objective-C Weak map
249         (NSMapTable with NSPointerFunctionsWeakMemory) for
250         m_cachedObjCWrappers"
251         https://bugs.webkit.org/show_bug.cgi?id=196392
252         https://trac.webkit.org/changeset/243672
253
254 2019-04-15  Saam barati  <sbarati@apple.com>
255
256         SafeToExecute for GetByOffset/GetGetterByOffset/PutByOffset is using the wrong child for the base
257         https://bugs.webkit.org/show_bug.cgi?id=196945
258         <rdar://problem/49802750>
259
260         Reviewed by Filip Pizlo.
261
262         * dfg/DFGSafeToExecute.h:
263         (JSC::DFG::safeToExecute):
264
265 2019-04-15  Robin Morisset  <rmorisset@apple.com>
266
267         DFG should be able to constant fold Object.create() with a constant prototype operand
268         https://bugs.webkit.org/show_bug.cgi?id=196886
269
270         Reviewed by Yusuke Suzuki.
271
272
273         It is a fairly simple and limited patch, as it only works when the DFG can prove the exact object used as prototype.
274         But when it applies it can be a significant win:
275                                                         Baseline                   Optim                                       
276         object-create-constant-prototype              3.6082+-0.0979     ^      1.6947+-0.0756        ^ definitely 2.1292x faster
277         object-create-null                           11.4492+-0.2510     ?     11.5030+-0.2402        ?
278         object-create-unknown-object-prototype       15.6067+-0.1851     ?     15.7500+-0.2322        ?
279         object-create-untyped-prototype               8.8873+-0.1240     ?      8.9806+-0.1202        ? might be 1.0105x slower
280         <geometric>                                   8.6967+-0.1208     ^      7.2408+-0.1367        ^ definitely 1.2011x faster
281
282         The only subtlety is that we need to to access the StructureCache concurrently from the compiler thread (see https://bugs.webkit.org/show_bug.cgi?id=186199)
283         I solved this with a simple lock, taken when the compiler thread tries to read it, and when the main thread tries to modify it.
284         I expect it to be extremely low contention, but will watch the bots just in case.
285         The lock is taken neither when the main thread is only reading the cache (it has no-one to race with), nor when the GC purges it of dead entries (it does not free anything while a compiler thread is in the middle of a phase).
286
287         * dfg/DFGAbstractInterpreterInlines.h:
288         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
289         * dfg/DFGConstantFoldingPhase.cpp:
290         (JSC::DFG::ConstantFoldingPhase::foldConstants):
291         * runtime/StructureCache.cpp:
292         (JSC::StructureCache::createEmptyStructure):
293         (JSC::StructureCache::tryEmptyObjectStructureForPrototypeFromCompilerThread):
294         * runtime/StructureCache.h:
295
296 2019-04-15  Devin Rousso  <drousso@apple.com>
297
298         Web Inspector: fake value descriptors for promises add a catch handler, preventing "rejectionhandled" events from being fired
299         https://bugs.webkit.org/show_bug.cgi?id=196484
300         <rdar://problem/49114725>
301
302         Reviewed by Joseph Pecoraro.
303
304         Only add a catch handler when the promise is reachable via a native getter and is known to
305         have rejected. A non-rejected promise doesn't need a catch handler, and any promise that
306         isn't reachable via a getter won't actually be reached, as `InjectedScript` doesn't call any
307         functions, instead only getting the function object itself.
308
309         * inspector/InjectedScriptSource.js:
310         (InjectedScript.prototype._propertyDescriptors.createFakeValueDescriptor):
311
312         * inspector/JSInjectedScriptHost.h:
313         * inspector/JSInjectedScriptHost.cpp:
314         (Inspector::JSInjectedScriptHost::isPromiseRejectedWithNativeGetterTypeError): Added.
315         * inspector/JSInjectedScriptHostPrototype.cpp:
316         (Inspector::JSInjectedScriptHostPrototype::finishCreation):
317         (Inspector::jsInjectedScriptHostPrototypeFunctionIsPromiseRejectedWithNativeGetterTypeError): Added.
318
319         * runtime/ErrorInstance.h:
320         (JSC::ErrorInstance::setNativeGetterTypeError): Added.
321         (JSC::ErrorInstance::isNativeGetterTypeError const): Added.
322
323         * runtime/Error.h:
324         (JSC::throwVMGetterTypeError): Added.
325         * runtime/Error.cpp:
326         (JSC::createGetterTypeError): Added.
327         (JSC::throwGetterTypeError): Added.
328         (JSC::throwDOMAttributeGetterTypeError):
329
330 2019-04-15  Robin Morisset  <rmorisset@apple.com>
331
332         B3::Value should have different kinds of adjacency lists
333         https://bugs.webkit.org/show_bug.cgi?id=196091
334
335         Reviewed by Filip Pizlo.
336
337         The key idea of this optimization is to replace the Vector<Value*, 3> m_children in B3::Value (40 bytes on 64-bits platform) by one of the following:
338         - Nothing (0 bytes)
339         - 1 Value* (8 bytes)
340         - 2 Value* (16 bytes)
341         - 3 Value* (24 bytes)
342         - A Vector<Value*, 3>
343         after the end of the Value object, depending on the kind of the Value.
344         So for example, when allocating an Add, we would allocate an extra 16 bytes into which to store 2 Values.
345         This would halve the memory consumption of Const64/Const32/Nop/Identity and a bunch more kinds of values, and reduce by a more moderate amount the memory consumption of the rest of non-varargs values (e.g. Add would go from 72 to 48 bytes).
346
347         A few implementation points:
348         - Even if there is no children, we must remember to allocate at least enough space for replaceWithIdentity to work later. It needs sizeof(Value) (for the object itself) + sizeof(Value*) (for the pointer to its child)
349         - We must make sure to destroy the vector whenever we destroy a Value which is VarArgs
350         - We must remember how many elements there are in the case where we did not allocate a Vector. We cannot do it purely by relying on the kind, both for speed reasons and because Return can have either 0 or 1 argument in B3
351           Thankfully, we have an extra byte of padding to use in the middle of B3::Value
352         - In order to support clone(), we must have a separate version of allocate, which extracts the opcode from the to-be-cloned object instead of from the call to the constructor
353         - Speaking of which, we need a special templated function opcodeFromConstructor, because some of the constructors of subclasses of Value don't take an explicit Opcode as argument, typically because they match a single one.
354         - To maximize performance, we provide specialized versions of child/lastChild/numChildren/children in the subclasses of Value, skipping checks when the actual type of the Value is already known.
355           This is done through the B3_SPECIALIZE_VALUE_FOR_... defined at the bottom of B3Value.h
356         - In the constructors of Value, we convert all extra children arguments to Value* eagerly. It is not required for correctness (they will be converted when put into a Vector<Value*> or a Value* in the end), but it helps limit an explosion in the number of template instantiations.
357         - I moved DeepValueDump::dump from the .h to the .cpp, as there is no good reason to inline it, and recompiling JSC is already slow enough
358
359         * JavaScriptCore.xcodeproj/project.pbxproj:
360         * b3/B3ArgumentRegValue.cpp:
361         (JSC::B3::ArgumentRegValue::cloneImpl const): Deleted.
362         * b3/B3ArgumentRegValue.h:
363         * b3/B3AtomicValue.cpp:
364         (JSC::B3::AtomicValue::AtomicValue):
365         (JSC::B3::AtomicValue::cloneImpl const): Deleted.
366         * b3/B3AtomicValue.h:
367         * b3/B3BasicBlock.h:
368         * b3/B3BasicBlockInlines.h:
369         (JSC::B3::BasicBlock::appendNewNonTerminal): Deleted.
370         * b3/B3CCallValue.cpp:
371         (JSC::B3::CCallValue::appendArgs):
372         (JSC::B3::CCallValue::cloneImpl const): Deleted.
373         * b3/B3CCallValue.h:
374         * b3/B3CheckValue.cpp:
375         (JSC::B3::CheckValue::cloneImpl const): Deleted.
376         * b3/B3CheckValue.h:
377         * b3/B3Const32Value.cpp:
378         (JSC::B3::Const32Value::cloneImpl const): Deleted.
379         * b3/B3Const32Value.h:
380         * b3/B3Const64Value.cpp:
381         (JSC::B3::Const64Value::cloneImpl const): Deleted.
382         * b3/B3Const64Value.h:
383         * b3/B3ConstDoubleValue.cpp:
384         (JSC::B3::ConstDoubleValue::cloneImpl const): Deleted.
385         * b3/B3ConstDoubleValue.h:
386         * b3/B3ConstFloatValue.cpp:
387         (JSC::B3::ConstFloatValue::cloneImpl const): Deleted.
388         * b3/B3ConstFloatValue.h:
389         * b3/B3ConstPtrValue.h:
390         (JSC::B3::ConstPtrValue::opcodeFromConstructor):
391         * b3/B3FenceValue.cpp:
392         (JSC::B3::FenceValue::FenceValue):
393         (JSC::B3::FenceValue::cloneImpl const): Deleted.
394         * b3/B3FenceValue.h:
395         * b3/B3MemoryValue.cpp:
396         (JSC::B3::MemoryValue::MemoryValue):
397         (JSC::B3::MemoryValue::cloneImpl const): Deleted.
398         * b3/B3MemoryValue.h:
399         * b3/B3MoveConstants.cpp:
400         * b3/B3PatchpointValue.cpp:
401         (JSC::B3::PatchpointValue::cloneImpl const): Deleted.
402         * b3/B3PatchpointValue.h:
403         (JSC::B3::PatchpointValue::opcodeFromConstructor):
404         * b3/B3Procedure.cpp:
405         * b3/B3Procedure.h:
406         * b3/B3ProcedureInlines.h:
407         (JSC::B3::Procedure::add):
408         * b3/B3SlotBaseValue.cpp:
409         (JSC::B3::SlotBaseValue::cloneImpl const): Deleted.
410         * b3/B3SlotBaseValue.h:
411         * b3/B3StackmapSpecial.cpp:
412         (JSC::B3::StackmapSpecial::forEachArgImpl):
413         (JSC::B3::StackmapSpecial::isValidImpl):
414         * b3/B3StackmapValue.cpp:
415         (JSC::B3::StackmapValue::append):
416         (JSC::B3::StackmapValue::StackmapValue):
417         * b3/B3StackmapValue.h:
418         * b3/B3SwitchValue.cpp:
419         (JSC::B3::SwitchValue::SwitchValue):
420         (JSC::B3::SwitchValue::cloneImpl const): Deleted.
421         * b3/B3SwitchValue.h:
422         (JSC::B3::SwitchValue::opcodeFromConstructor):
423         * b3/B3UpsilonValue.cpp:
424         (JSC::B3::UpsilonValue::cloneImpl const): Deleted.
425         * b3/B3UpsilonValue.h:
426         * b3/B3Value.cpp:
427         (JSC::B3::DeepValueDump::dump const):
428         (JSC::B3::Value::~Value):
429         (JSC::B3::Value::replaceWithIdentity):
430         (JSC::B3::Value::replaceWithNopIgnoringType):
431         (JSC::B3::Value::replaceWithPhi):
432         (JSC::B3::Value::replaceWithJump):
433         (JSC::B3::Value::replaceWithOops):
434         (JSC::B3::Value::replaceWith):
435         (JSC::B3::Value::invertedCompare const):
436         (JSC::B3::Value::returnsBool const):
437         (JSC::B3::Value::cloneImpl const): Deleted.
438         * b3/B3Value.h:
439         (JSC::B3::DeepValueDump::dump const): Deleted.
440         * b3/B3ValueInlines.h:
441         (JSC::B3::Value::adjacencyListOffset const):
442         (JSC::B3::Value::cloneImpl const):
443         * b3/B3VariableValue.cpp:
444         (JSC::B3::VariableValue::VariableValue):
445         (JSC::B3::VariableValue::cloneImpl const): Deleted.
446         * b3/B3VariableValue.h:
447         * b3/B3WasmAddressValue.cpp:
448         (JSC::B3::WasmAddressValue::WasmAddressValue):
449         (JSC::B3::WasmAddressValue::cloneImpl const): Deleted.
450         * b3/B3WasmAddressValue.h:
451         * b3/B3WasmBoundsCheckValue.cpp:
452         (JSC::B3::WasmBoundsCheckValue::WasmBoundsCheckValue):
453         (JSC::B3::WasmBoundsCheckValue::cloneImpl const): Deleted.
454         * b3/B3WasmBoundsCheckValue.h:
455         (JSC::B3::WasmBoundsCheckValue::accepts):
456         (JSC::B3::WasmBoundsCheckValue::opcodeFromConstructor):
457         * b3/testb3.cpp:
458         (JSC::B3::testCallFunctionWithHellaArguments):
459         (JSC::B3::testCallFunctionWithHellaArguments2):
460         (JSC::B3::testCallFunctionWithHellaArguments3):
461         (JSC::B3::testCallFunctionWithHellaDoubleArguments):
462         (JSC::B3::testCallFunctionWithHellaFloatArguments):
463         * ftl/FTLOutput.h:
464         (JSC::FTL::Output::call):
465
466 2019-04-15  Tadeu Zagallo  <tzagallo@apple.com>
467
468         Bytecode cache should not encode the SourceProvider for UnlinkedFunctionExecutable's classSource
469         https://bugs.webkit.org/show_bug.cgi?id=196878
470
471         Reviewed by Saam Barati.
472
473         Every time we encode an (Unlinked)SourceCode, we encode its SourceProvider,
474         including the full source if it's a StringSourceProvider. This wasn't an issue,
475         since the SourceCode contains a RefPtr to the SourceProvider, and the Encoder
476         would avoid encoding the provider multiple times. With the addition of the
477         incremental cache, each UnlinkedFunctionCodeBlock is encoded in isolation, which
478         means we can no longer deduplicate it and the full program text was being encoded
479         multiple times in the cache.
480         As a work around, this patch adds a custom cached type for encoding the SourceCode
481         without its provider, and later injects the SourceProvider through the Decoder.
482
483         * parser/SourceCode.h:
484         * parser/UnlinkedSourceCode.h:
485         (JSC::UnlinkedSourceCode::provider const):
486         * runtime/CachedTypes.cpp:
487         (JSC::Decoder::Decoder):
488         (JSC::Decoder::create):
489         (JSC::Decoder::provider const):
490         (JSC::CachedSourceCodeWithoutProvider::encode):
491         (JSC::CachedSourceCodeWithoutProvider::decode const):
492         (JSC::decodeCodeBlockImpl):
493         * runtime/CachedTypes.h:
494
495 2019-04-15  Robin Morisset  <rmorisset@apple.com>
496
497         MarkedSpace.cpp is not in the Xcode workspace
498         https://bugs.webkit.org/show_bug.cgi?id=196928
499
500         Reviewed by Saam Barati.
501
502         * JavaScriptCore.xcodeproj/project.pbxproj:
503
504 2019-04-15  Tadeu Zagallo  <tzagallo@apple.com>
505
506         Incremental bytecode cache should not append function updates when loaded from memory
507         https://bugs.webkit.org/show_bug.cgi?id=196865
508
509         Reviewed by Filip Pizlo.
510
511         Function updates hold the assumption that a function can only be executed/cached
512         after its containing code block has already been cached. This assumptions does
513         not hold if the UnlinkedCodeBlock is loaded from memory by the CodeCache, since
514         we might have two independent SourceProviders executing different paths of the
515         code and causing the same UnlinkedCodeBlock to be modified in memory.
516         Use a RefPtr instead of Ref for m_cachedBytecode in ShellSourceProvider to distinguish
517         between a new, empty cache and a cache that was not loaded and therefore cannot be updated.
518
519         * jsc.cpp:
520         (ShellSourceProvider::ShellSourceProvider):
521
522 2019-04-15  Saam barati  <sbarati@apple.com>
523
524         mergeOSREntryValue is wrong when the incoming value does not match up with the flush format
525         https://bugs.webkit.org/show_bug.cgi?id=196918
526
527         Reviewed by Yusuke Suzuki.
528
529         r244238 lead to some debug failures because we were calling checkConsistency()
530         before doing fixTypeForRepresentation when merging in must handle values in
531         CFA. This patch fixes that.
532         
533         However, as I was reading over mergeOSREntryValue, I realized it was wrong. It
534         was possible it could merge in a value/type outside of the variable's flushed type.
535         Once the flush format types are locked in, we can't introduce a type out of
536         that range. This probably never lead to any crashes as our profiling injection
537         and speculation decision code is solid. However, what we were doing is clearly
538         wrong, and something a fuzzer could have found if we fuzzed the must handle
539         values inside prediction injection. We should do that fuzzing:
540         https://bugs.webkit.org/show_bug.cgi?id=196924
541
542         * dfg/DFGAbstractValue.cpp:
543         (JSC::DFG::AbstractValue::mergeOSREntryValue):
544         * dfg/DFGAbstractValue.h:
545         * dfg/DFGCFAPhase.cpp:
546         (JSC::DFG::CFAPhase::injectOSR):
547
548 2019-04-15  Robin Morisset  <rmorisset@apple.com>
549
550         Several structures and enums in the Yarr interpreter can be shrunk
551         https://bugs.webkit.org/show_bug.cgi?id=196923
552
553         Reviewed by Saam Barati.
554
555         YarrOp: 88 -> 80
556         RegularExpression: 40 -> 32
557         ByteTerm: 56 -> 48
558         PatternTerm: 56 -> 48
559
560         * yarr/RegularExpression.cpp:
561         * yarr/YarrInterpreter.h:
562         * yarr/YarrJIT.cpp:
563         (JSC::Yarr::YarrGenerator::YarrOp::YarrOp):
564         * yarr/YarrParser.h:
565         * yarr/YarrPattern.h:
566
567 2019-04-15  Devin Rousso  <drousso@apple.com>
568
569         Web Inspector: REGRESSION(r244172): crash when trying to add extra domain while inspecting JSContext
570         https://bugs.webkit.org/show_bug.cgi?id=196925
571         <rdar://problem/49873994>
572
573         Reviewed by Joseph Pecoraro.
574
575         Move the logic for creating the `InspectorAgent` and `InspectorDebuggerAgent` into separate
576         functions so that callers can be guaranteed to have a valid instance of the agent.
577
578         * inspector/JSGlobalObjectInspectorController.h:
579         * inspector/JSGlobalObjectInspectorController.cpp:
580         (Inspector::JSGlobalObjectInspectorController::connectFrontend):
581         (Inspector::JSGlobalObjectInspectorController::frontendInitialized):
582         (Inspector::JSGlobalObjectInspectorController::appendExtraAgent):
583         (Inspector::JSGlobalObjectInspectorController::ensureInspectorAgent): Added.
584         (Inspector::JSGlobalObjectInspectorController::ensureDebuggerAgent): Added.
585         (Inspector::JSGlobalObjectInspectorController::createLazyAgents):
586
587 2019-04-14  Don Olmstead  <don.olmstead@sony.com>
588
589         [CMake] JavaScriptCore derived sources should only be referenced inside JavaScriptCore
590         https://bugs.webkit.org/show_bug.cgi?id=196742
591
592         Reviewed by Konstantin Tokarev.
593
594         Migrate to using JavaScriptCore_DERIVED_SOURCES_DIR instead of DERIVED_SOURCES_JAVASCRIPTCORE_DIR
595         to support moving the JavaScriptCore derived sources outside of a shared directory.
596
597         Also use JavaScriptCore_DERIVED_SOURCES_DIR instead of DERIVED_SOUCES_DIR.
598
599         * CMakeLists.txt:
600
601 2019-04-13  Tadeu Zagallo  <tzagallo@apple.com>
602
603         CodeCache should check that the UnlinkedCodeBlock was successfully created before caching it
604         https://bugs.webkit.org/show_bug.cgi?id=196880
605
606         Reviewed by Yusuke Suzuki.
607
608         CodeCache should not tell the SourceProvider to cache the bytecode if it failed
609         to create the UnlinkedCodeBlock.
610
611         * runtime/CodeCache.cpp:
612         (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
613
614 2019-04-12  Saam barati  <sbarati@apple.com>
615
616         r244079 logically broke shouldSpeculateInt52
617         https://bugs.webkit.org/show_bug.cgi?id=196884
618
619         Reviewed by Yusuke Suzuki.
620
621         In r244079, I changed shouldSpeculateInt52 to only return true
622         when the prediction is isAnyInt52Speculation(). However, it was
623         wrong to not to include SpecInt32 in this for two reasons:
624
625         1. We diligently write code that first checks if we should speculate Int32.
626         For example:
627         if (shouldSpeculateInt32()) ... 
628         else if (shouldSpeculateInt52()) ...
629
630         It would be wrong not to fall back to Int52 if we're dealing with the union of
631         Int32 and Int52.
632
633         It would be a performance mistake to not include Int32 here because
634         data flow can easily tell us that we have variables that are the union
635         of Int32 and Int52 values. It's better to speculate Int52 than Double
636         in that situation.
637
638         2. We also write code where we ask if the inputs can be Int52, e.g, if
639         we know via profiling that an Add overflows, we may not emit an Int32 add.
640         However, we only emit such an add if both inputs can be Int52, and Int32
641         can trivially become Int52.
642
643        This patch recovers the 0.5-1% regression r244079 caused on JetStream 2.
644
645         * bytecode/SpeculatedType.h:
646         (JSC::isInt32SpeculationForArithmetic):
647         (JSC::isInt32OrBooleanSpeculationForArithmetic):
648         (JSC::isInt32OrInt52Speculation):
649         * dfg/DFGFixupPhase.cpp:
650         (JSC::DFG::FixupPhase::observeUseKindOnNode):
651         * dfg/DFGNode.h:
652         (JSC::DFG::Node::shouldSpeculateInt52):
653         * dfg/DFGPredictionPropagationPhase.cpp:
654         * dfg/DFGVariableAccessData.cpp:
655         (JSC::DFG::VariableAccessData::couldRepresentInt52Impl):
656
657 2019-04-12  Saam barati  <sbarati@apple.com>
658
659         Unreviewed. Build fix after r244233.
660
661         * assembler/CPU.cpp:
662
663 2019-04-12  Saam barati  <sbarati@apple.com>
664
665         Sometimes we need to user fewer CPUs in our threading calculations
666         https://bugs.webkit.org/show_bug.cgi?id=196794
667         <rdar://problem/49389497>
668
669         Reviewed by Yusuke Suzuki.
670
671         * JavaScriptCore.xcodeproj/project.pbxproj:
672         * Sources.txt:
673         * assembler/CPU.cpp: Added.
674         (JSC::isKernTCSMAvailable):
675         (JSC::enableKernTCSM):
676         (JSC::kernTCSMAwareNumberOfProcessorCores):
677         * assembler/CPU.h:
678         (JSC::isKernTCSMAvailable):
679         (JSC::enableKernTCSM):
680         (JSC::kernTCSMAwareNumberOfProcessorCores):
681         * heap/MachineStackMarker.h:
682         (JSC::MachineThreads::addCurrentThread):
683         * runtime/JSLock.cpp:
684         (JSC::JSLock::didAcquireLock):
685         * runtime/Options.cpp:
686         (JSC::computeNumberOfWorkerThreads):
687         (JSC::computePriorityDeltaOfWorkerThreads):
688         * wasm/WasmWorklist.cpp:
689         (JSC::Wasm::Worklist::Worklist):
690
691 2019-04-12  Robin Morisset  <rmorisset@apple.com>
692
693         Use padding at end of ArrayBuffer
694         https://bugs.webkit.org/show_bug.cgi?id=196823
695
696         Reviewed by Filip Pizlo.
697
698         * runtime/ArrayBuffer.h:
699
700 2019-04-11  Yusuke Suzuki  <ysuzuki@apple.com>
701
702         [JSC] op_has_indexed_property should not assume subscript part is Uint32
703         https://bugs.webkit.org/show_bug.cgi?id=196850
704
705         Reviewed by Saam Barati.
706
707         op_has_indexed_property assumed that subscript part is always Uint32. However, this is just a load from non-constant RegisterID,
708         DFG can store it in double format and can perform OSR exit. op_has_indexed_property should not assume that.
709         In this patch, instead, we check it with isAnyInt and get uint32_t from AnyInt.
710
711         * jit/JITOpcodes.cpp:
712         (JSC::JIT::emit_op_has_indexed_property):
713         * jit/JITOpcodes32_64.cpp:
714         (JSC::JIT::emit_op_has_indexed_property):
715         * jit/JITOperations.cpp:
716         * runtime/CommonSlowPaths.cpp:
717         (JSC::SLOW_PATH_DECL):
718
719 2019-04-11  Saam barati  <sbarati@apple.com>
720
721         Remove invalid assertion in operationInstanceOfCustom
722         https://bugs.webkit.org/show_bug.cgi?id=196842
723         <rdar://problem/49725493>
724
725         Reviewed by Michael Saboff.
726
727         In the generated JIT code, we go to the slow path when the incoming function
728         isn't the Node's CodeOrigin's functionProtoHasInstanceSymbolFunction. However,
729         in the JIT operation, we were asserting against exec->lexicalGlobalObject()'s
730         functionProtoHasInstanceSymbolFunction. That assertion might be wrong when
731         inlining across global objects as exec->lexicalGlobalObject() uses the machine
732         frame for procuring the global object. There is no harm when this assertion fails
733         as we just execute the slow path. This patch removes the assertion. (However, this
734         does shed light on the deficiency in our exec->lexicalGlobalObject() function with
735         respect to inlining. However, this isn't new -- we've known about this for a while.)
736
737         * jit/JITOperations.cpp:
738
739 2019-04-11  Michael Saboff  <msaboff@apple.com>
740
741         Improve the Inline Cache Stats code
742         https://bugs.webkit.org/show_bug.cgi?id=196836
743
744         Reviewed by Saam Barati.
745
746         Needed to handle the case where the Identifier could be null, for example with InstanceOfAddAccessCase
747         and InstanceOfReplaceWithJump.
748
749         Added the ability to log the location of a GetBy and PutBy property as either on self or up the
750         protocol chain.
751
752         * jit/ICStats.cpp:
753         (JSC::ICEvent::operator< const):
754         (JSC::ICEvent::dump const):
755         * jit/ICStats.h:
756         (JSC::ICEvent::ICEvent):
757         (JSC::ICEvent::hash const):
758         * jit/JITOperations.cpp:
759         * jit/Repatch.cpp:
760         (JSC::tryCacheGetByID):
761         (JSC::tryCachePutByID):
762         (JSC::tryCacheInByID):
763
764 2019-04-11  Devin Rousso  <drousso@apple.com>
765
766         Web Inspector: Timelines: can't reliably stop/start a recording
767         https://bugs.webkit.org/show_bug.cgi?id=196778
768         <rdar://problem/47606798>
769
770         Reviewed by Timothy Hatcher.
771
772         * inspector/protocol/ScriptProfiler.json:
773         * inspector/protocol/Timeline.json:
774         It is possible to determine when programmatic capturing starts/stops in the frontend based
775         on the state when the backend causes the state to change, such as if the state is "inactive"
776         when the frontend is told that the backend has started capturing.
777
778         * inspector/protocol/CPUProfiler.json:
779         * inspector/protocol/Memory.json:
780         Send an end timestamp to match other instruments.
781
782         * inspector/JSGlobalObjectConsoleClient.cpp:
783         (Inspector::JSGlobalObjectConsoleClient::startConsoleProfile):
784         (Inspector::JSGlobalObjectConsoleClient::stopConsoleProfile):
785
786         * inspector/agents/InspectorScriptProfilerAgent.h:
787         * inspector/agents/InspectorScriptProfilerAgent.cpp:
788         (Inspector::InspectorScriptProfilerAgent::trackingComplete):
789         (Inspector::InspectorScriptProfilerAgent::programmaticCaptureStarted): Deleted.
790         (Inspector::InspectorScriptProfilerAgent::programmaticCaptureStopped): Deleted.
791
792 2019-04-11  Saam barati  <sbarati@apple.com>
793
794         Rename SetArgument to SetArgumentDefinitely
795         https://bugs.webkit.org/show_bug.cgi?id=196828
796
797         Reviewed by Yusuke Suzuki.
798
799         This is in preparation for https://bugs.webkit.org/show_bug.cgi?id=196712
800         where we will introduce a node named SetArgumentMaybe. Doing this refactoring
801         first will make reviewing that other patch easier.
802
803         * dfg/DFGAbstractInterpreterInlines.h:
804         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
805         * dfg/DFGByteCodeParser.cpp:
806         (JSC::DFG::ByteCodeParser::handleVarargsInlining):
807         (JSC::DFG::ByteCodeParser::parseBlock):
808         * dfg/DFGCPSRethreadingPhase.cpp:
809         (JSC::DFG::CPSRethreadingPhase::freeUnnecessaryNodes):
810         (JSC::DFG::CPSRethreadingPhase::canonicalizeGetLocalFor):
811         (JSC::DFG::CPSRethreadingPhase::canonicalizeFlushOrPhantomLocalFor):
812         (JSC::DFG::CPSRethreadingPhase::canonicalizeLocalsInBlock):
813         (JSC::DFG::CPSRethreadingPhase::specialCaseArguments):
814         (JSC::DFG::CPSRethreadingPhase::propagatePhis):
815         (JSC::DFG::CPSRethreadingPhase::computeIsFlushed):
816         * dfg/DFGClobberize.h:
817         (JSC::DFG::clobberize):
818         * dfg/DFGCommon.h:
819         * dfg/DFGDoesGC.cpp:
820         (JSC::DFG::doesGC):
821         * dfg/DFGFixupPhase.cpp:
822         (JSC::DFG::FixupPhase::fixupNode):
823         * dfg/DFGGraph.cpp:
824         (JSC::DFG::Graph::methodOfGettingAValueProfileFor):
825         * dfg/DFGGraph.h:
826         * dfg/DFGInPlaceAbstractState.cpp:
827         (JSC::DFG::InPlaceAbstractState::initialize):
828         (JSC::DFG::InPlaceAbstractState::endBasicBlock):
829         * dfg/DFGLiveCatchVariablePreservationPhase.cpp:
830         (JSC::DFG::LiveCatchVariablePreservationPhase::handleBlockForTryCatch):
831         * dfg/DFGMaximalFlushInsertionPhase.cpp:
832         (JSC::DFG::MaximalFlushInsertionPhase::treatRegularBlock):
833         (JSC::DFG::MaximalFlushInsertionPhase::treatRootBlock):
834         * dfg/DFGMayExit.cpp:
835         * dfg/DFGNode.cpp:
836         (JSC::DFG::Node::hasVariableAccessData):
837         * dfg/DFGNode.h:
838         (JSC::DFG::Node::convertPhantomToPhantomLocal):
839         * dfg/DFGNodeType.h:
840         * dfg/DFGOSREntrypointCreationPhase.cpp:
841         (JSC::DFG::OSREntrypointCreationPhase::run):
842         * dfg/DFGPhantomInsertionPhase.cpp:
843         * dfg/DFGPredictionPropagationPhase.cpp:
844         * dfg/DFGSSAConversionPhase.cpp:
845         (JSC::DFG::SSAConversionPhase::run):
846         * dfg/DFGSafeToExecute.h:
847         (JSC::DFG::safeToExecute):
848         * dfg/DFGSpeculativeJIT.cpp:
849         (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
850         * dfg/DFGSpeculativeJIT32_64.cpp:
851         (JSC::DFG::SpeculativeJIT::compile):
852         * dfg/DFGSpeculativeJIT64.cpp:
853         (JSC::DFG::SpeculativeJIT::compile):
854         * dfg/DFGTypeCheckHoistingPhase.cpp:
855         (JSC::DFG::TypeCheckHoistingPhase::run):
856         * dfg/DFGValidate.cpp:
857         * ftl/FTLCapabilities.cpp:
858         (JSC::FTL::canCompile):
859
860 2019-04-11  Truitt Savell  <tsavell@apple.com>
861
862         Unreviewed, rolling out r244158.
863
864         Casued 8 inspector/timeline/ test failures.
865
866         Reverted changeset:
867
868         "Web Inspector: Timelines: can't reliably stop/start a
869         recording"
870         https://bugs.webkit.org/show_bug.cgi?id=196778
871         https://trac.webkit.org/changeset/244158
872
873 2019-04-10  Saam Barati  <sbarati@apple.com>
874
875         AbstractValue::validateOSREntryValue is wrong for Int52 constants
876         https://bugs.webkit.org/show_bug.cgi?id=196801
877         <rdar://problem/49771122>
878
879         Reviewed by Yusuke Suzuki.
880
881         validateOSREntryValue should not care about the format of the incoming
882         value for Int52s. This patch normalizes the format of m_value and
883         the incoming value when comparing them.
884
885         * dfg/DFGAbstractValue.h:
886         (JSC::DFG::AbstractValue::validateOSREntryValue const):
887
888 2019-04-10  Saam Barati  <sbarati@apple.com>
889
890         ArithSub over Int52 has shouldCheckOverflow as always true
891         https://bugs.webkit.org/show_bug.cgi?id=196796
892
893         Reviewed by Yusuke Suzuki.
894
895         AI was checking for ArithSub over Int52 if !shouldCheckOverflow. However,
896         shouldCheckOverflow is always true, so !shouldCheckOverflow is always
897         false. We shouldn't check something we assert against.
898
899         * dfg/DFGAbstractInterpreterInlines.h:
900         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
901
902 2019-04-10  Basuke Suzuki  <basuke.suzuki@sony.com>
903
904         [PlayStation] Specify byte order clearly on Remote Inspector Protocol
905         https://bugs.webkit.org/show_bug.cgi?id=196790
906
907         Reviewed by Ross Kirsling.
908
909         Original implementation lacks byte order specification. Network byte order is the
910         good candidate if there's no strong reason to choose other.
911         Currently no client exists for PlayStation remote inspector protocol, so we can
912         change the byte order without care.
913
914         * inspector/remote/playstation/RemoteInspectorMessageParserPlayStation.cpp:
915         (Inspector::MessageParser::createMessage):
916         (Inspector::MessageParser::parse):
917
918 2019-04-10  Devin Rousso  <drousso@apple.com>
919
920        Web Inspector: Inspector: lazily create the agent
921        https://bugs.webkit.org/show_bug.cgi?id=195971
922        <rdar://problem/49039645>
923
924        Reviewed by Joseph Pecoraro.
925
926        * inspector/JSGlobalObjectInspectorController.cpp:
927        (Inspector::JSGlobalObjectInspectorController::JSGlobalObjectInspectorController):
928        (Inspector::JSGlobalObjectInspectorController::connectFrontend):
929        (Inspector::JSGlobalObjectInspectorController::appendExtraAgent):
930        (Inspector::JSGlobalObjectInspectorController::createLazyAgents):
931
932        * inspector/agents/InspectorAgent.h:
933        * inspector/agents/InspectorAgent.cpp:
934
935 2019-04-10  Saam Barati  <sbarati@apple.com>
936
937         Work around an arm64_32 LLVM miscompile bug
938         https://bugs.webkit.org/show_bug.cgi?id=196788
939
940         Reviewed by Yusuke Suzuki.
941
942         * runtime/CachedTypes.cpp:
943
944 2019-04-10  Devin Rousso  <drousso@apple.com>
945
946         Web Inspector: Timelines: can't reliably stop/start a recording
947         https://bugs.webkit.org/show_bug.cgi?id=196778
948         <rdar://problem/47606798>
949
950         Reviewed by Timothy Hatcher.
951
952         * inspector/protocol/ScriptProfiler.json:
953         * inspector/protocol/Timeline.json:
954         It is possible to determine when programmatic capturing starts/stops in the frontend based
955         on the state when the backend causes the state to change, such as if the state is "inactive"
956         when the frontend is told that the backend has started capturing.
957
958         * inspector/protocol/CPUProfiler.json:
959         * inspector/protocol/Memory.json:
960         Send an end timestamp to match other instruments.
961
962         * inspector/JSGlobalObjectConsoleClient.cpp:
963         (Inspector::JSGlobalObjectConsoleClient::startConsoleProfile):
964         (Inspector::JSGlobalObjectConsoleClient::stopConsoleProfile):
965
966         * inspector/agents/InspectorScriptProfilerAgent.h:
967         * inspector/agents/InspectorScriptProfilerAgent.cpp:
968         (Inspector::InspectorScriptProfilerAgent::trackingComplete):
969         (Inspector::InspectorScriptProfilerAgent::programmaticCaptureStarted): Deleted.
970         (Inspector::InspectorScriptProfilerAgent::programmaticCaptureStopped): Deleted.
971
972 2019-04-10  Tadeu Zagallo  <tzagallo@apple.com>
973
974         Unreviewed, fix watch build after r244143
975         https://bugs.webkit.org/show_bug.cgi?id=195000
976
977         The result of `lseek` should be `off_t` rather than `int`.
978
979         * jsc.cpp:
980
981 2019-04-10  Tadeu Zagallo  <tzagallo@apple.com>
982
983         Add support for incremental bytecode cache updates
984         https://bugs.webkit.org/show_bug.cgi?id=195000
985
986         Reviewed by Filip Pizlo.
987
988         Add support for incremental updates to the bytecode cache. The cache
989         is constructed as follows:
990         - When the cache is empty, the initial payload can be added to the BytecodeCache
991         by calling BytecodeCache::addGlobalUpdate. This represents the encoded
992         top-level UnlinkedCodeBlock.
993         - Afterwards, updates can be added by calling BytecodeCache::addFunctionUpdate.
994         The update is applied by appending the encoded UnlinkedFunctionCodeBlock
995         to the existing cache and updating the CachedFunctionExecutableMetadata
996         and the offset of the new CachedFunctionCodeBlock in the owner CachedFunctionExecutable.
997
998         * API/JSScript.mm:
999         (-[JSScript readCache]):
1000         (-[JSScript isUsingBytecodeCache]):
1001         (-[JSScript init]):
1002         (-[JSScript cachedBytecode]):
1003         (-[JSScript writeCache:]):
1004         * API/JSScriptInternal.h:
1005         * API/JSScriptSourceProvider.h:
1006         * API/JSScriptSourceProvider.mm:
1007         (JSScriptSourceProvider::cachedBytecode const):
1008         * CMakeLists.txt:
1009         * JavaScriptCore.xcodeproj/project.pbxproj:
1010         * Sources.txt:
1011         * bytecode/UnlinkedFunctionExecutable.cpp:
1012         (JSC::generateUnlinkedFunctionCodeBlock):
1013         * jsc.cpp:
1014         (ShellSourceProvider::~ShellSourceProvider):
1015         (ShellSourceProvider::cachePath const):
1016         (ShellSourceProvider::loadBytecode const):
1017         (ShellSourceProvider::ShellSourceProvider):
1018         (ShellSourceProvider::cacheEnabled):
1019         * parser/SourceProvider.h:
1020         (JSC::SourceProvider::cachedBytecode const):
1021         (JSC::SourceProvider::updateCache const):
1022         (JSC::SourceProvider::commitCachedBytecode const):
1023         * runtime/CachePayload.cpp: Copied from Source/JavaScriptCore/API/JSScriptInternal.h.
1024         (JSC::CachePayload::makeMappedPayload):
1025         (JSC::CachePayload::makeMallocPayload):
1026         (JSC::CachePayload::makeEmptyPayload):
1027         (JSC::CachePayload::CachePayload):
1028         (JSC::CachePayload::~CachePayload):
1029         (JSC::CachePayload::operator=):
1030         (JSC::CachePayload::freeData):
1031         * runtime/CachePayload.h: Copied from Source/JavaScriptCore/API/JSScriptInternal.h.
1032         (JSC::CachePayload::data const):
1033         (JSC::CachePayload::size const):
1034         (JSC::CachePayload::CachePayload):
1035         * runtime/CacheUpdate.cpp: Copied from Source/JavaScriptCore/API/JSScriptInternal.h.
1036         (JSC::CacheUpdate::CacheUpdate):
1037         (JSC::CacheUpdate::operator=):
1038         (JSC::CacheUpdate::isGlobal const):
1039         (JSC::CacheUpdate::asGlobal const):
1040         (JSC::CacheUpdate::asFunction const):
1041         * runtime/CacheUpdate.h: Copied from Source/JavaScriptCore/API/JSScriptInternal.h.
1042         * runtime/CachedBytecode.cpp: Added.
1043         (JSC::CachedBytecode::addGlobalUpdate):
1044         (JSC::CachedBytecode::addFunctionUpdate):
1045         (JSC::CachedBytecode::copyLeafExecutables):
1046         (JSC::CachedBytecode::commitUpdates const):
1047         * runtime/CachedBytecode.h: Added.
1048         (JSC::CachedBytecode::create):
1049         (JSC::CachedBytecode::leafExecutables):
1050         (JSC::CachedBytecode::data const):
1051         (JSC::CachedBytecode::size const):
1052         (JSC::CachedBytecode::hasUpdates const):
1053         (JSC::CachedBytecode::sizeForUpdate const):
1054         (JSC::CachedBytecode::CachedBytecode):
1055         * runtime/CachedTypes.cpp:
1056         (JSC::Encoder::addLeafExecutable):
1057         (JSC::Encoder::release):
1058         (JSC::Decoder::Decoder):
1059         (JSC::Decoder::create):
1060         (JSC::Decoder::size const):
1061         (JSC::Decoder::offsetOf):
1062         (JSC::Decoder::ptrForOffsetFromBase):
1063         (JSC::Decoder::addLeafExecutable):
1064         (JSC::VariableLengthObject::VariableLengthObject):
1065         (JSC::VariableLengthObject::buffer const):
1066         (JSC::CachedPtrOffsets::offsetOffset):
1067         (JSC::CachedWriteBarrierOffsets::ptrOffset):
1068         (JSC::CachedFunctionExecutable::features const):
1069         (JSC::CachedFunctionExecutable::hasCapturedVariables const):
1070         (JSC::CachedFunctionExecutableOffsets::codeBlockForCallOffset):
1071         (JSC::CachedFunctionExecutableOffsets::codeBlockForConstructOffset):
1072         (JSC::CachedFunctionExecutableOffsets::metadataOffset):
1073         (JSC::CachedFunctionExecutable::encode):
1074         (JSC::CachedFunctionExecutable::decode const):
1075         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
1076         (JSC::encodeCodeBlock):
1077         (JSC::encodeFunctionCodeBlock):
1078         (JSC::decodeCodeBlockImpl):
1079         (JSC::isCachedBytecodeStillValid):
1080         * runtime/CachedTypes.h:
1081         (JSC::VariableLengthObjectBase::VariableLengthObjectBase):
1082         (JSC::decodeCodeBlock):
1083         * runtime/CodeCache.cpp:
1084         (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
1085         (JSC::CodeCache::updateCache):
1086         (JSC::CodeCache::write):
1087         (JSC::writeCodeBlock):
1088         (JSC::serializeBytecode):
1089         * runtime/CodeCache.h:
1090         (JSC::SourceCodeValue::SourceCodeValue):
1091         (JSC::CodeCacheMap::findCacheAndUpdateAge):
1092         (JSC::CodeCacheMap::fetchFromDiskImpl):
1093         * runtime/Completion.cpp:
1094         (JSC::generateProgramBytecode):
1095         (JSC::generateModuleBytecode):
1096         * runtime/Completion.h:
1097         * runtime/LeafExecutable.cpp: Copied from Source/JavaScriptCore/API/JSScriptSourceProvider.mm.
1098         (JSC::LeafExecutable::operator+ const):
1099         * runtime/LeafExecutable.h: Copied from Source/JavaScriptCore/API/JSScriptSourceProvider.mm.
1100         (JSC::LeafExecutable::LeafExecutable):
1101         (JSC::LeafExecutable::base const):
1102
1103 2019-04-10  Michael Catanzaro  <mcatanzaro@igalia.com>
1104
1105         Unreviewed, rolling out r243989.
1106
1107         Broke i686 builds
1108
1109         Reverted changeset:
1110
1111         "[CMake] Detect SSE2 at compile time"
1112         https://bugs.webkit.org/show_bug.cgi?id=196488
1113         https://trac.webkit.org/changeset/243989
1114
1115 2019-04-10  Robin Morisset  <rmorisset@apple.com>
1116
1117         We should clear m_needsOverflowCheck when hitting an exception in defineProperties in ObjectConstructor.cpp
1118         https://bugs.webkit.org/show_bug.cgi?id=196746
1119
1120         Reviewed by Yusuke Suzuki..
1121
1122         It should be safe as in that case we are not completing the operation, and so not going to have any buffer overflow.
1123
1124         * runtime/ObjectConstructor.cpp:
1125         (JSC::defineProperties):
1126
1127 2019-04-10  Antoine Quint  <graouts@apple.com>
1128
1129         Enable Pointer Events on watchOS
1130         https://bugs.webkit.org/show_bug.cgi?id=196771
1131         <rdar://problem/49040909>
1132
1133         Reviewed by Dean Jackson.
1134
1135         * Configurations/FeatureDefines.xcconfig:
1136
1137 2019-04-09  Keith Rollin  <krollin@apple.com>
1138
1139         Unreviewed build maintenance -- update .xcfilelists.
1140
1141         * DerivedSources-input.xcfilelist:
1142
1143 2019-04-09  Ross Kirsling  <ross.kirsling@sony.com>
1144
1145         JSC should build successfully even with -DENABLE_UNIFIED_BUILDS=OFF
1146         https://bugs.webkit.org/show_bug.cgi?id=193073
1147
1148         Reviewed by Keith Miller.
1149
1150         * bytecompiler/BytecodeGenerator.cpp:
1151         (JSC::BytecodeGenerator::emitEqualityOpImpl):
1152         (JSC::BytecodeGenerator::emitEqualityOp): Deleted.
1153         * bytecompiler/BytecodeGenerator.h:
1154         (JSC::BytecodeGenerator::emitEqualityOp):
1155         Factor out the logic that uses the template parameter and keep it in the header.
1156
1157         * jit/JITPropertyAccess.cpp:
1158         List off the template specializations needed by JITOperations.cpp.
1159         This is unfortunate but at least there are only two (x2) by definition?
1160         Trying to do away with this incurs a severe domino effect...
1161
1162         * API/JSValueRef.cpp:
1163         * b3/B3OptimizeAssociativeExpressionTrees.cpp:
1164         * b3/air/AirHandleCalleeSaves.cpp:
1165         * builtins/BuiltinNames.cpp:
1166         * bytecode/AccessCase.cpp:
1167         * bytecode/BytecodeIntrinsicRegistry.cpp:
1168         * bytecode/BytecodeIntrinsicRegistry.h:
1169         * bytecode/BytecodeRewriter.cpp:
1170         * bytecode/BytecodeUseDef.h:
1171         * bytecode/CodeBlock.cpp:
1172         * bytecode/InstanceOfAccessCase.cpp:
1173         * bytecode/MetadataTable.cpp:
1174         * bytecode/PolyProtoAccessChain.cpp:
1175         * bytecode/StructureSet.cpp:
1176         * bytecompiler/NodesCodegen.cpp:
1177         * dfg/DFGCFAPhase.cpp:
1178         * dfg/DFGPureValue.cpp:
1179         * heap/GCSegmentedArray.h:
1180         * heap/HeapInlines.h:
1181         * heap/IsoSubspace.cpp:
1182         * heap/LocalAllocator.cpp:
1183         * heap/LocalAllocator.h:
1184         * heap/LocalAllocatorInlines.h:
1185         * heap/MarkingConstraintSolver.cpp:
1186         * inspector/ScriptArguments.cpp:
1187         (Inspector::ScriptArguments::isEqual const):
1188         * inspector/ScriptCallStackFactory.cpp:
1189         * interpreter/CallFrame.h:
1190         * interpreter/Interpreter.cpp:
1191         * interpreter/StackVisitor.cpp:
1192         * llint/LLIntEntrypoint.cpp:
1193         * runtime/ArrayIteratorPrototype.cpp:
1194         * runtime/BigIntPrototype.cpp:
1195         * runtime/CachedTypes.cpp:
1196         * runtime/ErrorType.cpp:
1197         * runtime/IndexingType.cpp:
1198         * runtime/JSCellInlines.h:
1199         * runtime/JSImmutableButterfly.h:
1200         * runtime/Operations.h:
1201         * runtime/RegExpCachedResult.cpp:
1202         * runtime/RegExpConstructor.cpp:
1203         * runtime/RegExpGlobalData.cpp:
1204         * runtime/StackFrame.h:
1205         * wasm/WasmSignature.cpp:
1206         * wasm/js/JSToWasm.cpp:
1207         * wasm/js/JSToWasmICCallee.cpp:
1208         * wasm/js/WebAssemblyFunction.h:
1209         Fix includes / forward declarations (and a couple of nearby clang warnings).
1210
1211 2019-04-09  Don Olmstead  <don.olmstead@sony.com>
1212
1213         [CMake] Apple builds should use ICU_INCLUDE_DIRS
1214         https://bugs.webkit.org/show_bug.cgi?id=196720
1215
1216         Reviewed by Konstantin Tokarev.
1217
1218         * PlatformMac.cmake:
1219
1220 2019-04-09  Saam barati  <sbarati@apple.com>
1221
1222         Clean up Int52 code and some bugs in it
1223         https://bugs.webkit.org/show_bug.cgi?id=196639
1224         <rdar://problem/49515757>
1225
1226         Reviewed by Yusuke Suzuki.
1227
1228         This patch fixes bugs in our Int52 code. The primary change in this patch is
1229         adopting a segregated type lattice for Int52. Previously, for Int52 values,
1230         we represented them with SpecInt32Only and SpecInt52Only. For an Int52,
1231         SpecInt32Only meant that the value is in int32 range. And SpecInt52Only meant
1232         that the is outside of the int32 range.
1233         
1234         However, this got confusing because we reused SpecInt32Only both for JSValue
1235         representations and Int52 representations. This actually lead to some bugs.
1236         
1237         1. It's possible that roundtripping through Int52 representation would say
1238         it produces the wrong type. For example, consider this program and how we
1239         used to annotate types in AI:
1240         a: JSConstant(10.0) => m_type is SpecAnyIntAsDouble
1241         b: Int52Rep(@a) => m_type is SpecInt52Only
1242         c: ValueRep(@b) => m_type is SpecAnyIntAsDouble
1243         
1244         In AI, for the above program, we'd say that @c produces SpecAnyIntAsDouble.
1245         However, the execution semantics are such that it'd actually produce a boxed
1246         Int32. This patch fixes the bug where we'd say that Int52Rep over SpecAnyIntAsDouble
1247         would produce SpecInt52Only. This is clearly wrong, as SpecAnyIntAsDouble can
1248         mean an int value in either int32 or int52 range.
1249         
1250         2. AsbstractValue::validateTypeAcceptingBoxedInt52 was wrong in how it
1251         accepted Int52 values. It was wrong in two different ways:
1252         a: If the AbstractValue's type was SpecInt52Only, and the incoming value
1253         was a boxed double, but represented a value in int32 range, the incoming
1254         value would incorrectly validate as being acceptable. However, we should
1255         have rejected this value.
1256         b: If the AbstractValue's type was SpecInt32Only, and the incoming value
1257         was an Int32 boxed in a double, this would not validate, even though
1258         it should have validated.
1259         
1260         Solving 2 was easiest if we segregated out the Int52 type into its own
1261         lattice. This patch makes a new Int52 lattice, which is composed of
1262         SpecInt32AsInt52 and SpecNonInt32AsInt52.
1263         
1264         The conversion rules are now really simple.
1265         
1266         Int52 rep => JSValue rep
1267         SpecInt32AsInt52 => SpecInt32Only
1268         SpecNonInt32AsInt52 => SpecAnyIntAsDouble
1269         
1270         JSValue rep => Int52 rep
1271         SpecInt32Only => SpecInt32AsInt52
1272         SpecAnyIntAsDouble => SpecInt52Any
1273         
1274         With these rules, the program in (1) will now correctly report that @c
1275         returns SpecInt32Only | SpecAnyIntAsDouble.
1276
1277         * bytecode/SpeculatedType.cpp:
1278         (JSC::dumpSpeculation):
1279         (JSC::speculationToAbbreviatedString):
1280         (JSC::int52AwareSpeculationFromValue):
1281         (JSC::leastUpperBoundOfStrictlyEquivalentSpeculations):
1282         (JSC::speculationFromString):
1283         * bytecode/SpeculatedType.h:
1284         (JSC::isInt32SpeculationForArithmetic):
1285         (JSC::isInt32OrBooleanSpeculationForArithmetic):
1286         (JSC::isAnyInt52Speculation):
1287         (JSC::isIntAnyFormat):
1288         (JSC::isInt52Speculation): Deleted.
1289         (JSC::isAnyIntSpeculation): Deleted.
1290         * dfg/DFGAbstractInterpreterInlines.h:
1291         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
1292         * dfg/DFGAbstractValue.cpp:
1293         (JSC::DFG::AbstractValue::fixTypeForRepresentation):
1294         (JSC::DFG::AbstractValue::checkConsistency const):
1295         * dfg/DFGAbstractValue.h:
1296         (JSC::DFG::AbstractValue::isInt52Any const):
1297         (JSC::DFG::AbstractValue::validateTypeAcceptingBoxedInt52 const):
1298         * dfg/DFGFixupPhase.cpp:
1299         (JSC::DFG::FixupPhase::fixupArithMul):
1300         (JSC::DFG::FixupPhase::fixupNode):
1301         (JSC::DFG::FixupPhase::fixupGetPrototypeOf):
1302         (JSC::DFG::FixupPhase::fixupToThis):
1303         (JSC::DFG::FixupPhase::fixupToStringOrCallStringConstructor):
1304         (JSC::DFG::FixupPhase::observeUseKindOnNode):
1305         (JSC::DFG::FixupPhase::fixIntConvertingEdge):
1306         (JSC::DFG::FixupPhase::attemptToMakeIntegerAdd):
1307         (JSC::DFG::FixupPhase::fixupCompareStrictEqAndSameValue):
1308         (JSC::DFG::FixupPhase::fixupChecksInBlock):
1309         * dfg/DFGGraph.h:
1310         (JSC::DFG::Graph::addShouldSpeculateInt52):
1311         (JSC::DFG::Graph::binaryArithShouldSpeculateInt52):
1312         (JSC::DFG::Graph::unaryArithShouldSpeculateInt52):
1313         (JSC::DFG::Graph::addShouldSpeculateAnyInt): Deleted.
1314         (JSC::DFG::Graph::binaryArithShouldSpeculateAnyInt): Deleted.
1315         (JSC::DFG::Graph::unaryArithShouldSpeculateAnyInt): Deleted.
1316         * dfg/DFGNode.h:
1317         (JSC::DFG::Node::shouldSpeculateInt52):
1318         (JSC::DFG::Node::shouldSpeculateAnyInt): Deleted.
1319         * dfg/DFGPredictionPropagationPhase.cpp:
1320         * dfg/DFGSpeculativeJIT.cpp:
1321         (JSC::DFG::SpeculativeJIT::setIntTypedArrayLoadResult):
1322         (JSC::DFG::SpeculativeJIT::compileArithAdd):
1323         (JSC::DFG::SpeculativeJIT::compileArithSub):
1324         (JSC::DFG::SpeculativeJIT::compileArithNegate):
1325         * dfg/DFGSpeculativeJIT64.cpp:
1326         (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal):
1327         (JSC::DFG::SpeculativeJIT::fillSpeculateInt52):
1328         * dfg/DFGUseKind.h:
1329         (JSC::DFG::typeFilterFor):
1330         * dfg/DFGVariableAccessData.cpp:
1331         (JSC::DFG::VariableAccessData::makePredictionForDoubleFormat):
1332         (JSC::DFG::VariableAccessData::couldRepresentInt52Impl):
1333         * ftl/FTLLowerDFGToB3.cpp:
1334         (JSC::FTL::DFG::LowerDFGToB3::compileArithAddOrSub):
1335         (JSC::FTL::DFG::LowerDFGToB3::compileArithNegate):
1336         (JSC::FTL::DFG::LowerDFGToB3::setIntTypedArrayLoadResult):
1337
1338 2019-04-09  Tadeu Zagallo  <tzagallo@apple.com>
1339
1340         ASSERTION FAILED: !scope.exception() || !hasProperty in JSObject::get
1341         https://bugs.webkit.org/show_bug.cgi?id=196708
1342         <rdar://problem/49556803>
1343
1344         Reviewed by Yusuke Suzuki.
1345
1346         `operationPutToScope` needs to return early if an exception is thrown while
1347         checking if `hasProperty`.
1348
1349         * jit/JITOperations.cpp:
1350
1351 2019-04-08  Yusuke Suzuki  <ysuzuki@apple.com>
1352
1353         [JSC] DFG should respect node's strict flag
1354         https://bugs.webkit.org/show_bug.cgi?id=196617
1355
1356         Reviewed by Saam Barati.
1357
1358         We accidentally use codeBlock->isStrictMode() directly in DFG and FTL. But this is wrong since this CodeBlock is the top level DFG/FTL CodeBlock,
1359         and this code does not respect the isStrictMode flag for the inlined CodeBlocks. In this patch, we start using isStrictModeFor(CodeOrigin) consistently
1360         in DFG and FTL to get the right isStrictMode flag for the DFG node.
1361         And we also split compilePutDynamicVar into compilePutDynamicVarStrict and compilePutDynamicVarNonStrict since (1) it is cleaner than accessing inlined
1362         callframe in the operation function, and (2) it is aligned to the other functions like operationPutByValDirectNonStrict etc.
1363         This bug is discovered by RandomizingFuzzerAgent by expanding the DFG coverage.
1364
1365         * dfg/DFGAbstractInterpreterInlines.h:
1366         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
1367         * dfg/DFGConstantFoldingPhase.cpp:
1368         (JSC::DFG::ConstantFoldingPhase::foldConstants):
1369         * dfg/DFGFixupPhase.cpp:
1370         (JSC::DFG::FixupPhase::fixupToThis):
1371         * dfg/DFGOperations.cpp:
1372         * dfg/DFGOperations.h:
1373         * dfg/DFGPredictionPropagationPhase.cpp:
1374         * dfg/DFGSpeculativeJIT.cpp:
1375         (JSC::DFG::SpeculativeJIT::compileDoublePutByVal):
1376         (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
1377         (JSC::DFG::SpeculativeJIT::compilePutDynamicVar):
1378         (JSC::DFG::SpeculativeJIT::compileToThis):
1379         * dfg/DFGSpeculativeJIT32_64.cpp:
1380         (JSC::DFG::SpeculativeJIT::compileContiguousPutByVal):
1381         (JSC::DFG::SpeculativeJIT::compile):
1382         * dfg/DFGSpeculativeJIT64.cpp:
1383         (JSC::DFG::SpeculativeJIT::compile):
1384         * ftl/FTLLowerDFGToB3.cpp:
1385         (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
1386         (JSC::FTL::DFG::LowerDFGToB3::compilePutDynamicVar):
1387
1388 2019-04-08  Don Olmstead  <don.olmstead@sony.com>
1389
1390         [CMake][WinCairo] Separate copied headers into different directories
1391         https://bugs.webkit.org/show_bug.cgi?id=196655
1392
1393         Reviewed by Michael Catanzaro.
1394
1395         * CMakeLists.txt:
1396         * shell/PlatformWin.cmake:
1397
1398 2019-04-08  Yusuke Suzuki  <ysuzuki@apple.com>
1399
1400         [JSC] isRope jump in StringSlice should not jump over register allocations
1401         https://bugs.webkit.org/show_bug.cgi?id=196716
1402
1403         Reviewed by Saam Barati.
1404
1405         Jumping over the register allocation code in DFG (like the following) is wrong.
1406
1407             auto jump = m_jit.branchXXX();
1408             {
1409                 GPRTemporary reg(this);
1410                 GPRReg regGPR = reg.gpr();
1411                 ...
1412             }
1413             jump.link(&m_jit);
1414
1415         When GPRTemporary::gpr allocates a new register, it can flush the previous register value into the stack and make the register usable.
1416         Jumping over this register allocation code skips the flushing code, and makes the DFG's stack and register content tracking inconsistent:
1417         DFG thinks that the content is flushed and stored in particular stack slot even while this flushing code is skipped.
1418         In this patch, we perform register allocations before jumping to the slow path based on `isRope` condition in StringSlice.
1419
1420         * dfg/DFGSpeculativeJIT.cpp:
1421         (JSC::DFG::SpeculativeJIT::compileStringSlice):
1422
1423 2019-04-08  Yusuke Suzuki  <ysuzuki@apple.com>
1424
1425         [JSC] to_index_string should not assume incoming value is Uint32
1426         https://bugs.webkit.org/show_bug.cgi?id=196713
1427
1428         Reviewed by Saam Barati.
1429
1430         The slow path of to_index_string assumes that incoming value is Uint32. But we should not have
1431         this assumption since DFG may decide we should have it double format. This patch removes this
1432         assumption, and instead, we should assume that incoming value is AnyInt and the range of this
1433         is within Uint32.
1434
1435         * runtime/CommonSlowPaths.cpp:
1436         (JSC::SLOW_PATH_DECL):
1437
1438 2019-04-08  Justin Fan  <justin_fan@apple.com>
1439
1440         [Web GPU] Fix Web GPU experimental feature on iOS
1441         https://bugs.webkit.org/show_bug.cgi?id=196632
1442
1443         Reviewed by Myles C. Maxfield.
1444
1445         Properly make Web GPU available on iOS 11+.
1446
1447         * Configurations/FeatureDefines.xcconfig:
1448         * Configurations/WebKitTargetConditionals.xcconfig:
1449
1450 2019-04-08  Ross Kirsling  <ross.kirsling@sony.com>
1451
1452         -f[no-]var-tracking-assignments is GCC-only
1453         https://bugs.webkit.org/show_bug.cgi?id=196699
1454
1455         Reviewed by Don Olmstead.
1456
1457         * CMakeLists.txt:
1458         Just remove the build flag altogether -- it supposedly doesn't solve the problem it was meant to
1459         and said problem evidently no longer occurs as of GCC 9.
1460
1461 2019-04-08  Saam Barati  <sbarati@apple.com>
1462
1463         WebAssembly.RuntimeError missing exception check
1464         https://bugs.webkit.org/show_bug.cgi?id=196700
1465         <rdar://problem/49693932>
1466
1467         Reviewed by Yusuke Suzuki.
1468
1469         * wasm/js/JSWebAssemblyRuntimeError.h:
1470         * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
1471         (JSC::constructJSWebAssemblyRuntimeError):
1472
1473 2019-04-08  Yusuke Suzuki  <ysuzuki@apple.com>
1474
1475         Unreviewed, rolling in r243948 with test fix
1476         https://bugs.webkit.org/show_bug.cgi?id=196486
1477
1478         * parser/ASTBuilder.h:
1479         (JSC::ASTBuilder::createString):
1480         * parser/Lexer.cpp:
1481         (JSC::Lexer<T>::parseMultilineComment):
1482         (JSC::Lexer<T>::lexWithoutClearingLineTerminator):
1483         (JSC::Lexer<T>::lex): Deleted.
1484         * parser/Lexer.h:
1485         (JSC::Lexer::hasLineTerminatorBeforeToken const):
1486         (JSC::Lexer::setHasLineTerminatorBeforeToken):
1487         (JSC::Lexer<T>::lex):
1488         (JSC::Lexer::prevTerminator const): Deleted.
1489         (JSC::Lexer::setTerminator): Deleted.
1490         * parser/Parser.cpp:
1491         (JSC::Parser<LexerType>::allowAutomaticSemicolon):
1492         (JSC::Parser<LexerType>::parseSingleFunction):
1493         (JSC::Parser<LexerType>::parseStatementListItem):
1494         (JSC::Parser<LexerType>::maybeParseAsyncFunctionDeclarationStatement):
1495         (JSC::Parser<LexerType>::parseFunctionInfo):
1496         (JSC::Parser<LexerType>::parseClass):
1497         (JSC::Parser<LexerType>::parseExportDeclaration):
1498         (JSC::Parser<LexerType>::parseAssignmentExpression):
1499         (JSC::Parser<LexerType>::parseYieldExpression):
1500         (JSC::Parser<LexerType>::parseProperty):
1501         (JSC::Parser<LexerType>::parsePrimaryExpression):
1502         (JSC::Parser<LexerType>::parseMemberExpression):
1503         * parser/Parser.h:
1504         (JSC::Parser::nextWithoutClearingLineTerminator):
1505         (JSC::Parser::lexCurrentTokenAgainUnderCurrentContext):
1506         (JSC::Parser::internalSaveLexerState):
1507         (JSC::Parser::restoreLexerState):
1508
1509 2019-04-08  Ryan Haddad  <ryanhaddad@apple.com>
1510
1511         Unreviewed, rolling out r243948.
1512
1513         Caused inspector/runtime/parse.html to fail
1514
1515         Reverted changeset:
1516
1517         "SIGSEGV in JSC::BytecodeGenerator::addStringConstant"
1518         https://bugs.webkit.org/show_bug.cgi?id=196486
1519         https://trac.webkit.org/changeset/243948
1520
1521 2019-04-08  Ryan Haddad  <ryanhaddad@apple.com>
1522
1523         Unreviewed, rolling out r243943.
1524
1525         Caused test262 failures.
1526
1527         Reverted changeset:
1528
1529         "[JSC] Filter DontEnum properties in
1530         ProxyObject::getOwnPropertyNames()"
1531         https://bugs.webkit.org/show_bug.cgi?id=176810
1532         https://trac.webkit.org/changeset/243943
1533
1534 2019-04-08  Claudio Saavedra  <csaavedra@igalia.com>
1535
1536         [JSC] Partially fix the build with unified builds disabled
1537         https://bugs.webkit.org/show_bug.cgi?id=196647
1538
1539         Reviewed by Konstantin Tokarev.
1540
1541         If you disable unified builds you find all kind of build
1542         errors. This partially tries to fix them but there's a lot
1543         more.
1544
1545         * API/JSBaseInternal.h:
1546         * b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp:
1547         * b3/air/AirHandleCalleeSaves.h:
1548         * bytecode/ExecutableToCodeBlockEdge.cpp:
1549         * bytecode/ExitFlag.h:
1550         * bytecode/ICStatusUtils.h:
1551         * bytecode/UnlinkedMetadataTable.h:
1552         * dfg/DFGPureValue.h:
1553         * heap/IsoAlignedMemoryAllocator.cpp:
1554         * heap/IsoAlignedMemoryAllocator.h:
1555
1556 2019-04-08  Guillaume Emont  <guijemont@igalia.com>
1557
1558         Enable DFG on MIPS
1559         https://bugs.webkit.org/show_bug.cgi?id=196689
1560
1561         Reviewed by Žan Doberšek.
1562
1563         Since the bytecode change, we enabled the baseline JIT on mips in
1564         r240432, but DFG is still missing. With this change, all tests are
1565         passing on a ci20 board.
1566
1567         * jit/RegisterSet.cpp:
1568         (JSC::RegisterSet::calleeSaveRegisters):
1569         Added s0, which is used in llint.
1570
1571 2019-04-08  Xan Lopez  <xan@igalia.com>
1572
1573         [CMake] Detect SSE2 at compile time
1574         https://bugs.webkit.org/show_bug.cgi?id=196488
1575
1576         Reviewed by Carlos Garcia Campos.
1577
1578         * assembler/MacroAssemblerX86Common.cpp: Remove unnecessary (and
1579         incorrect) static_assert.
1580
1581 2019-04-07  Michael Saboff  <msaboff@apple.com>
1582
1583         REGRESSION (r243642): Crash in reddit.com page
1584         https://bugs.webkit.org/show_bug.cgi?id=196684
1585
1586         Reviewed by Geoffrey Garen.
1587
1588         In r243642, the code that saves and restores the count for non-greedy character classes
1589         was inadvertently put inside an if statement.  This code should be generated for all
1590         non-greedy character classes.
1591
1592         * yarr/YarrJIT.cpp:
1593         (JSC::Yarr::YarrGenerator::generateCharacterClassNonGreedy):
1594         (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
1595
1596 2019-04-07  Yusuke Suzuki  <ysuzuki@apple.com>
1597
1598         [JSC] CallLinkInfo should clear Callee or CodeBlock even if it is unlinked by jettison
1599         https://bugs.webkit.org/show_bug.cgi?id=196683
1600
1601         Reviewed by Saam Barati.
1602
1603         In r243626, we stop repatching CallLinkInfo when the CallLinkInfo is held by jettisoned CodeBlock.
1604         But we still need to clear the Callee or CodeBlock since they are now dead. Otherwise, CodeBlock's
1605         visitWeak eventually accesses this dead cells and crashes because the owner CodeBlock of CallLinkInfo
1606         can be still live.
1607
1608         We also move all repatching operations from CallLinkInfo.cpp to Repatch.cpp for consistency because the
1609         other repatching operations in CallLinkInfo are implemented in Repatch.cpp side.
1610
1611         * bytecode/CallLinkInfo.cpp:
1612         (JSC::CallLinkInfo::setCallee):
1613         (JSC::CallLinkInfo::clearCallee):
1614         * jit/Repatch.cpp:
1615         (JSC::linkFor):
1616         (JSC::revertCall):
1617
1618 2019-04-05  Yusuke Suzuki  <ysuzuki@apple.com>
1619
1620         [JSC] OSRExit recovery for SpeculativeAdd does not consier "A = A + A" pattern
1621         https://bugs.webkit.org/show_bug.cgi?id=196582
1622
1623         Reviewed by Saam Barati.
1624
1625         In DFG, our ArithAdd with overflow is executed speculatively, and we recover the value when overflow flag is set.
1626         The recovery is subtracting the operand from the destination to get the original two operands. Our recovery code
1627         handles A + B = A, A + B = B cases. But it misses A + A = A case (here, A and B are GPRReg). Our recovery code
1628         attempts to produce the original operand by performing A - A, and it always produces zero accidentally.
1629
1630         This patch adds the recovery code for A + A = A case. Because we know that this ArithAdd overflows, and operands were
1631         same values, we can calculate the original operand from the destination value by `((int32_t)value >> 1) ^ 0x80000000`.
1632
1633         We also found that FTL recovery code is dead. We remove them in this patch.
1634
1635         * dfg/DFGOSRExit.cpp:
1636         (JSC::DFG::OSRExit::executeOSRExit):
1637         (JSC::DFG::OSRExit::compileExit):
1638         * dfg/DFGOSRExit.h:
1639         (JSC::DFG::SpeculationRecovery::SpeculationRecovery):
1640         * dfg/DFGSpeculativeJIT.cpp:
1641         (JSC::DFG::SpeculativeJIT::compileArithAdd):
1642         * ftl/FTLExitValue.cpp:
1643         (JSC::FTL::ExitValue::dataFormat const):
1644         (JSC::FTL::ExitValue::dumpInContext const):
1645         * ftl/FTLExitValue.h:
1646         (JSC::FTL::ExitValue::isArgument const):
1647         (JSC::FTL::ExitValue::hasIndexInStackmapLocations const):
1648         (JSC::FTL::ExitValue::adjustStackmapLocationsIndexByOffset):
1649         (JSC::FTL::ExitValue::recovery): Deleted.
1650         (JSC::FTL::ExitValue::isRecovery const): Deleted.
1651         (JSC::FTL::ExitValue::leftRecoveryArgument const): Deleted.
1652         (JSC::FTL::ExitValue::rightRecoveryArgument const): Deleted.
1653         (JSC::FTL::ExitValue::recoveryFormat const): Deleted.
1654         (JSC::FTL::ExitValue::recoveryOpcode const): Deleted.
1655         * ftl/FTLLowerDFGToB3.cpp:
1656         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
1657         (JSC::FTL::DFG::LowerDFGToB3::preparePatchpointForExceptions):
1658         (JSC::FTL::DFG::LowerDFGToB3::appendOSRExit):
1659         (JSC::FTL::DFG::LowerDFGToB3::exitValueForNode):
1660         (JSC::FTL::DFG::LowerDFGToB3::addAvailableRecovery): Deleted.
1661         * ftl/FTLOSRExitCompiler.cpp:
1662         (JSC::FTL::compileRecovery):
1663
1664 2019-04-05  Ryan Haddad  <ryanhaddad@apple.com>
1665
1666         Unreviewed, rolling out r243665.
1667
1668         Caused iOS JSC tests to exit with an exception.
1669
1670         Reverted changeset:
1671
1672         "Assertion failed in JSC::createError"
1673         https://bugs.webkit.org/show_bug.cgi?id=196305
1674         https://trac.webkit.org/changeset/243665
1675
1676 2019-04-05  Yusuke Suzuki  <ysuzuki@apple.com>
1677
1678         SIGSEGV in JSC::BytecodeGenerator::addStringConstant
1679         https://bugs.webkit.org/show_bug.cgi?id=196486
1680
1681         Reviewed by Saam Barati.
1682
1683         When parsing a FunctionExpression / FunctionDeclaration etc., we use SyntaxChecker for the body of the function because we do not have any interest on the nodes of the body at that time.
1684         The nodes will be parsed with the ASTBuilder when the function itself is parsed for code generation. This works well previously because all the function ends with "}" previously.
1685         SyntaxChecker lexes this "}" token, and parser restores the context back to ASTBuilder and continues parsing.
1686
1687         But now, we have ArrowFunctionExpression without braces `arrow => expr`. Let's consider the following code.
1688
1689                 arrow => expr
1690                 "string!"
1691
1692         We parse arrow function's body with SyntaxChecker. At that time, we lex "string!" token under the SyntaxChecker context. But this means that we may not build string content for this token
1693         since SyntaxChecker may not have interest on string content itself in certain case. After the parser is back to ASTBuilder, we parse "string!" as ExpressionStatement with string constant,
1694         generate StringNode with non-built identifier (nullptr), and we accidentally create StringNode with nullptr.
1695
1696         This patch fixes this problem. The root cause of this problem is that the last token lexed in the previous context is used. We add lexCurrentTokenAgainUnderCurrentContext which will re-lex
1697         the current token under the current context (may be ASTBuilder). This should be done only when the caller's context is different from SyntaxChecker, which avoids unnecessary lexing.
1698         We leverage existing SavePoint mechanism to implement lexCurrentTokenAgainUnderCurrentContext cleanly.
1699
1700         And we also fix the bug in the existing SavePoint mechanism, which is shown in the attached test script. When we save LexerState, we do not save line terminator status. This patch also introduces
1701         lexWithoutClearingLineTerminator, which lex the token without clearing line terminator status.
1702
1703         * parser/ASTBuilder.h:
1704         (JSC::ASTBuilder::createString):
1705         * parser/Lexer.cpp:
1706         (JSC::Lexer<T>::parseMultilineComment):
1707         (JSC::Lexer<T>::lexWithoutClearingLineTerminator): EOF token also should record offset information. This offset information is correctly handled in Lexer::setOffset too.
1708         (JSC::Lexer<T>::lex): Deleted.
1709         * parser/Lexer.h:
1710         (JSC::Lexer::hasLineTerminatorBeforeToken const):
1711         (JSC::Lexer::setHasLineTerminatorBeforeToken):
1712         (JSC::Lexer<T>::lex):
1713         (JSC::Lexer::prevTerminator const): Deleted.
1714         (JSC::Lexer::setTerminator): Deleted.
1715         * parser/Parser.cpp:
1716         (JSC::Parser<LexerType>::allowAutomaticSemicolon):
1717         (JSC::Parser<LexerType>::parseSingleFunction):
1718         (JSC::Parser<LexerType>::parseStatementListItem):
1719         (JSC::Parser<LexerType>::maybeParseAsyncFunctionDeclarationStatement):
1720         (JSC::Parser<LexerType>::parseFunctionInfo):
1721         (JSC::Parser<LexerType>::parseClass):
1722         (JSC::Parser<LexerType>::parseExportDeclaration):
1723         (JSC::Parser<LexerType>::parseAssignmentExpression):
1724         (JSC::Parser<LexerType>::parseYieldExpression):
1725         (JSC::Parser<LexerType>::parseProperty):
1726         (JSC::Parser<LexerType>::parsePrimaryExpression):
1727         (JSC::Parser<LexerType>::parseMemberExpression):
1728         * parser/Parser.h:
1729         (JSC::Parser::nextWithoutClearingLineTerminator):
1730         (JSC::Parser::lexCurrentTokenAgainUnderCurrentContext):
1731         (JSC::Parser::internalSaveLexerState):
1732         (JSC::Parser::restoreLexerState):
1733
1734 2019-04-05  Caitlin Potter  <caitp@igalia.com>
1735
1736         [JSC] Filter DontEnum properties in ProxyObject::getOwnPropertyNames()
1737         https://bugs.webkit.org/show_bug.cgi?id=176810
1738
1739         Reviewed by Saam Barati.
1740
1741         This adds conditional logic following the invariant checks, to perform
1742         filtering in common uses of getOwnPropertyNames.
1743
1744         While this would ideally only be done in JSPropertyNameEnumerator, adding
1745         the filtering to ProxyObject::performGetOwnPropertyNames maintains the
1746         invariant that the EnumerationMode is properly followed.
1747
1748         * runtime/PropertyNameArray.h:
1749         (JSC::PropertyNameArray::reset):
1750         * runtime/ProxyObject.cpp:
1751         (JSC::ProxyObject::performGetOwnPropertyNames):
1752
1753 2019-04-05  Commit Queue  <commit-queue@webkit.org>
1754
1755         Unreviewed, rolling out r243833.
1756         https://bugs.webkit.org/show_bug.cgi?id=196645
1757
1758         This change breaks build of WPE and GTK ports (Requested by
1759         annulen on #webkit).
1760
1761         Reverted changeset:
1762
1763         "[CMake][WTF] Mirror XCode header directories"
1764         https://bugs.webkit.org/show_bug.cgi?id=191662
1765         https://trac.webkit.org/changeset/243833
1766
1767 2019-04-05  Caitlin Potter  <caitp@igalia.com>
1768
1769         [JSC] throw if ownKeys Proxy trap result contains duplicate keys
1770         https://bugs.webkit.org/show_bug.cgi?id=185211
1771
1772         Reviewed by Saam Barati.
1773
1774         Implements the normative spec change in https://github.com/tc39/ecma262/pull/833
1775
1776         This involves tracking duplicate keys returned from the ownKeys trap in yet
1777         another HashTable, and may incur a minor performance penalty in some cases. This
1778         is not expected to significantly affect web performance.
1779
1780         * runtime/ProxyObject.cpp:
1781         (JSC::ProxyObject::performGetOwnPropertyNames):
1782
1783 2019-04-04  Yusuke Suzuki  <ysuzuki@apple.com>
1784
1785         [JSC] makeBoundFunction should not assume incoming "length" value is Int32 because it performs some calculation in bytecode
1786         https://bugs.webkit.org/show_bug.cgi?id=196631
1787
1788         Reviewed by Saam Barati.
1789
1790         makeBoundFunction assumes that "length" argument is always Int32. But this should not be done since this "length" value is calculated in builtin JS code.
1791         DFG may store this value in Double format so that we should not rely on that this value is Int32. This patch fixes makeBoundFunction function to perform
1792         toInt32 operation. We also insert a missing exception check for `JSString::value(ExecState*)` in makeBoundFunction.
1793
1794         * JavaScriptCore.xcodeproj/project.pbxproj:
1795         * Sources.txt:
1796         * interpreter/CallFrameInlines.h:
1797         * runtime/DoublePredictionFuzzerAgent.cpp: Copied from Source/JavaScriptCore/interpreter/CallFrameInlines.h.
1798         (JSC::DoublePredictionFuzzerAgent::DoublePredictionFuzzerAgent):
1799         (JSC::DoublePredictionFuzzerAgent::getPrediction):
1800         * runtime/DoublePredictionFuzzerAgent.h: Copied from Source/JavaScriptCore/interpreter/CallFrameInlines.h.
1801         * runtime/JSGlobalObject.cpp:
1802         (JSC::makeBoundFunction):
1803         * runtime/Options.h:
1804         * runtime/VM.cpp:
1805         (JSC::VM::VM):
1806
1807 2019-04-04  Robin Morisset  <rmorisset@apple.com>
1808
1809         B3ReduceStrength should know that Mul distributes over Add and Sub
1810         https://bugs.webkit.org/show_bug.cgi?id=196325
1811         <rdar://problem/49441650>
1812
1813         Reviewed by Saam Barati.
1814
1815         Fix some obviously wrong code that was due to an accidental copy-paste.
1816         It made the entire optimization dead code that never ran.
1817
1818         * b3/B3ReduceStrength.cpp:
1819
1820 2019-04-04  Saam Barati  <sbarati@apple.com>
1821
1822         Unreviewed, build fix for CLoop after r243886
1823
1824         * interpreter/Interpreter.cpp:
1825         (JSC::UnwindFunctor::copyCalleeSavesToEntryFrameCalleeSavesBuffer const):
1826         * interpreter/StackVisitor.cpp:
1827         (JSC::StackVisitor::Frame::calleeSaveRegistersForUnwinding):
1828         * interpreter/StackVisitor.h:
1829
1830 2019-04-04  Commit Queue  <commit-queue@webkit.org>
1831
1832         Unreviewed, rolling out r243898.
1833         https://bugs.webkit.org/show_bug.cgi?id=196624
1834
1835         `#if !ENABLE(C_LOOP) && NUMBER_OF_CALLEE_SAVES_REGISTERS > 0`
1836         does not work well (Requested by yusukesuzuki on #webkit).
1837
1838         Reverted changeset:
1839
1840         "Unreviewed, build fix for CLoop and Windows after r243886"
1841         https://bugs.webkit.org/show_bug.cgi?id=196387
1842         https://trac.webkit.org/changeset/243898
1843
1844 2019-04-04  Yusuke Suzuki  <ysuzuki@apple.com>
1845
1846         Unreviewed, build fix for CLoop and Windows after r243886
1847         https://bugs.webkit.org/show_bug.cgi?id=196387
1848
1849         RegisterAtOffsetList does not exist if ENABLE(ASSEMBLER) is false.
1850
1851         * interpreter/StackVisitor.cpp:
1852         (JSC::StackVisitor::Frame::calleeSaveRegistersForUnwinding):
1853         * interpreter/StackVisitor.h:
1854
1855 2019-04-04  Saam barati  <sbarati@apple.com>
1856
1857         Teach Call ICs how to call Wasm
1858         https://bugs.webkit.org/show_bug.cgi?id=196387
1859
1860         Reviewed by Filip Pizlo.
1861
1862         This patch teaches JS to call Wasm without going through the native thunk.
1863         Currently, we emit a JIT "JS" callee stub which marshals arguments from
1864         JS to Wasm. Like the native version of this, this thunk is responsible
1865         for saving and restoring the VM's current Wasm context. Instead of emitting
1866         an exception handler, we also teach the unwinder how to read the previous
1867         wasm context to restore it as it unwindws past this frame.
1868         
1869         This patch is straight forward, and leaves some areas for perf improvement:
1870         - We can teach the DFG/FTL to directly use the Wasm calling convention when
1871           it knows it's calling a single Wasm function. This way we don't shuffle
1872           registers to the stack and then back into registers.
1873         - We bail out to the slow path for mismatched arity. I opened a bug to fix
1874           optimize arity check failures: https://bugs.webkit.org/show_bug.cgi?id=196564
1875         - We bail out to the slow path Double JSValues flowing into i32 arguments.
1876           We should teach this thunk how to do that conversion directly.
1877         
1878         This patch also refactors the code to explicitly have a single pinned size register.
1879         We used pretend in some places that we could have more than one pinned size register.
1880         However, there was other code that just asserted the size was one. This patch just rips
1881         out this code since we never moved to having more than one pinned size register. Doing
1882         this refactoring cleans up the various places where we set up the size register.
1883         
1884         This patch is a 50-60% progression on JetStream 2's richards-wasm.
1885
1886         * JavaScriptCore.xcodeproj/project.pbxproj:
1887         * Sources.txt:
1888         * assembler/MacroAssemblerCodeRef.h:
1889         (JSC::MacroAssemblerCodeRef::operator=):
1890         (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef):
1891         * interpreter/Interpreter.cpp:
1892         (JSC::UnwindFunctor::operator() const):
1893         (JSC::UnwindFunctor::copyCalleeSavesToEntryFrameCalleeSavesBuffer const):
1894         * interpreter/StackVisitor.cpp:
1895         (JSC::StackVisitor::Frame::calleeSaveRegistersForUnwinding):
1896         (JSC::StackVisitor::Frame::calleeSaveRegisters): Deleted.
1897         * interpreter/StackVisitor.h:
1898         * jit/JITOperations.cpp:
1899         * jit/RegisterSet.cpp:
1900         (JSC::RegisterSet::runtimeTagRegisters):
1901         (JSC::RegisterSet::specialRegisters):
1902         (JSC::RegisterSet::runtimeRegisters): Deleted.
1903         * jit/RegisterSet.h:
1904         * jit/Repatch.cpp:
1905         (JSC::linkPolymorphicCall):
1906         * runtime/JSFunction.cpp:
1907         (JSC::getCalculatedDisplayName):
1908         * runtime/JSGlobalObject.cpp:
1909         (JSC::JSGlobalObject::init):
1910         (JSC::JSGlobalObject::visitChildren):
1911         * runtime/JSGlobalObject.h:
1912         (JSC::JSGlobalObject::jsToWasmICCalleeStructure const):
1913         * runtime/VM.cpp:
1914         (JSC::VM::VM):
1915         * runtime/VM.h:
1916         * wasm/WasmAirIRGenerator.cpp:
1917         (JSC::Wasm::AirIRGenerator::AirIRGenerator):
1918         (JSC::Wasm::AirIRGenerator::restoreWebAssemblyGlobalState):
1919         (JSC::Wasm::AirIRGenerator::addCallIndirect):
1920         * wasm/WasmB3IRGenerator.cpp:
1921         (JSC::Wasm::B3IRGenerator::B3IRGenerator):
1922         (JSC::Wasm::B3IRGenerator::restoreWebAssemblyGlobalState):
1923         (JSC::Wasm::B3IRGenerator::addCallIndirect):
1924         * wasm/WasmBinding.cpp:
1925         (JSC::Wasm::wasmToWasm):
1926         * wasm/WasmContext.h:
1927         (JSC::Wasm::Context::pointerToInstance):
1928         * wasm/WasmContextInlines.h:
1929         (JSC::Wasm::Context::store):
1930         * wasm/WasmMemoryInformation.cpp:
1931         (JSC::Wasm::getPinnedRegisters):
1932         (JSC::Wasm::PinnedRegisterInfo::get):
1933         (JSC::Wasm::PinnedRegisterInfo::PinnedRegisterInfo):
1934         * wasm/WasmMemoryInformation.h:
1935         (JSC::Wasm::PinnedRegisterInfo::toSave const):
1936         * wasm/WasmOMGPlan.cpp:
1937         (JSC::Wasm::OMGPlan::work):
1938         * wasm/js/JSToWasm.cpp:
1939         (JSC::Wasm::createJSToWasmWrapper):
1940         * wasm/js/JSToWasmICCallee.cpp: Added.
1941         (JSC::JSToWasmICCallee::create):
1942         (JSC::JSToWasmICCallee::createStructure):
1943         (JSC::JSToWasmICCallee::visitChildren):
1944         * wasm/js/JSToWasmICCallee.h: Added.
1945         (JSC::JSToWasmICCallee::function):
1946         (JSC::JSToWasmICCallee::JSToWasmICCallee):
1947         * wasm/js/WebAssemblyFunction.cpp:
1948         (JSC::WebAssemblyFunction::useTagRegisters const):
1949         (JSC::WebAssemblyFunction::calleeSaves const):
1950         (JSC::WebAssemblyFunction::usedCalleeSaveRegisters const):
1951         (JSC::WebAssemblyFunction::previousInstanceOffset const):
1952         (JSC::WebAssemblyFunction::previousInstance):
1953         (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
1954         (JSC::WebAssemblyFunction::visitChildren):
1955         (JSC::WebAssemblyFunction::destroy):
1956         * wasm/js/WebAssemblyFunction.h:
1957         * wasm/js/WebAssemblyFunctionHeapCellType.cpp: Added.
1958         (JSC::WebAssemblyFunctionDestroyFunc::operator() const):
1959         (JSC::WebAssemblyFunctionHeapCellType::WebAssemblyFunctionHeapCellType):
1960         (JSC::WebAssemblyFunctionHeapCellType::~WebAssemblyFunctionHeapCellType):
1961         (JSC::WebAssemblyFunctionHeapCellType::finishSweep):
1962         (JSC::WebAssemblyFunctionHeapCellType::destroy):
1963         * wasm/js/WebAssemblyFunctionHeapCellType.h: Added.
1964         * wasm/js/WebAssemblyPrototype.h:
1965
1966 2019-04-04  Yusuke Suzuki  <ysuzuki@apple.com>
1967
1968         [JSC] Pass CodeOrigin to FuzzerAgent
1969         https://bugs.webkit.org/show_bug.cgi?id=196590
1970
1971         Reviewed by Saam Barati.
1972
1973         Pass CodeOrigin instead of bytecodeIndex. CodeOrigin includes richer information (InlineCallFrame*).
1974         We also mask prediction with SpecBytecodeTop in DFGByteCodeParser. The fuzzer can produce any SpeculatedTypes,
1975         but DFGByteCodeParser should only see predictions that can be actually produced from the bytecode execution.
1976
1977         * dfg/DFGByteCodeParser.cpp:
1978         (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
1979         * runtime/FuzzerAgent.cpp:
1980         (JSC::FuzzerAgent::getPrediction):
1981         * runtime/FuzzerAgent.h:
1982         * runtime/RandomizingFuzzerAgent.cpp:
1983         (JSC::RandomizingFuzzerAgent::getPrediction):
1984         * runtime/RandomizingFuzzerAgent.h:
1985
1986 2019-04-04  Caio Lima  <ticaiolima@gmail.com>
1987
1988         [JSC] We should consider moving UnlinkedFunctionExecutable::m_parentScopeTDZVariables to RareData
1989         https://bugs.webkit.org/show_bug.cgi?id=194944
1990
1991         Reviewed by Keith Miller.
1992
1993         Based on profile data collected on JetStream2, Speedometer 2 and
1994         other benchmarks, it is very rare having non-empty
1995         UnlinkedFunctionExecutable::m_parentScopeTDZVariables.
1996
1997         - Data collected from Speedometer2
1998             Total number of UnlinkedFunctionExecutable: 39463
1999             Total number of non-empty parentScopeTDZVars: 428 (~1%)
2000
2001         - Data collected from JetStream2
2002             Total number of UnlinkedFunctionExecutable: 83715
2003             Total number of non-empty parentScopeTDZVars: 5285 (~6%)
2004
2005         We also collected numbers on 6 of top 10 Alexia sites.
2006
2007         - Data collected from youtube.com
2008             Total number of UnlinkedFunctionExecutable: 29599
2009             Total number of non-empty parentScopeTDZVars: 97 (~0.3%)
2010
2011         - Data collected from twitter.com
2012             Total number of UnlinkedFunctionExecutable: 23774
2013             Total number of non-empty parentScopeTDZVars: 172 (~0.7%)
2014
2015         - Data collected from google.com
2016             Total number of UnlinkedFunctionExecutable: 33209
2017             Total number of non-empty parentScopeTDZVars: 174 (~0.5%)
2018
2019         - Data collected from amazon.com:
2020             Total number of UnlinkedFunctionExecutable: 15182
2021             Total number of non-empty parentScopeTDZVars: 166 (~1%)
2022
2023         - Data collected from facebook.com:
2024             Total number of UnlinkedFunctionExecutable: 54443
2025             Total number of non-empty parentScopeTDZVars: 269 (~0.4%)
2026
2027         - Data collected from netflix.com:
2028             Total number of UnlinkedFunctionExecutable: 39266
2029             Total number of non-empty parentScopeTDZVars: 97 (~0.2%)
2030
2031         Considering such numbers, this patch is moving `m_parentScopeTDZVariables`
2032         to RareData. This decreases sizeof(UnlinkedFunctionExecutable) by
2033         16 bytes. With this change, now UnlinkedFunctionExecutable constructors
2034         receives an `Optional<VariableEnvironmentMap::Handle>` and only stores
2035         it when `value != WTF::nullopt`. We also changed
2036         UnlinkedFunctionExecutable::parentScopeTDZVariables() and it returns
2037         `VariableEnvironment()` whenever the Executable doesn't have RareData,
2038         or VariableEnvironmentMap::Handle is unitialized. This is required
2039         because RareData is instantiated when any of its field is stored and
2040         we can have an unitialized `Handle` even on cases when parentScopeTDZVariables
2041         is `WTF::nullopt`.
2042
2043         Results on memory usage on JetStrem2 is neutral.
2044
2045             Mean of memory peak on ToT: 4258633728 bytes (confidence interval: 249720072.95)
2046             Mean of memory peak on Changes: 4367325184 bytes (confidence interval: 321285583.61)
2047
2048         * builtins/BuiltinExecutables.cpp:
2049         (JSC::BuiltinExecutables::createExecutable):
2050         * bytecode/UnlinkedFunctionExecutable.cpp:
2051         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
2052         * bytecode/UnlinkedFunctionExecutable.h:
2053         * bytecompiler/BytecodeGenerator.cpp:
2054         (JSC::BytecodeGenerator::getVariablesUnderTDZ):
2055
2056         BytecodeGenerator::getVariablesUnderTDZ now also caches if m_cachedVariablesUnderTDZ
2057         is empty, so we can properly return `WTF::nullopt` without the
2058         reconstruction of a VariableEnvironment to check if it is empty.
2059
2060         * bytecompiler/BytecodeGenerator.h:
2061         (JSC::BytecodeGenerator::makeFunction):
2062         * parser/VariableEnvironment.h:
2063         (JSC::VariableEnvironment::isEmpty const):
2064         * runtime/CachedTypes.cpp:
2065         (JSC::CachedCompactVariableMapHandle::decode const):
2066
2067         It returns an unitialized Handle when there is no
2068         CompactVariableEnvironment. This can happen when RareData is ensured
2069         because of another field.
2070
2071         (JSC::CachedFunctionExecutableRareData::encode):
2072         (JSC::CachedFunctionExecutableRareData::decode const):
2073         (JSC::CachedFunctionExecutable::encode):
2074         (JSC::CachedFunctionExecutable::decode const):
2075         (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
2076         * runtime/CodeCache.cpp:
2077
2078         Instead of creating a dummyVariablesUnderTDZ, we simply pass
2079         WTF::nullopt.
2080
2081         (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
2082
2083 2019-04-04  Tadeu Zagallo  <tzagallo@apple.com>
2084
2085         Cache bytecode for jsc.cpp helpers and fix CachedStringImpl
2086         https://bugs.webkit.org/show_bug.cgi?id=196409
2087
2088         Reviewed by Saam Barati.
2089
2090         Some of the helpers in jsc.cpp, such as `functionRunString`, were stll using
2091         using `makeSource` instead of `jscSource`, which does not use the ShellSourceProvider
2092         and therefore does not write the bytecode cache to disk.
2093
2094         Changing that revealed a bug in bytecode cache. The Encoder keeps a mapping
2095         of pointers to offsets of already cached objects, in order to avoid caching
2096         the same object twice. Similarly, the Decoder keeps a mapping from offsets
2097         to pointers, in order to avoid creating multiple objects in memory for the
2098         same cached object. The following was happening:
2099         1) A StringImpl* S was cached as CachedPtr<CachedStringImpl> at offset O. We add
2100         an entry in the Encoder mapping that S has already been encoded at O.
2101         2) We cache StringImpl* S again, but now as CachedPtr<CachedUniquedStringImpl>.
2102         We find an entry in the Encoder mapping for S, and return the offset O. However,
2103         the object cached at O is a CachedPtr<CachedStringImpl> (i.e. not Uniqued).
2104
2105         3) When decoding, there are 2 possibilities:
2106         3.1) We find S for the first time through a CachedPtr<CachedStringImpl>. In
2107         this case, everything works as expected since we add an entry in the decoder
2108         mapping from the offset O to the decoded StringImpl* S. The next time we find
2109         S through the uniqued version, we'll return the already decoded S.
2110         3.2) We find S through a CachedPtr<CachedUniquedStringImpl>. Now we have a
2111         problem, since the CachedPtr has the offset of a CachedStringImpl (not uniqued),
2112         which has a different shape and we crash.
2113
2114         We fix this by making CachedStringImpl and CachedUniquedStringImpl share the
2115         same implementation. Since it doesn't matter whether a string is uniqued for
2116         encoding, and we always decode strings as uniqued either way, they can be used
2117         interchangeably.
2118
2119         * jsc.cpp:
2120         (functionRunString):
2121         (functionLoadString):
2122         (functionDollarAgentStart):
2123         (functionCheckModuleSyntax):
2124         (runInteractive):
2125         * runtime/CachedTypes.cpp:
2126         (JSC::CachedUniquedStringImplBase::decode const):
2127         (JSC::CachedFunctionExecutable::rareData const):
2128         (JSC::CachedCodeBlock::rareData const):
2129         (JSC::CachedFunctionExecutable::encode):
2130         (JSC::CachedCodeBlock<CodeBlockType>::encode):
2131         (JSC::CachedUniquedStringImpl::encode): Deleted.
2132         (JSC::CachedUniquedStringImpl::decode const): Deleted.
2133         (JSC::CachedStringImpl::encode): Deleted.
2134         (JSC::CachedStringImpl::decode const): Deleted.
2135
2136 2019-04-04  Tadeu Zagallo  <tzagallo@apple.com>
2137
2138         UnlinkedCodeBlock constructor from cache should initialize m_didOptimize
2139         https://bugs.webkit.org/show_bug.cgi?id=196396
2140
2141         Reviewed by Saam Barati.
2142
2143         The UnlinkedCodeBlock constructor in CachedTypes was missing the initialization
2144         for m_didOptimize, which leads to crashes in CodeBlock::thresholdForJIT.
2145
2146         * runtime/CachedTypes.cpp:
2147         (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
2148
2149 2019-04-03  Yusuke Suzuki  <ysuzuki@apple.com>
2150
2151         Unreviewed, rolling in r243843 with the build fix
2152         https://bugs.webkit.org/show_bug.cgi?id=196586
2153
2154         * runtime/Options.cpp:
2155         (JSC::recomputeDependentOptions):
2156         * runtime/Options.h:
2157         * runtime/RandomizingFuzzerAgent.cpp:
2158         (JSC::RandomizingFuzzerAgent::getPrediction):
2159
2160 2019-04-03  Ryan Haddad  <ryanhaddad@apple.com>
2161
2162         Unreviewed, rolling out r243843.
2163
2164         Broke CLoop and Windows builds.
2165
2166         Reverted changeset:
2167
2168         "[JSC] Add dump feature for RandomizingFuzzerAgent"
2169         https://bugs.webkit.org/show_bug.cgi?id=196586
2170         https://trac.webkit.org/changeset/243843
2171
2172 2019-04-03  Robin Morisset  <rmorisset@apple.com>
2173
2174         B3 should use associativity to optimize expression trees
2175         https://bugs.webkit.org/show_bug.cgi?id=194081
2176
2177         Reviewed by Filip Pizlo.
2178
2179         This patch adds a new B3 pass, that tries to find and optimize expression trees made purely of any one associative and commutative operator (Add/Mul/BitOr/BitAnd/BitXor).
2180         The pass only runs in O2, and runs once, after lowerMacros and just before a run of B3ReduceStrength (which helps clean up the dead code it tends to leave behind).
2181         I had to separate killDeadCode out of B3ReduceStrength (as a new B3EliminateDeadCode pass) to run it before B3OptimizeAssociativeExpressionTrees, as otherwise it is stopped by high use counts
2182         inherited from CSE.
2183         This extra run of DCE is by itself a win, most notably on microbenchmarks/instanceof-always-hit-two (1.5x faster), and on microbenchmarks/licm-dragons(-out-of-bounds) (both get 1.16x speedup).
2184         I suspect it is because it runs between CSE and tail-dedup, and as a result allows a lot more tail-dedup to occur.
2185
2186         The pass is currently extremely conservative, not trying anything if it would cause _any_ code duplication.
2187         For this purpose, it starts by computing use counts for the potentially interesting nodes (those with the right opcodes), and segregate them into expression trees.
2188         The root of an expression tree is a node that is either used in multiple places, or is used by a value with a different opcode.
2189         The leaves of an expression tree are nodes that are either used in multiple places, or have a different opcode.
2190         All constant leaves of a tree are combined, as well as all leaves that are identical. What remains is then laid out into a balanced binary tree, hopefully maximizing ILP.
2191
2192         This optimization was implemented as a stand-alone pass and not as part of B3ReduceStrength mostly because it needs use counts to avoid code duplication.
2193         It also benefits from finding all tree roots first, and not trying to repeatedly optimize subtrees.
2194
2195         I added several tests to testB3 with varying patterns of trees. It is also tested in a less focused way by lots of older tests.
2196
2197         In the future this pass could be expanded to allow some bounded amount of code duplication, and merging more leaves (e.g. Mul(a, 3) and a in an Add tree, into Mul(a, 4))
2198         The latter will need exposing the peephole optimizations out of B3ReduceStrength to avoid duplicating code.
2199
2200         * JavaScriptCore.xcodeproj/project.pbxproj:
2201         * Sources.txt:
2202         * b3/B3Common.cpp:
2203         (JSC::B3::shouldDumpIR):
2204         (JSC::B3::shouldDumpIRAtEachPhase):
2205         * b3/B3Common.h:
2206         * b3/B3EliminateDeadCode.cpp: Added.
2207         (JSC::B3::EliminateDeadCode::run):
2208         (JSC::B3::eliminateDeadCode):
2209         * b3/B3EliminateDeadCode.h: Added.
2210         (JSC::B3::EliminateDeadCode::EliminateDeadCode):
2211         * b3/B3Generate.cpp:
2212         (JSC::B3::generateToAir):
2213         * b3/B3OptimizeAssociativeExpressionTrees.cpp: Added.
2214         (JSC::B3::OptimizeAssociativeExpressionTrees::OptimizeAssociativeExpressionTrees):
2215         (JSC::B3::OptimizeAssociativeExpressionTrees::neutralElement):
2216         (JSC::B3::OptimizeAssociativeExpressionTrees::isAbsorbingElement):
2217         (JSC::B3::OptimizeAssociativeExpressionTrees::combineConstants):
2218         (JSC::B3::OptimizeAssociativeExpressionTrees::emitValue):
2219         (JSC::B3::OptimizeAssociativeExpressionTrees::optimizeRootedTree):
2220         (JSC::B3::OptimizeAssociativeExpressionTrees::run):
2221         (JSC::B3::optimizeAssociativeExpressionTrees):
2222         * b3/B3OptimizeAssociativeExpressionTrees.h: Added.
2223         * b3/B3ReduceStrength.cpp:
2224         * b3/B3Value.cpp:
2225         (JSC::B3::Value::replaceWithIdentity):
2226         * b3/testb3.cpp:
2227         (JSC::B3::testBitXorTreeArgs):
2228         (JSC::B3::testBitXorTreeArgsEven):
2229         (JSC::B3::testBitXorTreeArgImm):
2230         (JSC::B3::testAddTreeArg32):
2231         (JSC::B3::testMulTreeArg32):
2232         (JSC::B3::testBitAndTreeArg32):
2233         (JSC::B3::testBitOrTreeArg32):
2234         (JSC::B3::run):
2235
2236 2019-04-03  Yusuke Suzuki  <ysuzuki@apple.com>
2237
2238         [JSC] Add dump feature for RandomizingFuzzerAgent
2239         https://bugs.webkit.org/show_bug.cgi?id=196586
2240
2241         Reviewed by Saam Barati.
2242
2243         Towards deterministic tests for the results from randomizing fuzzer agent, this patch adds Options::dumpRandomizingFuzzerAgentPredictions, which dumps the generated types.
2244         The results is like this.
2245
2246             getPrediction name:(#C2q9xD),bytecodeIndex:(22),original:(Array),generated:(OtherObj|Array|Float64Array|BigInt|NonIntAsDouble)
2247             getPrediction name:(makeUnwriteableUnconfigurableObject#AiEJv1),bytecodeIndex:(14),original:(OtherObj),generated:(Final|Uint8Array|Float64Array|SetObject|WeakSetObject|BigInt|NonIntAsDouble)
2248
2249         * runtime/Options.cpp:
2250         (JSC::recomputeDependentOptions):
2251         * runtime/Options.h:
2252         * runtime/RandomizingFuzzerAgent.cpp:
2253         (JSC::RandomizingFuzzerAgent::getPrediction):
2254
2255 2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>
2256
2257         -apple-trailing-word is needed for browser detection
2258         https://bugs.webkit.org/show_bug.cgi?id=196575
2259
2260         Unreviewed.
2261
2262         * Configurations/FeatureDefines.xcconfig:
2263
2264 2019-04-03  Michael Saboff  <msaboff@apple.com>
2265
2266         REGRESSION (r243642): com.apple.JavaScriptCore crash in JSC::RegExpObject::execInline
2267         https://bugs.webkit.org/show_bug.cgi?id=196477
2268
2269         Reviewed by Keith Miller.
2270
2271         The problem here is that when we advance the index by 2 for a character class that only
2272         has non-BMP characters, we might go past the end of the string.  This can happen for
2273         greedy counted character classes that are part of a alternative where there is one
2274         character to match after the greedy non-BMP character class.
2275
2276         The "do we have string left to match" check at the top of the JIT loop for the counted
2277         character class checks to see if index is not equal to the string length.  For non-BMP
2278         character classes, we need to check to see if there are at least 2 characters left.
2279         Therefore we now temporarily add 1 to the current index before comparing.  This checks
2280         to see if there are iat least 2 characters left to match, instead of 1.
2281
2282         * yarr/YarrJIT.cpp:
2283         (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy):
2284         (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
2285
2286 2019-04-03  Yusuke Suzuki  <ysuzuki@apple.com>
2287
2288         [JSC] Exception verification crash on operationArrayIndexOfValueInt32OrContiguous
2289         https://bugs.webkit.org/show_bug.cgi?id=196574
2290
2291         Reviewed by Saam Barati.
2292
2293         This patch adds missing exception check in operationArrayIndexOfValueInt32OrContiguous.
2294
2295         * dfg/DFGOperations.cpp:
2296
2297 2019-04-03  Don Olmstead  <don.olmstead@sony.com>
2298
2299         [CMake][WTF] Mirror XCode header directories
2300         https://bugs.webkit.org/show_bug.cgi?id=191662
2301
2302         Reviewed by Konstantin Tokarev.
2303
2304         Use WTFFramework as a dependency and include frameworks/WTF.cmake for AppleWin internal
2305         builds.
2306
2307         * CMakeLists.txt:
2308         * shell/CMakeLists.txt:
2309
2310 2019-04-03  Yusuke Suzuki  <ysuzuki@apple.com>
2311
2312         [JSC] Add FuzzerAgent, which has a hooks to get feedback & inject fuzz data into JSC
2313         https://bugs.webkit.org/show_bug.cgi?id=196530
2314
2315         Reviewed by Saam Barati.
2316
2317         This patch adds FuzzerAgent interface and simple RandomizingFuzzerAgent to JSC.
2318         This RandomizingFuzzerAgent returns random SpeculatedType for value profiling to find
2319         the issues in JSC. The seed for randomization can be specified by seedOfRandomizingFuzzerAgent.
2320
2321         I ran this with seedOfRandomizingFuzzerAgent=1 last night and it finds 3 failures in the current JSC tests,
2322         they should be fixed in subsequent patches.
2323
2324         * CMakeLists.txt:
2325         * JavaScriptCore.xcodeproj/project.pbxproj:
2326         * Sources.txt:
2327         * dfg/DFGByteCodeParser.cpp:
2328         (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
2329         * runtime/FuzzerAgent.cpp: Added.
2330         (JSC::FuzzerAgent::~FuzzerAgent):
2331         (JSC::FuzzerAgent::getPrediction):
2332         * runtime/FuzzerAgent.h: Added.
2333         * runtime/JSGlobalObjectFunctions.cpp:
2334         * runtime/Options.h:
2335         * runtime/RandomizingFuzzerAgent.cpp: Added.
2336         (JSC::RandomizingFuzzerAgent::RandomizingFuzzerAgent):
2337         (JSC::RandomizingFuzzerAgent::getPrediction):
2338         * runtime/RandomizingFuzzerAgent.h: Added.
2339         * runtime/RegExpCachedResult.h:
2340         * runtime/RegExpGlobalData.cpp:
2341         * runtime/VM.cpp:
2342         (JSC::VM::VM):
2343         * runtime/VM.h:
2344         (JSC::VM::fuzzerAgent const):
2345         (JSC::VM::setFuzzerAgent):
2346
2347 2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>
2348
2349         Remove support for -apple-trailing-word
2350         https://bugs.webkit.org/show_bug.cgi?id=196525
2351
2352         Reviewed by Zalan Bujtas.
2353
2354         This CSS property is nonstandard and not used.
2355
2356         * Configurations/FeatureDefines.xcconfig:
2357
2358 2019-04-03  Joseph Pecoraro  <pecoraro@apple.com>
2359
2360         Web Inspector: Remote Inspector indicate callback should always happen on the main thread
2361         https://bugs.webkit.org/show_bug.cgi?id=196513
2362         <rdar://problem/49498284>
2363
2364         Reviewed by Devin Rousso.
2365
2366         * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
2367         (Inspector::RemoteInspector::receivedIndicateMessage):
2368         When we have a WebThread, don't just run on the WebThread,
2369         run on the MainThread with the WebThreadLock.
2370
2371 2019-04-02  Michael Saboff  <msaboff@apple.com>
2372
2373         Crash in Options::setOptions() using --configFile option and libgmalloc
2374         https://bugs.webkit.org/show_bug.cgi?id=196506
2375
2376         Reviewed by Keith Miller.
2377
2378         Changed to call CString::data() while making the call to Options::setOptions().  This keeps
2379         the implicit CString temporary alive until after setOptions() returns.
2380
2381         * runtime/ConfigFile.cpp:
2382         (JSC::ConfigFile::parse):
2383
2384 2019-04-02  Fujii Hironori  <Hironori.Fujii@sony.com>
2385
2386         [CMake] WEBKIT_MAKE_FORWARDING_HEADERS shouldn't use POST_BUILD to copy generated headers
2387         https://bugs.webkit.org/show_bug.cgi?id=182757
2388
2389         Reviewed by Don Olmstead.
2390
2391         * CMakeLists.txt: Do not use DERIVED_SOURCE_DIRECTORIES parameter
2392         of WEBKIT_MAKE_FORWARDING_HEADERS. Added generated headers to
2393         JavaScriptCore_PRIVATE_FRAMEWORK_HEADERS.
2394
2395 2019-04-02  Saam barati  <sbarati@apple.com>
2396
2397         Add a ValueRepReduction phase
2398         https://bugs.webkit.org/show_bug.cgi?id=196234
2399
2400         Reviewed by Filip Pizlo.
2401
2402         This patch adds a ValueRepReduction phase. The main idea here is
2403         to try to reduce DoubleRep(RealNumberUse:ValueRep(DoubleRepUse:@x))
2404         to just be @x. This patch handles such above strengh reduction rules
2405         as long as we prove that all users of the ValueRep can be converted
2406         to using the incoming double value. That way we prevent introducing
2407         a parallel live range for the double value.
2408         
2409         This patch tracks the uses of the ValueRep through Phi variables,
2410         so we can convert entire Phi variables to being Double instead
2411         of JSValue if the Phi also has only double uses.
2412         
2413         This is implemented through a simple escape analysis. DoubleRep(RealNumberUse:)
2414         and OSR exit hints are not counted as escapes. All other uses are counted
2415         as escapes. Connected Phi graphs are converted to being Double only if the
2416         entire graph is ok with the result being Double.
2417         
2418         Some ways we could extend this phase in the future:
2419         - There are a lot of DoubleRep(NumberUse:@ValueRep(@x)) uses. This ensures
2420           that the result of the DoubleRep of @x is not impure NaN. We could
2421           handle this case if we introduced a PurifyNaN node and replace the DoubleRep
2422           with PurifyNaN(@x). Alternatively, we could see if certain users of this
2423           DoubleRep are okay with impure NaN flowing into them and we'd need to ensure
2424           their output type is always treated as if the input is impure NaN.
2425         - We could do sinking of ValueRep where we think it's profitable. So instead
2426           of an escape making it so we never represent the variable as a Double, we
2427           could make the escape reconstruct the JSValueRep where profitable.
2428         - We can extend this phase to handle Int52Rep if it's profitable.
2429         - We can opt other nodes into accepting incoming Doubles so we no longer
2430           treat them as escapes.
2431         
2432         This patch is somewhere between neutral and a 1% progression on JetStream 2.
2433
2434         * JavaScriptCore.xcodeproj/project.pbxproj:
2435         * Sources.txt:
2436         * dfg/DFGPlan.cpp:
2437         (JSC::DFG::Plan::compileInThreadImpl):
2438         * dfg/DFGValueRepReductionPhase.cpp: Added.
2439         (JSC::DFG::ValueRepReductionPhase::ValueRepReductionPhase):
2440         (JSC::DFG::ValueRepReductionPhase::run):
2441         (JSC::DFG::ValueRepReductionPhase::convertValueRepsToDouble):
2442         (JSC::DFG::performValueRepReduction):
2443         * dfg/DFGValueRepReductionPhase.h: Added.
2444         * runtime/Options.h:
2445
2446 2019-04-01  Yusuke Suzuki  <ysuzuki@apple.com>
2447
2448         [JSC] JSRunLoopTimer::Manager should be small
2449         https://bugs.webkit.org/show_bug.cgi?id=196425
2450
2451         Reviewed by Darin Adler.
2452
2453         Using very large Key or Value in HashMap potentially bloats memory since HashMap pre-allocates large size of
2454         memory ((sizeof(Key) + sizeof(Value)) * N) for its backing storage's array. Using std::unique_ptr<> for JSRunLoopTimer's
2455         PerVMData to keep HashMap's backing store size small.
2456
2457         * runtime/JSRunLoopTimer.cpp:
2458         (JSC::JSRunLoopTimer::Manager::timerDidFire):
2459         (JSC::JSRunLoopTimer::Manager::registerVM):
2460         (JSC::JSRunLoopTimer::Manager::scheduleTimer):
2461         (JSC::JSRunLoopTimer::Manager::cancelTimer):
2462         (JSC::JSRunLoopTimer::Manager::timeUntilFire):
2463         (JSC::JSRunLoopTimer::Manager::didChangeRunLoop):
2464         * runtime/JSRunLoopTimer.h:
2465
2466 2019-04-01  Stephan Szabo  <stephan.szabo@sony.com>
2467
2468         [PlayStation] Add initialization for JSC shell for PlayStation port
2469         https://bugs.webkit.org/show_bug.cgi?id=195411
2470
2471         Reviewed by Ross Kirsling.
2472
2473         Add ps options
2474
2475         * shell/PlatformPlayStation.cmake: Added.
2476         * shell/playstation/Initializer.cpp: Added.
2477         (initializer):
2478
2479 2019-04-01  Michael Catanzaro  <mcatanzaro@igalia.com>
2480
2481         Stop trying to support building JSC with clang 3.8
2482         https://bugs.webkit.org/show_bug.cgi?id=195947
2483         <rdar://problem/49069219>
2484
2485         Reviewed by Darin Adler.
2486
2487         It seems WebKit hasn't built with clang 3.8 in a while, no devs are using this compiler, we
2488         don't know how much effort it would be to make JSC work again, and it's making the code
2489         worse. Remove my hacks to support clang 3.8 from JSC.
2490
2491         * bindings/ScriptValue.cpp:
2492         (Inspector::jsToInspectorValue):
2493         * bytecode/GetterSetterAccessCase.cpp:
2494         (JSC::GetterSetterAccessCase::create):
2495         (JSC::GetterSetterAccessCase::clone const):
2496         * bytecode/InstanceOfAccessCase.cpp:
2497         (JSC::InstanceOfAccessCase::clone const):
2498         * bytecode/IntrinsicGetterAccessCase.cpp:
2499         (JSC::IntrinsicGetterAccessCase::clone const):
2500         * bytecode/ModuleNamespaceAccessCase.cpp:
2501         (JSC::ModuleNamespaceAccessCase::clone const):
2502         * bytecode/ProxyableAccessCase.cpp:
2503         (JSC::ProxyableAccessCase::clone const):
2504
2505 2019-03-31  Yusuke Suzuki  <ysuzuki@apple.com>
2506
2507         [JSC] Butterfly allocation from LargeAllocation should try "realloc" behavior if collector thread is not active
2508         https://bugs.webkit.org/show_bug.cgi?id=196160
2509
2510         Reviewed by Saam Barati.
2511
2512         "realloc" can be effective in terms of peak/current memory footprint when realloc succeeds because,
2513
2514         1. It does not allocate additional memory while expanding a vector
2515         2. It does not deallocate an old memory, just reusing the current memory by expanding, so that memory footprint is tight even before scavenging
2516
2517         We found that we can "realloc" large butterflies in certain conditions are met because,
2518
2519         1. If it goes to LargeAllocation, this memory region is never reused until GC sweeps it.
2520         2. Butterflies are owned by owner JSObjects, so we know the lifetime of Butterflies.
2521
2522         This patch attempts to use "realloc" onto butterflies if,
2523
2524         1. Butterflies are allocated in LargeAllocation kind
2525         2. Concurrent collector is not active
2526         3. Butterflies do not have property storage
2527
2528         The condition (2) is required to avoid deallocating butterflies while the concurrent collector looks into it. The condition (3) is
2529         also required to avoid deallocating butterflies while the concurrent compiler looks into it.
2530
2531         We also change LargeAllocation mechanism to using "malloc" and "free" instead of "posix_memalign". This allows us to use "realloc"
2532         safely in all the platforms. Since LargeAllocation uses alignment to distinguish LargeAllocation and MarkedBlock, we manually adjust
2533         16B alignment by allocating 8B more memory in "malloc".
2534
2535         Speedometer2 and JetStream2 are neutral. RAMification shows about 1% progression (even in some of JIT tests).
2536
2537         * heap/AlignedMemoryAllocator.h:
2538         * heap/CompleteSubspace.cpp:
2539         (JSC::CompleteSubspace::tryAllocateSlow):
2540         (JSC::CompleteSubspace::reallocateLargeAllocationNonVirtual):
2541         * heap/CompleteSubspace.h:
2542         * heap/FastMallocAlignedMemoryAllocator.cpp:
2543         (JSC::FastMallocAlignedMemoryAllocator::tryAllocateMemory):
2544         (JSC::FastMallocAlignedMemoryAllocator::freeMemory):
2545         (JSC::FastMallocAlignedMemoryAllocator::tryReallocateMemory):
2546         * heap/FastMallocAlignedMemoryAllocator.h:
2547         * heap/GigacageAlignedMemoryAllocator.cpp:
2548         (JSC::GigacageAlignedMemoryAllocator::tryAllocateMemory):
2549         (JSC::GigacageAlignedMemoryAllocator::freeMemory):
2550         (JSC::GigacageAlignedMemoryAllocator::tryReallocateMemory):
2551         * heap/GigacageAlignedMemoryAllocator.h:
2552         * heap/IsoAlignedMemoryAllocator.cpp:
2553         (JSC::IsoAlignedMemoryAllocator::tryAllocateMemory):
2554         (JSC::IsoAlignedMemoryAllocator::freeMemory):
2555         (JSC::IsoAlignedMemoryAllocator::tryReallocateMemory):
2556         * heap/IsoAlignedMemoryAllocator.h:
2557         * heap/LargeAllocation.cpp:
2558         (JSC::isAlignedForLargeAllocation):
2559         (JSC::LargeAllocation::tryCreate):
2560         (JSC::LargeAllocation::tryReallocate):
2561         (JSC::LargeAllocation::LargeAllocation):
2562         (JSC::LargeAllocation::destroy):
2563         * heap/LargeAllocation.h:
2564         (JSC::LargeAllocation::indexInSpace):
2565         (JSC::LargeAllocation::setIndexInSpace):
2566         (JSC::LargeAllocation::basePointer const):
2567         * heap/MarkedSpace.cpp:
2568         (JSC::MarkedSpace::sweepLargeAllocations):
2569         (JSC::MarkedSpace::prepareForConservativeScan):
2570         * heap/WeakSet.h:
2571         (JSC::WeakSet::isTriviallyDestructible const):
2572         * runtime/Butterfly.h:
2573         * runtime/ButterflyInlines.h:
2574         (JSC::Butterfly::reallocArrayRightIfPossible):
2575         * runtime/JSObject.cpp:
2576         (JSC::JSObject::ensureLengthSlow):
2577
2578 2019-03-31  Sam Weinig  <weinig@apple.com>
2579
2580         Remove more i386 specific configurations
2581         https://bugs.webkit.org/show_bug.cgi?id=196430
2582
2583         Reviewed by Alexey Proskuryakov.
2584
2585         * Configurations/FeatureDefines.xcconfig:
2586         ENABLE_WEB_AUTHN_macosx can now be enabled unconditionally on macOS.
2587
2588         * Configurations/ToolExecutable.xcconfig:
2589         ARC can be enabled unconditionally now.
2590
2591 2019-03-29  Yusuke Suzuki  <ysuzuki@apple.com>
2592
2593         [JSC] JSWrapperMap should not use Objective-C Weak map (NSMapTable with NSPointerFunctionsWeakMemory) for m_cachedObjCWrappers
2594         https://bugs.webkit.org/show_bug.cgi?id=196392
2595
2596         Reviewed by Saam Barati.
2597
2598         Weak representation in Objective-C is surprisingly costly in terms of memory. We can see that very easy program shows 10KB memory consumption due to
2599         this weak wrapper map in JavaScriptCore.framework. But we do not need this weak map since Objective-C JSValue has a dealloc. We can unregister itself
2600         from the map when it is deallocated without using Objective-C weak mechanism. And since Objective-C JSValue is tightly coupled to a specific JSContext,
2601         and wrapper map is created per JSContext, JSValue wrapper and actual JavaScriptCore value is one-on-one, and [JSValue dealloc] knows which JSContext's
2602         wrapper map holds itself.
2603
2604         1. We do not use Objective-C weak mechanism. We use WTF::HashSet instead. When JSValue is allocated, we register it to JSWrapperMap's HashSet. And unregister
2605            JSValue from this map when JSValue is deallocated.
2606         2. We use HashSet<JSValue> (logically) instead of HashMap<JSValueRef, JSValue> to keep JSValueRef and JSValue relationship. We can achieve it because JSValue
2607            holds JSValueRef inside it.
2608
2609         * API/JSContext.mm:
2610         (-[JSContext removeWrapper:]):
2611         * API/JSContextInternal.h:
2612         * API/JSValue.mm:
2613         (-[JSValue dealloc]):
2614         (-[JSValue initWithValue:inContext:]):
2615         * API/JSWrapperMap.h:
2616         * API/JSWrapperMap.mm:
2617         (WrapperKey::hashTableDeletedValue):
2618         (WrapperKey::WrapperKey):
2619         (WrapperKey::isHashTableDeletedValue const):
2620         (WrapperKey::Hash::hash):
2621         (WrapperKey::Hash::equal):
2622         (WrapperKey::Traits::isEmptyValue):
2623         (WrapperKey::Translator::hash):
2624         (WrapperKey::Translator::equal):
2625         (WrapperKey::Translator::translate):
2626         (-[JSWrapperMap initWithGlobalContextRef:]):
2627         (-[JSWrapperMap dealloc]):
2628         (-[JSWrapperMap objcWrapperForJSValueRef:inContext:]):
2629         (-[JSWrapperMap removeWrapper:]):
2630         * API/tests/testapi.mm:
2631         (testObjectiveCAPIMain):
2632
2633 2019-03-29  Robin Morisset  <rmorisset@apple.com>
2634
2635         B3ReduceStrength should know that Mul distributes over Add and Sub
2636         https://bugs.webkit.org/show_bug.cgi?id=196325
2637
2638         Reviewed by Michael Saboff.
2639
2640         In this patch I add the following patterns to B3ReduceStrength:
2641         - Turn this: Integer Neg(Mul(value, c))
2642           Into this: Mul(value, -c), as long as -c does not overflow
2643         - Turn these: Integer Mul(value, Neg(otherValue)) and Integer Mul(Neg(value), otherValue)
2644           Into this: Neg(Mul(value, otherValue))
2645         - For Op==Add or Sub, turn any of these:
2646              Op(Mul(x1, x2), Mul(x1, x3))
2647              Op(Mul(x2, x1), Mul(x1, x3))
2648              Op(Mul(x1, x2), Mul(x3, x1))
2649              Op(Mul(x2, x1), Mul(x3, x1))
2650           Into this: Mul(x1, Op(x2, x3))
2651
2652         Also includes a trivial change: a similar reduction for the distributivity of BitAnd over BitOr/BitXor now
2653         emits the arguments to BitAnd in the other order, to minimize the probability that we'll spend a full fixpoint step just to flip them.
2654
2655         * b3/B3ReduceStrength.cpp:
2656         * b3/testb3.cpp:
2657         (JSC::B3::testAddMulMulArgs):
2658         (JSC::B3::testMulArgNegArg):
2659         (JSC::B3::testMulNegArgArg):
2660         (JSC::B3::testNegMulArgImm):
2661         (JSC::B3::testSubMulMulArgs):
2662         (JSC::B3::run):
2663
2664 2019-03-29  Yusuke Suzuki  <ysuzuki@apple.com>
2665
2666         [JSC] Remove distancing for LargeAllocation
2667         https://bugs.webkit.org/show_bug.cgi?id=196335
2668
2669         Reviewed by Saam Barati.
2670
2671         In r230226, we removed distancing feature from our GC. This patch removes remaining distancing thing in LargeAllocation.
2672
2673         * heap/HeapCell.h:
2674         * heap/LargeAllocation.cpp:
2675         (JSC::LargeAllocation::tryCreate):
2676         * heap/MarkedBlock.h:
2677
2678 2019-03-29  Myles C. Maxfield  <mmaxfield@apple.com>
2679
2680         Delete WebMetal implementation in favor of WebGPU
2681         https://bugs.webkit.org/show_bug.cgi?id=195418
2682
2683         Reviewed by Dean Jackson.
2684
2685         * Configurations/FeatureDefines.xcconfig:
2686         * inspector/protocol/Canvas.json:
2687         * inspector/scripts/codegen/generator.py:
2688
2689 2019-03-29  Tadeu Zagallo  <tzagallo@apple.com>
2690
2691         Assertion failed in JSC::createError
2692         https://bugs.webkit.org/show_bug.cgi?id=196305
2693         <rdar://problem/49387382>
2694
2695         Reviewed by Saam Barati.
2696
2697         JSC::createError assumes that `errorDescriptionForValue` will either
2698         throw an exception or return a valid description string. However, that
2699         is not true if the value is a rope string and we successfully resolve it,
2700         but later fail to wrap the string in quotes with `tryMakeString`.
2701
2702         * runtime/ExceptionHelpers.cpp:
2703         (JSC::createError):
2704
2705 2019-03-29  Devin Rousso  <drousso@apple.com>
2706
2707         Web Inspector: add fast returns for instrumentation hooks that have no affect before a frontend is connected
2708         https://bugs.webkit.org/show_bug.cgi?id=196382
2709         <rdar://problem/49403417>
2710
2711         Reviewed by Joseph Pecoraro.
2712
2713         Ensure that all instrumentation hooks use `FAST_RETURN_IF_NO_FRONTENDS` or check that
2714         `developerExtrasEnabled`. There should be no activity to/from any inspector objects until
2715         developer extras are enabled.
2716
2717         * inspector/agents/InspectorConsoleAgent.cpp:
2718         (Inspector::InspectorConsoleAgent::startTiming):
2719         (Inspector::InspectorConsoleAgent::stopTiming):
2720         (Inspector::InspectorConsoleAgent::count):
2721         (Inspector::InspectorConsoleAgent::addConsoleMessage):
2722
2723 2019-03-29  Cathie Chen  <cathiechen@igalia.com>
2724
2725         Implement ResizeObserver.
2726         https://bugs.webkit.org/show_bug.cgi?id=157743
2727
2728         Reviewed by Simon Fraser.
2729
2730         Add ENABLE_RESIZE_OBSERVER.
2731
2732         * Configurations/FeatureDefines.xcconfig:
2733
2734 2019-03-28  Michael Saboff  <msaboff@apple.com>
2735
2736         [YARR] Precompute BMP / non-BMP status when constructing character classes
2737         https://bugs.webkit.org/show_bug.cgi?id=196296
2738
2739         Reviewed by Keith Miller.
2740
2741         Changed CharacterClass::m_hasNonBMPCharacters into a character width bit field which
2742         indicateis if the class includes characters from either BMP, non-BMP or both ranges.
2743         This allows the recognizing code to eliminate checks for the width of a matched
2744         characters when the class has only one width.  The character width is needed to
2745         determine if we advance 1 or 2 character.  Also, the pre-computed width of character
2746         classes that contains either all BMP or all non-BMP characters allows the parser to
2747         use fixed widths for terms using those character classes.  Changed both the code gen
2748         scripts and Yarr compiler to compute this bit field during the construction of
2749         character classes.
2750
2751         For JIT'ed code of character classes that contain either all BMP or all non-BMP
2752         characters, we can eliminate the generic check we were doing do compute how much
2753         to advance after sucessfully matching a character in the class.
2754
2755                 Generic isBMP check      BMP only            non-BMP only
2756                 --------------           --------------      --------------
2757                 inc %r9d                 inc %r9d            add $0x2, %r9d
2758                 cmp $0x10000, %eax
2759                 jl isBMP
2760                 cmp %edx, %esi
2761                 jz atEndOfString
2762                 inc %r9d
2763                 inc %esi
2764          isBMP:
2765
2766         For character classes that contained non-BMP characters, we were always generating
2767         the code in the left column.  The middle column is the code we generate for character
2768         classes that contain only BMP characters.  The right column is the code we now
2769         generate if the character class has only non-BMP characters.  In the fix width cases,
2770         we can eliminate both the isBMP check as well as the atEndOfString check.  The
2771         atEndOfstring check is eliminated since we know how many characters this character
2772         class requires and that check can be factored out to the beginning of the current
2773         alternative.  For character classes that contain both BMP and non-BMP characters,
2774         we still generate the generic left column.
2775
2776         This change is a ~8% perf progression on UniPoker and a ~2% improvement on RexBench
2777         as a whole.
2778
2779         * runtime/RegExp.cpp:
2780         (JSC::RegExp::matchCompareWithInterpreter):
2781         * runtime/RegExpInlines.h:
2782         (JSC::RegExp::matchInline):
2783         * yarr/YarrInterpreter.cpp:
2784         (JSC::Yarr::Interpreter::checkCharacterClassDontAdvanceInputForNonBMP):
2785         (JSC::Yarr::Interpreter::matchCharacterClass):
2786         * yarr/YarrJIT.cpp:
2787         (JSC::Yarr::YarrGenerator::optimizeAlternative):
2788         (JSC::Yarr::YarrGenerator::matchCharacterClass):
2789         (JSC::Yarr::YarrGenerator::advanceIndexAfterCharacterClassTermMatch):
2790         (JSC::Yarr::YarrGenerator::tryReadUnicodeCharImpl):
2791         (JSC::Yarr::YarrGenerator::generateCharacterClassOnce):
2792         (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
2793         (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy):
2794         (JSC::Yarr::YarrGenerator::backtrackCharacterClassGreedy):
2795         (JSC::Yarr::YarrGenerator::generateCharacterClassNonGreedy):
2796         (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
2797         (JSC::Yarr::YarrGenerator::generateEnter):
2798         (JSC::Yarr::YarrGenerator::YarrGenerator):
2799         (JSC::Yarr::YarrGenerator::compile):
2800         * yarr/YarrPattern.cpp:
2801         (JSC::Yarr::CharacterClassConstructor::CharacterClassConstructor):
2802         (JSC::Yarr::CharacterClassConstructor::reset):
2803         (JSC::Yarr::CharacterClassConstructor::charClass):
2804         (JSC::Yarr::CharacterClassConstructor::addSorted):
2805         (JSC::Yarr::CharacterClassConstructor::addSortedRange):
2806         (JSC::Yarr::CharacterClassConstructor::hasNonBMPCharacters):
2807         (JSC::Yarr::CharacterClassConstructor::characterWidths):
2808         (JSC::Yarr::PatternTerm::dump):
2809         (JSC::Yarr::anycharCreate):
2810         * yarr/YarrPattern.h:
2811         (JSC::Yarr::operator|):
2812         (JSC::Yarr::operator&):
2813         (JSC::Yarr::operator|=):
2814         (JSC::Yarr::CharacterClass::CharacterClass):
2815         (JSC::Yarr::CharacterClass::hasNonBMPCharacters):
2816         (JSC::Yarr::CharacterClass::hasOneCharacterSize):
2817         (JSC::Yarr::CharacterClass::hasOnlyNonBMPCharacters):
2818         (JSC::Yarr::PatternTerm::invert const):
2819         (JSC::Yarr::PatternTerm::invert): Deleted.
2820         * yarr/create_regex_tables:
2821         * yarr/generateYarrUnicodePropertyTables.py:
2822
2823 2019-03-28  Saam Barati  <sbarati@apple.com>
2824
2825         BackwardsGraph needs to consider back edges as the backward's root successor
2826         https://bugs.webkit.org/show_bug.cgi?id=195991
2827
2828         Reviewed by Filip Pizlo.
2829
2830         * b3/testb3.cpp:
2831         (JSC::B3::testInfiniteLoopDoesntCauseBadHoisting):
2832         (JSC::B3::run):
2833
2834 2019-03-28  Fujii Hironori  <Hironori.Fujii@sony.com>
2835
2836         Opcode.h(159,27): warning: adding 'unsigned int' to a string does not append to the string [-Wstring-plus-int]
2837         https://bugs.webkit.org/show_bug.cgi?id=196343
2838
2839         Reviewed by Saam Barati.
2840
2841         Clang reports a compilation warning and recommend '&PADDING_STRING[PADDING_STRING_LENGTH]'
2842         instead of 'PADDING_STRING + PADDING_STRING_LENGTH'.
2843
2844         * bytecode/Opcode.cpp:
2845         (JSC::padOpcodeName): Moved padOpcodeName from Opcode.h because
2846         this function is used only in Opcode.cpp. Changed macros
2847         PADDING_STRING and PADDING_STRING_LENGTH to simple variables.
2848         (JSC::compareOpcodePairIndices): Replaced pair with std::pair.
2849         * bytecode/Opcode.h:
2850         (JSC::padOpcodeName): Moved.
2851
2852 2019-03-28  Tadeu Zagallo  <tzagallo@apple.com>
2853
2854         CodeBlock::jettison() should disallow repatching its own calls
2855         https://bugs.webkit.org/show_bug.cgi?id=196359
2856         <rdar://problem/48973663>
2857
2858         Reviewed by Saam Barati.
2859
2860         CodeBlock::jettison() calls CommonData::invalidate, which replaces the `hlt`
2861         instruction with the jump to OSR exit. However, if the `hlt` was immediately
2862         followed by a call to the CodeBlock being jettisoned, we would write over the
2863         OSR exit address while unlinking all the incoming CallLinkInfos later in
2864         CodeBlock::jettison().
2865
2866         Change it so that we set a flag, `clearedByJettison`, in all the CallLinkInfos
2867         owned by the CodeBlock being jettisoned. If the flag is set, we will avoid
2868         repatching the call during unlinking. This is safe because this call will never
2869         be reachable again after the CodeBlock is jettisoned.
2870
2871         * bytecode/CallLinkInfo.cpp:
2872         (JSC::CallLinkInfo::CallLinkInfo):
2873         (JSC::CallLinkInfo::setCallee):
2874         (JSC::CallLinkInfo::clearCallee):
2875         (JSC::CallLinkInfo::setCodeBlock):
2876         (JSC::CallLinkInfo::clearCodeBlock):
2877         * bytecode/CallLinkInfo.h:
2878         (JSC::CallLinkInfo::clearedByJettison):
2879         (JSC::CallLinkInfo::setClearedByJettison):
2880         * bytecode/CodeBlock.cpp:
2881         (JSC::CodeBlock::jettison):
2882         * jit/Repatch.cpp:
2883         (JSC::revertCall):
2884
2885 2019-03-27  Yusuke Suzuki  <ysuzuki@apple.com>
2886
2887         [JSC] Drop VM and Context cache map in JavaScriptCore.framework
2888         https://bugs.webkit.org/show_bug.cgi?id=196341
2889
2890         Reviewed by Saam Barati.
2891
2892         Previously, we created Objective-C weak map to maintain JSVirtualMachine and JSContext wrappers corresponding to VM and JSGlobalObject.
2893         But Objective-C weak map is really memory costly. Even if the entry is only one, it consumes 2.5KB per weak map. Since we can modify
2894         JSC intrusively for JavaScriptCore.framework (and we already did it, like, holding JSWrapperMap in JSGlobalObject), we can just hold
2895         a pointer to a wrapper in VM and JSGlobalObject.
2896
2897         This patch adds void* members to VM and JSGlobalObject, which holds a non-strong reference to a wrapper. When a wrapper is gone, we
2898         clear this pointer too. This removes unnecessary two Objective-C weak maps, and save 5KB.
2899
2900         * API/JSContext.mm:
2901         (-[JSContext initWithVirtualMachine:]):
2902         (-[JSContext dealloc]):
2903         (-[JSContext initWithGlobalContextRef:]):
2904         (-[JSContext wrapperMap]):
2905         (+[JSContext contextWithJSGlobalContextRef:]):
2906         * API/JSVirtualMachine.mm:
2907         (-[JSVirtualMachine initWithContextGroupRef:]):
2908         (-[JSVirtualMachine dealloc]):
2909         (+[JSVirtualMachine virtualMachineWithContextGroupRef:]):
2910         (scanExternalObjectGraph):
2911         (scanExternalRememberedSet):
2912         (initWrapperCache): Deleted.
2913         (wrapperCache): Deleted.
2914         (+[JSVMWrapperCache addWrapper:forJSContextGroupRef:]): Deleted.
2915         (+[JSVMWrapperCache wrapperForJSContextGroupRef:]): Deleted.
2916         (-[JSVirtualMachine contextForGlobalContextRef:]): Deleted.
2917         (-[JSVirtualMachine addContext:forGlobalContextRef:]): Deleted.
2918         * API/JSVirtualMachineInternal.h:
2919         * runtime/JSGlobalObject.h:
2920         (JSC::JSGlobalObject::setAPIWrapper):
2921         (JSC::JSGlobalObject::apiWrapper const):
2922         * runtime/VM.h:
2923
2924 2019-03-28  Tadeu Zagallo  <tzagallo@apple.com>
2925
2926         In-memory code cache should not share bytecode across domains
2927         https://bugs.webkit.org/show_bug.cgi?id=196321
2928
2929         Reviewed by Geoffrey Garen.
2930
2931         Use the SourceProvider's URL to make sure that the hosts match for the
2932         two SourceCodeKeys in operator==.
2933
2934         * parser/SourceCodeKey.h:
2935         (JSC::SourceCodeKey::host const):
2936         (JSC::SourceCodeKey::operator== const):
2937
2938 2019-03-28  Víctor Manuel Jáquez Leal  <vjaquez@igalia.com>
2939
2940         Silence lot of warnings when compiling with clang
2941         https://bugs.webkit.org/show_bug.cgi?id=196310
2942
2943         Reviewed by Michael Catanzaro.
2944
2945         Initialize variable with default constructor.
2946
2947         * API/glib/JSCOptions.cpp:
2948         (jsc_options_foreach):
2949
2950 2019-03-27  Saam Barati  <sbarati@apple.com>
2951
2952         validateOSREntryValue with Int52 should box the value being checked into double format
2953         https://bugs.webkit.org/show_bug.cgi?id=196313
2954         <rdar://problem/49306703>
2955
2956         Reviewed by Yusuke Suzuki.
2957
2958         * dfg/DFGOSREntry.cpp:
2959         (JSC::DFG::prepareOSREntry):
2960         * ftl/FTLLowerDFGToB3.cpp:
2961         (JSC::FTL::DFG::LowerDFGToB3::validateAIState):
2962
2963 2019-03-27  Yusuke Suzuki  <ysuzuki@apple.com>
2964
2965         [JSC] Owner of watchpoints should validate at GC finalizing phase
2966         https://bugs.webkit.org/show_bug.cgi?id=195827
2967
2968         Reviewed by Filip Pizlo.
2969
2970         This patch fixes JSC's watchpoint liveness issue by the following two policies.
2971
2972         1. Watchpoint should have owner cell, and "fire" operation should be gaurded with owner cell's isLive check.
2973
2974         Watchpoints should hold its owner cell, and fire procedure should be guarded by `owner->isLive()`.
2975         When the owner cell is destroyed, these watchpoints are destroyed too. But this destruction can
2976         be delayed due to incremental sweeper. So the following condition can happen.
2977
2978         When we have a watchpoint like the following.
2979
2980             class XXXWatchpoint {
2981                 ObjectPropertyCondition m_key;
2982                 JSCell* m_owner;
2983             };
2984
2985         Both m_key's cell and m_owner is now unreachable from the root. So eventually, m_owner cell's destructor
2986         is called and this watchpoint will be destroyed. But before that, m_key's cell can be destroyed. And this
2987         watchpoint's fire procedure can be called since m_owner's destructor is not called yet. In this situation,
2988         we encounter the destroyed cell held in m_key. This problem can be avoided if we guard fire procedure with
2989         `m_owner->isLive()`. Until the owner cell is destroyed, this guard avoids "fire" procedure execution. And
2990         once the destructor of m_owner is called, this watchpoint will be destroyed too.
2991
2992         2. Watchpoint liveness should be maintained by owner cell's unconditional finalizer
2993
2994         Watchpoints often hold weak references to the other cell (like, m_key in the above example). If we do not
2995         delete watchpoints with dead cells when these weak cells become dead, these watchpoints continue holding dead cells,
2996         and watchpoint's fire operation can use these dead cells accidentally. isLive / isStillLive check for these weak cells
2997         in fire operation is not useful. Because these dead cells can be reused to the other live cells eventually, and this
2998         isLive / isStillLive checks fail to see these cells are live if they are reused. Appropriate way is deleting watchpoints
2999         with dead cells when finalizing GC. In this patch, we do this in unconditional finalizers in owner cells of watchpoints.
3000         We already did this in CodeBlock etc. We add the same thing to StructureRareData which owns watchpoints for toString operations.
3001
3002         * JavaScriptCore.xcodeproj/project.pbxproj:
3003         * Sources.txt:
3004         * bytecode/AdaptiveInferredPropertyValueWatchpointBase.h:
3005         (JSC::AdaptiveInferredPropertyValueWatchpointBase::StructureWatchpoint::StructureWatchpoint): Deleted.
3006         (JSC::AdaptiveInferredPropertyValueWatchpointBase::PropertyWatchpoint::PropertyWatchpoint): Deleted.
3007         * bytecode/CodeBlockJettisoningWatchpoint.h:
3008         (JSC::CodeBlockJettisoningWatchpoint::CodeBlockJettisoningWatchpoint): Deleted.
3009         * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
3010         (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::LLIntPrototypeLoadAdaptiveStructureWatchpoint):
3011         (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::fireInternal):
3012         * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h:
3013         (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::key const): Deleted.
3014         * bytecode/StructureStubClearingWatchpoint.cpp:
3015         (JSC::StructureStubClearingWatchpoint::fireInternal):
3016         (JSC::WatchpointsOnStructureStubInfo::isValid const):
3017         * bytecode/StructureStubClearingWatchpoint.h:
3018         (JSC::StructureStubClearingWatchpoint::StructureStubClearingWatchpoint): Deleted.
3019         * dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:
3020         (JSC::DFG::AdaptiveInferredPropertyValueWatchpoint::isValid const):
3021         * dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:
3022         * dfg/DFGAdaptiveStructureWatchpoint.cpp:
3023         (JSC::DFG::AdaptiveStructureWatchpoint::fireInternal):
3024         * dfg/DFGAdaptiveStructureWatchpoint.h:
3025         (JSC::DFG::AdaptiveStructureWatchpoint::key const): Deleted.
3026         * dfg/DFGDesiredWatchpoints.cpp:
3027         (JSC::DFG::ArrayBufferViewWatchpointAdaptor::add):
3028         * heap/Heap.cpp:
3029         (JSC::Heap::finalizeUnconditionalFinalizers):
3030         * llint/LLIntSlowPaths.cpp:
3031         (JSC::LLInt::setupGetByIdPrototypeCache):
3032         * runtime/ArrayBuffer.cpp:
3033         (JSC::ArrayBuffer::notifyIncommingReferencesOfTransfer):
3034         * runtime/ArrayBufferNeuteringWatchpointSet.cpp: Renamed from Source/JavaScriptCore/runtime/ArrayBufferNeuteringWatchpoint.cpp.
3035         (JSC::ArrayBufferNeuteringWatchpointSet::ArrayBufferNeuteringWatchpointSet):
3036         (JSC::ArrayBufferNeuteringWatchpointSet::destroy):
3037         (JSC::ArrayBufferNeuteringWatchpointSet::create):
3038         (JSC::ArrayBufferNeuteringWatchpointSet::createStructure):
3039         (JSC::ArrayBufferNeuteringWatchpointSet::fireAll):
3040         * runtime/ArrayBufferNeuteringWatchpointSet.h: Renamed from Source/JavaScriptCore/runtime/ArrayBufferNeuteringWatchpoint.h.
3041         * runtime/FunctionRareData.h:
3042         * runtime/JSGlobalObject.cpp:
3043         (JSC::JSGlobalObject::init):
3044         (JSC::JSGlobalObject::tryInstallArraySpeciesWatchpoint):
3045         * runtime/ObjectPropertyChangeAdaptiveWatchpoint.h:
3046         (JSC::ObjectPropertyChangeAdaptiveWatchpoint::ObjectPropertyChangeAdaptiveWatchpoint): Deleted.
3047         * runtime/StructureRareData.cpp:
3048         (JSC::StructureRareData::finalizeUnconditionally):
3049         * runtime/StructureRareData.h:
3050         * runtime/VM.cpp:
3051         (JSC::VM::VM):
3052
3053 2019-03-26  Saam Barati  <sbarati@apple.com>
3054
3055         FTL: Emit code to validate AI's state when running the compiled code
3056         https://bugs.webkit.org/show_bug.cgi?id=195924
3057         <rdar://problem/49003422>
3058
3059         Reviewed by Filip Pizlo.
3060
3061         This patch adds code that between the execution of each node that validates
3062         the types that AI proves. This option is too expensive to turn on for our
3063         regression testing, but we think it will be valuable in other types of running
3064         modes, such as when running with a fuzzer.
3065         
3066         This patch also adds options to only probabilistically run this validation
3067         after the execution of each node. As the probability is lowered, there is
3068         less of a perf hit.
3069         
3070         This patch just adds this validation in the FTL. A follow-up patch will land
3071         it in the DFG too: https://bugs.webkit.org/show_bug.cgi?id=196219
3072
3073         * ftl/FTLLowerDFGToB3.cpp:
3074         (JSC::FTL::DFG::LowerDFGToB3::LowerDFGToB3):
3075         (JSC::FTL::DFG::LowerDFGToB3::compileBlock):
3076         (JSC::FTL::DFG::LowerDFGToB3::validateAIState):
3077         (JSC::FTL::DFG::LowerDFGToB3::compileNode):
3078         (JSC::FTL::DFG::LowerDFGToB3::lowJSValue):
3079         * runtime/Options.h:
3080
3081 2019-03-26  Tadeu Zagallo  <tzagallo@apple.com>
3082
3083         WebAssembly: Fix f32.min, f64.min and f64.max operations on NaN
3084         https://bugs.webkit.org/show_bug.cgi?id=196217
3085
3086         Reviewed by Saam Barati.
3087
3088         Generalize the fix for f32.max to properly handle NaN by doing an extra GreatherThan
3089         comparison in r243446 to all min and max float operations.
3090
3091         * wasm/WasmAirIRGenerator.cpp:
3092         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Min>):
3093         (JSC::Wasm::AirIRGenerator::addFloatingPointMinOrMax):
3094         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Max>):
3095         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Min>):
3096         (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Max>):
3097         * wasm/wasm.json:
3098
3099 2019-03-26  Andy VanWagoner  <andy@vanwagoner.family>
3100
3101         Intl.DateTimeFormat should obey 2-digit hour
3102         https://bugs.webkit.org/show_bug.cgi?id=195974
3103
3104         Reviewed by Keith Miller.
3105
3106         * runtime/IntlDateTimeFormat.cpp:
3107         (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
3108
3109 2019-03-25  Yusuke Suzuki  <ysuzuki@apple.com>
3110
3111         Heap::isMarked and friends should be instance methods
3112         https://bugs.webkit.org/show_bug.cgi?id=179988
3113
3114         Reviewed by Saam Barati.
3115
3116         Almost all the callers of Heap::isMarked have VM& reference. We should make Heap::isMarked instance function instead of static function
3117         so that we do not need to look up Heap from the cell.
3118
3119         * API/JSAPIWrapperObject.mm:
3120         (JSAPIWrapperObjectHandleOwner::isReachableFromOpaqueRoots):
3121         * API/JSMarkingConstraintPrivate.cpp:
3122         (JSC::isMarked):
3123         * API/glib/JSAPIWrapperObjectGLib.cpp:
3124         (JSAPIWrapperObjectHandleOwner::isReachableFromOpaqueRoots):
3125         * builtins/BuiltinExecutables.cpp:
3126         (JSC::BuiltinExecutables::finalizeUnconditionally):
3127         * bytecode/AccessCase.cpp:
3128         (JSC::AccessCase::visitWeak const):
3129         (JSC::AccessCase::propagateTransitions const):
3130         * bytecode/CallLinkInfo.cpp:
3131         (JSC::CallLinkInfo::visitWeak):
3132         * bytecode/CallLinkStatus.cpp:
3133         (JSC::CallLinkStatus::finalize):
3134         * bytecode/CallLinkStatus.h:
3135         * bytecode/CallVariant.cpp:
3136         (JSC::CallVariant::finalize):
3137         * bytecode/CallVariant.h:
3138         * bytecode/CodeBlock.cpp:
3139         (JSC::CodeBlock::shouldJettisonDueToWeakReference):
3140         (JSC::CodeBlock::shouldJettisonDueToOldAge):
3141         (JSC::shouldMarkTransition):
3142         (JSC::CodeBlock::propagateTransitions):
3143         (JSC::CodeBlock::determineLiveness):
3144         (JSC::CodeBlock::finalizeLLIntInlineCaches):
3145         (JSC::CodeBlock::finalizeUnconditionally):
3146         (JSC::CodeBlock::jettison):
3147         * bytecode/CodeBlock.h:
3148         * bytecode/ExecutableToCodeBlockEdge.cpp:
3149         (JSC::ExecutableToCodeBlockEdge::visitChildren):
3150         (JSC::ExecutableToCodeBlockEdge::finalizeUnconditionally):
3151         (JSC::ExecutableToCodeBlockEdge::runConstraint):
3152         * bytecode/GetByIdStatus.cpp:
3153         (JSC::GetByIdStatus::finalize):
3154         * bytecode/GetByIdStatus.h:
3155         * bytecode/GetByIdVariant.cpp:
3156         (JSC::GetByIdVariant::finalize):
3157         * bytecode/GetByIdVariant.h:
3158         * bytecode/InByIdStatus.cpp:
3159         (JSC::InByIdStatus::finalize):
3160         * bytecode/InByIdStatus.h:
3161         * bytecode/InByIdVariant.cpp:
3162         (JSC::InByIdVariant::finalize):
3163         * bytecode/InByIdVariant.h:
3164         * bytecode/ObjectPropertyCondition.cpp:
3165         (JSC::ObjectPropertyCondition::isStillLive const):
3166         * bytecode/ObjectPropertyCondition.h:
3167         * bytecode/ObjectPropertyConditionSet.cpp:
3168         (JSC::ObjectPropertyConditionSet::areStillLive const):
3169         * bytecode/ObjectPropertyConditionSet.h:
3170         * bytecode/PolymorphicAccess.cpp:
3171         (JSC::PolymorphicAccess::visitWeak const):
3172         * bytecode/PropertyCondition.cpp:
3173         (JSC::PropertyCondition::isStillLive const):
3174         * bytecode/PropertyCondition.h:
3175         * bytecode/PutByIdStatus.cpp:
3176         (JSC::PutByIdStatus::finalize):
3177         * bytecode/PutByIdStatus.h:
3178         * bytecode/PutByIdVariant.cpp:
3179         (JSC::PutByIdVariant::finalize):
3180         * bytecode/PutByIdVariant.h:
3181         * bytecode/RecordedStatuses.cpp:
3182         (JSC::RecordedStatuses::finalizeWithoutDeleting):
3183         (JSC::RecordedStatuses::finalize):
3184         * bytecode/RecordedStatuses.h:
3185         * bytecode/StructureSet.cpp:
3186         (JSC::StructureSet::isStillAlive const):
3187         * bytecode/StructureSet.h:
3188         * bytecode/StructureStubInfo.cpp:
3189         (JSC::StructureStubInfo::visitWeakReferences):
3190         * dfg/DFGPlan.cpp:
3191         (JSC::DFG::Plan::finalizeInGC):
3192         (JSC::DFG::Plan::isKnownToBeLiveDuringGC):
3193         * heap/GCIncomingRefCounted.h:
3194         * heap/GCIncomingRefCountedInlines.h:
3195         (JSC::GCIncomingRefCounted<T>::filterIncomingReferences):
3196         * heap/GCIncomingRefCountedSet.h:
3197         * heap/GCIncomingRefCountedSetInlines.h:
3198         (JSC::GCIncomingRefCountedSet<T>::lastChanceToFinalize):
3199         (JSC::GCIncomingRefCountedSet<T>::sweep):
3200         (JSC::GCIncomingRefCountedSet<T>::removeAll): Deleted.
3201         (JSC::GCIncomingRefCountedSet<T>::removeDead): Deleted.
3202         * heap/Heap.cpp:
3203         (JSC::Heap::addToRememberedSet):
3204         (JSC::Heap::runEndPhase):
3205         (JSC::Heap::sweepArrayBuffers):
3206         (JSC::Heap::addCoreConstraints):
3207         * heap/Heap.h:
3208         * heap/HeapInlines.h:
3209         (JSC::Heap::isMarked):
3210         * heap/HeapSnapshotBuilder.cpp:
3211         (JSC::HeapSnapshotBuilder::appendNode):
3212         * heap/SlotVisitor.cpp:
3213         (JSC::SlotVisitor::appendToMarkStack):
3214         (JSC::SlotVisitor::visitChildren):
3215         * jit/PolymorphicCallStubRoutine.cpp:
3216         (JSC::PolymorphicCallStubRoutine::visitWeak):
3217         * runtime/ErrorInstance.cpp:
3218         (JSC::ErrorInstance::finalizeUnconditionally):
3219         * runtime/InferredValueInlines.h:
3220         (JSC::InferredValue::finalizeUnconditionally):
3221         * runtime/StackFrame.h:
3222         (JSC::StackFrame::isMarked const):
3223         * runtime/Structure.cpp:
3224         (JSC::Structure::isCheapDuringGC):
3225         (JSC::Structure::markIfCheap):
3226         * runtime/Structure.h:
3227         * runtime/TypeProfiler.cpp:
3228         (JSC::TypeProfiler::invalidateTypeSetCache):
3229         * runtime/TypeProfiler.h:
3230         * runtime/TypeSet.cpp:
3231         (JSC::TypeSet::invalidateCache):
3232         * runtime/TypeSet.h:
3233         * runtime/WeakMapImpl.cpp:
3234         (JSC::WeakMapImpl<WeakMapBucket<WeakMapBucketDataKeyValue>>::visitOutputConstraints):
3235         * runtime/WeakMapImplInlines.h:
3236         (JSC::WeakMapImpl<WeakMapBucket>::finalizeUnconditionally):
3237
3238 2019-03-25  Keith Miller  <keith_miller@apple.com>
3239
3240         ASSERTION FAILED: m_op == CompareStrictEq in JSC::DFG::Node::convertToCompareEqPtr(JSC::DFG::FrozenValue *, JSC::DFG::Edge)
3241         https://bugs.webkit.org/show_bug.cgi?id=196176
3242
3243         Reviewed by Saam Barati.
3244
3245         convertToCompareEqPtr should allow for either CompareStrictEq or
3246         the SameValue DFG node. This fixes the old assertion that only
3247         allowed CompareStrictEq.
3248
3249         * dfg/DFGNode.h:
3250         (JSC::DFG::Node::convertToCompareEqPtr):
3251
3252 2019-03-25  Tadeu Zagallo  <tzagallo@apple.com>
3253
3254         WebAssembly: f32.max with NaN generates incorrect result
3255         https://bugs.webkit.org/show_bug.cgi?id=175691
3256         <rdar://problem/33952228>
3257
3258         Reviewed by Saam Barati.
3259
3260         Fix the B3 and Air compilation for f32.max. In order to handle the NaN
3261         case, we need an extra GreaterThan comparison on top of the existing
3262         Equal and LessThan ones.
3263
3264         * wasm/WasmAirIRGenerator.cpp:
3265         (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Max>):
3266         * wasm/wasm.json:
3267
3268 2019-03-25  Yusuke Suzuki  <ysuzuki@apple.com>
3269
3270         Unreviewed, speculative fix for CLoop build on CPU(UNKNOWN)
3271         https://bugs.webkit.org/show_bug.cgi?id=195982
3272
3273         * jit/ExecutableAllocator.h:
3274         (JSC::ExecutableAllocator::initializeUnderlyingAllocator):
3275
3276 2019-03-25  Gyuyoung Kim  <gyuyoung.kim@webkit.org>
3277
3278         Remove NavigatorContentUtils in WebCore/Modules
3279         https://bugs.webkit.org/show_bug.cgi?id=196070
3280
3281         Reviewed by Alex Christensen.
3282
3283         NavigatorContentUtils was to support the custom scheme spec [1].
3284         However, in WebKit side, no port has supported the feature in
3285         WebKit layer after EFL port was removed. So there has been the
3286         only IDL implementation of the NavigatorContentUtils in WebCore.
3287         So we don't need to keep the implementation in WebCore anymore.
3288
3289         [1] https://html.spec.whatwg.org/multipage/system-state.html#custom-handlers
3290
3291         * Configurations/FeatureDefines.xcconfig:
3292
3293 2019-03-23  Mark Lam  <mark.lam@apple.com>
3294
3295         Rolling out r243032 and r243071 because the fix is incorrect.
3296         https://bugs.webkit.org/show_bug.cgi?id=195892
3297         <rdar://problem/48981239>
3298
3299         Not reviewed.
3300
3301         The fix is incorrect: it relies on being able to determine liveness of an object
3302         in an ObjectPropertyCondition based on the state of the object's MarkedBit.
3303         However, there's no guarantee that GC has run and that the MarkedBit is already
3304         set even if the object is live.  As a result, we may not re-install adaptive
3305         watchpoints based on presumed dead objects which are actually live.
3306
3307         I'm rolling this out, and will implement a more comprehensive fix to handle
3308         watchpoint liveness later.
3309
3310         * bytecode/AdaptiveInferredPropertyValueWatchpointBase.cpp:
3311         (JSC::AdaptiveInferredPropertyValueWatchpointBase::fire):
3312         * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
3313         (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::fireInternal):
3314         * bytecode/ObjectPropertyCondition.cpp:
3315         (JSC::ObjectPropertyCondition::dumpInContext const):
3316         * bytecode/StructureStubClearingWatchpoint.cpp:
3317         (JSC::StructureStubClearingWatchpoint::fireInternal):
3318         * dfg/DFGAdaptiveStructureWatchpoint.cpp:
3319         (JSC::DFG::AdaptiveStructureWatchpoint::fireInternal):
3320         * runtime/StructureRareData.cpp:
3321         (JSC::ObjectToStringAdaptiveStructureWatchpoint::fireInternal):
3322
3323 2019-03-23  Keith Miller  <keith_miller@apple.com>
3324
3325         Refactor clz/ctz and fix getLSBSet.
3326         https://bugs.webkit.org/show_bug.cgi?id=196162
3327
3328         Reviewed by Saam Barati.
3329
3330         Refactor references of clz32/64 and ctz32 to use clz and ctz,
3331         respectively.
3332
3333         * dfg/DFGAbstractInterpreterInlines.h:
3334         (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
3335         * dfg/DFGOperations.cpp:
3336         * runtime/JSBigInt.cpp:
3337         (JSC::JSBigInt::digitDiv):
3338         (JSC::JSBigInt::absoluteDivWithBigIntDivisor):
3339         (JSC::JSBigInt::calculateMaximumCharactersRequired):
3340         (JSC::JSBigInt::toStringBasePowerOfTwo):
3341         (JSC::JSBigInt::compareToDouble):
3342         * runtime/MathObject.cpp:
3343         (JSC::mathProtoFuncClz32):
3344
3345 2019-03-23  Yusuke Suzuki  <ysuzuki@apple.com>
3346
3347         [JSC] Shrink sizeof(RegExp)
3348         https://bugs.webkit.org/show_bug.cgi?id=196133
3349
3350         Reviewed by Mark Lam.
3351
3352         Some applications have many RegExp cells. But RegExp cells are very large (144B).
3353         This patch reduces the size from 144B to 48B by,
3354
3355         1. Allocate Yarr::YarrCodeBlock in non-GC heap. We can avoid this allocation if JIT is disabled.
3356         2. m_captureGroupNames and m_namedGroupToParenIndex are moved to RareData. They are only used when RegExp has named capture groups.
3357
3358         * runtime/RegExp.cpp:
3359         (JSC::RegExp::finishCreation):
3360         (JSC::RegExp::estimatedSize):
3361         (JSC::RegExp::compile):
3362         (JSC::RegExp::matchConcurrently):
3363         (JSC::RegExp::compileMatchOnly):
3364         (JSC::RegExp::deleteCode):
3365         (JSC::RegExp::printTraceData):
3366         * runtime/RegExp.h:
3367         * runtime/RegExpInlines.h:
3368         (JSC::RegExp::hasCodeFor):
3369         (JSC::RegExp::matchInline):
3370         (JSC::RegExp::hasMatchOnlyCodeFor):
3371
3372 2019-03-22  Keith Rollin  <krollin@apple.com>
3373
3374         Enable ThinLTO support in Production builds
3375         https://bugs.webkit.org/show_bug.cgi?id=190758
3376         <rdar://problem/45413233>
3377
3378         Reviewed by Daniel Bates.
3379
3380         Tweak JavaScriptCore's Base.xcconfig to be more in-line with other
3381         .xcconfig files with regards to LTO settings. However, don't actually
3382         enable LTO for JavaScriptCore. LTO is not enabled for JavaScriptCore
3383         due to <rdar://problem/24543547>.
3384
3385         * Configurations/Base.xcconfig:
3386
3387 2019-03-22  Mark Lam  <mark.lam@apple.com>
3388
3389         Placate exception check validation in genericTypedArrayViewProtoFuncLastIndexOf().
3390         https://bugs.webkit.org/show_bug.cgi?id=196154
3391         <rdar://problem/49145307>
3392
3393         Reviewed by Filip Pizlo.
3394
3395         * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
3396         (JSC::genericTypedArrayViewProtoFuncLastIndexOf):
3397
3398 2019-03-22  Mark Lam  <mark.lam@apple.com>
3399
3400         Placate exception check validation in constructJSWebAssemblyLinkError().
3401         https://bugs.webkit.org/show_bug.cgi?id=196152
3402         <rdar://problem/49145257>
3403
3404         Reviewed by Michael Saboff.
3405
3406         * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
3407         (JSC::constructJSWebAssemblyLinkError):
3408
3409 2019-03-22  Timothy Hatcher  <timothy@apple.com>
3410
3411         Change macosx() to macos() in WK_API... and JSC_API... macros.
3412         https://bugs.webkit.org/show_bug.cgi?id=196106
3413
3414         Reviewed by Brian Burg.
3415
3416         * API/JSBasePrivate.h:
3417         * API/JSContext.h:
3418         * API/JSContextPrivate.h:
3419         * API/JSContextRef.h:
3420         * API/JSContextRefInternal.h:
3421         * API/JSContextRefPrivate.h:
3422         * API/JSManagedValue.h:
3423         * API/JSObjectRef.h:
3424         * API/JSObjectRefPrivate.h:
3425         * API/JSRemoteInspector.h:
3426         * API/JSScript.h:
3427         * API/JSTypedArray.h:
3428         * API/JSValue.h:
3429         * API/JSValuePrivate.h:
3430         * API/JSValueRef.h:
3431         * API/JSVirtualMachinePrivate.h:
3432
3433 2019-03-22  Yusuke Suzuki  <ysuzuki@apple.com>
3434
3435         Unreviewed, build fix for Windows
3436         https://bugs.webkit.org/show_bug.cgi?id=196122
3437
3438         * runtime/FunctionExecutable.cpp:
3439
3440 2019-03-21  Yusuke Suzuki  <ysuzuki@apple.com>
3441
3442         [JSC] Shrink sizeof(FunctionExecutable) by 16bytes
3443         https://bugs.webkit.org/show_bug.cgi?id=196122
3444
3445         Reviewed by Saam Barati.
3446
3447         This patch reduces sizeof(FunctionExecutable) by 16 bytes.
3448
3449         1. ScriptExecutable::m_numParametersForCall and ScriptExecutable::m_numParametersForConstruct are not used in a meaningful way. Removed them.
3450         2. ScriptExecutable::m_lastLine and ScriptExecutable::m_endColumn can be calculated from UnlinkedFunctionExecutable. So FunctionExecutable does not need to hold it.
3451            This patch adds GlobalExecutable, which are non-function ScriptExecutables, and move m_lastLine and m_endColumn to this class.
3452         3. FunctionExecutable still needs to have the feature overriding m_lastLine and m_endColumn. We move overridden data in FunctionExecutable::RareData.
3453
3454         * CMakeLists.txt:
3455         * JavaScriptCore.xcodeproj/project.pbxproj:
3456         * Sources.txt:
3457         * bytecode/UnlinkedFunctionExecutable.cpp:
3458         (JSC::UnlinkedFunctionExecutable::link):
3459         * runtime/EvalExecutable.cpp:
3460         (JSC::EvalExecutable::EvalExecutable):
3461         * runtime/EvalExecutable.h:
3462         * runtime/FunctionExecutable.cpp:
3463         (JSC::FunctionExecutable::FunctionExecutable):
3464         (JSC::FunctionExecutable::ensureRareDataSlow):
3465         (JSC::FunctionExecutable::overrideInfo):
3466         * runtime/FunctionExecutable.h:
3467         * runtime/GlobalExecutable.cpp: Copied from Source/JavaScriptCore/tools/FunctionOverrides.h.
3468         * runtime/GlobalExecutable.h: Copied from Source/JavaScriptCore/tools/FunctionOverrides.h.
3469         (JSC::GlobalExecutable::lastLine const):
3470         (JSC::GlobalExecutable::endColumn const):
3471         (JSC::GlobalExecutable::recordParse):
3472         (JSC::GlobalExecutable::GlobalExecutable):
3473         * runtime/ModuleProgramExecutable.cpp:
3474         (JSC::ModuleProgramExecutable::ModuleProgramExecutable):
3475         * runtime/ModuleProgramExecutable.h:
3476         * runtime/ProgramExecutable.cpp:
3477         (JSC::ProgramExecutable::ProgramExecutable):
3478         * runtime/ProgramExecutable.h:
3479         * runtime/ScriptExecutable.cpp:
3480         (JSC::ScriptExecutable::clearCode):
3481         (JSC::ScriptExecutable::installCode):
3482         (JSC::ScriptExecutable::hasClearableCode const):
3483         (JSC::ScriptExecutable::newCodeBlockFor):
3484         (JSC::ScriptExecutable::typeProfilingEndOffset const):
3485         (JSC::ScriptExecutable::recordParse):
3486         (JSC::ScriptExecutable::lastLine const):
3487         (JSC::ScriptExecutable::endColumn const):
3488         * runtime/ScriptExecutable.h:
3489         (JSC::ScriptExecutable::hasJITCodeForCall const):
3490         (JSC::ScriptExecutable::hasJITCodeForConstruct const):
3491         (JSC::ScriptExecutable::recordParse):
3492         (JSC::ScriptExecutable::lastLine const): Deleted.
3493         (JSC::ScriptExecutable::endColumn const): Deleted.
3494         * tools/FunctionOverrides.h:
3495
3496 2019-03-21  Yusuke Suzuki  <ysuzuki@apple.com>
3497
3498         [JSC] Shrink sizeof(RegExpObject)
3499         https://bugs.webkit.org/show_bug.cgi?id=196130
3500
3501         Reviewed by Saam Barati.
3502
3503         sizeof(RegExpObject) is 48B due to one bool flag. We should compress this flag into lower bit of RegExp* field so that we can make RegExpObject 32B.
3504         It saves memory footprint 1.3% in RAMification's regexp.
3505
3506         * dfg/DFGSpeculativeJIT.cpp:
3507         (JSC::DFG::SpeculativeJIT::compileNewRegexp):
3508         (JSC::DFG::SpeculativeJIT::compileSetRegExpObjectLastIndex):
3509         * ftl/FTLAbstractHeapRepository.h:
3510         * ftl/FTLLowerDFGToB3.cpp:
3511         (JSC::FTL::DFG::LowerDFGToB3::compileNewRegexp):
3512         (JSC::FTL::DFG::LowerDFGToB3::compileSetRegExpObjectLastIndex):
3513         * runtime/RegExpObject.cpp:
3514         (JSC::RegExpObject::RegExpObject):
3515         (JSC::RegExpObject::visitChildren):
3516         (JSC::RegExpObject::getOwnPropertySlot):
3517         (JSC::RegExpObject::defineOwnProperty):
3518         * runtime/RegExpObject.h:
3519
3520 2019-03-21  Tomas Popela  <tpopela@redhat.com>
3521
3522         [JSC] Fix build after r243232 on unsupported 64bit architectures
3523         https://bugs.webkit.org/show_bug.cgi?id=196072
3524
3525         Reviewed by Keith Miller.
3526
3527         As Keith suggested we already expect 16 free bits at the top of any
3528         pointer for JSValue even for the unsupported 64 bit arches.
3529
3530         * bytecode/CodeOrigin.h:
3531
3532 2019-03-21  Mark Lam  <mark.lam@apple.com>
3533
3534         Remove an invalid assertion in DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNullOrUndefined().
3535         https://bugs.webkit.org/show_bug.cgi?id=196116
3536         <rdar://problem/48976951>
3537
3538         Reviewed by Filip Pizlo.
3539
3540         The DFG backend should not make assumptions about what optimizations the front end
3541         will or will not do.  The assertion asserts that the operand cannot be known to be
3542         a cell.  However, it is not guaranteed that the front end will fold away this case.
3543         Also, the DFG backend is perfectly capable of generating code to handle the case
3544         where the operand is a cell.
3545
3546         The attached test case demonstrates a case where the operand can be a known cell.
3547         The test needs to be run with the concurrent JIT and GC, and is racy.  It used to
3548         trip up this assertion about once every 10 runs or so.
3549
3550         * dfg/DFGSpeculativeJIT64.cpp:
3551         (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNullOrUndefined):
3552
3553 2019-03-21  Tadeu Zagallo  <tzagallo@apple.com>
3554
3555         JSC::createError should clear exception thrown by errorDescriptionForValue
3556         https://bugs.webkit.org/show_bug.cgi?id=196089
3557
3558         Reviewed by Mark Lam.
3559
3560         errorDescriptionForValue returns a nullString in case of failure, but it
3561         might also throw an OOM exception when resolving a rope string. We need
3562         to clear any potential exceptions thrown by errorDescriptionForValue
3563         before returning the OOM from JSC::createError.
3564
3565         * runtime/ExceptionHelpers.cpp:
3566         (JSC::createError):
3567
3568 2019-03-21  Robin Morisset  <rmorisset@apple.com>
3569
3570         B3::Opcode can fit in a single byte, shrinking B3Value by 8 bytes
3571         https://bugs.webkit.org/show_bug.cgi?id=196014
3572
3573         Reviewed by Keith Miller.
3574
3575         B3::Opcode has less than one hundred cases, so it can easily fit in one byte (from two currently)
3576         This shrinks B3::Kind from 4 bytes to 2 (by removing the byte of padding at the end).
3577         This in turns eliminate padding from B3::Value, shrinking it by 8 bytes (out of 80).
3578
3579         * b3/B3Opcode.h:
3580
3581 2019-03-21  Michael Catanzaro  <mcatanzaro@igalia.com>
3582
3583         Unreviewed, more clang 3.8 build fixes
3584         https://bugs.webkit.org/show_bug.cgi?id=195947
3585         <rdar://problem/49069219>
3586
3587         In the spirit of making our code worse to please old compilers....
3588
3589         * bindings/ScriptValue.cpp:
3590         (Inspector::jsToInspectorValue):
3591         * bytecode/GetterSetterAccessCase.cpp:
3592         (JSC::GetterSetterAccessCase::create):
3593         (JSC::GetterSetterAccessCase::clone const):
3594         * bytecode/InstanceOfAccessCase.cpp:
3595         (JSC::InstanceOfAccessCase::clone const):
3596         * bytecode/IntrinsicGetterAccessCase.cpp:
3597         (JSC::IntrinsicGetterAccessCase::clone const):
3598         * bytecode/ModuleNamespaceAccessCase.cpp:
3599         (JSC::ModuleNamespaceAccessCase::clone const):
3600         * bytecode/ProxyableAccessCase.cpp:
3601         (JSC::ProxyableAccessCase::clone const):
3602
3603 2019-03-21  Yusuke Suzuki  <ysuzuki@apple.com>
3604
3605         [JSC] Do not create JIT related data under non-JIT mode
3606         https://bugs.webkit.org/show_bug.cgi?id=195982
3607
3608         Reviewed by Mark Lam.
3609
3610         We avoid creations of JIT related data structures under non-JIT mode.
3611         This patch removes the following allocations.
3612
3613         1. JITThunks
3614         2. FTLThunks
3615         3. FixedVMPoolExecutableAllocator
3616         4. noJITValueProfileSingleton since it is no longer used
3617         5. ARM disassembler should be initialized when it is used
3618         6. Wasm related data structures are accidentally allocated if VM::canUseJIT() == false &&
3619            Options::useWebAssembly() == true. Add Wasm::isSupported() function to check the both conditions.
3620
3621         * CMakeLists.txt:
3622         * JavaScriptCore.xcodeproj/project.pbxproj:
3623         * heap/Heap.cpp:
3624         (JSC::Heap::runEndPhase):
3625         * jit/ExecutableAllocator.cpp:
3626         (JSC::FixedVMPoolExecutableAllocator::~FixedVMPoolExecutableAllocator):
3627         (JSC::ExecutableAllocator::initializeUnderlyingAllocator):
3628         (JSC::ExecutableAllocator::isValid const):
3629         (JSC::ExecutableAllocator::underMemoryPressure):
3630         (JSC::ExecutableAllocator::memoryPressureMultiplier):
3631         (JSC::ExecutableAllocator::allocate):
3632         (JSC::ExecutableAllocator::isValidExecutableMemory):
3633         (JSC::ExecutableAllocator::getLock const):
3634         (JSC::ExecutableAllocator::committedByteCount):
3635         (JSC::ExecutableAllocator::dumpProfile):
3636         (JSC::startOfFixedExecutableMemoryPoolImpl):
3637         (JSC::endOfFixedExecutableMemoryPoolImpl):
3638         (JSC::ExecutableAllocator::initialize):
3639         (JSC::ExecutableAllocator::initializeAllocator): Deleted.
3640         (JSC::ExecutableAllocator::ExecutableAllocator): Deleted.
3641         (JSC::ExecutableAllocator::~ExecutableAllocator): Deleted.
3642         * jit/ExecutableAllocator.h:
3643         (JSC::ExecutableAllocatorBase::isValid const):
3644         (JSC::ExecutableAllocatorBase::underMemoryPressure):
3645         (JSC::ExecutableAllocatorBase::memoryPressureMultiplier):
3646         (JSC::ExecutableAllocatorBase::dumpProfile):
3647         (JSC::ExecutableAllocatorBase::allocate):
3648         (JSC::ExecutableAllocatorBase::setJITEnabled):
3649         (JSC::ExecutableAllocatorBase::isValidExecutableMemory):
3650         (JSC::ExecutableAllocatorBase::committedByteCount):
3651         (JSC::ExecutableAllocatorBase::getLock const):
3652         (JSC::ExecutableAllocator::isValid const): Deleted.
3653         (JSC::ExecutableAllocator::underMemoryPressure): Deleted.
3654         (JSC::ExecutableAllocator::memoryPressureMultiplier): Deleted.
3655         (JSC::ExecutableAllocator::allocate): Deleted.
3656         (JSC::ExecutableAllocator::setJITEnabled): Deleted.
3657         (JSC::ExecutableAllocator::isValidExecutableMemory): Deleted.
3658         (JSC::ExecutableAllocator::committedByteCount): Deleted.
3659         (JSC::ExecutableAllocator::getLock const): Deleted.
3660         * jsc.cpp:
3661         (functionWebAssemblyMemoryMode):
3662         * runtime/InitializeThreading.cpp:
3663         (JSC::initializeThreading):
3664         * runtime/JSGlobalObject.cpp:
3665         (JSC::JSGlobalObject::init):
3666         * runtime/JSLock.cpp:
3667         (JSC::JSLock::didAcquireLock):
3668         * runtime/Options.cpp:
3669         (JSC::recomputeDependentOptions):
3670         * runtime/VM.cpp:
3671         (JSC::enableAssembler):
3672         (JSC::VM::canUseAssembler):
3673         (JSC::VM::VM):
3674         * runtime/VM.h:
3675         * wasm/WasmCapabilities.h: Added.
3676         (JSC::Wasm::isSupported):
3677         * wasm/WasmFaultSignalHandler.cpp:
3678         (JSC::Wasm::enableFastMemory):
3679
3680 2019-03-21  Yusuke Suzuki  <ysuzuki@apple.com>
3681
3682         [JSC] Fix JSC build with newer ICU
3683         https://bugs.webkit.org/show_bug.cgi?id=196098
3684
3685         Reviewed by Keith Miller.
3686
3687         IntlDateTimeFormat and IntlNumberFormat have switch statement over ICU's enums. However it lacks "default" clause so that
3688         the compile error occurs when a new enum value is added in ICU side. We should have "default" clause which just fallbacks
3689         "unknown"_s case. The behavior is not changed since we already have `return "unknown"_s;` statement anyway after the
3690         switch statement. This patch just suppresses a compile error.
3691
3692         * runtime/IntlDateTimeFormat.cpp:
3693         (JSC::IntlDateTimeFormat::partTypeString):
3694         * runtime/IntlNumberFormat.cpp:
3695         (JSC::IntlNumberFormat::partTypeString):
3696
3697 2019-03-21  Tadeu Zagallo  <tzagallo@apple.com>
3698
3699         JSObject::putDirectIndexSlowOrBeyondVectorLength should check if indexIsSufficientlyBeyondLengthForSparseMap
3700         https://bugs.webkit.org/show_bug.cgi?id=196078
3701         <rdar://problem/35925380>
3702
3703         Reviewed by Mark Lam.
3704
3705         Unlike the other variations of putByIndex, it only checked if the index
3706         was larger than MIN_SPARSE_ARRAY_INDEX when the indexingType was
3707         ALL_BLANK_INDEXING_TYPES. This resulted in a huge butterfly being
3708         allocated for object literals (e.g. `{[9e4]: ...}`) and objects parsed
3709         from JSON.
3710
3711         * runtime/JSObject.cpp:
3712         (JSC::JSObject::putDirectIndexSlowOrBeyondVectorLength):
3713
3714 2019-03-21  Tadeu Zagallo  <tzagallo@apple.com>
3715
3716         CachedUnlinkedSourceCodeShape::m_provider should be a CachedRefPtr
3717         https://bugs.webkit.org/show_bug.cgi?id=196079
3718
3719         Reviewed by Saam Barati.
3720
3721         It was mistakenly cached as CachedPtr, which was leaking the decoded SourceProvider.
3722
3723         * runtime/CachedTypes.cpp:
3724         (JSC::CachedUnlinkedSourceCodeShape::encode):
3725
3726 2019-03-21  Mark Lam  <mark.lam@apple.com>
3727
3728         Placate exception check validation in operationArrayIndexOfString().
3729         https://bugs.webkit.org/show_bug.cgi?id=196067
3730         <rdar://problem/49056572>
3731
3732         Reviewed by Michael Saboff.
3733
3734         * dfg/DFGOperations.cpp:
3735
3736 2019-03-21  Xan Lopez  <xan@igalia.com>
3737
3738         [JSC][x86] Drop support for x87 floating point
3739         https://bugs.webkit.org/show_bug.cgi?id=194853
3740
3741         Reviewed by Don Olmstead.
3742
3743         Require SSE2 throughout the codebase, and remove x87 support where
3744         it was optionally available. SSE2 detection happens at compile
3745         time through a static_assert.
3746
3747         * assembler/MacroAssemblerX86.h:
3748         (JSC::MacroAssemblerX86::storeDouble):
3749         (JSC::MacroAssemblerX86::moveDoubleToInts):
3750         (JSC::MacroAssemblerX86::supportsFloatingPoint):
3751         (JSC::MacroAssemblerX86::supportsFloatingPointTruncate):
3752         (JSC::MacroAssemblerX86::supportsFloatingPointSqrt):
3753         (JSC::MacroAssemblerX86::supportsFloatingPointAbs):
3754         * assembler/MacroAssemblerX86Common.cpp:
3755         * assembler/MacroAssemblerX86Common.h:
3756         (JSC::MacroAssemblerX86Common::moveDouble):
3757         (JSC::MacroAssemblerX86Common::loadDouble):
3758         (JSC::MacroAssemblerX86Common::loadFloat):
3759         (JSC::MacroAssemblerX86Common::storeDouble):
3760         (JSC::MacroAssemblerX86Common::storeFloat):
3761         (JSC::MacroAssemblerX86Common::convertDoubleToFloat):
3762         (JSC::MacroAssemblerX86Common::convertFloatToDouble):
3763         (JSC::MacroAssemblerX86Common::addDouble):
3764         (JSC::MacroAssemblerX86Common::addFloat):
3765         (JSC::MacroAssemblerX86Common::divDouble):
3766         (JSC::MacroAssemblerX86Common::divFloat):
3767         (JSC::MacroAssemblerX86Common::subDouble):
3768         (JSC::MacroAssemblerX86Common::subFloat):
3769         (JSC::MacroAssemblerX86Common::mulDouble):
3770         (JSC::MacroAssemblerX86Common::mulFloat):
3771         (JSC::MacroAssemblerX86Common::convertInt32ToDouble):
3772         (JSC::MacroAssemblerX86Common::convertInt32ToFloat):
3773         (JSC::MacroAssemblerX86Common::branchDouble):
3774         (JSC::MacroAssemblerX86Common::branchFloat):
3775         (JSC::MacroAssemblerX86Common::compareDouble):
3776         (JSC::MacroAssemblerX86Common::compareFloat):
3777         (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32):
3778         (JSC::MacroAssemblerX86Common::truncateDoubleToInt32):
3779         (JSC::MacroAssemblerX86Common::truncateFloatToInt32):
3780         (JSC::MacroAssemblerX86Common::branchConvertDoubleToInt32):
3781         (JSC::MacroAssemblerX86Common::branchDoubleNonZero):
3782         (JSC::MacroAssemblerX86Common::branchDoubleZeroOrNaN):
3783         (JSC::MacroAssemblerX86Common::lshiftPacked):
3784         (JSC::MacroAssemblerX86Common::rshiftPacked):
3785         (JSC::MacroAssemblerX86Common::orPacked):
3786         (JSC::MacroAssemblerX86Common::move32ToFloat):
3787         (JSC::MacroAssemblerX86Common::moveFloatTo32):
3788         (JSC::MacroAssemblerX86Common::moveConditionallyDouble):
3789         (JSC::MacroAssemblerX86Common::moveConditionallyFloat):
3790         * offlineasm/x86.rb:
3791         * runtime/MathCommon.cpp:
3792         (JSC::operationMathPow):
3793
3794 2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>
3795
3796         [GLIB] User data not correctly passed to callback of functions and constructors with no parameters
3797         https://bugs.webkit.org/show_bug.cgi?id=196073
3798
3799         Reviewed by Michael Catanzaro.
3800
3801         This is because GClosure always expects a first parameter as instance. In case of functions or constructors with
3802         no parameters we insert a fake instance which is just a null pointer that is ignored by the callback. But
3803         if the function/constructor has user data the callback will expect one parameter for the user data. In that case
3804         we can simply swap instance/user data so that the fake instance will be the second argument and user data the
3805         first one.
3806
3807         * API/glib/JSCClass.cpp:
3808         (jscClassCreateConstructor): Use g_cclosure_new_swap() if parameters is empty and user data was provided.
3809         * API/glib/JSCValue.cpp:
3810         (jscValueFunctionCreate): Ditto.
3811
3812 2019-03-21  Pablo Saavedra  <psaavedra@igalia.com>
3813
3814         [JSC][32-bit] Build failure after r243232
3815         https://bugs.webkit.org/show_bug.cgi?id=196068
3816
3817         Reviewed by Mark Lam.
3818
3819         * dfg/DFGOSRExit.cpp:
3820         (JSC::DFG::reifyInlinedCallFrames):
3821         * dfg/DFGOSRExitCompilerCommon.cpp:
3822         (JSC::DFG::reifyInlinedCallFrames):
3823
3824 2019-03-21  Carlos Garcia Campos  <cgarcia@igalia.com>
3825
3826         [GLib] Returning G_TYPE_OBJECT from a method does not work
3827         https://bugs.webkit.org/show_bug.cgi?id=195574
3828
3829         Reviewed by Michael Catanzaro.
3830
3831         Add more documentation to clarify the ownership of wrapped objects when created and when returned by functions.
3832
3833         * API/glib/JSCCallbackFunction.cpp:
3834         (JSC::JSCCallbackFunction::construct): Also allow to return boxed types from a constructor.
3835         * API/glib/JSCClass.cpp:
3836         * API/glib/JSCValue.cpp:
3837
3838 2019-03-21  Mark Lam  <mark.lam@apple.com>
3839
3840         Cap length of an array with spread to MIN_ARRAY_STORAGE_CONSTRUCTION_LENGTH.
3841         https://bugs.webkit.org/show_bug.cgi?id=196055
3842         <rdar://problem/49067448>
3843
3844         Reviewed by Yusuke Suzuki.
3845
3846         We are doing this because:
3847         1. We expect the array to be densely packed.
3848         2. SpeculativeJIT::compileAllocateNewArrayWithSize() (and the FTL equivalent)
3849            expects the array length to be less than MIN_ARRAY_STORAGE_CONSTRUCTION_LENGTH
3850            if we don't want to use an ArrayStorage shape.
3851         3. There's no reason why an array with spread needs to be that large anyway.
3852            MIN_ARRAY_STORAGE_CONSTRUCTION_LENGTH is plenty.
3853
3854         In this patch, we also add a debug assert in compileAllocateNewArrayWithSize() and
3855         emitAllocateButterfly() to check for overflows.
3856
3857         * assembler/AbortReason.h:
3858         * dfg/DFGOperations.cpp:
3859         * dfg/DFGSpeculativeJIT.cpp:
3860         (JSC::DFG::SpeculativeJIT::compileCreateRest):
3861   &