2021-10-13  Jean-Yves Avenard  <jya@apple.com>

        Clearly distinguish serial from concurrent WorkQueue
        https://bugs.webkit.org/show_bug.cgi?id=231418
        rdar://problem/84021977

        Reviewed by Chris Dumez.

        Replace instances of WorkQueue being constructed as a concurrent one
        with ConcurrentWorkQueue.
        Remove the now unnecessary use of WorkQueue::Type::Serial in constructor.

        * jit/ExecutableAllocator.cpp:
        (JSC::dumpJITMemory):
        * runtime/Watchdog.cpp:
        (JSC::Watchdog::Watchdog):

2021-10-13  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix with new clang

        * wasm/WasmValueLocation.h:

2021-10-13  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Update adjusted thread numbers
        https://bugs.webkit.org/show_bug.cgi?id=231696

        Reviewed by Saam Barati.

        This adjusted numbers were empirically obtained at that time.
        But after that, we switched bmalloc to libpas in ARM64 macOS
        so that we removed scalability bottleneck in concurrent compilers.

        We evaluated and adjusted the configuration again.

        It improves Speedometer2 by 0.9% and JetStream2 by 0.7%.

        ----------------------------------------------------------------------------------------------------------------------------------
        |               subtest                |     ms      |     ms      |  b / a   | pValue (significance using False Discovery Rate) |
        ----------------------------------------------------------------------------------------------------------------------------------
        | Elm-TodoMVC                          |116.361667   |115.145000   |0.989544  | 0.000869 (significant)                           |
        | VueJS-TodoMVC                        |23.195000    |22.483333    |0.969318  | 0.002243 (significant)                           |
        | EmberJS-TodoMVC                      |124.720000   |121.211667   |0.971870  | 0.000000 (significant)                           |
        | BackboneJS-TodoMVC                   |43.923333    |43.771667    |0.996547  | 0.338425                                         |
        | Preact-TodoMVC                       |16.791667    |17.013333    |1.013201  | 0.337214                                         |
        | AngularJS-TodoMVC                    |129.860000   |128.475000   |0.989335  | 0.000838 (significant)                           |
        | Vanilla-ES2015-TodoMVC               |61.703333    |61.625000    |0.998730  | 0.534118                                         |
        | Inferno-TodoMVC                      |62.638333    |62.101667    |0.991432  | 0.045766                                         |
        | Flight-TodoMVC                       |63.878333    |63.723333    |0.997574  | 0.578999                                         |
        | Angular2-TypeScript-TodoMVC          |41.601667    |40.015000    |0.961861  | 0.000070 (significant)                           |
        | VanillaJS-TodoMVC                    |51.065000    |50.830000    |0.995398  | 0.284824                                         |
        | jQuery-TodoMVC                       |213.223333   |212.976667   |0.998843  | 0.536898                                         |
        | EmberJS-Debug-TodoMVC                |333.051667   |331.588333   |0.995606  | 0.032867                                         |
        | React-TodoMVC                        |82.665000    |82.540000    |0.998488  | 0.542365                                         |
        | React-Redux-TodoMVC                  |134.823333   |133.665000   |0.991409  | 0.000002 (significant)                           |
        | Vanilla-ES2015-Babel-Webpack-TodoMVC |59.983333    |59.941667    |0.999305  | 0.700077                                         |
        ----------------------------------------------------------------------------------------------------------------------------------
        a mean = 271.53654
        b mean = 274.08757
        pValue = 0.0000000000
        (Bigger means are better.)
        1.009 times better
        Results ARE significant

        -------------------------------------------------------------------------------------------------------------------------
        |          subtest          |     pts      |     pts      |  b / a   | pValue (significance using False Discovery Rate) |
        -------------------------------------------------------------------------------------------------------------------------
        | gaussian-blur             |545.633826    |544.387097    |0.997715  | 0.632889                                         |
        | HashSet-wasm              |47.725969     |53.977426     |1.130986  | 0.014208                                         |
        | gcc-loops-wasm            |46.592278     |45.484195     |0.976217  | 0.188166                                         |
        | json-parse-inspector      |252.822356    |254.060654    |1.004898  | 0.261381                                         |
        | prepack-wtb               |60.534710     |60.580410     |1.000755  | 0.932640                                         |
        | date-format-xparb-SP      |445.456679    |450.988456    |1.012418  | 0.563115                                         |
        | WSL                       |1.814989      |1.806757      |0.995464  | 0.035202                                         |
        | OfflineAssembler          |191.018184    |191.527453    |1.002666  | 0.512619                                         |
        | cdjs                      |194.872003    |197.611972    |1.014060  | 0.006522                                         |
        | UniPoker                  |522.254384    |520.751124    |0.997122  | 0.738800                                         |
        | json-stringify-inspector  |272.090046    |269.563607    |0.990715  | 0.156680                                         |
        | crypto-sha1-SP            |788.203441    |786.796976    |0.998216  | 0.889433                                         |
        | Basic                     |705.357988    |704.506995    |0.998794  | 0.851524                                         |
        | chai-wtb                  |108.246674    |109.283047    |1.009574  | 0.313095                                         |
        | crypto-aes-SP             |716.467647    |722.010176    |1.007736  | 0.589988                                         |
        | Babylon                   |669.393771    |670.186691    |1.001185  | 0.908244                                         |
        | string-unpack-code-SP     |400.848798    |397.690936    |0.992122  | 0.379538                                         |
        | stanford-crypto-aes       |448.517790    |450.916593    |1.005348  | 0.421547                                         |
        | raytrace                  |834.526654    |876.061864    |1.049771  | 0.000000 (significant)                           |
        | multi-inspector-code-load |398.195009    |400.638554    |1.006137  | 0.624663                                         |
        | hash-map                  |588.390020    |593.336508    |1.008407  | 0.032313                                         |
        | stanford-crypto-pbkdf2    |705.031717    |714.947310    |1.014064  | 0.451490                                         |
        | coffeescript-wtb          |41.104563     |41.590079     |1.011812  | 0.104485                                         |
        | Box2D                     |457.517551    |457.676651    |1.000348  | 0.938025                                         |
        | lebab-wtb                 |63.284589     |63.746412     |1.007298  | 0.021550                                         |
        | tsf-wasm                  |121.000104    |116.584889    |0.963511  | 0.566993                                         |
        | base64-SP                 |627.310289    |631.360337    |1.006456  | 0.380323                                         |
        | navier-stokes             |717.211598    |715.546883    |0.997679  | 0.776740                                         |
        | jshint-wtb                |52.822264     |53.067727     |1.004647  | 0.265734                                         |
        | regex-dna-SP              |444.626036    |444.565652    |0.999864  | 0.981250                                         |
        | async-fs                  |232.138408    |234.088380    |1.008400  | 0.084059                                         |
        | crypto-md5-SP             |738.555352    |739.048809    |1.000668  | 0.936794                                         |
        | first-inspector-code-load |272.911902    |274.186589    |1.004671  | 0.223172                                         |
        | segmentation              |53.421830     |53.253527     |0.996850  | 0.488595                                         |
        | typescript                |26.619459     |26.404921     |0.991941  | 0.021613                                         |
        | octane-code-load          |1229.345392   |1238.504125   |1.007450  | 0.273224                                         |
        | float-mm.c                |17.443005     |17.474949     |1.001831  | 0.160549                                         |
        | quicksort-wasm            |472.609429    |490.175315    |1.037168  | 0.134603                                         |
        | Air                       |420.285523    |422.507814    |1.005288  | 0.535574                                         |
        | splay                     |472.850630    |484.805521    |1.025283  | 0.202943                                         |
        | ai-astar                  |663.547782    |684.429114    |1.031469  | 0.035910                                         |
        | acorn-wtb                 |68.978436     |69.675311     |1.010103  | 0.085505                                         |
        | gbemu                     |159.998563    |154.256612    |0.964112  | 0.052665                                         |
        | richards                  |957.006036    |970.082604    |1.013664  | 0.080437                                         |
        | 3d-cube-SP                |539.329388    |548.346324    |1.016719  | 0.126931                                         |
        | espree-wtb                |71.026174     |72.950691     |1.027096  | 0.005430                                         |
        | bomb-workers              |100.837095    |102.616328    |1.017645  | 0.024650                                         |
        | tagcloud-SP               |293.735729    |295.721652    |1.006761  | 0.604433                                         |
        | mandreel                  |150.843346    |151.169263    |1.002161  | 0.406810                                         |
        | 3d-raytrace-SP            |503.282797    |508.519569    |1.010405  | 0.330728                                         |
        | delta-blue                |1064.779647   |1085.099791   |1.019084  | 0.111789                                         |
        | ML                        |143.453624    |144.404535    |1.006629  | 0.054459                                         |
        | regexp                    |465.598651    |469.139986    |1.007606  | 0.040131                                         |
        | crypto                    |1534.715604   |1518.978823   |0.989746  | 0.398916                                         |
        | richards-wasm             |144.325337    |144.296964    |0.999803  | 0.993066                                         |
        | earley-boyer              |831.216095    |862.902139    |1.038120  | 0.089284                                         |
        | octane-zlib               |27.146237     |27.203847     |1.002122  | 0.668749                                         |
        | date-format-tofte-SP      |390.913746    |391.453527    |1.001381  | 0.837893                                         |
        | n-body-SP                 |1142.063928   |1139.347984   |0.997622  | 0.764020                                         |
        | pdfjs                     |183.711632    |185.851180    |1.011646  | 0.144519                                         |
        | FlightPlanner             |908.621057    |901.866743    |0.992566  | 0.434806                                         |
        | uglify-js-wtb             |34.644842     |34.797497     |1.004406  | 0.126209                                         |
        | babylon-wtb               |82.702004     |83.505631     |1.009717  | 0.092402                                         |
        | stanford-crypto-sha256    |810.898597    |810.480366    |0.999484  | 0.943677                                         |
        -------------------------------------------------------------------------------------------------------------------------
        a mean = 242.30806
        b mean = 243.91901
        pValue = 0.0014473755
        (Bigger means are better.)
        1.007 times better
        Results ARE significant

        * runtime/Options.cpp:
        (JSC::overrideDefaults):

2021-10-13  Mikhail R. Gadelha  <mikhail@igalia.com>

        [JSC][32bit] Fix wrong branchAdd32 assembly for ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=231362

        Reviewed by Yusuke Suzuki.

        After the unlinked baseline jit was merged, a new branchAdd32 method
        needed to be implemented for ARMv7, however, the first version
        submitted by me used the add32 method to perform the add before
        branching.

        In this patch, we fix the call to add32 by adding a new private method
        add32Impl with an optional parameter that selects either add or adds,
        make branchAdd32 call the adds version.

        (Patch co-authored with Geza Lore)

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::branchAdd32):

2021-10-12  Alexey Proskuryakov  <ap@apple.com>

        Invoke build scripts with python3 explicitly
        https://bugs.webkit.org/show_bug.cgi?id=231587

        Reviewed by Jonathan Bedard.

        Much of the work to support Python 3 was done years ago, but we need this to
        actually use Python 3 on macOS.

        Python 3 no longer raises ValueError on relative module import failure, so changed
        that to the correct ImportError.

        * DerivedSources.make:
        * Scripts/UpdateContents.py:
        * Scripts/cssmin.py:
        * Scripts/generate-combined-inspector-json.py:
        * Scripts/generate-js-builtins.py:
        * Scripts/inline-and-minify-stylesheets-and-scripts.py:
        * Scripts/lazywriter.py:
        * Scripts/make-js-file-arrays.py:
        * Scripts/wkbuiltins/builtins_generate_combined_header.py:
        * Scripts/wkbuiltins/builtins_generate_combined_implementation.py:
        * Scripts/wkbuiltins/builtins_generate_internals_wrapper_header.py:
        * Scripts/wkbuiltins/builtins_generate_internals_wrapper_implementation.py:
        * Scripts/wkbuiltins/builtins_generate_separate_header.py:
        * Scripts/wkbuiltins/builtins_generate_separate_implementation.py:
        * Scripts/wkbuiltins/builtins_generate_wrapper_header.py:
        * Scripts/wkbuiltins/builtins_generate_wrapper_implementation.py:
        * Scripts/wkbuiltins/builtins_generator.py:
        * Scripts/wkbuiltins/builtins_model.py:
        * Scripts/wkbuiltins/builtins_templates.py:
        * disassembler/udis86/ud_opcode.py:
        (UdOpcodeTable.entries):
        (UdOpcodeTables.addSSE2AVXInsn):
        (itemslist): Deleted.
        * inspector/scripts/codegen/cpp_generator.py:
        * inspector/scripts/codegen/cpp_generator_templates.py:
        * inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py:
        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:
        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:
        * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:
        * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py:
        * inspector/scripts/codegen/generate_cpp_protocol_types_header.py:
        * inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:
        * inspector/scripts/codegen/generate_js_backend_commands.py:
        * inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:
        * inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py:
        * inspector/scripts/codegen/generate_objc_configuration_header.py:
        * inspector/scripts/codegen/generate_objc_configuration_implementation.py:
        * inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:
        * inspector/scripts/codegen/generate_objc_header.py:
        * inspector/scripts/codegen/generate_objc_internal_header.py:
        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py:
        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py:
        * inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:
        * inspector/scripts/codegen/generator.py:
        * inspector/scripts/codegen/generator_templates.py:
        * inspector/scripts/codegen/models.py:
        * inspector/scripts/codegen/objc_generator.py:
        * inspector/scripts/codegen/objc_generator_templates.py:
        * inspector/scripts/generate-inspector-protocol-bindings.py:
        * wasm/generateWasm.py:
        * wasm/generateWasmB3IRGeneratorInlinesHeader.py:
        * wasm/generateWasmOpsHeader.py:
        * yarr/create_regex_tables:
        (in): Deleted.
        * yarr/generateYarrCanonicalizeUnicode:
        * yarr/generateYarrUnicodePropertyTables.py:
        * yarr/hasher.py:

2021-10-13  Alex Christensen  <achristensen@webkit.org>

        Remove WTF::Variant and WTF::get
        https://bugs.webkit.org/show_bug.cgi?id=231675

        Reviewed by Chris Dumez.

        * bytecode/StructureStubClearingWatchpoint.cpp:
        (JSC::WatchpointsOnStructureStubInfo::ensureReferenceAndInstallWatchpoint):
        (JSC::WatchpointsOnStructureStubInfo::ensureReferenceAndAddWatchpoint):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::branchIfValue):
        * jit/SnippetReg.h:
        (JSC::SnippetReg::gpr const):
        (JSC::SnippetReg::fpr const):
        (JSC::SnippetReg::jsValueRegs const):
        * jsc.cpp:
        (JSC_DEFINE_HOST_FUNCTION):
        * parser/Lexer.cpp:
        (JSC::Lexer<T>::lexWithoutClearingLineTerminator):
        * parser/VariableEnvironment.cpp:
        (JSC::CompactTDZEnvironment::toTDZEnvironmentSlow const):
        * parser/VariableEnvironment.h:
        (JSC::CompactTDZEnvironment::toTDZEnvironment const):
        * runtime/CacheUpdate.cpp:
        (JSC::CacheUpdate::asGlobal const):
        (JSC::CacheUpdate::asFunction const):
        * runtime/CachedTypes.cpp:
        (JSC::CachedCompactTDZEnvironment::encode):
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::ControlType::isCatch):
        (JSC::Wasm::LLIntGenerator::ControlType::targetLabelForBranch const):
        (JSC::Wasm::LLIntGenerator::addLoop):
        (JSC::Wasm::LLIntGenerator::addElseToUnreachable):
        (JSC::Wasm::LLIntGenerator::addCatchToUnreachable):
        (JSC::Wasm::LLIntGenerator::addCatchAllToUnreachable):
        (JSC::Wasm::LLIntGenerator::addDelegateToUnreachable):
        (JSC::Wasm::LLIntGenerator::addRethrow):

2021-10-13  Diego Pino Garcia  <dpino@igalia.com>

        [GTK] Unreviewed, build fix for Ubuntu 18.04 after r283852

        * wasm/WasmB3IRGenerator.h:

2021-10-12  Ross Kirsling  <ross.kirsling@sony.com>

        Non-unified build fixes, October 2021 edition.
        https://bugs.webkit.org/show_bug.cgi?id=231654

        Reviewed by Don Olmstead.

        * runtime/ControlFlowProfiler.h:

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Use std::variant instead of WTF::Variant
        https://bugs.webkit.org/show_bug.cgi?id=231629

        Reviewed by Chris Dumez.

        * bytecode/StructureStubClearingWatchpoint.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCallDOM):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::branchIfValue):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::branchIfTruthy):
        (JSC::AssemblyHelpers::branchIfFalsey):
        * jit/SnippetReg.h:
        * jsc.cpp:
        * parser/Lexer.h:
        * parser/VariableEnvironment.h:
        * runtime/BytecodeCacheError.h:
        * runtime/CachePayload.cpp:
        (JSC::CachePayload::CachePayload):
        * runtime/CachePayload.h:
        * runtime/CacheUpdate.h:
        * runtime/ISO8601.cpp:
        (JSC::ISO8601::parseTimeZoneBracketedAnnotation):
        * runtime/ISO8601.h:
        * wasm/WasmLLIntGenerator.cpp:

2021-10-12  Chris Dumez  <cdumez@apple.com>

        Decrease use of makeWeakPtr()
        https://bugs.webkit.org/show_bug.cgi?id=231615

        Reviewed by Alex Christensen.

        Decrease use of makeWeakPtr() and use WeakPtr { } directly instead.

        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::consoleClient const):
        * wasm/WasmMemory.cpp:
        (JSC::Wasm::Memory::registerInstance):

2021-10-12  Saam Barati  <sbarati@apple.com>

        Fix spec-correctness when inlining __proto__ intrinsic using get_by_id_with_this
        https://bugs.webkit.org/show_bug.cgi?id=231559

        Reviewed by Yusuke Suzuki.

        My original fix in r283512 has some theoretical spec correctness issues.
        I'm not sure if they can be materialized or not since we only use
        get_by_id_with_this in very limited scenarios. However, this patch just
        makes it so we call the getter instead of attempting to inline it
        when using get_by_id_with_this.

        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitLoadPrototypeWithoutCheck): Deleted.
        * jit/AssemblyHelpers.h:
        * jit/IntrinsicEmitter.cpp:
        (JSC::IntrinsicGetterAccessCase::canEmitIntrinsicGetter):
        (JSC::IntrinsicGetterAccessCase::emitIntrinsicGetter):

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Use STL instead of WTF::get_if, WTF::Monostate, WTF::visit, and WTF::holds_alternative
        https://bugs.webkit.org/show_bug.cgi?id=231582

        Reviewed by Darin Adler.

        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::branchIfValue):
        * jsc.cpp:
        (JSC_DEFINE_HOST_FUNCTION):
        * parser/Lexer.cpp:
        (JSC::Lexer<T>::lexWithoutClearingLineTerminator):
        * parser/VariableEnvironment.h:
        (JSC::CompactTDZEnvironment::toTDZEnvironment const):
        * runtime/CacheUpdate.cpp:
        (JSC::CacheUpdate::isGlobal const):
        * runtime/CachedTypes.cpp:
        (JSC::CachedCompactTDZEnvironment::encode):
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::ControlType::isLoop):
        (JSC::Wasm::LLIntGenerator::ControlType::isTopLevel):
        (JSC::Wasm::LLIntGenerator::ControlType::isBlock):
        (JSC::Wasm::LLIntGenerator::ControlType::isIf):
        (JSC::Wasm::LLIntGenerator::ControlType::isTry):
        (JSC::Wasm::LLIntGenerator::ControlType::isAnyCatch):
        (JSC::Wasm::LLIntGenerator::ControlType::isCatch):
        (JSC::Wasm::LLIntGenerator::ControlType::targetLabelForBranch const):
        (JSC::Wasm::LLIntGenerator::ControlType::branchTargetArity const):
        (JSC::Wasm::LLIntGenerator::ControlType::branchTargetType const):
        (JSC::Wasm::LLIntGenerator::addElse):
        (JSC::Wasm::LLIntGenerator::addCatchToUnreachable):
        (JSC::Wasm::LLIntGenerator::addCatchAllToUnreachable):
        (JSC::Wasm::LLIntGenerator::addRethrow):
        (JSC::Wasm::LLIntGenerator::addEndToUnreachable):

2021-10-12  Alex Christensen  <achristensen@webkit.org>

        Begin migration from WTF::Variant to std::variant
        https://bugs.webkit.org/show_bug.cgi?id=231086

        Reviewed by Chris Dumez.

        * bytecode/StructureStubClearingWatchpoint.cpp:
        (JSC::WatchpointsOnStructureStubInfo::addWatchpoint):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCallDOM):
        * runtime/TemporalTimeZone.cpp:
        (JSC::TemporalTimeZone::createFromID):
        (JSC::TemporalTimeZone::createFromUTCOffset):

2021-10-11  Saam Barati  <sbarati@apple.com>

        Remove ImplicitAddress
        https://bugs.webkit.org/show_bug.cgi?id=230820
        <rdar://problem/83826318>

        Reviewed by Yusuke Suzuki.

        Because we rely on implicit conversion from RegisterID to int values,
        some compilers (aka MSVC) might convert a constant RegisterID that's passed in
        to nullptr instead of calling the implicit constructor in ImplicitAddress.
        
        For example, I got bit by this when I had code that did:
        loadPtr(regT0, xyz)
        
        This called the loadPtr(void*, RegisterID) function with nullptr passed as
        the first argument instead of the loadPtr(ImplicitAddress, RegisterID)
        function.
        
        Let's avoid any such problems in the future by just not using ImplicitAddress.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::ImplicitAddress::ImplicitAddress): Deleted.
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::pushToSave):
        (JSC::MacroAssembler::popToRestore):
        (JSC::MacroAssembler::loadPtr):
        (JSC::MacroAssembler::storePtr):
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::load64):
        (JSC::MacroAssemblerARM64::load32):
        (JSC::MacroAssemblerARM64::load16):
        (JSC::MacroAssemblerARM64::load16Unaligned):
        (JSC::MacroAssemblerARM64::load16SignedExtendTo32):
        (JSC::MacroAssemblerARM64::load8):
        (JSC::MacroAssemblerARM64::load8SignedExtendTo32):
        (JSC::MacroAssemblerARM64::store64):
        (JSC::MacroAssemblerARM64::store32):
        (JSC::MacroAssemblerARM64::store16):
        (JSC::MacroAssemblerARM64::store8):
        (JSC::MacroAssemblerARM64::loadDouble):
        (JSC::MacroAssemblerARM64::loadFloat):
        (JSC::MacroAssemblerARM64::storeDouble):
        (JSC::MacroAssemblerARM64::storeFloat):
        (JSC::MacroAssemblerARM64::pushToSaveImmediateWithoutTouchingRegisters):
        (JSC::MacroAssemblerARM64::popToRestore):
        (JSC::MacroAssemblerARM64::pushToSave):
        (JSC::MacroAssemblerARM64::storePtrWithPatch):
        (JSC::MacroAssemblerARM64::loadAcq8SignedExtendTo32):
        (JSC::MacroAssemblerARM64::loadAcq8):
        (JSC::MacroAssemblerARM64::storeRel8):
        (JSC::MacroAssemblerARM64::loadAcq16SignedExtendTo32):
        (JSC::MacroAssemblerARM64::loadAcq16):
        (JSC::MacroAssemblerARM64::storeRel16):
        (JSC::MacroAssemblerARM64::loadAcq32):
        (JSC::MacroAssemblerARM64::loadAcq64):
        (JSC::MacroAssemblerARM64::storeRel32):
        (JSC::MacroAssemblerARM64::storeRel64):
        (JSC::MacroAssemblerARM64::loadLink8):
        (JSC::MacroAssemblerARM64::loadLinkAcq8):
        (JSC::MacroAssemblerARM64::storeCond8):
        (JSC::MacroAssemblerARM64::storeCondRel8):
        (JSC::MacroAssemblerARM64::loadLink16):
        (JSC::MacroAssemblerARM64::loadLinkAcq16):
        (JSC::MacroAssemblerARM64::storeCond16):
        (JSC::MacroAssemblerARM64::storeCondRel16):
        (JSC::MacroAssemblerARM64::loadLink32):
        (JSC::MacroAssemblerARM64::loadLinkAcq32):
        (JSC::MacroAssemblerARM64::storeCond32):
        (JSC::MacroAssemblerARM64::storeCondRel32):
        (JSC::MacroAssemblerARM64::loadLink64):
        (JSC::MacroAssemblerARM64::loadLinkAcq64):
        (JSC::MacroAssemblerARM64::storeCond64):
        (JSC::MacroAssemblerARM64::storeCondRel64):
        (JSC::MacroAssemblerARM64::extractSimpleAddress):
        * assembler/MacroAssemblerARM64E.h:
        (JSC::MacroAssemblerARM64E::atomicXchgAdd8):
        (JSC::MacroAssemblerARM64E::atomicXchgAdd16):
        (JSC::MacroAssemblerARM64E::atomicXchgAdd32):
        (JSC::MacroAssemblerARM64E::atomicXchgAdd64):
        (JSC::MacroAssemblerARM64E::atomicXchgXor8):
        (JSC::MacroAssemblerARM64E::atomicXchgXor16):
        (JSC::MacroAssemblerARM64E::atomicXchgXor32):
        (JSC::MacroAssemblerARM64E::atomicXchgXor64):
        (JSC::MacroAssemblerARM64E::atomicXchgOr8):
        (JSC::MacroAssemblerARM64E::atomicXchgOr16):
        (JSC::MacroAssemblerARM64E::atomicXchgOr32):
        (JSC::MacroAssemblerARM64E::atomicXchgOr64):
        (JSC::MacroAssemblerARM64E::atomicXchgClear8):
        (JSC::MacroAssemblerARM64E::atomicXchgClear16):
        (JSC::MacroAssemblerARM64E::atomicXchgClear32):
        (JSC::MacroAssemblerARM64E::atomicXchgClear64):
        (JSC::MacroAssemblerARM64E::atomicXchg8):
        (JSC::MacroAssemblerARM64E::atomicXchg16):
        (JSC::MacroAssemblerARM64E::atomicXchg32):
        (JSC::MacroAssemblerARM64E::atomicXchg64):
        (JSC::MacroAssemblerARM64E::atomicStrongCAS8):
        (JSC::MacroAssemblerARM64E::atomicStrongCAS16):
        (JSC::MacroAssemblerARM64E::atomicStrongCAS32):
        (JSC::MacroAssemblerARM64E::atomicStrongCAS64):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::or8):
        (JSC::MacroAssemblerARMv7::or16):
        (JSC::MacroAssemblerARMv7::or32):
        (JSC::MacroAssemblerARMv7::load32):
        (JSC::MacroAssemblerARMv7::load8):
        (JSC::MacroAssemblerARMv7::load8SignedExtendTo32):
        (JSC::MacroAssemblerARMv7::load16):
        (JSC::MacroAssemblerARMv7::load16SignedExtendTo32):
        (JSC::MacroAssemblerARMv7::store32):
        (JSC::MacroAssemblerARMv7::store16):
        (JSC::MacroAssemblerARMv7::loadDouble):
        (JSC::MacroAssemblerARMv7::loadFloat):
        (JSC::MacroAssemblerARMv7::storeDouble):
        (JSC::MacroAssemblerARMv7::storeFloat):
        (JSC::MacroAssemblerARMv7::storePtrWithPatch):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::load8):
        (JSC::MacroAssemblerMIPS::load8SignedExtendTo32):
        (JSC::MacroAssemblerMIPS::load32):
        (JSC::MacroAssemblerMIPS::load16):
        (JSC::MacroAssemblerMIPS::store8):
        (JSC::MacroAssemblerMIPS::store16):
        (JSC::MacroAssemblerMIPS::store32):
        (JSC::MacroAssemblerMIPS::storePtrWithPatch):
        (JSC::MacroAssemblerMIPS::loadFloat):
        (JSC::MacroAssemblerMIPS::loadDouble):
        (JSC::MacroAssemblerMIPS::storeFloat):
        (JSC::MacroAssemblerMIPS::storeDouble):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::load32):
        (JSC::MacroAssemblerX86Common::load16Unaligned):
        (JSC::MacroAssemblerX86Common::load8):
        (JSC::MacroAssemblerX86Common::load8SignedExtendTo32):
        (JSC::MacroAssemblerX86Common::load16):
        (JSC::MacroAssemblerX86Common::store32):
        (JSC::MacroAssemblerX86Common::store16):
        (JSC::MacroAssemblerX86Common::loadDouble):
        (JSC::MacroAssemblerX86Common::loadFloat):
        (JSC::MacroAssemblerX86Common::storeDouble):
        (JSC::MacroAssemblerX86Common::storeFloat):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::load8):
        (JSC::MacroAssemblerX86_64::load32):
        (JSC::MacroAssemblerX86_64::store32):
        (JSC::MacroAssemblerX86_64::load64):
        (JSC::MacroAssemblerX86_64::store64):
        (JSC::MacroAssemblerX86_64::storePtrWithPatch):
        * assembler/testmasm.cpp:
        (JSC::testBranchTruncateDoubleToInt32):
        (JSC::testLoadPrePostIndex32):
        (JSC::testLoadPrePostIndex64):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileStringSlice):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
        (JSC::DFG::SpeculativeJIT::compileClearCatchLocals):
        * ftl/FTLLocation.cpp:
        (JSC::FTL::Location::restoreInto const):
        * ftl/FTLThunks.cpp:
        (JSC::FTL::genericGenerationThunkGenerator):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::debugCall):
        (JSC::AssemblyHelpers::sanitizeStackInline):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitGetVarFromIndirectPointer):
        * jit/ThunkGenerators.cpp:
        (JSC::arityFixupGenerator):
        * wasm/WasmBinding.cpp:
        (JSC::Wasm::wasmToWasm):
        * yarr/YarrJIT.cpp:

2021-10-11  Saam Barati  <sbarati@apple.com>

        Share more code that uses ScratchRegisterAllocator in the ICs
        https://bugs.webkit.org/show_bug.cgi?id=231125
        <rdar://problem/84066374>

        Reviewed by Sam Weinig.

        We had the same code to allocate a scratch register allocator copy pasted
        all over the IC code. This patch refactors that to use a shared helper.
        
        Also, Delete was using a ScratchRegisterAllocator for no reason (it never
        allocated a scratch register), so I deleted that code.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateWithGuard):
        (JSC::AccessCase::generateImpl):
        * bytecode/GetterSetterAccessCase.cpp:
        (JSC::GetterSetterAccessCase::emitDOMJITGetter):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessGenerationState::makeDefaultScratchAllocator):
        (JSC::PolymorphicAccess::regenerate):
        * bytecode/PolymorphicAccess.h:
        * jit/IntrinsicEmitter.cpp:
        (JSC::IntrinsicGetterAccessCase::emitIntrinsicGetter):

2021-10-11  Saam Barati  <sbarati@apple.com>

        Don't branch around register allocation in DFG enumerator get by val and pass in the right LValue type to strictInt52ToJSValue
        https://bugs.webkit.org/show_bug.cgi?id=231465
        <rdar://83876470>

        Reviewed by Yusuke Suzuki.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::setIntTypedArrayLoadResult):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):

2021-10-11  Geza Lore  <glore@igalia.com>

        [JSC][ARMv7] Make LLInt CSR save/restore order match the JITs
        https://bugs.webkit.org/show_bug.cgi?id=231517

        Reviewed by Saam Barati.

        Since the new unlinked baseline JIT was introduced, the baseline JIT
        uses the metadata table GPR the same way as the LLInt does, and relies
        on it being in a saved CSR in emit_op_catch. This unearthed an issue
        in the order in which LLInt on ARMv7 stores and restores CSRs when
        trying to handle exceptions. This patch fixes the mismatch.

        * llint/LowLevelInterpreter.asm:

2021-10-11  Alex Christensen  <achristensen@webkit.org>

        Prepare to switch from WTF::Variant to std::variant
        https://bugs.webkit.org/show_bug.cgi?id=231239

        Reviewed by Chris Dumez.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCallDOM):
        * parser/Lexer.cpp:
        (JSC::Lexer<T>::parseHex):
        (JSC::Lexer<T>::parseBinary):
        (JSC::Lexer<T>::parseOctal):
        (JSC::Lexer<T>::parseDecimal):
        * runtime/CachePayload.cpp:
        (JSC::CachePayload::data const):
        (JSC::CachePayload::size const):
        * runtime/CacheUpdate.cpp:
        (JSC::CacheUpdate::CacheUpdate):

2021-10-11  Keith Miller  <keith_miller@apple.com>

        SourceID should have a type name and only be 32-bits
        https://bugs.webkit.org/show_bug.cgi?id=231436

        Reviewed by Filip Pizlo.

        This patch gives SourceID a proper type name and shrinks it to
        32-bits on 64-bit systems. Shrinking the size makes room on
        SourceProvider for metadata in a future patch I'm working on.
        It's also pretty unlikely that any system has more than ~4 billion
        script tags, evals, wasm modules so shinking the size is unlikely
        to cause any debugger/profiling issues.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/TypeLocation.h:
        * debugger/Debugger.cpp:
        (JSC::Debugger::toggleBreakpoint):
        (JSC::Debugger::pauseIfNeeded):
        * debugger/DebuggerLocation.h:
        (JSC::DebuggerLocation::DebuggerLocation):
        * debugger/DebuggerPrimitives.h:
        * inspector/JavaScriptCallFrame.h:
        (Inspector::JavaScriptCallFrame::sourceID const):
        * inspector/ScriptCallStackFactory.cpp:
        (Inspector::CreateScriptCallStackFunctor::operator() const):
        (Inspector::createScriptCallStackFromException):
        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::Frame::sourceID):
        * interpreter/StackVisitor.h:
        * parser/Nodes.h:
        (JSC::ScopeNode::sourceID const):
        * parser/SourceCode.h:
        (JSC::SourceCode::SourceCode):
        (JSC::SourceCode::firstLine const):
        (JSC::SourceCode::startColumn const):
        (JSC::SourceCode::providerID const):
        (JSC::SourceCode::provider const):
        (JSC::SourceCode::operator== const):
        (JSC::SourceCode::operator!= const):
        (JSC::makeSource):
        (JSC::SourceCode::subExpression const):
        * parser/SourceProvider.cpp:
        (JSC::SourceProvider::getID):
        * parser/SourceProvider.h:
        (JSC::SourceProvider::asID):
        * runtime/ControlFlowProfiler.cpp:
        (JSC::ControlFlowProfiler::getBasicBlockLocation):
        (JSC::ControlFlowProfiler::getBasicBlocksForSourceID const):
        (JSC::ControlFlowProfiler::hasBasicBlockAtTextOffsetBeenExecuted):
        (JSC::ControlFlowProfiler::basicBlockExecutionCountAtTextOffset):
        * runtime/ControlFlowProfiler.h:
        * runtime/FunctionHasExecutedCache.cpp:
        (JSC::FunctionHasExecutedCache::hasExecutedAtOffset):
        (JSC::FunctionHasExecutedCache::insertUnexecutedRange):
        (JSC::FunctionHasExecutedCache::removeUnexecutedRange):
        (JSC::FunctionHasExecutedCache::getFunctionRanges):
        * runtime/FunctionHasExecutedCache.h:
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::StackFrame::sourceID):
        * runtime/SamplingProfiler.h:
        * runtime/ScriptExecutable.h:
        (JSC::ScriptExecutable::sourceID const):
        * runtime/StackFrame.cpp:
        (JSC::StackFrame::sourceID const):
        * runtime/StackFrame.h:
        * runtime/TypeLocationCache.cpp:
        (JSC::TypeLocationCache::getTypeLocation):
        * runtime/TypeLocationCache.h:
        * runtime/TypeProfiler.cpp:
        (JSC::TypeProfiler::typeInformationForExpressionAtOffset):
        (JSC::TypeProfiler::findLocation):
        * runtime/TypeProfiler.h:
        (JSC::QueryKey::QueryKey):
        (JSC::QueryKey::isHashTableDeletedValue const):

2021-10-11  Geza Lore  <glore@igalia.com>

        [JSC][32bit] Fix profiling in baseline
        https://bugs.webkit.org/show_bug.cgi?id=231368

        Reviewed by Yusuke Suzuki.

        Fixes profiling omissions introduced with the recent 32-bit baseline
        build fixes, and also brings the rest of profile updates in-line with
        the unlinked baseline on 64-bit platforms.

        * jit/JIT.h:
        * jit/JITCall32_64.cpp:
        (JSC::JIT::emitPutCallResult):
        (JSC::JIT::compileSetupFrame):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::emit_op_iterator_open):
        (JSC::JIT::emitSlow_op_iterator_open):
        (JSC::JIT::emit_op_iterator_next):
        (JSC::JIT::emitSlow_op_iterator_next):
        * jit/JITInlines.h:
        (JSC::JIT::emitValueProfilingSiteIfProfiledOpcode):
        (JSC::JIT::emitValueProfilingSite):
        (JSC::JIT::emitArrayProfilingSiteWithCell):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_to_number):
        (JSC::JIT::emit_op_to_numeric):
        (JSC::JIT::emit_op_to_object):
        (JSC::JIT::emit_op_catch):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_get_private_name):
        (JSC::JIT::emitSlow_op_get_private_name):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emit_op_try_get_by_id):
        (JSC::JIT::emit_op_get_by_id_direct):
        (JSC::JIT::emitSlow_op_get_by_id_direct):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        (JSC::JIT::emit_op_in_by_val):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::emitSlow_op_get_from_scope):
        (JSC::JIT::emit_op_get_from_arguments):
        (JSC::JIT::emit_op_get_internal_field):

2021-10-10  Sihui Liu  <sihui_liu@apple.com>

        Add support for iterating FileSystemDirectoryHandle
        https://bugs.webkit.org/show_bug.cgi?id=231142
        <rdar://problem/83848092>

        Reviewed by Youenn Fablet and Yusuke Suzuki.

        * CMakeLists.txt:
        * runtime/JSBoundFunction.h:
        * runtime/JSGlobalObject.h:
        * runtime/JSGlobalObjectInlines.h:
        (JSC::JSGlobalObject::performPromiseThenFunction const):
        * runtime/JSPromise.cpp:
        (JSC::JSPromise::createNewPromiseCapability):
        (JSC::JSPromise::convertCapabilityToDeferredData):
        (JSC::JSPromise::createDeferredData):
        (JSC::JSPromise::performPromiseThen):
        * runtime/JSPromise.h:

2021-10-09  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Refine RegExp#compile based on regexp-legacy-features proposal
        https://bugs.webkit.org/show_bug.cgi?id=231486

        Reviewed by Alexey Shvayka.

        This patch refines RegExp#compile based regexp-legacy-features proposal[1].
        We add legacyFeaturesDisabledFlag flag to RegExpObject so that we can
        detect [[LegacyFeaturesEnabled]].

        We also add regExpRecompiledWatchpoint to JSGlobalObject. We have strength
        reduction in DFG / FTL, but we should recompile DFG / FTL code when RegExp
        is recompiled. Since it is rare, instead of having this watchpoint per
        RegExpObject, we hold it in JSGlobalObject.

        [1]: https://github.com/tc39/proposal-regexp-legacy-features

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileNewRegexp):
        (JSC::DFG::SpeculativeJIT::compileSetRegExpObjectLastIndex):
        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::JSC_DEFINE_JIT_OPERATION):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::JSGlobalObject):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::regExpRecompiledWatchpoint):
        (JSC::JSGlobalObject::isRegExpRecompiled const):
        * runtime/RegExpConstructor.cpp:
        (JSC::areLegacyFeaturesEnabled):
        (JSC::regExpCreate):
        (JSC::constructRegExp):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::RegExpObject):
        * runtime/RegExpObject.h:
        * runtime/RegExpPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-10-08  Saam Barati  <sbarati@apple.com>

        Run backwards propagation before we prune the graph after ForceOSRExit nodes in BytecodeParser
        https://bugs.webkit.org/show_bug.cgi?id=230823
        <rdar://problem/83565088>

        Reviewed by Yusuke Suzuki.

        When I ported the phase to run right after bytecode parsing, I wanted
        to maintain the same behavior as the prior pass that ran after CPS
        rethreading. I noticed a slight bug in some of my logic that changed
        some of heuristics and how they'd effect double voting.
        
        The old patch was mimicking the "is loaded from" bit by using the NodeFlags.
        Howver, this has some issues with how this interacts with our other uses
        of NodeFlags. So, to make things simple, I just add a new "VariableIsUsed"
        bit.

        * dfg/DFGBackwardsPropagationPhase.cpp:
        (JSC::DFG::BackwardsPropagationPhase::propagate):

2021-10-08  Tadeu Zagallo  <tzagallo@apple.com> and Keith Miller  <keith_miller@apple.com>

        Implement the WebAssembly exception handling proposal
        https://bugs.webkit.org/show_bug.cgi?id=229681
        <rdar://81603387>

        Reviewed by Keith Miller.

        Add support for the WebAssembly exception handling proposal, as per
        the WIP spec: https://github.com/WebAssembly/exception-handling

        The proposal includes 6 new instructions: try, catch, catch_all,
        delegate, throw and rethrow. All the instructions are supported by
        the LLInt and B3 generators, but not yet supported in Air. Any
        functions use exceptions will use B3 in BBQ.

        A few important notes about the implementation:
        - In B3, since we can now have multiple entrypoints (one for the
        function entry + 1 for each catch/catch_all), we can no longer just
        replace every value in the stack with a Phi when we find a new
        entrypoint. This worked so far because of the assumption that any
        block couldn't access its enclosing stack, and since the enclosing stack
        would only be accessible when we exited the current block, we added Phis
        at the end of each block when we had a new entrypoint. Now, since we have to capture all
        live values at any point that might throw (calls, throw and rethrow),
        we break that assumption. To simplify all the possible ways we might
        have to merge the state from multiple entrypoints we now use B3
        Variables to represent stack slots.
        - Some extra information is required to be able to properly restore
        the state when catching an exception:
            - We added a field VM::calleeForWasmCatch. This field is necessary
            because whenever we throw, we might end up in JavaScript, which
            assumes the callee is a cell and uses it to get the VM and restore
            callee saves. The issue is when catching exceptions in wasm we
            still need the original callee, and if throwing and catching from
            the same frame, that call frame slot has now been overwritten, so
            we store its original value in the VM field.
            - We also need to store the current Wasm Instance into the call
            frame's slot for the `this` argument. The instance is used both by
            the unwinder, to check if the exception being thrown matches the
            exceptions handled by catch candidates, and by the catch implementation,
            which is necessary when throwing from a cross instance call where both
            the callee save or TLS will have the callee's instance.
            - We store the current opcode for the llint, or the
            call site index for B3, in the call frame slot for the argument
            count tag. The call site index is used by the unwinder to check
            if a given catch can handle the exception being thrown.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/BytecodeList.rb:
        * bytecode/HandlerInfo.h:
        * bytecode/Instruction.h:
        (JSC::BaseInstruction::name const):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::bytecodeIndex const):
        * interpreter/CallFrame.h:
        (JSC::CallSiteIndex::CallSiteIndex):
        (JSC::CallSiteIndex::hash const):
        (JSC::CallSiteIndex::deletedValue):
        (JSC::CallSiteIndex::isHashTableDeletedValue const):
        (JSC::CallSiteIndexHash::hash):
        (JSC::CallSiteIndexHash::equal):
        * interpreter/Interpreter.cpp:
        (JSC::CatchInfo::CatchInfo):
        (JSC::UnwindFunctor::UnwindFunctor):
        (JSC::UnwindFunctor::operator() const):
        (JSC::Interpreter::unwind):
        * interpreter/Interpreter.h:
        (JSC::CatchInfo::CatchInfo):
        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::readNonInlinedFrame):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::restoreCalleeSavesFromEntryFrameCalleeSavesBuffer):
        (JSC::AssemblyHelpers::restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer):
        (JSC::AssemblyHelpers::restoreCalleeSavesFromVMEntryFrameCalleeSavesBufferImpl):
        * jit/AssemblyHelpers.h:
        * jit/JITExceptions.cpp:
        (JSC::genericUnwind):
        * jit/JSInterfaceJIT.h:
        (JSC::JSInterfaceJIT::convertCalleeToVM):
        * llint/LLIntData.h:
        (JSC::LLInt::getCodeRef):
        (JSC::LLInt::getWide16CodeRef):
        (JSC::LLInt::getWide32CodeRef):
        * llint/LLIntExceptions.cpp:
        (JSC::LLInt::wasmReturnToThrow):
        (JSC::LLInt::handleWasmCatch):
        (JSC::LLInt::handleWasmCatchAll):
        * llint/LLIntExceptions.h:
        * llint/LLIntOffsetsExtractor.cpp:
        * llint/WebAssembly.asm:
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::setCatchableFromWasm):
        (JSC::ErrorInstance::isCatchableFromWasm const):
        * runtime/JSGlobalObject.cpp:
        * runtime/JSGlobalObject.h:
        * runtime/OptionsList.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:
        (JSC::VM::calleeForWasmCatchOffset):
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::ControlData::isTry):
        (JSC::Wasm::AirIRGenerator::ControlData::isCatch):
        (JSC::Wasm::AirIRGenerator::ControlData::isAnyCatch):
        (JSC::Wasm::AirIRGenerator::ControlData::isLoop):
        (JSC::Wasm::AirIRGenerator::ControlData::isBlock):
        (JSC::Wasm::AirIRGenerator::ControlData::dump const):
        (JSC::Wasm::AirIRGenerator::addTry):
        (JSC::Wasm::AirIRGenerator::addCatch):
        (JSC::Wasm::AirIRGenerator::addCatchToUnreachable):
        (JSC::Wasm::AirIRGenerator::addCatchAll):
        (JSC::Wasm::AirIRGenerator::addCatchAllToUnreachable):
        (JSC::Wasm::AirIRGenerator::addDelegate):
        (JSC::Wasm::AirIRGenerator::addDelegateToUnreachable):
        (JSC::Wasm::AirIRGenerator::addThrow):
        (JSC::Wasm::AirIRGenerator::addRethrow):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::ControlData::ControlData):
        (JSC::Wasm::B3IRGenerator::ControlData::isTry):
        (JSC::Wasm::B3IRGenerator::ControlData::isAnyCatch):
        (JSC::Wasm::B3IRGenerator::ControlData::isLoop):
        (JSC::Wasm::B3IRGenerator::ControlData::isBlock):
        (JSC::Wasm::B3IRGenerator::ControlData::isCatch):
        (JSC::Wasm::B3IRGenerator::ControlData::dump const):
        (JSC::Wasm::B3IRGenerator::ControlData::convertTryToCatch):
        (JSC::Wasm::B3IRGenerator::ControlData::convertTryToCatchAll):
        (JSC::Wasm::B3IRGenerator::ControlData::tryStart const):
        (JSC::Wasm::B3IRGenerator::ControlData::tryEnd const):
        (JSC::Wasm::B3IRGenerator::ControlData::tryDepth const):
        (JSC::Wasm::B3IRGenerator::ControlData::catchKind const):
        (JSC::Wasm::B3IRGenerator::ControlData::exception const):
        (JSC::Wasm::B3IRGenerator::ControlData::stackSize const):
        (JSC::Wasm::B3IRGenerator::didPopValueFromStack):
        (JSC::Wasm::B3IRGenerator::addStackMap):
        (JSC::Wasm::B3IRGenerator::takeStackmaps):
        (JSC::Wasm::B3IRGenerator::takeExceptionHandlers):
        (JSC::Wasm::B3IRGenerator::push):
        (JSC::Wasm::B3IRGenerator::get):
        (JSC::Wasm::B3IRGenerator::set):
        (JSC::Wasm::PatchpointExceptionHandle::generate const):
        (JSC::Wasm::B3IRGenerator::fixupPointerPlusOffset):
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::B3IRGenerator::restoreWebAssemblyGlobalState):
        (JSC::Wasm::B3IRGenerator::insertEntrySwitch):
        (JSC::Wasm::B3IRGenerator::insertConstants):
        (JSC::Wasm::B3IRGenerator::addRefIsNull):
        (JSC::Wasm::B3IRGenerator::addTableGet):
        (JSC::Wasm::B3IRGenerator::addTableSet):
        (JSC::Wasm::B3IRGenerator::addRefFunc):
        (JSC::Wasm::B3IRGenerator::addTableInit):
        (JSC::Wasm::B3IRGenerator::addTableSize):
        (JSC::Wasm::B3IRGenerator::addTableGrow):
        (JSC::Wasm::B3IRGenerator::addTableFill):
        (JSC::Wasm::B3IRGenerator::addTableCopy):
        (JSC::Wasm::B3IRGenerator::getLocal):
        (JSC::Wasm::B3IRGenerator::emitIndirectCall):
        (JSC::Wasm::B3IRGenerator::addGrowMemory):
        (JSC::Wasm::B3IRGenerator::addCurrentMemory):
        (JSC::Wasm::B3IRGenerator::addMemoryFill):
        (JSC::Wasm::B3IRGenerator::addMemoryInit):
        (JSC::Wasm::B3IRGenerator::addMemoryCopy):
        (JSC::Wasm::B3IRGenerator::setLocal):
        (JSC::Wasm::B3IRGenerator::getGlobal):
        (JSC::Wasm::B3IRGenerator::setGlobal):
        (JSC::Wasm::B3IRGenerator::emitCheckAndPreparePointer):
        (JSC::Wasm::B3IRGenerator::emitLoadOp):
        (JSC::Wasm::B3IRGenerator::load):
        (JSC::Wasm::B3IRGenerator::emitStoreOp):
        (JSC::Wasm::B3IRGenerator::store):
        (JSC::Wasm::B3IRGenerator::sanitizeAtomicResult):
        (JSC::Wasm::B3IRGenerator::fixupPointerPlusOffsetForAtomicOps):
        (JSC::Wasm::B3IRGenerator::emitAtomicLoadOp):
        (JSC::Wasm::B3IRGenerator::atomicLoad):
        (JSC::Wasm::B3IRGenerator::emitAtomicStoreOp):
        (JSC::Wasm::B3IRGenerator::atomicStore):
        (JSC::Wasm::B3IRGenerator::emitAtomicBinaryRMWOp):
        (JSC::Wasm::B3IRGenerator::atomicBinaryRMW):
        (JSC::Wasm::B3IRGenerator::emitAtomicCompareExchange):
        (JSC::Wasm::B3IRGenerator::atomicCompareExchange):
        (JSC::Wasm::B3IRGenerator::atomicWait):
        (JSC::Wasm::B3IRGenerator::atomicNotify):
        (JSC::Wasm::B3IRGenerator::truncSaturated):
        (JSC::Wasm::B3IRGenerator::addSelect):
        (JSC::Wasm::B3IRGenerator::addConstant):
        (JSC::Wasm::B3IRGenerator::emitLoopTierUpCheck):
        (JSC::Wasm::B3IRGenerator::loadFromScratchBuffer):
        (JSC::Wasm::B3IRGenerator::connectControlEntry):
        (JSC::Wasm::B3IRGenerator::addLoop):
        (JSC::Wasm::B3IRGenerator::addTopLevel):
        (JSC::Wasm::B3IRGenerator::addBlock):
        (JSC::Wasm::B3IRGenerator::addIf):
        (JSC::Wasm::B3IRGenerator::addElse):
        (JSC::Wasm::B3IRGenerator::addElseToUnreachable):
        (JSC::Wasm::B3IRGenerator::addTry):
        (JSC::Wasm::B3IRGenerator::addCatch):
        (JSC::Wasm::B3IRGenerator::preparePatchpointForExceptions):
        (JSC::Wasm::B3IRGenerator::addCatchToUnreachable):
        (JSC::Wasm::B3IRGenerator::addCatchAll):
        (JSC::Wasm::B3IRGenerator::addCatchAllToUnreachable):
        (JSC::Wasm::B3IRGenerator::emitCatchImpl):
        (JSC::Wasm::B3IRGenerator::addDelegate):
        (JSC::Wasm::B3IRGenerator::addDelegateToUnreachable):
        (JSC::Wasm::B3IRGenerator::addThrow):
        (JSC::Wasm::B3IRGenerator::addRethrow):
        (JSC::Wasm::B3IRGenerator::addReturn):
        (JSC::Wasm::B3IRGenerator::addBranch):
        (JSC::Wasm::B3IRGenerator::addSwitch):
        (JSC::Wasm::B3IRGenerator::endBlock):
        (JSC::Wasm::B3IRGenerator::addEndToUnreachable):
        (JSC::Wasm::B3IRGenerator::createCallPatchpoint):
        (JSC::Wasm::B3IRGenerator::addCall):
        (JSC::Wasm::B3IRGenerator::addCallIndirect):
        (JSC::Wasm::B3IRGenerator::addCallRef):
        (JSC::Wasm::B3IRGenerator::unify):
        (JSC::Wasm::B3IRGenerator::unifyValuesWithBlock):
        (JSC::Wasm::parseAndCompile):
        (JSC::Wasm::computeExceptionHandlerLocations):
        (JSC::Wasm::B3IRGenerator::emitChecksForModOrDiv):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32DivS>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32RemS>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32DivU>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32RemU>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64DivS>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64RemS>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64DivU>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64RemU>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32Ctz>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64Ctz>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32Popcnt>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64Popcnt>):
        (JSC::Wasm::B3IRGenerator::addOp<F64ConvertUI64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::F32ConvertUI64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::F64Nearest>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::F32Nearest>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::F64Trunc>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::F32Trunc>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32TruncSF64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32TruncSF32>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32TruncUF64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32TruncUF32>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64TruncSF64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64TruncUF64>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64TruncSF32>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64TruncUF32>):
        * wasm/WasmB3IRGenerator.h:
        * wasm/WasmBBQPlan.cpp:
        (JSC::Wasm::BBQPlan::prepareImpl):
        (JSC::Wasm::BBQPlan::work):
        (JSC::Wasm::BBQPlan::compileFunction):
        (JSC::Wasm::BBQPlan::didCompleteCompilation):
        (JSC::Wasm::BBQPlan::initializeCallees):
        * wasm/WasmBBQPlan.h:
        * wasm/WasmCallee.cpp:
        (JSC::Wasm::Callee::handlerForIndex):
        (JSC::Wasm::LLIntCallee::LLIntCallee):
        (JSC::Wasm::LLIntCallee::linkExceptionHandlers):
        (JSC::Wasm::OptimizingJITCallee::linkExceptionHandlers):
        (JSC::Wasm::OptimizingJITCallee::stackmap const):
        * wasm/WasmCallee.h:
        (JSC::Wasm::Callee::hasExceptionHandlers const):
        (JSC::Wasm::Callee::functionCodeBlock const):
        (JSC::Wasm::OptimizingJITCallee::OptimizingJITCallee):
        * wasm/WasmCallingConvention.h:
        (JSC::Wasm::WasmCallingConvention::callInformationFor const):
        * wasm/WasmFormat.h:
        (JSC::Wasm::typeToString):
        (JSC::Wasm::isValidExternalKind):
        (JSC::Wasm::makeString):
        * wasm/WasmFunctionCodeBlock.h:
        (JSC::Wasm::FunctionCodeBlock::numberOfExceptionHandlers const):
        (JSC::Wasm::FunctionCodeBlock::exceptionHandler):
        (JSC::Wasm::FunctionCodeBlock::addExceptionHandler):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::isTryOrCatch):
        (JSC::Wasm::FunctionParser<Context>::parseExceptionIndex):
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):
        * wasm/WasmHandlerInfo.cpp: Added.
        (JSC::Wasm::HandlerInfo::initialize):
        (JSC::Wasm::HandlerInfo::handlerForIndex):
        * wasm/WasmHandlerInfo.h: Added.
        (JSC::Wasm::UnlinkedHandlerInfo::UnlinkedHandlerInfo):
        (JSC::Wasm::HandlerInfo::tag const):
        (JSC::Wasm::HandlerInfo::delegateTarget const):
        * wasm/WasmInstance.cpp:
        (JSC::Wasm::Instance::~Instance):
        * wasm/WasmInstance.h:
        (JSC::Wasm::Instance::addTag):
        (JSC::Wasm::Instance::tag const):
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::ControlType::try_):
        (JSC::Wasm::LLIntGenerator::ControlType::catch_):
        (JSC::Wasm::LLIntGenerator::ControlType::isLoop):
        (JSC::Wasm::LLIntGenerator::ControlType::isBlock):
        (JSC::Wasm::LLIntGenerator::ControlType::isIf):
        (JSC::Wasm::LLIntGenerator::ControlType::isTry):
        (JSC::Wasm::LLIntGenerator::ControlType::isAnyCatch):
        (JSC::Wasm::LLIntGenerator::ControlType::isCatch):
        (JSC::Wasm::LLIntGenerator::unifyValuesWithBlock):
        (JSC::Wasm::LLIntGenerator::walkExpressionStack):
        (JSC::Wasm::LLIntGenerator::materializeConstantsAndLocals):
        (JSC::Wasm::parseAndCompileBytecode):
        (JSC::Wasm::LLIntGenerator::LLIntGenerator):
        (JSC::Wasm::LLIntGenerator::repatch):
        (JSC::Wasm::LLIntGenerator::finalize):
        (JSC::Wasm::LLIntGenerator::callInformationForCaller):
        (JSC::Wasm::LLIntGenerator::callInformationForCallee):
        (JSC::Wasm::LLIntGenerator::addArguments):
        (JSC::Wasm::LLIntGenerator::addLoop):
        (JSC::Wasm::LLIntGenerator::addTry):
        (JSC::Wasm::LLIntGenerator::finalizePreviousBlockForCatch):
        (JSC::Wasm::LLIntGenerator::addCatch):
        (JSC::Wasm::LLIntGenerator::addCatchToUnreachable):
        (JSC::Wasm::LLIntGenerator::addCatchAll):
        (JSC::Wasm::LLIntGenerator::addCatchAllToUnreachable):
        (JSC::Wasm::LLIntGenerator::addDelegate):
        (JSC::Wasm::LLIntGenerator::addDelegateToUnreachable):
        (JSC::Wasm::LLIntGenerator::addThrow):
        (JSC::Wasm::LLIntGenerator::addRethrow):
        (JSC::Wasm::LLIntGenerator::endBlock):
        (JSC::Wasm::LLIntGenerator::addEndToUnreachable):
        * wasm/WasmLLIntGenerator.h:
        * wasm/WasmLimits.h:
        * wasm/WasmModuleInformation.cpp:
        * wasm/WasmModuleInformation.h:
        (JSC::Wasm::ModuleInformation::exceptionIndexSpaceSize const):
        (JSC::Wasm::ModuleInformation::isImportedExceptionFromExceptionIndexSpace const):
        (JSC::Wasm::ModuleInformation::signatureIndexFromExceptionIndexSpace const):
        (JSC::Wasm::ModuleInformation::importExceptionCount const):
        (JSC::Wasm::ModuleInformation::isDeclaredException const):
        (JSC::Wasm::ModuleInformation::addDeclaredException):
        * wasm/WasmOMGForOSREntryPlan.cpp:
        (JSC::Wasm::OMGForOSREntryPlan::work):
        * wasm/WasmOMGPlan.cpp:
        (JSC::Wasm::OMGPlan::work):
        * wasm/WasmOSREntryData.h:
        (JSC::Wasm::OSREntryData::values):
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::loadValuesIntoBuffer):
        (JSC::Wasm::doOSREntry):
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
        * wasm/WasmOperations.h:
        * wasm/WasmSectionParser.cpp:
        (JSC::Wasm::SectionParser::parseImport):
        (JSC::Wasm::SectionParser::parseExport):
        (JSC::Wasm::SectionParser::parseException):
        * wasm/WasmSections.h:
        (JSC::Wasm::validateOrder):
        * wasm/WasmSignature.cpp:
        (JSC::Wasm::SignatureInformation::SignatureInformation):
        (JSC::Wasm::SignatureInformation::signatureFor):
        * wasm/WasmSlowPaths.cpp:
        (JSC::LLInt::WASM_SLOW_PATH_DECL):
        * wasm/WasmSlowPaths.h:
        * wasm/WasmStreamingParser.cpp:
        (JSC::Wasm::StreamingParser::parseCodeSectionSize):
        * wasm/WasmTag.cpp: Copied from Source/JavaScriptCore/wasm/js/JSWebAssemblyRuntimeError.h.
        * wasm/WasmTag.h: Copied from Source/JavaScriptCore/wasm/WasmLLIntGenerator.h.
        (JSC::Wasm::Tag::create):
        (JSC::Wasm::Tag::parameterCount const):
        (JSC::Wasm::Tag::parameter const):
        (JSC::Wasm::Tag::operator== const):
        (JSC::Wasm::Tag::operator!= const):
        (JSC::Wasm::Tag::signature const):
        (JSC::Wasm::Tag::Tag):
        * wasm/WasmThunks.cpp:
        * wasm/WasmThunks.h:
        * wasm/generateWasmB3IRGeneratorInlinesHeader.py:
        (CodeGenerator.generateOpcode):
        (CodeGenerator.makeResult):
        (CodeGenerator.generate):
        * wasm/generateWasmOpsHeader.py:
        (typeMacroizer):
        * wasm/js/JSWebAssembly.cpp:
        * wasm/js/JSWebAssemblyException.cpp: Added.
        (JSC::JSWebAssemblyException::JSWebAssemblyException):
        (JSC::JSWebAssemblyException::finishCreation):
        (JSC::JSWebAssemblyException::visitChildrenImpl):
        (JSC::JSWebAssemblyException::destroy):
        (JSC::JSWebAssemblyException::getArg const):
        * wasm/js/JSWebAssemblyException.h: Added.
        (JSC::JSWebAssemblyException::subspaceFor):
        (JSC::JSWebAssemblyException::createStructure):
        (JSC::JSWebAssemblyException::create):
        (JSC::JSWebAssemblyException::tag const):
        (JSC::JSWebAssemblyException::payload const):
        * wasm/js/JSWebAssemblyHelpers.h:
        (JSC::toJSValue):
        (JSC::fromJSValue):
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::tryCreate):
        * wasm/js/JSWebAssemblyInstance.h:
        * wasm/js/JSWebAssemblyRuntimeError.cpp:
        (JSC::createJSWebAssemblyRuntimeError):
        * wasm/js/JSWebAssemblyRuntimeError.h:
        * wasm/js/JSWebAssemblyTag.cpp: Copied from Source/JavaScriptCore/wasm/js/JSWebAssemblyRuntimeError.cpp.
        (JSC::JSWebAssemblyTag::create):
        (JSC::JSWebAssemblyTag::createStructure):
        (JSC::JSWebAssemblyTag::JSWebAssemblyTag):
        * wasm/js/JSWebAssemblyTag.h: Copied from Source/JavaScriptCore/wasm/js/JSWebAssemblyRuntimeError.h.
        * wasm/js/WasmToJS.cpp:
        (JSC::Wasm::wasmToJS):
        * wasm/js/WebAssemblyExceptionConstructor.cpp: Added.
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::WebAssemblyExceptionConstructor::create):
        (JSC::WebAssemblyExceptionConstructor::createStructure):
        (JSC::WebAssemblyExceptionConstructor::finishCreation):
        (JSC::WebAssemblyExceptionConstructor::WebAssemblyExceptionConstructor):
        * wasm/js/WebAssemblyExceptionConstructor.h: Copied from Source/JavaScriptCore/wasm/js/JSWebAssemblyRuntimeError.h.
        * wasm/js/WebAssemblyExceptionPrototype.cpp: Added.
        (JSC::WebAssemblyExceptionPrototype::create):
        (JSC::WebAssemblyExceptionPrototype::createStructure):
        (JSC::WebAssemblyExceptionPrototype::finishCreation):
        (JSC::WebAssemblyExceptionPrototype::WebAssemblyExceptionPrototype):
        (JSC::getException):
        (JSC::getTag):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyExceptionPrototype.h: Copied from Source/JavaScriptCore/wasm/js/JSWebAssemblyRuntimeError.h.
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::linkImpl):
        * wasm/js/WebAssemblyTagConstructor.cpp: Added.
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::WebAssemblyTagConstructor::createTag):
        (JSC::WebAssemblyTagConstructor::create):
        (JSC::WebAssemblyTagConstructor::createStructure):
        (JSC::WebAssemblyTagConstructor::finishCreation):
        (JSC::WebAssemblyTagConstructor::WebAssemblyTagConstructor):
        * wasm/js/WebAssemblyTagConstructor.h: Copied from Source/JavaScriptCore/wasm/js/JSWebAssemblyRuntimeError.h.
        * wasm/js/WebAssemblyTagPrototype.cpp: Added.
        (JSC::WebAssemblyTagPrototype::create):
        (JSC::WebAssemblyTagPrototype::createStructure):
        (JSC::WebAssemblyTagPrototype::finishCreation):
        (JSC::WebAssemblyTagPrototype::WebAssemblyTagPrototype):
        (JSC::getTag):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyTagPrototype.h: Copied from Source/JavaScriptCore/wasm/js/JSWebAssemblyRuntimeError.h.
        * wasm/wasm.json:

2021-10-08  Jer Noble  <jer.noble@apple.com>

        [Build-time perf] Forward-declare more things in Element.h
        https://bugs.webkit.org/show_bug.cgi?id=231283

        Reviewed by Myles C. Maxfield.

        Add two new forwarding headers: one for Strong, and as a dependency, one for Handle.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/Handle.h:
        * heap/HandleForward.h: Copied from Source/JavaScriptCore/runtime/Forward.h.
        * heap/Strong.h:
        * heap/StrongForward.h: Copied from Source/JavaScriptCore/runtime/Forward.h.
        * runtime/Forward.h:

2021-10-08  Ross Kirsling  <ross.kirsling@sony.com> and Stephan Szabo  <stephan.szabo@sony.com>

        [JSC] Add private C API for JSGlobalObject::setEvalEnabled
        https://bugs.webkit.org/show_bug.cgi?id=231448

        Reviewed by Yusuke Suzuki.

        WebCore can prohibit eval (and Function constructor) usage in JS execution based on content security policy;
        this patch gives embedders the ability to do similarly.

        * API/JSContextRef.cpp:
        (JSGlobalContextSetEvalEnabled): Added.
        * API/JSContextRefPrivate.h:
        * API/tests/testapi.c:

2021-10-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] UnlinkedCodeBlock::m_instructions can be nullptr
        https://bugs.webkit.org/show_bug.cgi?id=231445
        rdar://83975933

        Reviewed by Mark Lam.

        UnlinkedCodeBlock is first created with m_instructions = nullptr.
        If BytecodeGenerator failed (due to OOM error etc.), then we keep it nullptr.
        So, when destroying UnlinkedCodeBlock, we should have nullptr check.

        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::~UnlinkedCodeBlock):

2021-10-08  Saam Barati  <sbarati@apple.com>

        RegExpExec can't statically prove which of the two structures it will get in AI by just looking at the RegExp*
        https://bugs.webkit.org/show_bug.cgi?id=231382
        <rdar://83722151>

        Reviewed by Mark Lam.

        Because of the RegExp.prototype.compile API, we don't know if the RegExp
        produced by RegExpExec will have indices or not, because that bit of
        information can be reset by the RegExp.prototype.compile API. So, we
        conservatively say that it can produce either structure. 

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

2021-10-07  Alexey Shvayka  <shvaikalesh@gmail.com>

        `highWaterMark` should be a readonly WebIDL attribute of queuing strategies
        https://bugs.webkit.org/show_bug.cgi?id=231355

        Reviewed by Youenn Fablet.

        Removes now unused @Object.@defineProperty private method.
        In most cases, property descriptor merging is unnecessary and @putDirect should be used instead.

        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::finishCreation):

2021-10-07  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed, build fix for non-unified JSC.

        * dfg/DFGBackwardsPropagationPhase.cpp:
        Add missing include.

2021-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Reenable -fvisibility=hidden
        https://bugs.webkit.org/show_bug.cgi?id=181916

        Reviewed by Michael Catanzaro.

        * shell/PlatformGTK.cmake:

2021-10-07  Philip Chimento  <pchimento@igalia.com>

        [JSC] Temporal tweaks to pass more test262 tests
        https://bugs.webkit.org/show_bug.cgi?id=231331

        Reviewed by Yusuke Suzuki.

        * runtime/ISO8601.h:
        (JSC::ISO8601::Duration::operator[]): Add an overload for Duration[]
          that indexes by TemporalUnit enum instead of integer index.
        (JSC::ISO8601::Duration::operator[] const):
        * runtime/TemporalDuration.cpp:
        (JSC::TemporalDuration::fromDurationLike): Access Duration properties in
          the order defined in the specification.
        (JSC::TemporalDuration::with const): Access Duration properties in the
          order defined in the specification.
        (JSC::TemporalDuration::round const): Temporarily throw an exception
          here instead of failing an assertion, when attempting to use
          unimplemented relativeTo functionality.
        * runtime/TemporalObject.cpp:
        (JSC::temporalUnitPluralPropertyName): Rename from
          temporalUnitPropertyName.
        (JSC::temporalUnitSingularPropertyName): Added.
        * runtime/TemporalObject.h: Add array corresponding to the table in the
          spec text specifying alphabetical access order for unit properties.
        * runtime/TemporalPlainTime.cpp:
        (JSC::toTemporalTimeRecord): Access PlainTime properties in the order
          defined in the specification.
        (JSC::toPartialTime): Access PlainTime properties in the order defined
          in the specification.

2021-10-06  Fujii Hironori  <Hironori.Fujii@sony.com>

        Python 3: run-inspector-generator-tests and generate-inspector-protocol-bindings.py
        https://bugs.webkit.org/show_bug.cgi?id=231055

        Reviewed by Jonathan Bedard.

        BaseException.message has been deprecated as of Python 2.6. Use
        str(e) instead.

        It seems that using frozenset causes flaky test failures in Python
        3. Stopped using frozenset.

        Rebaselined test expected results with Python 3. This change is
        not Python 2 compatible because Python 2 represent a unicode text
        as u'pagee' while Python 3 does 'pagee'.

        * inspector/scripts/codegen/models.py:
        * inspector/scripts/generate-inspector-protocol-bindings.py:
        * inspector/scripts/tests/expected/fail-on-command-targetType-matching-domain-debuggableType.json-error:
        * inspector/scripts/tests/expected/fail-on-command-targetTypes-value.json-error:
        * inspector/scripts/tests/expected/fail-on-domain-debuggableTypes-value.json-error:
        * inspector/scripts/tests/expected/fail-on-domain-targetType-matching-domain-debuggableType.json-error:
        * inspector/scripts/tests/expected/fail-on-domain-targetTypes-value.json-error:
        * inspector/scripts/tests/expected/fail-on-event-targetType-matching-domain-debuggableType.json-error:
        * inspector/scripts/tests/expected/fail-on-event-targetTypes-value.json-error:

2021-10-06  Mark Lam  <mark.lam@apple.com>

        Speculative fix for a null pointer dereference in ByteCodeParser::handlePutByVal.
        https://bugs.webkit.org/show_bug.cgi?id=231252
        rdar://83310320

        Reviewed by Yusuke Suzuki.

        We're seeing a null pointer dereference in ByteCodeParser::handlePutByVal().
        Adding a null check here as a speculative fix to mitigate crashes while we
        investigate further.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::handlePutByVal):

2021-10-06  Saam Barati  <sbarati@apple.com>

        Run backwards propagation before we prune the graph after ForceOSRExit nodes in BytecodeParser
        https://bugs.webkit.org/show_bug.cgi?id=230823
        <rdar://problem/83565088>

        Reviewed by Robin Morisset.

        We've found yet another bug where pruning code after OSR exits
        before running backwards propagation leads to us breaking the spec
        in weird IR situations. In the particular test case here, we end
        up not thinking we care about negative zero for an ArithNegate,
        and we exit the program while recovering the value 0 instead of -0.
        
        Fundamentally, backwards propagation wants to see all bytecode uses.
        Therefore, it seems like a more sound strategy to run backwards propagation
        before we end up mucking with the graph. This patch makes it so we run
        backwards propagation inside bytecode parser before we prune the IR.
        That way, the phase sees the graph as if it's an IR over the whole bytecode
        graph.

        * bytecode/Operands.h:
        (JSC::Operands::operator!= const):
        * dfg/DFGBackwardsPropagationPhase.cpp:
        (JSC::DFG::BackwardsPropagationPhase::BackwardsPropagationPhase):
        (JSC::DFG::BackwardsPropagationPhase::run):
        (JSC::DFG::BackwardsPropagationPhase::mergeFlags):
        (JSC::DFG::BackwardsPropagationPhase::propagate):
        (JSC::DFG::performBackwardsPropagation):
        * dfg/DFGBackwardsPropagationPhase.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::compileInThreadImpl):
        * dfg/DFGUnificationPhase.cpp:
        (JSC::DFG::UnificationPhase::run):

2021-10-06  Xan López  <xan@igalia.com>

        [JSC][32bit] Remove a bunch of compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=231091

        Reviewed by Carlos Alberto Lopez Perez.

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::compileExit): silence warning about unused
        variable, it's not used in 32-bit.
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_enter): use an unsigned int for the loop count.

2021-10-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        [WPE][GTK] TestJSC incorrectly expects garbage collector to collect variables still on the stack
        https://bugs.webkit.org/show_bug.cgi?id=222972

        Reviewed by Michael Catanzaro.

        Add JSCContextInternal.h header to be used by unit tests to use private JSC API and add
        jscContextGarbageCollect().

        * API/glib/JSCContext.cpp:
        (jscContextGarbageCollect): Moved from unit tests here adding a parameter to optionally call
        sanitizeStackForVM() before doing the garbage collection.
        * API/glib/JSCContextInternal.h: Added.

2021-10-06  Jer Noble  <jer.noble@apple.com>

        [Build-time perf] Forward declare JS TypedArrays
        https://bugs.webkit.org/show_bug.cgi?id=231196

        Reviewed by Tim Horton.

        Add a new file, Forward.h, containing forward declarations of commonly used JavaScriptCore types. Removed duplicate declarations
        of TypedArray classes from TypedArrayAdapters.h and TypedArrays.h.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/Forward.h: Added.
        * runtime/TypedArrayAdaptors.h:
        * runtime/TypedArrayAdaptersForwardDeclarations.h: Added.
        * runtime/TypedArrays.h:

2021-10-06  Mikhail R. Gadelha  <mikhail@igalia.com>

        Fix wrong edge type from get-by-val in 32 bits
        https://bugs.webkit.org/show_bug.cgi?id=231179

        Reviewed by Yusuke Suzuki.

        After https://bugs.webkit.org/show_bug.cgi?id=230801, a different type
        can be set in DFG nodes, however, in 32 bits jsc was always setting the
        type to Cell. This caused jsc to abort when verify the type of the edge:

        DFG ASSERTION FAILED: Edge verification error: D@64->Check:Object:D@60 was expected to have type Object but has type Cell (43984760078335)

        This patch changes the 32 bits version of the compileEnumeratorGetByVal
        to manually speculate the edge if it is a Cell, since a differente Kind
        could've been during Fixup.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compileEnumeratorGetByVal):

2021-10-05  Saam Barati  <sbarati@apple.com>

        Don't pass DontBuildStrings to next token after parsing an empty parameter list
        https://bugs.webkit.org/show_bug.cgi?id=225094
        <rdar://problem/77231778>

        Reviewed by Yusuke Suzuki.

        We might need the string, it turns out!

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseArguments):

2021-10-05  Patrick Angle  <pangle@apple.com>

        Web Inspector: Show color space for canvases in the Graphics tab on the overview cards
        https://bugs.webkit.org/show_bug.cgi?id=231205

        Reviewed by Devin Rousso.

        Use an enum instead of strings for color space values sent to the frontend.

        * inspector/protocol/Canvas.json:
        * inspector/scripts/codegen/generator.py:

2021-10-05  Mark Lam  <mark.lam@apple.com>

        CodeBlock should not add/remove LoopHintExecutionCounters.
        https://bugs.webkit.org/show_bug.cgi?id=231209
        rdar://83571235

        Reviewed by Saam Barati.

        This is because cached unlinked baseline JIT code would retain a pointer to those
        counters.  Hence, the UnlinkedCodeBlock should do the add /remove of the counters
        instead.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::~CodeBlock):
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::initializeLoopHintExecutionCounter):
        (JSC::UnlinkedCodeBlock::~UnlinkedCodeBlock):
        * bytecode/UnlinkedCodeBlock.h:
        * bytecode/UnlinkedCodeBlockGenerator.cpp:
        (JSC::UnlinkedCodeBlockGenerator::finalize):

2021-10-05  Kate Cheney  <katherine_cheney@apple.com>

        CSP: unsafe-eval tests timing out or failing
        https://bugs.webkit.org/show_bug.cgi?id=231113
        <rdar://problem/83425041>

        Reviewed by Brent Fulgham.

        Many imported unsafe-eval tests are failing because we don't report
        violations to the DOM or report URI when an eval is blocked. This
        patch adds support for that by calling
        ContentSecurityPolicy::allowEval() when eval is disabled.

        Eventually I think we can remove the evalEnabled() code and check the
        CSP policy instead, but I will save that for another patch.

        * API/JSAPIGlobalObject.cpp:
        * API/JSAPIGlobalObject.mm:
        * interpreter/Interpreter.cpp:
        (JSC::eval):
        * jsc.cpp:
        * runtime/DirectEvalExecutable.cpp:
        (JSC::DirectEvalExecutable::create):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        * runtime/IndirectEvalExecutable.cpp:
        (JSC::IndirectEvalExecutable::create):
        * runtime/JSGlobalObject.cpp:
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::reportViolationForUnsafeEval):
        Per the spec we should send the report to the element's document and
        bubble it up to the window.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-10-05  Xan López  <xan@igalia.com>

        [JSC][32bit] Fix bugs after unlinked baseline jit
        https://bugs.webkit.org/show_bug.cgi?id=231232

        Reviewed by Yusuke Suzuki.

        Fix a bunch of bugs introduced with unlinked baseline jit. As of
        now we are disabling DataIC on baseline JIT to get things working
        ASAP, making that work will be the next step. This makes us almost
        go back to green bots.

        (Patch co-authored with Geza Lore)

        * bytecode/CallLinkInfo.cpp:
        (JSC::CallLinkInfo::emitDataICFastPath): ASSERT we are not using DataIC on 32-bit.
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::hasDebuggerRequests const):
        (JSC::CodeBlock::debuggerRequestsAddress): Deleted.
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCall): don't use DataIC.
        (JSC::JIT::compileOpCallSlowCase): set missing label.
        * jit/JITCode.h:
        (JSC::JITCode::useDataIC): disable DataIC on baseline JIT for 32-bit.
        * jit/JITInlines.h:
        (JSC::JIT::getConstantOperand): get constants from the CodeBlock,
        since we don't do sharing on 32-bit.
        (JSC::JIT::emitValueProfilingSite): remove an overzealous ASSERT.
        (JSC::JIT::loadConstant): use sizeof(void*) instead of '8', makes
        things work on 32-bit.
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_debug): share this with 32-bit.
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_debug): Deleted.
        * llint/LowLevelInterpreter32_64.asm: do not thrash the PC register.

2021-10-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSPropertyNameEnumerator should not have cached prototype chain since empty JSPropertyNameEnumerator is shared
        https://bugs.webkit.org/show_bug.cgi?id=231202
        rdar://83815122

        Reviewed by Keith Miller.

        r282014 assumed an invariant that JSPropertyNameEnumerator's StructureChain is immutable.
        This invariant is also used in validation of JSPropertyNameEnumerator. However, this
        invariant was broken since we now have shared empty sentinel JSPropertyNameEnumerator, which can
        be used for different structures having different prototype chain.

        Since now we have shared JSPropertyNameEnumerator, JSPropertyNameEnumerator should not have
        StructureChain in its member. When invalidating StructureChain in Structure, we also clear
        cached JSPropertyNameEnumerator so that we do not get a stale JSPropertyNameEnumerator from
        Structure even though watchpoint-based validation is not used.

        This patch also removes ValidatedViaWatchpoint flag in JSPropertyNameEnumerator due to the same
        reason. We should not modify JSPropertyNameEnumerator once it is instantiated. Instead, we encode
        this flag as a lowest bit of m_cachedPropertyNameEnumerator. If it is validated via traversing (not watchpoints),
        then this bit is set. So when loading that pointer from StructureRareData, we can quickly detect
        it without even accessing to the enumerator. This fixes the issue, and it is even cleaner.
        We rename m_cachedPropertyNameEnumerator to m_cachedPropertyNameEnumeratorAndFlag since it now
        includes this flag.

        While reviewing the code, we also found that watchpoint-based validation didn't care about PolyProto.
        We should disable watchpoint-based validation if PolyProto is used.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetPropertyEnumerator):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_property_enumerator):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LowLevelInterpreter64.asm:
        * runtime/JSPropertyNameEnumerator.cpp:
        (JSC::JSPropertyNameEnumerator::visitChildrenImpl):
        * runtime/JSPropertyNameEnumerator.h:
        (JSC::propertyNameEnumerator):
        * runtime/Structure.cpp:
        (JSC::Structure::visitChildrenImpl):
        (JSC::Structure::setCachedPropertyNameEnumerator):
        (JSC::Structure::cachedPropertyNameEnumeratorAndFlag const):
        * runtime/Structure.h:
        (JSC::Structure::propertyNameEnumeratorShouldWatch const):
        * runtime/StructureInlines.h:
        (JSC::Structure::prototypeChain const):
        (JSC::Structure::clearCachedPrototypeChain):
        * runtime/StructureRareData.cpp:
        (JSC::StructureRareData::visitChildrenImpl):
        * runtime/StructureRareData.h:
        * runtime/StructureRareDataInlines.h:
        (JSC::StructureRareData::cachedPropertyNameEnumerator const):
        (JSC::StructureRareData::cachedPropertyNameEnumeratorAndFlag const):
        (JSC::StructureRareData::setCachedPropertyNameEnumerator):
        (JSC::StructureChainInvalidationWatchpoint::fireInternal):
        (JSC::StructureRareData::tryCachePropertyNameEnumeratorViaWatchpoint):
        (JSC::StructureRareData::clearCachedPropertyNameEnumerator):
        (JSC::StructureRareData::invalidateWatchpointBasedValidation): Deleted.

2021-10-04  Saam Barati  <sbarati@apple.com>

        Display return values in nicer way in the jsc REPL and add a prettyPrint function
        https://bugs.webkit.org/show_bug.cgi?id=230931
        <rdar://problem/83698777>

        Reviewed by Tadeu Zagallo.

        Currently, print(1), print("1"), and print([1]) all print to stdout
        simply as "1" (without the quotes). Same for values when running the
        REPL. This isn't super helpful. Let's print quotes for strings, and
        brackets for arrays. This patch adds a prettyPrint function to do
        that, since we have a lot of tests that depend on the old print behavior.
        
        This patch also makes values printed in the REPL the new pretty style.


        * jsc.cpp:
        (toCString):
        (printInternal):
        (JSC_DEFINE_HOST_FUNCTION):
        (runInteractive):
        (cStringFromViewWithString): Deleted.
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::toWTFStringForConsole const):
        * runtime/JSCJSValue.h:

2021-10-04  Saam Barati  <sbarati@apple.com>

        IntrinsicGetterAccessCase implementation of __proto__ needs to handle get_by_id_with_this
        https://bugs.webkit.org/show_bug.cgi?id=229951
        <rdar://problem/82787527>

        Reviewed by Yusuke Suzuki.

        The whole point of get_by_id_with_this is to have different
        slot base values for |this| vs the slot base when invoking
        getters. However, our intrinsic getter inlining wasn't respecting
        this. This patch makes the __proto__ intrinsic getter do the right
        thing. For typed array intrinsic getters, if they have different
        |this| value vs slot base, we chose not to inline them, because
        the type checks are not on the |this| value, so they're not guaranteed
        to be typed arrays. We can improve upon this in the future.

        * bytecode/IntrinsicGetterAccessCase.h:
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitLoadPrototypeWithoutCheck):
        * jit/AssemblyHelpers.h:
        * jit/IntrinsicEmitter.cpp:
        (JSC::IntrinsicGetterAccessCase::canEmitIntrinsicGetter):
        (JSC::IntrinsicGetterAccessCase::emitIntrinsicGetter):
        * jit/Repatch.cpp:
        (JSC::tryCacheGetBy):

2021-10-03  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes, early October 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=231143

        Unreviewed non-unified build fixes.

        * jit/BaselineJITCode.cpp:

2021-10-03  Lauro Moura  <lmoura@igalia.com>

        Remove control reaches end of non-void function warning

        Unreviewed. Warning introduced in r283139.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::isConstantOwnedByUnlinkedCodeBlock const):

2021-10-02  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] DateTimeFormat.resolvedOptions shouldn't return an object with other date/time properties if dateStyle or timeStyle are set
        https://bugs.webkit.org/show_bug.cgi?id=231041

        Reviewed by Ross Kirsling.

        When "dateStyle" or "timestyle" option is specified in Intl.DateTimeFormat, we should not expose detailed
        resolved format information in resolvedOptions, since specifying these options is not what the user of
        this Intl.DateTimeFormat intended. This is specified in the spec[1] step 5-d.

        [1]: https://tc39.es/ecma402/#sec-intl.datetimeformat.prototype.resolvedoptions

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::resolvedOptions const):

2021-10-02  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Enable Intl.DisplayNames without ICU version check
        https://bugs.webkit.org/show_bug.cgi?id=231122

        Reviewed by Ross Kirsling.

        Now every port requires ICU 61.2 or later. Since Intl.DisplayNames requires ICU 61, we can enable it without ICU version check.
        This simplifies Intl.DisplayNames code.

        * runtime/IntlDisplayNames.cpp:
        (JSC::IntlDisplayNames::initializeDisplayNames):
        (JSC::IntlDisplayNames::of const):
        * runtime/IntlDisplayNames.h:
        * runtime/IntlObject.cpp:
        (JSC::IntlObject::finishCreation):

2021-10-02  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Enable HAVE_ICU_U_DATE_INTERVAL_FORMAT_FORMAT_RANGE_TO_PARTS on Darwin OSS build
        https://bugs.webkit.org/show_bug.cgi?id=231120

        Reviewed by Ross Kirsling.

        We now assume that ICU is 64.2 or later in Darwin since Mojave WebKit build is no longer supported.
        We enable HAVE_ICU_U_DATE_INTERVAL_FORMAT_FORMAT_RANGE_TO_PARTS on Darwin OSS build.

        * runtime/IntlDateTimeFormat.h:

2021-10-02  Yusuke Suzuki  <ysuzuki@apple.com>

        Remove JSC hack after r283410
        https://bugs.webkit.org/show_bug.cgi?id=230261

        Reviewed by Mark Lam.

        * runtime/JSObject.cpp:
        (JSC::JSObject::getOwnPropertyDescriptor):
        * runtime/PropertySlot.h:

2021-10-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r283293.
        https://bugs.webkit.org/show_bug.cgi?id=231116

        changing print() broke a lot of random things

        Reverted changeset:

        "Print values in a nicer way in the jsc shell"
        https://bugs.webkit.org/show_bug.cgi?id=230931
        https://commits.webkit.org/r283293

2021-10-01  Yusuke Suzuki  <ysuzuki@apple.com>

        Disable new incumbent-window until it is fully implemented
        https://bugs.webkit.org/show_bug.cgi?id=230261
        <rdar://problem/83099726>

        Reviewed by Chris Dumez and Geoffrey Garen.

        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::globalObjectOfClosestCodeBlock):
        * runtime/JSObject.cpp:
        (JSC::JSObject::getOwnPropertyDescriptor):
        * runtime/PropertySlot.h:

2021-10-01  Xan López  <xan@igalia.com>

        [JSC][32bit] Fix build after unlinked baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=230803

        Reviewed by Saam Barati.

        This is enough to make things build, but pretty much nothing works
        yet. Will fix in a follow-up, this way we at least give people a
        chance at not introducing more build regressions.

        (With some code by Mikhail R. Gadelha and Geza Lore)

        * CMakeLists.txt:
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::branch32):
        (JSC::MacroAssemblerARMv7::branchAdd32):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::branchAdd32):
        * bytecode/CallLinkInfo.h:
        (JSC::CallLinkInfo::addressOfMaxArgumentCountIncludingThis):
        * jit/JIT.h:
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCall):
        * jit/JITInlines.h:
        (JSC::JIT::emitValueProfilingSite):
        (JSC::JIT::emitValueProfilingSiteIfProfiledOpcode):
        (JSC::JIT::emitArrayProfilingSiteWithCell):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_loop_hint):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitVarInjectionCheck):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emitHasPrivateSlow):
        (JSC::JIT::emitSlow_op_has_private_name):
        (JSC::JIT::emitSlow_op_has_private_brand):
        (JSC::JIT::emitResolveClosure):
        (JSC::JIT::emit_op_resolve_scope):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::emitPutGlobalVariableIndirect):
        (JSC::JIT::emit_op_put_to_scope):
        (JSC::JIT::emitSlow_op_put_to_scope):
        (JSC::JIT::emitVarInjectionCheck): Deleted.
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:

2021-10-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove CodeBlock::m_numberOfNonArgumentValueProfiles since we can get the same value from UnlinkedCodeBlock
        https://bugs.webkit.org/show_bug.cgi?id=231066

        Reviewed by Robin Morisset.

        Since UnlinkedCodeBlock has UnlinkedValueProfile FixedVector, we can get CodeBlock::m_numberOfNonArgumentValueProfiles
        from UnlinkedCodeBlock. So CodeBlock does not need to keep it in its member.
        We also reorder some fields to shrink sizeof(CodeBlock) after this change.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::finishCreation):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::numberOfNonArgumentValueProfiles):
        (JSC::CodeBlock::totalNumberOfValueProfiles):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::numberOfValueProfiles const):
        (JSC::UnlinkedCodeBlock::numberOfArrayProfiles const):

2021-10-01  Olivier Blin  <olivier.blin@softathome.com>

        [JSC][GLib] Fix typo in WrapperMap creation methods
        https://bugs.webkit.org/show_bug.cgi?id=231076

        Reviewed by Michael Catanzaro.

        * API/glib/JSCContext.cpp:
        (jscContextGetOrCreateJSWrapper):
        (jscContextCreateContextWithJSWrapper):
        * API/glib/JSCWrapperMap.cpp:
        (JSC::WrapperMap::createJSWrapper):
        (JSC::WrapperMap::createContextWithJSWrapper):
        (JSC::WrapperMap::createJSWrappper): Deleted.
        (JSC::WrapperMap::createContextWithJSWrappper): Deleted.
        * API/glib/JSCWrapperMap.h:

2021-09-30  Yusuke Suzuki  <ysuzuki@apple.com>

        Upgrade GCC requirement to 8.3.0
        https://bugs.webkit.org/show_bug.cgi?id=231042

        Reviewed by Darin Adler.

        * runtime/ConfigFile.cpp:
        (JSC::ConfigFile::canonicalizePaths):

2021-09-30  Saam Barati  <sbarati@apple.com>

        Regressions (r283288): [ macOS Debug ] webgl/2.0.0/conformance/state/gl-object-get-calls.html is timing out
        https://bugs.webkit.org/show_bug.cgi?id=231024
        <rdar://problem/83723856>

        Reviewed by Mark Lam.

        Speed up our debug assert by not using a probe.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):

2021-09-30  Saam Barati  <sbarati@apple.com>

        The DFG/FTL need to be aware that Proxy's can produce "function" for typeof and might be callable
        https://bugs.webkit.org/show_bug.cgi?id=230804
        <rdar://problem/83543951>

        Reviewed by Yusuke Suzuki.

        This patch fixes a couple bugs:
        - We were constant folding typeof on ProxyObject to "object"
          even when ProxyObject might produce a callable Proxy, and hence,
          should produce "function". This was a bug in AI.
        - This also fixes a similar bug in IsCallable's implementation in
          the FTL where we assumed that ProxyObject's type can't be callable.

        * bytecode/SpeculatedType.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):

2021-09-30  Fujii Hironori  <Hironori.Fujii@sony.com>

        Python 3 fails to run run-builtins-generator-tests : ModuleNotFoundError: No module named 'builtins_model'
        https://bugs.webkit.org/show_bug.cgi?id=230870

        Reviewed by Jonathan Bedard.

        BaseException.message has been deprecated as of Python 2.6. Use
        str(e) instead.

        Implicit relative imports have been deprecated in Python 3.
        Basically, relative imports should be used. However, the scripts
        in wkbuiltins directory are flattened when they are copied to
        WebKitBuild directory. So, relative imports can't be used.

        So, append wkbuiltins directory to sys.path as a workaround.

        * Scripts/generate-js-builtins.py:

2021-09-29  Mark Lam  <mark.lam@apple.com>

        DFG strength reduction on % operator should handle an INT_MIN divisor.
        https://bugs.webkit.org/show_bug.cgi?id=230391
        <rdar://problem/83229740>

        Reviewed by Robin Morisset.

        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):

2021-09-29  Saam Barati  <sbarati@apple.com>

        Print values in a nicer way in the jsc shell
        https://bugs.webkit.org/show_bug.cgi?id=230931

        Reviewed by Tadeu Zagallo.

        Currently, print(1), print("1"), and print([1]) all print to stdout
        simply as "1" (without the quotes). Same for values when running the
        REPL. This isn't super helpful. Let's print quotes for strings, and
        brackets for arrays.

        Some tests rely on the old print behavior. Those tests now use the legacyPrint
        instead.

        * jsc.cpp:
        (toCString):
        (printInternal):
        (JSC_DEFINE_HOST_FUNCTION):
        (runInteractive):
        (cStringFromViewWithString): Deleted.
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::toWTFStringForConsole const):
        * runtime/JSCJSValue.h:

2021-09-29  Saam Barati  <sbarati@apple.com>

        We need to load the baseline JIT's constant pool register after OSR exit to checkpoints if we return to baseline code
        https://bugs.webkit.org/show_bug.cgi?id=230972
        <rdar://83659469>

        Reviewed by Mark Lam and Yusuke Suzuki.

        Consider the following:
        - We have a CodeBlock A.
        - DFG or FTL compiles an exit to A when A is still LLInt code. This means
          the OSR exit code will materialize registers as if A is LLInt.
        - We tier up A to Baseline JIT code.
        - Now, we take the exit to A as if it's LLInt. But the checkpoint OSR exit
          code will actually jump to the tiered up baseline code when it's done,
          because it determines where to jump at runtime. Because of this, when
          we return from the checkpoint code, and if we are jumping into baseline
          code, we must always load the constant pool register.
        - There's no need to load the metadata register because that register is
          shared with LLInt code, and will already contain the right value.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::dispatchToNextInstructionDuringExit):
        (JSC::LLInt::llint_slow_path_checkpoint_osr_exit_from_inlined_call):
        (JSC::LLInt::llint_slow_path_checkpoint_osr_exit):
        (JSC::LLInt::dispatchToNextInstruction): Deleted.
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter64.asm:

2021-09-29  Basuke Suzuki  <basuke.suzuki@sony.com>

        Suppress warnings for implicit copy assignment operator/copy constructor with clang 13
        https://bugs.webkit.org/show_bug.cgi?id=230963

        Reviewed by Mark Lam.

        Added default copy constructor to suppress warning.

        * bytecode/Operands.h:

2021-09-29  Basuke Suzuki  <basuke.suzuki@sony.com>

        [JSC] Add objectTypeCounts to JSGetMemoryUsageStatistics
        https://bugs.webkit.org/show_bug.cgi?id=230957

        Reviewed by Yusuke Suzuki.

        * API/JSBase.cpp: Added objectTypeCounts property
        (JSGetMemoryUsageStatistics):
        * API/JSBasePrivate.h: Added description of objectTypeCounts property
        * jsc.cpp: Added memoryUsageStatistics() function

2021-09-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove CodeBlock::m_llintExecuteCounter
        https://bugs.webkit.org/show_bug.cgi?id=230938

        Reviewed by Keith Miller.

        CodeBlock::m_llintExecuteCounter is a pointer pointing the middle of UnlinkedCodeBlock.
        So this is not necessary to have this pointer separately to access to that from LLInt,
        since loading UnlinkedCodeBlock and accessing to the middle of that do the same number
        of loads.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::finalizeUnconditionally):
        (JSC::CodeBlock::jitSoon):
        (JSC::CodeBlock::jitNextInvocation):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::checkIfJITThresholdReached):
        (JSC::CodeBlock::dontJITAnytimeSoon):
        (JSC::CodeBlock::llintExecuteCounter const):
        (JSC::CodeBlock::addressOfJITExecuteCounter): Deleted.
        * llint/LowLevelInterpreter.asm:

2021-09-29  Saam Barati  <sbarati@apple.com>

        Code inside strength reduction can incorrectly prove that we know what lastIndex is
        https://bugs.webkit.org/show_bug.cgi?id=230802
        <rdar://problem/83543699>

        Reviewed by Mark Lam.

        The phase was searching backwards in the graph to see if it found the RegExp
        node. However, the RegExp node might be a JSConstant. Hence, the program
        didn't allocate it. So we can't assume that we know what the lastIndex is.
        We were incorrectly assuming it was "0" in a program like this:
        a: JSConstant(RegExp)
        b: RegExpExec(@a)
        
        And we assumed we're invoking RegExpExec with lastIndex is 0, because we found
        our RegExp in a backwards search. This is likely because we're also matching
        NewRegExp nodes, in which case, it is valid to say lastIndex is 0.
        
        This caused us to return a constant value that would've been the exec
        result had we invoked it with a NewRegExpNode.

        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::run):
        (JSC::DFG::StrengthReductionPhase::handleNode):

2021-09-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use FixedVector in JITConstantPool
        https://bugs.webkit.org/show_bug.cgi?id=230937

        Reviewed by Keith Miller.

        This patch changes JITConstantPool to use FixedVector. This allocates exact size
        of memory and Making sizeof(JITConstantPool) smaller. We also use CompactPointerTuple
        for JITConstantPool::Value since it is faster for access.

        To achieve that, in JIT, we append Value to normal Vector. And when finalizing BaselineJITCode
        we construct JITConstantPool from that Vector.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::setupWithUnlinkedBaselineCode):
        * jit/BaselineJITCode.h:
        (JSC::JITConstantPool::JITConstantPool):
        (JSC::JITConstantPool::add): Deleted.
        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        (JSC::JIT::addToConstantPool):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):
        (JSC::JIT::emit_op_iterator_open):
        (JSC::JIT::emit_op_iterator_next):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitNewFuncCommon):
        (JSC::JIT::emitNewFuncExprCommon):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_get_private_name):
        (JSC::JIT::emit_op_set_private_brand):
        (JSC::JIT::emit_op_check_private_brand):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emit_op_put_private_name):
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emit_op_del_by_val):
        (JSC::JIT::emit_op_try_get_by_id):
        (JSC::JIT::emit_op_get_by_id_direct):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emit_op_in_by_id):
        (JSC::JIT::emit_op_in_by_val):
        (JSC::JIT::emitHasPrivate):
        (JSC::JIT::emit_op_enumerator_get_by_val):

2021-09-28  Saam Barati  <sbarati@apple.com>

        DoesGCCheck does not use enough bits for nodeIndex
        https://bugs.webkit.org/show_bug.cgi?id=230915
        <rdar://83297515>

        Reviewed by Mark Lam.

        * dfg/DFGDoesGCCheck.h:
        (JSC::DFG::DoesGCCheck::DoesGCCheck):
        (JSC::DFG::DoesGCCheck::encode):
        (JSC::DFG::DoesGCCheck::set):
        (JSC::DFG::DoesGCCheck::expectDoesGC const):
        (JSC::DFG::DoesGCCheck::isSpecial const):
        (JSC::DFG::DoesGCCheck::special):
        (JSC::DFG::DoesGCCheck::nodeOp):
        (JSC::DFG::DoesGCCheck::nodeIndex):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::compileExit):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileLoopHint):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):

2021-09-28  Alex Christensen  <achristensen@webkit.org>

        Mostly fix Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=230868

        Reviewed by Don Olmstead.

        * shell/PlatformMac.cmake:

2021-09-28  Saam Barati  <sbarati@apple.com>

        Make byte codes with arithmetic profiles switch to using an index instead of a pointer in metadata
        https://bugs.webkit.org/show_bug.cgi?id=230798

        Reviewed by Yusuke Suzuki.

        This patch makes each bytecode that uses a BinaryArithProfile/UnaryArithProfile
        have an index into a table instead of storing a pointer to the profile in its metadata.
        Then, we can just load the profile using the index in the bytecode, which saves memory.

        * bytecode/BytecodeList.rb:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::binaryArithProfileForPC):
        (JSC::CodeBlock::unaryArithProfileForPC):
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::allocateSharedProfiles):
        * bytecode/UnlinkedCodeBlock.h:
        * bytecode/UnlinkedCodeBlockGenerator.cpp:
        (JSC::UnlinkedCodeBlockGenerator::finalize):
        * bytecode/UnlinkedCodeBlockGenerator.h:
        (JSC::UnlinkedCodeBlockGenerator::addBinaryArithProfile):
        (JSC::UnlinkedCodeBlockGenerator::addUnaryArithProfile):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitUnaryOp):
        (JSC::BytecodeGenerator::emitInc):
        (JSC::BytecodeGenerator::emitDec):
        * bytecompiler/BytecodeGenerator.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_negate):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emit_op_div):
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emit_op_sub):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::updateArithProfileForUnaryArithOp):
        (JSC::JSC_DEFINE_COMMON_SLOW_PATH):

2021-09-28  Alexey Shvayka  <shvaikalesh@gmail.com>

        Speed up setting JSFunction's "prototype" property
        https://bugs.webkit.org/show_bug.cgi?id=230864

        Reviewed by Yusuke Suzuki.

        This patch:

          1. Removes "prototype" lookup from put(), which was non-inlineable and created an
             interim object with "constructor" field. Instead, the new value is put directly,
             with correct attributes, and respecting an altered receiver. This results in 2.8X
             perf boost for very common case of setting "prototype": `Cat.prototype = new Animal`.

          2. Simplifies initialization of class constructor's prototype object, removing tentacles
             from getOwnPropertySlot() and extracting constructPrototypeObject() helper. Provides
             a fast path for op_define_data_property, speeding up `class` creation by ~40%, while
             reifies normal function's prototype with correct attributes for Object.defineProperty().

        * runtime/JSFunction.cpp:
        (JSC::constructPrototypeObject):
        (JSC::JSFunction::getOwnPropertySlot):
        (JSC::JSFunction::put):
        (JSC::JSFunction::defineOwnProperty):

2021-09-27  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Add ApproximateTime
        https://bugs.webkit.org/show_bug.cgi?id=230876

        Reviewed by Filip Pizlo.

        This patch adds ApproximateTime, which offers monotonically increasing time but with coarse-grained resolution.
        ApproximateTime::now() is faster than normal MonotonicTime::now(), so that we can use this when we do not care
        about high resolution. For example, in Darwin x64, it is ~4x faster.
        Internally, it is using mach_approximate_time() in Darwin, clock_gettime+CLOCK_MONOTONIC_COARSE in Linux, and
        clock_gettime+CLOCK_MONOTONIC_FAST in FreeBSD. On the other platforms, we simply use the same source to MonotonicTime.

            wall-time-now             102.2614+-0.2449
            approximate-time-now       23.2583+-0.4083
            monotonic-time-now         88.8518+-2.4106

        We would like to use it in some places in JavaScriptCore in a subsequent patch: CodeBlock's creation time, GC time etc.

        * tools/JSDollarVM.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSDollarVM::finishCreation):

2021-09-28  Alexey Shvayka  <shvaikalesh@gmail.com>

        Tweak isCallable() to early return `true` for InternalFunction instances
        https://bugs.webkit.org/show_bug.cgi?id=230869

        Reviewed by Yusuke Suzuki.

        With this change, isCallable() avoids calling into InternalFunction::getCallData(),
        which is concurrency-aware and guaranteed to never return CallData::Type::None.
        We have a similar optimization for JSFunction.

        * runtime/JSCellInlines.h:
        (JSC::JSCell::isCallableWithConcurrency):

2021-09-27  Saam Barati  <sbarati@apple.com>

        Build an unlinked baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=229223
        <rdar://problem/82321772>

        Reviewed by Yusuke Suzuki.

        This patch adds an "unlinked" baseline JIT to JSVALUE64 platforms. The JIT
        code produced by this baseline JIT can be shared between all CodeBlocks that
        share an UnlinkedCodeBlock. The benefit of this is, if we're creating a CodeBlock
        from an UnlinkedCodeBlock that already compiled an unlinked baseline JIT
        instance, this new CodeBlock just starts off executing in the baseline JIT
        "for free".
        
        To make this work, the code we emit now needs to be independent of a specific
        CodeBlock instance. We use a CodeBlock instance for minimal profiling information
        when compiling, but otherwise, the code is tied to the UnlinkedCodeBlock. When
        we need CodeBlock specific information, we load it. This usually means things
        like we'll load things from the Metadata dynamically. This patch also adds a
        "linked constant pool" concept, and anytime we instantiate such a CodeBlock,
        we also need to instantiate this "linked constant pool". This contains things
        like our inline cache data structures (StructureStubInfo*), JSGlobalObject*,
        etc.
        
        Unlinked baseline JIT always runs ICs in the "data" mode. To make this work, I
        made data ICs work on x86_64. To do this, we no longer call/ret to the IC.
        Instead, we jump to the IC, and the IC jumps back by loading the "done" location
        from the StructureStubInfo dynamically. This simplifies the design to not be
        based on the arm64 calling convention, and keeps the same performance characteristics. 
        
        This patch also adds a new version of InlineAccess that is only used in baseline
        JIT (for now). In the future, we can make the DFG/FTL also use this for Data
        ICs. But we don't need to do that yet since those tiers don't use data ICs by
        default. The baseline JIT now has a pure data IC approach to InlineAccess. So
        instead of repatching code, we repatch fields we load dynamically.
        
        This patch also cleans up a few things in OSR exit, where both DFG/FTL were
        storing callee saves to the callee saves buffer in a weird place, and separate
        from one another. I noticed this code can be simplified if we just store
        callee saves at the end of the OSR exit handler, and from common JIT emission
        code.
        
        This patch also fixes a bug where we could end up with the wrong (and always
        more negative) SP in the baseline JIT. This could happen when we OSR exit
        from an inlined getter/setter. The OSR exit code puts the return PC when
        returning to the call site of the getter/setter to be the inline cache's
        "done location". However, this "done location" didn't used to restore SP.
        This patch conservatively makes it so that we restore the SP at these sites.
        
        This is measured as a 1% speedup on Speedometer2.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::fromStructureStubInfo):
        (JSC::AccessCase::generateImpl):
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeOperandsForCheckpoint.h:
        (JSC::valueProfileOffsetFor):
        * bytecode/CallLinkInfo.cpp:
        (JSC::CallLinkInfo::fastPathStart):
        (JSC::CallLinkInfo::emitFastPathImpl):
        (JSC::CallLinkInfo::emitFastPath):
        (JSC::CallLinkInfo::emitTailCallFastPath):
        (JSC::CallLinkInfo::emitDataICFastPath):
        (JSC::CallLinkInfo::emitTailCallDataICFastPath):
        (JSC::CallLinkInfo::emitDataICSlowPath):
        (JSC::CallLinkInfo::initializeDataIC):
        (JSC::CallLinkInfo::emitDirectFastPath):
        (JSC::CallLinkInfo::emitDirectTailCallFastPath):
        * bytecode/CallLinkInfo.h:
        (JSC::CallLinkInfo::offsetOfMaxArgumentCountIncludingThis):
        (JSC::CallLinkInfo::slowStub): Deleted.
        (JSC::CallLinkInfo::addressOfMaxArgumentCountIncludingThis): Deleted.
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::setupWithUnlinkedBaselineCode):
        (JSC::CodeBlock::isConstantOwnedByUnlinkedCodeBlock const):
        (JSC::CodeBlock::setConstantRegisters):
        (JSC::CodeBlock::finalizeJITInlineCaches):
        (JSC::CodeBlock::finalizeUnconditionally):
        (JSC::CodeBlock::frameRegisterCount):
        (JSC::CodeBlock::binaryArithProfileForPC):
        (JSC::CodeBlock::unaryArithProfileForPC):
        (JSC::CodeBlock::findPC):
        (JSC::CodeBlock::jitSoon):
        (JSC::CodeBlock::jitNextInvocation):
        (JSC::CodeBlock::dumpMathICStats):
        (JSC::CodeBlock::finalizeBaselineJITInlineCaches): Deleted.
        (JSC::CodeBlock::addJITAddIC): Deleted.
        (JSC::CodeBlock::addJITMulIC): Deleted.
        (JSC::CodeBlock::addJITSubIC): Deleted.
        (JSC::CodeBlock::addJITNegIC): Deleted.
        (JSC::CodeBlock::setPCToCodeOriginMap): Deleted.
        (JSC::CodeBlock::thresholdForJIT): Deleted.
        (JSC::CodeBlock::jitAfterWarmUp): Deleted.
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::JITData::offsetOfJITConstantPool):
        (JSC::CodeBlock::offsetOfJITData):
        (JSC::CodeBlock::offsetOfArgumentValueProfiles):
        (JSC::CodeBlock::offsetOfConstantsVectorBuffer):
        (JSC::CodeBlock::baselineJITConstantPool):
        (JSC::CodeBlock::checkIfJITThresholdReached):
        (JSC::CodeBlock::dontJITAnytimeSoon):
        (JSC::CodeBlock::llintExecuteCounter const):
        (JSC::CodeBlock::offsetOfDebuggerRequests):
        (JSC::CodeBlock::offsetOfShouldAlwaysBeInlined):
        (JSC::CodeBlock::loopHintsAreEligibleForFuzzingEarlyReturn):
        (JSC::CodeBlock::addressOfNumParameters): Deleted.
        (JSC::CodeBlock::isKnownCell): Deleted.
        (JSC::CodeBlock::addMathIC): Deleted.
        (JSC::CodeBlock::setJITCodeMap): Deleted.
        (JSC::CodeBlock::jitCodeMap): Deleted.
        (JSC::CodeBlock::switchJumpTable): Deleted.
        (JSC::CodeBlock::stringSwitchJumpTable): Deleted.
        * bytecode/CodeBlockInlines.h:
        (JSC::CodeBlock::forEachValueProfile):
        (JSC::CodeBlock::jitCodeMap):
        (JSC::CodeBlock::baselineSwitchJumpTable):
        (JSC::CodeBlock::baselineStringSwitchJumpTable):
        (JSC::CodeBlock::dfgSwitchJumpTable):
        (JSC::CodeBlock::dfgStringSwitchJumpTable):
        * bytecode/ExecutableToCodeBlockEdge.h:
        * bytecode/ExecutionCounter.cpp:
        (JSC::ExecutionCounter<countingVariant>::setThreshold):
        * bytecode/ExecutionCounter.h:
        (JSC::ExecutionCounter::clippedThreshold):
        * bytecode/GetByIdMetadata.h:
        (JSC::GetByIdModeMetadataArrayLength::offsetOfArrayProfile):
        (JSC::GetByIdModeMetadata::offsetOfMode):
        * bytecode/GetByStatus.cpp:
        (JSC::GetByStatus::computeForStubInfoWithoutExitSiteFeedback):
        * bytecode/GetterSetterAccessCase.cpp:
        (JSC::GetterSetterAccessCase::emitDOMJITGetter):
        * bytecode/InByStatus.cpp:
        (JSC::InByStatus::computeForStubInfoWithoutExitSiteFeedback):
        * bytecode/InlineAccess.cpp:
        (JSC::InlineAccess::generateSelfPropertyAccess):
        (JSC::InlineAccess::canGenerateSelfPropertyReplace):
        (JSC::InlineAccess::generateSelfPropertyReplace):
        (JSC::InlineAccess::isCacheableArrayLength):
        (JSC::InlineAccess::generateArrayLength):
        (JSC::InlineAccess::isCacheableStringLength):
        (JSC::InlineAccess::generateStringLength):
        (JSC::InlineAccess::generateSelfInAccess):
        (JSC::InlineAccess::rewireStubAsJumpInAccess):
        (JSC::InlineAccess::resetStubAsJumpInAccess):
        * bytecode/InlineAccess.h:
        * bytecode/IterationModeMetadata.h:
        (JSC::IterationModeMetadata::offsetOfSeenModes):
        * bytecode/LLIntCallLinkInfo.h:
        (JSC::LLIntCallLinkInfo::offsetOfArrayProfile):
        * bytecode/Opcode.h:
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessGenerationState::succeed):
        (JSC::AccessGenerationState::calculateLiveRegistersForCallAndExceptionHandling):
        (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions):
        (JSC::PolymorphicAccess::regenerate):
        * bytecode/PolymorphicAccess.h:
        (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions): Deleted.
        * bytecode/PutByStatus.cpp:
        (JSC::PutByStatus::computeForStubInfo):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::initGetByIdSelf):
        (JSC::StructureStubInfo::initPutByIdReplace):
        (JSC::StructureStubInfo::initInByIdSelf):
        (JSC::StructureStubInfo::addAccessCase):
        (JSC::StructureStubInfo::reset):
        (JSC::StructureStubInfo::visitWeakReferences):
        (JSC::StructureStubInfo::propagateTransitions):
        (JSC::StructureStubInfo::initializeFromUnlinkedStructureStubInfo):
        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::offsetOfByIdSelfOffset):
        (JSC::StructureStubInfo::offsetOfInlineAccessBaseStructure):
        (JSC::StructureStubInfo::inlineAccessBaseStructure):
        (JSC::StructureStubInfo::offsetOfDoneLocation):
        * bytecode/SuperSampler.cpp:
        (JSC::printSuperSamplerState):
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::UnlinkedCodeBlock::hasIdentifier):
        (JSC::UnlinkedCodeBlock::thresholdForJIT):
        (JSC::UnlinkedCodeBlock::allocateSharedProfiles):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::constantRegister):
        (JSC::UnlinkedCodeBlock::instructionAt const):
        (JSC::UnlinkedCodeBlock::bytecodeOffset):
        (JSC::UnlinkedCodeBlock::instructionsSize const):
        (JSC::UnlinkedCodeBlock::loopHintsAreEligibleForFuzzingEarlyReturn):
        (JSC::UnlinkedCodeBlock::outOfLineJumpOffset):
        (JSC::UnlinkedCodeBlock::binaryArithProfile):
        (JSC::UnlinkedCodeBlock::unaryArithProfile):
        (JSC::UnlinkedCodeBlock::llintExecuteCounter):
        * bytecode/UnlinkedMetadataTable.h:
        (JSC::UnlinkedMetadataTable::offsetInMetadataTable):
        * bytecode/ValueProfile.h:
        (JSC::ValueProfileBase::ValueProfileBase):
        (JSC::ValueProfileBase::clearBuckets):
        (JSC::ValueProfile::offsetOfFirstBucket):
        * dfg/DFGCommonData.h:
        * dfg/DFGJITCode.cpp:
        * dfg/DFGJITCode.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::compileExit):
        * dfg/DFGOSRExitCompilerCommon.cpp:
        (JSC::DFG::handleExitCounts):
        (JSC::DFG::callerReturnPC):
        (JSC::DFG::reifyInlinedCallFrames):
        (JSC::DFG::adjustAndJumpToTarget):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePutPrivateName):
        (JSC::DFG::SpeculativeJIT::compileValueAdd):
        (JSC::DFG::SpeculativeJIT::compileValueSub):
        (JSC::DFG::SpeculativeJIT::compileValueNegate):
        (JSC::DFG::SpeculativeJIT::compileValueMul):
        (JSC::DFG::SpeculativeJIT::compileLogShadowChickenTail):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile):
        * ftl/FTLJITCode.h:
        * ftl/FTLLink.cpp:
        (JSC::FTL::link):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::addMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileUnaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileBinaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutPrivateName):
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        * generator/Metadata.rb:
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::storeProperty):
        (JSC::AssemblyHelpers::emitVirtualCall):
        (JSC::AssemblyHelpers::emitVirtualCallWithoutMovingGlobalObject):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::copyCalleeSavesToEntryFrameCalleeSavesBuffer):
        * jit/BaselineJITCode.cpp: Added.
        (JSC::MathICHolder::addJITAddIC):
        (JSC::MathICHolder::addJITMulIC):
        (JSC::MathICHolder::addJITSubIC):
        (JSC::MathICHolder::addJITNegIC):
        (JSC::MathICHolder::adoptMathICs):
        (JSC::BaselineJITCode::BaselineJITCode):
        (JSC::BaselineJITCode::~BaselineJITCode):
        * jit/BaselineJITCode.h: Added.
        (JSC::JITConstantPool::add):
        (JSC::JITConstantPool::size const):
        (JSC::JITConstantPool::at const):
        * jit/BaselineJITPlan.cpp:
        (JSC::BaselineJITPlan::finalize):
        * jit/CCallHelpers.cpp:
        (JSC::CCallHelpers::logShadowChickenTailPacketImpl):
        (JSC::CCallHelpers::logShadowChickenTailPacket):
        * jit/CCallHelpers.h:
        * jit/CallFrameShuffleData.cpp:
        (JSC::CallFrameShuffleData::setupCalleeSaveRegisters):
        * jit/CallFrameShuffleData.h:
        * jit/CallFrameShuffler.cpp:
        (JSC::CallFrameShuffler::CallFrameShuffler):
        (JSC::CallFrameShuffler::prepareForTailCall):
        * jit/CallFrameShuffler.h:
        (JSC::CallFrameShuffler::snapshot const):
        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        (JSC::JIT::emitEnterOptimizationCheck):
        (JSC::JIT::emitNotifyWriteWatchpoint):
        (JSC::JIT::emitVarReadOnlyCheck):
        (JSC::JIT::assertStackPointerOffset):
        (JSC::JIT::resetSP):
        (JSC::JIT::emitPutCodeBlockToFrameInPrologue):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::emitMaterializeMetadataAndConstantPoolRegisters):
        (JSC::JIT::emitRestoreCalleeSaves):
        (JSC::JIT::compileAndLinkWithoutFinalizing):
        (JSC::JIT::link):
        (JSC::JIT::finalizeOnMainThread):
        (JSC::JIT::privateCompile):
        (JSC::JIT::frameRegisterCountFor):
        (JSC::JIT::stackPointerOffsetFor):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_compareAndJumpSlowImpl):
        (JSC::JIT::emit_compareAndJumpSlow):
        (JSC::JIT::emit_op_negate):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emitMathICFast):
        (JSC::JIT::emitMathICSlow):
        (JSC::JIT::emit_op_div):
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emit_op_sub):
        * jit/JITCall.cpp:
        (JSC::JIT::emitPutCallResult):
        (JSC::JIT::compileSetupFrame):
        (JSC::JIT::compileCallEval):
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileTailCall):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        (JSC::JIT::emit_op_iterator_open):
        (JSC::JIT::emitSlow_op_iterator_open):
        (JSC::JIT::emit_op_iterator_next):
        (JSC::JIT::emitSlow_op_iterator_next):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::emitPutCallResult):
        (JSC::JIT::compileSetupFrame):
        (JSC::JIT::compileCallEval):
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        (JSC::JIT::emit_op_iterator_open):
        (JSC::JIT::emitSlow_op_iterator_open):
        (JSC::JIT::emit_op_iterator_next):
        (JSC::JIT::emitSlow_op_iterator_next):
        * jit/JITCode.h:
        (JSC::JITCode::useDataIC):
        (JSC::JITCode::pcToCodeOriginMap):
        * jit/JITCompilationKey.cpp:
        (JSC::JITCompilationKey::dump const):
        * jit/JITCompilationKey.h:
        (JSC::JITCompilationKey::JITCompilationKey):
        (JSC::JITCompilationKey::operator! const):
        (JSC::JITCompilationKey::isHashTableDeletedValue const):
        (JSC::JITCompilationKey::operator== const):
        (JSC::JITCompilationKey::hash const):
        (JSC::JITCompilationKey::profiledBlock const): Deleted.
        * jit/JITInlineCacheGenerator.cpp:
        (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator):
        (JSC::JITInlineCacheGenerator::finalize):
        (JSC::JITInlineCacheGenerator::generateBaselineDataICFastPath):
        (JSC::JITGetByIdGenerator::JITGetByIdGenerator):
        (JSC::generateGetByIdInlineAccess):
        (JSC::JITGetByIdGenerator::generateBaselineDataICFastPath):
        (JSC::JITGetByIdWithThisGenerator::generateBaselineDataICFastPath):
        (JSC::JITPutByIdGenerator::generateBaselineDataICFastPath):
        (JSC::JITDelByValGenerator::generateFastPath):
        (JSC::JITDelByIdGenerator::generateFastPath):
        (JSC::JITInByValGenerator::generateFastPath):
        (JSC::JITInByIdGenerator::generateBaselineDataICFastPath):
        (JSC::JITInstanceOfGenerator::generateFastPath):
        (JSC::JITGetByValGenerator::generateFastPath):
        (JSC::JITPutByValGenerator::generateFastPath):
        (JSC::JITPrivateBrandAccessGenerator::generateFastPath):
        * jit/JITInlineCacheGenerator.h:
        * jit/JITInlines.h:
        (JSC::JIT::isOperandConstantDouble):
        (JSC::JIT::isOperandConstantInt):
        (JSC::JIT::isKnownCell):
        (JSC::JIT::getConstantOperand):
        (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile):
        (JSC::JIT::linkSlowCaseIfNotJSCell):
        (JSC::JIT::advanceToNextCheckpoint):
        (JSC::JIT::emitJumpSlowToHotForCheckpoint):
        (JSC::JIT::isOperandConstantChar):
        (JSC::JIT::emitValueProfilingSite):
        (JSC::JIT::emitValueProfilingSiteIfProfiledOpcode):
        (JSC::JIT::emitArrayProfilingSiteWithCell):
        (JSC::JIT::emitLoadDouble):
        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
        (JSC::JIT::emitGetVirtualRegister):
        (JSC::JIT::jumpTarget):
        (JSC::JIT::loadPtrFromMetadata):
        (JSC::JIT::load32FromMetadata):
        (JSC::JIT::load8FromMetadata):
        (JSC::JIT::store8ToMetadata):
        (JSC::JIT::store32ToMetadata):
        (JSC::JIT::materializePointerIntoMetadata):
        (JSC::JIT::loadConstant):
        (JSC::JIT::loadGlobalObject):
        (JSC::JIT::loadCodeBlockConstant):
        (JSC::JIT::copiedGetPutInfo): Deleted.
        (JSC::JIT::copiedArithProfile): Deleted.
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_mov):
        (JSC::JIT::emit_op_new_object):
        (JSC::JIT::emitSlow_op_new_object):
        (JSC::JIT::emit_op_overrides_has_instance):
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof):
        (JSC::JIT::emit_op_typeof_is_undefined):
        (JSC::JIT::op_ret_handlerGenerator):
        (JSC::JIT::emit_op_to_primitive):
        (JSC::JIT::emit_op_set_function_name):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::valueIsFalseyGenerator):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jeq_ptr):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::valueIsTruthyGenerator):
        (JSC::JIT::emit_op_throw):
        (JSC::JIT::op_throw_handlerGenerator):
        (JSC::JIT::emitSlow_op_jstricteq):
        (JSC::JIT::emitSlow_op_jnstricteq):
        (JSC::JIT::emit_op_to_number):
        (JSC::JIT::emit_op_to_numeric):
        (JSC::JIT::emit_op_to_object):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_switch_char):
        (JSC::JIT::emit_op_switch_string):
        (JSC::JIT::emit_op_debug):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emit_op_enter):
        (JSC::JIT::op_enter_handlerGenerator):
        (JSC::JIT::emit_op_to_this):
        (JSC::JIT::emit_op_create_this):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emitSlow_op_neq):
        (JSC::JIT::emitSlow_op_jeq):
        (JSC::JIT::emitSlow_op_jneq):
        (JSC::JIT::emitSlow_op_instanceof_custom):
        (JSC::JIT::emit_op_loop_hint):
        (JSC::JIT::emitSlow_op_check_traps):
        (JSC::JIT::op_check_traps_handlerGenerator):
        (JSC::JIT::emit_op_new_regexp):
        (JSC::JIT::emitNewFuncCommon):
        (JSC::JIT::emitNewFuncExprCommon):
        (JSC::JIT::emit_op_new_array):
        (JSC::JIT::emit_op_new_array_with_size):
        (JSC::JIT::emit_op_profile_type):
        (JSC::JIT::emit_op_log_shadow_chicken_tail):
        (JSC::JIT::emit_op_profile_control_flow):
        (JSC::JIT::emit_op_get_argument):
        (JSC::JIT::emit_op_get_prototype_of):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_new_object):
        (JSC::JIT::emitSlow_op_new_object):
        (JSC::JIT::emit_op_overrides_has_instance):
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof_custom):
        (JSC::JIT::emit_op_typeof_is_undefined):
        (JSC::JIT::emit_op_set_function_name):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::compileOpEqJumpSlow):
        (JSC::JIT::emitSlow_op_neq):
        (JSC::JIT::emitSlow_op_jstricteq):
        (JSC::JIT::emitSlow_op_jnstricteq):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emit_op_throw):
        (JSC::JIT::emit_op_to_number):
        (JSC::JIT::emit_op_to_numeric):
        (JSC::JIT::emit_op_to_object):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_switch_char):
        (JSC::JIT::emit_op_switch_string):
        (JSC::JIT::emit_op_enter):
        (JSC::JIT::emit_op_create_this):
        (JSC::JIT::emit_op_to_this):
        (JSC::JIT::emit_op_profile_type):
        (JSC::JIT::emit_op_log_shadow_chicken_tail):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jit/JITOperations.h:
        * jit/JITPlan.cpp:
        (JSC::JITPlan::key):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::generateGetByValSlowCase):
        (JSC::JIT::slow_op_get_by_val_prepareCallGenerator):
        (JSC::JIT::emit_op_get_private_name):
        (JSC::JIT::emitSlow_op_get_private_name):
        (JSC::JIT::slow_op_get_private_name_prepareCallGenerator):
        (JSC::JIT::emit_op_set_private_brand):
        (JSC::JIT::emitSlow_op_set_private_brand):
        (JSC::JIT::emit_op_check_private_brand):
        (JSC::JIT::emitSlow_op_check_private_brand):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::slow_op_put_by_val_prepareCallGenerator):
        (JSC::JIT::emit_op_put_private_name):
        (JSC::JIT::emitSlow_op_put_private_name):
        (JSC::JIT::slow_op_put_private_name_prepareCallGenerator):
        (JSC::JIT::emit_op_put_getter_by_id):
        (JSC::JIT::emit_op_put_setter_by_id):
        (JSC::JIT::emit_op_put_getter_setter_by_id):
        (JSC::JIT::emit_op_put_getter_by_val):
        (JSC::JIT::emit_op_put_setter_by_val):
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emitSlow_op_del_by_id):
        (JSC::JIT::slow_op_del_by_id_prepareCallGenerator):
        (JSC::JIT::emit_op_del_by_val):
        (JSC::JIT::emitSlow_op_del_by_val):
        (JSC::JIT::slow_op_del_by_val_prepareCallGenerator):
        (JSC::JIT::emit_op_try_get_by_id):
        (JSC::JIT::emitSlow_op_try_get_by_id):
        (JSC::JIT::emit_op_get_by_id_direct):
        (JSC::JIT::emitSlow_op_get_by_id_direct):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::slow_op_get_by_id_prepareCallGenerator):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        (JSC::JIT::slow_op_get_by_id_with_this_prepareCallGenerator):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::slow_op_put_by_id_prepareCallGenerator):
        (JSC::JIT::emit_op_in_by_id):
        (JSC::JIT::emitSlow_op_in_by_id):
        (JSC::JIT::emit_op_in_by_val):
        (JSC::JIT::emitSlow_op_in_by_val):
        (JSC::JIT::emitHasPrivate):
        (JSC::JIT::emitHasPrivateSlow):
        (JSC::JIT::emitSlow_op_has_private_name):
        (JSC::JIT::emitSlow_op_has_private_brand):
        (JSC::JIT::emitVarInjectionCheck):
        (JSC::JIT::emitResolveClosure):
        (JSC::JIT::emit_op_resolve_scope):
        (JSC::JIT::generateOpResolveScopeThunk):
        (JSC::JIT::slow_op_resolve_scopeGenerator):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::emitSlow_op_get_from_scope):
        (JSC::JIT::generateOpGetFromScopeThunk):
        (JSC::JIT::slow_op_get_from_scopeGenerator):
        (JSC::JIT::emit_op_put_to_scope):
        (JSC::JIT::emitSlow_op_put_to_scope):
        (JSC::JIT::slow_op_put_to_scopeGenerator):
        (JSC::JIT::emit_op_get_from_arguments):
        (JSC::JIT::emit_op_get_internal_field):
        (JSC::JIT::emit_op_enumerator_next):
        (JSC::JIT::emit_op_enumerator_get_by_val):
        (JSC::JIT::emit_enumerator_has_propertyImpl):
        (JSC::JIT::emitWriteBarrier):
        (JSC::JIT::emitPutGlobalVariable): Deleted.
        (JSC::JIT::emitPutGlobalVariableIndirect): Deleted.
        (JSC::JIT::emitPutClosureVar): Deleted.
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_getter_by_id):
        (JSC::JIT::emit_op_put_setter_by_id):
        (JSC::JIT::emit_op_put_getter_setter_by_id):
        (JSC::JIT::emit_op_put_getter_by_val):
        (JSC::JIT::emit_op_put_setter_by_val):
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emit_op_del_by_val):
        (JSC::JIT::emitSlow_op_del_by_val):
        (JSC::JIT::emitSlow_op_del_by_id):
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_get_private_name):
        (JSC::JIT::emitSlow_op_get_private_name):
        (JSC::JIT::emit_op_put_private_name):
        (JSC::JIT::emitSlow_op_put_private_name):
        (JSC::JIT::emit_op_set_private_brand):
        (JSC::JIT::emitSlow_op_set_private_brand):
        (JSC::JIT::emit_op_check_private_brand):
        (JSC::JIT::emitSlow_op_check_private_brand):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emit_op_try_get_by_id):
        (JSC::JIT::emitSlow_op_try_get_by_id):
        (JSC::JIT::emit_op_get_by_id_direct):
        (JSC::JIT::emitSlow_op_get_by_id_direct):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::emit_op_in_by_id):
        (JSC::JIT::emitSlow_op_in_by_id):
        (JSC::JIT::emit_op_in_by_val):
        (JSC::JIT::emitSlow_op_in_by_val):
        (JSC::JIT::emitHasPrivate):
        (JSC::JIT::emitHasPrivateSlow):
        (JSC::JIT::emitVarInjectionCheck):
        (JSC::JIT::emit_op_resolve_scope):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::emitSlow_op_get_from_scope):
        (JSC::JIT::emit_op_put_to_scope):
        (JSC::JIT::emitSlow_op_put_to_scope):
        (JSC::JIT::emit_op_get_from_arguments):
        (JSC::JIT::emit_op_get_internal_field):
        * jit/Repatch.cpp:
        (JSC::tryCacheGetBy):
        (JSC::tryCachePutBy):
        (JSC::tryCacheInBy):
        (JSC::unlinkCall):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::jitCompileAndSetHeuristics):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CacheableIdentifier.h:
        * runtime/CacheableIdentifierInlines.h:
        (JSC::CacheableIdentifier::createFromIdentifierOwnedByCodeBlock):
        * runtime/CachedTypes.cpp:
        (JSC::CachedCodeBlock::numBinaryArithProfiles const):
        (JSC::CachedCodeBlock::numUnaryArithProfiles const):
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::CachedCodeBlock<CodeBlockType>::encode):
        * runtime/CommonSlowPaths.cpp:
        (JSC::updateArithProfileForUnaryArithOp):
        * runtime/FunctionExecutable.h:
        * runtime/Options.cpp:
        (JSC::Options::recomputeDependentOptions):
        * runtime/OptionsList.h:
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::prepareForExecutionImpl):
        * wasm/WasmLLIntTierUpCounter.h:
        (JSC::Wasm::LLIntTierUpCounter::optimizeAfterWarmUp):
        (JSC::Wasm::LLIntTierUpCounter::optimizeSoon):
        * wasm/WasmTierUpCount.cpp:
        (JSC::Wasm::TierUpCount::TierUpCount):
        * wasm/WasmTierUpCount.h:
        (JSC::Wasm::TierUpCount::optimizeAfterWarmUp):
        (JSC::Wasm::TierUpCount::optimizeNextInvocation):
        (JSC::Wasm::TierUpCount::optimizeSoon):

2021-09-27  Xan López  <xan@igalia.com>

        [JSC][32bit] Fix build after r283098
        https://bugs.webkit.org/show_bug.cgi?id=230856

        Unreviewed build fix.

        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_jeq_ptr): remove unused (broken) line.

2021-09-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r283102, r283103 and r283104.
        https://bugs.webkit.org/show_bug.cgi?id=230854

        It regresses JetStream2 on iOS devices

        Reverted changesets:

        "Build an unlinked baseline JIT"
        https://bugs.webkit.org/show_bug.cgi?id=229223
        https://commits.webkit.org/r283102

        "Unreviewed, fix CLoop build"
        https://bugs.webkit.org/show_bug.cgi?id=229223
        https://commits.webkit.org/r283103

        "Unreviewed, fix CLoop build part 2"
        https://bugs.webkit.org/show_bug.cgi?id=229223
        https://commits.webkit.org/r283104

2021-09-27  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix CLoop build part 2
        https://bugs.webkit.org/show_bug.cgi?id=229223

        * llint/LowLevelInterpreter64.asm:

2021-09-27  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix CLoop build
        https://bugs.webkit.org/show_bug.cgi?id=229223

        * llint/LLIntOfflineAsmConfig.h:
        * llint/LowLevelInterpreter64.asm:

2021-09-27  Saam Barati  <sbarati@apple.com>

        Build an unlinked baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=229223
        <rdar://problem/82321772>

        Reviewed by Yusuke Suzuki.

        This patch adds an "unlinked" baseline JIT to JSVALUE64 platforms. The JIT
        code produced by this baseline JIT can be shared between all CodeBlocks that
        share an UnlinkedCodeBlock. The benefit of this is, if we're creating a CodeBlock
        from an UnlinkedCodeBlock that already compiled an unlinked baseline JIT
        instance, this new CodeBlock just starts off executing in the baseline JIT
        "for free".
        
        To make this work, the code we emit now needs to be independent of a specific
        CodeBlock instance. We use a CodeBlock instance for minimal profiling information
        when compiling, but otherwise, the code is tied to the UnlinkedCodeBlock. When
        we need CodeBlock specific information, we load it. This usually means things
        like we'll load things from the Metadata dynamically. This patch also adds a
        "linked constant pool" concept, and anytime we instantiate such a CodeBlock,
        we also need to instantiate this "linked constant pool". This contains things
        like our inline cache data structures (StructureStubInfo*), JSGlobalObject*,
        etc.
        
        Unlinked baseline JIT always runs ICs in the "data" mode. To make this work, I
        made data ICs work on x86_64. To do this, we no longer call/ret to the IC.
        Instead, we jump to the IC, and the IC jumps back by loading the "done" location
        from the StructureStubInfo dynamically. This simplifies the design to not be
        based on the arm64 calling convention, and keeps the same performance characteristics. 
        
        This patch also adds a new version of InlineAccess that is only used in baseline
        JIT (for now). In the future, we can make the DFG/FTL also use this for Data
        ICs. But we don't need to do that yet since those tiers don't use data ICs by
        default. The baseline JIT now has a pure data IC approach to InlineAccess. So
        instead of repatching code, we repatch fields we load dynamically.
        
        This patch also cleans up a few things in OSR exit, where both DFG/FTL were
        storing callee saves to the callee saves buffer in a weird place, and separate
        from one another. I noticed this code can be simplified if we just store
        callee saves at the end of the OSR exit handler, and from common JIT emission
        code.
        
        This patch also fixes a bug where we could end up with the wrong (and always
        more negative) SP in the baseline JIT. This could happen when we OSR exit
        from an inlined getter/setter. The OSR exit code puts the return PC when
        returning to the call site of the getter/setter to be the inline cache's
        "done location". However, this "done location" didn't used to restore SP.
        This patch conservatively makes it so that we restore the SP at these sites.
        
        This is measured as a 1% speedup on Speedometer2.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::fromStructureStubInfo):
        (JSC::AccessCase::generateImpl):
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeOperandsForCheckpoint.h:
        (JSC::valueProfileOffsetFor):
        * bytecode/CallLinkInfo.cpp:
        (JSC::CallLinkInfo::fastPathStart):
        (JSC::CallLinkInfo::emitFastPathImpl):
        (JSC::CallLinkInfo::emitFastPath):
        (JSC::CallLinkInfo::emitTailCallFastPath):
        (JSC::CallLinkInfo::emitDataICFastPath):
        (JSC::CallLinkInfo::emitTailCallDataICFastPath):
        (JSC::CallLinkInfo::emitDataICSlowPath):
        (JSC::CallLinkInfo::initializeDataIC):
        (JSC::CallLinkInfo::emitDirectFastPath):
        (JSC::CallLinkInfo::emitDirectTailCallFastPath):
        * bytecode/CallLinkInfo.h:
        (JSC::CallLinkInfo::offsetOfMaxArgumentCountIncludingThis):
        (JSC::CallLinkInfo::slowStub): Deleted.
        (JSC::CallLinkInfo::addressOfMaxArgumentCountIncludingThis): Deleted.
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::setupWithUnlinkedBaselineCode):
        (JSC::CodeBlock::isConstantOwnedByUnlinkedCodeBlock const):
        (JSC::CodeBlock::setConstantRegisters):
        (JSC::CodeBlock::finalizeJITInlineCaches):
        (JSC::CodeBlock::finalizeUnconditionally):
        (JSC::CodeBlock::frameRegisterCount):
        (JSC::CodeBlock::binaryArithProfileForPC):
        (JSC::CodeBlock::unaryArithProfileForPC):
        (JSC::CodeBlock::findPC):
        (JSC::CodeBlock::jitSoon):
        (JSC::CodeBlock::jitNextInvocation):
        (JSC::CodeBlock::dumpMathICStats):
        (JSC::CodeBlock::finalizeBaselineJITInlineCaches): Deleted.
        (JSC::CodeBlock::addJITAddIC): Deleted.
        (JSC::CodeBlock::addJITMulIC): Deleted.
        (JSC::CodeBlock::addJITSubIC): Deleted.
        (JSC::CodeBlock::addJITNegIC): Deleted.
        (JSC::CodeBlock::setPCToCodeOriginMap): Deleted.
        (JSC::CodeBlock::thresholdForJIT): Deleted.
        (JSC::CodeBlock::jitAfterWarmUp): Deleted.
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::JITData::offsetOfJITConstantPool):
        (JSC::CodeBlock::offsetOfJITData):
        (JSC::CodeBlock::offsetOfArgumentValueProfiles):
        (JSC::CodeBlock::offsetOfConstantsVectorBuffer):
        (JSC::CodeBlock::baselineJITConstantPool):
        (JSC::CodeBlock::checkIfJITThresholdReached):
        (JSC::CodeBlock::dontJITAnytimeSoon):
        (JSC::CodeBlock::llintExecuteCounter const):
        (JSC::CodeBlock::offsetOfDebuggerRequests):
        (JSC::CodeBlock::offsetOfShouldAlwaysBeInlined):
        (JSC::CodeBlock::loopHintsAreEligibleForFuzzingEarlyReturn):
        (JSC::CodeBlock::addressOfNumParameters): Deleted.
        (JSC::CodeBlock::isKnownCell): Deleted.
        (JSC::CodeBlock::addMathIC): Deleted.
        (JSC::CodeBlock::setJITCodeMap): Deleted.
        (JSC::CodeBlock::jitCodeMap): Deleted.
        (JSC::CodeBlock::switchJumpTable): Deleted.
        (JSC::CodeBlock::stringSwitchJumpTable): Deleted.
        * bytecode/CodeBlockInlines.h:
        (JSC::CodeBlock::forEachValueProfile):
        (JSC::CodeBlock::jitCodeMap):
        (JSC::CodeBlock::baselineSwitchJumpTable):
        (JSC::CodeBlock::baselineStringSwitchJumpTable):
        (JSC::CodeBlock::dfgSwitchJumpTable):
        (JSC::CodeBlock::dfgStringSwitchJumpTable):
        * bytecode/ExecutableToCodeBlockEdge.h:
        * bytecode/ExecutionCounter.cpp:
        (JSC::ExecutionCounter<countingVariant>::setThreshold):
        * bytecode/ExecutionCounter.h:
        (JSC::ExecutionCounter::clippedThreshold):
        * bytecode/GetByIdMetadata.h:
        (JSC::GetByIdModeMetadataArrayLength::offsetOfArrayProfile):
        (JSC::GetByIdModeMetadata::offsetOfMode):
        * bytecode/GetByStatus.cpp:
        (JSC::GetByStatus::computeForStubInfoWithoutExitSiteFeedback):
        * bytecode/GetterSetterAccessCase.cpp:
        (JSC::GetterSetterAccessCase::emitDOMJITGetter):
        * bytecode/InByStatus.cpp:
        (JSC::InByStatus::computeForStubInfoWithoutExitSiteFeedback):
        * bytecode/InlineAccess.cpp:
        (JSC::InlineAccess::generateSelfPropertyAccess):
        (JSC::InlineAccess::canGenerateSelfPropertyReplace):
        (JSC::InlineAccess::generateSelfPropertyReplace):
        (JSC::InlineAccess::isCacheableArrayLength):
        (JSC::InlineAccess::generateArrayLength):
        (JSC::InlineAccess::isCacheableStringLength):
        (JSC::InlineAccess::generateStringLength):
        (JSC::InlineAccess::generateSelfInAccess):
        (JSC::InlineAccess::rewireStubAsJumpInAccess):
        (JSC::InlineAccess::resetStubAsJumpInAccess):
        * bytecode/InlineAccess.h:
        * bytecode/IterationModeMetadata.h:
        (JSC::IterationModeMetadata::offsetOfSeenModes):
        * bytecode/LLIntCallLinkInfo.h:
        (JSC::LLIntCallLinkInfo::offsetOfArrayProfile):
        * bytecode/Opcode.h:
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessGenerationState::succeed):
        (JSC::AccessGenerationState::calculateLiveRegistersForCallAndExceptionHandling):
        (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions):
        (JSC::PolymorphicAccess::regenerate):
        * bytecode/PolymorphicAccess.h:
        (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions): Deleted.
        * bytecode/PutByStatus.cpp:
        (JSC::PutByStatus::computeForStubInfo):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::initGetByIdSelf):
        (JSC::StructureStubInfo::initPutByIdReplace):
        (JSC::StructureStubInfo::initInByIdSelf):
        (JSC::StructureStubInfo::addAccessCase):
        (JSC::StructureStubInfo::reset):
        (JSC::StructureStubInfo::visitWeakReferences):
        (JSC::StructureStubInfo::propagateTransitions):
        (JSC::StructureStubInfo::initializeFromUnlinkedStructureStubInfo):
        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::offsetOfByIdSelfOffset):
        (JSC::StructureStubInfo::offsetOfInlineAccessBaseStructure):
        (JSC::StructureStubInfo::inlineAccessBaseStructure):
        (JSC::StructureStubInfo::offsetOfDoneLocation):
        * bytecode/SuperSampler.cpp:
        (JSC::printSuperSamplerState):
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::UnlinkedCodeBlock::hasIdentifier):
        (JSC::UnlinkedCodeBlock::thresholdForJIT):
        (JSC::UnlinkedCodeBlock::allocateSharedProfiles):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::constantRegister):
        (JSC::UnlinkedCodeBlock::instructionAt const):
        (JSC::UnlinkedCodeBlock::bytecodeOffset):
        (JSC::UnlinkedCodeBlock::instructionsSize const):
        (JSC::UnlinkedCodeBlock::loopHintsAreEligibleForFuzzingEarlyReturn):
        (JSC::UnlinkedCodeBlock::outOfLineJumpOffset):
        (JSC::UnlinkedCodeBlock::binaryArithProfile):
        (JSC::UnlinkedCodeBlock::unaryArithProfile):
        (JSC::UnlinkedCodeBlock::llintExecuteCounter):
        * bytecode/UnlinkedMetadataTable.h:
        (JSC::UnlinkedMetadataTable::offsetInMetadataTable):
        * bytecode/ValueProfile.h:
        (JSC::ValueProfileBase::ValueProfileBase):
        (JSC::ValueProfileBase::clearBuckets):
        (JSC::ValueProfile::offsetOfFirstBucket):
        * dfg/DFGCommonData.h:
        * dfg/DFGJITCode.cpp:
        * dfg/DFGJITCode.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::compileExit):
        * dfg/DFGOSRExitCompilerCommon.cpp:
        (JSC::DFG::handleExitCounts):
        (JSC::DFG::callerReturnPC):
        (JSC::DFG::reifyInlinedCallFrames):
        (JSC::DFG::adjustAndJumpToTarget):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePutPrivateName):
        (JSC::DFG::SpeculativeJIT::compileValueAdd):
        (JSC::DFG::SpeculativeJIT::compileValueSub):
        (JSC::DFG::SpeculativeJIT::compileValueNegate):
        (JSC::DFG::SpeculativeJIT::compileValueMul):
        (JSC::DFG::SpeculativeJIT::compileLogShadowChickenTail):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile):
        * ftl/FTLJITCode.h:
        * ftl/FTLLink.cpp:
        (JSC::FTL::link):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::addMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileUnaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileBinaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutPrivateName):
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        * generator/Metadata.rb:
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::storeProperty):
        (JSC::AssemblyHelpers::emitVirtualCall):
        (JSC::AssemblyHelpers::emitVirtualCallWithoutMovingGlobalObject):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::copyCalleeSavesToEntryFrameCalleeSavesBuffer):
        * jit/BaselineJITCode.cpp: Added.
        (JSC::MathICHolder::addJITAddIC):
        (JSC::MathICHolder::addJITMulIC):
        (JSC::MathICHolder::addJITSubIC):
        (JSC::MathICHolder::addJITNegIC):
        (JSC::MathICHolder::adoptMathICs):
        (JSC::BaselineJITCode::BaselineJITCode):
        (JSC::BaselineJITCode::~BaselineJITCode):
        * jit/BaselineJITCode.h: Added.
        (JSC::JITConstantPool::add):
        (JSC::JITConstantPool::size const):
        (JSC::JITConstantPool::at const):
        * jit/BaselineJITPlan.cpp:
        (JSC::BaselineJITPlan::finalize):
        * jit/CCallHelpers.cpp:
        (JSC::CCallHelpers::logShadowChickenTailPacketImpl):
        (JSC::CCallHelpers::logShadowChickenTailPacket):
        * jit/CCallHelpers.h:
        * jit/CallFrameShuffleData.cpp:
        (JSC::CallFrameShuffleData::setupCalleeSaveRegisters):
        * jit/CallFrameShuffleData.h:
        * jit/CallFrameShuffler.cpp:
        (JSC::CallFrameShuffler::CallFrameShuffler):
        (JSC::CallFrameShuffler::prepareForTailCall):
        * jit/CallFrameShuffler.h:
        (JSC::CallFrameShuffler::snapshot const):
        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        (JSC::JIT::emitEnterOptimizationCheck):
        (JSC::JIT::emitNotifyWriteWatchpoint):
        (JSC::JIT::emitVarReadOnlyCheck):
        (JSC::JIT::assertStackPointerOffset):
        (JSC::JIT::resetSP):
        (JSC::JIT::emitPutCodeBlockToFrameInPrologue):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::emitMaterializeMetadataAndConstantPoolRegisters):
        (JSC::JIT::emitRestoreCalleeSaves):
        (JSC::JIT::compileAndLinkWithoutFinalizing):
        (JSC::JIT::link):
        (JSC::JIT::finalizeOnMainThread):
        (JSC::JIT::privateCompile):
        (JSC::JIT::frameRegisterCountFor):
        (JSC::JIT::stackPointerOffsetFor):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_compareAndJumpSlowImpl):
        (JSC::JIT::emit_compareAndJumpSlow):
        (JSC::JIT::emit_op_negate):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emitMathICFast):
        (JSC::JIT::emitMathICSlow):
        (JSC::JIT::emit_op_div):
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emit_op_sub):
        * jit/JITCall.cpp:
        (JSC::JIT::emitPutCallResult):
        (JSC::JIT::compileSetupFrame):
        (JSC::JIT::compileCallEval):
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileTailCall):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        (JSC::JIT::emit_op_iterator_open):
        (JSC::JIT::emitSlow_op_iterator_open):
        (JSC::JIT::emit_op_iterator_next):
        (JSC::JIT::emitSlow_op_iterator_next):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::emitPutCallResult):
        (JSC::JIT::compileSetupFrame):
        (JSC::JIT::compileCallEval):
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        (JSC::JIT::emit_op_iterator_open):
        (JSC::JIT::emitSlow_op_iterator_open):
        (JSC::JIT::emit_op_iterator_next):
        (JSC::JIT::emitSlow_op_iterator_next):
        * jit/JITCode.h:
        (JSC::JITCode::useDataIC):
        (JSC::JITCode::pcToCodeOriginMap):
        * jit/JITCompilationKey.cpp:
        (JSC::JITCompilationKey::dump const):
        * jit/JITCompilationKey.h:
        (JSC::JITCompilationKey::JITCompilationKey):
        (JSC::JITCompilationKey::operator! const):
        (JSC::JITCompilationKey::isHashTableDeletedValue const):
        (JSC::JITCompilationKey::operator== const):
        (JSC::JITCompilationKey::hash const):
        (JSC::JITCompilationKey::profiledBlock const): Deleted.
        * jit/JITInlineCacheGenerator.cpp:
        (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator):
        (JSC::JITInlineCacheGenerator::finalize):
        (JSC::JITInlineCacheGenerator::generateBaselineDataICFastPath):
        (JSC::JITGetByIdGenerator::JITGetByIdGenerator):
        (JSC::generateGetByIdInlineAccess):
        (JSC::JITGetByIdGenerator::generateBaselineDataICFastPath):
        (JSC::JITGetByIdWithThisGenerator::generateBaselineDataICFastPath):
        (JSC::JITPutByIdGenerator::generateBaselineDataICFastPath):
        (JSC::JITDelByValGenerator::generateFastPath):
        (JSC::JITDelByIdGenerator::generateFastPath):
        (JSC::JITInByValGenerator::generateFastPath):
        (JSC::JITInByIdGenerator::generateBaselineDataICFastPath):
        (JSC::JITInstanceOfGenerator::generateFastPath):
        (JSC::JITGetByValGenerator::generateFastPath):
        (JSC::JITPutByValGenerator::generateFastPath):
        (JSC::JITPrivateBrandAccessGenerator::generateFastPath):
        * jit/JITInlineCacheGenerator.h:
        * jit/JITInlines.h:
        (JSC::JIT::isOperandConstantDouble):
        (JSC::JIT::isOperandConstantInt):
        (JSC::JIT::isKnownCell):
        (JSC::JIT::getConstantOperand):
        (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile):
        (JSC::JIT::linkSlowCaseIfNotJSCell):
        (JSC::JIT::advanceToNextCheckpoint):
        (JSC::JIT::emitJumpSlowToHotForCheckpoint):
        (JSC::JIT::isOperandConstantChar):
        (JSC::JIT::emitValueProfilingSite):
        (JSC::JIT::emitValueProfilingSiteIfProfiledOpcode):
        (JSC::JIT::emitArrayProfilingSiteWithCell):
        (JSC::JIT::emitLoadDouble):
        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
        (JSC::JIT::emitGetVirtualRegister):
        (JSC::JIT::jumpTarget):
        (JSC::JIT::loadPtrFromMetadata):
        (JSC::JIT::load32FromMetadata):
        (JSC::JIT::load8FromMetadata):
        (JSC::JIT::store8ToMetadata):
        (JSC::JIT::store32ToMetadata):
        (JSC::JIT::materializePointerIntoMetadata):
        (JSC::JIT::loadConstant):
        (JSC::JIT::loadGlobalObject):
        (JSC::JIT::loadCodeBlockConstant):
        (JSC::JIT::copiedGetPutInfo): Deleted.
        (JSC::JIT::copiedArithProfile): Deleted.
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_mov):
        (JSC::JIT::emit_op_new_object):
        (JSC::JIT::emitSlow_op_new_object):
        (JSC::JIT::emit_op_overrides_has_instance):
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof):
        (JSC::JIT::emit_op_typeof_is_undefined):
        (JSC::JIT::op_ret_handlerGenerator):
        (JSC::JIT::emit_op_to_primitive):
        (JSC::JIT::emit_op_set_function_name):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::valueIsFalseyGenerator):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jeq_ptr):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::valueIsTruthyGenerator):
        (JSC::JIT::emit_op_throw):
        (JSC::JIT::op_throw_handlerGenerator):
        (JSC::JIT::emitSlow_op_jstricteq):
        (JSC::JIT::emitSlow_op_jnstricteq):
        (JSC::JIT::emit_op_to_number):
        (JSC::JIT::emit_op_to_numeric):
        (JSC::JIT::emit_op_to_object):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_switch_char):
        (JSC::JIT::emit_op_switch_string):
        (JSC::JIT::emit_op_debug):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emit_op_enter):
        (JSC::JIT::op_enter_handlerGenerator):
        (JSC::JIT::emit_op_to_this):
        (JSC::JIT::emit_op_create_this):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emitSlow_op_neq):
        (JSC::JIT::emitSlow_op_jeq):
        (JSC::JIT::emitSlow_op_jneq):
        (JSC::JIT::emitSlow_op_instanceof_custom):
        (JSC::JIT::emit_op_loop_hint):
        (JSC::JIT::emitSlow_op_check_traps):
        (JSC::JIT::op_check_traps_handlerGenerator):
        (JSC::JIT::emit_op_new_regexp):
        (JSC::JIT::emitNewFuncCommon):
        (JSC::JIT::emitNewFuncExprCommon):
        (JSC::JIT::emit_op_new_array):
        (JSC::JIT::emit_op_new_array_with_size):
        (JSC::JIT::emit_op_profile_type):
        (JSC::JIT::emit_op_log_shadow_chicken_tail):
        (JSC::JIT::emit_op_profile_control_flow):
        (JSC::JIT::emit_op_get_argument):
        (JSC::JIT::emit_op_get_prototype_of):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_new_object):
        (JSC::JIT::emitSlow_op_new_object):
        (JSC::JIT::emit_op_overrides_has_instance):
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof_custom):
        (JSC::JIT::emit_op_typeof_is_undefined):
        (JSC::JIT::emit_op_set_function_name):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::compileOpEqJumpSlow):
        (JSC::JIT::emitSlow_op_neq):
        (JSC::JIT::emitSlow_op_jstricteq):
        (JSC::JIT::emitSlow_op_jnstricteq):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emit_op_throw):
        (JSC::JIT::emit_op_to_number):
        (JSC::JIT::emit_op_to_numeric):
        (JSC::JIT::emit_op_to_object):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_switch_char):
        (JSC::JIT::emit_op_switch_string):
        (JSC::JIT::emit_op_enter):
        (JSC::JIT::emit_op_create_this):
        (JSC::JIT::emit_op_to_this):
        (JSC::JIT::emit_op_profile_type):
        (JSC::JIT::emit_op_log_shadow_chicken_tail):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jit/JITOperations.h:
        * jit/JITPlan.cpp:
        (JSC::JITPlan::key):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::generateGetByValSlowCase):
        (JSC::JIT::slow_op_get_by_val_prepareCallGenerator):
        (JSC::JIT::emit_op_get_private_name):
        (JSC::JIT::emitSlow_op_get_private_name):
        (JSC::JIT::slow_op_get_private_name_prepareCallGenerator):
        (JSC::JIT::emit_op_set_private_brand):
        (JSC::JIT::emitSlow_op_set_private_brand):
        (JSC::JIT::emit_op_check_private_brand):
        (JSC::JIT::emitSlow_op_check_private_brand):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::slow_op_put_by_val_prepareCallGenerator):
        (JSC::JIT::emit_op_put_private_name):
        (JSC::JIT::emitSlow_op_put_private_name):
        (JSC::JIT::slow_op_put_private_name_prepareCallGenerator):
        (JSC::JIT::emit_op_put_getter_by_id):
        (JSC::JIT::emit_op_put_setter_by_id):
        (JSC::JIT::emit_op_put_getter_setter_by_id):
        (JSC::JIT::emit_op_put_getter_by_val):
        (JSC::JIT::emit_op_put_setter_by_val):
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emitSlow_op_del_by_id):
        (JSC::JIT::slow_op_del_by_id_prepareCallGenerator):
        (JSC::JIT::emit_op_del_by_val):
        (JSC::JIT::emitSlow_op_del_by_val):
        (JSC::JIT::slow_op_del_by_val_prepareCallGenerator):
        (JSC::JIT::emit_op_try_get_by_id):
        (JSC::JIT::emitSlow_op_try_get_by_id):
        (JSC::JIT::emit_op_get_by_id_direct):
        (JSC::JIT::emitSlow_op_get_by_id_direct):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::slow_op_get_by_id_prepareCallGenerator):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        (JSC::JIT::slow_op_get_by_id_with_this_prepareCallGenerator):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::slow_op_put_by_id_prepareCallGenerator):
        (JSC::JIT::emit_op_in_by_id):
        (JSC::JIT::emitSlow_op_in_by_id):
        (JSC::JIT::emit_op_in_by_val):
        (JSC::JIT::emitSlow_op_in_by_val):
        (JSC::JIT::emitHasPrivate):
        (JSC::JIT::emitHasPrivateSlow):
        (JSC::JIT::emitSlow_op_has_private_name):
        (JSC::JIT::emitSlow_op_has_private_brand):
        (JSC::JIT::emitVarInjectionCheck):
        (JSC::JIT::emitResolveClosure):
        (JSC::JIT::emit_op_resolve_scope):
        (JSC::JIT::generateOpResolveScopeThunk):
        (JSC::JIT::slow_op_resolve_scopeGenerator):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::emitSlow_op_get_from_scope):
        (JSC::JIT::generateOpGetFromScopeThunk):
        (JSC::JIT::slow_op_get_from_scopeGenerator):
        (JSC::JIT::emit_op_put_to_scope):
        (JSC::JIT::emitSlow_op_put_to_scope):
        (JSC::JIT::slow_op_put_to_scopeGenerator):
        (JSC::JIT::emit_op_get_from_arguments):
        (JSC::JIT::emit_op_get_internal_field):
        (JSC::JIT::emit_op_enumerator_next):
        (JSC::JIT::emit_op_enumerator_get_by_val):
        (JSC::JIT::emit_enumerator_has_propertyImpl):
        (JSC::JIT::emitWriteBarrier):
        (JSC::JIT::emitPutGlobalVariable): Deleted.
        (JSC::JIT::emitPutGlobalVariableIndirect): Deleted.
        (JSC::JIT::emitPutClosureVar): Deleted.
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_getter_by_id):
        (JSC::JIT::emit_op_put_setter_by_id):
        (JSC::JIT::emit_op_put_getter_setter_by_id):
        (JSC::JIT::emit_op_put_getter_by_val):
        (JSC::JIT::emit_op_put_setter_by_val):
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emit_op_del_by_val):
        (JSC::JIT::emitSlow_op_del_by_val):
        (JSC::JIT::emitSlow_op_del_by_id):
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_get_private_name):
        (JSC::JIT::emitSlow_op_get_private_name):
        (JSC::JIT::emit_op_put_private_name):
        (JSC::JIT::emitSlow_op_put_private_name):
        (JSC::JIT::emit_op_set_private_brand):
        (JSC::JIT::emitSlow_op_set_private_brand):
        (JSC::JIT::emit_op_check_private_brand):
        (JSC::JIT::emitSlow_op_check_private_brand):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emit_op_try_get_by_id):
        (JSC::JIT::emitSlow_op_try_get_by_id):
        (JSC::JIT::emit_op_get_by_id_direct):
        (JSC::JIT::emitSlow_op_get_by_id_direct):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::emit_op_in_by_id):
        (JSC::JIT::emitSlow_op_in_by_id):
        (JSC::JIT::emit_op_in_by_val):
        (JSC::JIT::emitSlow_op_in_by_val):
        (JSC::JIT::emitHasPrivate):
        (JSC::JIT::emitHasPrivateSlow):
        (JSC::JIT::emitVarInjectionCheck):
        (JSC::JIT::emit_op_resolve_scope):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::emitSlow_op_get_from_scope):
        (JSC::JIT::emit_op_put_to_scope):
        (JSC::JIT::emitSlow_op_put_to_scope):
        (JSC::JIT::emit_op_get_from_arguments):
        (JSC::JIT::emit_op_get_internal_field):
        * jit/Repatch.cpp:
        (JSC::tryCacheGetBy):
        (JSC::tryCachePutBy):
        (JSC::tryCacheInBy):
        (JSC::unlinkCall):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::jitCompileAndSetHeuristics):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CacheableIdentifier.h:
        * runtime/CacheableIdentifierInlines.h:
        (JSC::CacheableIdentifier::createFromIdentifierOwnedByCodeBlock):
        * runtime/CachedTypes.cpp:
        (JSC::CachedCodeBlock::numBinaryArithProfiles const):
        (JSC::CachedCodeBlock::numUnaryArithProfiles const):
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::CachedCodeBlock<CodeBlockType>::encode):
        * runtime/CommonSlowPaths.cpp:
        (JSC::updateArithProfileForUnaryArithOp):
        * runtime/FunctionExecutable.h:
        * runtime/Options.cpp:
        (JSC::Options::recomputeDependentOptions):
        * runtime/OptionsList.h:
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::prepareForExecutionImpl):
        * wasm/WasmLLIntTierUpCounter.h:
        (JSC::Wasm::LLIntTierUpCounter::optimizeAfterWarmUp):
        (JSC::Wasm::LLIntTierUpCounter::optimizeSoon):
        * wasm/WasmTierUpCount.cpp:
        (JSC::Wasm::TierUpCount::TierUpCount):
        * wasm/WasmTierUpCount.h:
        (JSC::Wasm::TierUpCount::optimizeAfterWarmUp):
        (JSC::Wasm::TierUpCount::optimizeNextInvocation):
        (JSC::Wasm::TierUpCount::optimizeSoon):

2021-09-27  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use op_jeq_ptr for empty JSPropertyNameEnumerator check
        https://bugs.webkit.org/show_bug.cgi?id=230817

        Reviewed by Saam Barati.

        We use op_jeq_ptr for empty JSPropertyNameEnumerator check instead of stricteq for smaller
        bytecode size and efficient branching in LLInt and Baseline. In DFG and FTL, both will get
        the same nodes.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitJumpIfEmptyPropertyNameEnumerator):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ForInNode::emitBytecode):

2021-09-26  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Optimize PutByVal with for-in
        https://bugs.webkit.org/show_bug.cgi?id=230801

        Reviewed by Saam Barati.

        We found that some of Speedometer2 subtests are heavily using for-in with PutByVal or the other DFG nodes.
        And we also found that we are using polluted non-good type for the property names from for-in: String | Other.
        The reason is that we are returning null when op_enumerator_next finishes instead of string. And this design
        forces DFG and FTL to return null from EnumeratorNextUpdatePropertyName at the end of iteration. This pollutes
        the type of property names as String | Other instead of String, and leading to suboptimal DFG nodes.

        In this patch, we add special sentinel string in vm.smallString.sentinelString(). We know that this string cell
        pointer will be never returned from EnumeratorNextUpdatePropertyName in the normal for-in iteration. This is easy
        since we are always allocating a JSString when creating JSPropertyNameEnumerator. So this string cell (not the content)
        is always different from pre-allocated vm.smallString.sentinelString(). So, we use this special string pointer
        as a sentinel instead of null so that we can avoid polluting return type of EnumeratorNextUpdatePropertyName.

        To check the sentinel in LLInt / Baseline, this patch adds jeq_ptr, which performs cell pointer comparison and do
        not check string content equality. We do not need to have an implementation in DFG since we already have CompareEqPtr
        for existing jneq_ptr bytecode.

        We also clean up DFG operation related to PutByVal.

        ----------------------------------------------------------------------------------------------------------------------------------
        |               subtest                |     ms      |     ms      |  b / a   | pValue (significance using False Discovery Rate) |
        ----------------------------------------------------------------------------------------------------------------------------------
        | Elm-TodoMVC                          |116.010000   |112.701667   |0.971482  | 0.000000 (significant)                           |
        | VueJS-TodoMVC                        |22.995000    |23.023333    |1.001232  | 0.907086                                         |
        | EmberJS-TodoMVC                      |125.498333   |125.525000   |1.000212  | 0.932546                                         |
        | BackboneJS-TodoMVC                   |45.700000    |45.975000    |1.006018  | 0.084799                                         |
        | Preact-TodoMVC                       |16.681667    |16.610000    |0.995704  | 0.722758                                         |
        | AngularJS-TodoMVC                    |123.753333   |123.740000   |0.999892  | 0.971431                                         |
        | Vanilla-ES2015-TodoMVC               |61.255000    |61.380000    |1.002041  | 0.300654                                         |
        | Inferno-TodoMVC                      |58.646667    |58.948333    |1.005144  | 0.267611                                         |
        | Flight-TodoMVC                       |73.283333    |72.801667    |0.993427  | 0.207389                                         |
        | Angular2-TypeScript-TodoMVC          |39.746667    |40.015000    |1.006751  | 0.449821                                         |
        | VanillaJS-TodoMVC                    |50.096667    |49.823333    |0.994544  | 0.162020                                         |
        | jQuery-TodoMVC                       |212.870000   |213.196667   |1.001535  | 0.371944                                         |
        | EmberJS-Debug-TodoMVC                |331.878333   |332.710000   |1.002506  | 0.094499                                         |
        | React-TodoMVC                        |83.078333    |82.726667    |0.995767  | 0.076143                                         |
        | React-Redux-TodoMVC                  |136.018333   |133.935000   |0.984683  | 0.000000 (significant)                           |
        | Vanilla-ES2015-Babel-Webpack-TodoMVC |59.743333    |59.643333    |0.998326  | 0.393671                                         |
        ----------------------------------------------------------------------------------------------------------------------------------
        a mean = 271.75873
        b mean = 272.45804
        pValue = 0.0263030803
        (Bigger means are better.)
        1.003 times better
        Results ARE significant

        * builtins/BuiltinNames.h:
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecode/LinkTimeConstant.h:
        * bytecode/Opcode.h:
        (JSC::isBranch):
        * bytecode/PreciseJumpTargetsInlines.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::GenericLabel<JSGeneratorTraits>::setLocation):
        (JSC::BytecodeGenerator::emitJumpIfSentinelString):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ForInNode::emitBytecode):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::putByVal):
        (JSC::DFG::putByValInternal):
        (JSC::DFG::putByValCellInternal):
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileEnumeratorNextUpdatePropertyName):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jeq_ptr):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_jeq_ptr):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_enumerator_next):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::JSC_DEFINE_COMMON_SLOW_PATH):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::initializeCommonStrings):
        (JSC::SmallStrings::visitStrongReferences):
        * runtime/SmallStrings.h:
        (JSC::SmallStrings::sentinelString const):

2021-09-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r283095.
        https://bugs.webkit.org/show_bug.cgi?id=230815

        We should land the original patch since this does not work
        with bytecode cache

        Reverted changeset:

        "[JSC] Optimize PutByVal with for-in"
        https://bugs.webkit.org/show_bug.cgi?id=230801
        https://commits.webkit.org/r283095

2021-09-26  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Optimize PutByVal with for-in
        https://bugs.webkit.org/show_bug.cgi?id=230801

        Reviewed by Saam Barati.

        We found that some of Speedometer2 subtests are heavily using for-in with PutByVal or the other DFG nodes.
        And we also found that we are using polluted non-good type for the property names from for-in: String | Other.
        The reason is that we are returning null when op_enumerator_next finishes instead of string. And this design
        forces DFG and FTL to return null from EnumeratorNextUpdatePropertyName at the end of iteration. This pollutes
        the type of property names as String | Other instead of String, and leading to suboptimal DFG nodes.

        In this patch, we add special sentinel string in vm.smallString.sentinelString(). We know that this string cell
        pointer will be never returned from EnumeratorNextUpdatePropertyName in the normal for-in iteration. This is easy
        since we are always allocating a JSString when creating JSPropertyNameEnumerator. So this string cell (not the content)
        is always different from pre-allocated vm.smallString.sentinelString(). So, we use this special string pointer
        as a sentinel instead of null so that we can avoid polluting return type of EnumeratorNextUpdatePropertyName.

        To check the sentinel in LLInt / Baseline, this patch adds jeq_ptr, which performs cell pointer comparison and do
        not check string content equality. We do not need to have an implementation in DFG since we already have CompareEqPtr
        for existing jneq_ptr bytecode.

        We also clean up DFG operation related to PutByVal.

        ----------------------------------------------------------------------------------------------------------------------------------
        |               subtest                |     ms      |     ms      |  b / a   | pValue (significance using False Discovery Rate) |
        ----------------------------------------------------------------------------------------------------------------------------------
        | Elm-TodoMVC                          |116.010000   |112.701667   |0.971482  | 0.000000 (significant)                           |
        | VueJS-TodoMVC                        |22.995000    |23.023333    |1.001232  | 0.907086                                         |
        | EmberJS-TodoMVC                      |125.498333   |125.525000   |1.000212  | 0.932546                                         |
        | BackboneJS-TodoMVC                   |45.700000    |45.975000    |1.006018  | 0.084799                                         |
        | Preact-TodoMVC                       |16.681667    |16.610000    |0.995704  | 0.722758                                         |
        | AngularJS-TodoMVC                    |123.753333   |123.740000   |0.999892  | 0.971431                                         |
        | Vanilla-ES2015-TodoMVC               |61.255000    |61.380000    |1.002041  | 0.300654                                         |
        | Inferno-TodoMVC                      |58.646667    |58.948333    |1.005144  | 0.267611                                         |
        | Flight-TodoMVC                       |73.283333    |72.801667    |0.993427  | 0.207389                                         |
        | Angular2-TypeScript-TodoMVC          |39.746667    |40.015000    |1.006751  | 0.449821                                         |
        | VanillaJS-TodoMVC                    |50.096667    |49.823333    |0.994544  | 0.162020                                         |
        | jQuery-TodoMVC                       |212.870000   |213.196667   |1.001535  | 0.371944                                         |
        | EmberJS-Debug-TodoMVC                |331.878333   |332.710000   |1.002506  | 0.094499                                         |
        | React-TodoMVC                        |83.078333    |82.726667    |0.995767  | 0.076143                                         |
        | React-Redux-TodoMVC                  |136.018333   |133.935000   |0.984683  | 0.000000 (significant)                           |
        | Vanilla-ES2015-Babel-Webpack-TodoMVC |59.743333    |59.643333    |0.998326  | 0.393671                                         |
        ----------------------------------------------------------------------------------------------------------------------------------
        a mean = 271.75873
        b mean = 272.45804
        pValue = 0.0263030803
        (Bigger means are better.)
        1.003 times better
        Results ARE significant

        * builtins/BuiltinNames.h:
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecode/LinkTimeConstant.h:
        * bytecode/Opcode.h:
        (JSC::isBranch):
        * bytecode/PreciseJumpTargetsInlines.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::GenericLabel<JSGeneratorTraits>::setLocation):
        (JSC::BytecodeGenerator::emitJumpIfSentinelString):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ForInNode::emitBytecode):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::putByVal):
        (JSC::DFG::putByValInternal):
        (JSC::DFG::putByValCellInternal):
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileEnumeratorNextUpdatePropertyName):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jeq_ptr):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_jeq_ptr):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_enumerator_next):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::JSC_DEFINE_COMMON_SLOW_PATH):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::initializeCommonStrings):
        (JSC::SmallStrings::visitStrongReferences):
        * runtime/SmallStrings.h:
        (JSC::SmallStrings::sentinelString const):

2021-09-26  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r283083 and r283088.
        https://bugs.webkit.org/show_bug.cgi?id=230806

        Windows pors are crashing

        Reverted changesets:

        "Build an unlinked baseline JIT"
        https://bugs.webkit.org/show_bug.cgi?id=229223
        https://commits.webkit.org/r283083

        "Make byte codes with arithmetic profiles switch to using an
        index instead of a pointer in metadata"
        https://bugs.webkit.org/show_bug.cgi?id=230798
        https://commits.webkit.org/r283088

2021-09-26  Saam Barati  <sbarati@apple.com>

        Make byte codes with arithmetic profiles switch to using an index instead of a pointer in metadata
        https://bugs.webkit.org/show_bug.cgi?id=230798

        Reviewed by Yusuke Suzuki.

        This patch makes each bytecode that uses a BinaryArithProfile/UnaryArithProfile
        have an index into a table instead of storing a pointer to the profile in its metadata.
        Then, we can just load the profile using the index in the bytecode, which saves memory.

        * bytecode/BytecodeList.rb:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::binaryArithProfileForPC):
        (JSC::CodeBlock::unaryArithProfileForPC):
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::allocateSharedProfiles):
        * bytecode/UnlinkedCodeBlock.h:
        * bytecode/UnlinkedCodeBlockGenerator.cpp:
        (JSC::UnlinkedCodeBlockGenerator::finalize):
        * bytecode/UnlinkedCodeBlockGenerator.h:
        (JSC::UnlinkedCodeBlockGenerator::addBinaryArithProfile):
        (JSC::UnlinkedCodeBlockGenerator::addUnaryArithProfile):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitUnaryOp):
        (JSC::BytecodeGenerator::emitInc):
        (JSC::BytecodeGenerator::emitDec):
        * bytecompiler/BytecodeGenerator.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_negate):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emit_op_div):
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emit_op_sub):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::updateArithProfileForUnaryArithOp):
        (JSC::JSC_DEFINE_COMMON_SLOW_PATH):

2021-09-25  Saam Barati  <sbarati@apple.com>

        Build an unlinked baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=229223
        <rdar://problem/82321772>

        Reviewed by Yusuke Suzuki.

        This patch adds an "unlinked" baseline JIT to JSVALUE64 platforms. The JIT
        code produced by this baseline JIT can be shared between all CodeBlocks that
        share an UnlinkedCodeBlock. The benefit of this is, if we're creating a CodeBlock
        from an UnlinkedCodeBlock that already compiled an unlinked baseline JIT
        instance, this new CodeBlock just starts off executing in the baseline JIT
        "for free".
        
        To make this work, the code we emit now needs to be independent of a specific
        CodeBlock instance. We use a CodeBlock instance for minimal profiling information
        when compiling, but otherwise, the code is tied to the UnlinkedCodeBlock. When
        we need CodeBlock specific information, we load it. This usually means things
        like we'll load things from the Metadata dynamically. This patch also adds a
        "linked constant pool" concept, and anytime we instantiate such a CodeBlock,
        we also need to instantiate this "linked constant pool". This contains things
        like our inline cache data structures (StructureStubInfo*), JSGlobalObject*,
        etc.
        
        Unlinked baseline JIT always runs ICs in the "data" mode. To make this work, I
        made data ICs work on x86_64. To do this, we no longer call/ret to the IC.
        Instead, we jump to the IC, and the IC jumps back by loading the "done" location
        from the StructureStubInfo dynamically. This simplifies the design to not be
        based on the arm64 calling convention, and keeps the same performance characteristics. 
        
        This patch also adds a new version of InlineAccess that is only used in baseline
        JIT (for now). In the future, we can make the DFG/FTL also use this for Data
        ICs. But we don't need to do that yet since those tiers don't use data ICs by
        default. The baseline JIT now has a pure data IC approach to InlineAccess. So
        instead of repatching code, we repatch fields we load dynamically.
        
        This patch also cleans up a few things in OSR exit, where both DFG/FTL were
        storing callee saves to the callee saves buffer in a weird place, and separate
        from one another. I noticed this code can be simplified if we just store
        callee saves at the end of the OSR exit handler, and from common JIT emission
        code.
        
        This patch also fixes a bug where we could end up with the wrong (and always
        more negative) SP in the baseline JIT. This could happen when we OSR exit
        from an inlined getter/setter. The OSR exit code puts the return PC when
        returning to the call site of the getter/setter to be the inline cache's
        "done location". However, this "done location" didn't used to restore SP.
        This patch conservatively makes it so that we restore the SP at these sites.
        
        This is measured as a 1% speedup on Speedometer2.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::fromStructureStubInfo):
        (JSC::AccessCase::generateImpl):
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeOperandsForCheckpoint.h:
        (JSC::valueProfileOffsetFor):
        * bytecode/CallLinkInfo.cpp:
        (JSC::CallLinkInfo::fastPathStart):
        (JSC::CallLinkInfo::emitFastPathImpl):
        (JSC::CallLinkInfo::emitFastPath):
        (JSC::CallLinkInfo::emitTailCallFastPath):
        (JSC::CallLinkInfo::emitDataICFastPath):
        (JSC::CallLinkInfo::emitTailCallDataICFastPath):
        (JSC::CallLinkInfo::emitDataICSlowPath):
        (JSC::CallLinkInfo::initializeDataIC):
        (JSC::CallLinkInfo::emitDirectFastPath):
        (JSC::CallLinkInfo::emitDirectTailCallFastPath):
        * bytecode/CallLinkInfo.h:
        (JSC::CallLinkInfo::offsetOfMaxArgumentCountIncludingThis):
        (JSC::CallLinkInfo::slowStub): Deleted.
        (JSC::CallLinkInfo::addressOfMaxArgumentCountIncludingThis): Deleted.
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::setupWithUnlinkedBaselineCode):
        (JSC::CodeBlock::isConstantOwnedByUnlinkedCodeBlock const):
        (JSC::CodeBlock::setConstantRegisters):
        (JSC::CodeBlock::finalizeJITInlineCaches):
        (JSC::CodeBlock::finalizeUnconditionally):
        (JSC::CodeBlock::frameRegisterCount):
        (JSC::CodeBlock::binaryArithProfileForPC):
        (JSC::CodeBlock::unaryArithProfileForPC):
        (JSC::CodeBlock::findPC):
        (JSC::CodeBlock::jitSoon):
        (JSC::CodeBlock::jitNextInvocation):
        (JSC::CodeBlock::dumpMathICStats):
        (JSC::CodeBlock::finalizeBaselineJITInlineCaches): Deleted.
        (JSC::CodeBlock::addJITAddIC): Deleted.
        (JSC::CodeBlock::addJITMulIC): Deleted.
        (JSC::CodeBlock::addJITSubIC): Deleted.
        (JSC::CodeBlock::addJITNegIC): Deleted.
        (JSC::CodeBlock::setPCToCodeOriginMap): Deleted.
        (JSC::CodeBlock::thresholdForJIT): Deleted.
        (JSC::CodeBlock::jitAfterWarmUp): Deleted.
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::JITData::offsetOfJITConstantPool):
        (JSC::CodeBlock::offsetOfJITData):
        (JSC::CodeBlock::offsetOfArgumentValueProfiles):
        (JSC::CodeBlock::offsetOfConstantsVectorBuffer):
        (JSC::CodeBlock::baselineJITConstantPool):
        (JSC::CodeBlock::checkIfJITThresholdReached):
        (JSC::CodeBlock::dontJITAnytimeSoon):
        (JSC::CodeBlock::llintExecuteCounter const):
        (JSC::CodeBlock::offsetOfDebuggerRequests):
        (JSC::CodeBlock::offsetOfShouldAlwaysBeInlined):
        (JSC::CodeBlock::loopHintsAreEligibleForFuzzingEarlyReturn):
        (JSC::CodeBlock::addressOfNumParameters): Deleted.
        (JSC::CodeBlock::isKnownCell): Deleted.
        (JSC::CodeBlock::addMathIC): Deleted.
        (JSC::CodeBlock::setJITCodeMap): Deleted.
        (JSC::CodeBlock::jitCodeMap): Deleted.
        (JSC::CodeBlock::switchJumpTable): Deleted.
        (JSC::CodeBlock::stringSwitchJumpTable): Deleted.
        * bytecode/CodeBlockInlines.h:
        (JSC::CodeBlock::forEachValueProfile):
        (JSC::CodeBlock::jitCodeMap):
        (JSC::CodeBlock::baselineSwitchJumpTable):
        (JSC::CodeBlock::baselineStringSwitchJumpTable):
        (JSC::CodeBlock::dfgSwitchJumpTable):
        (JSC::CodeBlock::dfgStringSwitchJumpTable):
        * bytecode/ExecutableToCodeBlockEdge.h:
        * bytecode/ExecutionCounter.cpp:
        (JSC::ExecutionCounter<countingVariant>::setThreshold):
        * bytecode/ExecutionCounter.h:
        (JSC::ExecutionCounter::clippedThreshold):
        * bytecode/GetByIdMetadata.h:
        (JSC::GetByIdModeMetadataArrayLength::offsetOfArrayProfile):
        (JSC::GetByIdModeMetadata::offsetOfMode):
        * bytecode/GetByStatus.cpp:
        (JSC::GetByStatus::computeForStubInfoWithoutExitSiteFeedback):
        * bytecode/GetterSetterAccessCase.cpp:
        (JSC::GetterSetterAccessCase::emitDOMJITGetter):
        * bytecode/InByStatus.cpp:
        (JSC::InByStatus::computeForStubInfoWithoutExitSiteFeedback):
        * bytecode/InlineAccess.cpp:
        (JSC::InlineAccess::generateSelfPropertyAccess):
        (JSC::InlineAccess::canGenerateSelfPropertyReplace):
        (JSC::InlineAccess::generateSelfPropertyReplace):
        (JSC::InlineAccess::isCacheableArrayLength):
        (JSC::InlineAccess::generateArrayLength):
        (JSC::InlineAccess::isCacheableStringLength):
        (JSC::InlineAccess::generateStringLength):
        (JSC::InlineAccess::generateSelfInAccess):
        (JSC::InlineAccess::rewireStubAsJumpInAccess):
        (JSC::InlineAccess::resetStubAsJumpInAccess):
        * bytecode/InlineAccess.h:
        * bytecode/IterationModeMetadata.h:
        (JSC::IterationModeMetadata::offsetOfSeenModes):
        * bytecode/LLIntCallLinkInfo.h:
        (JSC::LLIntCallLinkInfo::offsetOfArrayProfile):
        * bytecode/Opcode.h:
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessGenerationState::succeed):
        (JSC::AccessGenerationState::calculateLiveRegistersForCallAndExceptionHandling):
        (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions):
        (JSC::PolymorphicAccess::regenerate):
        * bytecode/PolymorphicAccess.h:
        (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions): Deleted.
        * bytecode/PutByStatus.cpp:
        (JSC::PutByStatus::computeForStubInfo):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::initGetByIdSelf):
        (JSC::StructureStubInfo::initPutByIdReplace):
        (JSC::StructureStubInfo::initInByIdSelf):
        (JSC::StructureStubInfo::addAccessCase):
        (JSC::StructureStubInfo::reset):
        (JSC::StructureStubInfo::visitWeakReferences):
        (JSC::StructureStubInfo::propagateTransitions):
        (JSC::StructureStubInfo::initializeFromUnlinkedStructureStubInfo):
        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::offsetOfByIdSelfOffset):
        (JSC::StructureStubInfo::offsetOfInlineAccessBaseStructure):
        (JSC::StructureStubInfo::inlineAccessBaseStructure):
        (JSC::StructureStubInfo::offsetOfDoneLocation):
        * bytecode/SuperSampler.cpp:
        (JSC::printSuperSamplerState):
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::UnlinkedCodeBlock::hasIdentifier):
        (JSC::UnlinkedCodeBlock::thresholdForJIT):
        (JSC::UnlinkedCodeBlock::allocateSharedProfiles):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::constantRegister):
        (JSC::UnlinkedCodeBlock::instructionAt const):
        (JSC::UnlinkedCodeBlock::bytecodeOffset):
        (JSC::UnlinkedCodeBlock::instructionsSize const):
        (JSC::UnlinkedCodeBlock::loopHintsAreEligibleForFuzzingEarlyReturn):
        (JSC::UnlinkedCodeBlock::outOfLineJumpOffset):
        (JSC::UnlinkedCodeBlock::binaryArithProfile):
        (JSC::UnlinkedCodeBlock::unaryArithProfile):
        (JSC::UnlinkedCodeBlock::llintExecuteCounter):
        * bytecode/UnlinkedMetadataTable.h:
        (JSC::UnlinkedMetadataTable::offsetInMetadataTable):
        * bytecode/ValueProfile.h:
        (JSC::ValueProfileBase::ValueProfileBase):
        (JSC::ValueProfileBase::clearBuckets):
        (JSC::ValueProfile::offsetOfFirstBucket):
        * dfg/DFGCommonData.h:
        * dfg/DFGJITCode.cpp:
        * dfg/DFGJITCode.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::compileExit):
        * dfg/DFGOSRExitCompilerCommon.cpp:
        (JSC::DFG::handleExitCounts):
        (JSC::DFG::callerReturnPC):
        (JSC::DFG::reifyInlinedCallFrames):
        (JSC::DFG::adjustAndJumpToTarget):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePutPrivateName):
        (JSC::DFG::SpeculativeJIT::compileValueAdd):
        (JSC::DFG::SpeculativeJIT::compileValueSub):
        (JSC::DFG::SpeculativeJIT::compileValueNegate):
        (JSC::DFG::SpeculativeJIT::compileValueMul):
        (JSC::DFG::SpeculativeJIT::compileLogShadowChickenTail):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile):
        * ftl/FTLJITCode.h:
        * ftl/FTLLink.cpp:
        (JSC::FTL::link):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::addMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileUnaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileBinaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutPrivateName):
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        * generator/Metadata.rb:
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::storeProperty):
        (JSC::AssemblyHelpers::emitVirtualCall):
        (JSC::AssemblyHelpers::emitVirtualCallWithoutMovingGlobalObject):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::copyCalleeSavesToEntryFrameCalleeSavesBuffer):
        * jit/BaselineJITCode.cpp: Added.
        (JSC::MathICHolder::addJITAddIC):
        (JSC::MathICHolder::addJITMulIC):
        (JSC::MathICHolder::addJITSubIC):
        (JSC::MathICHolder::addJITNegIC):
        (JSC::MathICHolder::adoptMathICs):
        (JSC::BaselineJITCode::BaselineJITCode):
        (JSC::BaselineJITCode::~BaselineJITCode):
        * jit/BaselineJITCode.h: Added.
        (JSC::JITConstantPool::add):
        (JSC::JITConstantPool::size const):
        (JSC::JITConstantPool::at const):
        * jit/BaselineJITPlan.cpp:
        (JSC::BaselineJITPlan::finalize):
        * jit/CCallHelpers.cpp:
        (JSC::CCallHelpers::logShadowChickenTailPacketImpl):
        (JSC::CCallHelpers::logShadowChickenTailPacket):
        * jit/CCallHelpers.h:
        * jit/CallFrameShuffleData.cpp:
        (JSC::CallFrameShuffleData::setupCalleeSaveRegisters):
        * jit/CallFrameShuffleData.h:
        * jit/CallFrameShuffler.cpp:
        (JSC::CallFrameShuffler::CallFrameShuffler):
        (JSC::CallFrameShuffler::prepareForTailCall):
        * jit/CallFrameShuffler.h:
        (JSC::CallFrameShuffler::snapshot const):
        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        (JSC::JIT::emitEnterOptimizationCheck):
        (JSC::JIT::emitNotifyWriteWatchpoint):
        (JSC::JIT::emitVarReadOnlyCheck):
        (JSC::JIT::assertStackPointerOffset):
        (JSC::JIT::resetSP):
        (JSC::JIT::emitPutCodeBlockToFrameInPrologue):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::emitMaterializeMetadataAndConstantPoolRegisters):
        (JSC::JIT::emitRestoreCalleeSaves):
        (JSC::JIT::compileAndLinkWithoutFinalizing):
        (JSC::JIT::link):
        (JSC::JIT::finalizeOnMainThread):
        (JSC::JIT::privateCompile):
        (JSC::JIT::frameRegisterCountFor):
        (JSC::JIT::stackPointerOffsetFor):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_compareAndJumpSlowImpl):
        (JSC::JIT::emit_compareAndJumpSlow):
        (JSC::JIT::emit_op_negate):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emitMathICFast):
        (JSC::JIT::emitMathICSlow):
        (JSC::JIT::emit_op_div):
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emit_op_sub):
        * jit/JITCall.cpp:
        (JSC::JIT::emitPutCallResult):
        (JSC::JIT::compileSetupFrame):
        (JSC::JIT::compileCallEval):
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileTailCall):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        (JSC::JIT::emit_op_iterator_open):
        (JSC::JIT::emitSlow_op_iterator_open):
        (JSC::JIT::emit_op_iterator_next):
        (JSC::JIT::emitSlow_op_iterator_next):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::emitPutCallResult):
        (JSC::JIT::compileSetupFrame):
        (JSC::JIT::compileCallEval):
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        (JSC::JIT::emit_op_iterator_open):
        (JSC::JIT::emitSlow_op_iterator_open):
        (JSC::JIT::emit_op_iterator_next):
        (JSC::JIT::emitSlow_op_iterator_next):
        * jit/JITCode.h:
        (JSC::JITCode::useDataIC):
        (JSC::JITCode::pcToCodeOriginMap):
        * jit/JITCompilationKey.cpp:
        (JSC::JITCompilationKey::dump const):
        * jit/JITCompilationKey.h:
        (JSC::JITCompilationKey::JITCompilationKey):
        (JSC::JITCompilationKey::operator! const):
        (JSC::JITCompilationKey::isHashTableDeletedValue const):
        (JSC::JITCompilationKey::operator== const):
        (JSC::JITCompilationKey::hash const):
        (JSC::JITCompilationKey::profiledBlock const): Deleted.
        * jit/JITInlineCacheGenerator.cpp:
        (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator):
        (JSC::JITInlineCacheGenerator::finalize):
        (JSC::JITInlineCacheGenerator::generateBaselineDataICFastPath):
        (JSC::JITGetByIdGenerator::JITGetByIdGenerator):
        (JSC::generateGetByIdInlineAccess):
        (JSC::JITGetByIdGenerator::generateBaselineDataICFastPath):
        (JSC::JITGetByIdWithThisGenerator::generateBaselineDataICFastPath):
        (JSC::JITPutByIdGenerator::generateBaselineDataICFastPath):
        (JSC::JITDelByValGenerator::generateFastPath):
        (JSC::JITDelByIdGenerator::generateFastPath):
        (JSC::JITInByValGenerator::generateFastPath):
        (JSC::JITInByIdGenerator::generateBaselineDataICFastPath):
        (JSC::JITInstanceOfGenerator::generateFastPath):
        (JSC::JITGetByValGenerator::generateFastPath):
        (JSC::JITPutByValGenerator::generateFastPath):
        (JSC::JITPrivateBrandAccessGenerator::generateFastPath):
        * jit/JITInlineCacheGenerator.h:
        * jit/JITInlines.h:
        (JSC::JIT::isOperandConstantDouble):
        (JSC::JIT::isOperandConstantInt):
        (JSC::JIT::isKnownCell):
        (JSC::JIT::getConstantOperand):
        (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile):
        (JSC::JIT::linkSlowCaseIfNotJSCell):
        (JSC::JIT::advanceToNextCheckpoint):
        (JSC::JIT::emitJumpSlowToHotForCheckpoint):
        (JSC::JIT::isOperandConstantChar):
        (JSC::JIT::emitValueProfilingSite):
        (JSC::JIT::emitValueProfilingSiteIfProfiledOpcode):
        (JSC::JIT::emitArrayProfilingSiteWithCell):
        (JSC::JIT::emitLoadDouble):
        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
        (JSC::JIT::emitGetVirtualRegister):
        (JSC::JIT::jumpTarget):
        (JSC::JIT::loadPtrFromMetadata):
        (JSC::JIT::load32FromMetadata):
        (JSC::JIT::load8FromMetadata):
        (JSC::JIT::store8ToMetadata):
        (JSC::JIT::store32ToMetadata):
        (JSC::JIT::materializePointerIntoMetadata):
        (JSC::JIT::loadConstant):
        (JSC::JIT::loadGlobalObject):
        (JSC::JIT::loadCodeBlockConstant):
        (JSC::JIT::copiedGetPutInfo): Deleted.
        (JSC::JIT::copiedArithProfile): Deleted.
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_mov):
        (JSC::JIT::emit_op_new_object):
        (JSC::JIT::emitSlow_op_new_object):
        (JSC::JIT::emit_op_overrides_has_instance):
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof):
        (JSC::JIT::emit_op_typeof_is_undefined):
        (JSC::JIT::op_ret_handlerGenerator):
        (JSC::JIT::emit_op_to_primitive):
        (JSC::JIT::emit_op_set_function_name):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::valueIsFalseyGenerator):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::valueIsTruthyGenerator):
        (JSC::JIT::emit_op_throw):
        (JSC::JIT::op_throw_handlerGenerator):
        (JSC::JIT::emitSlow_op_jstricteq):
        (JSC::JIT::emitSlow_op_jnstricteq):
        (JSC::JIT::emit_op_to_number):
        (JSC::JIT::emit_op_to_numeric):
        (JSC::JIT::emit_op_to_object):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_switch_char):
        (JSC::JIT::emit_op_switch_string):
        (JSC::JIT::emit_op_debug):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emit_op_enter):
        (JSC::JIT::op_enter_handlerGenerator):
        (JSC::JIT::emit_op_to_this):
        (JSC::JIT::emit_op_create_this):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emitSlow_op_neq):
        (JSC::JIT::emitSlow_op_jeq):
        (JSC::JIT::emitSlow_op_jneq):
        (JSC::JIT::emitSlow_op_instanceof_custom):
        (JSC::JIT::emit_op_loop_hint):
        (JSC::JIT::emitSlow_op_check_traps):
        (JSC::JIT::op_check_traps_handlerGenerator):
        (JSC::JIT::emit_op_new_regexp):
        (JSC::JIT::emitNewFuncCommon):
        (JSC::JIT::emitNewFuncExprCommon):
        (JSC::JIT::emit_op_new_array):
        (JSC::JIT::emit_op_new_array_with_size):
        (JSC::JIT::emit_op_profile_type):
        (JSC::JIT::emit_op_log_shadow_chicken_tail):
        (JSC::JIT::emit_op_profile_control_flow):
        (JSC::JIT::emit_op_get_argument):
        (JSC::JIT::emit_op_get_prototype_of):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_new_object):
        (JSC::JIT::emitSlow_op_new_object):
        (JSC::JIT::emit_op_overrides_has_instance):
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof_custom):
        (JSC::JIT::emit_op_typeof_is_undefined):
        (JSC::JIT::emit_op_set_function_name):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::compileOpEqJumpSlow):
        (JSC::JIT::emitSlow_op_neq):
        (JSC::JIT::emitSlow_op_jstricteq):
        (JSC::JIT::emitSlow_op_jnstricteq):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emit_op_throw):
        (JSC::JIT::emit_op_to_number):
        (JSC::JIT::emit_op_to_numeric):
        (JSC::JIT::emit_op_to_object):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_switch_char):
        (JSC::JIT::emit_op_switch_string):
        (JSC::JIT::emit_op_enter):
        (JSC::JIT::emit_op_create_this):
        (JSC::JIT::emit_op_to_this):
        (JSC::JIT::emit_op_profile_type):
        (JSC::JIT::emit_op_log_shadow_chicken_tail):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jit/JITOperations.h:
        * jit/JITPlan.cpp:
        (JSC::JITPlan::key):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::generateGetByValSlowCase):
        (JSC::JIT::slow_op_get_by_val_prepareCallGenerator):
        (JSC::JIT::emit_op_get_private_name):
        (JSC::JIT::emitSlow_op_get_private_name):
        (JSC::JIT::slow_op_get_private_name_prepareCallGenerator):
        (JSC::JIT::emit_op_set_private_brand):
        (JSC::JIT::emitSlow_op_set_private_brand):
        (JSC::JIT::emit_op_check_private_brand):
        (JSC::JIT::emitSlow_op_check_private_brand):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::slow_op_put_by_val_prepareCallGenerator):
        (JSC::JIT::emit_op_put_private_name):
        (JSC::JIT::emitSlow_op_put_private_name):
        (JSC::JIT::slow_op_put_private_name_prepareCallGenerator):
        (JSC::JIT::emit_op_put_getter_by_id):
        (JSC::JIT::emit_op_put_setter_by_id):
        (JSC::JIT::emit_op_put_getter_setter_by_id):
        (JSC::JIT::emit_op_put_getter_by_val):
        (JSC::JIT::emit_op_put_setter_by_val):
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emitSlow_op_del_by_id):
        (JSC::JIT::slow_op_del_by_id_prepareCallGenerator):
        (JSC::JIT::emit_op_del_by_val):
        (JSC::JIT::emitSlow_op_del_by_val):
        (JSC::JIT::slow_op_del_by_val_prepareCallGenerator):
        (JSC::JIT::emit_op_try_get_by_id):
        (JSC::JIT::emitSlow_op_try_get_by_id):
        (JSC::JIT::emit_op_get_by_id_direct):
        (JSC::JIT::emitSlow_op_get_by_id_direct):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::slow_op_get_by_id_prepareCallGenerator):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        (JSC::JIT::slow_op_get_by_id_with_this_prepareCallGenerator):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::slow_op_put_by_id_prepareCallGenerator):
        (JSC::JIT::emit_op_in_by_id):
        (JSC::JIT::emitSlow_op_in_by_id):
        (JSC::JIT::emit_op_in_by_val):
        (JSC::JIT::emitSlow_op_in_by_val):
        (JSC::JIT::emitHasPrivate):
        (JSC::JIT::emitHasPrivateSlow):
        (JSC::JIT::emitSlow_op_has_private_name):
        (JSC::JIT::emitSlow_op_has_private_brand):
        (JSC::JIT::emitVarInjectionCheck):
        (JSC::JIT::emitResolveClosure):
        (JSC::JIT::emit_op_resolve_scope):
        (JSC::JIT::generateOpResolveScopeThunk):
        (JSC::JIT::slow_op_resolve_scopeGenerator):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::generateOpGetFromScopeThunk):
        (JSC::JIT::slow_op_get_from_scopeGenerator):
        (JSC::JIT::emit_op_put_to_scope):
        (JSC::JIT::emitSlow_op_put_to_scope):
        (JSC::JIT::slow_op_put_to_scopeGenerator):
        (JSC::JIT::emit_op_get_from_arguments):
        (JSC::JIT::emit_op_get_internal_field):
        (JSC::JIT::emit_op_enumerator_next):
        (JSC::JIT::emit_op_enumerator_get_by_val):
        (JSC::JIT::emit_enumerator_has_propertyImpl):
        (JSC::JIT::emitWriteBarrier):
        (JSC::JIT::emitSlow_op_get_from_scope): Deleted.
        (JSC::JIT::emitPutGlobalVariable): Deleted.
        (JSC::JIT::emitPutGlobalVariableIndirect): Deleted.
        (JSC::JIT::emitPutClosureVar): Deleted.
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_getter_by_id):
        (JSC::JIT::emit_op_put_setter_by_id):
        (JSC::JIT::emit_op_put_getter_setter_by_id):
        (JSC::JIT::emit_op_put_getter_by_val):
        (JSC::JIT::emit_op_put_setter_by_val):
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emit_op_del_by_val):
        (JSC::JIT::emitSlow_op_del_by_val):
        (JSC::JIT::emitSlow_op_del_by_id):
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_get_private_name):
        (JSC::JIT::emitSlow_op_get_private_name):
        (JSC::JIT::emit_op_put_private_name):
        (JSC::JIT::emitSlow_op_put_private_name):
        (JSC::JIT::emit_op_set_private_brand):
        (JSC::JIT::emitSlow_op_set_private_brand):
        (JSC::JIT::emit_op_check_private_brand):
        (JSC::JIT::emitSlow_op_check_private_brand):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emit_op_try_get_by_id):
        (JSC::JIT::emitSlow_op_try_get_by_id):
        (JSC::JIT::emit_op_get_by_id_direct):
        (JSC::JIT::emitSlow_op_get_by_id_direct):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::emit_op_in_by_id):
        (JSC::JIT::emitSlow_op_in_by_id):
        (JSC::JIT::emit_op_in_by_val):
        (JSC::JIT::emitSlow_op_in_by_val):
        (JSC::JIT::emitHasPrivate):
        (JSC::JIT::emitHasPrivateSlow):
        (JSC::JIT::emitVarInjectionCheck):
        (JSC::JIT::emit_op_resolve_scope):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::emitSlow_op_get_from_scope):
        (JSC::JIT::emit_op_put_to_scope):
        (JSC::JIT::emitSlow_op_put_to_scope):
        (JSC::JIT::emit_op_get_from_arguments):
        (JSC::JIT::emit_op_get_internal_field):
        * jit/Repatch.cpp:
        (JSC::tryCacheGetBy):
        (JSC::tryCachePutBy):
        (JSC::tryCacheInBy):
        (JSC::unlinkCall):
        * jit/ThunkGenerators.cpp:
        (JSC::handleExceptionGenerator):
        (JSC::popThunkStackPreservesAndHandleExceptionGenerator):
        * jit/ThunkGenerators.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::jitCompileAndSetHeuristics):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CacheableIdentifier.h:
        * runtime/CacheableIdentifierInlines.h:
        (JSC::CacheableIdentifier::createFromIdentifierOwnedByCodeBlock):
        * runtime/CachedTypes.cpp:
        (JSC::CachedCodeBlock::numBinaryArithProfiles const):
        (JSC::CachedCodeBlock::numUnaryArithProfiles const):
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::CachedCodeBlock<CodeBlockType>::encode):
        * runtime/CommonSlowPaths.cpp:
        (JSC::updateArithProfileForUnaryArithOp):
        * runtime/FunctionExecutable.h:
        * runtime/Options.cpp:
        (JSC::Options::recomputeDependentOptions):
        * runtime/OptionsList.h:
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::prepareForExecutionImpl):
        * wasm/WasmLLIntTierUpCounter.h:
        (JSC::Wasm::LLIntTierUpCounter::optimizeAfterWarmUp):
        (JSC::Wasm::LLIntTierUpCounter::optimizeSoon):
        * wasm/WasmTierUpCount.cpp:
        (JSC::Wasm::TierUpCount::TierUpCount):
        * wasm/WasmTierUpCount.h:
        (JSC::Wasm::TierUpCount::optimizeAfterWarmUp):
        (JSC::Wasm::TierUpCount::optimizeNextInvocation):
        (JSC::Wasm::TierUpCount::optimizeSoon):

2021-09-24 Rick Waldron <waldron.rick@gmail.com>

        [JSC] Add checkScriptSyntax function to jsc host environment
        https://bugs.webkit.org/show_bug.cgi?id=230631

        Reviewed by Yusuke Suzuki.

        Introduce a function called checkScriptSyntax() that performs the same
        operation as checkModuleSyntax(), without the module specific semantics.
        Updates tests that were using eval() to verify syntax.

        * jsc.cpp:
        (functionCheckScriptSyntax)

2021-09-23  Philip Chimento  <pchimento@igalia.com>

        Various tweaks in preparation for Temporal.Instant
        https://bugs.webkit.org/show_bug.cgi?id=230331

        Reviewed by Yusuke Suzuki.

        * runtime/TemporalDuration.cpp:
        (JSC::TemporalDuration::fromDurationLike): Use
          temporalUnitPropertyName().
        (JSC::TemporalDuration::toISO8601Duration): Improve error message to
          include the invalid string.
        (JSC::TemporalDuration::with const): Use temporalUnitPropertyName().
        (JSC::TemporalDuration::toString): Use formatSecondsStringFraction().
        * runtime/TemporalObject.cpp:
        (JSC::ellipsizeAt): Add helper to ellipsize string at certain length.
        (JSC::temporalUnitPropertyName): Move code from TemporalDuration into
          a function which will be reused in other Temporal types.
        (JSC::temporalFractionalSecondDigits): Handle NaN as per
          specification, and improve error message to include the invalid
          value.
        (JSC::formatSecondsStringFraction): Move code from TemporalDuration
          into a function which will be reused in other Temporal types.
        * runtime/TemporalObject.h:

2021-09-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: Graphics: add instrumentation for new `CanvasRenderingContext2DSettings`
        https://bugs.webkit.org/show_bug.cgi?id=225180
        <rdar://problem/77587429>

        Reviewed by BJ Burg.

        * inspector/protocol/Canvas.json:
        Add `colorSpace` and `desynchronized` to `Canvas.ContextAttributes`.

2021-09-23  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Handle syntactic production for `#x in expr` correctly
        https://bugs.webkit.org/show_bug.cgi?id=230668

        Reviewed by Yusuke Suzuki.

        The production for `#x in expr` is easy to get wrong.

            RelationalExpression[In, Yield, Await] :
                ShiftExpression[?Yield, ?Await]
                RelationalExpression[?In, ?Yield, ?Await] < ShiftExpression[?Yield, ?Await]
                RelationalExpression[?In, ?Yield, ?Await] > ShiftExpression[?Yield, ?Await]
                RelationalExpression[?In, ?Yield, ?Await] <= ShiftExpression[?Yield, ?Await]
                RelationalExpression[?In, ?Yield, ?Await] >= ShiftExpression[?Yield, ?Await]
                RelationalExpression[?In, ?Yield, ?Await] instanceof ShiftExpression[?Yield, ?Await]
                [+In] RelationalExpression[+In, ?Yield, ?Await] in ShiftExpression[?Yield, ?Await]
                [+In] PrivateIdentifier in ShiftExpression[?Yield, ?Await]

        We were ensuring that a standalone private name `#x` is always followed by operator `in`;
        this patch further ensures that that particular `in` can't have its LHS misparsed as a RelationalExpression.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseBinaryExpression):
        Verify the precedence of the topmost operator on the stack (if any) when parsing standalone `#x`.

2021-09-22  Mikhail R. Gadelha  <mikhail@igalia.com>

        Null pointer dereference in JSC::GetByStatus
        https://bugs.webkit.org/show_bug.cgi?id=229674

        Reviewed by Yusuke Suzuki. 

        In GetByStatus::computeForStubInfoWithoutExitSiteFeedback, there are
        several places that dereference the stubInfo argument when calling the
        GetByStatus constructor. To prevent a nullptr dereference, the pointer
        is not dereferenced anymore, and a check was added to check if stubInfo
        is a valid pointer before accessing it.

        * bytecode/GetByStatus.cpp:
        (JSC::GetByStatus::GetByStatus):
        (JSC::GetByStatus::computeForStubInfoWithoutExitSiteFeedback):
        * bytecode/GetByStatus.h:

2021-09-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Filter algorithmic numbering systems from enumeration data
        https://bugs.webkit.org/show_bug.cgi?id=230660

        Reviewed by Ross Kirsling.

        Algorithmic numbering systems' handling is not included in normal ICU build.
        This patch filters out them from available numbering systems.

        * runtime/IntlObject.cpp:
        (JSC::availableNumberingSystems):

2021-09-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Adjust Intl currency enumeration
        https://bugs.webkit.org/show_bug.cgi?id=230656

        Reviewed by Ross Kirsling.

        1. List up all available currencies.
        2. Introduce a work-around for VES, LSM, and EQE

        * runtime/IntlObject.cpp:
        (JSC::availableCurrencies):

2021-09-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] emoji and eor collations are missing
        https://bugs.webkit.org/show_bug.cgi?id=230652

        Reviewed by Ross Kirsling.

        Due to ICU's bug, "emoji" and "eor" collations are missing from enumeration.
        This patch adds work-around for this.

        * runtime/IntlObject.cpp:
        (JSC::availableCollations):

2021-09-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Intl unicode identifier type will reject underscore
        https://bugs.webkit.org/show_bug.cgi?id=230645

        Reviewed by Ross Kirsling.

        We reject '_' since BCP-47 rejects it and we should follow BCP-47 in all Intl inputs.

        * runtime/IntlObject.cpp:
        (JSC::isUnicodeLocaleIdentifierType):

2021-09-21  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] DOM constructors should extend InternalFunction
        https://bugs.webkit.org/show_bug.cgi?id=228763

        Reviewed by Sam Weinig.

        Introduce finishCreation(VM&) overload to preserve the current property order of
        WebIDL constructors, and to defer a large code change needed for passing through
        `length` / `name` parameters (bug #230584).

        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction):
        (JSC::InternalFunction::finishCreation):
        * runtime/InternalFunction.h:

2021-09-21  Chris Dumez  <cdumez@apple.com>

        Reduce use of makeRef() and use Ref { } instead
        https://bugs.webkit.org/show_bug.cgi?id=230585

        Reviewed by Alex Christensen.

        * debugger/Debugger.cpp:
        (JSC::Debugger::setBreakpoint):
        (JSC::Debugger::schedulePauseForSpecialBreakpoint):
        * llint/LLIntEntrypoint.cpp:
        (JSC::LLInt::setFunctionEntrypoint):
        (JSC::LLInt::setEvalEntrypoint):
        (JSC::LLInt::setProgramEntrypoint):
        (JSC::LLInt::setModuleProgramEntrypoint):
        * runtime/JSString.cpp:
        (JSC::JSRopeString::resolveRopeToExistingAtomString const):
        * runtime/VM.cpp:
        (JSC::jitCodeForCallTrampoline):
        (JSC::jitCodeForConstructTrampoline):
        * wasm/WasmCodeBlock.cpp:
        (JSC::Wasm::CodeBlock::CodeBlock):
        * wasm/WasmOMGForOSREntryPlan.cpp:
        (JSC::Wasm::OMGForOSREntryPlan::OMGForOSREntryPlan):
        * wasm/WasmOMGPlan.cpp:
        (JSC::Wasm::OMGPlan::OMGPlan):
        * wasm/WasmSignature.cpp:
        (JSC::Wasm::SignatureInformation::signatureFor):
        * wasm/WasmSignatureInlines.h:
        (JSC::Wasm::SignatureInformation::get):
        * wasm/WasmSlowPaths.cpp:
        (JSC::LLInt::jitCompileAndSetHeuristics):
        * wasm/js/JSWebAssemblyInstance.h:

2021-09-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] CompareStrictEq is omitting String check incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=230582
        rdar://83237121

        Reviewed by Mark Lam.

        1. Add left and right prefixes to neitherDoubleNorHeapBigIntChild and notDoubleChild edges since
           registers are named with left and right. Without this prefix, it is hard to follow in the code.
        2. Remove leftGPR and rightGPR and use leftRegs.payloadGPR() and rightRegs.payloadGPR() to avoid
           having different variables pointing to the same registers.
        3. DFG needsTypeCheck is done with wrong type filters. As a result, necessary checks are omitted.
           This patch fixes that. FTL does not have the same problem.

        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compileNeitherDoubleNorHeapBigIntToNotDoubleStrictEquality):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):

2021-09-21  Mark Lam  <mark.lam@apple.com>

        Replace a few ASSERTs with static_asserts in the ARM64 MacroAssemblers.
        https://bugs.webkit.org/show_bug.cgi?id=230569

        Reviewed by Yusuke Suzuki.

        * assembler/ARM64Assembler.h:
        * assembler/ARM64EAssembler.h:

2021-09-21  Justin Michaud  <justin_michaud@apple.com>

        Differential testing: live statement don't execute
        https://bugs.webkit.org/show_bug.cgi?id=229939

        Reviewed by Saam Barati.

        In statements are supposed to throw if they are applied to a non-object. We incorrectly converted
        InByVals into HasIndexedProperty any time they were a cell, so we silently converted non-objects. Before converting
        an InByVal, we first speculate that the base is an object now.

        We do not always require an object edge for HasIndexedProperty because enumerator next() does not
        throw if it encounters a cell that requires conversion during the call to toObject (for example, a
        string literal). That is, we should silently convert the string during enumeration, but not for an
        In statement, and so HasIndexedProperty is prepared to handle both cases.

        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::convertToHasIndexedProperty):

2021-09-21  Mikhail R. Gadelha  <mikhail@igalia.com>

        Prevent test from accessing FP registers if they are not available (e.g., arm softFP)
        https://bugs.webkit.org/show_bug.cgi?id=230493

        Unreviewed gardening.

        The patch from https://bugs.webkit.org/show_bug.cgi?id=228543 introduced
        explicity calls to FP registers, however, they are not available in archs
        that emulate FPs. This patch adds an #ifdef to only enable the test if
        the arch has FP registers.

        * assembler/testmasm.cpp:
        (JSC::testStoreBaseIndex):

2021-09-20  Chris Dumez  <cdumez@apple.com>

        Stop using makeRef(*this) / makeRefPtr(this)
        https://bugs.webkit.org/show_bug.cgi?id=230464

        Reviewed by Alex Christensen.

        * inspector/InjectedScriptHost.cpp:
        (Inspector::InjectedScriptHost::wrapper):
        * inspector/remote/RemoteConnectionToTarget.cpp:
        (Inspector::RemoteConnectionToTarget::close):
        * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:
        (Inspector::RemoteConnectionToTarget::setup):
        (Inspector::RemoteConnectionToTarget::close):
        (Inspector::RemoteConnectionToTarget::sendMessageToTarget):
        * wasm/WasmCodeBlock.cpp:
        (JSC::Wasm::CodeBlock::compileAsync):
        * wasm/WasmNameSection.h:
        (JSC::Wasm::NameSection::get):
        * wasm/WasmStreamingCompiler.cpp:
        (JSC::Wasm::StreamingCompiler::didReceiveFunctionData):

2021-09-17  Mikhail R. Gadelha  <mikhail@igalia.com>

        Fix CellTag being set 32 bits even if the base is not a cell
        https://bugs.webkit.org/show_bug.cgi?id=230364

        Reviewed by Yusuke Suzuki.

        Initial patch by Caio Lima.

        In 32 bits the tag of the base was not being preserved before calling
        the slow path and was instead being always being set to cellTag.

        This patch slightly changes the code to instead of setting the cellTag,
        it now calls the slow path using only the payload if the base is a cell,
        otherwise it uses tag+payload.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileEnumeratorHasProperty):

2021-09-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add fast property enumeration mode for JSON.stringify
        https://bugs.webkit.org/show_bug.cgi?id=230393

        Reviewed by Mark Lam.

        We collected profiles and found several subtests are using JSON.stringify enough. And generated strings are many serialized leaf objects.

        This patch adds fast object property enumeration. When we know that source object meets some conditions, we can say that,
        as long as structure is not changed, we can continue using property names and offset collected from the structure.
        This way removes non observable [[Get]] operations to accelerate JSON.stringify performance for major object iteration cases.

        We also extend MarkedArgumentBuffer: introducing MarkedArgumentBufferWithSize which can take default inline capacity as a template
        parameter. This is used in JSON.stringify to increase the buffer because now we also need to record structures in MarkedArgumentBuffer.

        This offers 0.4% improvement in Speedometer2 (EmberJS-TodoMVC, Vanilla-XXX, EmberJS-Debug-TodoMVC, they have enough amount of JSON.stringify
        time).

        ----------------------------------------------------------------------------------------------------------------------------------
        |               subtest                |     ms      |     ms      |  b / a   | pValue (significance using False Discovery Rate) |
        ----------------------------------------------------------------------------------------------------------------------------------
        | Elm-TodoMVC                          |117.710000   |117.751667   |1.000354  | 0.883246                                         |
        | VueJS-TodoMVC                        |24.500000    |24.311667    |0.992313  | 0.365130                                         |
        | EmberJS-TodoMVC                      |126.646667   |125.738333   |0.992828  | 0.002587 (significant)                           |
        | BackboneJS-TodoMVC                   |47.873333    |47.911667    |1.000801  | 0.762509                                         |
        | Preact-TodoMVC                       |17.020000    |17.070000    |1.002938  | 0.786799                                         |
        | AngularJS-TodoMVC                    |129.856667   |129.353333   |0.996124  | 0.177632                                         |
        | Vanilla-ES2015-TodoMVC               |61.698333    |61.120000    |0.990626  | 0.000003 (significant)                           |
        | Inferno-TodoMVC                      |62.840000    |62.496667    |0.994536  | 0.312340                                         |
        | Flight-TodoMVC                       |77.095000    |76.936667    |0.997946  | 0.702724                                         |
        | Angular2-TypeScript-TodoMVC          |39.740000    |39.191667    |0.986202  | 0.053485                                         |
        | VanillaJS-TodoMVC                    |49.008333    |48.346667    |0.986499  | 0.000638 (significant)                           |
        | jQuery-TodoMVC                       |216.785000   |217.188333   |1.001861  | 0.270747                                         |
        | EmberJS-Debug-TodoMVC                |344.230000   |342.993333   |0.996407  | 0.012262 (significant)                           |
        | React-TodoMVC                        |85.461667    |85.411667    |0.999415  | 0.758049                                         |
        | React-Redux-TodoMVC                  |140.681667   |140.640000   |0.999704  | 0.871277                                         |
        | Vanilla-ES2015-Babel-Webpack-TodoMVC |59.928333    |59.351667    |0.990377  | 0.000000 (significant)                           |
        ----------------------------------------------------------------------------------------------------------------------------------
        a mean = 264.40650
        b mean = 265.51533
        pValue = 0.0005567357
        (Bigger means are better.)
        1.004 times better
        Results ARE significant

        * heap/Heap.cpp:
        (JSC::Heap::addCoreConstraints):
        * heap/Heap.h:
        * heap/HeapInlines.h:
        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBufferBase::addMarkSet):
        (JSC::MarkedArgumentBufferBase::markLists):
        (JSC::MarkedArgumentBufferBase::slowEnsureCapacity):
        (JSC::MarkedArgumentBufferBase::expandCapacity):
        (JSC::MarkedArgumentBufferBase::slowAppend):
        (JSC::MarkedArgumentBuffer::addMarkSet): Deleted.
        (JSC::MarkedArgumentBuffer::markLists): Deleted.
        (JSC::MarkedArgumentBuffer::slowEnsureCapacity): Deleted.
        (JSC::MarkedArgumentBuffer::expandCapacity): Deleted.
        (JSC::MarkedArgumentBuffer::slowAppend): Deleted.
        * runtime/ArgList.h:
        (JSC::MarkedArgumentBufferWithSize::MarkedArgumentBufferWithSize):
        (JSC::MarkedArgumentBuffer::MarkedArgumentBuffer): Deleted.
        (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer): Deleted.
        (JSC::MarkedArgumentBuffer::size const): Deleted.
        (JSC::MarkedArgumentBuffer::isEmpty const): Deleted.
        (JSC::MarkedArgumentBuffer::at const): Deleted.
        (JSC::MarkedArgumentBuffer::clear): Deleted.
        (JSC::MarkedArgumentBuffer::appendWithAction): Deleted.
        (JSC::MarkedArgumentBuffer::append): Deleted.
        (JSC::MarkedArgumentBuffer::appendWithCrashOnOverflow): Deleted.
        (JSC::MarkedArgumentBuffer::removeLast): Deleted.
        (JSC::MarkedArgumentBuffer::last): Deleted.
        (JSC::MarkedArgumentBuffer::takeLast): Deleted.
        (JSC::MarkedArgumentBuffer::ensureCapacity): Deleted.
        (JSC::MarkedArgumentBuffer::hasOverflowed): Deleted.
        (JSC::MarkedArgumentBuffer::overflowCheckNotNeeded): Deleted.
        (JSC::MarkedArgumentBuffer::fill): Deleted.
        (JSC::MarkedArgumentBuffer::slotFor const): Deleted.
        (JSC::MarkedArgumentBuffer::mallocBase): Deleted.
        (JSC::MarkedArgumentBuffer::setNeedsOverflowCheck): Deleted.
        (JSC::MarkedArgumentBuffer::clearNeedsOverflowCheck): Deleted.
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Holder::hasFastObjectProperties const):
        (JSC::Stringifier::appendStringifiedValue):
        (JSC::Stringifier::Holder::Holder):
        (JSC::Stringifier::Holder::appendNextProperty):
        * runtime/ObjectConstructorInlines.h:
        (JSC::canPerformFastPropertyEnumerationForJSONStringify):

2021-09-17  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed fix for JSCOnly build with ENABLE_DFG_JIT off.

        * b3/testb3_1.cpp:
        * wasm/WasmEntryPlan.cpp:
        * wasm/WasmLLIntPlan.cpp:
        * wasm/WasmOperations.cpp:
        * wasm/WasmSignature.cpp:
        * wasm/WasmSignature.h:
        * wasm/generateWasmOpsHeader.py:
        * wasm/js/JSToWasm.h:

2021-09-17  Angelos Oikonomopoulos  <angelos@igalia.com>

        Unbreak GCC_OFFLINEASM_SOURCE_MAP when LTO is in use
        https://bugs.webkit.org/show_bug.cgi?id=230061
        <rdar://problem/83166173>

        Reviewed by Michael Catanzaro.

        Our ASM postprocessing hack is incompatible with
        LTO. Unconditionally disable LTO for LowLevelInterpreter.cxx when
        GCC_OFFLINEASM_SOURCE_MAP is in use.

        * CMakeLists.txt:

2021-09-17  Justin Michaud  <justin_michaud@apple.com>

        Improve access case printing and show inline capacity for structures
        https://bugs.webkit.org/show_bug.cgi?id=230357

        Reviewed by Saam Barati.

        This just makes the printing of access cases slightly more readable.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::dump const):
        * bytecode/AccessCase.h:
        (JSC::AccessCase::dumpImpl const):
        * bytecode/GetterSetterAccessCase.cpp:
        (JSC::GetterSetterAccessCase::dumpImpl const):
        * bytecode/GetterSetterAccessCase.h:
        * bytecode/InstanceOfAccessCase.cpp:
        (JSC::InstanceOfAccessCase::dumpImpl const):
        * bytecode/InstanceOfAccessCase.h:
        * bytecode/ProxyableAccessCase.cpp:
        (JSC::ProxyableAccessCase::dumpImpl const):
        * bytecode/ProxyableAccessCase.h:
        * heap/Heap.cpp:
        (JSC::Heap::runEndPhase):
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::dumpInContextAssumingStructure const):
        * runtime/Structure.cpp:
        (JSC::Structure::dump const):

2021-09-17  Justin Michaud  <justin_michaud@apple.com>

        PutByVal and PutPrivateName ICs should emit a write barrier if a butterfly might be allocated
        https://bugs.webkit.org/show_bug.cgi?id=230378

        Reviewed by Yusuke Suzuki.

        Right now, PutByVal and PutPrivateName check the value type to determine 
        if a write barrier is needed. For example, putting a primitive is considered 
        to not require a write barrier. This makes sense, except for the case when we 
        might allocate or re-allocate a butterfly in the IC. This does not emit a write 
        barrier, and so the GC might miss the new butterfly. That is somewhat undesirable. 
        This is a temporary conservative fix. If we don't write to the butterfly pointer,
        then we still don't need a write barrier; this work is captured by 
        https://bugs.webkit.org/show_bug.cgi?id=230377

        * dfg/DFGStoreBarrierInsertionPhase.cpp:

2021-09-16  Saam Barati  <sbarati@apple.com>

        Don't throw an exception in the middle of linking a CodeBlock
        https://bugs.webkit.org/show_bug.cgi?id=230367

        Reviewed by Yusuke Suzuki.

        It's cleaner, and probably more correct, to wait until we're done linking
        the instruction stream before throwing any exceptions from CodeBlock::finishCreation.
        This guarantees, for example, that all metadata structs are initialized.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::setConstantRegisters):
        (JSC::CodeBlock::initializeTemplateObjects):
        * bytecode/CodeBlock.h:
        * runtime/JSScope.cpp:
        (JSC::abstractAccess):
        (JSC::JSScope::abstractResolve):

2021-09-16  Saam Barati  <sbarati@apple.com>

        Move some profiling to UnlinkedCodeBlock
        https://bugs.webkit.org/show_bug.cgi?id=230078
        <rdar://problem/82947571>

        Reviewed by Yusuke Suzuki.

        This patch adds UnlinkedValueProfile and UnlinkedArrayProfile to
        UnlinkedCodeBlock. These profiles serialize the data in ValueProfile
        and ArrayProfile. Each time a CodeBlock updates value profiles,
        it mixes in up to date information from the unlinked profiles, and
        also writes back data to the unlinked profiles, so the data is shared
        between CodeBlocks of the same UnlinkedCodeBlock.
        
        This patch also fixes a pre-existing bug where we would sometimes think
        we had more metadata table entries than we really had in practice. This is
        because MetadataTable::forEach used the next opcode's start pointer. That
        pointer was aligned to that opcode's metadata alignment. So that might make
        the previous opcode think it had an extra 1-7 entries (depending on size,
        alignment, etc). This patch fixes that by having the next opcode's start
        offset in the table always be the end offset of the previous opcode, and we
        align the start pointer when using it.
        
        This was measured as a ~0.5% speedup on Speedometer2.

        * bytecode/ArrayProfile.h:
        (JSC::UnlinkedArrayProfile::update):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::updateAllValueProfilePredictionsAndCountLiveness):
        (JSC::CodeBlock::updateAllArrayProfilePredictions):
        (JSC::CodeBlock::updateAllArrayPredictions):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::metadata):
        * bytecode/CodeBlockInlines.h:
        (JSC::CodeBlock::forEachArrayProfile): Deleted.
        * bytecode/MetadataTable.cpp:
        (JSC::DeallocTable::withOpcodeType):
        * bytecode/MetadataTable.h:
        (JSC::MetadataTable::get):
        (JSC::MetadataTable::forEach):
        (JSC::MetadataTable::getWithoutAligning):
        (JSC::MetadataTable::getImpl): Deleted.
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::allocateSharedProfiles):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::unlinkedValueProfile):
        (JSC::UnlinkedCodeBlock::unlinkedArrayProfile):
        * bytecode/UnlinkedCodeBlockGenerator.cpp:
        (JSC::UnlinkedCodeBlockGenerator::finalize):
        * bytecode/UnlinkedMetadataTable.cpp:
        (JSC::UnlinkedMetadataTable::finalize):
        * bytecode/UnlinkedMetadataTable.h:
        (JSC::UnlinkedMetadataTable::isFinalized):
        (JSC::UnlinkedMetadataTable::hasMetadata):
        * bytecode/UnlinkedMetadataTableInlines.h:
        (JSC::UnlinkedMetadataTable::numEntries):
        * bytecode/ValueProfile.h:
        (JSC::UnlinkedValueProfile::update):
        * bytecompiler/BytecodeGenerator.h:
        * llint/LowLevelInterpreter.asm:
        * runtime/CachedTypes.cpp:
        (JSC::CachedCodeBlock::numValueProfiles const):
        (JSC::CachedCodeBlock::numArrayProfiles const):
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::CachedCodeBlock<CodeBlockType>::encode):

2021-09-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r282478.
        https://bugs.webkit.org/show_bug.cgi?id=230358


        Reverted changeset:

        "Move some profiling to UnlinkedCodeBlock"
        https://bugs.webkit.org/show_bug.cgi?id=230078
        https://commits.webkit.org/r282478

2021-09-16  Mikhail R. Gadelha  <mikhail@igalia.com>

        Fix crash in 32 bits due to not enough scratch registers available
        https://bugs.webkit.org/show_bug.cgi?id=230241

        Reviewed by Filip Pizlo.

        Since patch 229229 (Polymorphic PutByVal) landed, jsc is now reaching
        the case Transition in `AccessCase::generateImpl` which needs three
        scratch registers when reallocating, but in ARMv7/MIPS, there are only
        two registers available.

        So in this patch, `AccessCase::createTransition` is changed to actually
        check if there are enough registers available before creating the
        AccessCase object.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateImpl):

2021-09-15  Saam Barati  <sbarati@apple.com>

        Move some profiling to UnlinkedCodeBlock
        https://bugs.webkit.org/show_bug.cgi?id=230078
        <rdar://problem/82947571>

        Reviewed by Yusuke Suzuki.

        This patch moves ValueProfiles and ArrayProfiles for non-call opcodes into
        UnlinkedCodeBlock. This way, the data is shared between the linked CodeBlocks
        of the same UnlinkedCodeBlock. The profiling bet here is that when the same code
        runs in a different global object, it largely runs in the same way. We've made
        this same bet in other ways with our profiling, and it largely makes sense
        to do for ValueProfile and ArrayProfile since they both hold global object
        independent data.
        
        Because ArrayProfiles are now shared between CodeBlocks, the existing m_usesOriginalArrayStructures
        bit is slightly harder to track now, since the ArrayProfile may see inputs from a different
        global object, an array may be an original array in one lexical global object,
        but not another. So we now track when an ArrayProfile sees a different global
        object than the lexical global object, and when we observe exits in the DFG,
        we propagate that bit to the m_usesOriginalArrayStructures bit.
        
        This patch also makes it so we no longer hold the CodeBlock lock when
        processing ValueProfiles and ArrayProfiles. We now allow multiple compiler
        threads to race against each other when updating these profiles. This is fine.
        It may end up with incomplete data in the profiles, but it won't corrupt them.
        
        This patch also makes it so we finalized visited UnlinkedCodeBlocks to finalize
        their value profiles. We no longer do that work inside CodeBlock for the
        ValueProfiles that UnlinkedCodeBlock owns. This also means that we have to
        WriteBarrier UnlinkedCodeBlock when executing in the LLInt, Baseline, and
        other areas, such as OSR exit, and in the GC when a CodeBlock was executing.
        That way we're guaranteed to visit the UnlinkedCodeBlock, add it to the
        visited set, and then finalize it at the end of GC.
        
        This patch also makes it so that inside CodeBlock::finishCreation, we finish
        linking before we do anything that can throw an exception. It's not valid to
        finalize a CodeBlock that isn't linked.
        
        This was measured as a 0.5-1% speedup on Speedometer2.

        * bytecode/ArrayProfile.cpp:
        (JSC::ArrayProfile::computeUpdatedPrediction):
        (JSC::ArrayProfile::briefDescription):
        (JSC::ArrayProfile::briefDescriptionWithoutUpdating):
        * bytecode/ArrayProfile.h:
        (JSC::ArrayProfile::ArrayProfile):
        (JSC::ArrayProfile::observedArrayModes const):
        (JSC::ArrayProfile::mayInterceptIndexedAccesses const):
        (JSC::ArrayProfile::mayStoreToHole const):
        (JSC::ArrayProfile::outOfBounds const):
        (JSC::ArrayProfile::usesOriginalArrayStructures const):
        (JSC::ArrayProfile::setDoesNotUseOriginalArrayStructures):
        (JSC::ArrayProfile::observedDifferentGlobalObject const):
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeOperandsForCheckpoint.h:
        (JSC::valueProfileForImpl):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::setConstantRegisters):
        (JSC::CodeBlock::initializeTemplateObjects):
        (JSC::CodeBlock::setNumParameters):
        (JSC::CodeBlock::visitChildren):
        (JSC::CodeBlock::finalizeUnconditionally):
        (JSC::CodeBlock::getArrayProfile):
        (JSC::CodeBlock::updateAllValueProfilePredictionsAndCountLiveness):
        (JSC::CodeBlock::updateAllArrayPredictions):
        (JSC::CodeBlock::tryGetValueProfileForBytecodeIndex):
        (JSC::CodeBlock::valueProfilePredictionForBytecodeIndex):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::offsetOfUnlinkedCodeBlock):
        (JSC::CodeBlock::numberOfArgumentValueProfiles):
        (JSC::CodeBlock::valueProfileForArgument):
        (JSC::CodeBlock::metadata):
        * bytecode/CodeBlockInlines.h:
        (JSC::CodeBlock::forEachValueProfile):
        (JSC::CodeBlock::forEachArrayProfile):
        * bytecode/DFGExitProfile.cpp:
        (JSC::DFG::ExitProfile::hasAnyExitsAt const):
        * bytecode/DFGExitProfile.h:
        * bytecode/GetByIdMetadata.h:
        (JSC::GetByIdModeMetadata::setArrayLengthMode):
        * bytecode/LazyOperandValueProfile.cpp:
        (JSC::CompressedLazyOperandValueProfileHolder::computeUpdatedPredictions):
        (JSC::LazyOperandValueProfileParser::prediction const):
        * bytecode/MetadataTable.cpp:
        (JSC::DeallocTable::withOpcodeType):
        * bytecode/MetadataTable.h:
        (JSC::MetadataTable::get):
        (JSC::MetadataTable::forEach):
        (JSC::MetadataTable::getWithoutAligning):
        (JSC::MetadataTable::getImpl): Deleted.
        * bytecode/Opcode.h:
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::visitChildrenImpl):
        (JSC::UnlinkedCodeBlock::allocateSharedProfiles):
        (JSC::UnlinkedCodeBlock::finalizeUnconditionally):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::hasAnyExitsAt const):
        (JSC::UnlinkedCodeBlock::hasAnyExitsAt):
        (JSC::UnlinkedCodeBlock::valueProfile):
        (JSC::UnlinkedCodeBlock::arrayProfile):
        (JSC::UnlinkedCodeBlock::numValueProfiles const):
        (JSC::UnlinkedCodeBlock::numArrayProfiles const):
        * bytecode/UnlinkedCodeBlockGenerator.cpp:
        (JSC::UnlinkedCodeBlockGenerator::finalize):
        * bytecode/UnlinkedMetadataTable.cpp:
        (JSC::UnlinkedMetadataTable::finalize):
        * bytecode/UnlinkedMetadataTable.h:
        (JSC::UnlinkedMetadataTable::isFinalized):
        (JSC::UnlinkedMetadataTable::hasMetadata):
        * bytecode/UnlinkedMetadataTableInlines.h:
        (JSC::UnlinkedMetadataTable::numEntries):
        * bytecode/ValueProfile.h:
        (JSC::ValueProfileBase::ValueProfileBase):
        (JSC::ValueProfileBase::clearBuckets):
        (JSC::ValueProfileBase::briefDescription):
        (JSC::ValueProfileBase::computeUpdatedPrediction):
        (JSC::ValueProfile::offsetOfFirstBucket):
        (JSC::ValueProfileBase::classInfo const): Deleted.
        * dfg/DFGArrayMode.cpp:
        (JSC::DFG::ArrayMode::fromObserved):
        * dfg/DFGArrayMode.h:
        (JSC::DFG::ArrayMode::withSpeculationFromProfile const):
        (JSC::DFG::ArrayMode::withProfile const):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
        (JSC::DFG::ByteCodeParser::getArrayMode):
        (JSC::DFG::ByteCodeParser::handleVarargsInlining):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::handlePutByVal):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::attemptToMakeGetArrayLength):
        * dfg/DFGGraph.h:
        * dfg/DFGOSRExitCompilerCommon.cpp:
        (JSC::DFG::osrWriteBarrier):
        (JSC::DFG::adjustAndJumpToTarget):
        * dfg/DFGPredictionInjectionPhase.cpp:
        (JSC::DFG::PredictionInjectionPhase::run):
        * heap/CodeBlockSetInlines.h:
        (JSC::CodeBlockSet::iterateViaSubspaces):
        * heap/Heap.cpp:
        (JSC::Heap::finalizeMarkedUnconditionalFinalizers):
        (JSC::Heap::finalizeUnconditionalFinalizers):
        (JSC::Heap::deleteUnmarkedCompiledCode):
        (JSC::Heap::runEndPhase):
        (JSC::Heap::addCoreConstraints):
        * jit/JIT.h:
        * jit/JITInlines.h:
        (JSC::JIT::emitValueProfilingSiteIfProfiledOpcode):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_enter):
        (JSC::JIT::op_enter_handlerGenerator):
        * jit/JITOperations.cpp:
        (JSC::putByValOptimize):
        (JSC::directPutByValOptimize):
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::generateGetByValSlowCase):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emit_op_in_by_val):
        (JSC::JIT::emitSlow_op_in_by_val):
        (JSC::JIT::generateOpGetFromScopeThunk):
        (JSC::JIT::slow_op_get_from_scopeGenerator):
        (JSC::JIT::emit_op_enumerator_get_by_val):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emit_op_in_by_val):
        (JSC::JIT::emitSlow_op_in_by_val):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::performLLIntGetByID):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::getByVal):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * profiler/ProfilerBytecodeSequence.cpp:
        (JSC::Profiler::BytecodeSequence::BytecodeSequence):
        * runtime/CachedTypes.cpp:
        (JSC::CachedCodeBlock::numValueProfiles const):
        (JSC::CachedCodeBlock::numArrayProfiles const):
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::CachedCodeBlock<CodeBlockType>::encode):
        * runtime/CommonSlowPaths.cpp:
        (JSC::iteratorNextTryFastImpl):
        (JSC::JSC_DEFINE_COMMON_SLOW_PATH):
        * runtime/JSScope.cpp:
        (JSC::abstractAccess):
        (JSC::JSScope::abstractResolve):
        * runtime/VM.cpp:
        * runtime/VM.h:
        (JSC::VM::forEachUnlinkedCodeBlockSpace):
        (JSC::VM::forEachCodeBlockSpace): Deleted.

2021-09-15  Michael Catanzaro  <mcatanzaro@gnome.org>

        Avoid GCC warnings introduced in r282125
        https://bugs.webkit.org/show_bug.cgi?id=230154

        Reviewed by Fujii Hironori.

        Yusuke suggested casting to UChar to avoid -Wswitch-out-of-range. This works!

        Also, avoid -Wredundant-move by removing one unnecessary WTFMove.

        * runtime/ISO8601.cpp:
        (JSC::ISO8601::parseTimeZoneBracketedAnnotation):
        (JSC::ISO8601::canBeTimeZone):
        (JSC::ISO8601::parseTimeZone):

2021-09-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Optimize leaf object creation in JSON.parse
        https://bugs.webkit.org/show_bug.cgi?id=230298

        Reviewed by Keith Miller.

        This patch optimizes JSON.parse.

        1. Use table in isJSONWhiteSpace.
        2. Extract primitive value creation as parsePrimitiveValue function to use it in different place.
        3. Add leaf-object creation fast path. Previously, when creating a leaf-object from JSON.parse we
           are too generic and jumping around the code. Instead we add a fast path that does not perform
           unnecessary operations and code gets tight.

        It offers 3-4% improvement in microbenchmarks.
                                                             ToT                     Patched

        vanilla-es2015-babel-webpack-todomvc-json-parse
                                                      104.7169+-0.1113     ^    101.4836+-0.2168        ^ definitely 1.0319x faster
        flight-todomvc-json-parse                      53.9074+-0.0957     ^     52.1347+-0.0802        ^ definitely 1.0340x faster
        vanilla-es2015-todomvc-json-parse             104.9373+-0.1631     ^    101.4978+-0.1073        ^ definitely 1.0339x faster
        vanilla-todomvc-json-parse                     79.1330+-0.0963     ^     76.7568+-0.1606        ^ definitely 1.0310x faster

        This offers 0.2% improvement in Speedometer2.

        ----------------------------------------------------------------------------------------------------------------------------------
        |               subtest                |     ms      |     ms      |  b / a   | pValue (significance using False Discovery Rate) |
        ----------------------------------------------------------------------------------------------------------------------------------
        | Elm-TodoMVC                          |116.860000   |116.825000   |0.999700  | 0.901070                                         |
        | VueJS-TodoMVC                        |24.658333    |24.763333    |1.004258  | 0.571728                                         |
        | EmberJS-TodoMVC                      |126.666667   |126.335000   |0.997382  | 0.289517                                         |
        | BackboneJS-TodoMVC                   |48.435000    |48.523333    |1.001824  | 0.455638                                         |
        | Preact-TodoMVC                       |17.585000    |17.368333    |0.987679  | 0.247658                                         |
        | AngularJS-TodoMVC                    |129.576667   |129.398333   |0.998624  | 0.625634                                         |
        | Vanilla-ES2015-TodoMVC               |62.746667    |62.241667    |0.991952  | 0.000019 (significant)                           |
        | Inferno-TodoMVC                      |63.741667    |63.495000    |0.996130  | 0.448861                                         |
        | Flight-TodoMVC                       |78.021667    |77.306667    |0.990836  | 0.087137                                         |
        | Angular2-TypeScript-TodoMVC          |39.823333    |39.923333    |1.002511  | 0.736279                                         |
        | VanillaJS-TodoMVC                    |50.073333    |49.791667    |0.994375  | 0.136495                                         |
        | jQuery-TodoMVC                       |221.300000   |221.586667   |1.001295  | 0.418008                                         |
        | EmberJS-Debug-TodoMVC                |340.145000   |339.965000   |0.999471  | 0.691490                                         |
        | React-TodoMVC                        |85.698333    |85.650000    |0.999436  | 0.761586                                         |
        | React-Redux-TodoMVC                  |140.510000   |140.785000   |1.001957  | 0.285922                                         |
        | Vanilla-ES2015-Babel-Webpack-TodoMVC |60.928333    |60.500000    |0.992970  | 0.000069 (significant)                           |
        ----------------------------------------------------------------------------------------------------------------------------------
        a mean = 262.15844
        b mean = 262.72261
        pValue = 0.0428052487
        (Bigger means are better.)
        1.002 times better
        Results ARE significant

        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser<CharType>::makeIdentifier):
        (JSC::isJSONWhiteSpace):
        (JSC::LiteralParser<CharType>::Lexer::lex):
        (JSC::LiteralParser<CharType>::parsePrimitiveValue):
        (JSC::LiteralParser<CharType>::parse):
        * runtime/LiteralParser.h:

2021-09-14  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes, mid September 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=230110

        Unreviewed non-unified build fixes.

        * runtime/TemporalPlainTimeConstructor.cpp:
        * runtime/TemporalPlainTimePrototype.cpp:

2021-09-14  Ross Kirsling  <ross.kirsling@sony.com>

        [Win] JSRemoteInspector.h missing stdint include
        https://bugs.webkit.org/show_bug.cgi?id=230275

        Reviewed by Don Olmstead.

        * API/JSRemoteInspector.h:
        Include stdint for uint8_t definition on Windows.

2021-09-14  Xan Lopez  <xan@igalia.com>

        [JSC] Remove unnecessary exception checks in DFGOperations
        https://bugs.webkit.org/show_bug.cgi?id=230247

        Reviewed by Caio Araujo Neponoceno de Lima.

        JSValue::decode cannot throw an exception, remove a couple of
        unnecessary RETURN_IF_EXCEPTION() calls.

        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):

2021-09-14  Xan López  <xan@igalia.com>

        [JSC] ASSERT failed in stress/for-in-tests.js (32bit)
        https://bugs.webkit.org/show_bug.cgi?id=229543

        Reviewed by Yusuke Suzuki.

        Since r280760 DFG::SpeculativeJIT::compileEnumeratorGetByVal uses
        too many registers for 32bit. Revert to the slow path as a
        temporary measure to avoid crashes, we'll try to reenable the
        optimizations later on (see bug #230189).

        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION): define a generic call
        operation for compileEnumeratorGetByVal.
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp: move the current version of
        compileEnumeratorGetByVal to 64bit, since it won't work on 32bit.
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compileEnumeratorGetByVal): call the generic call op always.
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compileEnumeratorGetByVal): use the previous version here.
        * runtime/CommonSlowPaths.cpp:
        (JSC::JSC_DEFINE_COMMON_SLOW_PATH): refactor a bit the slow path
        for enumeratorGetByVal so it can be called from DFG as a call
        operation.
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::opEnumeratorGetByVal):

2021-09-13  Xan López  <xan@igalia.com>

        [JSC][32bit] in-by-val fails inside for-in loop after delete
        https://bugs.webkit.org/show_bug.cgi?id=230150

        Reviewed by Carlos Garcia Campos.

        The order of payload and tag was reversed when constructing the
        base value for compileEnumeratorHasProperty.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileEnumeratorHasProperty):

2021-09-10  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Support running applications with ENABLE_STATIC_JSC=ON
        https://bugs.webkit.org/show_bug.cgi?id=230170

        Reviewed by Ross Kirsling.

        Updating loading code to not load libJavaScriptCore shared library
        if we are using a static version.

        * shell/playstation/Initializer.cpp:

2021-09-09  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Clean up current state of Temporal API
        https://bugs.webkit.org/show_bug.cgi?id=230130

        Reviewed by Yusuke Suzuki.

        This patch perfoms a variety of cleanup tasks following the implementation of Temporal.PlainTime.

          1. Do away with the alias Subdurations and refer to ISO8601::Duration directly.
             (But we can still say "subduration" when referring to a single ordered field, as in `largestSubduration`.)
          2. Represent ToTemporalDuration, ToTemporalDurationRecord, and ToLimitedTemporalDuration more directly in code,
             as TemporalDuration::{toTemporalDuration, fromDurationLike, toISO8601Duration}.
             (Note: The last of these doesn't take a disallowedFields parameter;
                    Temporal.Instant can do this after the fact, since no one else makes use of this functionality.)
          3. Extract intlOption<RoundingMode> into a helper function, `temporalRoundingMode`.
          4. Remove largestSubplainTime(), which was declared but not defined.
          5. Correct spelling of TemporalPlainTime::constrainTime().

        * runtime/TemporalDuration.cpp:
        (JSC::TemporalDuration::create):
        (JSC::TemporalDuration::TemporalDuration):
        (JSC::TemporalDuration::tryCreateIfValid):
        (JSC::TemporalDuration::fromDurationLike): Added.
        (JSC::TemporalDuration::toISO8601Duration): Added.
        (JSC::TemporalDuration::toTemporalDuration): Added.
        (JSC::TemporalDuration::from):
        (JSC::totalNanoseconds):
        (JSC::TemporalDuration::compare):
        (JSC::TemporalDuration::sign):
        (JSC::TemporalDuration::with const):
        (JSC::TemporalDuration::negated const):
        (JSC::TemporalDuration::abs const):
        (JSC::largestSubduration): Added.
        (JSC::TemporalDuration::balance):
        (JSC::TemporalDuration::add const):
        (JSC::TemporalDuration::subtract const):
        (JSC::TemporalDuration::round):
        (JSC::TemporalDuration::round const):
        (JSC::TemporalDuration::total const):
        (JSC::TemporalDuration::toString const):
        (JSC::TemporalDuration::toString):
        (JSC::TemporalDuration::fromNonDurationValue): Deleted.
        (JSC::TemporalDuration::toDuration): Deleted.
        (JSC::TemporalDuration::toDurationRecord): Deleted.
        (JSC::TemporalDuration::largestSubduration const): Deleted.
        * runtime/TemporalDuration.h:
        * runtime/TemporalDurationConstructor.cpp:
        * runtime/TemporalDurationPrototype.cpp:
        * runtime/TemporalObject.cpp:
        (JSC::temporalRoundingMode): Added.
        * runtime/TemporalObject.h:
        * runtime/TemporalPlainTime.cpp:
        (JSC::TemporalPlainTime::round const):
        (JSC::TemporalPlainTime::toString const):
        (JSC::constrainTime): Added.
        (JSC::regulateTime):
        (JSC::TemporalPlainTime::add const):
        (JSC::TemporalPlainTime::subtract const):
        (JSC::extractDifferenceOptions):
        (JSC::constraintTime): Deleted.
        (JSC::toLimitedTemporalDuration): Deleted.
        * runtime/TemporalPlainTime.h:

2021-09-09  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Intl.Locale weekendInfo should list all weekend days instead of range
        https://bugs.webkit.org/show_bug.cgi?id=230108

        Reviewed by Ross Kirsling.

        We cannot assume that weekend is contiguous. For example, Burnei's weekend is Friday and Sunday.
        This is raised in [1], and our conclusion in Sep-9 meeting is that we should have an array which
        includes all the weekend days. The change is merged in [2], and this patch changes our implementation
        accordingly.

        [1]: https://github.com/tc39/proposal-intl-locale-info/issues/25
        [2]: https://github.com/tc39/proposal-intl-locale-info/commit/afb1e269dd698476a2514129235cdad88af60e6f

        * runtime/IntlLocale.cpp:
        (JSC::IntlLocale::weekInfo):
        * runtime/IntlObjectInlines.h:
        (JSC::createArrayFromIntVector):

2021-09-09  Darin Adler  <darin@apple.com>

        Improve performance by using StringView, not "const StringView&"
        https://bugs.webkit.org/show_bug.cgi?id=229834

        Reviewed by Anders Carlsson.

        * parser/Lexer.h:
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::setFormatsFromPattern):
        * runtime/IntlDateTimeFormat.h:
        Use StringView, not const StringView&.

2021-09-09  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Optimize op_get_property_enumerator further
        https://bugs.webkit.org/show_bug.cgi?id=230086

        Reviewed by Saam Barati.

        1. This patch adds fast path of op_get_property_enumerator to LLInt and Baseline. Previously, we only had this fast path in DFG and FTL.
        2. From the profiled data, Speedometer2/React-Redux-TodoMVC has GetPropertyEnumerator(CellOrOther). However, DFG and FTL only optimized
           GetPropertyEnumerator(Cell). We add CellOrOther and Other cases: if the argument is Other, then we can constant fold it to the
           empty enumerator. If the argument is CellOrOther, we can check first, and return empty enumerator for Other case.
        3. This patch also cleans up StructureRareData lookup by introducing StructureType to JSType.

        ----------------------------------------------------------------------------------------------------------------------------------
        |               subtest                |     ms      |     ms      |  b / a   | pValue (significance using False Discovery Rate) |
        ----------------------------------------------------------------------------------------------------------------------------------
        | Elm-TodoMVC                          |117.388333   |117.680000   |1.002485  | 0.269607                                         |
        | VueJS-TodoMVC                        |24.918333    |24.651667    |0.989298  | 0.157665                                         |
        | EmberJS-TodoMVC                      |126.430000   |126.296667   |0.998945  | 0.673803                                         |
        | BackboneJS-TodoMVC                   |48.695000    |48.411667    |0.994181  | 0.019164                                         |
        | Preact-TodoMVC                       |17.268333    |17.511667    |1.014091  | 0.199775                                         |
        | AngularJS-TodoMVC                    |130.246667   |129.850000   |0.996954  | 0.261543                                         |
        | Vanilla-ES2015-TodoMVC               |63.626667    |63.611667    |0.999764  | 0.912112                                         |
        | Inferno-TodoMVC                      |63.881667    |63.600000    |0.995591  | 0.385440                                         |
        | Flight-TodoMVC                       |78.158333    |78.606667    |1.005736  | 0.284177                                         |
        | Angular2-TypeScript-TodoMVC          |39.448333    |39.411667    |0.999071  | 0.890825                                         |
        | VanillaJS-TodoMVC                    |50.858333    |51.130000    |1.005342  | 0.195409                                         |
        | jQuery-TodoMVC                       |225.318333   |226.256667   |1.004164  | 0.011190                                         |
        | EmberJS-Debug-TodoMVC                |340.150000   |338.450000   |0.995002  | 0.000063 (significant)                           |
        | React-TodoMVC                        |85.703333    |85.606667    |0.998872  | 0.549298                                         |
        | React-Redux-TodoMVC                  |141.985000   |140.418333   |0.988966  | 0.000000 (significant)                           |
        | Vanilla-ES2015-Babel-Webpack-TodoMVC |61.505000    |61.705000    |1.003252  | 0.079817                                         |
        ----------------------------------------------------------------------------------------------------------------------------------
        a mean = 260.98021
        b mean = 261.16020
        pValue = 0.4985041089
        (Bigger means are better.)
        1.001 times better
        Results ARE NOT significant

        * bytecode/SpeculatedType.cpp:
        (JSC::dumpSpeculation):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetPropertyEnumerator):
        (JSC::DFG::SpeculativeJIT::compileObjectKeysOrObjectGetOwnPropertyNames):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileObjectKeysOrObjectGetOwnPropertyNames):
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::branchIfStructure):
        (JSC::AssemblyHelpers::branchIfNotStructure):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_property_enumerator):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_get_property_enumerator):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/BrandedStructure.cpp:
        (JSC::BrandedStructure::create):
        * runtime/JSType.cpp:
        (WTF::printInternal):
        * runtime/JSType.h:
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::create):
        * runtime/Structure.h:
        (JSC::Structure::isRareData):
        (JSC::Structure::isRareData const): Deleted.
        * runtime/StructureInlines.h:
        (JSC::Structure::create):
        (JSC::Structure::createStructure):
        * runtime/StructureRareData.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):

2021-09-09  Patrick Angle  <pangle@apple.com>

        run-webkit-archive crashes with dyld error
        https://bugs.webkit.org/show_bug.cgi?id=228060

        Reviewed by Alex Christensen.

        Add a compatibility symbol for the old `WTF::Optional` version of `BackendDispatcher::reportProtocolError` in
        versions of Safari shipping with macOS Big Sur and earlier. This has the side effect of not surfacing protocol
        errors and instead silently discarding them when crossing this API boundary. Newer versions of macOS ship using
        the newer symbol and are therefor not affected and will continue to surface protocol errors to the frontend.

        * runtime/SymbolStubsForSafariCompatibility.mm:
        (Inspector::BackendDispatcher::reportProtocolError):

2021-09-09  Justin Michaud  <justin_michaud@apple.com>

        Differential testing: incorrect constant propagation around Uint8ClampedArray
        https://bugs.webkit.org/show_bug.cgi?id=229869

        We casted int52 values to int32 before clamping, which caused any value with the 32nd bit
        set to be interpreted as negative. The fix is to check the full-size value when deciding to clamp.

        Reviewed by Saam Barati.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):

2021-09-09  Robin Morisset  <rmorisset@apple.com>

        Optimize compareStrictEq when neither side is a double and at least one is not a BigInt
        https://bugs.webkit.org/show_bug.cgi?id=226755
        <rdar://problem/79321542>

        Reviewed by Yusuke Suzuki.

        This is a very similar patch to https://bugs.webkit.org/show_bug.cgi?id=226676.
        The difference is that here we allow Strings on both side of the comparison, so we must add code to handle equality among strings.

        Like for that other patch, the optimization is disabled for BigInt32.
        Enabling it in that case would either need modifying the speculation (from banning HeapBigInt to banning all BigInts), or ensuring that we can never have a HeapBigInt so small it compares equal to a BigInt32.

        I only implemented this optimization on 64-bits: it is just painful to write code that handles registers at such a low-level without a 32-bit machine to test things locally.
        If anyone wants to make this optimization work on 32-bit, I don't foretell any major difficulty.

        Finally, like quite a few other useKinds already, this case does not make the CompareStrictEq merge with an adjacent Branch.
        The reason is simply that this patch relies on compileStringEquality, which currently does not support that feature.
        I intend to fix this (for all useKinds at once) in a separate patch.

        Effect on microbenchmarks:
        poly-stricteq-not-double                  46.8000+-0.4110     ^     23.5872+-0.3061        ^ definitely 1.9841x faster
        poly-stricteq-not-double-nor-string       16.6880+-0.2317           16.3627+-0.3729          might be 1.0199x faster
        poly-stricteq                             49.2175+-0.6047           48.9532+-0.6758

        I looked at how many cases of Untyped/Untyped compareStrictEq have been fixed by this patch and two other recent patches.
        On JetStream2:
        - https://bugs.webkit.org/show_bug.cgi?id=226621: 731 instances
        - https://bugs.webkit.org/show_bug.cgi?id=226676: 944 instances
        - This patch: only 26 instances
        This leaves 20 instances of Untyped/Untyped.

        On Speedometer2.0:
        - https://bugs.webkit.org/show_bug.cgi?id=226621: 1587 instances
        - https://bugs.webkit.org/show_bug.cgi?id=226676: 2784 instances
        - This patch: 891 instances
        This leaves 75 instances of Untyped/Untyped.

        * bytecode/SpeculatedType.h:
        (JSC::isNeitherDoubleNorHeapBigIntSpeculation):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupCompareStrictEqAndSameValue):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateNeitherDoubleNorHeapBigInt):
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::SafeToExecuteEdge::operator()):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileStrictEq):
        (JSC::DFG::SpeculativeJIT::emitBitwiseJSValueEquality):
        (JSC::DFG::SpeculativeJIT::emitBranchOnBitwiseJSValueEquality):
        (JSC::DFG::SpeculativeJIT::compileNotDoubleNeitherDoubleNorHeapBigIntNorStringStrictEquality):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleNotDoubleNeitherDoubleNorHeapBigIntNorStringStrictEquality):
        (JSC::DFG::SpeculativeJIT::speculateNeitherDoubleNorHeapBigInt):
        (JSC::DFG::SpeculativeJIT::speculateNeitherDoubleNorHeapBigIntNorString):
        (JSC::DFG::SpeculativeJIT::speculate):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compileNeitherDoubleNorHeapBigIntToNotDoubleStrictEquality):
        * dfg/DFGUseKind.cpp:
        (WTF::printInternal):
        * dfg/DFGUseKind.h:
        (JSC::DFG::typeFilterFor):
        (JSC::DFG::checkMayCrashIfInputIsEmpty):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):

2021-09-07  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, add files to xcodeproj
        https://bugs.webkit.org/show_bug.cgi?id=229892

        * JavaScriptCore.xcodeproj/project.pbxproj:

2021-09-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement Temporal.PlainTime
        https://bugs.webkit.org/show_bug.cgi?id=229892

        Reviewed by Darin Adler.

        This patch implements Temporal.PlainTime[1]. This is time representation which is not associated to
        calendars and timezones. This is tuple of hour, minute, second, millisecond, microsecond, and nanosecond.

        1. We add full-fledged ISO8601 DateTime / Time parser, so that Temporal.PlainTime.from can extract
           time as specified.

        2. ISO8601::PlainTime is used for already-validated PlainTime data. When performing arithmetics, we first
           do that in ISO8601::Duration, and then we validate and convert it to PlainTime.

        We also found several spec issues, and reported in [2,3,4].

        [1]: https://tc39.es/proposal-temporal/#sec-temporal-plaintime-objects
        [2]: https://github.com/tc39/proposal-temporal/issues/1803
        [3]: https://github.com/tc39/proposal-temporal/issues/1804
        [4]: https://github.com/tc39/proposal-temporal/issues/1805

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * Sources.txt:
        * runtime/CommonIdentifiers.h:
        * runtime/ISO8601.cpp:
        (JSC::ISO8601::parseTimeZoneName):
        (JSC::ISO8601::parseDecimalInt32):
        (JSC::ISO8601::parseDuration):
        (JSC::ISO8601::parseTimeSpec):
        (JSC::ISO8601::parseTimeZoneNumericUTCOffset):
        (JSC::ISO8601::parseTimeZoneBracketedAnnotation):
        (JSC::ISO8601::canBeTimeZone):
        (JSC::ISO8601::parseTimeZone):
        (JSC::ISO8601::parseTime):
        (JSC::ISO8601::daysInMonth):
        (JSC::ISO8601::parseDate):
        (JSC::ISO8601::parseDateTime):
        (JSC::ISO8601::formatTimeZoneOffsetString):
        (JSC::ISO8601::temporalTimeToString):
        (JSC::ISO8601::isValidDuration):
        * runtime/ISO8601.h:
        (JSC::ISO8601::Duration::Duration):
        (JSC::ISO8601::Duration::operator[]):
        (JSC::ISO8601::Duration::operator[] const):
        (JSC::ISO8601::Duration::begin const):
        (JSC::ISO8601::Duration::end const):
        (JSC::ISO8601::Duration::clear):
        (JSC::ISO8601::Duration::operator- const):
        (JSC::ISO8601::PlainTime::PlainTime):
        (JSC::ISO8601::PlainTime::operator==):
        (JSC::ISO8601::PlainDate::PlainDate):
        (JSC::ISO8601::PlainDate::year const):
        (JSC::ISO8601::PlainDate::month const):
        (JSC::ISO8601::PlainDate::day const):
        * runtime/IntlObject.cpp:
        (JSC::utcTimeZoneIDSlow):
        * runtime/IntlObject.h:
        (JSC::utcTimeZoneID):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildrenImpl):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::plainTimeStructure):
        * runtime/TemporalCalendarConstructor.cpp:
        (JSC::TemporalCalendarConstructor::finishCreation):
        * runtime/TemporalDuration.cpp:
        (JSC::TemporalDuration::tryCreateIfValid):
        (JSC::TemporalDuration::fromNonDurationValue):
        (JSC::TemporalDuration::toDuration):
        (JSC::TemporalDuration::toDurationRecord):
        (JSC::TemporalDuration::toString const):
        (JSC::TemporalDuration::toString):
        (JSC::isValidDuration): Deleted.
        (JSC::TemporalDuration::fromObject): Deleted.
        * runtime/TemporalDuration.h:
        * runtime/TemporalNow.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/TemporalObject.cpp:
        (JSC::createPlainTimeConstructor):
        (JSC::secondsStringPrecision):
        (JSC::toTemporalOverflow):
        * runtime/TemporalObject.h:
        * runtime/TemporalPlainTime.cpp: Added.
        (JSC::TemporalPlainTime::create):
        (JSC::TemporalPlainTime::createStructure):
        (JSC::TemporalPlainTime::TemporalPlainTime):
        (JSC::TemporalPlainTime::finishCreation):
        (JSC::TemporalPlainTime::visitChildrenImpl):
        (JSC::toPlainTime):
        (JSC::TemporalPlainTime::tryCreateIfValid):
        (JSC::nonNegativeModulo):
        (JSC::balanceTime):
        (JSC::roundTime):
        (JSC::TemporalPlainTime::round const):
        (JSC::TemporalPlainTime::toString const):
        (JSC::propertyName):
        (JSC::toTemporalTimeRecord):
        (JSC::toPartialTime):
        (JSC::constraintTime):
        (JSC::regulateTime):
        (JSC::toTemporalCalendarWithISODefault):
        (JSC::getTemporalCalendarWithISODefault):
        (JSC::TemporalPlainTime::from):
        (JSC::TemporalPlainTime::compare):
        (JSC::toLimitedTemporalDuration):
        (JSC::addTime):
        (JSC::TemporalPlainTime::add const):
        (JSC::TemporalPlainTime::subtract const):
        (JSC::TemporalPlainTime::with const):
        (JSC::differenceTime):
        (JSC::extractDifferenceOptions):
        (JSC::TemporalPlainTime::until const):
        (JSC::TemporalPlainTime::since const):
        * runtime/TemporalPlainTime.h: Added.
        * runtime/TemporalPlainTimeConstructor.cpp: Added.
        (JSC::TemporalPlainTimeConstructor::create):
        (JSC::TemporalPlainTimeConstructor::createStructure):
        (JSC::TemporalPlainTimeConstructor::TemporalPlainTimeConstructor):
        (JSC::TemporalPlainTimeConstructor::finishCreation):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/TemporalPlainTimeConstructor.h: Copied from Source/JavaScriptCore/runtime/TemporalTimeZone.h.
        * runtime/TemporalPlainTimePrototype.cpp: Added.
        (JSC::TemporalPlainTimePrototype::create):
        (JSC::TemporalPlainTimePrototype::createStructure):
        (JSC::TemporalPlainTimePrototype::TemporalPlainTimePrototype):
        (JSC::TemporalPlainTimePrototype::finishCreation):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSC_DEFINE_CUSTOM_GETTER):
        * runtime/TemporalPlainTimePrototype.h: Copied from Source/JavaScriptCore/runtime/TemporalTimeZone.h.
        * runtime/TemporalTimeZone.cpp:
        (JSC::TemporalTimeZone::from):
        (JSC::TemporalTimeZone::idForTimeZoneName): Deleted.
        * runtime/TemporalTimeZone.h:
        * runtime/TemporalTimeZoneConstructor.cpp:
        (JSC::TemporalTimeZoneConstructor::finishCreation):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/VM.cpp:
        * runtime/VM.h:

2021-09-07  Yusuke Suzuki  <ysuzuki@apple.com>

        Math.hypot checks for infinite values prematurely
        https://bugs.webkit.org/show_bug.cgi?id=229843

        Reviewed by Ross Kirsling.

        According to the spec[1], we should throw an error about non finite argument after coercing all arguments to doubles.

        [1]: https://tc39.es/ecma262/#sec-math.hypot

        * runtime/MathObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-09-07  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, early September 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=229983

        Unreviewed non-unified build fixes.

        * runtime/TemporalTimeZone.cpp: Add missing JSObjectInlines.h header.

2021-09-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Make EnumeratorNextUpdateIndexAndMode clobberizing rule precise
        https://bugs.webkit.org/show_bug.cgi?id=229898
        rdar://82714439

        Reviewed by Saam Barati.

        Clobberizing rule and AI does not match for EnumeratorNextUpdateIndexAndMode node.
        We fix both cases: isSaneChain is not related to this node. So we should use isInBounds
        as we are doing for HasIndexedProperty node.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):

2021-09-03  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed, non-unified JSC build fix following 241222@main.

        * b3/B3ReduceLoopStrength.h:
        * jit/JITOperations.h:
        * wasm/WasmOperations.h:

2021-09-03  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Yarr::ByteTerm sometimes leaves fields uninitialized
        https://bugs.webkit.org/show_bug.cgi?id=229891

        Reviewed by Yusuke Suzuki.

        * yarr/YarrInterpreter.h:
        (JSC::Yarr::ByteTerm::ByteTerm):
        Default initialize `frameLocation` and `inputPosition`.
        (Also, use initializer list where possible.)

2021-09-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement Temporal.TimeZone
        https://bugs.webkit.org/show_bug.cgi?id=229703

        Reviewed by Ross Kirsling.

        This patch implements Temporal.TimeZone. While this patch does not implement features which requires Temporal.Instant,
        we implement the core of Temporal.TimeZone, holding UTC offset or IANA TimeZone ID. This patch implements parsing TimeZoneNumericUTCOffset
        to populate TimeZone from that format.

        Since Temporal.TimeZone is implemented, we also support `Temporal.Now.timeZone()`, which returns current system TimeZone.

        We also fix Intl enumeration not including "UTC". Since it is included in IANA TimeZones, we should include that.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * runtime/ISO8601.cpp:
        (JSC::ISO8601::parseDecimalInt32):
        (JSC::ISO8601::handleFraction):
        (JSC::ISO8601::parseTimeZoneNumericUTCOffset):
        (JSC::ISO8601::formatTimeZoneOffsetString):
        * runtime/ISO8601.h:
        * runtime/IntlObject.cpp:
        (JSC::isValidTimeZoneNameFromICUTimeZone):
        (JSC::canonicalizeTimeZoneNameFromICUTimeZone):
        (JSC::intlAvailableTimeZones):
        (JSC::availableTimeZones):
        * runtime/IntlObject.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildrenImpl):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::timeZoneStructure):
        * runtime/TemporalNow.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/TemporalNow.h:
        * runtime/TemporalObject.cpp:
        (JSC::createTimeZoneConstructor):
        * runtime/TemporalTimeZone.cpp: Added.
        (JSC::TemporalTimeZone::createFromID):
        (JSC::TemporalTimeZone::createFromUTCOffset):
        (JSC::TemporalTimeZone::createStructure):
        (JSC::TemporalTimeZone::TemporalTimeZone):
        (JSC::TemporalTimeZone::idForTimeZoneName):
        (JSC::parseTemporalTimeZoneString):
        (JSC::TemporalTimeZone::from):
        * runtime/TemporalTimeZone.h: Copied from Source/JavaScriptCore/runtime/ISO8601.h.
        * runtime/TemporalTimeZoneConstructor.cpp: Added.
        (JSC::TemporalTimeZoneConstructor::create):
        (JSC::TemporalTimeZoneConstructor::createStructure):
        (JSC::TemporalTimeZoneConstructor::TemporalTimeZoneConstructor):
        (JSC::TemporalTimeZoneConstructor::finishCreation):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/TemporalTimeZoneConstructor.h: Copied from Source/JavaScriptCore/runtime/ISO8601.h.
        * runtime/TemporalTimeZonePrototype.cpp: Added.
        (JSC::TemporalTimeZonePrototype::create):
        (JSC::TemporalTimeZonePrototype::createStructure):
        (JSC::TemporalTimeZonePrototype::TemporalTimeZonePrototype):
        (JSC::TemporalTimeZonePrototype::finishCreation):
        (JSC::JSC_DEFINE_CUSTOM_GETTER):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/TemporalTimeZonePrototype.h: Copied from Source/JavaScriptCore/runtime/ISO8601.h.
        * runtime/VM.cpp:
        * runtime/VM.h:

2021-09-02  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Validate JSPropertyNameEnumerator via watchpoints
        https://bugs.webkit.org/show_bug.cgi?id=229846

        Reviewed by Keith Miller.

        Looked into Elm-TodoMVC sampling profiler data and found that op_get_property_enumerator is taking enough amount of time.
        And Instruments say validating JSPropertyNameEnumerator via traversing StructureChain is costly.
        We are caching JSPropertyNameEnumerator only when we meet the condition: objects in prototype chain can ensure identity of
        property names if structure is not changed. So we can use watchpoint based approach to invalidate JSPropertyNameEnumerator.

        This patch injects structure transition watchpoints if possible. And when watchpoint is fired, we invalidate JSPropertyNameEnumerator
        cached in StructureRareData, as if we are ensuring prototype chain condition for the other property accesses.

        This offers 0.6% improvement in Speedometer2.

        ----------------------------------------------------------------------------------------------------------------------------------
        |               subtest                |     ms      |     ms      |  b / a   | pValue (significance using False Discovery Rate) |
        ----------------------------------------------------------------------------------------------------------------------------------
        | Elm-TodoMVC                          |121.971667   |117.725000   |0.965183  | 0.000000 (significant)                           |
        | VueJS-TodoMVC                        |26.246667    |26.035000    |0.991935  | 0.360614                                         |
        | EmberJS-TodoMVC                      |126.196667   |126.653333   |1.003619  | 0.103138                                         |
        | BackboneJS-TodoMVC                   |48.976667    |48.881667    |0.998060  | 0.474106                                         |
        | Preact-TodoMVC                       |20.118333    |20.115000    |0.999834  | 0.989038                                         |
        | AngularJS-TodoMVC                    |131.545000   |130.706667   |0.993627  | 0.015344 (significant)                           |
        | Vanilla-ES2015-TodoMVC               |63.725000    |63.773333    |1.000758  | 0.706560                                         |
        | Inferno-TodoMVC                      |64.231667    |62.653333    |0.975427  | 0.000000 (significant)                           |
        | Flight-TodoMVC                       |77.223333    |77.690000    |1.006043  | 0.268309                                         |
        | Angular2-TypeScript-TodoMVC          |39.686667    |39.500000    |0.995296  | 0.499678                                         |
        | VanillaJS-TodoMVC                    |52.321667    |51.973333    |0.993342  | 0.077777                                         |
        | jQuery-TodoMVC                       |224.908333   |225.761667   |1.003794  | 0.022136                                         |
        | EmberJS-Debug-TodoMVC                |339.858333   |339.886667   |1.000083  | 0.950320                                         |
        | React-TodoMVC                        |86.545000    |86.070000    |0.994512  | 0.001518 (significant)                           |
        | React-Redux-TodoMVC                  |146.010000   |142.855000   |0.978392  | 0.000000 (significant)                           |
        | Vanilla-ES2015-Babel-Webpack-TodoMVC |61.411667    |61.456667    |1.000733  | 0.631499                                         |
        ----------------------------------------------------------------------------------------------------------------------------------
        a mean = 255.96543
        b mean = 257.53379
        pValue = 0.0000034394
        (Bigger means are better.)
        1.006 times better
        Results ARE significant

        * bytecode/Watchpoint.cpp:
        * bytecode/Watchpoint.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetPropertyEnumerator):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * runtime/JSPropertyNameEnumerator.h:
        (JSC::propertyNameEnumerator):
        * runtime/StructureRareData.h:
        * runtime/StructureRareDataInlines.h:
        (JSC::StructureRareData::setCachedPropertyNameEnumerator):
        (JSC::StructureChainInvalidationWatchpoint::install):
        (JSC::StructureChainInvalidationWatchpoint::fireInternal):
        (JSC::StructureRareData::tryCachePropertyNameEnumeratorViaWatchpoint):
        (JSC::StructureRareData::invalidateWatchpointBasedValidation):
        * tools/JSDollarVM.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSDollarVM::finishCreation):

2021-09-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Fix WebKitAdditions directory traversal in offlineasm part 2
        https://bugs.webkit.org/show_bug.cgi?id=229853

        Reviewed by Mark Lam.

        When DEPLOYMENT_LOCATION is YES, WEBKITADDITIONS_HEADERS_FOLDER_PATH is /usr/local/include/WebKitAdditions.
        However, since Xcode implicitly changes it to ${SDKROOT}/usr/local/include/WebKitAdditions, we need to
        pass the path with ${SDKROOT} if this path is used by non-Xcode.

        In this patch, we replace --use-deployment-location with --webkit-additions-path=path and passing WebKitAdditions
        path directly from Xcode. We define WK_WEBKITADDITIONS_INSTALL_PATH and WK_WEBKITADDITIONS_HEADERS_FOLDER_PATH in
        JavaScriptCore/Configurations/Base.xcconfig to populate this variable and pass WK_WEBKITADDITIONS_HEADERS_FOLDER_PATH
        to the scripts.

        We also fix offlineasm's path concatenation. It was using +, but this does not work if directory doesn't end with '/'.
        We should use File.join when concatenating file paths.

        * Configurations/Base.xcconfig:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * offlineasm/asm.rb:
        * offlineasm/generate_offset_extractor.rb:
        * offlineasm/generate_settings_extractor.rb:
        * offlineasm/parser.rb:

2021-09-03  Michael Catanzaro  <mcatanzaro@gnome.org>

        Silence more -Wreturn-type warnings
        https://bugs.webkit.org/show_bug.cgi?id=229858

        Unreviewed.

        * runtime/TemporalDuration.cpp:
        (JSC::propertyName):
        * runtime/TemporalObject.cpp:
        (JSC::roundNumberToIncrement):

2021-09-02  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Fix WebKitAdditions directory traversal in offlineasm
        https://bugs.webkit.org/show_bug.cgi?id=229841

        Reviewed by Mark Lam.

        When DEPLOYMENT_LOCATION is YES, WebKitAdditions directory becomes /usr/local/include/WebKitAdditions.
        This patch adds --use-deployment-location option to generate_offset_extractor.rb, generate_settings_extractor.rb,
        and asm.rb. And they pass it to parser to change the include directory.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * offlineasm/asm.rb:
        * offlineasm/generate_offset_extractor.rb:
        * offlineasm/generate_settings_extractor.rb:
        * offlineasm/parser.rb:

2021-09-02  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] ScriptExecutable::newCodeBlockFor should handle exceptions more predictably
        https://bugs.webkit.org/show_bug.cgi?id=229787

        Reviewed by Mark Lam.

        ScriptExecutable::newCodeBlockFor has four codepaths -- one for each of EvalExecutable, ProgramExecutable,
        ModuleProgramExecutable, and FunctionExecutable. These all end up in bool CodeBlock::finishCreation(...),
        but the first three overwrite the current exception with an OOM error while the last does not.
        Furthermore, newCodeBlockFor handles exceptions via an out param, which is then returned by its single caller,
        prepareForExecutionImpl.

        Altogether, this results in some questionable checking of the returned exception against throwScope.exception()
        at prepareForExecution's callsites in Interpreter and elsewhere.

        This patch aims to make this exception handling clearer and more consistent by:
        1. not overwriting an existing exception with an OOM error
        2. doing away with the out param in favor of RETURN_IF_EXCEPTION

        * bytecode/CodeBlock.h:
        (JSC::ScriptExecutable::prepareForExecution):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeProgram):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::prepareForRepeatCall):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeModuleProgram):
        * interpreter/InterpreterInlines.h:
        (JSC::Interpreter::execute):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        (JSC::virtualForWithFunction):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::setUpCall):
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::newCodeBlockFor):
        (JSC::ScriptExecutable::prepareForExecutionImpl):
        * runtime/ScriptExecutable.h:

2021-09-02  Mikhail R. Gadelha  <mikhail@igalia.com>

        Fix IndexedDoubleStore InlineAccess for 32 bits
        https://bugs.webkit.org/show_bug.cgi?id=229772

        Reviewed by Caio Araujo Neponoceno de Lima.

        In IndexedDoubleStore inline access, the path if the value is NaN
        is only being handled in 64 bits, thus introducing some wrong 
        results in 32 bits. This patch fixes:

        stress/double-add-sub-mul-can-produce-nan.js
        stress/pow-stable-results.js
        stress/math-pow-stable-results.js

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateWithGuard):

2021-09-02  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Fix invalid exception checks in Temporal classes
        https://bugs.webkit.org/show_bug.cgi?id=229793

        Reviewed by Yusuke Suzuki.

        * runtime/TemporalCalendarPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/TemporalDuration.cpp:
        (JSC::TemporalDuration::fromObject):
        (JSC::TemporalDuration::toDuration):
        (JSC::TemporalDuration::with const):
        * runtime/TemporalDurationPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-09-02  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, annotate executeJSCJITProbe with REFERENCED_FROM_ASM WTF_INTERNAL

        * assembler/ProbeContext.h:

2021-09-02  Mark Lam  <mark.lam@apple.com>

        Add more support for JIT operation validation testing.
        https://bugs.webkit.org/show_bug.cgi?id=229534
        rdar://81526335

        Reviewed by Saam Barati.

        1. Added a JITOperationValidation.h to tidy up the code for supporting JIT
           operation validation.

        2. Introduce a JITOperationAnnotation struct to record JIT operation function
           pointers, with an extra pointer field for a validation test function.

        3. Changed JSC_ANNOTATE_JIT_OPERATION to capture a JITOperationAnnotation struct
           instead of just a single operation pointer.

        4. Converted the static addPointers() function in JITOperationList.cpp into a
           member function of JITOperationList.  This allows for the code to be more
           terse, as well as enables the use of an inverse map mechanism on debug builds
           only.

        5. Added more macros to help differentiate between different types of JIT
           operation functions.

        6. Made all JIT operation functions use extern "C" linkage to make it possible to
           write validation tests in assembly so that we can run them on a release build
           as well without taking too much time.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/JITOperationList.cpp:
        (JSC::JITOperationList::addInverseMap):
        (JSC::JITOperationList::addPointers):
        (JSC::JITOperationList::populatePointersInJavaScriptCore):
        (JSC::JITOperationList::populatePointersInJavaScriptCoreForLLInt):
        (JSC::JITOperationList::populatePointersInEmbedder):
        (JSC::addPointers): Deleted.
        * assembler/JITOperationList.h:
        (JSC::JITOperationList::map const):
        (JSC::JITOperationList::inverseMap const):
        (JSC::JITOperationList::assertIsJITOperation):
        (JSC::JITOperationList::assertIsJITOperationWithvalidation):
        * assembler/JITOperationValidation.h: Added.
        * assembler/MacroAssemblerARM64.cpp:
        * assembler/MacroAssemblerARM64.h:
        * assembler/MacroAssemblerARM64E.h:
        * assembler/MacroAssemblerARMv7.cpp:
        * assembler/MacroAssemblerMIPS.cpp:
        * assembler/MacroAssemblerX86Common.cpp:
        * b3/testb3.h:
        * b3/testb3_1.cpp:
        * b3/testb3_5.cpp:
        * b3/testb3_7.cpp:
        * dfg/DFGOSRExit.h:
        * ftl/FTLLowerDFGToB3.cpp:
        * jit/ExecutableAllocator.cpp:
        (JSC::initializeJITPageReservation):
        * jit/Repatch.cpp:
        (JSC::retagOperationWithValidation):
        (JSC::retagCallTargetWithValidation):
        (JSC::readPutICCallTarget):
        * jit/ThunkGenerators.cpp:
        * jsc.cpp:
        * llint/LLIntData.cpp:
        * llint/LLIntThunks.cpp:
        * runtime/CommonSlowPaths.h:
        * runtime/JSCPtrTag.h:
        (JSC::tagJSCCodePtrImpl):
        (JSC::untagJSCCodePtrImpl):
        (JSC::isTaggedJSCCodePtrImpl):
        * runtime/MathCommon.h:
        * runtime/Options.cpp:
        (JSC::canUseJITCage):
        * tools/JSDollarVM.cpp:
        * yarr/YarrJIT.cpp:

2021-09-01  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed exception scope verification fix for r241171.

        * runtime/TemporalDurationConstructor.cpp:
        Add missing RELEASE_AND_RETURN.

2021-09-01  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix the Xcode build after r281838

        Unreviewed.

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:

2021-09-01  Zan Dobersek  <zdobersek@igalia.com>

        REGRESSION(r279256): Crash in JSC::FTL::saveAllRegisters
        https://bugs.webkit.org/show_bug.cgi?id=229235
        <rdar://problem/82337517>

        Reviewed by Mark Lam.

        Avoid out-of-bounds access into RegisterSet's underlying Bitmap that
        occurs in FTL::saveAllRegisters() and FTL::restoreAllRegisters(). Helper
        Regs::nextRegister() and Regs::nextFPRegister() methods can increase the
        register ID values beyond the valid values, at which point there's a
        possibility of misuse if these register ID values are used to index into
        the Bitmap.

        To avoid this, iterating over RegisterID and FPRegisterID ranges is
        simplified yet kept efficient, and access into the RegisterSet is now
        only done if the register ID values are valid.

        This enables removing Regs::nextFPRegister(). Regs::nextRegister() is
        still used but is not adjusted to also use a for-loop to iterate across
        the valid RegisterID values, and only for those values the access into
        the RegisterSet is possible.

        * ftl/FTLSaveRestore.cpp:
        (JSC::FTL::saveAllRegisters):
        (JSC::FTL::restoreAllRegisters):

2021-08-31  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Implement Temporal.Duration
        https://bugs.webkit.org/show_bug.cgi?id=228532

        Reviewed by Yusuke Suzuki.

        This patch implements the Duration class for the upcoming Temporal API (currently at stage 3 in TC39).
        Spec: https://tc39.es/proposal-temporal/#sec-temporal-duration-objects
        Docs: https://tc39.es/proposal-temporal/docs/duration.html

        A Duration is ultimately an array of doubles (years, months, weeks, days, hours, minutes, seconds, ms, μs, ns)
        which can be converted to and from an ISO string representation (e.g. "-P1Y2M3W4DT5H6M7.123456789S")
        and which supports various calculations.

        The spec is still in flux and certain issues were identified in the course of preparing this patch.
        This code aims to be "as correct as possible" for the moment; small corrections are expected in the near future.

        * CMakeLists.txt:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * runtime/CommonIdentifiers.h:
        * runtime/ISO8601.cpp: Added.
        * runtime/ISO8601.h: Added.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildrenImpl):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::durationStructure):
        * runtime/TemporalDuration.cpp: Added.
        * runtime/TemporalDuration.h: Added.
        * runtime/TemporalDurationConstructor.cpp: Added.
        * runtime/TemporalDurationConstructor.h: Added.
        * runtime/TemporalDurationPrototype.cpp: Added.
        * runtime/TemporalDurationPrototype.h: Added.
        * runtime/TemporalObject.cpp:
        (JSC::createDurationConstructor):
        (JSC::singularUnit):
        (JSC::temporalUnitType):
        (JSC::temporalLargestUnit):
        (JSC::temporalSmallestUnit):
        (JSC::temporalFractionalSecondDigits):
        (JSC::secondsStringPrecision):
        (JSC::maximumRoundingIncrement):
        (JSC::temporalRoundingIncrement):
        (JSC::roundNumberToIncrement):
        * runtime/TemporalObject.h:
        * runtime/VM.cpp:
        * runtime/VM.h:

2021-08-31  Lauro Moura  <lmoura@igalia.com>

        Non-unified build partial fixes, late late August 2021
        https://bugs.webkit.org/show_bug.cgi?id=229741

        Unreviewed non-unified build fixes.

        * bytecode/PutByStatus.cpp: Add missing header.
        * bytecode/PutByVariant.h: Ditto.
        * runtime/TemporalCalendar.cpp: Ditto.
        * runtime/TemporalCalendarPrototype.cpp: Ditto.

2021-08-31  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Enable Object.hasOwn
        https://bugs.webkit.org/show_bug.cgi?id=229730

        Reviewed by Saam Barati.

        Enable Object.hasOwn implementation. And cleaning up feature flag list.

        * runtime/OptionsList.h:

2021-08-31  Saam Barati  <sbarati@apple.com>

        Baseline JIT's in_by_val and emitHasPrivate should load the property before branching on if the base is a cell
        https://bugs.webkit.org/show_bug.cgi?id=229725

        Reviewed by Keith Miller.

        If the base isn't a cell, we're calling the slow path with a random value
        in the property. This works, because the slow paths first branch on if
        the base is a cell or not, and throw an exception. But we fix this for our
        own sanity, since it's never a good idea to go to a slow path with a
        JSValue argument containing unknown bits.

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_in_by_val):
        (JSC::JIT::emitHasPrivate):

2021-08-31  Aditi Singh  <asingh@igalia.com>

        Implement Object.hasOwn()
        https://bugs.webkit.org/show_bug.cgi?id=226291

        Reviewed by Alexey Shvayka.
        
        This patch implements Object.hasOwn() method which is a stage 3 proposal. The method is disabled by default and can be enabled using the feature flag.
        The proposal details can be found here: https://github.com/tc39/proposal-accessible-object-hasownproperty.
        The patch also refines objectPrototypeHasOwnProperty() to accept JSObject* base rather than JSValue.

        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * runtime/CommonIdentifiers.h:
        * runtime/CommonSlowPaths.cpp:
        (JSC::JSC_DEFINE_COMMON_SLOW_PATH):
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::finishCreation):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectPrototypeHasOwnProperty):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/ObjectPrototype.h:
        * runtime/OptionsList.h:

2021-08-26  Darin Adler  <darin@apple.com>

        Cut down on use of CFGetTypeID, using dynamic_cf_cast instead; related streamlining
        https://bugs.webkit.org/show_bug.cgi?id=229414

        Reviewed by Tim Horton.

        * inspector/remote/cocoa/RemoteInspectorXPCConnection.mm:
        (Inspector::RemoteInspectorXPCConnection::deserializeMessage): Use
        dynamic_cf_cast to check type instead of CFGetTypeID. Also do the
        check at runtime rather than asserting. Not really sufficient to
        assert correct type for something that comes over an XPC connection.

2021-08-30  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Host functions and custom getters should be lowerCamelCase
        https://bugs.webkit.org/show_bug.cgi?id=229695

        Reviewed by Yusuke Suzuki.

        For some reason, the host functions and custom getters for Intl (and JSONObject) were written in UpperCamelCase.

        * runtime/IntlCollatorConstructor.cpp:
        * runtime/IntlCollatorPrototype.cpp:
        * runtime/IntlDateTimeFormatConstructor.cpp:
        * runtime/IntlDateTimeFormatPrototype.cpp:
        * runtime/IntlDisplayNamesConstructor.cpp:
        * runtime/IntlDisplayNamesPrototype.cpp:
        * runtime/IntlListFormatConstructor.cpp:
        * runtime/IntlListFormatPrototype.cpp:
        * runtime/IntlLocalePrototype.cpp:
        * runtime/IntlNumberFormatConstructor.cpp:
        * runtime/IntlNumberFormatPrototype.cpp:
        * runtime/IntlPluralRulesConstructor.cpp:
        * runtime/IntlPluralRulesPrototype.cpp:
        * runtime/IntlRelativeTimeFormatConstructor.cpp:
        * runtime/IntlRelativeTimeFormatPrototype.cpp:
        * runtime/IntlSegmentIteratorPrototype.cpp:
        * runtime/IntlSegmenterConstructor.cpp:
        * runtime/IntlSegmenterPrototype.cpp:
        * runtime/IntlSegmentsPrototype.cpp:
        * runtime/JSONObject.cpp:

2021-08-30  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC][Intl] Errors for .call({}) are too verbose
        https://bugs.webkit.org/show_bug.cgi?id=229694

        Reviewed by Yusuke Suzuki.

        * runtime/IntlCollatorPrototype.cpp:
        * runtime/IntlDateTimeFormatPrototype.cpp:
        * runtime/IntlDisplayNamesPrototype.cpp:
        * runtime/IntlListFormatPrototype.cpp:
        * runtime/IntlLocalePrototype.cpp:
        * runtime/IntlNumberFormatPrototype.cpp:
        * runtime/IntlPluralRulesPrototype.cpp:
        * runtime/IntlRelativeTimeFormatPrototype.cpp:
        * runtime/IntlSegmentIteratorPrototype.cpp:
        * runtime/IntlSegmenterPrototype.cpp:
        * runtime/IntlSegmentsPrototype.cpp:

2021-08-30  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement Temporal.Calendar
        https://bugs.webkit.org/show_bug.cgi?id=229651

        Reviewed by Ross Kirsling.

        This patch implements Temporal.Calendar's simple part. Currently, we do not implement many part of Temporal.Calendar since
        we do not have Temporal Date-like structures yet, but this patch implemented core part of Temporal.Calendar: keeping calendar
        identifier.

        We also defer implementing Temporal.Calendar.from's calendar ID parsing part since it requires full-fledged ISO 8601 parser,
        which will be implemented in a separate patch.

        We use `unsigned` for CalendarID, and this id corresponds to the array index of intlAvailableCalendars, which returns array
        of String from ICU.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * runtime/CommonIdentifiers.h:
        * runtime/IntlObject.cpp:
        (JSC::intlAvailableCalendars):
        (JSC::iso8601CalendarIDSlow):
        (JSC::availableCalendars):
        (JSC::createArrayFromStringVector): Deleted.
        * runtime/IntlObject.h:
        (JSC::iso8601CalendarID):
        * runtime/IntlObjectInlines.h:
        (JSC::createArrayFromStringVector):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildrenImpl):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::calendarStructure):
        * runtime/TemporalCalendar.cpp: Added.
        (JSC::TemporalCalendar::create):
        (JSC::TemporalCalendar::createStructure):
        (JSC::TemporalCalendar::TemporalCalendar):
        (JSC::TemporalCalendar::isBuiltinCalendar):
        (JSC::parseTemporalCalendarString):
        (JSC::TemporalCalendar::from):
        * runtime/TemporalCalendar.h: Added.
        * runtime/TemporalCalendarConstructor.cpp: Added.
        (JSC::TemporalCalendarConstructor::create):
        (JSC::TemporalCalendarConstructor::createStructure):
        (JSC::TemporalCalendarConstructor::TemporalCalendarConstructor):
        (JSC::TemporalCalendarConstructor::finishCreation):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/TemporalCalendarConstructor.h: Added.
        * runtime/TemporalCalendarPrototype.cpp: Added.
        (JSC::TemporalCalendarPrototype::create):
        (JSC::TemporalCalendarPrototype::createStructure):
        (JSC::TemporalCalendarPrototype::TemporalCalendarPrototype):
        (JSC::TemporalCalendarPrototype::finishCreation):
        (JSC::JSC_DEFINE_CUSTOM_GETTER):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::defaultMergeFields):
        * runtime/TemporalCalendarPrototype.h: Added.
        * runtime/TemporalObject.cpp:
        (JSC::createCalendarConstructor):
        * runtime/VM.cpp:
        * runtime/VM.h:

2021-08-30  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed, add missing include to pre-empt unified source shift.

        * runtime/IntlObject.cpp:

2021-08-30  Angelos Oikonomopoulos  <angelos@igalia.com>

        resolve-asm-file-conflicts.rb build failure after upgrade to CMake 3.21.0; DWARF 5 incompatibility
        https://bugs.webkit.org/show_bug.cgi?id=228267

        Reviewed by Adrian Perez de Castro.

        Implement the fix suggested by Adrian Vovk: any .file 0 directive
        should pass through unchanged.

        While here
        - if the file path is an absolute path, don't concat it with the working directory
        - also accept 'md5 0xhash' in the .file directive.

        * Scripts/resolve-asm-file-conflicts.rb:

2021-08-30  Zan Dobersek  <zdobersek@igalia.com>

        RISCV64 support in LLInt
        https://bugs.webkit.org/show_bug.cgi?id=229035
        <rdar://problem/82120908>

        Reviewed by Yusuke Suzuki.

        Introduce RISCV64 support at the LLint level. Along with the necessary
        offlineasm backend, plenty of miscellaneous code around MacroAssembler
        infrastructure is also introduced.

        Of the existing supported architectures, RISCV64 is most similar to
        ARM64, with the same word size and similar register abundance. This is
        mirrored in most changes around the MacroAssembler infrastructure as
        well as using same or similar codepaths in LLint for the two ISAs.

        For the MacroAssembler infrastructure, it won't be used until proper JIT
        support is introduced, but the basic facilities are still necessary to
        keep things compiling without complicating the configuration matrix.
        MacroAssemblerRISCV64 class provides no-op methods through C++ templates
        while RISCV64Assembler is also added in a limited form.

        The riscv64 offlineasm backend covers assembly generation for
        instructions that are exhibited by LLInt in the current configuration.
        It doesn't cover instructions that e.g. are only used in the WebAssembly
        opcodes, and WebAssembly won't be enabled until the higher JIT tiers are
        supported anyway.

        The offlineasm backend's assembly generation for specific instructions
        uses pattern matching of operand types for better overview of how
        resulting assembly is constructed. There's still certain improvements
        possible, e.g. in how scratch registers for more expansive operations
        are allocated.

        * CMakeLists.txt:
        * Sources.txt:
        * assembler/AbstractMacroAssembler.h:
        * assembler/MacroAssembler.h:
        * assembler/MacroAssemblerRISCV64.cpp: Added.
        (JSC::MacroAssembler::probe):
        * assembler/MacroAssemblerRISCV64.h: Added.
        Distorted auto-generated method list removed. Necessary methods are
        introduced through no-op templates until actually needed for JIT
        generation.
        * assembler/MaxFrameExtentForSlowPathCall.h:
        * assembler/PerfLog.cpp:
        * assembler/ProbeContext.h:
        * assembler/RISCV64Assembler.h: Added.
        (JSC::RISCV64Assembler::firstRegister):
        (JSC::RISCV64Assembler::lastRegister):
        (JSC::RISCV64Assembler::numberOfRegisters):
        (JSC::RISCV64Assembler::firstSPRegister):
        (JSC::RISCV64Assembler::lastSPRegister):
        (JSC::RISCV64Assembler::numberOfSPRegisters):
        (JSC::RISCV64Assembler::firstFPRegister):
        (JSC::RISCV64Assembler::lastFPRegister):
        (JSC::RISCV64Assembler::numberOfFPRegisters):
        (JSC::RISCV64Assembler::gprName):
        (JSC::RISCV64Assembler::sprName):
        (JSC::RISCV64Assembler::fprName):
        (JSC::RISCV64Assembler::RISCV64Assembler):
        (JSC::RISCV64Assembler::buffer):
        (JSC::RISCV64Assembler::invert):
        (JSC::RISCV64Assembler::getRelocatedAddress):
        (JSC::RISCV64Assembler::codeSize const):
        (JSC::RISCV64Assembler::getCallReturnOffset):
        (JSC::RISCV64Assembler::labelIgnoringWatchpoints):
        (JSC::RISCV64Assembler::labelForWatchpoint):
        (JSC::RISCV64Assembler::label):
        (JSC::RISCV64Assembler::linkJump):
        (JSC::RISCV64Assembler::linkCall):
        (JSC::RISCV64Assembler::linkPointer):
        (JSC::RISCV64Assembler::maxJumpReplacementSize):
        (JSC::RISCV64Assembler::patchableJumpSize):
        (JSC::RISCV64Assembler::repatchPointer):
        (JSC::RISCV64Assembler::relinkJump):
        (JSC::RISCV64Assembler::relinkJumpToNop):
        (JSC::RISCV64Assembler::relinkCall):
        (JSC::RISCV64Assembler::debugOffset):
        (JSC::RISCV64Assembler::cacheFlush):
        (JSC::RISCV64Assembler::fillNops):
        * assembler/RISCV64Registers.h: Added.
        * jit/FPRInfo.h:
        (JSC::FPRInfo::toRegister):
        (JSC::FPRInfo::toArgumentRegister):
        (JSC::FPRInfo::toIndex):
        (JSC::FPRInfo::debugName):
        * jit/GPRInfo.h:
        (JSC::GPRInfo::toRegister):
        (JSC::GPRInfo::toArgumentRegister):
        (JSC::GPRInfo::toIndex):
        (JSC::GPRInfo::debugName):
        * jit/RegisterSet.cpp:
        (JSC::RegisterSet::vmCalleeSaveRegisters):
        (JSC::RegisterSet::llintBaselineCalleeSaveRegisters):
        * llint/LLIntData.h:
        * llint/LLIntOfflineAsmConfig.h:
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter64.asm:
        * offlineasm/backends.rb: Reference the riscv64 backend as required.
        * offlineasm/registers.rb: List additional possible registers.
        * offlineasm/riscv64.rb: Added.

2021-08-29  Keith Miller  <keith_miller@apple.com>

        Add openFile function to jsc.cpp that links to file backed memory
        https://bugs.webkit.org/show_bug.cgi?id=229621

        Reviewed by Saam Barati.

        This patch uses fopen directly rather than use WTF::MappedFileData so there were less changes to
        readline.

        * jsc.cpp:
        (computeFilePath):
        (JSC_DEFINE_HOST_FUNCTION):
        (JSFileDescriptor::subspaceFor):
        (JSFileDescriptor::createStructure):
        (JSFileDescriptor::create):
        (JSFileDescriptor::finishCreation):
        (JSFileDescriptor::destroy):
        (JSFileDescriptor::descriptor const):
        (JSFileDescriptor::JSFileDescriptor):
        (JSFileDescriptor::~JSFileDescriptor):

2021-08-29  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove the build warning below since r281615.
        warning: control reaches end of non-void function [-Wreturn-type]

        * bytecode/PutByStatus.cpp:
        (JSC::PutByStatus::makesCalls const):

2021-08-28  Cameron McCormack  <heycam@apple.com>

        Miscellaneous typo fixes
        https://bugs.webkit.org/show_bug.cgi?id=229642

        Reviewed by Fujii Hironori.

        * API/JSValue.h:
        * runtime/RegExp.cpp:
        (JSC::RegExp::matchCompareWithInterpreter):

2021-08-27  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation][CMake] Add control over whether JavaScriptCore should be shared
        https://bugs.webkit.org/show_bug.cgi?id=229591

        Reviewed by Don Olmstead.

        Make LowLevelInterpreterLib objects get added via _PRIVATE_LIBRARIES when
        using JavaScriptCore as an object library in order to propogate them
        correctly.

        * CMakeLists.txt:

2021-08-27  Russell Epstein  <repstein@apple.com>

        Land Windows build fixes from safari-612.1.29.14-branch.
        https://bugs.webkit.org/show_bug.cgi?id=229627.

        Reviewed by Per Arne Vollan.

        * JavaScriptCore.vcxproj/JavaScriptCore.proj:

2021-08-27  Mark Lam  <mark.lam@apple.com>

        Changed ARM64 probe trampoline to do ptr auth the standard way.
        https://bugs.webkit.org/show_bug.cgi?id=229629
        rdar://problem/82453220

        Reviewed by Saam Barati.

        Also fix a comment, and add back 2 lines that I accidentally deleted in r281718.

        * assembler/MacroAssemblerARM64.cpp:

2021-08-27  Mark Lam  <mark.lam@apple.com>

        Make ARM64 and X86_64 probe code a little bit more efficient.
        https://bugs.webkit.org/show_bug.cgi?id=229618
        rdar://82445743

        Reviewed by Yusuke Suzuki.

        We were using an unnecessary indirect call to call Probe::executeProbe() when we
        can be using a direct call, which emits less JIT code.  This patch changes the
        ARM64 and X86_64 ports to use a direct call now.

        Also rename executeProbe to executeJSCJITProbe to make it more unique since we're
        switching to extern "C" linkage for this function now.

        For MacroAssemblerX86Common.cpp, we left the X86 and MSVC implementations unchanged.
        For X86, I don't know the stack alignment requirements (if any) plus we might want
        to delete this code eventually since we're not supporting the X86 JIT anymore.
        For MSVC, I don't know the way to express a direct call in MSVC assembly, and have
        no way to test it.  Will leave that as an exercise for folks working on the Windows
        ports if they are interested.

        Also remove JITProbeExecutorPtrTag since it's no longer needed.

        * assembler/MacroAssemblerARM64.cpp:
        (JSC::MacroAssembler::probe):
        * assembler/MacroAssemblerARMv7.cpp:
        (JSC::MacroAssembler::probe):
        * assembler/MacroAssemblerMIPS.cpp:
        (JSC::MacroAssembler::probe):
        * assembler/MacroAssemblerX86Common.cpp:
        (JSC::ctiMasmProbeTrampoline):
        (JSC::MacroAssembler::probe):
        * assembler/ProbeContext.cpp:
        (JSC::Probe::executeJSCJITProbe):
        (JSC::Probe::executeProbe): Deleted.
        * assembler/ProbeContext.h:
        * runtime/JSCPtrTag.h:

2021-08-27  Saam Barati  <sbarati@apple.com>

        Update ARM64EHash
        https://bugs.webkit.org/show_bug.cgi?id=228962
        <rdar://79883337>

        Reviewed by Mark Lam.

        * assembler/AssemblerBuffer.h:
        (JSC::ARM64EHash::ARM64EHash):
        (JSC::ARM64EHash::update):
        (JSC::ARM64EHash::makeDiversifier):
        (JSC::ARM64EHash::nextValue):
        (JSC::ARM64EHash::bitsForDiversifier):
        (JSC::ARM64EHash::currentHash):
        (JSC::ARM64EHash::setUpdatedHash):
        (JSC::AssemblerBuffer::AssemblerBuffer):
        (JSC::AssemblerBuffer::putIntegralUnchecked):
        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::copyCompactAndLinkCode):

2021-08-27  Mikhail R. Gadelha  <mikhail@igalia.com>

        Avoid increasing required alignment of target type warning on ARM 32 bits
        https://bugs.webkit.org/show_bug.cgi?id=229151

        Reviewed by Mark Lam.

        Same approach as https://bugs.webkit.org/show_bug.cgi?id=38045
        cast pointers to void* to bypass warning about increasing pointer
        alingment. reinterpret_cast_ptr has custom behaviour only on ARM and
        MIPS 32 bits, and doesn't change the behaviour in 64 bits archs
        (reinterpret_cast_ptr is preprocessed to reinterpret_cast in 64 bits
        archs)

        * bytecode/Instruction.h:
        (JSC::BaseInstruction::asKnownWidth const):
        * llint/LLIntCommon.h:

2021-08-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r281587.
        https://bugs.webkit.org/show_bug.cgi?id=229609

        stress test failed on ARM64

        Reverted changeset:

        "[ARM64] Fix pre-index address mode"
        https://bugs.webkit.org/show_bug.cgi?id=229175
        https://commits.webkit.org/r281587

2021-08-26  Yusuke Suzuki  <ysuzuki@apple.com>

        Intl.DateTimeFormat incorrectly parses patterns with 'h' literal
        https://bugs.webkit.org/show_bug.cgi?id=229313
        rdar://82414310

        Reviewed by Ross Kirsling.

        While DateTimeFormat pattern and skeleton can include single-quoted literal texts,
        we are not respecting that when parsing them to extract information. As a result,
        we are incorrectly extracting hour-cycle information for "fr" locale since it can
        include "HH 'h'" pattern text. This patch fixes that by skipping literal text
        correctly.

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::skipLiteralText):
        (JSC::IntlDateTimeFormat::setFormatsFromPattern):
        (JSC::IntlDateTimeFormat::hourCycleFromPattern):
        (JSC::IntlDateTimeFormat::replaceHourCycleInSkeleton):
        (JSC::IntlDateTimeFormat::replaceHourCycleInPattern):
        * runtime/IntlDateTimeFormat.h:
        * runtime/IntlLocale.cpp:
        (JSC::IntlLocale::hourCycles):

2021-08-26  Yusuke Suzuki  <ysuzuki@apple.com>

        Float32Arrays.sort() return undefined when length < 2
        https://bugs.webkit.org/show_bug.cgi?id=229575

        Reviewed by Saam Barati.

        TypedArray#sort should return |this| even when we don't perform sorting.

        * builtins/TypedArrayPrototype.js:
        (sort):

2021-08-26  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] op_put_private_name should use modern IC and remove ByValInfo
        https://bugs.webkit.org/show_bug.cgi?id=229544

        Reviewed by Saam Barati.

        This patch makes op_put_private_name use new PutByVal IC. This allows op_put_private_name to support
        polymorphic properties, and we can finally remove Baseline's adhoc IC and ByValInfo completely.

        Added microbenchmark showed 3x improvement due to polymorphic PutPrivateName IC.

                                                    ToT                     Patched

        class-private-field-polymorphic        9.3666+-0.0332     ^      3.1199+-0.0182        ^ definitely 3.0022x faster


        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/ByValInfo.cpp: Removed.
        * bytecode/ByValInfo.h: Removed.
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::getICStatusMap):
        (JSC::CodeBlock::stronglyVisitStrongReferences):
        (JSC::CodeBlock::findByValInfo): Deleted.
        (JSC::CodeBlock::addByValInfo): Deleted.
        * bytecode/CodeBlock.h:
        * bytecode/ICStatusMap.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetPrivateName):
        (JSC::DFG::SpeculativeJIT::compilePutPrivateName):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStoreBarrierInsertionPhase.cpp:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compilePutPrivateName):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::link):
        (JSC::JIT::privateCompileExceptionHandlers):
        * jit/JIT.h:
        (JSC::ByValCompilationInfo::ByValCompilationInfo): Deleted.
        * jit/JITInlines.h:
        (JSC::JIT::emitArrayProfileStoreToHoleSpecialCase): Deleted.
        (JSC::JIT::emitArrayProfileOutOfBoundsSpecialCase): Deleted.
        * jit/JITOperations.cpp:
        (JSC::putPrivateNameOptimize):
        (JSC::putPrivateName):
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jit/JITOperations.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_put_private_name):
        (JSC::JIT::emitSlow_op_put_private_name):
        (JSC::JIT::slow_op_put_private_name_prepareCallGenerator):
        (JSC::JIT::emitPutByValWithCachedId): Deleted.
        (JSC::JIT::emitPutPrivateNameWithCachedId): Deleted.
        (JSC::JIT::emitByValIdentifierCheck): Deleted.
        (JSC::JIT::privateCompilePutPrivateNameWithCachedId): Deleted.
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_private_name):
        (JSC::JIT::emitSlow_op_put_private_name):
        * jit/Repatch.cpp:
        (JSC::appropriateGenericPutByFunction):
        (JSC::appropriateOptimizingPutByFunction):
        (JSC::resetPutBy):

2021-08-26  Saam Barati  <sbarati@apple.com>

        r281485 was not sufficient in where it called disablePeepholeOptimization
        https://bugs.webkit.org/show_bug.cgi?id=229582
        <rdar://82346980>

        Reviewed by Yusuke Suzuki.

        r281485 accidentally deleted a place where we called disablePeepholeOptimization
        that was necessary. Basically, after we seek where the current instruction
        in BytecodeGenerator is, we need to disablePeepholeOptimization.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::ForInContext::finalize):

2021-08-26  Per Arne Vollan  <pvollan@apple.com>

        [AppleWin] JSC build failure
        https://bugs.webkit.org/show_bug.cgi?id=229578

        Reviewed by Don Olmstead.

        Add new build dependency between LLIntOffsetsExtractor and JSCBuiltins targets.

        * CMakeLists.txt:

2021-08-26  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Segfault in stress/typedarray-every.js (32bit)
        https://bugs.webkit.org/show_bug.cgi?id=229546

        Reviewed by Saam Barati.

        ARMv7 does not have enough registers. Adding workaround by using getEffectiveAddress.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateWithGuard):

2021-08-26  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] DataIC should not embed StructureStubInfo pointer
        https://bugs.webkit.org/show_bug.cgi?id=229541

        Reviewed by Mark Lam.

        We should not embed pointer to StructureStubInfo::countdown if DataIC is used.

        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::store8):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::PolymorphicAccess::regenerate):
        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::offsetOfCountdown):

2021-08-25  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Polymorphic PutByVal
        https://bugs.webkit.org/show_bug.cgi?id=229229

        Reviewed by Saam Barati.

        This patch changes PutByVal IC to modern style. This polymorphic PutByVal can handle multiple array types and multiple identifiers.
        Also, this removes adhoc IC code in Baseline so that it paves the way to unlinked Baseline JIT by cleaning up IC.

        Several interesting points of the design.

        1. We need to pass ArrayProfile* via GPRReg to IC since we need to profile mayStoreToHole, which is still important to avoid the slow path.
        2. Transition / Replace IC need to record propertyRegs if it exists not to clobber these registers. This is important in DFG / FTL since
           IC should not clobber these registers unless it is flushed. It also makes Baseline code smaller since we do not reload them in the slow path call.
        3. Added a path folding String/Symbol when emitting PutByVal in DFG / FTL. This edge-case is found via a microbenchmark. Let's consider the case: one
           put_by_val site has one identifier "foo", but it has so many different Structures. Previously, we emit JITPutByIdGenerator adhocly, and still we
           cache this "foo" identifier in cachedId. In DFG / FTL, while we cannot make it PutByOffset, we can emit PutById since we know that identifier is
           always "foo". But after this patch's change, such a site becomes slow-path. And then this identifier information is missed, and we were emitting
           PutByVal for that. For now, we attempt to fold to one identifier in DFGByteCodeParser so that we can still attempt to make it PutById, which
           can be PutByOffset in constant folding phase. We would like to handle this one identifier slow-path case in PutByStatus / GetByStatus in the future
           patch.
        4. Now, DFG OSR exit does not query to ByValInfo for setter calls since JITPutByValGenerator use StructureStubInfo in Baseline.

        Results of Microbenchmarks look good.

                                                             ToT                     Patched

        put-by-val-direct-large-index                  94.6265+-0.9076           93.4550+-0.7121          might be 1.0125x faster
        inlined-put-by-val-with-string-transition
                                                       23.7131+-0.3282     ^     22.7679+-0.1137        ^ definitely 1.0415x faster
        put-by-val-with-string-slightly-polymorphic
                                                        1.9852+-0.0284            1.9580+-0.0224          might be 1.0139x faster
        get-and-put-by-val-double-index-dont-fall-off-a-cliff
                                                      185.4762+-0.5737     ?    185.6325+-0.5819        ?
        polymorphic-put-by-val-with-string             30.9903+-0.1207           30.8097+-0.1285
        put-by-val-machine-int                          1.8803+-0.0384            1.8707+-0.0440
        fold-put-by-val-with-symbol-to-multi-put-by-offset
                                                        4.8463+-0.1148            4.7839+-0.0547          might be 1.0130x faster
        put-by-val-with-string-replace-and-transition
                                                        8.8730+-1.5934     ^      6.2276+-0.0585        ^ definitely 1.4248x faster
        fold-put-by-val-with-string-to-multi-put-by-offset
                                                        4.8183+-0.0841     ?      4.8233+-0.0892        ?
        put-by-val-direct                               0.2845+-0.0091     ?      0.2901+-0.0088        ? might be 1.0196x slower
        put-by-val-with-symbol-replace-and-transition
                                                        6.3527+-0.0686     ?      6.3933+-0.0961        ?
        put-by-val-with-symbol                          9.3556+-3.1421            7.1509+-0.1019          might be 1.3083x faster
        put-by-val-with-symbol-slightly-polymorphic
                                                        2.0052+-0.0309            1.9781+-0.0397          might be 1.0137x faster
        put-by-val-negative-array-index                14.9572+-0.1221     ^     14.5636+-0.1044        ^ definitely 1.0270x faster
        put-by-val-with-string                         11.6345+-4.3048     ^      7.0919+-0.0918        ^ definitely 1.6405x faster
        put-by-val-large-index-blank-indexing-type
                                                        3.1425+-0.1165            3.1236+-0.0378
        inlined-put-by-val-with-symbol-transition
                                                       23.4932+-0.3186     ^     22.8469+-0.0873        ^ definitely 1.0283x faster
        polymorphic-put-by-val-with-symbol             36.6046+-1.6519     ^     30.8597+-0.1474        ^ definitely 1.1862x faster

        Speedometer2 showed roughly 0.2-0.3% progression.

        ----------------------------------------------------------------------------------------------------------------------------------
        |               subtest                |     ms      |     ms      |  b / a   | pValue (significance using False Discovery Rate) |
        ----------------------------------------------------------------------------------------------------------------------------------
        | Elm-TodoMVC                          |121.916667   |121.958333   |1.000342  | 0.876802                                         |
        | VueJS-TodoMVC                        |26.263333    |26.006667    |0.990227  | 0.263868                                         |
        | EmberJS-TodoMVC                      |127.080000   |127.866667   |1.006190  | 0.011497 (significant)                           |
        | BackboneJS-TodoMVC                   |48.920000    |49.318333    |1.008143  | 0.003395 (significant)                           |
        | Preact-TodoMVC                       |19.828333    |19.828333    |1.000000  | 1.000000                                         |
        | AngularJS-TodoMVC                    |134.011667   |132.080000   |0.985586  | 0.000000 (significant)                           |
        | Vanilla-ES2015-TodoMVC               |63.726667    |63.838333    |1.001752  | 0.408404                                         |
        | Inferno-TodoMVC                      |65.153333    |63.753333    |0.978512  | 0.000000 (significant)                           |
        | Flight-TodoMVC                       |78.133333    |78.780000    |1.008276  | 0.097794                                         |
        | Angular2-TypeScript-TodoMVC          |40.415000    |40.100000    |0.992206  | 0.287630                                         |
        | VanillaJS-TodoMVC                    |51.931667    |52.500000    |1.010944  | 0.004149 (significant)                           |
        | jQuery-TodoMVC                       |226.056667   |225.073333   |0.995650  | 0.007796 (significant)                           |
        | EmberJS-Debug-TodoMVC                |341.210000   |340.978333   |0.999321  | 0.623386                                         |
        | React-TodoMVC                        |87.198333    |86.893333    |0.996502  | 0.042189                                         |
        | React-Redux-TodoMVC                  |146.506667   |145.958333   |0.996257  | 0.018801 (significant)                           |
        | Vanilla-ES2015-Babel-Webpack-TodoMVC |61.450000    |61.870000    |1.006835  | 0.000049 (significant)                           |
        ----------------------------------------------------------------------------------------------------------------------------------
        a mean = 254.85111
        b mean = 255.25735
        pValue = 0.1856561656
        (Bigger means are better.)
        1.002 times better
        Results ARE NOT significant

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::create):
        (JSC::AccessCase::guardedByStructureCheckSkippingConstantIdentifierCheck const):
        (JSC::AccessCase::requiresIdentifierNameMatch const):
        (JSC::AccessCase::requiresInt32PropertyCheck const):
        (JSC::AccessCase::needsScratchFPR const):
        (JSC::AccessCase::forEachDependentCell const):
        (JSC::AccessCase::doesCalls const):
        (JSC::AccessCase::canReplace const):
        (JSC::AccessCase::generateWithGuard):
        (JSC::AccessCase::generateImpl):
        (JSC::AccessCase::toTypedArrayType):
        (JSC::AccessCase::canBeShared):
        * bytecode/AccessCase.h:
        (JSC::SharedJITStubSet::Hash::Key::Key):
        (JSC::SharedJITStubSet::Hash::Key::operator==):
        (JSC::SharedJITStubSet::Searcher::Translator::equal):
        * bytecode/ArrayProfile.h:
        (JSC::ArrayProfile::offsetOfMayStoreToHole):
        (JSC::ArrayProfile::offsetOfLastSeenStructureID):
        * bytecode/GetterSetterAccessCase.cpp:
        (JSC::GetterSetterAccessCase::emitDOMJITGetter):
        * bytecode/ICStatusMap.h:
        * bytecode/InlineAccess.cpp:
        (JSC::getScratchRegister):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::PolymorphicAccess::regenerate):
        (WTF::printInternal):
        * bytecode/PutByStatus.cpp: Renamed from Source/JavaScriptCore/bytecode/PutByIdStatus.cpp.
        (JSC::PutByStatus::appendVariant):
        (JSC::PutByStatus::shrinkToFit):
        (JSC::PutByStatus::computeFromLLInt):
        (JSC::PutByStatus::PutByStatus):
        (JSC::PutByStatus::computeFor):
        (JSC::PutByStatus::computeForStubInfo):
        (JSC::PutByStatus::makesCalls const):
        (JSC::PutByStatus::slowVersion const):
        (JSC::PutByStatus::singleIdentifier const):
        (JSC::PutByStatus::visitAggregateImpl):
        (JSC::PutByStatus::markIfCheap):
        (JSC::PutByStatus::finalize):
        (JSC::PutByStatus::merge):
        (JSC::PutByStatus::filter):
        (JSC::PutByStatus::dump const):
        * bytecode/PutByStatus.h: Renamed from Source/JavaScriptCore/bytecode/PutByIdStatus.h.
        * bytecode/PutByVariant.cpp: Renamed from Source/JavaScriptCore/bytecode/PutByIdVariant.cpp.
        (JSC::PutByVariant::PutByVariant):
        (JSC::PutByVariant::operator=):
        (JSC::PutByVariant::replace):
        (JSC::PutByVariant::transition):
        (JSC::PutByVariant::setter):
        (JSC::PutByVariant::oldStructureForTransition const):
        (JSC::PutByVariant::fixTransitionToReplaceIfNecessary):
        (JSC::PutByVariant::writesStructures const):
        (JSC::PutByVariant::reallocatesStorage const):
        (JSC::PutByVariant::makesCalls const):
        (JSC::PutByVariant::attemptToMerge):
        (JSC::PutByVariant::attemptToMergeTransitionWithReplace):
        (JSC::PutByVariant::visitAggregateImpl):
        (JSC::PutByVariant::markIfCheap):
        (JSC::PutByVariant::finalize):
        (JSC::PutByVariant::dump const):
        (JSC::PutByVariant::dumpInContext const):
        * bytecode/PutByVariant.h: Renamed from Source/JavaScriptCore/bytecode/PutByIdVariant.h.
        (JSC::PutByVariant::PutByVariant):
        (JSC::PutByVariant::identifier const):
        (JSC::PutByVariant::overlaps):
        * bytecode/RecordedStatuses.cpp:
        (JSC::RecordedStatuses::addPutByStatus):
        (JSC::RecordedStatuses::visitAggregateImpl):
        (JSC::RecordedStatuses::addPutByIdStatus): Deleted.
        * bytecode/RecordedStatuses.h:
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::reset):
        * bytecode/StructureStubInfo.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::filterICStatus):
        * dfg/DFGArgumentsEliminationPhase.cpp:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::load):
        (JSC::DFG::ByteCodeParser::store):
        (JSC::DFG::ByteCodeParser::emitPutById):
        (JSC::DFG::ByteCodeParser::handlePutById):
        (JSC::DFG::ByteCodeParser::handlePutPrivateNameById):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::handlePutByVal):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGClobbersExitState.cpp:
        (JSC::DFG::clobbersExitState):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        (JSC::DFG::ConstantFoldingPhase::emitPutByOffset):
        (JSC::DFG::ConstantFoldingPhase::tryFoldAsPutByOffset):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addPutByVal):
        * dfg/DFGMayExit.cpp:
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasPutByStatus):
        (JSC::DFG::Node::putByStatus):
        (JSC::DFG::Node::hasPutByIdStatus): Deleted.
        (JSC::DFG::Node::putByIdStatus): Deleted.
        * dfg/DFGNodeType.h:
        * dfg/DFGOSRExitCompilerCommon.cpp:
        (JSC::DFG::callerReturnPC):
        * dfg/DFGObjectAllocationSinkingPhase.cpp:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStoreBarrierInsertionPhase.cpp:
        * dfg/DFGValidate.cpp:
        * dfg/DFGVarargsForwardingPhase.cpp:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileMultiPutByOffset):
        * generator/DSL.rb:
        * jit/ICStats.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::link):
        * jit/JIT.h:
        * jit/JITInlineCacheGenerator.cpp:
        (JSC::JITPutByIdGenerator::JITPutByIdGenerator):
        (JSC::JITPutByValGenerator::JITPutByValGenerator):
        (JSC::JITPutByValGenerator::generateFastPath):
        (JSC::JITPutByValGenerator::finalize):
        * jit/JITInlineCacheGenerator.h:
        * jit/JITInlines.h:
        (JSC::JIT::emitArrayProfilingSiteWithCell):
        (JSC::JIT::chooseArrayMode): Deleted.
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        (JSC::putByVal):
        (JSC::directPutByVal):
        (JSC::putByValOptimize):
        (JSC::directPutByValOptimize):
        (JSC::tryPutByValOptimize): Deleted.
        (JSC::tryDirectPutByValOptimize): Deleted.
        * jit/JITOperations.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::slow_op_put_by_val_prepareCallGenerator):
        (JSC::JIT::emitSlow_op_put_private_name):
        (JSC::JIT::slow_op_put_private_name_prepareCallGenerator):
        (JSC::JIT::emitGenericContiguousPutByVal): Deleted.
        (JSC::JIT::emitArrayStoragePutByVal): Deleted.
        (JSC::JIT::privateCompilePutByVal): Deleted.
        (JSC::JIT::privateCompilePutByValWithCachedId): Deleted.
        (JSC::JIT::emitIntTypedArrayPutByVal): Deleted.
        (JSC::JIT::emitFloatTypedArrayPutByVal): Deleted.
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emitGenericContiguousPutByVal): Deleted.
        (JSC::JIT::emitArrayStoragePutByVal): Deleted.
        * jit/Repatch.cpp:
        (JSC::appropriateGenericPutByFunction):
        (JSC::appropriateOptimizingPutByFunction):
        (JSC::tryCachePutBy):
        (JSC::repatchPutBy):
        (JSC::tryCacheArrayPutByVal):
        (JSC::repatchArrayPutByVal):
        (JSC::tryCacheInBy):
        (JSC::resetPutBy):
        (JSC::appropriateGenericPutByIdFunction): Deleted.
        (JSC::appropriateOptimizingPutByIdFunction): Deleted.
        (JSC::tryCachePutByID): Deleted.
        (JSC::repatchPutByID): Deleted.
        (JSC::resetPutByID): Deleted.
        * jit/Repatch.h:
        * llint/LowLevelInterpreter.h:

2021-08-25  Yusuke Suzuki  <ysuzuki@apple.com>

        REGRESSION(r281513?): [ JSC Catalina+ Debug ] 16 stress/intl-enumeration.js (JSC Tests) are flaky failing
        https://bugs.webkit.org/show_bug.cgi?id=229526

        Reviewed by Mark Lam.

        Fix debug JSC test failures by using RELEASE_AND_RETURN.

        * runtime/IntlObject.cpp:
        (JSC::availableCalendars):
        (JSC::availableCollations):
        (JSC::availableCurrencies):
        (JSC::availableNumberingSystems):
        (JSC::availableTimeZones):

2021-08-25  Yijia Huang  <yijia_huang@apple.com>

        [ARM64] Fix pre-index address mode
        https://bugs.webkit.org/show_bug.cgi?id=229175

        Reviewed by Saam Barati.

        This patch fixes the canonicalization phase for pre/post-increment address mode
        due to the potential bugs commented on in the previous patch
        https://bugs.webkit.org/show_bug.cgi?id=228538. And this patch removed the 
        temporary fix in https://bugs.webkit.org/show_bug.cgi?id=229211.

        Previously, the pre-index address mode for Load instruction convert the pattern 
        to the canonical form like this:

            address = Add(base, offset)       address = Add(base, offset)
            ...                          -->  newMemory = Load(base, offset)
            ...                               ...
            memory = Load(base, offset)       memory = Identity(newMemory)

        which is wrong. Assume "..." contains a store to a memory location that aliases for address:

            address = Add(base, offset)       address = Add(base, offset)
            ...                          -->  newMemory = Load(base, offset)
            ...                               ...
            Store(value1, address)            Store(value1, address)
            memory = Load(base, offset)       memory = Identity(newMemory)

        The loaded value should always be value1 which is not true after the conversion.
        So, moving the load above the store is semantically incorrect because it's not identical to
        the behavior of the original program. In this case, maybe we should apply alias analysis to
        detect the violations of reference updating.

        To solve this problem, we moves the address value to just before the memory value instead of
        moving memory value upward.

        Convert Pre-Index Load Pattern to the Canonical Form:

            address = Add(base, offset)                    address = Nop
            ...                                            ...
            ...                                            newAddress = Add(base, offset)
            memory = Load(base, offset)            -->     memory = Load(base, offset)
            ...                                            ...
            parent = B3Opcode(address, ...)                parent = B3Opcode(newAddress, ...)

        Convert Pre-Index Store Pattern to the Canonical Form:

            address = Add(base, offset)                    address = Nop
            ...                                            ...
            ...                                            newAddress = Add(base, offset)
            memory = Store(value1, base, offset)   -->     memory = Store(value1, base, offset)
            ...                                            ...
            parent = B3Opcode(address, ...)                parent = B3Opcode(newAddress, ...)

        To move the address value downward, we need to make sure that no use reference of address between
        the address and memory values.

        * b3/B3CanonicalizePrePostIncrements.cpp:
        (JSC::B3::canonicalizePrePostIncrements):
        * b3/B3Generate.cpp:
        (JSC::B3::generateToAir):
        * b3/B3ValueKey.h:
        * b3/B3ValueKeyInlines.h:
        (JSC::B3::ValueKey::ValueKey):
        * b3/testb3.h:
        * b3/testb3_3.cpp:
        (testLoadWithStorePreIndex32):
        (testStorePreIndex32):
        (testStorePreIndex64):
        (testStorePostIndex32):
        (testStorePostIndex64):
        (addShrTests):
        * runtime/OptionsList.h:

2021-08-25  Xan Lopez  <xan@igalia.com>

        [JSC] Infinite loop in for...in after r280760
        https://bugs.webkit.org/show_bug.cgi?id=229493

        Reviewed by Yusuke Suzuki.

        A missing instruction in the 32bit branch can potentially cause
        infinite loops when using for-in. No new test, this is already
        covered by (among others) LayoutTests/js/reserved-words.html.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileEnumeratorNextUpdateIndexAndMode):

2021-08-25  Keith Miller  <keith_miller@apple.com>

        Add for-in OwnStructureMode optimizations to LLInt
        https://bugs.webkit.org/show_bug.cgi?id=229038

        Reviewed by Saam Barati.

        This patch adds the optimizations we have for OwnStructureMode in
        the Baseline to the LLInt. The patch also adds redundant self move
        (i.e. move a, a) elimination to arm64. Finally, a bunch of the
        property offset functions are now marked constexpr and return
        intptr_t rather than size_t as the values can be negative.

        There's also a minor fix to disable MSVC's signed to unsigned
        cast warning for LLIntOffsetsExtractor as we don't care about
        signedness for extracting constants.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileEnumeratorGetByVal):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_enumerator_get_by_val):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * offlineasm/arm64.rb:
        * offlineasm/generate_offset_extractor.rb:
        * runtime/Butterfly.h:
        (JSC::Butterfly::indexOfPropertyStorage):
        * runtime/JSObject.h:
        (JSC::offsetInButterfly):
        * runtime/PropertyOffset.h:
        (JSC::checkOffset):
        (JSC::validateOffset):
        (JSC::isValidOffset):
        (JSC::isInlineOffset):
        (JSC::isOutOfLineOffset):
        (JSC::offsetInInlineStorage):
        (JSC::offsetInOutOfLineStorage):
        (JSC::offsetInRespectiveStorage):
        (JSC::numberOfOutOfLineSlotsForMaxOffset):
        (JSC::numberOfSlotsForMaxOffset):
        (JSC::offsetForPropertyNumber):

2021-08-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r281523.
        https://bugs.webkit.org/show_bug.cgi?id=229494

        broke cloop build

        Reverted changeset:

        "Add for-in OwnStructureMode optimizations to LLInt"
        https://bugs.webkit.org/show_bug.cgi?id=229038
        https://commits.webkit.org/r281523

2021-08-24  Mark Lam  <mark.lam@apple.com>

        Refactor ENABLE(JIT_OPERATION_VALIDATION) code to emit no code when disabled.
        https://bugs.webkit.org/show_bug.cgi?id=229482
        rdar://82318317

        Reviewed by Yusuke Suzuki.

        * assembler/JITOperationList.cpp:
        (JSC::addPointers):
        (JSC::JITOperationList::populatePointersInJavaScriptCore):
        (JSC::JITOperationList::populatePointersInJavaScriptCoreForLLInt):
        (JSC::JITOperationList::populatePointersInEmbedder):
        * assembler/JITOperationList.h:
        (JSC::JITOperationList::map const):
        (JSC::JITOperationList::assertIsJITOperation):
        (JSC::JITOperationList::initialize):
        (JSC::JITOperationList::populatePointersInJavaScriptCore):
        (JSC::JITOperationList::populatePointersInJavaScriptCoreForLLInt):
        * runtime/JSCPtrTag.h:
        (JSC::tagJSCCodePtrImpl):
        (JSC::untagJSCCodePtrImpl):

2021-08-24  Mark Lam  <mark.lam@apple.com>

        [Re-landing] Add some offlineasm enhancements.
        https://bugs.webkit.org/show_bug.cgi?id=229332
        rdar://82163923

        Reviewed by Keith Miller.

        1. Enhance "include" offlineasm Instruction to always attempt to include an asm
           file from <build-products>/usr/local/include/WebKitAdditions/ first.  If the
           specified file is not available there, then it will attempt to include the file
           from the same directory as the current source file (which in practice, means
           Source/JavaScriptCore/llint/).

        2. Enhance "include" offlineasm Instruction to allow an optional file to be
           included if it exists.  For example, the following offlineasm code:

                include? LowLevelInterpreterAdditions

           ... will attempt to include a file LowLevelInterpreterAdditions.asm.  If the
           file does not exist, this will be a no-op.  Note: the "?" after the "include"
           means the include is optional.

        3. Enhanced "emit" offlineasm Instruction to be able to take more than one operand.

           "emit" used to just copy the string operand that follows into the generated
           LLIntAssembly.h.  Now, "emit" can take multiple comma separated operands, and
           will concatenate all the operands.

           Additionally, "emit" can now take a LocalLabelReference as an operand.  For
           example, this offline asm code:

                   emit "b ", .done
                   ...
                .done:

           ... will generate this inline asm code in LLIntAssembly.h:

                "b " LOCAL_LABEL_STRING(_offlineasm_someLabel_done) "\n"

           This makes it easier to emit branches to local labels.

        4. Also fixed LLInt code alignment for ARM_THUMB2 and ARM64.

           Previously, it was aligned using ".align 4" which means aligned on a 4
           instruction boundary.  Note: the interpretation of .align varies for different
           target CPU architectures.

           Now, we do the alignment using ".balign 4" which means align on a 4 byte
           boundary.  This is the intended alignment because ARM64 instruction size is
           4 bytes, and ARM_THUMB2 instruction size is either 2 bytes or 4 bytes.
           Using .align before was potentially wasting some code space.

        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter.cpp:
        * offlineasm/ast.rb:
        * offlineasm/parser.rb:

2021-08-24  Mark Lam  <mark.lam@apple.com>

        testb3_6 should be using JSSwitchPtrTag instead of JITCompilationPtrTag.
        https://bugs.webkit.org/show_bug.cgi?id=229479
        rdar://82316967

        Reviewed by Yusuke Suzuki.

        This is in testInterpreter() which is emitting code for a jump table.
        JSSwitchPtrTag is the right tag to use here.

        * b3/testb3_6.cpp:
        (testInterpreter):

2021-08-24  Keith Miller  <keith_miller@apple.com>

        Add for-in OwnStructureMode optimizations to LLInt
        https://bugs.webkit.org/show_bug.cgi?id=229038

        Reviewed by Saam Barati.

        This patch adds the optimizations we have for OwnStructureMode in
        the Baseline to the LLInt. The patch also adds redundant self move
        (i.e. move a, a) elimination to arm64. Finally, a bunch of the
        property offset functions are now marked constexpr and return
        intptr_t rather than size_t as the values can be negative.

        There's also a minor fix to disable MSVC's signed to unsigned
        cast warning for LLIntOffsetsExtractor as we don't care about
        signedness for extracting constants.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileEnumeratorGetByVal):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_enumerator_get_by_val):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * offlineasm/arm64.rb:
        * offlineasm/generate_offset_extractor.rb:
        * runtime/Butterfly.h:
        (JSC::Butterfly::indexOfPropertyStorage):
        * runtime/JSObject.h:
        (JSC::offsetInButterfly):
        * runtime/PropertyOffset.h:
        (JSC::checkOffset):
        (JSC::validateOffset):
        (JSC::isValidOffset):
        (JSC::isInlineOffset):
        (JSC::isOutOfLineOffset):
        (JSC::offsetInInlineStorage):
        (JSC::offsetInOutOfLineStorage):
        (JSC::offsetInRespectiveStorage):
        (JSC::numberOfOutOfLineSlotsForMaxOffset):
        (JSC::numberOfSlotsForMaxOffset):
        (JSC::offsetForPropertyNumber):

2021-08-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add Intl Enumeration APIs
        https://bugs.webkit.org/show_bug.cgi?id=214795

        Reviewed by Ross Kirsling.

        This patch implements Intl enumeration API[1] which is in stage-3.
        Supported keys are, "calendar", "collation", "currency", "numberingSystem", "timeZone", and "unit".

        [1]: https://github.com/tc39/proposal-intl-enumeration

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::localeData):
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        * runtime/IntlLocale.cpp:
        (JSC::createArrayFromStringVector): Deleted.
        * runtime/IntlNumberFormat.cpp:
        (JSC::sanctionedSimpleUnitIdentifier):
        * runtime/IntlObject.cpp:
        (JSC::IntlObject::finishCreation):
        (JSC::mapICUCalendarKeywordToBCP47):
        (JSC::availableCalendars):
        (JSC::availableCollations):
        (JSC::availableCurrencies):
        (JSC::availableNumberingSystems):
        (JSC::canonicalizeTimeZoneNameFromICUTimeZone):
        (JSC::availableTimeZones):
        (JSC::availableUnits):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::createArrayFromStringVector):
        * runtime/IntlObject.h:
        * runtime/OptionsList.h:

2021-08-24  Keith Miller  <keith_miller@apple.com>

        (r281473) stress/for-in-has-own-property-shouldnt-flush-registers.js failing on Debug
        https://bugs.webkit.org/show_bug.cgi?id=229448

        Reviewed by Mark Lam.

        Add missing exception checks.

        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):

2021-08-24  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r281321.
        https://bugs.webkit.org/show_bug.cgi?id=229449

        causes crashes on ARM64

        Reverted changeset:

        "Add some offlineasm enhancements."
        https://bugs.webkit.org/show_bug.cgi?id=229332
        https://commits.webkit.org/r281321

2021-08-23  Saam Barati  <sbarati@apple.com>

        Disable peephole optimizations in the byte code generator after rewriting instructions for for-in
        https://bugs.webkit.org/show_bug.cgi?id=229420
        <rdar://82020528>

        Reviewed by Keith Miller.

        The final instruction in a for-in loop might be the get by val that
        we're rewriting because there was an escape. We won't ever actually
        do peephole optimizations on this get_by_val today, but it breaks
        some bookkeeping that the bytecode generator does. This patch makes
        sure the bookkeeping is up to date.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::ForInContext::finalize):

2021-08-23  Saam Barati  <sbarati@apple.com>

        compileEnumeratorHasProperty uses flushRegisters incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=229412
        <rdar://82020767>

        Reviewed by Keith Miller.

        We were calling flushRegisters() inside code that isn't always runs inside the
        EnumeratorInByVal/EnumeratorHasOwnProperty nodes. That is a violation of how
        flushRegisters() must be used, since flushRegisters() updates global register
        allocation state, and therefore must run each time a node is run. To fix, we
        move flushRegisters() before the code starts emitting branches.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileEnumeratorHasProperty):

2021-08-23  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] emitArrayProfilingSiteWithCell should not load indexingType unnecessarily
        https://bugs.webkit.org/show_bug.cgi?id=229396

        Reviewed by Saam Barati.

        emitArrayProfilingSiteWithCell is always loading indexingType after profiling a cell.
        But (possibly) this is old code, and there is no reason to do that. This patch removes it.

        * jit/JIT.h:
        * jit/JITInlines.h:
        (JSC::JIT::emitArrayProfilingSiteWithCell):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emit_op_in_by_val):
        (JSC::JIT::emit_op_enumerator_get_by_val):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emit_op_in_by_val):

2021-08-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove already-shipped wasm option flags
        https://bugs.webkit.org/show_bug.cgi?id=229386

        Reviewed by Ross Kirsling.

        This patch removes some wasm option flags which are already shipped.

        * runtime/OptionsList.h:
        * wasm/WasmFormat.h:
        (JSC::Wasm::isValueType):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
        * wasm/WasmParser.h:
        (JSC::Wasm::Parser<SuccessType>::parseBlockSignature):
        * wasm/WasmSectionParser.cpp:
        (JSC::Wasm::SectionParser::parseType):
        (JSC::Wasm::SectionParser::parseElement):
        (JSC::Wasm::SectionParser::parseData):
        (JSC::Wasm::SectionParser::parseDataCount):
        * wasm/js/JSWebAssembly.cpp:
        (JSC::JSWebAssembly::finishCreation):
        * wasm/js/WebAssemblyGlobalConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyTableConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyTablePrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-08-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove already-shipped JS feature flags
        https://bugs.webkit.org/show_bug.cgi?id=229387

        Reviewed by Ross Kirsling.

        These features are already shipped. So removing these runtime flags to clean up source code and
        remove untested path.

        * API/JSObjectRef.cpp:
        (JSObjectMakeError):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::FunctionCallValueNode::emitBytecode):
        * parser/Lexer.cpp:
        (JSC::Lexer<T>::lexWithoutClearingLineTerminator):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseInner):
        (JSC::Parser<LexerType>::parseForStatement):
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseBinaryExpression):
        (JSC::Parser<LexerType>::parseGetterSetter):
        (JSC::Parser<LexerType>::parsePrimaryExpression):
        (JSC::Parser<LexerType>::parseUnaryExpression):
        * runtime/AggregateErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/ErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSGlobalObject.h:
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor<errorType>::constructImpl):
        (JSC::NativeErrorConstructor<errorType>::callImpl):
        * runtime/Options.cpp:
        (JSC::Options::recomputeDependentOptions):
        * runtime/OptionsList.h:
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-08-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r280984 and r280996.
        https://bugs.webkit.org/show_bug.cgi?id=229384

        Speedometer2 0.3-0.5% regression

        Reverted changesets:

        "Update ARM64EHash"
        https://bugs.webkit.org/show_bug.cgi?id=228962
        https://commits.webkit.org/r280984

        "Refactor some ARM64EHash code."
        https://bugs.webkit.org/show_bug.cgi?id=229054
        https://commits.webkit.org/r280996

2021-08-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove Intl runtime feature flags for already shipped ones
        https://bugs.webkit.org/show_bug.cgi?id=229371

        Reviewed by Ross Kirsling.

        Since they are already shipped, we should remove these runtime flags.

        * builtins/DatePrototype.js:
        (globalPrivate.toDateTimeOptionsAnyAll):
        (globalPrivate.toDateTimeOptionsTimeTime):
        * bytecode/BytecodeIntrinsicRegistry.cpp:
        (JSC::BytecodeIntrinsicRegistry::BytecodeIntrinsicRegistry):
        * bytecode/BytecodeIntrinsicRegistry.h:
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::toDateTimeOptionsAnyDate):
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        (JSC::IntlDateTimeFormat::resolvedOptions const):
        * runtime/IntlDateTimeFormatPrototype.cpp:
        (JSC::IntlDateTimeFormatPrototype::finishCreation):
        * runtime/OptionsList.h:

2021-08-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Intl.DisplayNames v2
        https://bugs.webkit.org/show_bug.cgi?id=227832

        Reviewed by Ross Kirsling.

        This patch implements Intl.DisplayNames v2[1].
        Newly added names are calendar names and date time field names.
        For the language name, language display option is added.

        [1]: https://github.com/tc39/intl-displaynames-v2

        * runtime/CommonIdentifiers.h:
        * runtime/IntlCache.cpp:
        (JSC::IntlCache::getFieldDisplayName):
        * runtime/IntlCache.h:
        * runtime/IntlDisplayNames.cpp:
        (JSC::IntlDisplayNames::initializeDisplayNames):
        (JSC::IntlDisplayNames::of const):
        (JSC::IntlDisplayNames::resolvedOptions const):
        (JSC::IntlDisplayNames::typeString):
        (JSC::IntlDisplayNames::languageDisplayString):
        * runtime/IntlDisplayNames.h:
        * runtime/IntlObject.cpp:
        (JSC::isUnicodeLocaleIdentifierType):
        (JSC::canonicalizeUnicodeLocaleID):
        (JSC::canonicalizeLocaleList):
        (JSC::defaultLocale):
        (JSC::mapBCP47ToICUCalendarKeyword):
        (JSC::mapICUCollationKeywordToBCP47):
        (JSC::canonicalizeLanguageTag): Deleted.
        * runtime/IntlObject.h:

2021-08-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Intl Locale Info
        https://bugs.webkit.org/show_bug.cgi?id=227830

        Reviewed by Ross Kirsling.

        This patch implements Intl.Locale's extension (Intl Locale Info proposal)[1], which is already stage 3.
        Intl.Locale#{calendars,collations,hourCycles,numberingSystems,timeZones} can return array of preferred
        configuration for the given locale. And Intl.Locale#textInfo can return text layout direction and Intl.Locale#weekInfo
        can return weekday information (e.g. when weekend starts).

        [1]: https://github.com/tc39/proposal-intl-locale-info

        * runtime/IntlLocale.cpp:
        (JSC::createArrayFromStringVector):
        (JSC::IntlLocale::calendars):
        (JSC::IntlLocale::collations):
        (JSC::IntlLocale::hourCycles):
        (JSC::IntlLocale::numberingSystems):
        (JSC::IntlLocale::timeZones):
        (JSC::IntlLocale::textInfo):
        (JSC::IntlLocale::weekInfo):
        * runtime/IntlLocale.h:
        * runtime/IntlLocalePrototype.cpp:
        (JSC::JSC_DEFINE_CUSTOM_GETTER):

2021-08-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Extend Intl TimeZoneName Option
        https://bugs.webkit.org/show_bug.cgi?id=227831

        Reviewed by Ross Kirsling.

        https://github.com/tc39/proposal-intl-extend-timezonename

        This patch implements Extend Intl TimeZoneName proposal, which adds "shortOffset", "longOffset", "shortGeneric", "longGeneric"
        timeZoneName variants.

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::setFormatsFromPattern):
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        (JSC::IntlDateTimeFormat::timeZoneNameString):
        * runtime/IntlDateTimeFormat.h:

2021-08-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Enable String,TypedArray#at
        https://bugs.webkit.org/show_bug.cgi?id=229354

        Reviewed by Saam Barati.

        Enable String and TypedArray's `at` method.

        * runtime/OptionsList.h:

2021-08-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Enable Array#findLast method
        https://bugs.webkit.org/show_bug.cgi?id=229355

        Reviewed by Saam Barati.

        This patch enables Array#findLast and Array#findLastIndex methods.

        * runtime/ArrayPrototype.cpp: Order of unscopables is alphabet ordering (https://tc39.es/ecma262/#sec-array.prototype-@@unscopables)
        (JSC::ArrayPrototype::finishCreation):
        * runtime/OptionsList.h:

2021-08-20  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Simplify moveIntsToDouble
        https://bugs.webkit.org/show_bug.cgi?id=229351

        Reviewed by Saam Barati.

        MacroAssembler::moveIntsToDouble required scratch FPRReg. But it was only required for MacroAssemblerX86, and it is already removed.
        This means that we no longer need this scratch FPRReg. This change makes a lot of IC code, property access code simpler.
        This patch removes that scratch FPRReg, and removed scratch FPRReg of many arithmetic ICs. This patch is important for PutByVal modern
        IC since some of property access requires FPRReg because of MacroAssembler::moveIntsToDouble, and it requires adding new m_scratch2FPR
        to AccessCase. But after this simplification, this is no longer necessary.

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::moveIntsToDouble):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::moveIntsToDouble):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueToInt32):
        (JSC::DFG::SpeculativeJIT::compileDoubleRep):
        (JSC::DFG::SpeculativeJIT::emitUntypedOrBigIntRightShiftBitOp):
        (JSC::DFG::SpeculativeJIT::compileValueAdd):
        (JSC::DFG::SpeculativeJIT::compileValueSub):
        (JSC::DFG::SpeculativeJIT::compileMathIC):
        (JSC::DFG::SpeculativeJIT::compileValueNegate):
        (JSC::DFG::SpeculativeJIT::compileValueMul):
        (JSC::DFG::SpeculativeJIT::speculateRealNumber):
        (JSC::DFG::SpeculativeJIT::compileNormalizeMapKey):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::unboxDouble):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileBinaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitConvertValueToBoolean):
        (JSC::AssemblyHelpers::branchIfValue):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::unboxDoubleNonDestructive):
        (JSC::AssemblyHelpers::unboxDouble):
        * jit/JITAddGenerator.cpp:
        (JSC::JITAddGenerator::generateFastPath):
        * jit/JITAddGenerator.h:
        (JSC::JITAddGenerator::JITAddGenerator):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitRightShiftFastPath):
        (JSC::JIT::emitMathICFast):
        * jit/JITDivGenerator.cpp:
        (JSC::JITDivGenerator::loadOperand):
        * jit/JITMulGenerator.cpp:
        (JSC::JITMulGenerator::generateInline):
        (JSC::JITMulGenerator::generateFastPath):
        * jit/JITMulGenerator.h:
        (JSC::JITMulGenerator::JITMulGenerator):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitFloatTypedArrayPutByVal):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emitGenericContiguousPutByVal):
        * jit/JITRightShiftGenerator.cpp:
        (JSC::JITRightShiftGenerator::generateFastPath):
        * jit/JITRightShiftGenerator.h:
        (JSC::JITRightShiftGenerator::JITRightShiftGenerator):
        * jit/JITSubGenerator.cpp:
        (JSC::JITSubGenerator::generateInline):
        (JSC::JITSubGenerator::generateFastPath):
        * jit/JITSubGenerator.h:
        (JSC::JITSubGenerator::JITSubGenerator):

2021-08-20  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove unnecessary moves in Yarr's sub32 / add32 related code
        https://bugs.webkit.org/show_bug.cgi?id=228813

        Reviewed by Mark Lam.

        This patch adds three operand sub32 to X64 masm so that we can use it in all masms.
        We use add32 and sub32 in YarrJIT to remove unnecessary mov instructions in ARM64.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::sub32):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::sub32):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::sub32):
        * assembler/testmasm.cpp:
        (JSC::testSub32ArgImm):
        * yarr/YarrJIT.cpp:

2021-08-20  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove MacroAssemblerX86
        https://bugs.webkit.org/show_bug.cgi?id=229331

        Reviewed by Mark Lam.

        This patch removes MacroAssemblerX86, which allows simplifying some 32bit MacroAssembler code
        in a subsequent patch.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/MacroAssembler.h:
        * assembler/MacroAssemblerX86.h: Removed.

2021-08-20  Mikhail R. Gadelha  <mikhail@igalia.com>

        Fix DFG compilation of StringCharAt in 32 bits jsc debug build
        https://bugs.webkit.org/show_bug.cgi?id=229293

        Reviewed by Keith Miller.

        In SpeculativeJIT::compileGetByValOnString the format can be either DataFormatJS
        or DataFormatCell so assert either value when compiling it in 32 bits.
        It's the same assert already present in the DFG 64 bits counterpart

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2021-08-20  Mark Lam  <mark.lam@apple.com>

        Add some offlineasm enhancements.
        https://bugs.webkit.org/show_bug.cgi?id=229332
        rdar://82163923

        Reviewed by Keith Miller.

        1. Enhance "include" offlineasm Instruction to always attempt to include an asm
           file from <build-products>/usr/local/include/WebKitAdditions/ first.  If the
           specified file is not available there, then it will attempt to include the file
           from the same directory as the current source file (which in practice, means
           Source/JavaScriptCore/llint/).

        2. Enhance "include" offlineasm Instruction to allow an optional file to be
           included if it exists.  For example, the following offlineasm code:

                include? LowLevelInterpreterAdditions

           ... will attempt to include a file LowLevelInterpreterAdditions.asm.  If the
           file does not exist, this will be a no-op.  Note: the "?" after the "include"
           means the include is optional.

        3. Enhanced "emit" offlineasm Instruction to be able to take more than one operand.

           "emit" used to just copy the string operand that follows into the generated
           LLIntAssembly.h.  Now, "emit" can take multiple comma separated operands, and
           will concatenate all the operands.

           Additionally, "emit" can now take a LocalLabelReference as an operand.  For
           example, this offline asm code:

                   emit "b ", .done
                   ...
                .done:

           ... will generate this inline asm code in LLIntAssembly.h:

                "b " LOCAL_LABEL_STRING(_offlineasm_someLabel_done) "\n"

           This makes it easier to emit branches to local labels.

        4. Also fixed LLInt code alignment for ARM_THUMB2 and ARM64.

           Previously, it was aligned using ".align 4" which means aligned on a 4
           instruction boundary.  Note: the interpretation of .align varies for different
           target CPU architectures.

           Now, we do the alignment using ".balign 4" which means align on a 4 byte
           boundary.  This is the intended alignment because ARM64 instruction size is
           4 bytes, and ARM_THUMB2 instruction size is either 2 bytes or 4 bytes.
           Using .align before was potentially wasting some code space.

        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter.cpp:
        * offlineasm/ast.rb:
        * offlineasm/parser.rb:

2021-08-20  Mark Lam  <mark.lam@apple.com>

        Reduce StructureID entropy bits to 5 to make room for more StructureIDs.
        https://bugs.webkit.org/show_bug.cgi?id=229326
        rdar://60141624

        Reviewed by Yusuke Suzuki.

        * runtime/StructureIDTable.h:

2021-08-19  Tim Nguyen  <ntim@apple.com>

        Implement ::backdrop pseudo element
        https://bugs.webkit.org/show_bug.cgi?id=227801

        Reviewed by Antti Koivisto.

        This adds UA styles, RenderTreeBuilder support and WebInspector support for ::backdrop.
        Some imported blink tests now start passing, some still need proper top layer support.

        * inspector/protocol/CSS.json:

2021-08-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove op_has_indexed_property related code
        https://bugs.webkit.org/show_bug.cgi?id=229271

        Reviewed by Saam Barati.

        After our new for-in protocol, op_has_indexed_property is removed.
        As a result, we can remove many ByValInfo code that is used only
        for op_has_indexed_property.

        * jit/JIT.h:
        * jit/JITInlines.h:
        (JSC::JIT::emitLoadForArrayMode): Deleted.
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileHasIndexedProperty): Deleted.
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileHasIndexedProperty): Deleted.
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitDoubleLoad): Deleted.
        (JSC::JIT::emitContiguousLoad): Deleted.
        (JSC::JIT::emitArrayStorageLoad): Deleted.

2021-08-18  Michael Catanzaro  <mcatanzaro@gnome.org>

        REGRESSION(r280382): [GTK] 2.33.3 does not build with gtk-doc enabled, installs broken pkg-config files
        https://bugs.webkit.org/show_bug.cgi?id=229152

        Reviewed by Philippe Normand.

        * PlatformGTK.cmake:
        * javascriptcoregtk.pc.in:

2021-08-17  Saam Barati  <sbarati@apple.com>

        Add an option for canonicalizePrePostIncrements
        https://bugs.webkit.org/show_bug.cgi?id=229211
        <rdar://problem/82050126>

        Reviewed by Mark Lam.

        The current phase has bugs. Let's disable it for now until the bugs
        are fixed. See discussion about the bugs I spotted in:
        https://bugs.webkit.org/show_bug.cgi?id=228538

        * b3/B3Generate.cpp:
        (JSC::B3::generateToAir):
        * b3/testb3_3.cpp:
        (addShrTests):
        * runtime/OptionsList.h:

2021-08-16  Mark Lam  <mark.lam@apple.com>

        Ensure that unused LLInt opcodes are not inadvertently used.
        https://bugs.webkit.org/show_bug.cgi?id=229161

        Reviewed by Robin Morisset.

        The op macro is used for generating LLInt asm code for some entry points to the
        LLInt, where we don't need 16 bits and 32 bit wide versions of the entry point.
        For example, we use it for llint_program_prologue.

        Note that llint_program_prologue is generated using:

            op(llint_program_prologue, macro () ...

        where op is:

            macro op(l, fn)
                commonOp(l, macro () end, macro (size)
                    size(fn, macro() end, macro() end, macro(gen) gen() end)
                    #        ^            ^----- wide32 generator
                    #        `------------------ wide16 generator
                end)
            end

        Note that the generators for the wide16 and wide32 versions of the entry point
        currently emit nothing.  As a result, if we ever have a bug that ends up
        dispatching to llint_program_prologue_wide16 or llint_program_prologue_wide32,
        we'll end up falling thru to llint_module_program_prologue, which just happens
        to be the entry point positioned after those labels.

        This patch adds breakpoints in those 2 unused generators so that we won't
        inadvertently execute code for something else.

        * llint/LowLevelInterpreter.asm:

2021-08-15  Yijia Huang  <yijia_huang@apple.com>

        [ARM64] Add Pre/Post-Indexed Address Mode to Air for ARM64 (Store Instruction)
        https://bugs.webkit.org/show_bug.cgi?id=228538

        Reviewed by Filip Pizlo.

        The previous patch has introduced the pre/post-index address mode for Load instruction,
        which benefits loop program. Here, this patch adds the corresponding mode for Store
        instruction. Store Register (immediate) stores a word or a doubleword from a register
        to memory. The address that is used for the store is calculated from a base register
        and an immediate offset.

        ######################################
        ## Pre-Index Address Mode For Store ##
        ######################################

        STR Wt, [Xn, #imm]!

        In B3 Reduction Strength, since we have this reduction rule:
            Turns this: Store(value, Add(address, offset1), offset = offset2)
            Into this: Store(value, address, offset = offset1 + offset2)

        The equivalent pattern is:
            address = Add(base, offset)
            ...
            memory = Store(value, base, offset)

        Here, we only consider the pattern:
            address = Add(base, offset)
            memory = Store(value, base, offset)

        And, this patch directly treats it as the canonical form. Ideally, we should move 
        memory to just after the address like what we did for PreIndex Load in the previous 
        patch. But, we cannot provide a better way to do that since the value may be 
        used between address and memory. To move value upward, we must move all descendants 
        of the value along with it to prevent B3 IR index violations, which is risky and expensive.

        Next, lower to Air:
            Move %base, %address
            Move %value, (%address, prefix(offset))

        ######################################
        ## Post-Index Address Mode For Load ##
        ######################################

        STR Wt, [Xn], #imm

        Then, the equivalent pattern is:
            memory = Store(value, base, 0)
            ...
            address = Add(base, offset)

        First, we convert it to the canonical form:
            newOffset = Constant
            newAddress = Add(base, offset)
            memory = Store(value, base, 0) // move the offset and address to just before the memory
            ...
            offset = Identity(newOffset)
            address = Identity(newAddress)

        Next, lower to Air:
            Move %base, %newAddress
            Move %value, (%newAddress, postfix(offset))

        ##############################################
        ## Test for Pre/Post-Increment Address Mode ##
        ##############################################

        B3 IR:
        ------------------------------------------------------
        Int64 b@0 = ArgumentReg(%x0)
        Int64 b@1 = ArgumentReg(%x1)
        Int64 b@2 = Const64(8)
        Int64 b@3 = Add(b@0, $8(b@2))
        Void  b@4 = Store(b@1, b@3, ControlDependent|Writes:Top)
        Void  b@5 = Return(b@3, Terminal)
        ------------------------------------------------------

        W/O Pre-Increment Address Mode:
        ------------------------------------------------------
        Move  %x0, %x2,      b@0
        Add64  $8, %x2, %x0, b@3
        Move  %x1, 8(%x2),   b@4
        Ret64 %x0,           b@5
        ------------------------------------------------------

        W/ Pre-Increment Address Mode:
        ------------------------------------------------------
        MoveWithIncrement64 %x1, (%x0,Pre($8)), b@4
        Ret64               %x0,                b@5
        ------------------------------------------------------


        B3 IR:
        ------------------------------------------------------
        Int64 b@0 = ArgumentReg(%x0)
        Int64 b@1 = ArgumentReg(%x1)
        Void  b@2 = Store(b@1, b@0, ControlDependent|Writes:Top)
        Int64 b@3 = Const64(8)
        Int64 b@4 = Add(b@0, $8(b@3))
        Void  b@5 = Return(b@4, Terminal)
        ------------------------------------------------------

        W/O Post-Increment Address Mode:
        ------------------------------------------------------
        Move  %x1, (%x0),      b@2
        Add64  $8,   %x0, %x0, b@4
        Ret64 %x0,             b@5
        ------------------------------------------------------

        W/ Post-Increment Address Mode:
        ------------------------------------------------------
        MoveWithIncrement64 %x1, (%x0,Post($8)), b@2
        Ret64               %x0,                 b@5
        ------------------------------------------------------

        * b3/B3CanonicalizePrePostIncrements.cpp:
        (JSC::B3::canonicalizePrePostIncrements):
        * b3/B3LowerToAir.cpp:
        * b3/testb3.h:
        * b3/testb3_3.cpp:
        (testStorePreIndex32):
        (testStorePreIndex64):
        (testStorePostIndex32):
        (testStorePostIndex64):
        (addShrTests):

2021-08-13  Keith Miller  <keith_miller@apple.com>

        EnumeratorNextUpdatePropertyName always needs to be able to handle IndexedMode
        https://bugs.webkit.org/show_bug.cgi?id=229087

        Reviewed by Filip Pizlo.

        Right now, this operation incorrectly assumes that EnumeratorNextUpdateIndexAndMode will guarantee
        the mode matches the seen mode set. But no speculation is guaranteed and adding such a guarantee
        would require adding checkpoints, which is likely not worth it. Instead, this patch just makes
        sure we always handle the allocation for IndexedMode.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileEnumeratorNextUpdatePropertyName):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):

2021-08-12  Mark Lam  <mark.lam@apple.com>

        Refactor some ARM64EHash code.
        https://bugs.webkit.org/show_bug.cgi?id=229054

        Reviewed by Keith Miller and Robin Morisset.

        This patch only refactors ARM64EHash code by moving some methods into the private
        section, and removing some unneeded static_casts.

        Verified with a diff of `otool -tv` dumps of the built JavaScriptCore binaries,
        that there are no diffs in the generated code from this change.

        * assembler/AssemblerBuffer.h:
        (JSC::ARM64EHash::ARM64EHash):
        (JSC::ARM64EHash::update):
        (JSC::ARM64EHash::makeDiversifier):
        (JSC::ARM64EHash::nextValue):
        (JSC::ARM64EHash::bitsForDiversifier):
        (JSC::ARM64EHash::currentHash):

2021-08-12  Saam Barati  <sbarati@apple.com>

        Update ARM64EHash
        https://bugs.webkit.org/show_bug.cgi?id=228962
        <rdar://79883337>

        Reviewed by Mark Lam.

        * assembler/AssemblerBuffer.h:
        (JSC::ARM64EHash::makeDiversifier):
        (JSC::ARM64EHash::nextValue):
        (JSC::ARM64EHash::bitsForDiversifier):
        (JSC::ARM64EHash::currentHash):
        (JSC::ARM64EHash::setUpdatedHash):
        (JSC::ARM64EHash::ARM64EHash):
        (JSC::ARM64EHash::update):
        (JSC::ARM64EHash::finalize):
        (JSC::AssemblerBuffer::AssemblerBuffer):
        (JSC::AssemblerBuffer::putIntegralUnchecked):
        (JSC::AssemblerBuffer::hash const):
        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::copyCompactAndLinkCode):

2021-08-11  Yusuke Suzuki  <ysuzuki@apple.com>

        WTFCrash in JSC::Lexer<char16_t>::append8
        https://bugs.webkit.org/show_bug.cgi?id=228982

        Reviewed by Mark Lam.

        sourceURL / sourceMapURL directive should not assume Latin1 characters.

        * parser/Lexer.cpp:
        (JSC::Lexer<T>::parseCommentDirectiveValue):

2021-08-10  Keith Miller  <keith_miller@apple.com>

        CallFrame::returnPC should untag the return address before passing it to ReturnAddressPtr
        https://bugs.webkit.org/show_bug.cgi?id=228931

        Reviewed by Mark Lam.

        Right now current debugging code expects that the JS return PC on
        the stack is already unsigned. This is not true on arm64e.
        This patch now properly unsigns the return PC before passing it to
        the ReturnAddressPC constructor.

        * assembler/MacroAssemblerCodeRef.h:
        (JSC::ReturnAddressPtr::fromTaggedPC):
        * interpreter/AbstractPC.cpp:
        (JSC::AbstractPC::AbstractPC):
        * interpreter/AbstractPC.h:
        (JSC::AbstractPC::AbstractPC):
        (JSC::AbstractPC::jitReturnAddress const):
        * interpreter/CallFrame.h:
        (JSC::CallFrame::returnPC const):

2021-08-10  Kimmo Kinnunen  <kkinnunen@apple.com>

        Scripts/generate-derived-sources.sh: line 19: [: binary operator expected while building Source/WebKit
        https://bugs.webkit.org/show_bug.cgi?id=228908

        Reviewed by Per Arne Vollan.

        * Scripts/generate-derived-sources.sh:
        Quote the use of CC so that future copy-paste does not make the same mistake
        as this bug.

2021-08-09  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] super-Latin1 white space and line terminator after regular expression literal misinterpreted as flags
        https://bugs.webkit.org/show_bug.cgi?id=227944

        Reviewed by Alexey Shvayka.

        There are non-Latin1 white-spaces and line-terminators, but Lexer::scanRegExp's code did not assume that.
        As a result, if there is a non-Latin1 white-spaces or line-terminators after RegExp, we raise SyntaxError
        while this is valid. This patch fixes that.

        * parser/Lexer.cpp:
        (JSC::Lexer<T>::scanRegExp):

2021-08-09  Michael Catanzaro  <mcatanzaro@gnome.org>

        Fix yet another -Wreturn-type warning
        https://bugs.webkit.org/show_bug.cgi?id=228928

        Unreviewed.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByValImpl):

2021-08-09  Yijia Huang  <yijia_huang@apple.com>

        [ARM64] Clean up and fix Pre/Post-Indexed Address Mode to Air for ARM64 (Load Instruction)
        https://bugs.webkit.org/show_bug.cgi?id=228890

        Reviewed by Keith Miller.

        This patch cleans up and does minor fix to the previous patch (https://bugs.webkit.org/show_bug.cgi?id=228047).

        For the modifications in b3/B3Generate.cpp and b3/B3CanonicalizePrePostIncrements.cpp, we
        need to convert post-index candidates to the canonical form. So, the address value needs to
        be moved immediately before the load. This is subject to the dominance constraints that add
        must be controlled equivalent to the load. So, similarly, if we need to move the offset to
        just before the load, the dominance constraints must be satisfied. Since it is a constant
        value, a better approach is to add a new constant value before the memory value. Then,
        eliminate the dead code.

        There is a bug in b3/B3CanonicalizePrePostIncrements.cpp. The insertionSet.execute(BasicBlock)
        will reorder value indexes in the basic block. So, we should re-search for the value index in
        the block every time after the execution.

        In b3/B3LowerToAir.cpp, we need m_locked checks on address and base values. If they are already
        locked, there is no need to convert the Load instruction to the pre/post-increment form.

        * b3/B3CanonicalizePrePostIncrements.cpp:
        (JSC::B3::canonicalizePrePostIncrements):
        * b3/B3Generate.cpp:
        (JSC::B3::generateToAir):
        * b3/B3LowerToAir.cpp:
        * b3/air/AirArg.h:
        (JSC::B3::Air::Arg::isValidIncrementIndexForm):
        (JSC::B3::Air::Arg::isValidForm const):
        (JSC::B3::Air::Arg::isValidPreIndexForm): Deleted.
        (JSC::B3::Air::Arg::isValidPostIndexForm): Deleted.
        * b3/air/opcode_generator.rb:

2021-08-09  Keith Miller  <keith_miller@apple.com>

        Revert bad assert about the number of upsilons going into a phi
        https://bugs.webkit.org/show_bug.cgi?id=228922

        Reviewed by Yusuke Suzuki.

        This assert was invalid because we sometimes emit unreachable phis
        that don't have any incoming upsilons. Specifically for MultiGetByOffset.

        * ftl/FTLOutput.h:
        (JSC::FTL::Output::phi):

2021-08-09  Michael Catanzaro  <mcatanzaro@gnome.org>

        Adding missing REFERENCED_FROM_ASM annotations to facilitate LTO
        https://bugs.webkit.org/show_bug.cgi?id=228865

        Reviewed by Yusuke Suzuki.

        When investigating why WebKitGTK fails to build with LTO (link-time optimization) enabled,
        one of the GCC developers noticed that we are missing __attribute__ (("used")) on several
        C++ functions declared in LLIntSlowPaths.h and WasmSlowPaths.h that are called only from
        asm. Without this attribute, GCC assumes the functions are unused and drops them, then
        linking fails because they really are used.

        * llint/LLIntSlowPaths.h:
        * wasm/WasmSlowPaths.h:

2021-08-07  Michael Catanzaro  <mcatanzaro@gnome.org>

        Fix ODR violations in JSC
        https://bugs.webkit.org/show_bug.cgi?id=228876

        Reviewed by Yusuke Suzuki.

        When built with LTO enabled, GCC will warn about violations of C++'s one-definition rule.
        JSC currently has two violations. The first is JSC::SpeciesConstructResult, which has two
        different declarations, one in ArrayPrototype.cpp and the other in
        JSArrayBufferPrototype.cpp. I decided to change the version in ArrayPrototype.cpp to make
        the declarations match.

        The next problem is JSC::SignalContext. We have two different versions of this struct, one
        in VMTraps.cpp and the other in SigillCrashAnalyzer.cpp. In this case, I decided to change
        the one in VMTraps.cpp from JSC::SignalContext to JSC::VMTraps::SignalContext.

        * runtime/ArrayPrototype.cpp:
        * runtime/VMTraps.cpp:
        (JSC::VMTraps::tryInstallTrapBreakpoints):
        * runtime/VMTraps.h:

2021-08-07  Keith Miller  <keith_miller@apple.com>

        for-in should only emit one loop in bytecode
        https://bugs.webkit.org/show_bug.cgi?id=227989

        Reviewed by Yusuke Suzuki.

        This patch redesigns how we implement for-in loops. Before this patch we would emit three copies of the for-in loop body. One for the indexed properties, one for the named-own properties, and one for generic properties (anything else). This had a couple of problems. Firstly, it meant bytecode size grew exponentially to number of nested for-in loops. This in turn meant DFG/FTL compilation took much longer.

        Going off our experience with fast for-of, this patch turns for-in loops specializations into
        a "fused" opcode that internally switches on the enumeration mode it currently sees. For example, if we are enumerating an own-named property, the new enumerator_get_by_val bytecode will check the enumerator cell's cached structure matches the base's then load the property offset directly.

        There are four new opcodes this patch adds, which replace the various operations we had for the specialized loops previously. The new opcodes are EnumeratorGetByVal, EnumeratorInByVal, EnumeratorHasOwnProperty, and EnumeratorNext. The first three correspond to GetByVal, InByVal, and HasOwnProperty respectively. The EnumeratorNext opcode has three results in bytecode, the next enumeration value's mode, the index of the property name, and the property name string itself. When enumeration is done EnumeratorNext returns JS null as the property name string. Since the DFG doesn't support tuples yet this opcode is spilt into four new nodes. The first computes the updated index and mode for the next enumeration key, which is encoded into a single JS number. Then there are two nodes that extract the mode and index. Finally, the last new node produces the property name string or null based on the extracted mode and index.

        Since, in most benchmarks, any given enumeration opcode tends to profile exactly one enumeration mode. This patch focuses primarily on reimplementing all the optimizations we have for any one specific mode. This means there are still potential optimizations for the multi-mode flavors of each new opcode.

        The main optimizations implemented for each new opcode are:

        EnumeratorNext:
        1) IndexedMode loops are loaded and checked for presence inline (DFG/FTL).
        2) NamedMode is computed inline as long as the cached structure on the enumerator cell matches the base (Baseline+). This can only differ if there's a transition.
        3) property names are extracted from the cached buffer inline (Baseline+).

        EnumeratorGetByVal:
        EnumeratorInByVal:
        EnumeratorHasOwnProperty:
        1) IndexedMode has all the optimizations of a normal XByVal on indexed properties (DFG/FTL).
        2) NamedMode will extract the value directly from the inline/out-of-line offset if the structure matches the enumerator's (Baseline+).

        There are also a few interesting changes worth mentioning here:
        1) If a for-in loop would produce an empty enumerator we now always
        return the VMs empty enumerator. This has two benefits, most importantly, it distingishes between an unprofiled for-in loop and empty enumeration, which prevents OSR exit loops. Also, it means that the various Enumerator opcodes no longer need to handle undefined/null when `toObject`ing the base value.

        2) The enumerator now contains a bit set of all the modes it will produce. This removes a few extra branches when speculating on the modes we will see in EnumeratorNext.

        3) In the DFG, enumerator GetByVal relies on compileGetByVal to set the result it also passes a prefix callback which emits code after the various cases set up their operands but before code is emitting to help satisfy the branch over register allocation validation. Also, the array mode branch in compileGetByVal passes the data format that it would prefer, which for normal GetByVal is returned. For EnumeratorGetByVal, that preference is completely ignored and it always returns DataFormatJS.

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::or8):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::or8):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::rshift64):
        (JSC::MacroAssemblerX86_64::or8): Deleted.
        * builtins/BuiltinNames.h:
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        * bytecode/LinkTimeConstant.h:
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::recordHasOwnPropertyInForInLoop):
        (JSC::BytecodeGenerator::emitInByVal):
        (JSC::BytecodeGenerator::emitGetByVal):
        (JSC::BytecodeGenerator::emitEnumeratorNext):
        (JSC::BytecodeGenerator::emitEnumeratorHasOwnProperty):
        (JSC::BytecodeGenerator::pushForInScope):
        (JSC::BytecodeGenerator::popForInScope):
        (JSC::rewriteOp):
        (JSC::ForInContext::finalize):
        (JSC::BytecodeGenerator::findForInContext):
        (JSC::BytecodeGenerator::recordHasOwnStructurePropertyInForInLoop): Deleted.
        (JSC::BytecodeGenerator::emitGetEnumerableLength): Deleted.
        (JSC::BytecodeGenerator::emitHasEnumerableIndexedProperty): Deleted.
        (JSC::BytecodeGenerator::emitHasEnumerableStructureProperty): Deleted.
        (JSC::BytecodeGenerator::emitHasEnumerableProperty): Deleted.
        (JSC::BytecodeGenerator::emitHasOwnStructureProperty): Deleted.
        (JSC::BytecodeGenerator::emitEnumeratorStructurePropertyName): Deleted.
        (JSC::BytecodeGenerator::emitEnumeratorGenericPropertyName): Deleted.
        (JSC::BytecodeGenerator::emitToIndexString): Deleted.
        (JSC::BytecodeGenerator::pushIndexedForInScope): Deleted.
        (JSC::BytecodeGenerator::popIndexedForInScope): Deleted.
        (JSC::BytecodeGenerator::pushStructureForInScope): Deleted.
        (JSC::BytecodeGenerator::popStructureForInScope): Deleted.
        (JSC::StructureForInContext::finalize): Deleted.
        (JSC::IndexedForInContext::finalize): Deleted.
        (JSC::BytecodeGenerator::findStructureForInContext): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        (JSC::ForInContext::isValid const):
        (JSC::ForInContext::invalidate):
        (JSC::ForInContext::local const):
        (JSC::ForInContext::propertyName const):
        (JSC::ForInContext::propertyOffset const):
        (JSC::ForInContext::enumerator const):
        (JSC::ForInContext::mode const):
        (JSC::ForInContext::ForInContext):
        (JSC::ForInContext::bodyBytecodeStartOffset const):
        (JSC::ForInContext::type const): Deleted.
        (JSC::ForInContext::isIndexedForInContext const): Deleted.
        (JSC::ForInContext::isStructureForInContext const): Deleted.
        (JSC::ForInContext::asIndexedForInContext): Deleted.
        (JSC::ForInContext::asStructureForInContext): Deleted.
        (JSC::StructureForInContext::StructureForInContext): Deleted.
        (JSC::StructureForInContext::index const): Deleted.
        (JSC::StructureForInContext::property const): Deleted.
        (JSC::StructureForInContext::enumerator const): Deleted.
        (JSC::StructureForInContext::baseVariable const): Deleted.
        (JSC::StructureForInContext::addGetInst): Deleted.
        (JSC::StructureForInContext::addInInst): Deleted.
        (JSC::StructureForInContext::addHasOwnPropertyJump): Deleted.
        (JSC::IndexedForInContext::IndexedForInContext): Deleted.
        (JSC::IndexedForInContext::index const): Deleted.
        (JSC::IndexedForInContext::addGetInst): Deleted.
        * bytecompiler/NodesCodegen.cpp:
        (JSC::HasOwnPropertyFunctionCallDotNode::emitBytecode):
        (JSC::ForInNode::emitBytecode):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGArrayMode.h:
        (JSC::DFG::ArrayMode::isSaneChain const):
        * dfg/DFGBackwardsPropagationPhase.cpp:
        (JSC::DFG::BackwardsPropagationPhase::propagate):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCFAPhase.cpp:
        (JSC::DFG::CFAPhase::injectOSR):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::setJSArraySaneChainIfPossible):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGIntegerRangeOptimizationPhase.cpp:
        * dfg/DFGMayExit.cpp:
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasHeapPrediction):
        (JSC::DFG::Node::hasStorageChild const):
        (JSC::DFG::Node::storageChildIndex):
        (JSC::DFG::Node::hasArrayMode):
        (JSC::DFG::Node::hasEnumeratorMetadata const):
        (JSC::DFG::Node::enumeratorMetadata):
        * dfg/DFGNodeType.h:
        * dfg/DFGOpInfo.h:
        (JSC::DFG::OpInfo::OpInfo):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSSALoweringPhase.cpp:
        (JSC::DFG::SSALoweringPhase::handleNode):
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::JSValueRegsTemporary::JSValueRegsTemporary):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
        (JSC::DFG::SpeculativeJIT::setIntTypedArrayLoadResult):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
        (JSC::DFG::SpeculativeJIT::compileGetByValForObjectWithString):
        (JSC::DFG::SpeculativeJIT::compileGetByValForObjectWithSymbol):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnDirectArguments):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnScopedArguments):
        (JSC::DFG::SpeculativeJIT::compileEnumeratorNextUpdateIndexAndMode):
        (JSC::DFG::SpeculativeJIT::compileEnumeratorNextExtractIndex):
        (JSC::DFG::SpeculativeJIT::compileEnumeratorNextExtractMode):
        (JSC::DFG::SpeculativeJIT::compileEnumeratorNextUpdatePropertyName):
        (JSC::DFG::SpeculativeJIT::compileEnumeratorGetByVal):
        (JSC::DFG::SpeculativeJIT::compileEnumeratorHasProperty):
        (JSC::DFG::SpeculativeJIT::compileEnumeratorInByVal):
        (JSC::DFG::SpeculativeJIT::compileEnumeratorHasOwnProperty):
        (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty):
        (JSC::DFG::SpeculativeJIT::compileGetEnumerableLength): Deleted.
        (JSC::DFG::SpeculativeJIT::compileHasEnumerableProperty): Deleted.
        (JSC::DFG::SpeculativeJIT::compileToIndexString): Deleted.
        (JSC::DFG::SpeculativeJIT::compileHasEnumerableStructureProperty): Deleted.
        (JSC::DFG::SpeculativeJIT::compileHasOwnStructurePropertyImpl): Deleted.
        (JSC::DFG::SpeculativeJIT::compileHasOwnStructureProperty): Deleted.
        (JSC::DFG::SpeculativeJIT::compileInStructureProperty): Deleted.
        (JSC::DFG::SpeculativeJIT::compileGetEnumeratorPname): Deleted.
        (JSC::DFG::SpeculativeJIT::compileGetDirectPname): Deleted.
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::allocate):
        (JSC::DFG::JSValueOperand::regs):
        (JSC::DFG::JSValueOperand::gpr):
        (JSC::DFG::StorageOperand::StorageOperand):
        (JSC::DFG::StorageOperand::~StorageOperand):
        (JSC::DFG::StorageOperand::emplace):
        (JSC::DFG::JSValueRegsTemporary::operator bool):
        (JSC::DFG::JSValueRegsTemporary::JSValueRegsTemporary):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetByVal):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetByVal):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGTypeCheckHoistingPhase.cpp:
        (JSC::DFG::TypeCheckHoistingPhase::identifyRedundantStructureChecks):
        (JSC::DFG::TypeCheckHoistingPhase::identifyRedundantArrayChecks):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByValImpl):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAtImpl):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt):
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * ftl/FTLOutput.h:
        (JSC::FTL::Output::phi):
        * generator/DSL.rb:
        * interpreter/Register.h:
        * interpreter/RegisterInlines.h:
        (JSC::Register::operator=):
        * jit/AssemblyHelpers.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileHasIndexedProperty):
        (JSC::JIT::emit_op_has_structure_propertyImpl): Deleted.
        (JSC::JIT::emit_op_has_enumerable_structure_property): Deleted.
        (JSC::JIT::emit_op_has_own_structure_property): Deleted.
        (JSC::JIT::emit_op_in_structure_property): Deleted.
        (JSC::JIT::emit_op_has_enumerable_indexed_property): Deleted.
        (JSC::JIT::emitSlow_op_has_enumerable_indexed_property): Deleted.
        (JSC::JIT::emit_op_get_direct_pname): Deleted.
        (JSC::JIT::emit_op_enumerator_structure_pname): Deleted.
        (JSC::JIT::emit_op_enumerator_generic_pname): Deleted.
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileHasIndexedProperty):
        (JSC::JIT::emit_op_has_structure_propertyImpl): Deleted.
        (JSC::JIT::emit_op_has_enumerable_structure_property): Deleted.
        (JSC::JIT::emit_op_has_own_structure_property): Deleted.
        (JSC::JIT::emit_op_in_structure_property): Deleted.
        (JSC::JIT::emit_op_has_enumerable_indexed_property): Deleted.
        (JSC::JIT::emitSlow_op_has_enumerable_indexed_property): Deleted.
        (JSC::JIT::emit_op_get_direct_pname): Deleted.
        (JSC::JIT::emit_op_enumerator_structure_pname): Deleted.
        (JSC::JIT::emit_op_enumerator_generic_pname): Deleted.
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::generateGetByValSlowCase):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_enumerator_next):
        (JSC::JIT::emit_op_enumerator_get_by_val):
        (JSC::JIT::emitSlow_op_enumerator_get_by_val):
        (JSC::JIT::emit_enumerator_has_propertyImpl):
        (JSC::JIT::emit_op_enumerator_in_by_val):
        (JSC::JIT::emit_op_enumerator_has_own_property):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_enumerator_next):
        (JSC::JIT::emit_op_enumerator_get_by_val):
        (JSC::JIT::emitSlow_op_enumerator_get_by_val):
        (JSC::JIT::emit_op_enumerator_in_by_val):
        (JSC::JIT::emit_op_enumerator_has_own_property):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::JSC_DEFINE_COMMON_SLOW_PATH):
        * runtime/CommonSlowPaths.h:
        * runtime/FileBasedFuzzerAgent.cpp:
        (JSC::FileBasedFuzzerAgent::getPredictionInternal):
        * runtime/FileBasedFuzzerAgentBase.cpp:
        (JSC::FileBasedFuzzerAgentBase::opcodeAliasForLookupKey):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSPropertyNameEnumerator.cpp:
        (JSC::JSPropertyNameEnumerator::JSPropertyNameEnumerator):
        (JSC::JSPropertyNameEnumerator::computeNext):
        * runtime/JSPropertyNameEnumerator.h:
        (JSC::propertyNameEnumerator):
        * runtime/PredictionFileCreatingFuzzerAgent.cpp:
        (JSC::PredictionFileCreatingFuzzerAgent::getPredictionInternal):

2021-08-06  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix on Debug build
        https://bugs.webkit.org/show_bug.cgi?id=228810

        * yarr/YarrJIT.h:
        (JSC::Yarr::BoyerMooreBitmap::addCharacters):
        (JSC::Yarr::BoyerMooreBitmap::addRanges):

2021-08-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Yarr's character tracking for BoyerMoore search should be more precise
        https://bugs.webkit.org/show_bug.cgi?id=228810

        Reviewed by Saam Barati.

        We should track up to 2 candidate characters without masking, so
        that we can search a character without masking. To track candidates,
        we introduce BoyerMooreCharacterCandidates.

        We also add support for m_table because m_table can be used
        for important CharacterClass like `\s`, and still that does not have
        many character candidates if the mode is Char8.

        To make `\s` work on Char8 case, we use Char8 / Char16 information
        to filter characters that never appears in BoyreMoore search bitmap
        construction.

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::BoyerMooreInfo::BoyerMooreInfo):
        (JSC::Yarr::BoyerMooreInfo::set):
        (JSC::Yarr::BoyerMooreInfo::addCharacters):
        (JSC::Yarr::BoyerMooreInfo::addRanges):
        (JSC::Yarr::BoyerMooreInfo::create):
        (JSC::Yarr::BoyerMooreInfo::createCandidateBitmap const):
        * yarr/YarrJIT.h:
        (JSC::Yarr::BoyerMooreCharacterCandidates::isValid const):
        (JSC::Yarr::BoyerMooreCharacterCandidates::invalidate):
        (JSC::Yarr::BoyerMooreCharacterCandidates::isEmpty const):
        (JSC::Yarr::BoyerMooreCharacterCandidates::size const):
        (JSC::Yarr::BoyerMooreCharacterCandidates::at const):
        (JSC::Yarr::BoyerMooreCharacterCandidates::add):
        (JSC::Yarr::BoyerMooreCharacterCandidates::merge):
        (JSC::Yarr::BoyerMooreBitmap::characterCandidates const):
        (JSC::Yarr::BoyerMooreBitmap::add):
        (JSC::Yarr::BoyerMooreBitmap::addCharacters):
        (JSC::Yarr::BoyerMooreBitmap::addRanges):
        (JSC::Yarr::BoyerMooreBitmap::isMaskEffective const): Deleted.

2021-08-05  Mikhail R. Gadelha  <mikhail@igalia.com>

        Assertion failure when checking array in DFG (32 bits)
        https://bugs.webkit.org/show_bug.cgi?id=228839

        Reviewed by Yusuke Suzuki.

        Since empty values don't pass the cell check in 32 bits, we need to
        guard the SpecEmpty check to only happen in 64 bits archs

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::checkArray):

2021-08-05  Robin Morisset  <rmorisset@apple.com>

        REGRESSION (r280507): ASSERTION FAILED: !undominatedPhis.contains(value) in JSC::B3::(anonymous namespace)::Validater::validatePhisAreDominatedByUpsilons()
        https://bugs.webkit.org/show_bug.cgi?id=228838
        <rdar://problem/81579314>

        Reviewed by Geoffrey Garen.

        When I added validation of the dominance of Phis by their Upsilons, I checked two things:
        - There is no path from the entry point to a Phi without going through a corresponding Upsilon (the actual dominance check)
        - There is no way to execute a Phi twice without going through a corresponding Upsilon in between
        The second property is not actually true in B3 IR, I had misunderstood that part of the meaning of Phis/Upsilons.
        So this patch just removes this second check.

        It has no security/stability/performance implication: this is validation code, which runs automatically in debug mode, but should not run at all on customer machines.

        * b3/B3Validate.cpp:

2021-08-05  Michael Catanzaro  <mcatanzaro@gnome.org>

        GCC 11 builds should use -Wno-array-bounds, -Wno-nonnull
        https://bugs.webkit.org/show_bug.cgi?id=228601

        Reviewed by Carlos Garcia Campos.

        * b3/air/AirAllocateRegistersByGraphColoring.cpp:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):

2021-08-05  Zan Dobersek  <zdobersek@igalia.com>

        Use reinterpret_cast_ptr in KeywordLookupGenerator, PropertyMapHashTable
        https://bugs.webkit.org/show_bug.cgi?id=228819

        Reviewed by Adrian Perez de Castro.

        Switch to using reinterpret_cast_ptr in KeywordLookupGenerator (which
        generates the KeywordLookup.h header) and PropertyMapHashTable, reducing
        a bit the GCC warning spewage when compiling for targets benefitting
        from the reinterpret_cast_ptr workaround.

        * KeywordLookupGenerator.py:
        * runtime/PropertyMapHashTable.h:
        (JSC::PropertyTable::table):
        (JSC::PropertyTable::table const):

2021-08-04  Yijia Huang  <yijia_huang@apple.com>

        [ARM64] Fix Zoom black screen during video meeting on Safari
        https://bugs.webkit.org/show_bug.cgi?id=228776

        Reviewed by Saam Barati.

        The problem (rdar://81434487) reports that Zoom turns to a black screen during the video 
        meeting on Safari. The reproduction of this problem is verified and bisected to the previous patch
        (https://bugs.webkit.org/show_bug.cgi?id=228057). Previously, we introduce a pattern 
        matching for instruction EON-with-shift on ARM64, where the pattern is d = n ^ ((m ShiftType amount) ^ -1).

            x = m ShiftType amount
            y = x ^ -1
            z = n ^ y

        We check canBeInternal() on x but not on y based on the computing cost analysis in that patch, 
        which is totally wrong. If the pattern matching is triggered, then the compiler would not emit 
        the corresponding Air of x after lowering, leading to data corruption or system crash since y 
        depends on x.

        In the real world example (Zoom video meeting), we find the B3 IR:

            ...
            Int32 b@528 = SShr(b@526, $31(b@527), Wasm: {opcode: I32ShrS, location: 0x26b})
            Int32 b@529 = BitXor(b@528, $-1(b@144), Wasm: {opcode: I32Xor, location: 0x26e})
            ...
            Int32 b@551 = BitXor(b@446, b@529, Wasm: {opcode: I32Xor, location: 0x28e})
            ...


        After Lowering to Air:

            ...
            Not32 %fp, %x2, b@529
            ...
            XorNotRightShift32 %tmp199, %tmp211, $31, %tmp209, b@551
            ...

        Since the implementation of the previous patch does commitInternal() on b@528, the operand of 
        b@529 turns to a frame pointer. To resolve this problem, we should either check canBeInternal() 
        on both b@528 and b@529 or not at all.

        * b3/B3LowerToAir.cpp:

2021-08-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r280609.
        https://bugs.webkit.org/show_bug.cgi?id=228791

        Broke JSC tests on iOS.

        Reverted changeset:

        "[ARM64] Use link register instead of pinning a register for
        materializing big load constants"
        https://bugs.webkit.org/show_bug.cgi?id=228710
        https://commits.webkit.org/r280609

2021-08-03  Yijia Huang  <yijia_huang@apple.com>

        [ARM64] Use link register instead of pinning a register for materializing big load constants
        https://bugs.webkit.org/show_bug.cgi?id=228710

        Reviewed by Mark Lam.

        Previously, we pin a register as a temp for materializing a large constant that cannot fit in
        Load/Store imm form. This is not efficient since the register allocator has one less register
        to allocate from. To solve this problem, we should switch to using the link register as the temp
        on ARM64.

        * b3/B3Common.cpp:
        (JSC::B3::linkRegister):
        (JSC::B3::pinnedExtendedOffsetAddrRegister): Deleted.
        * b3/B3Common.h:
        * b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp:
        (JSC::B3::Air::callFrameAddr):
        * b3/air/AirCode.cpp:
        (JSC::B3::Air::Code::Code):
        * b3/air/AirLowerStackArgs.cpp:
        (JSC::B3::Air::lowerStackArgs):

2021-08-02  Yijia Huang  <yijia_huang@apple.com>

        Add a new pattern to instruction selector to utilize UMULL supported by ARM64
        https://bugs.webkit.org/show_bug.cgi?id=228721

        Reviewed by Saam Barati.

        Unsigned Multiply Long (UMULL) multiplies two 32-bit register values, and writes the 
        result to the destination register. This instruction is an alias of the UMADDL instruction.

            umull xd wn wm

        The equivalent pattern is: d = ZExt32(n) * ZExt32(m)

        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = Trunc(@0)
        Int @2 = ArgumentReg(%x1)
        Int @3 = Trunc(@2)
        Int @4 = ZExt32(@1)
        Int @5 = ZExt32(@3)
        Int @6 = Mul(@4, @5)
        Void@7 = Return(@6, Terminal)

        // Old optimized AIR
        Move   %x0, %x0,      @4
        Move   %x1, %x1,      @5
        Mul    %x0, %x1, %x0, @6
        Ret    %x0,           @7

        // New optimized AIR
        MultiplyZeroExtend %x0, %x1, %x0, @6
        Ret                %x0,           @7

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::multiplyZeroExtend32):
        * assembler/testmasm.cpp:
        (JSC::testMultiplyZeroExtend32):
        * b3/B3LowerToAir.cpp:
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.h:
        * b3/testb3_2.cpp:
        (testMulArgs32SignExtend):
        (testMulArgs32ZeroExtend):
        * b3/testb3_3.cpp:
        (addArgTests):

2021-08-02  Yijia Huang  <yijia_huang@apple.com>

        Add new patterns to instruction selector to utilize AND/EOR/ORR-with-shift supported by ARM64
        https://bugs.webkit.org/show_bug.cgi?id=228675

        Reviewed by Saam Barati.

        Bitwise AND (shifted register) performs a bitwise AND of a register value and an optionally-shifted 
        register value, and writes the result to the destination register.

            and wd wn wm ShiftType #amount

        The equivalent pattern is: n & (m ShiftType amount)

        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = ArgumentReg(%x1)
        Int @2 = Const32(63)
        Int @3 = Shl(@1, $63(@2))
        Int @4 = BitAnd(@0, @3)
        Void@5 = Return(@4, Terminal)

        // Old optimized AIR
        Lshift %x1, $63, %x1, @3
        And    %x0, %x1, %x0, @4
        Ret    %x0,           @5

        // New optimized AIR
        AndLeftShift %x0, %x1, $63, %x0, @4
        Ret          %x0,                @5

        Bitwise Exclusive OR (shifted register) performs a bitwise Exclusive OR of a register value and an 
        optionally-shifted register value, and writes the result to the destination register.

            eor wd wn wm ShiftType #amount

        The equivalent pattern is: n ^ (m ShiftType amount)

        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = ArgumentReg(%x1)
        Int @2 = Const32(63)
        Int @3 = Shl(@1, $63(@2))
        Int @4 = BitXor(@0, @3)
        Void@5 = Return(@4, Terminal)

        // Old optimized AIR
        Lshift %x1, $63, %x1, @3
        Xor    %x0, %x1, %x0, @4
        Ret    %x0,           @5

        // New optimized AIR
        XorLeftShift %x0, %x1, $63, %x0, @4
        Ret          %x0,                @5

        Bitwise OR (shifted register) performs a bitwise (inclusive) OR of a register value and an 
        optionally-shifted register value, and writes the result to the destination register.

            orr wd wn wm ShiftType #amount

        The equivalent pattern is: n | (m ShiftType amount)

        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = ArgumentReg(%x1)
        Int @2 = Const32(63)
        Int @3 = Shl(@1, $63(@2))
        Int @4 = BitOr(@0, @3)
        Void@5 = Return(@4, Terminal)

        // Old optimized AIR
        Lshift %x1, $63, %x1, @3
        Or     %x0, %x1, %x0, @4
        Ret    %x0,           @5

        // New optimized AIR
        OrLeftShift %x0, %x1, $63, %x0, @4
        Ret         %x0,                @5

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::andLeftShift32):
        (JSC::MacroAssemblerARM64::andRightShift32):
        (JSC::MacroAssemblerARM64::andUnsignedRightShift32):
        (JSC::MacroAssemblerARM64::andLeftShift64):
        (JSC::MacroAssemblerARM64::andRightShift64):
        (JSC::MacroAssemblerARM64::andUnsignedRightShift64):
        (JSC::MacroAssemblerARM64::xorLeftShift32):
        (JSC::MacroAssemblerARM64::xorRightShift32):
        (JSC::MacroAssemblerARM64::xorUnsignedRightShift32):
        (JSC::MacroAssemblerARM64::xorLeftShift64):
        (JSC::MacroAssemblerARM64::xorRightShift64):
        (JSC::MacroAssemblerARM64::xorUnsignedRightShift64):
        (JSC::MacroAssemblerARM64::orLeftShift32):
        (JSC::MacroAssemblerARM64::orRightShift32):
        (JSC::MacroAssemblerARM64::orUnsignedRightShift32):
        (JSC::MacroAssemblerARM64::orLeftShift64):
        (JSC::MacroAssemblerARM64::orRightShift64):
        (JSC::MacroAssemblerARM64::orUnsignedRightShift64):
        * assembler/testmasm.cpp:
        (JSC::testAndLeftShift32):
        (JSC::testAndRightShift32):
        (JSC::testAndUnsignedRightShift32):
        (JSC::testAndLeftShift64):
        (JSC::testAndRightShift64):
        (JSC::testAndUnsignedRightShift64):
        (JSC::testXorLeftShift32):
        (JSC::testXorRightShift32):
        (JSC::testXorUnsignedRightShift32):
        (JSC::testXorLeftShift64):
        (JSC::testXorRightShift64):
        (JSC::testXorUnsignedRightShift64):
        (JSC::testOrLeftShift32):
        (JSC::testOrRightShift32):
        (JSC::testOrUnsignedRightShift32):
        (JSC::testOrLeftShift64):
        (JSC::testOrRightShift64):
        (JSC::testOrUnsignedRightShift64):
        * b3/B3LowerToAir.cpp:
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.h:
        * b3/testb3_2.cpp:
        (testAndLeftShift32):
        (testAndRightShift32):
        (testAndUnsignedRightShift32):
        (testAndLeftShift64):
        (testAndRightShift64):
        (testAndUnsignedRightShift64):
        (testXorLeftShift32):
        (testXorRightShift32):
        (testXorUnsignedRightShift32):
        (testXorLeftShift64):
        (testXorRightShift64):
        (testXorUnsignedRightShift64):
        (testOrLeftShift32):
        (testOrRightShift32):
        (testOrUnsignedRightShift32):
        (testOrLeftShift64):
        (testOrRightShift64):
        (testOrUnsignedRightShift64):
        (addBitTests):

2021-08-02  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use loadPair / storePair in YarrJIT
        https://bugs.webkit.org/show_bug.cgi?id=228687

        Reviewed by Mark Lam.

        Use loadPair / storePair if possible in YarrJIT. Currently, we are not
        deploying Spooler in YarrJIT, but we should do that in the future too.

        In this patch, we also add appropriate fallback code in loadPair / storePair:
        the offset of these functions are small enough so that we should consider
        overflowing case. If it overflows, we use two loads or stores.

        This patch also adds loadPair32 and storePair32 to all macro assembler so that
        we can call it without CPU(ARM64). Internally, two loads or stores are combined.

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::loadPair32):
        (JSC::MacroAssemblerARM64::loadPair64):
        (JSC::MacroAssemblerARM64::loadPair64WithNonTemporalAccess):
        (JSC::MacroAssemblerARM64::storePair32):
        (JSC::MacroAssemblerARM64::storePair64):
        (JSC::MacroAssemblerARM64::storePair64WithNonTemporalAccess):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::loadPair32):
        (JSC::MacroAssemblerARMv7::storePair32):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::loadPair32):
        (JSC::MacroAssemblerMIPS::storePair32):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::loadPair32):
        (JSC::MacroAssemblerX86Common::storePair32):
        * assembler/testmasm.cpp:
        (JSC::testLoadStorePair32):
        (JSC::testLoadStorePair64Int64):
        * yarr/YarrJIT.cpp:

2021-08-02  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix accidental narrowing
        https://bugs.webkit.org/show_bug.cgi?id=228613

        Note that this narrowing does not matter semantically since we mask this value with 0x7f.

        * yarr/YarrJIT.h:
        (JSC::Yarr::BoyerMooreBitmap::addCharacters):

2021-08-02  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Yarr BoyerMoore search should support character-class
        https://bugs.webkit.org/show_bug.cgi?id=228613

        Reviewed by Saam Barati.

        This patch adds character-class support for BoyerMoore lookahead search in Yarr.
        Currently, we only support fixed-sized character-class. We can extend it for repeat cases in the future.

        To apply this character-class thing to jQuery's RegExp, we also allow non-fixed-sized disjunction.
        For example, /aaaa.*|bbbb/'s disjunction is not fixed-sized. But still we can use (aaaa|bbbb) prefix since
        this part is fixed-sized and we know minimum-size of this disjunction is 4.

        Plus, instead of giving up BoyerMoore search when we found non-supported terms, we shorten BoyerMoore search
        length not to include this term so that we can still have a chance to leverage BoyerMoore search. In the case
        of /aaaa|bbbb|ccc(d|e|f)/, we previously gave up since it finds `(d|e|f)`. But now, instead we shorten the length
        from 4 to 3, and construct search pattern with `aaa|bbb|ccc`.

        This patch improves jquery-todomvc-regexp by 20%.

                                              ToT                     Patched

            jquery-todomvc-regexp      545.3561+-0.6968     ^    451.6117+-0.4613        ^ definitely 1.2076x faster

        This improves Speedometer2/jQuery-TodoMVC by 2%.

            ----------------------------------------------------------------------------------------------------------------------------------
            |               subtest                |     ms      |     ms      |  b / a   | pValue (significance using False Discovery Rate) |
            ----------------------------------------------------------------------------------------------------------------------------------
            | Elm-TodoMVC                          |123.470833   |123.550000   |1.000641  | 0.841600                                         |
            | VueJS-TodoMVC                        |26.883333    |26.950000    |1.002480  | 0.846732                                         |
            | EmberJS-TodoMVC                      |127.708333   |127.754167   |1.000359  | 0.934206                                         |
            | BackboneJS-TodoMVC                   |50.545833    |50.445833    |0.998022  | 0.679610                                         |
            | Preact-TodoMVC                       |20.879167    |20.791667    |0.995809  | 0.796541                                         |
            | AngularJS-TodoMVC                    |137.479167   |137.275000   |0.998515  | 0.729817                                         |
            | Vanilla-ES2015-TodoMVC               |69.079167    |68.912500    |0.997587  | 0.524325                                         |
            | Inferno-TodoMVC                      |65.604167    |66.120833    |1.007876  | 0.145549                                         |
            | Flight-TodoMVC                       |77.029167    |76.708333    |0.995835  | 0.518562                                         |
            | Angular2-TypeScript-TodoMVC          |40.516667    |40.812500    |1.007302  | 0.513386                                         |
            | VanillaJS-TodoMVC                    |54.762500    |54.895833    |1.002435  | 0.647381                                         |
            | jQuery-TodoMVC                       |255.950000   |250.425000   |0.978414  | 0.000000 (significant)                           |
            | EmberJS-Debug-TodoMVC                |341.745833   |342.804167   |1.003097  | 0.219937                                         |
            | React-TodoMVC                        |88.854167    |88.700000    |0.998265  | 0.568405                                         |
            | React-Redux-TodoMVC                  |151.266667   |150.804167   |0.996942  | 0.256403                                         |
            | Vanilla-ES2015-Babel-Webpack-TodoMVC |65.783333    |65.645833    |0.997910  | 0.437464                                         |
            ----------------------------------------------------------------------------------------------------------------------------------
            a mean = 246.52898
            b mean = 246.85128
            pValue = 0.3927330278
            (Bigger means are better.)
            1.001 times better
            Results ARE NOT significant

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::BoyerMooreInfo::shortenLength):
        (JSC::Yarr::BoyerMooreInfo::setAll):
        (JSC::Yarr::BoyerMooreInfo::addCharacters):
        (JSC::Yarr::BoyerMooreInfo::addRanges):
        * yarr/YarrJIT.h:
        (JSC::Yarr::BoyerMooreBitmap::add):
        (JSC::Yarr::BoyerMooreBitmap::addCharacters):
        (JSC::Yarr::BoyerMooreBitmap::addRanges):
        (JSC::Yarr::BoyerMooreBitmap::setAll):
        (JSC::Yarr::BoyerMooreBitmap::isAllSet const):

2021-08-02  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Make C files in testapi compile with a C standard rather than C++ one
        https://bugs.webkit.org/show_bug.cgi?id=228701

        Reviewed by Ross Kirsling.

        * shell/PlatformPlayStation.cmake: Set standard for C files in testapi

2021-08-02  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Yarr should use Bitmap instead of ByteVector for BoyerMoore search
        https://bugs.webkit.org/show_bug.cgi?id=228676

        Reviewed by Saam Barati.

        We observed that using Bitmap instead of ByteVector does not pose performance
        issue. It was neutral in jquery-todomvc-regexp.js. In that case, we should use
        Bitmap since it is 8x smaller.

        We also search reusable Bitmap from Vector since comparing 128bit Bitmap is
        super fast so we do not need to bother about linear search here (# of Bitmap
        is currently up to 4).

        To make code simplified, we add regT2 to ARMv7 and MIPS backend of YarrJIT.

                                              ToT                     Patched

            jquery-todomvc-regexp      555.9566+-0.8856          555.0737+-0.9717

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::BoyerMooreInfo::index const): Deleted.
        (JSC::Yarr::BoyerMooreInfo::setIndex): Deleted.
        * yarr/YarrJIT.h:
        (JSC::Yarr::YarrCodeBlock::set8BitCode):
        (JSC::Yarr::YarrCodeBlock::set16BitCode):
        (JSC::Yarr::YarrCodeBlock::set8BitCodeMatchOnly):
        (JSC::Yarr::YarrCodeBlock::set16BitCodeMatchOnly):
        (JSC::Yarr::YarrCodeBlock::tryReuseBoyerMooreBitmap const):
        (JSC::Yarr::BoyerMooreByteVector::BoyerMooreByteVector): Deleted.
        (JSC::Yarr::YarrCodeBlock::tryReuseBoyerMooreByteVector const): Deleted.

2021-07-31  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Move JIT_UNICODE_EXPRESSIONS to ENABLE(YARR_JIT_UNICODE_EXPRESSIONS) in PlatformEnable.h
        https://bugs.webkit.org/show_bug.cgi?id=228669

        Reviewed by Alexey Shvayka.

        Move JIT_UNICODE_EXPRESSIONS to PlatformEnable.h to align to the other YarrJIT flags.
        This makes it easy to read that this is enabled on ARM64 and X86_64.

        * yarr/YarrJIT.cpp:

2021-07-31  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Clean up Yarr by using `static constexpr`
        https://bugs.webkit.org/show_bug.cgi?id=228678

        Reviewed by Alexey Shvayka.

        Modernize Yarr code by using static constexpr.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::TrustedImm32::TrustedImm32):
        * yarr/YarrCanonicalizeUCS2.cpp:
        * yarr/YarrCanonicalizeUCS2.js:
        (set characters.hex.set string_appeared_here):
        * yarr/YarrErrorCode.cpp:
        (JSC::Yarr::errorMessage):
        * yarr/YarrJIT.cpp:

2021-07-31  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove the build warning below since r280493.
        warning: variable ‘block’ set but not used [-Wunused-but-set-variable]

        * b3/B3CanonicalizePrePostIncrements.cpp:
        (JSC::B3::canonicalizePrePostIncrements):

2021-07-30  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] branchTest8 should not emit tst for Zero/NonZero cases
        https://bugs.webkit.org/show_bug.cgi?id=228674

        Reviewed by Mark Lam.

        Previously, branchTest8(NonZero, BaseIndex) emits `tst` instruction
        unnecessarily. This is because the mask is truncated into 8bit, which
        makes branchTest32 (which is internally used in branchTest8) emits tst.
        We observed many unnecessary tst in YarrJIT.

        This patch removes this unnecessary truncation since Zero/NonZero does
        not care high bits of mask in branchTest8. This is ok because the
        ResultCondition version of mask8OnCondition() is always used to generate
        a mask that is only used against a value that is loaded with
        MacroAssemblerHelpers::load8OnCondition(). For Zero/NonZero conditions,
        load8OnCondition() will always zero fill the upper bytes. The 0 filled
        upper bytes will not affect the result of a branch on zero or branch on
        not zero.

        Before:
           0x10a8068b0:    ldrb     w16, [x7, x6]
           0x10a8068b4:    tst      w16, #0xff
           0x10a8068b8:    b.ne   0x10a8068cc

        After:
           0x1070068b0:    ldrb     w16, [x7, x6]
           0x1070068b4:    cbnz     w16, 0x1070068c8

        * assembler/MacroAssemblerHelpers.h:
        (JSC::MacroAssemblerHelpers::mask8OnCondition):

2021-07-30  Robin Morisset  <rmorisset@apple.com>

        Improve OSR entry into Wasm loops with arguments
        https://bugs.webkit.org/show_bug.cgi?id=228595

        Reviewed by Yusuke Suzuki.

        This patch has two parts:
        - improve the Wasm OSR code to fully support loop arguments (just some plumbing to make sure that the right values are propagated)
        - improve the B3 validator to fix a hole I noticed while writing the first part: we were not detecting code that introduce Upsilons in the wrong blocks.
          Naturally, this caused hard to debug issues, as B3 has no well-defined semantics for a Phi that is reached before the corresponding Upsilon(s).

        * b3/B3Validate.cpp:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::emitLoopTierUpCheck):
        (JSC::Wasm::AirIRGenerator::addLoop):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::emitLoopTierUpCheck):
        (JSC::Wasm::B3IRGenerator::addLoop):
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::addLoop):

2021-07-30  Philip Chimento  <pchimento@igalia.com>

        [JSC] Rename Temporal.now to Temporal.Now
        https://bugs.webkit.org/show_bug.cgi?id=228658

        Reviewed by Yusuke Suzuki.

        See https://github.com/tc39/proposal-temporal/pull/1645. In the July
        2021 meeting TC39 achieved consensus to rename Temporal.now to
        Temporal.Now since it is a namespace.

        * runtime/TemporalNow.cpp: Change Now[@@toStringTag] accordingly.
        * runtime/TemporalObject.cpp: Rename now property to Now.

2021-07-30  Tadeu Zagallo  <tzagallo@apple.com>

        putInlineFastReplacingStaticPropertyIfNeeded should handle custom values
        https://bugs.webkit.org/show_bug.cgi?id=227963

        Reviewed by Alexey Shvayka.

        Follow up after r280463: as it turns out, putInlineFastReplacingStaticPropertyIfNeeded also needs to handle
        custom values, similar to how definePropertyOnReceiverSlow was updated. This function will be called when the
        target property of the receiver is a custom value and isn't reified. The previous test case was expanded to
        test both the reified and non-reified cases.

        * runtime/JSObject.cpp:
        (JSC::JSObject::putInlineFastReplacingStaticPropertyIfNeeded):
        * tools/JSDollarVM.cpp:

2021-07-30  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix wrong access width
        https://bugs.webkit.org/show_bug.cgi?id=228301
        rdar://81341472

        * yarr/YarrJIT.cpp:

2021-07-30  Yijia Huang  <yijia_huang@apple.com>

        Add Pre/Post-Indexed Address Mode to Air for ARM64
        https://bugs.webkit.org/show_bug.cgi?id=228047

        Reviewed by Phil Pizlo.

        Pre-indexed addressing means that the address is the sum of the value in the 64-bit base register 
        and an offset, and the address is then written back to the base register. And post-indexed 
        addressing means that the address is the value in the 64-bit base register, and the sum of the 
        address and the offset is then written back to the base register. They are relatively common for 
        loops to iterate over an array by increasing/decreasing a pointer into the array at each iteration. 
        With such an addressing mode, the instruction selector can merge the increment and access the array.

        #####################################
        ## Pre-Index Address Mode For Load ##
        #####################################

        LDR Wt, [Xn, #imm]!

        In B3 Reduction Strength, since we have this reduction rule:
            Turn this: Load(Add(address, offset1), offset = offset2)
            Into this: Load(address, offset = offset1 + offset2)

        Then, the equivalent pattern is:
            address = Add(base, offset)
            ...
            memory = Load(base, offset)

        First, we convert it to the canonical form:
            address = Add(base, offset)
            newMemory = Load(base, offset) // move the memory to just after the address
            ...
            memory = Identity(newMemory)

        Next, lower to Air:
            Move %base, %address
            Move (%address, prefix(offset)), %newMemory

        ######################################
        ## Post-Index Address Mode For Load ##
        ######################################

        LDR Wt, [Xn], #imm

        Then, the equivalent pattern is:
            memory = Load(base, 0)
            ...
            address = Add(base, offset)

        First, we convert it to the canonical form:
            newOffset = Constant
            newAddress = Add(base, offset)
            memory = Load(base, 0) // move the offset and address to just before the memory
            ...
            offset = Identity(newOffset)
            address = Identity(newAddress)

        Next, lower to Air:
            Move %base, %newAddress
            Move (%newAddress, postfix(offset)), %memory

        #############################
        ## Pattern Match Algorithm ##
        #############################

        To detect the pattern for prefix/postfix increment address is tricky due to the structure in B3 IR. The 
        algorithm used in this patch is to collect the first valid values (add/load), then search for any 
        paired value (load/add) to match all of them. In worst case, the runtime complexity is O(n^2) 
        when n is the number of all values.

        After collecting two sets of candidates, we match the prefix incremental address first since it seems 
        more beneficial to the compiler (shown in the next section). And then, go for the postfix one.

        ##############################################
        ## Test for Pre/Post-Increment Address Mode ##
        ##############################################

        Given Loop with Pre-Increment:
        int64_t ldr_pre(int64_t *p) {
            int64_t res = 0;
            while (res < 10)
                res += *++p;
            return res;
        }

        B3 IR:
        ------------------------------------------------------
        BB#0: ; frequency = 1.000000
            Int64 b@0 = Const64(0)
            Int64 b@2 = ArgumentReg(%x0)
            Void b@20 = Upsilon($0(b@0), ^18, WritesLocalState)
            Void b@21 = Upsilon(b@2, ^19, WritesLocalState)
            Void b@4 = Jump(Terminal)
        Successors: #1
        BB#1: ; frequency = 1.000000
        Predecessors: #0, #2
            Int64 b@18 = Phi(ReadsLocalState)
            Int64 b@19 = Phi(ReadsLocalState)
            Int64 b@7 = Const64(10)
            Int32 b@8 = AboveEqual(b@18, $10(b@7))
            Void b@9 = Branch(b@8, Terminal)
        Successors: Then:#3, Else:#2
        BB#2: ; frequency = 1.000000
        Predecessors: #1
            Int64 b@10 = Const64(8)
            Int64 b@11 = Add(b@19, $8(b@10))
            Int64 b@13 = Load(b@11, ControlDependent|Reads:Top)
            Int64 b@14 = Add(b@18, b@13)
            Void b@22 = Upsilon(b@14, ^18, WritesLocalState)
            Void b@23 = Upsilon(b@11, ^19, WritesLocalState)
            Void b@16 = Jump(Terminal)
        Successors: #1
        BB#3: ; frequency = 1.000000
        Predecessors: #1
            Void b@17 = Return(b@18, Terminal)
        Variables:
            Int64 var0
            Int64 var1
        ------------------------------------------------------

        W/O Pre-Increment Address Mode:
        ------------------------------------------------------
        ...
        BB#2: ; frequency = 1.000000
        Predecessors: #1
            Move $8, %x3, $8(b@12)
            Add64 $8, %x0, %x1, b@11
            Move (%x0,%x3), %x0, b@13
            Add64 %x0, %x2, %x2, b@14
            Move %x1, %x0, b@23
            Jump b@16
        Successors: #1
        ...
        ------------------------------------------------------

        W/ Pre-Increment Address Mode:
        ------------------------------------------------------
        ...
        BB#2: ; frequency = 1.000000
        Predecessors: #1
            MoveWithIncrement64 (%x0,Pre($8)), %x2, b@13
            Add64 %x2, %x1, %x1, b@14
            Jump b@16
        Successors: #1
        ...
        ------------------------------------------------------

        Given Loop with Post-Increment:
        int64_t ldr_pre(int64_t *p) {
            int64_t res = 0;
            while (res < 10)
                res += *p++;
            return res;
        }

        B3 IR:
        ------------------------------------------------------
        BB#0: ; frequency = 1.000000
            Int64 b@0 = Const64(0)
            Int64 b@2 = ArgumentReg(%x0)
            Void b@20 = Upsilon($0(b@0), ^18, WritesLocalState)
            Void b@21 = Upsilon(b@2, ^19, WritesLocalState)
            Void b@4 = Jump(Terminal)
        Successors: #1
        BB#1: ; frequency = 1.000000
        Predecessors: #0, #2
            Int64 b@18 = Phi(ReadsLocalState)
            Int64 b@19 = Phi(ReadsLocalState)
            Int64 b@7 = Const64(10)
            Int32 b@8 = AboveEqual(b@18, $10(b@7))
            Void b@9 = Branch(b@8, Terminal)
        Successors: Then:#3, Else:#2
        BB#2: ; frequency = 1.000000
        Predecessors: #1
            Int64 b@10 = Load(b@19, ControlDependent|Reads:Top)
            Int64 b@11 = Add(b@18, b@10)
            Int64 b@12 = Const64(8)
            Int64 b@13 = Add(b@19, $8(b@12))
            Void b@22 = Upsilon(b@11, ^18, WritesLocalState)
            Void b@23 = Upsilon(b@13, ^19, WritesLocalState)
            Void b@16 = Jump(Terminal)
        Successors: #1
        BB#3: ; frequency = 1.000000
        Predecessors: #1
            Void b@17 = Return(b@18, Terminal)
        Variables:
            Int64 var0
            Int64 var1
        ------------------------------------------------------

        W/O Post-Increment Address Mode:
        ------------------------------------------------------
        ...
        BB#2: ; frequency = 1.000000
        Predecessors: #1
            Move (%x0), %x2, b@10
            Add64 %x2, %x1, %x1, b@11
            Add64 $8, %x0, %x0, b@13
            Jump b@16
        Successors: #1
        ...
        ------------------------------------------------------

        W/ Post-Increment Address Mode:
        ------------------------------------------------------
        ...
        BB#2: ; frequency = 1.000000
        Predecessors: #1
            MoveWithIncrement64 (%x0,Post($8)), %x2, b@10
            Add64 %x2, %x1, %x1, b@11
            Jump b@16
        Successors: #1
        ...
        ------------------------------------------------------

        * Sources.txt:
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::PreIndexAddress::PreIndexAddress):
        (JSC::AbstractMacroAssembler::PostIndexAddress::PostIndexAddress):
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::load64):
        (JSC::MacroAssemblerARM64::load32):
        (JSC::MacroAssemblerARM64::store64):
        (JSC::MacroAssemblerARM64::store32):
        * assembler/testmasm.cpp:
        (JSC::testStorePrePostIndex32):
        (JSC::testStorePrePostIndex64):
        (JSC::testLoadPrePostIndex32):
        (JSC::testLoadPrePostIndex64):
        * b3/B3CanonicalizePrePostIncrements.cpp: Added.
        (JSC::B3::canonicalizePrePostIncrements):
        * b3/B3CanonicalizePrePostIncrements.h: Copied from Source/JavaScriptCore/b3/B3ValueKeyInlines.h.
        * b3/B3Generate.cpp:
        (JSC::B3::generateToAir):
        * b3/B3LowerToAir.cpp:
        * b3/B3ValueKey.h:
        * b3/B3ValueKeyInlines.h:
        (JSC::B3::ValueKey::ValueKey):
        * b3/air/AirArg.cpp:
        (JSC::B3::Air::Arg::jsHash const):
        (JSC::B3::Air::Arg::dump const):
        (WTF::printInternal):
        * b3/air/AirArg.h:
        (JSC::B3::Air::Arg::preIndex):
        (JSC::B3::Air::Arg::postIndex):
        (JSC::B3::Air::Arg::isPreIndex const):
        (JSC::B3::Air::Arg::isPostIndex const):
        (JSC::B3::Air::Arg::isMemory const):
        (JSC::B3::Air::Arg::base const):
        (JSC::B3::Air::Arg::offset const):
        (JSC::B3::Air::Arg::isGP const):
        (JSC::B3::Air::Arg::isFP const):
        (JSC::B3::Air::Arg::isValidPreIndexForm):
        (JSC::B3::Air::Arg::isValidPostIndexForm):
        (JSC::B3::Air::Arg::isValidForm const):
        (JSC::B3::Air::Arg::forEachTmpFast):
        (JSC::B3::Air::Arg::forEachTmp):
        (JSC::B3::Air::Arg::asPreIndexAddress const):
        (JSC::B3::Air::Arg::asPostIndexAddress const):
        * b3/air/AirOpcode.opcodes:
        * b3/air/opcode_generator.rb:
        * b3/testb3.h:
        * b3/testb3_3.cpp:
        (testLoadPreIndex32):
        (testLoadPreIndex64):
        (testLoadPostIndex32):
        (testLoadPostIndex64):
        (addShrTests):
        * jit/ExecutableAllocator.cpp:
        (JSC::jitWriteThunkGenerator):

2021-07-30  Alexey Shvayka  <shvaikalesh@gmail.com>

        REGRESSION (r280460): 42 JSC test failures on Debug arm64 with ASSERTION FAILED: !m_needExceptionCheck
        https://bugs.webkit.org/show_bug.cgi?id=228652

        Unreviewed unchecked exception fix.

        Release scope before calling RegExpGlobalData::getBackref().

        * runtime/RegExpConstructor.cpp:
        (JSC::JSC_DEFINE_CUSTOM_GETTER):

2021-07-30  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use UCPURegister argument to remove zero extension in JIT code
        https://bugs.webkit.org/show_bug.cgi?id=228625

        Reviewed by Robin Morisset.

        Yarr JIT code emits zeroExtend32ToWord for some arguments, but this is not necessary if
        argument is defined as UCPURegister. In that case, caller guarantees that top 32bits are
        cleared.

        * yarr/YarrJIT.cpp:
        * yarr/YarrJIT.h:

2021-07-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Stop building WebGPU and the WHLSL compiler to decrease binary size
        https://bugs.webkit.org/show_bug.cgi?id=228179

        Reviewed by Dean Jackson, Robin Morisset, and Devin Rousso.

        This patch deletes the existing implementation just to reduce binary size in releases of WebKit
        which don't enable WebGPU by default. It doesn't represent a change in direction or policy or
        anything regarding WebGPU. It's a (somewhat temporary) pragmatic change.

        Our current implementation of WebGPU:
        1. Is off by default on all platforms
        2. Is extremely outdated
        3. Has no notion of the GPU Process, and therefore needs to be redesigned and largely rewritten
        4. Only implements a fraction of what is in the spec

        Removing the code from the tree doesn't delete it from existence; it's still in source control.
        The benefit of reducing binary size seems to outweigh having this code in the tree.

        * inspector/protocol/Canvas.json:
        * inspector/scripts/codegen/generator.py:

2021-07-29  Carlos Alberto Lopez Perez  <clopez@igalia.com>

        [WPE][GTK] build broken with python2 after r280382
        https://bugs.webkit.org/show_bug.cgi?id=228629

        Reviewed by Philippe Normand.

        Call {PYTHON_EXECUTABLE} instead of python3.

        * PlatformGTK.cmake:

2021-07-29  Tadeu Zagallo  <tzagallo@apple.com>

        definePropertyOnReceiver should check if receiver canPerformFastPutInline
        https://bugs.webkit.org/show_bug.cgi?id=227963
        <rdar://80259710>

        Reviewed by Alexey Shvayka.

        definePropertyOnReceiver has a fast path if the slot is not opaque and the receiver doesn't
        have a custom defineOwnProperty implementation, in which case it calls putInlineFast (and
        transitively putDirectInternal<PutModePut>). The issue is that putDirectInternal does not
        handle customValues correctly: it just overwrites the property without changing the attributes.
        To fix that, we should first check if the property might be a custom value, and if that's the case
        we now call `definePropertyOnReceiverSlow`, which has been updated to handle custom values correctly.
        I also added assertions to putInlineFastReplacingStaticPropertyIfNeeded and putDirectInternal
        to make sure we don't accidentally overwrite custom values in the future.

        * runtime/JSObject.cpp:
        (JSC::definePropertyOnReceiverSlow):
        (JSC::JSObject::definePropertyOnReceiver):
        (JSC::JSObject::putInlineFastReplacingStaticPropertyIfNeeded):
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::putDirectInternal):

2021-07-29  Yusuke Suzuki  <ysuzuki@apple.com> and Alexey Shvayka  <shvaikalesh@gmail.com>

        [JSC] Legacy RegExp fields should be accessors
        https://bugs.webkit.org/show_bug.cgi?id=220233

        Reviewed by Tadeu Zagallo.

        This patch implements a part of Legacy RegExp features proposal [1], replacing
        custom values with custom accessors that require |this| value to be RegExp
        constructor of the same realm.

        Apart from fixing property descriptors, this change brings legacy RegExpConstructor
        fields in compliance with invariants of internal methods [2] (described in #151348),
        aligning JSC with V8 and SpiderMonkey.

        It doesn't, however, implement [[LegacyFeaturesEnabled]] and RegExp.prototype.compile
        changes.

        [1]: https://github.com/tc39/proposal-regexp-legacy-features
        [2]: https://tc39.es/ecma262/#sec-invariants-of-the-essential-internal-methods

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateImpl):
        * runtime/RegExpConstructor.cpp:
        (JSC::JSC_DEFINE_CUSTOM_GETTER):
        (JSC::JSC_DEFINE_CUSTOM_SETTER):
        (JSC::regExpConstructorDollarImpl): Deleted.
        * tools/JSDollarVM.cpp:

2021-07-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Add WebGPU to webkit.org/status
        https://bugs.webkit.org/show_bug.cgi?id=228623

        Reviewed by Robin Morisset.

        * features.json:

2021-07-28  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Yarr should perform BoyerMoore search
        https://bugs.webkit.org/show_bug.cgi?id=228301

        Reviewed by Saam Barati.

        This patch emits skipping fast-path at the beginning of body alternatives with a large stride. So we can quickly discard unrelated characters
        and attempt to find possibly related sequence in the long sequence. The method is derived from V8's implementation (with some extensions).

        If we have a searching pattern /abcdef/, then we can check the 6th character against a set of {a, b, c, d, e, f}.
        If it does not match, we can shift 6 characters. We use this strategy since this way can be extended easily to support
        disjunction, character-class, and ignore-cases. For example, in the case of /(?:abc|def)/, we can check 3rd character
        against {a, b, c, d, e, f} and shift 3 characters if it does not match.

        Then, the best way to perform the above shifting is that finding the longest character sequence which does not have
        many candidates. In the case of /[a-z]aaaaaaa[a-z]/, we can extract "aaaaaaa" sequence and check 8th character against {a}.
        If it does not match, then we can shift 7 characters (length of "aaaaaaa"). This shifting is better than using "[a-z]aaaaaaa[a-z]"
        sequence and {a-z} set since {a-z} set will almost always match.

        We first collect possible characters for each character position. Then, apply heuristics to extract good character sequence from
        that and construct fast searching with long stride.

        Microbenchmark which performs RegExp ops in Speedometer2/jQuery-TodoMVC shows 25% improvement.

                                              ToT                     Patched

            jquery-todomvc-regexp      723.9739+-1.3997     ^    579.1698+-1.2505        ^ definitely 1.2500x faster

        This improves Speedometer2/jQuery-TodoMVC by 3%.

            ----------------------------------------------------------------------------------------------------------------------------------
            |               subtest                |     ms      |     ms      |  b / a   | pValue (significance using False Discovery Rate) |
            ----------------------------------------------------------------------------------------------------------------------------------
            | Elm-TodoMVC                          |123.365625   |123.456250   |1.000735  | 0.804077                                         |
            | VueJS-TodoMVC                        |26.912500    |26.925000    |1.000464  | 0.969603                                         |
            | EmberJS-TodoMVC                      |127.540625   |127.562500   |1.000172  | 0.960474                                         |
            | BackboneJS-TodoMVC                   |50.606250    |50.518750    |0.998271  | 0.670313                                         |
            | Preact-TodoMVC                       |21.018750    |20.850000    |0.991971  | 0.563818                                         |
            | AngularJS-TodoMVC                    |136.943750   |137.271875   |1.002396  | 0.531513                                         |
            | Vanilla-ES2015-TodoMVC               |68.521875    |68.593750    |1.001049  | 0.701376                                         |
            | Inferno-TodoMVC                      |65.559375    |65.803125    |1.003718  | 0.414418                                         |
            | Flight-TodoMVC                       |77.284375    |76.715625    |0.992641  | 0.219870                                         |
            | Angular2-TypeScript-TodoMVC          |40.725000    |40.318750    |0.990025  | 0.281212                                         |
            | VanillaJS-TodoMVC                    |55.209375    |54.715625    |0.991057  | 0.056921                                         |
            | jQuery-TodoMVC                       |266.396875   |258.471875   |0.970251  | 0.000000 (significant)                           |
            | EmberJS-Debug-TodoMVC                |341.550000   |341.856250   |1.000897  | 0.618140                                         |
            | React-TodoMVC                        |88.731250    |88.871875    |1.001585  | 0.512407                                         |
            | React-Redux-TodoMVC                  |150.340625   |150.065625   |0.998171  | 0.412940                                         |
            | Vanilla-ES2015-Babel-Webpack-TodoMVC |65.390625    |65.362500    |0.999570  | 0.834760                                         |
            ----------------------------------------------------------------------------------------------------------------------------------
            a mean = 245.96997
            b mean = 246.86366
            pValue = 0.0061448402
            (Bigger means are better.)
            1.004 times better
            Results ARE significant

        * runtime/OptionsList.h:
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::BoyerMooreInfo::BoyerMooreInfo):
        (JSC::Yarr::BoyerMooreInfo::length const):
        (JSC::Yarr::BoyerMooreInfo::set):
        (JSC::Yarr::BoyerMooreInfo::index const):
        (JSC::Yarr::BoyerMooreInfo::setIndex):
        (JSC::Yarr::BoyerMooreInfo::create):
        (JSC::Yarr::BoyerMooreInfo::findBestCharacterSequence const):
        (JSC::Yarr::BoyerMooreInfo::findWorthwhileCharacterSequenceForLookahead const):
        (JSC::Yarr::BoyerMooreInfo::createCandidateBitmap const):
        * yarr/YarrJIT.h:
        (JSC::Yarr::BoyerMooreBitmap::count const):
        (JSC::Yarr::BoyerMooreBitmap::map const):
        (JSC::Yarr::BoyerMooreBitmap::isMaskEffective const):
        (JSC::Yarr::BoyerMooreBitmap::add):
        (JSC::Yarr::BoyerMooreByteVector::BoyerMooreByteVector):
        (JSC::Yarr::YarrCodeBlock::set8BitCode):
        (JSC::Yarr::YarrCodeBlock::set16BitCode):
        (JSC::Yarr::YarrCodeBlock::set8BitCodeMatchOnly):
        (JSC::Yarr::YarrCodeBlock::set16BitCodeMatchOnly):
        (JSC::Yarr::YarrCodeBlock::clear):
        (JSC::Yarr::YarrCodeBlock::findSameVector const):

2021-07-28  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] load/store with BaseIndex is inefficient in ARM64
        https://bugs.webkit.org/show_bug.cgi?id=228543

        Reviewed by Mark Lam.

        While we are frequently using load + BaseIndex (with offset) in RegExp code,
        we emit 3 instructions in ARM64. This can be represented in 2 instructions.
        This patch adds that path to make generated code tight in ARM64 RegExp.

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::load64):
        (JSC::MacroAssemblerARM64::load32):
        (JSC::MacroAssemblerARM64::load16):
        (JSC::MacroAssemblerARM64::load16SignedExtendTo32):
        (JSC::MacroAssemblerARM64::load8):
        (JSC::MacroAssemblerARM64::load8SignedExtendTo32):
        (JSC::MacroAssemblerARM64::store64):
        (JSC::MacroAssemblerARM64::store32):
        (JSC::MacroAssemblerARM64::store16):
        (JSC::MacroAssemblerARM64::store8):
        (JSC::MacroAssemblerARM64::loadDouble):
        (JSC::MacroAssemblerARM64::loadFloat):
        (JSC::MacroAssemblerARM64::storeDouble):
        (JSC::MacroAssemblerARM64::storeFloat):
        (JSC::MacroAssemblerARM64::tryFoldBaseAndOffsetPart):
        * assembler/testmasm.cpp:
        (JSC::testLoadBaseIndex):
        (JSC::testStoreBaseIndex):

2021-07-28  Philippe Normand  <pnormand@igalia.com>

        [WPE][GTK] SVN_REVISION drifting away if bots don't re-run cmake
        https://bugs.webkit.org/show_bug.cgi?id=228290

        Reviewed by Michael Catanzaro.

        * PlatformGTK.cmake: Expand ${BUILD_REVISION} with apply-build-revision-to-files.py for
        non-tarball builds, or let CMake do it for tarball builds.
        * javascriptcoregtk.pc.in: Switch revision var to ${} format, so that we can choose to
        either let CMake expand it or do it ourselves.

2021-07-27  Patrick Angle  <pangle@apple.com>

        Web Inspector: [Cocoa] "RemoteInspector XPC connection to relay failed." messages are confusing in StdErr
        https://bugs.webkit.org/show_bug.cgi?id=228303

        Reviewed by Darin Adler.

        Remove overly verbose and confusing `WTFLogAlways` messages added in r278413, which can confuse applications
        listening to stderr of a process using JavaScriptCore.

        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
        (Inspector::RemoteInspector::xpcConnectionFailed):

2021-07-27  Alexey Shvayka  <shvaikalesh@gmail.com>

        ProxyObject callees should be skipped during Function.prototype.caller resolution
        https://bugs.webkit.org/show_bug.cgi?id=228341

        Reviewed by Yusuke Suzuki.

        Just like a bound function, a Proxy with nullish "apply" handler merely forwards
        [[Call]] to its target [1], without pushing onto the execution context stack.
        This fact is also noted in Function.prototype.{caller,arguments} reflection proposal [2].

        This patch aligns JSC with V8 and SpiderMonkey if Proxy's "apply" handler is userland
        or nullish. However, since JSC implements proper tail calls, `Function.prototype.caller`
        result is divergent from other engines if the handler is `Reflect.apply`, which performs
        a tail call that gets optimized away [2] (unless called by another Proxy).

        [1]: https://tc39.es/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist (step 8)
        [2]: https://github.com/claudepache/es-legacy-function-reflection/blob/master/spec.md#get-functionprototypecaller (see notes)

        * runtime/FunctionPrototype.cpp:
        (JSC::RetrieveCallerFunctionFunctor::operator() const):

2021-07-26  Yusuke Suzuki  <ysuzuki@apple.com>

        Add Temporal to features.json
        https://bugs.webkit.org/show_bug.cgi?id=228292

        Reviewed by Myles C. Maxfield.

        * features.json:

2021-07-25  Alexey Shvayka  <shvaikalesh@gmail.com>

        Partly implement Function.prototype.{caller,arguments} reflection proposal
        https://bugs.webkit.org/show_bug.cgi?id=158116

        Reviewed by Yusuke Suzuki.

        To ensure web-compatibility, only the safe subset of Function.prototype.{caller,arguments}
        reflection proposal [1] is implemented, which is currently shipped in SpiderMonkey.

        Complete list of differences from the proposed spec:

          1. Cross-realm receiver function is allowed instead of throwing a TypeError.

             Throwing is likely safe to ship, but #225997 needs to be fixed first for
             custom properties to receive correct global object.

          2. Cross-realm caller function is returned instead of `null`.

             Hiding cross-realm caller may break things: we currently have a test for
             the opposite behavior.

          3. Defines "caller" and "arguments" setters that throw for disallowed receivers,
             instead failing silently in sloppy mode.

             This is actually more restrictive than the spec, which is preferable,
             and aligns with V8 and SM.

        Most importantly, this patch removes own "caller" and "arguments" properties from
        sloppy mode ES5 functions. They were non-configurable, making it harder to use
        their holder as a [[ProxyTarget]]. They were also non-writable, with a constantly
        changing [[Value]], which violated the invariants of internal methods [2].

        As a result, JSFunction methods are greatly simplified, especially defineOwnProperty()
        and getOwnSpecialPropertyNames(). The latter is now 2.1x faster according to the
        provided microbenchmark. Also, removes double "prototype" lookup from [[Get]],
        which is a 10% progression.

        [1]: https://github.com/claudepache/es-legacy-function-reflection
        [2]: https://tc39.es/ecma262/#sec-invariants-of-the-essential-internal-methods

        * runtime/ClonedArguments.cpp:
        (JSC::ClonedArguments::getOwnPropertySlot):
        (JSC::ClonedArguments::materializeSpecials):
        * runtime/FunctionExecutable.h:
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::addFunctionProperties):
        (JSC::isAllowedReceiverFunctionForCallerAndArguments):
        (JSC::RetrieveArgumentsFunctor::RetrieveArgumentsFunctor):
        (JSC::RetrieveArgumentsFunctor::result const):
        (JSC::RetrieveArgumentsFunctor::operator() const):
        (JSC::retrieveArguments):
        (JSC::JSC_DEFINE_CUSTOM_GETTER):
        (JSC::RetrieveCallerFunctionFunctor::RetrieveCallerFunctionFunctor):
        (JSC::RetrieveCallerFunctionFunctor::result const):
        (JSC::RetrieveCallerFunctionFunctor::operator() const):
        (JSC::retrieveCallerFunction):
        (JSC::JSC_DEFINE_CUSTOM_SETTER):
        (JSC::FunctionPrototype::initRestrictedProperties): Deleted.
        * runtime/FunctionPrototype.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertySlot):
        (JSC::JSFunction::getOwnSpecialPropertyNames):
        (JSC::JSFunction::put):
        (JSC::JSFunction::deleteProperty):
        (JSC::JSFunction::defineOwnProperty):
        (JSC::RetrieveArgumentsFunctor::RetrieveArgumentsFunctor): Deleted.
        (JSC::RetrieveArgumentsFunctor::result const): Deleted.
        (JSC::RetrieveArgumentsFunctor::operator() const): Deleted.
        (JSC::retrieveArguments): Deleted.
        (JSC::JSC_DEFINE_CUSTOM_GETTER): Deleted.
        (JSC::RetrieveCallerFunctionFunctor::RetrieveCallerFunctionFunctor): Deleted.
        (JSC::RetrieveCallerFunctionFunctor::result const): Deleted.
        (JSC::RetrieveCallerFunctionFunctor::operator() const): Deleted.
        (JSC::retrieveCallerFunction): Deleted.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildrenImpl):
        * runtime/JSGlobalObject.h:
        Remove unused m_throwTypeErrorGetterSetter and make [[ThrowTypeError]] lazily-created.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSGlobalObjectFunctions.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::putDirectCustomGetterSetterWithoutTransition):
        * runtime/JSObject.h:

2021-07-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Change most of enum in Yarr to enum-class
        https://bugs.webkit.org/show_bug.cgi?id=228264

        Reviewed by Mark Lam.

        This patch simply changes most of enum to enum-class in Yarr.
        We also remove YarrJIT YarrGenerator's template parameter since
        it is not worth doubling code. We can just hold Yarr::JITCompileMode as m_compileMode.

        * runtime/RegExp.cpp:
        (JSC::RegExp::compile):
        (JSC::RegExp::matchConcurrently):
        (JSC::RegExp::compileMatchOnly):
        * runtime/RegExp.h:
        * runtime/RegExpInlines.h:
        (JSC::RegExp::hasCodeFor):
        (JSC::RegExp::compileIfNecessary):
        (JSC::RegExp::matchInline):
        (JSC::RegExp::hasMatchOnlyCodeFor):
        (JSC::RegExp::compileIfNecessaryMatchOnly):
        * yarr/Yarr.h:
        (): Deleted.
        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::backtrackPatternCharacter):
        (JSC::Yarr::Interpreter::backtrackPatternCasedCharacter):
        (JSC::Yarr::Interpreter::matchCharacterClass):
        (JSC::Yarr::Interpreter::backtrackCharacterClass):
        (JSC::Yarr::Interpreter::matchBackReference):
        (JSC::Yarr::Interpreter::backtrackBackReference):
        (JSC::Yarr::Interpreter::parenthesesDoBacktrack):
        (JSC::Yarr::Interpreter::matchParenthesesOnceBegin):
        (JSC::Yarr::Interpreter::matchParenthesesOnceEnd):
        (JSC::Yarr::Interpreter::backtrackParenthesesOnceBegin):
        (JSC::Yarr::Interpreter::backtrackParenthesesOnceEnd):
        (JSC::Yarr::Interpreter::matchParenthesesTerminalBegin):
        (JSC::Yarr::Interpreter::matchParenthesesTerminalEnd):
        (JSC::Yarr::Interpreter::backtrackParenthesesTerminalBegin):
        (JSC::Yarr::Interpreter::matchParentheticalAssertionBegin):
        (JSC::Yarr::Interpreter::matchParentheticalAssertionEnd):
        (JSC::Yarr::Interpreter::backtrackParentheticalAssertionBegin):
        (JSC::Yarr::Interpreter::backtrackParentheticalAssertionEnd):
        (JSC::Yarr::Interpreter::matchParentheses):
        (JSC::Yarr::Interpreter::backtrackParentheses):
        (JSC::Yarr::Interpreter::matchDisjunction):
        (JSC::Yarr::Interpreter::matchNonZeroDisjunction):
        (JSC::Yarr::ByteCompiler::atomParenthesesOnceBegin):
        (JSC::Yarr::ByteCompiler::atomParenthesesTerminalBegin):
        (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin):
        (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin):
        (JSC::Yarr::ByteCompiler::atomParentheticalAssertionEnd):
        (JSC::Yarr::ByteCompiler::closeAlternative):
        (JSC::Yarr::ByteCompiler::closeBodyAlternative):
        (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesOnceEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesTerminalEnd):
        (JSC::Yarr::ByteCompiler::emitDisjunction):
        (JSC::Yarr::ByteCompiler::dumpDisjunction):
        * yarr/YarrInterpreter.h:
        (JSC::Yarr::ByteTerm::ByteTerm):
        (JSC::Yarr::ByteTerm::BOL):
        (JSC::Yarr::ByteTerm::CheckInput):
        (JSC::Yarr::ByteTerm::UncheckInput):
        (JSC::Yarr::ByteTerm::EOL):
        (JSC::Yarr::ByteTerm::WordBoundary):
        (JSC::Yarr::ByteTerm::BackReference):
        (JSC::Yarr::ByteTerm::BodyAlternativeBegin):
        (JSC::Yarr::ByteTerm::BodyAlternativeDisjunction):
        (JSC::Yarr::ByteTerm::BodyAlternativeEnd):
        (JSC::Yarr::ByteTerm::AlternativeBegin):
        (JSC::Yarr::ByteTerm::AlternativeDisjunction):
        (JSC::Yarr::ByteTerm::AlternativeEnd):
        (JSC::Yarr::ByteTerm::SubpatternBegin):
        (JSC::Yarr::ByteTerm::SubpatternEnd):
        (JSC::Yarr::ByteTerm::DotStarEnclosure):
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::jitCompile):
        * yarr/YarrJIT.h:
        * yarr/YarrParser.h:
        (JSC::Yarr::Parser::CharacterClassParserDelegate::CharacterClassParserDelegate):
        (JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacter):
        (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBuiltInCharacterClass):
        (JSC::Yarr::Parser::CharacterClassParserDelegate::end):
        * yarr/YarrPattern.cpp:
        (JSC::Yarr::YarrPatternConstructor::atomParenthesesSubpatternBegin):
        (JSC::Yarr::YarrPatternConstructor::atomParentheticalAssertionBegin):
        (JSC::Yarr::YarrPatternConstructor::atomBackReference):
        (JSC::Yarr::YarrPatternConstructor::copyTerm):
        (JSC::Yarr::YarrPatternConstructor::quantifyAtom):
        (JSC::Yarr::YarrPatternConstructor::checkForTerminalParentheses):
        (JSC::Yarr::YarrPatternConstructor::containsCapturingTerms):
        (JSC::Yarr::YarrPatternConstructor::optimizeDotStarWrappedExpressions):
        (JSC::Yarr::PatternTerm::dumpQuantifier):
        (JSC::Yarr::PatternTerm::dump):
        * yarr/YarrPattern.h:
        (JSC::Yarr::PatternTerm::PatternTerm):
        (JSC::Yarr::PatternTerm::ForwardReference):
        (JSC::Yarr::PatternTerm::BOL):
        (JSC::Yarr::PatternTerm::EOL):
        (JSC::Yarr::PatternTerm::WordBoundary):
        (JSC::Yarr::PatternTerm::isFixedWidthCharacterClass const):
        (JSC::Yarr::PatternTerm::containsAnyCaptures):
        (JSC::Yarr::PatternTerm::quantify):

2021-07-23  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] Properly validate and merge descriptors in [Replaceable] setter
        https://bugs.webkit.org/show_bug.cgi?id=227662

        Reviewed by Sam Weinig.

        Extracts createDataProperty() method to keep WebIDL code generator as simple as possible,
        and also to emphasize a subtle difference between
        { [[Value]]: X } and
        { [[Value]]: X, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true }.

        * runtime/JSONObject.cpp:
        (JSC::Walker::walk):
        * runtime/JSObject.cpp:
        (JSC::definePropertyOnReceiverSlow):
        * runtime/JSObject.h:
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::createDataProperty):
        * runtime/Lookup.h:
        (JSC::replaceStaticPropertySlot): Deleted.

2021-07-23  Alexey Shvayka  <shvaikalesh@gmail.com>

        [JSC] Call custom accessors / values with their holder's global object
        https://bugs.webkit.org/show_bug.cgi?id=225997

        Reviewed by Yusuke Suzuki.

        Just like JS built-ins, getter / setter functions of WebIDL attributes are created in realm
        of their holder interface [1][2], which is their _current_ realm for throwing an error [3].

        With this patch, custom properties get correct global object instead of lexical, including
        when inline cached, aligning them with functions and regular accessors.

        The latter allowed switching JS built-ins to CustomAccessor (e.g. Symbol#description),
        which is slightly more efficient to call from C++, doesn't need reification on first access,
        and has nicer signature.

        Also, renames WASM accessors to drop "func" and removes unused function length parameter.

        [1]: https://heycam.github.io/webidl/#dfn-attribute-getter (step 2)
        [2]: https://heycam.github.io/webidl/#dfn-attribute-setter (step 5)
        [3]: https://heycam.github.io/webidl/#ecmascript-throw

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateImpl):
        * create_hash_table:
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::globalObjectOfClosestCodeBlock):
        * interpreter/CallFrame.h:
        * runtime/IntlCollatorPrototype.cpp:
        (JSC::JSC_DEFINE_CUSTOM_GETTER):
        * runtime/IntlDateTimeFormatPrototype.cpp:
        (JSC::JSC_DEFINE_CUSTOM_GETTER):
        * runtime/IntlLocalePrototype.cpp:
        (JSC::JSC_DEFINE_CUSTOM_GETTER):
        * runtime/IntlNumberFormatPrototype.cpp:
        (JSC::JSC_DEFINE_CUSTOM_GETTER):
        * runtime/JSDataViewPrototype.cpp:
        (JSC::JSC_DEFINE_CUSTOM_GETTER):
        * runtime/JSObject.cpp:
        (JSC::JSObject::putInlineSlow):
        * runtime/PropertySlot.cpp:
        (JSC::PropertySlot::customGetter const):
        * runtime/PropertySlot.h:
        (JSC::PropertySlot::getValue const):
        * runtime/SymbolPrototype.cpp:
        (JSC::JSC_DEFINE_CUSTOM_GETTER):
        * tools/JSDollarVM.cpp:
        * wasm/js/WebAssemblyInstancePrototype.cpp:
        (JSC::JSC_DEFINE_CUSTOM_GETTER):
        (JSC::JSC_DEFINE_HOST_FUNCTION): Deleted.
        * wasm/js/WebAssemblyMemoryPrototype.cpp:
        (JSC::JSC_DEFINE_CUSTOM_GETTER):
        * wasm/js/WebAssemblyTablePrototype.cpp:
        (JSC::JSC_DEFINE_CUSTOM_GETTER):

2021-07-22  Saam Barati  <sbarati@apple.com>

        AirStackSlot's uint16_t byte size is too small
        https://bugs.webkit.org/show_bug.cgi?id=228193
        <rdar://80888059>

        Reviewed by Mark Lam.

        * b3/B3Procedure.cpp:
        (JSC::B3::Procedure::addStackSlot):
        * b3/B3Procedure.h:
        * b3/air/AirCode.cpp:
        (JSC::B3::Air::Code::addStackSlot):
        * b3/air/AirCode.h:
        * b3/air/AirStackSlot.cpp:
        (JSC::B3::Air::StackSlot::StackSlot):
        * b3/air/AirStackSlot.h:
        (JSC::B3::Air::StackSlot::ensureSize):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::lower):
        * ftl/FTLOutput.cpp:
        (JSC::FTL::Output::lockedStackSlot):
        * ftl/FTLOutput.h:

2021-07-22  Saam Barati  <sbarati@apple.com>

        Fix uses of Dependency::fence with respect to the compiler outsmarting us
        https://bugs.webkit.org/show_bug.cgi?id=227757
        <rdar://problem/80280931>

        Reviewed by Robin Morisset.

        We were running into issues on arm64 with respect to the memory model
        ordering of loads, and how the compiler optimized code around Dependency::fence.
        The issue manifested as calls to isMarked incorrectly returning true.
        
        To see the issue, let's consider a program like this:
        a = load(p1)
        b = load(p2)
        if (a != b) return;
        d = Dependency::fence(b)
        
        At the point of defining the dependency, the compiler has proven
        a == b. So, instead of building the dependency on the register used
        for b, we end up using the register for a. So the actual compiled
        code ends up with a dependency on load(p1), not load(p2).
        
        To fix this, we end up adding a new API, Dependency::loadEndFence(pointer,
        result), which is defined as:
        
        template<typename T>
        static Dependency loadAndFence(T* pointer, T& output)
        {
            T value = *opaque(pointer);
            Dependency dependency = Dependency::fence(value);
            output = opaque(value);
            return dependency;
        }
        
        The reason for this is that it split "b" in the above program into two values,
        and the "b" the program compares against is not known to the compiler to be
        the same value that we build a dependency on.

        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::aboutToMark):
        (JSC::MarkedBlock::isMarked):
        * runtime/JSObject.cpp:
        (JSC::JSObject::visitButterflyImpl):
        * runtime/JSObject.h:
        (JSC::JSObject::fencedButterfly):
        * runtime/SparseArrayValueMap.cpp:
        (JSC::SparseArrayEntry::getConcurrently):
        (JSC::SparseArrayEntry::getConcurrently const): Deleted.
        * runtime/SparseArrayValueMap.h:
        * runtime/Structure.h:
        (JSC::Structure::fencedIndexingMode):
        * runtime/StructureIDBlob.h:
        (JSC::StructureIDBlob::fencedIndexingModeIncludingHistory):

2021-07-22  Keith Miller  <keith_miller@apple.com>

        useProfiler option should automatically disable concurrent JIT
        https://bugs.webkit.org/show_bug.cgi?id=228152

        Reviewed by Saam Barati.

        The bytecode profiler is not thread safe so we should have
        recomputeDependentOptions() disable concurrent JIT. Also, fix the
        jsc CLI to set the useProfiler option rather than have its own
        state. Note, we call Options::setOption() rather than setting the
        Options::useProfiler() option directly as setOption calls
        recomputeDependentOptions() for us.

        * jsc.cpp:
        (CommandLine::parseArguments):
        (runJSC):
        * runtime/Options.cpp:
        (JSC::Options::recomputeDependentOptions):
        (JSC::Options::ensureOptionsAreCoherent):

2021-07-21  Yijia Huang  <yijia_huang@apple.com>

        Fix type check error in testb3
        https://bugs.webkit.org/show_bug.cgi?id=228166

        Reviewed by Saam Barati.

        * b3/testb3_2.cpp:
        (testXorNotWithLeftShift32):
        (testXorNotWithRightShift32):
        (testXorNotWithUnsignedRightShift32):

2021-07-21  Keith Miller  <keith_miller@apple.com>

        speculateNeitherDoubleNorStringNorHeapBigInt should only have a single JSType branch
        https://bugs.webkit.org/show_bug.cgi?id=228146

        Reviewed by Robin Morisset.

        Since StringType and HeapBigIntType are adjacent JSTypes
        we can do an integer range check rather than two separate
        JSType checks.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::speculateNeitherDoubleNorHeapBigIntNorString):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):

2021-07-20  Yijia Huang  <yijia_huang@apple.com>

        Add ARM64 EON opcode and select it in AIR
        https://bugs.webkit.org/show_bug.cgi?id=228057

        Reviewed by Saam Barati.

        EON Rd Rn Rm <shift> #amount

        Bitwise Exclusive OR NOT (shifted register) performs a bitwise Exclusive OR NOT 
        of a register value Rn and an optionally-shifted register value Rm, and writes the 
        result to the destination register. The instruction selector can utilize this to 
        lowering certain patterns in B3 IR before further Air optimization.

        The equivalent pattern of EON Rd Rn Rm is d = n ^ (m ^ -1)

        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = ArgumentReg(%x1)
        Int @2 = -1
        Int @3 = BitXor(@1, @2)
        Int @4 = BitXor(@0, b@3)
        Void@5 = Return(@4, Terminal)

        // Old optimized AIR
        Not   %x1, %x1,      @3
        Xor   %x0, %x1, %x0, @4
        Ret   %x0,           @5

        // New optimized AIR
        XorNot %x0, %x1, %x0, @4
        Ret    %x0,           @5

        The equivalent pattern of EON-with-shift is d = n ^ ((m ShiftType amount) ^ -1)

        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = ArgumentReg(%x1)
        Int @2 = amount
        Int @3 = -1
        Int @4 = Shl(@1, @2)
        Int @5 = BitXor(@4, @3)
        Int @6 = BitXor(@0, @5)
        Void b@7 = Return(b@6, Terminal)

        // Old optimized AIR
        Lshift   %x1, amount, %x1, @4
        Not      %x1,    %x1,      @5
        Xor      %x0,    %x1, %x0, @6
        Ret      %x0,              @7

        // New optimized AIR
        XorNotLeftShift %x0, %x1, $63, %x0, @6
        Ret             %x0,                @7

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::xorNot32):
        (JSC::MacroAssemblerARM64::xorNot64):
        (JSC::MacroAssemblerARM64::xorNotLeftShift32):
        (JSC::MacroAssemblerARM64::xorNotRightShift32):
        (JSC::MacroAssemblerARM64::xorNotUnsignedRightShift32):
        (JSC::MacroAssemblerARM64::xorNotLeftShift64):
        (JSC::MacroAssemblerARM64::xorNotRightShift64):
        (JSC::MacroAssemblerARM64::xorNotUnsignedRightShift64):
        * assembler/testmasm.cpp:
        (JSC::testXorNot32):
        (JSC::testXorNot64):
        (JSC::testXorNotWithLeftShift32):
        (JSC::testXorNotWithRightShift32):
        (JSC::testXorNotWithUnsignedRightShift32):
        (JSC::testXorNotWithLeftShift64):
        (JSC::testXorNotWithRightShift64):
        (JSC::testXorNotWithUnsignedRightShift64):
        * b3/B3LowerToAir.cpp:
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.h:
        * b3/testb3_2.cpp:
        (testXorNot32):
        (testXorNot64):
        (testXorNotWithLeftShift32):
        (testXorNotWithRightShift32):
        (testXorNotWithUnsignedRightShift32):
        (testXorNotWithLeftShift64):
        (testXorNotWithRightShift64):
        (testXorNotWithUnsignedRightShift64):
        (addBitTests):

2021-07-20  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] invalidParameterInstanceofSourceAppender should care direct call of Symbol.hasInstance
        https://bugs.webkit.org/show_bug.cgi?id=228075
        rdar://80762879

        Reviewed by Frédéric Wang.

        invalidParameterInstanceofSourceAppender can be invoked without `instanceof` expression since we can call
        `[Symbol.hasInstance]` function directly, but the implementation did not assume that. This patch fixes
        it to handle this direct call.

        * runtime/ExceptionHelpers.cpp:
        (JSC::invalidParameterInstanceofSourceAppender):

2021-07-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] StructureStubInfo's m_identifier should follow to the same protocol of inlineAccessBaseStructure
        https://bugs.webkit.org/show_bug.cgi?id=228092

        Reviewed by Saam Barati.

        In r279813, we fixed a race condition related to inlineAccessBaseStructure: while we clear inlineAccessBaseStructure,
        we still run code relying on this field's value until stub version of the code is generated. As a result,
        we run the code which relies on the cells that are already collected. And we have the same problem with
        m_identifier field too. This patch makes m_identifier follow to the same protocol of inlineAccessBaseStructure
        so that we fix this race issue too: both fields will be alive until we switch to the code that are not relying on these
        fields.

        We also make inlineAccessBaseStructure to m_inlineAccessBaseStructure to easily find that this is member field.
        And we also use setWithoutWriteBarrier for m_inlineAccessBaseStructure since we emit codeBlock->vm().heap.writeBarrier(codeBlock)
        immediately after that.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::fromStructureStubInfo):
        * bytecode/GetByStatus.cpp:
        (JSC::GetByStatus::computeForStubInfoWithoutExitSiteFeedback):
        * bytecode/InByStatus.cpp:
        (JSC::InByStatus::computeForStubInfoWithoutExitSiteFeedback):
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::computeForStubInfo):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::initGetByIdSelf):
        (JSC::StructureStubInfo::initArrayLength):
        (JSC::StructureStubInfo::initStringLength):
        (JSC::StructureStubInfo::initPutByIdReplace):
        (JSC::StructureStubInfo::initInByIdSelf):
        (JSC::StructureStubInfo::addAccessCase):
        (JSC::StructureStubInfo::reset):
        (JSC::StructureStubInfo::visitAggregateImpl):
        (JSC::StructureStubInfo::visitWeakReferences):
        (JSC::StructureStubInfo::propagateTransitions):
        (JSC::StructureStubInfo::setCacheType): Deleted.
        * bytecode/StructureStubInfo.h:

2021-07-19  Mark Lam  <mark.lam@apple.com>

        DFG's parseIntResult() should check for negative zero.
        https://bugs.webkit.org/show_bug.cgi?id=228068
        rdar://80788603

        Reviewed by Yusuke Suzuki.

        We have to check for negative zero explicitly because C++ evaluates 0.0 == -0.0
        as true.

        * dfg/DFGOperations.cpp:
        (JSC::DFG::parseIntResult):

2021-07-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] InByStatus / InByVariant should visit CacheableIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=228088
        rdar://80794604

        Reviewed by Mark Lam.

        After r278445, InByVariant holds CacheableIdentifier. And this can have
        String/Symbol cells if this variant is generated by in_by_val. In that
        case, we must visit this cell as GetByStatus / GetByVariant are doing.

        * bytecode/InByStatus.cpp:
        (JSC::InByStatus::visitAggregateImpl):
        * bytecode/InByStatus.h:
        * bytecode/InByVariant.cpp:
        (JSC::InByVariant::visitAggregateImpl):
        * bytecode/InByVariant.h:
        * bytecode/RecordedStatuses.cpp:
        (JSC::RecordedStatuses::visitAggregateImpl):

2021-07-16  Yijia Huang  <yijia_huang@apple.com>

        Add ExtendType to Air::Arg Index to fully utilize address computation in memory instruction for ARM64
        https://bugs.webkit.org/show_bug.cgi?id=227970

        Reviewed by Saam Barati.

        The pattern recognition of address computation in the instructions, e.g., Load 
        Resistor (LDR), Store Register (STR), etc., can benefit the instruction selector.
        Then, the Air operand BaseIndex containing base, index, and scale is introduced 
        to Air opcode. However, the <extend> option of index address is not fully leveraged 
        in the previous implementation. 

        To fill that gap, this patch adds a new member, MacroAssembler::Extend, to the current 
        design of BaseIndex to trigger zero/sign extension on the Index address. And this is 
        enabled for Store/Load with valid index address and shift amount.

        Maybe, the ideal approach is to introduce a decorator (Index@EXT) to the Air operand 
        to provide an extension opportunity for the specific form of the Air opcode.

        Load Register (LDR) calculates an address from a base register value and an 
        offset register value, loads a word from memory, and writes it to a register. 
        The offset register value can optionally be shifted and extended.

        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = Z/SExt32(Trunc(ArgumentReg(%x1)))
        Int @2 = scale
        Int @3 = Shl(@1, @2)
        Int @4 = Add(@0, @3)
        Int @5 = Load(@4, ControlDependent|Reads:Top)
        Void@6 = Return(@5, Terminal)

        // Old optimized AIR
        Move               %x1, %x1, @1
        Move (%x0,%x1,2^scale), %x0, @5
        Ret                %x0,      @6

        // New optimized AIR
        Move (%x0,%x1,2^scale), %x0, @5
        Ret                %x0,      @6

        Store Register (STR) calculates an address from a base register value and an 
        offset register value, and stores a 32-bit word or a 64-bit doubleword to the 
        calculated address, from a register.

        Given B3 IR:
        Int @0 = value
        Int @1 = ArgumentReg(%x0)
        Int @2 = Z/SExt32(Trunc(ArgumentReg(%x1))
        Int @3 = scale
        Int @4 = Shl(@2, @3)
        Int @5 = Add(@1, @4)
        Void@6 = Store(@0, @5, ControlDependent|Writes:Top)
        Void@7 = Return(@0, Terminal)

        // Old optimized AIR
        Move32    %x1,               %x1, @2
        Store32  %xzr, (%x0,%x1,2^scale), @6
        Move       $0,               %x0, @7
        Ret32     %x0,                    @7

        // New optimized AIR
        Store32  %xzr, (%x0,%x1,2^scale), @6
        Move       $0,               %x0, @7
        Ret32     %x0,                    @7

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::BaseIndex::BaseIndex):
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::indexExtendType):
        (JSC::MacroAssemblerARM64::load64):
        (JSC::MacroAssemblerARM64::load32):
        (JSC::MacroAssemblerARM64::load16):
        (JSC::MacroAssemblerARM64::load16SignedExtendTo32):
        (JSC::MacroAssemblerARM64::load8):
        (JSC::MacroAssemblerARM64::load8SignedExtendTo32):
        (JSC::MacroAssemblerARM64::store64):
        (JSC::MacroAssemblerARM64::store32):
        (JSC::MacroAssemblerARM64::store16):
        (JSC::MacroAssemblerARM64::store8):
        (JSC::MacroAssemblerARM64::loadDouble):
        (JSC::MacroAssemblerARM64::loadFloat):
        (JSC::MacroAssemblerARM64::storeDouble):
        (JSC::MacroAssemblerARM64::storeFloat):
        * b3/B3LowerToAir.cpp:
        * b3/air/AirArg.h:
        (JSC::B3::Air::Arg::index):
        (JSC::B3::Air::Arg::asBaseIndex const):
        * b3/testb3.h:
        * b3/testb3_2.cpp:
        (testLoadZeroExtendIndexAddress):
        (testLoadSignExtendIndexAddress):
        (testStoreZeroExtendIndexAddress):
        (testStoreSignExtendIndexAddress):
        (addBitTests):

2021-07-16  Saam Barati  <sbarati@apple.com>

        Grab the lock in FTL::Thunks::keyForSlowPathCallThunk
        https://bugs.webkit.org/show_bug.cgi?id=227988
        <rdar://problem/80627901>

        Reviewed by Mark Lam.

        Both FTL::Thunks::keyForSlowPathCallThunk and FTL::Thunks::getSlowPathCallThunk
        both touch the thunks hash map. In r278030, when I added the lock, I grabbed it
        in getSlowPathCallThunk, but forgot to also grab it in keyForSlowPathCallThunk.

        * ftl/FTLThunks.h:
        (JSC::FTL::Thunks::keyForSlowPathCallThunk):

2021-07-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r279916.
        https://bugs.webkit.org/show_bug.cgi?id=228037

        some of tests are timing out

        Reverted changeset:

        "Convert small JIT pool tests into executable fuzzing"
        https://bugs.webkit.org/show_bug.cgi?id=226279
        https://commits.webkit.org/r279916

2021-07-16  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] RegExp::dumpToStream must not ref Strings since it is called concurrently
        https://bugs.webkit.org/show_bug.cgi?id=228031
        rdar://80686425

        Reviewed by Mark Lam.

        RegExp::dumpToStream's escapedPattern can return m_pattern. In that case, it is refed in the concurrent thread.
        This is wrong since StringImpl must not be ref-ed concurrently. This patch just revert this function to the old behavior.

        * runtime/RegExp.cpp:
        (JSC::RegExp::dumpToStream):

2021-07-15  Keith Miller  <keith_miller@apple.com>

        Alias JSC graph dumping options
        https://bugs.webkit.org/show_bug.cgi?id=228015

        Reviewed by Yusuke Suzuki.

        My brain seems to associate the phases with the tier we are compiling in
        rather than the type of graph we are processing. At this point it's
        probably easier to just add an alias rather than convince me otherwise.

        * runtime/OptionsList.h:

2021-07-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] SamplingProfiler should recognize RegExp execution
        https://bugs.webkit.org/show_bug.cgi?id=201702

        Reviewed by Saam Barati.

        This patch extends SamplingProfiler to recognize RegExp execution. We record
        executing RegExp in VM via MatchingContextHolder so that SamplingProfiler can detect it.
        We use MatchingContextHolder even if the RegExp is interpreter mode so that we can still
        catch non-JIT RegExp in SamplingProfiler.

        The example output is the following.

            Sampling rate: 1000.000000 microseconds. Total samples: 1830
            Top functions as <numSamples  'functionName#hash:sourceID'>
               466    'Exec#<nil>:4'
               225    '/(^|[^\\])\"\\\/Qngr\((-?[0-9]+)\)\\\/\"/g#<nil>:-1'
               173    'runBlock1#<nil>:4'
                88    '/NQ_VQ/g#<nil>:-1'
                83    '/d2/g#<nil>:-1'
                78    '/d1/g#<nil>:-1'
                70    '/\s?;\s?/#<nil>:-1'
                68    'replace#<nil>:3'
                50    '/(((\w+):\/\/)([^\/:]*)(:(\d+))?)?([^#?]*)(\?([^#]*))?(#(.*))?/#<nil>:-1'
                49    'runBlock0#<nil>:4'
                46    '#<nil>:-1'
                24    '/^\s*|\s*$/g#<nil>:-1'


            Sampling rate: 1000.000000 microseconds. Total samples: 1830

            Tier breakdown:
            -----------------------------------
            LLInt:                    13  (0.710383%)
            Baseline:                 54  (2.950820%)
            DFG:                     187  (10.218579%)
            FTL:                     612  (33.442623%)
            js builtin:               73  (3.989071%)
            Wasm:                      0  (0.000000%)
            Host:                      0  (0.000000%)
            RegExp:                  907  (49.562842%)
            C/C++:                     0  (0.000000%)
            Unknown Executable:       57  (3.114754%)


            Hottest bytecodes as <numSamples   'functionName#hash:JITType:bytecodeIndex'>
               378    'Exec#<nil>:FTL:bc#27'
               225    '/(^|[^\\])\"\\\/Qngr\((-?[0-9]+)\)\\\/\"/g#<nil>:RegExp:<nil>'
                88    '/NQ_VQ/g#<nil>:RegExp:<nil>'
                83    '/d2/g#<nil>:RegExp:<nil>'
                78    '/d1/g#<nil>:RegExp:<nil>'
                70    '/\s?;\s?/#<nil>:RegExp:<nil>'
                62    'replace#<nil>:FTL:bc#63'
                53    'Exec#<nil>:DFG:bc#27'
                50    '/(((\w+):\/\/)([^\/:]*)(:(\d+))?)?([^#?]*)(\?([^#]*))?(#(.*))?/#<nil>:RegExp:<nil>'
                46    '#<nil>:None:<nil>'
                42    'runBlock1#<nil>:FTL:bc#1795'
                29    'runBlock1#<nil>:FTL:bc#1849'
                29    'runBlock1#<nil>:FTL:bc#1741'
                24    '/^\s*|\s*$/g#<nil>:RegExp:<nil>'
                17    'runBlock1#<nil>:DFG:bc#1741'
                17    'runBlock1#<nil>:DFG:bc#1795'
                16    '/\b\w+\b/g#<nil>:RegExp:<nil>'
                14    '/TNQP=([^;]*)/i#<nil>:RegExp:<nil>'
                13    '/%\w?$/#<nil>:RegExp:<nil>'
                12    '/^ba/#<nil>:RegExp:<nil>'
                11    '/^\s*(\S*(\s+\S+)*)\s*$/#<nil>:RegExp:<nil>'
                10    'runBlock0#<nil>:FTL:bc#400'
                10    'runBlock1#<nil>:DFG:bc#1849'
                10    'Exec#<nil>:DFG:bc#16'
                 9    '/(?:ZFVR.(\d+\.\d+))|(?:(?:Sversbk|TenaCnenqvfb|Vprjrnfry).(\d+\.\d+))|(?:Bcren.(\d+\.\d+))|(?:NccyrJroXvg.(\d+(?:\.\d+)?))/#<nil>:RegExp:<nil>'
                 8    '/##yv18##/gi#<nil>:RegExp:<nil>'
                 8    '/([a-zA-Z]|\s)+/#<nil>:RegExp:<nil>'
                 7    '/JroXvg\/(\S+)/#<nil>:RegExp:<nil>'
                 7    'runBlock0#<nil>:FTL:bc#2671'
                 7    '/^([#.]?)((?:[\w\u0128-\uffff*_-]|\\.)*)/#<nil>:RegExp:<nil>'
                 6    '/##oe##/gi#<nil>:RegExp:<nil>'
                 6    'runBlock1#<nil>:FTL:bc#124'
                 6    '/[+, ]/#<nil>:RegExp:<nil>'
                 6    'runBlock1#<nil>:FTL:bc#1903'
                 6    'replace#<nil>:DFG:bc#63'
                 5    'runBlock0#<nil>:FTL:bc#3378'
                 5    '/'/g#<nil>:RegExp:<nil>'
                 5    '/##yv20##/gi#<nil>:RegExp:<nil>'
                 4    '/\?[\w\W]*(sevraqvq|punaaryvq|tebhcvq)=([^\&\?#]*)/i#<nil>:RegExp:<nil>'
                 4    'load#<nil>:None:<nil>'

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/RegExp.cpp:
        (JSC::RegExp::matchCompareWithInterpreter):
        (JSC::RegExp::dumpToStream):
        (JSC::appendLineTerminatorEscape<LChar>):
        (JSC::appendLineTerminatorEscape<UChar>):
        (JSC::escapePattern):
        (JSC::RegExp::escapedPattern const): Moved from RegExpPrototype.cpp to implement RegExp::toSourceString and RegExp::escapedPattern.
        (JSC::RegExp::toSourceString const):
        (JSC::regexpToSourceString): Deleted.
        * runtime/RegExp.h:
        * runtime/RegExpInlines.h:
        (JSC::RegExp::matchInline):
        * runtime/RegExpPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::appendLineTerminatorEscape<LChar>): Deleted.
        (JSC::appendLineTerminatorEscape<UChar>): Deleted.
        (JSC::regExpProtoGetterSourceInternal): Deleted.
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::takeSample):
        (JSC::SamplingProfiler::processUnverifiedStackTraces):
        (JSC::SamplingProfiler::StackFrame::nameFromCallee):
        (JSC::SamplingProfiler::StackFrame::displayName):
        (JSC::SamplingProfiler::StackFrame::displayNameForJSONTests):
        (JSC::SamplingProfiler::StackFrame::functionStartLine):
        (JSC::SamplingProfiler::StackFrame::functionStartColumn):
        (JSC::SamplingProfiler::StackFrame::sourceID):
        (JSC::SamplingProfiler::StackFrame::url):
        (JSC::SamplingProfiler::reportTopBytecodes):
        (WTF::printInternal):
        * runtime/SamplingProfiler.h:
        * runtime/VM.h:
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::MatchingContextHolder::MatchingContextHolder): Deleted.
        (JSC::Yarr::MatchingContextHolder::~MatchingContextHolder): Deleted.
        * yarr/YarrJIT.h:
        (JSC::Yarr::MatchingContextHolder::offsetOfStackLimit): Deleted.
        (JSC::Yarr::MatchingContextHolder::offsetOfPatternContextBuffer): Deleted.
        (JSC::Yarr::MatchingContextHolder::offsetOfPatternContextBufferSize): Deleted.
        * yarr/YarrMatchingContextHolder.h: Added.
        (JSC::Yarr::MatchingContextHolder::offsetOfStackLimit):
        (JSC::Yarr::MatchingContextHolder::offsetOfPatternContextBuffer):
        (JSC::Yarr::MatchingContextHolder::offsetOfPatternContextBufferSize):
        (JSC::Yarr::MatchingContextHolder::MatchingContextHolder):
        (JSC::Yarr::MatchingContextHolder::~MatchingContextHolder):

2021-07-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Harden defaultTimeZone retrieval
        https://bugs.webkit.org/show_bug.cgi?id=227996
        rdar://80540300

        Reviewed by Mark Lam.

        We received the report that "UTC" can appear in Intl.DateTimeFormat's default timezone.
        While we cannot reproduce it, this patch attempts to avoid using TimeZone from UCalendar
        so that the code gets the same to the old defaultTimeZone implementation.

        * runtime/JSDateMath.cpp:
        (JSC::DateCache::defaultTimeZone):
        (JSC::DateCache::timeZoneCacheSlow):

2021-07-15  Mark Lam  <mark.lam@apple.com>

        JITWorklist::waitUntilAllPlansForVMAreReady() should also be notified when plans are cancelled.
        https://bugs.webkit.org/show_bug.cgi?id=228003
        rdar://78314543

        Reviewed by Yusuke Suzuki.

        Previously, it only gets notified when plans are done compiling.  As a result, if
        JITWorklist::waitUntilAllPlansForVMAreReady() found non-ready plans and started
        waiting, and those plans were canceled, then JITWorklist::waitUntilAllPlansForVMAreReady()
        can hang indefinitely.

        This patch renames JITWorklist::::m_planCompiled to m_planCompiledOrCancelled,
        and notifies it also when plans are cancelled.

        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::waitUntilAllPlansForVMAreReady):
        (JSC::JITWorklist::removeMatchingPlansForVM):
        * jit/JITWorklist.h:
        * jit/JITWorklistThread.cpp:
        (JSC::JITWorklistThread::work):

2021-07-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add samplingProfilerIgnoreExternalSourceID option
        https://bugs.webkit.org/show_bug.cgi?id=227985

        Reviewed by Mark Lam.

        We can ignore sourceID when aggregating samples. By doing so, we can open Speedometer2 style iframes
        and still aggregate all the functions even though each script in iframe has different source ID.

        * runtime/OptionsList.h:
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::StackFrame::sourceID):
        (JSC::SamplingProfiler::reportTopFunctions):
        * runtime/SamplingProfiler.h:

2021-07-15  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, mid-July 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=227981

        Unreviewed non-unified build fixes.

        * ftl/FTLState.cpp: Add missing B3ValueInlines.h header.
        * runtime/TemporalNow.cpp: Add missing JSCJSValueInlines.h and JSObjectInlines.h headers.
        * runtime/TemporalObject.cpp: Ditto.

2021-07-14  Devin Rousso  <drousso@apple.com>

        Implement Array.prototype.findLast and Array.prototype.findLastIndex
        https://bugs.webkit.org/show_bug.cgi?id=227939

        Reviewed by Yusuke Suzuki.

        * builtins/ArrayPrototype.js:
        (findLast): Added.
        (findLastIndex): Added.
        (JSC::ArrayPrototype::finishCreation):
        * runtime/JSTypedArrayViewPrototype.cpp:

        * builtins/TypedArrayPrototype.js:
        (findLast): Added.
        (findLastIndex): Added.
        * runtime/ArrayPrototype.cpp:
        (JSC::JSTypedArrayViewPrototype::finishCreation):

        * runtime/OptionsList.h:

2021-07-14  Michael Saboff  <msaboff@apple.com>

        [macOS] Add new entitlement to limit process to a single JIT region
        https://bugs.webkit.org/show_bug.cgi?id=227956

        Reviewed by Mark Lam.

        This macOS entitlement limits a process to a single JIT region.
        This matches the behavior on iOS.

        * Scripts/process-entitlements.sh:
        * entitlements.plist:

2021-07-14  Mark Lam  <mark.lam@apple.com>

        Speculative fix for failed scope.releaseAssertNoException() after calls to JSMap::create().
        https://bugs.webkit.org/show_bug.cgi?id=227964
        rdar://78013960

        Reviewed by Yusuke Suzuki.

        There have been reports of flaky failures on the scope.releaseAssertNoException()
        after the call to JSMap::create() in JSModuleLoader::finishCreation().

        The scope.releaseAssertNoException() says that we don't expect the JSMap::create()
        to ever throw an exception.  If the assertion is true, the only way that we can
        see an exception there is if we're throwing an asynchronous TerminationException.

        Since JSModuleLoader::finishCreation() does not have any long running loops, we can
        just DeferTerminationForAWhile and let the next exception check site throw the
        asynchronous TerminationException.  We don't want to just use DeferTermination
        because it will throw the TerminationException right at the end of
        JSModuleLoader::finishCreation(), and the caller of JSModuleLoader::finishCreation()
        may be similarly not expecting an exception to be thrown there.

        Also apply the same treatment to AbstractModuleRecord::finishCreation(), and
        getBackingMap() in WebCore for the same reason.  Other than those, other sites that
        call JSMap::create() already check for exceptions.  So, those sites do not need to
        DeferTerminationForAWhile.

        * runtime/AbstractModuleRecord.cpp:
        (JSC::AbstractModuleRecord::finishCreation):
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::finishCreation):

2021-07-14  Keith Miller  <keith_miller@apple.com>

        Convert small JIT pool tests into executable fuzzing
        https://bugs.webkit.org/show_bug.cgi?id=226279

        Right now, we try to test our engine on a small JIT pool. This isn't a known configuration for any
        actual ports and causes issues if we run out of JIT memory when we need to compile an OSR exit.
        Instead of testing such a small pool we should just fuzz each executable allocation that says it
        can fail.

        The current fuzzing doesn't do a good job tracking the number of DFG/FTL compiles when allocations
        fail, so when enabled those tests will just exit early. Also, right now we use a random seed picked
        by the engine for these tests, which makes it hard to reproduce crashes on the bots. If we see
        flakiness on the bots we can have the harness pass in a number so it gets logged in the repro command.

        Reviewed by Michael Saboff.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::numberOfDFGCompiles):
        * jit/ExecutableAllocationFuzz.cpp:
        (JSC::doExecutableAllocationFuzzing):
        * jsc.cpp:
        (runJSC):

2021-07-14  Mark Lam  <mark.lam@apple.com>

        Check for out of memory in JSC::globalFuncEscape() and JSC::globalFuncUnescape().
        https://bugs.webkit.org/show_bug.cgi?id=227962
        rdar://78392251

        Reviewed by Yusuke Suzuki.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-07-14  Yusuke Suzuki  <ysuzuki@apple.com>

        libpas executable-allocator should reserve more than 256KB for non-fail region at least
        https://bugs.webkit.org/show_bug.cgi?id=227927

        Reviewed by Keith Miller.

        libpas jit_heap has mediam allocator which allocates 128KB pages at once. However, our JSC stress tests are setting 100KB
        for small executable memory tests. As a result, under this configuration, we fail immediately after using medium allocator.

        But this test's "total size of executable memory is 100KB" is unrealistic: it is possible that only 100KB memory remains,
        but it is impossible that we reserve only 25KB for non-fail reservation. In production, we are always reserving 128MB. So
        this configuration is not realistic actually.

        So, this patch changes,

            1. If non-fail region is less than 256KB, then we add 256KB and keep this 256KB as non-fail executable allocation. If not,
                use 0.25 ratio as we are doing. This means that Options::jitMemoryReservationSize configures failable region of
                executable memory.
            2. We also revive bytesReserved and bytesAllocated to make memoryPressureMultiplier and early-fail allocation (when there is
                not enough memory and allocation can fail, then we should fail).

        * jit/ExecutableAllocator.cpp:
        (JSC::initializeJITPageReservation):
        (JSC::ExecutableAllocator::underMemoryPressure):
        (JSC::ExecutableAllocator::memoryPressureMultiplier):
        (JSC::ExecutableAllocator::allocate):
        (JSC::ExecutableMemoryHandle::createImpl):
        (JSC::ExecutableMemoryHandle::~ExecutableMemoryHandle):
        (JSC::ExecutableMemoryHandle::shrink):
        (JSC::ExecutableMemoryHandle::sizeInBytes const): Deleted.
        * jit/ExecutableMemoryHandle.h:
        (JSC::ExecutableMemoryHandle::sizeInBytes const):
        (JSC::ExecutableMemoryHandle::ExecutableMemoryHandle):

2021-07-14  Mark Lam  <mark.lam@apple.com>

        Placate exception checker validation in operationObjectAssignUntyped.
        https://bugs.webkit.org/show_bug.cgi?id=227955
        rdar://80503746

        Reviewed by Michael Saboff.

        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):

2021-07-13  Robin Morisset  <rmorisset@apple.com>

        Invalid machine code emitted by SpeculativeJIT::emitObjectOrOtherBranch
        https://bugs.webkit.org/show_bug.cgi?id=227869
        <rdar://problem/80457566>

        Reviewed by Mark Lam.

        SpeculativeJIT::emitObjectOrOtherBranch used to check the validity of the masqueradesAsUndefined watchpoint twice, and assumed that it could not change in between.
        That is clearly incorrect as the main thread is running concurrently with it, and so the watchpoint could fire at any time.
        The fix is trivial: just check the validity once, and store the result in a boolean.
        If the watchpoint triggers later that is fine: we'll notice and cancel the compilation (see WatchpointCollectionPhase, Plan::isStillValid() and Plan::finalize()).
        The change only protects us from rare and hard-to-reproduce crashes on debug builds caused by an ASSERT firing.

        I did not add a testcase, as I can only reproduce the bug by adding an extra wait in the middle of emitObjectOrOtherBranch.

        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):

2021-07-13  Yijia Huang  <yijia_huang@apple.com>

        Add a new Air::Arg kind ZeroReg to let AIR recognise the new instructions/forms accepting zero register in ARM64
        https://bugs.webkit.org/show_bug.cgi?id=227510

        Reviewed by Saam Barati.

        B3 is designed to be portable to many kinds of CPUs. However, to effectively 
        compile code to different CPUs, the compiler must eventually make explicit 
        instruction set details. Then, Air is introduced, and it is designed to target 
        individual CPU architectures and generate instructions specific to those CPUs. 

        Previously, Air don't recognize the zero register. This problem has been pointed 
        out in #174821, which was trying to introduce the new opcodes to handle the zero 
        register. 

        To solve this problem in a modular reasoning approach, a new Air operand ZeroReg 
        should be introduced. Its goal is to closely match the CPU instructions 
        accepting the zero register in ARM64. Another reason is that the new overloads 
        of the instructions taking the zero register can benefit instruction selection 
        with this implementation. 

        Here, the ZeroReg is added as a new kind for Air::Arg, which acts as a "high 
        level" operand to be emitted with the associative opcodes. In ARM64, the ZeroReg 
        would be emitted as a zero register.

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::storeZero64): Deleted.
        (JSC::MacroAssemblerARM64::storeZero32): Deleted.
        (JSC::MacroAssemblerARM64::storeZero16): Deleted.
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::storeZero32): Deleted.
        (JSC::MacroAssemblerX86Common::storeZero16): Deleted.
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::storeZero64): Deleted.
        * b3/B3LowerToAir.cpp:
        * b3/air/AirArg.cpp:
        (JSC::B3::Air::Arg::jsHash const):
        (JSC::B3::Air::Arg::dump const):
        (WTF::printInternal):
        * b3/air/AirArg.h:
        (JSC::B3::Air::Arg::zeroReg):
        (JSC::B3::Air::Arg::isZeroReg const):
        (JSC::B3::Air::Arg::isGP const):
        (JSC::B3::Air::Arg::isFP const):
        (JSC::B3::Air::Arg::isValidForm const):
        (JSC::B3::Air::Arg::asZeroReg const):
        * b3/air/AirLowerStackArgs.cpp:
        (JSC::B3::Air::lowerStackArgs):
        * b3/air/AirOpcode.opcodes:
        * b3/air/opcode_generator.rb:
        * b3/testb3.h:
        * b3/testb3_1.cpp:
        (run):
        * b3/testb3_3.cpp:
        (testStoreZeroReg):

2021-07-12  Filip Pizlo  <fpizlo@apple.com> and Yusuke Suzuki  <ysuzuki@apple.com>

        New malloc algorithm
        https://bugs.webkit.org/show_bug.cgi?id=226404

        Reviewed by Yusuke Suzuki.

        Switch the ExecutableAllocator to the libpas jit_heap. The libpas jit_heap uses two size
        categories of bitfit and a large heap, and is happy to do its approximate first-fit in any
        ranges of memory you give it. Jit_heap never allocates metadata inside the memory it manages.
        Allocations and deallocations take a constant-bounded amount of time except for unusual
        situations, and are protected by fine-grained locking in most cases. Decommit follows libpas
        scavenging policy. This alone is a speed-up on Speedometer (probably about 1% or more).

        Also expose some libpas introspection via $vm.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/MacroAssemblerCodeRef.h:
        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::underMemoryPressure):
        (JSC::ExecutableAllocator::memoryPressureMultiplier):
        (JSC::ExecutableAllocator::allocate):
        (JSC::ExecutableAllocator::committedByteCount):
        (JSC::ExecutableMemoryHandle::createImpl):
        (JSC::ExecutableMemoryHandle::~ExecutableMemoryHandle):
        (JSC::ExecutableMemoryHandle::sizeInBytes const):
        (JSC::ExecutableMemoryHandle::shrink):
        * jit/ExecutableAllocator.h:
        * jit/ExecutableMemoryHandle.h: Added.
        (JSC::ExecutableMemoryHandle::start const):
        (JSC::ExecutableMemoryHandle::end const):
        (JSC::ExecutableMemoryHandle::startAsInteger const):
        (JSC::ExecutableMemoryHandle::endAsInteger const):
        (JSC::ExecutableMemoryHandle::containsIntegerAddress const):
        (JSC::ExecutableMemoryHandle::contains const):
        (JSC::ExecutableMemoryHandle::key const):
        (JSC::ExecutableMemoryHandle::dump const):
        (JSC::ExecutableMemoryHandle::ExecutableMemoryHandle):
        * tools/JSDollarVM.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSDollarVM::finishCreation):

2021-07-12  Mark Lam  <mark.lam@apple.com>

        Revert r277027: breaks GC.
        https://bugs.webkit.org/show_bug.cgi?id=227888

        Reviewed by Saam Barati.

        The patch in r277027 to make deletion of GCAwareJITStubRoutines incremental has a
        bug: the routine may not be deleted yet by the incremental sweeper before the next
        GC cycle, and the GC will not be happy visiting dead cell pointers in that routine.
        There is also another bug with the triggering of sweeping.

        For now, we're reverting the patch, and will revisit this at a later time.

        * CMakeLists.txt:
        * heap/Heap.cpp:
        (JSC::Heap::deleteUnmarkedCompiledCode):
        (JSC::Heap::sweepSynchronously):
        * heap/Heap.h:
        * heap/HeapInlines.h:
        (JSC::Heap::mayHaveJITStubRoutinesToDelete): Deleted.
        (JSC::Heap::deleteDeadJITStubRoutines): Deleted.
        * heap/IncrementalSweeper.cpp:
        (JSC::IncrementalSweeper::doSweep):
        * heap/JITStubRoutineSet.cpp:
        (JSC::JITStubRoutineSet::deleteUnmarkedJettisonedStubRoutines):
        * heap/JITStubRoutineSet.h:
        (JSC::JITStubRoutineSet::deleteUnmarkedJettisonedStubRoutines):
        (JSC::JITStubRoutineSet::traceMarkedStubRoutines):
        (JSC::JITStubRoutineSet::mayHaveRoutinesToDelete): Deleted.
        (JSC::JITStubRoutineSet::notifyHaveRoutinesToDelete): Deleted.
        * jit/GCAwareJITStubRoutine.cpp:
        (JSC::GCAwareJITStubRoutine::observeZeroRefCount):
        * jit/JITStubRoutine.h:
        (JSC::JITStubRoutine::createSelfManagedRoutine):

2021-07-12  Yijia Huang  <yijia_huang@apple.com>

        Add SMNEGL, UMNEGL, UMADDL, and UMSUBL for ARM64 and select this instruction in Air
        https://bugs.webkit.org/show_bug.cgi?id=227857

        Reviewed by Robin Morisset.

        The previous patches have already added MNEG, MADD, MSUB, SMADDL, and SMSUBL. 
        This patch completes the corresponding signed or unsigned variants (SMNEGL, 
        UMNEGL, UMADDL, and UMSUBL) of them. In addition, this patch refactors 
        the implementation and the associative test cases of MADD, MSUB, and MNEG 
        to be more readable and maintainable w.r.t their variants.

        ------------------------------
        ### SMNEGL/UMNEGL Xd Wn Wm ###
        ------------------------------
        Signed/Unsigned Multiply-Negate Long multiplies two 32-bit register values, 
        negates the product, and writes the result to the 64-bit destination register. 
        The equivalent patterns are 

        d = -(SExt32(n) * SExt32(m)) and d = -(ZExt32(n) * ZExt32(m)) respectively.

        Given B3 IR:
        Int @0 = S/ZExt32(Trunc(ArgumentReg(%x0)))
        Int @1 = S/ZExt32(Trunc(ArgumentReg(%x1)))
        Int @2 = Mul(@0, @1)
        Int @3 = Neg(@2)
        Void@4 = Return(@3, Terminal)

        // Old optimized AIR
        Move32      %x0, %x0,      @0
        Move32      %x1, %x1,      @1
        MultiplyNeg %x0, %x1, %x0, @3
        Ret         %x0,           @4

        // New optimized AIR
        MultiplyNegSign/ZeroExtend  %x0, %x1, %x0, @3
        Ret                         %x0,           @4

        --------------------------
        ### UMADDL Xd Wn Wm Xa ###
        --------------------------
        Unsigned Multiply-Add Long multiplies two 32-bit register values, adds a 64-bit 
        register value, and writes the result to the 64-bit destination register. The 
        equivalent patterns are 

        d = ZExt32(n) * ZExt32(m) + a or d = a + ZExt32(n) * ZExt32(m)

        Given B3 IR:
        Int @0 = ZExt32(Trunc(ArgumentReg(%x0)))
        Int @1 = ZExt32(Trunc(ArgumentReg(%x1)))
        Int @2 = ArgumentReg(%x2)
        Int @3 = Mul(@0, @1)
        Int @4 = Add(@3, @2)
        Void@5 = Return(@4, Terminal)

        // Old optimized AIR
        Move32        %x0, %x0,           @1
        Move32        %x1, %x1,           @2
        MultiplyAdd   %x0, %x1, %x2, %x0, @4
        Ret64         %x0,                @5

        // New optimized AIR
        MultiplyAddZeroExtend %x0, %x1, %x2, %x0, @8
        Ret                   %x0,                @9

        --------------------------
        ### UMSUBL Xd Wn Wm Xa ###
        --------------------------
        Unsigned Multiply-Subtract Long multiplies two 32-bit register values, subtracts 
        the product from a 64-bit register value, and writes the result to the 64-bit 
        destination register. The equivalent patterns are 

        d = a - ZExt32(n) * ZExt32(m)

        Given B3 IR:
        Int @0 = ZExt32(Trunc(ArgumentReg(%x0)))
        Int @1 = ZExt32(Trunc(ArgumentReg(%x1)))
        Int @2 = ArgumentReg(%x2)
        Int @3 = Mul(@0, @1)
        Int @4 = Sub(@2, @3)
        Void@5 = Return(@4, Terminal)

        // Old optimized AIR
        Move32        %x0, %x0,           @1
        Move32        %x1, %x1,           @2
        MultiplySub   %x0, %x1, %x2, %x0, @4
        Ret64         %x0,                @5

        // New optimized AIR
        MultiplySubZeroExtend %x0, %x1, %x2, %x0, @8
        Ret                   %x0,                @9

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::multiplyNeg32):
        (JSC::MacroAssemblerARM64::multiplyAddZeroExtend32):
        (JSC::MacroAssemblerARM64::multiplySubZeroExtend32):
        (JSC::MacroAssemblerARM64::multiplyNeg64):
        (JSC::MacroAssemblerARM64::multiplyNegSignExtend32):
        (JSC::MacroAssemblerARM64::multiplyNegZeroExtend32):
        * assembler/testmasm.cpp:
        (JSC::testMultiplyAddSignExtend32):
        (JSC::testMultiplyAddZeroExtend32):
        (JSC::testMultiplySubSignExtend32):
        (JSC::testMultiplySubZeroExtend32):
        (JSC::testMultiplyNegSignExtend32):
        (JSC::testMultiplyNegZeroExtend32):
        (JSC::testMultiplyAddSignExtend32Left): Deleted.
        (JSC::testMultiplyAddSignExtend32Right): Deleted.
        * b3/B3LowerToAir.cpp:
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.h:
        * b3/testb3_2.cpp:
        (testMulAddArgsLeft):
        (testMulAddArgsRight):
        (testMulAddSignExtend32ArgsLeft):
        (testMulAddZeroExtend32ArgsLeft):
        (testMulAddZeroExtend32ArgsRight):
        (testMulSubArgsLeft):
        (testMulSubArgsRight):
        (testMulSubArgsRight32):
        (testMulSubSignExtend32):
        (testMulSubZeroExtend32):
        (testMulNegArgArg):
        (testMulNegArgs):
        (testMulNegArgs32):
        (testMulNegSignExtend32):
        (testMulNegZeroExtend32):
        (testMulSubSignExtend32Args): Deleted.
        * b3/testb3_3.cpp:
        (addArgTests):

2021-07-12  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JITCage already includes guard pages
        https://bugs.webkit.org/show_bug.cgi?id=227867

        Reviewed by Mark Lam.

        Since JITCage already includes guard pages, we do not need to allocate that additionally.

        * jit/ExecutableAllocator.cpp:
        (JSC::initializeJITPageReservation):

2021-07-10  Saam Barati  <sbarati@apple.com>

        Continue to consult InlineAccess's Structure even after switching to a stub IC
        https://bugs.webkit.org/show_bug.cgi?id=227785

        Reviewed by Yusuke Suzuki.

        This patch fixes a crash in: stress/class-subclassing-function.js
        
        The bug is this:
        1. We initialize a StructureStubInfo to be an inline self access doing a load based on structure S.
        2. We transition to being a PolymorphicAccess based StructureStubInfo. But, we haven't
        generated code yet. We're in the buffered state. So we are still running the inline access
        from (1).  But the StructureStubInfo thinks it's a "Stub".
        3. S is collected
        4. We continue to run code from (1), because when we finalize the IC during GC, it
        doesn't think it's an inline access.
        
        The fix is to always track the structure S that we used when generating the inline
        access, and to only stop tracking it once we've generated code for the Stub.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::fromStructureStubInfo):
        (JSC::AccessCase::propagateTransitions const):
        * bytecode/AccessCase.h:
        * bytecode/GetByStatus.cpp:
        (JSC::GetByStatus::computeForStubInfoWithoutExitSiteFeedback):
        * bytecode/InByStatus.cpp:
        (JSC::InByStatus::computeForStubInfoWithoutExitSiteFeedback):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::PolymorphicAccess::propagateTransitions const):
        * bytecode/PolymorphicAccess.h:
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::computeForStubInfo):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::initGetByIdSelf):
        (JSC::StructureStubInfo::initPutByIdReplace):
        (JSC::StructureStubInfo::initInByIdSelf):
        (JSC::StructureStubInfo::addAccessCase):
        (JSC::StructureStubInfo::reset):
        (JSC::StructureStubInfo::visitWeakReferences):
        (JSC::StructureStubInfo::propagateTransitions):
        * bytecode/StructureStubInfo.h:

2021-07-10  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Workaround test262.report bug by making $ properties enumerable
        https://bugs.webkit.org/show_bug.cgi?id=227855

        Reviewed by Alexey Shvayka.

        test262.report's harness has a bug and it reports incorrect results for JSC on tests using $262 properties.
        This patch introduces a workaround which makes properties of $ enumerable.

        * jsc.cpp:

2021-07-08  Yijia Huang  <yijia_huang@apple.com>

        Add Air opcode add/sub-and-shift for ARM64 and select this instruction in Air
        https://bugs.webkit.org/show_bug.cgi?id=227509

        Reviewed by Saam Barati.

        This patch includes two modifications:
            1. Add add/sub-with-shift to Air opcode and the corresponding pattern match for 
               instruction selection.
            2. Minor fix in disassembler.

        Given the operation:

            add/sub Rd, Rn, Rm, ShiftType, amount

        ADD/SUB (shifted register), adds/subs a register value Rn and an optionally-shifted register 
        value Rm, and writes the result to the destination register Rd. The instruction selector 
        can utilize this to lowering certain patterns in B3 IR before further Air optimization. 

        The equivalent pattern would be:

            d = n +/- (m ShiftType amount)

        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = ArgumentReg(%x1)
        Int @2 = amount
        Int @3 = ZShr(@1, @2)
        Int @4 = Add/Sub(@0, @3)
        Void@5 = Return(@4, Terminal)

        // Old optimized AIR
        Shift   %x1, amount, %x1, @3
        Add/Sub %x0,    %x1, %x0, @4
        Ret     %x0,              @5

        // New optimized AIR
        Add(Sub)Shift %x0, %x1, amount, %x0, @4
        Ret           %x0,                   @5

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::addLeftShift32):
        (JSC::MacroAssemblerARM64::addRightShift32):
        (JSC::MacroAssemblerARM64::addUnsignedRightShift32):
        (JSC::MacroAssemblerARM64::addLeftShift64):
        (JSC::MacroAssemblerARM64::addRightShift64):
        (JSC::MacroAssemblerARM64::addUnsignedRightShift64):
        (JSC::MacroAssemblerARM64::subLeftShift32):
        (JSC::MacroAssemblerARM64::subRightShift32):
        (JSC::MacroAssemblerARM64::subUnsignedRightShift32):
        (JSC::MacroAssemblerARM64::subLeftShift64):
        (JSC::MacroAssemblerARM64::subRightShift64):
        (JSC::MacroAssemblerARM64::subUnsignedRightShift64):
        * assembler/testmasm.cpp:
        (JSC::testAddWithLeftShift32):
        (JSC::testAddWithRightShift32):
        (JSC::testAddWithUnsignedRightShift32):
        (JSC::testAddWithLeftShift64):
        (JSC::testAddWithRightShift64):
        (JSC::testAddWithUnsignedRightShift64):
        (JSC::testSubWithLeftShift32):
        (JSC::testSubWithRightShift32):
        (JSC::testSubWithUnsignedRightShift32):
        (JSC::testSubWithLeftShift64):
        (JSC::testSubWithRightShift64):
        (JSC::testSubWithUnsignedRightShift64):
        * b3/B3LowerToAir.cpp:
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.h:
        (checkUsesInstruction):
        * b3/testb3_2.cpp:
        (testAddWithLeftShift32):
        (testAddWithRightShift32):
        (testAddWithUnsignedRightShift32):
        (testAddWithLeftShift64):
        (testAddWithRightShift64):
        (testAddWithUnsignedRightShift64):
        (testSubWithLeftShift32):
        (testSubWithRightShift32):
        (testSubWithUnsignedRightShift32):
        (testSubWithLeftShift64):
        (testSubWithRightShift64):
        (testSubWithUnsignedRightShift64):
        (addBitTests):
        * disassembler/ARM64/A64DOpcode.cpp:
        * disassembler/ARM64/A64DOpcode.h:
        (JSC::ARM64Disassembler::A64DOpcodeAddSubtractShiftedRegister::immediate6):
        (JSC::ARM64Disassembler::A64DOpcodeLogicalShiftedRegister::immediate6):

2021-07-08  Keith Miller  <keith_miller@apple.com>

        display-profiler-output should be able to print disassembly for the FTL
        https://bugs.webkit.org/show_bug.cgi?id=227798

        Reviewed by Saam Barati.

        Right now running JSC with the bytecode profiler will not print
        disassembly for FTL code. This patch adds this support. In order to get
        execution counts there is a callback at the transition between each
        DFG node in the Air disassembler. Since B3 code move parts of
        DFG nodes to different basic blocks we don't include execution
        counts in the dump. However, the DFG-only graph printed before
        the disassembly will still have the counts.

        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile):
        * ftl/FTLLink.cpp:
        (JSC::FTL::link):
        * ftl/FTLState.cpp:
        (JSC::FTL::State::dumpDisassembly):
        * ftl/FTLState.h:
        (JSC::FTL::State::dumpDisassembly):

2021-07-08  Yusuke Suzuki  <ysuzuki@apple.com>

        Use JSC::Yarr::flagsString to get string representation of RegExp flags
        https://bugs.webkit.org/show_bug.cgi?id=227790

        Reviewed by Keith Miller.

        * yarr/YarrFlags.h:

2021-07-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Clean up RegExp flag code
        https://bugs.webkit.org/show_bug.cgi?id=227786

        Reviewed by Filip Pizlo.

        I found a bug in regexpToSourceString (used for RegExp's dump code), and it motivates me to clean up
        all RegExp flag handling code. We define RegExp flags as a macro and updating that macro updates all
        RegExp flag handling code too.

        * runtime/RegExp.cpp:
        (JSC::RegExpFunctionalTestCollector::outputOneTest):
        (JSC::regexpToSourceString):
        * runtime/RegExp.h:
        * runtime/RegExpPrototype.cpp:
        (JSC::flagsString):
        * yarr/YarrFlags.cpp:
        (JSC::Yarr::parseFlags):
        (JSC::Yarr::flagsString):
        * yarr/YarrFlags.h:

2021-07-07  Saam Barati  <sbarati@apple.com>

        JSArrayBufferView::byteOffsetConcurrently has a race when using PAC
        https://bugs.webkit.org/show_bug.cgi?id=227765

        Reviewed by Mark Lam.

        We were calling JSArrayBufferView::vector(), which does PAC validation
        using the length() of the array. However, this can race with JSArrayBufferView::detach,
        which sets the length to zero, leading to sadness on the compiler thread.

        * runtime/JSArrayBufferView.h:
        (JSC::JSArrayBufferView::vectorWithoutPACValidation const):
        * runtime/JSArrayBufferViewInlines.h:
        (JSC::JSArrayBufferView::byteOffsetImpl):

2021-07-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Fix Object.assign fast path to accept undefined/null
        https://bugs.webkit.org/show_bug.cgi?id=227769
        rdar://80264271

        Reviewed by Saam Barati.

        Object.assign can accept undefined or null as a second (or latter) parameters.
        If it is passed, the parameter is just ignored. Previous DFG / FTL optimization patch
        does not handle this case.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileObjectAssign):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileObjectAssign):
        * runtime/ObjectConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/ObjectConstructorInlines.h:
        (JSC::objectAssignFast):

2021-07-07  Mark Lam  <mark.lam@apple.com>

        Heap::waitForCollector() needs to set m_mutatorDidRun.
        https://bugs.webkit.org/show_bug.cgi?id=227782
        rdar://78326474

        Reviewed by Saam Barati.

        Heap::waitForCollector() is one of 2 clients of Heap::stopIfNecessarySlow(unsigned oldState).
        The other client, Heap::stopIfNecessarySlow() sets m_mutatorDidRun to true after
        calling Heap::stopIfNecessarySlow(unsigned oldState).  Heap::waitForCollector()
        needs to do the same.  Constraint solvers rely on this.

        Without this, one fall out we've seen is that DOMGCOutputConstraint fails to
        visitOutputConstraints, and as a result, opaqueRoots may not get updated.  This
        issue was caught by the GC verifier.

        * heap/Heap.cpp:
        (JSC::Heap::waitForCollector):

2021-07-07  Michael Saboff  <msaboff@apple.com>

        fitcored crashes at JavaScriptCore: JSC::Heap::releaseAccessSlow
        https://bugs.webkit.org/show_bug.cgi?id=227767

        Reviewed by Geoffrey Garen.

        Speculative fix for this crash.  We are crashing while destroying the VM as we are about to
        release the JSLock.  In JSLock::willReleaseLock(), we release heap access.  Therefore we don't
        need to release it again when undertaking the various shutdown steps in the VM destructor.

        Added a new scope class that will only release and then acquire heap access if the caller
        currently has heap access.

        * heap/ReleaseHeapAccessScope.h:
        (JSC::ReleaseHeapAccessIfNeededScope::ReleaseHeapAccessIfNeededScope):
        (JSC::ReleaseHeapAccessIfNeededScope::~ReleaseHeapAccessIfNeededScope):
        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::waitUntilAllPlansForVMAreReady):

2021-07-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Do not allocate JITWorklist if JIT is disabled
        https://bugs.webkit.org/show_bug.cgi?id=227734

        Reviewed by Mark Lam.

        Previously, this code was doing,

            if (Options::useJIT())
                DFG::iterateCodeBlocksForGC(visitor, m_vm, func);

        But r278082 changed it to

            JITWorklist::ensureGlobalWorklist().iterateCodeBlocksForGC(visitor, m_vm, func);

        As a result, we are always allocating JITWorklist even JIT is not enabled.
        This patch fixes the behavior not to allocate JITWorklist.

        * heap/Heap.cpp:
        (JSC::Heap::iterateExecutingAndCompilingCodeBlocks):

2021-07-06  Yusuke Suzuki  <ysuzuki@apple.com>

        r270214 broke testb3 on arm64e
        https://bugs.webkit.org/show_bug.cgi?id=227713

        Reviewed by Saam Barati.

        ARM64E CAS lacks isBranch case. This patch adds isBranch implementation.
        We also adjust disasm scanning test to support CAS in ARM64E.

        * assembler/testmasm.cpp:
        (JSC::testAtomicStrongCASFill8):
        (JSC::testAtomicStrongCASFill16):
        * b3/B3LowerToAir.cpp:
        * b3/testb3_8.cpp:
        (testAtomicWeakCAS):
        (testAtomicStrongCAS):
        (testAtomicXchg):

2021-07-06  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix after r279630
        https://bugs.webkit.org/show_bug.cgi?id=223166

        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:

2021-07-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r279546, r279554, r279558 and r279567.
        https://bugs.webkit.org/show_bug.cgi?id=227732

        Speedometer/jQuery-TodoMVC 2-3% regression

        Reverted changesets:

        "[WebIDL] Rework runtime enabled properties leveraging
        PropertyCallback"
        https://bugs.webkit.org/show_bug.cgi?id=227275
        https://commits.webkit.org/r279546

        "[WebIDL] Generate constructor's hash table in
        GenerateConstructorHelperMethods"
        https://bugs.webkit.org/show_bug.cgi?id=227668
        https://commits.webkit.org/r279554

        "[WebIDL] Simplify generation of runtime conditionally read-
        write attributes"
        https://bugs.webkit.org/show_bug.cgi?id=227672
        https://commits.webkit.org/r279558

        "Use AbortSignal's [PrivateIdentifier] whenSignalAborted()
        static method"
        https://bugs.webkit.org/show_bug.cgi?id=227673
        https://commits.webkit.org/r279567

2021-07-06  Philip Chimento  <pchimento@igalia.com>

        [JSC] Implement Temporal
        https://bugs.webkit.org/show_bug.cgi?id=223166

        Reviewed by Yusuke Suzuki.

        Intended to be the first patch in a stack. Adds boilerplate for
        Temporal in order to unblock further parallelizable work on this bug.

        This patch adds a feature flag for Temporal, and a toplevel Temporal
        global containing only Temporal.now, which is itself an empty object.
        These objects will be further populated in later patches.

        * CMakeLists.txt: Add TemporalObject and TemporalNow. Property lookup
          table in TemporalObject.
        * DerivedSources.make: Add TemporalObject property lookup table header.
        * JavaScriptCore.xcodeproj/project.pbxproj: Add new files.
        * Sources.txt: Add TemporalObject and TemporalNow.
        * runtime/CommonIdentifiers.h: Add 'Temporal' property key.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init): Create the Temporal global if the feature
          flag is enabled.
        * runtime/OptionsList.h: Add useTemporal feature flag.
        * runtime/TemporalNow.cpp: Added.
        (JSC::TemporalNow::TemporalNow):
        (JSC::TemporalNow::create):
        (JSC::TemporalNow::createStructure):
        (JSC::TemporalNow::finishCreation):
        * runtime/TemporalNow.h: Added.
        * runtime/TemporalObject.cpp: Added.
        (JSC::createNowObject):
        (JSC::TemporalObject::TemporalObject):
        (JSC::TemporalObject::create):
        (JSC::TemporalObject::createStructure):
        (JSC::TemporalObject::finishCreation):
        * runtime/TemporalObject.h: Added.

2021-07-06  Yijia Huang  <yijia_huang@apple.com>

        Fix type error in testb3
        https://bugs.webkit.org/show_bug.cgi?id=227722

        Reviewed by Mark Lam.

        Fix type error in testb3. Shift amount should be 32-bit constant.

        * b3/testb3_3.cpp:
        (testInsertSignedBitfieldInZero64):
        (testExtractSignedBitfield64):

2021-07-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Optimize Object.assign and putDirectInternal
        https://bugs.webkit.org/show_bug.cgi?id=227677

        Reviewed by Filip Pizlo.

        This patch improves Object.assign performance (and this requires putDirectInternal improvement).

        1. Object.assign is handled by DFG / FTL as ObjectAssign node
        2. We found that putDirectInternal is suboptimal. This patch removes several bottlenecks. They are super critical from the measurement of
           microbenchmarks.
            2.1. Creating and destroying DeferredStructureTransitionWatchpointFire is not free. We should do that only when we need it.
            2.2. Before r277620, we are checking m_replacementWatchpointSets's nullptr and that was fast. But after that, we are always
                 calling HashMap::get, and it is not inlined. This means that if we have StructureRareData, we are always calling HashMap::get
                 even though there is no m_replacementWatchpointSets set. This patch adds HashMap::isNullStorage to avoid this call by inlinely
                 check this via `LIKELY(m_replacementWatchpointSets.isNullStorage())`.
            2.3. Structure::addPropertyTransitionToExistingStructure has very cheap fast path and we must inline them to get performance benefit
                 for major single-transition case.

        Added microbenchmarks show significant performance improvements. And Speedometer2 shows 0.6 - 1.0% improvement.

                                                 ToT                     Patched

            object-assign-transition      105.2539+-0.2970     ^     88.8046+-0.2029        ^ definitely 1.1852x faster
            object-assign-replace         116.1568+-0.0905     ^     75.0673+-0.0658        ^ definitely 1.5474x faster

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/Watchpoint.cpp:
        (JSC::DeferredWatchpointFire::fireAllSlow):
        (JSC::DeferredWatchpointFire::DeferredWatchpointFire): Deleted.
        (JSC::DeferredWatchpointFire::~DeferredWatchpointFire): Deleted.
        (JSC::DeferredWatchpointFire::fireAll): Deleted.
        * bytecode/Watchpoint.h:
        (JSC::DeferredWatchpointFire::DeferredWatchpointFire):
        (JSC::DeferredWatchpointFire::fireAll):
        (JSC::FireDetail::FireDetail): Deleted.
        (JSC::FireDetail::~FireDetail): Deleted.
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGMayExit.cpp:
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileObjectAssign):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileObjectAssign):
        * runtime/Intrinsic.cpp:
        (JSC::intrinsicName):
        * runtime/Intrinsic.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::deleteProperty):
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::putDirectInternal):
        * runtime/ObjectConstructor.cpp:
        (JSC::objectAssignGeneric):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/ObjectConstructor.h:
        * runtime/ObjectConstructorInlines.h: Added.
        (JSC::canPerformFastPropertyEnumerationForObjectAssign):
        * runtime/Structure.cpp:
        (JSC::StructureTransitionTable::singleTransition const): Deleted.
        (JSC::StructureTransitionTable::get const): Deleted.
        (JSC::Structure::addPropertyTransitionToExistingStructureImpl): Deleted.
        (JSC::Structure::addPropertyTransitionToExistingStructure): Deleted.
        (JSC::Structure::addPropertyTransitionToExistingStructureConcurrently): Deleted.
        * runtime/Structure.h:
        * runtime/StructureInlines.h:
        (JSC::Structure::didReplaceProperty):
        (JSC::Structure::propertyReplacementWatchpointSet):
        (JSC::Structure::addPropertyTransitionToExistingStructureImpl):
        (JSC::Structure::addPropertyTransitionToExistingStructure):
        (JSC::Structure::addPropertyTransitionToExistingStructureConcurrently):
        (JSC::StructureTransitionTable::singleTransition const):
        (JSC::StructureTransitionTable::get const):

2021-07-06  Yijia Huang  <yijia_huang@apple.com>

        Fix instruction check failure of UBFX and SBFIZ in testb3 due to the speculative fix in bug 227554
        https://bugs.webkit.org/show_bug.cgi?id=227563

        Reviewed by Filip Pizlo.

        This patch includes two modifications to resolve rdar://79978150:
            1. Fix the bug caused by the patch introducing BFI.
            2. Discard the corresponding speculative fix in https://bugs.webkit.org/show_bug.cgi?id=227554.

        The previous patch, added bit field insert (BFI) to AIR opcode, causes the Gmail page 
        hanging issue on Safari. The root cause is the incorrect definition of register role in 
        BFI's AIR opcode. Since BFI inserts a bit field at the low end of the destination register 
        while keeping the high bit unchanged, the destination register should have both roles of 
        use and define simultaneously, which is not (missing use) in the previous patch. 

        This will result in the loss of preserving the value of the destination register, 
        which does happen when browsing the Gmail page on Safari.

            // B3 IR snippets from Gmail
            Int32 b@23  = Add(b@104, b@111, D@100)
            ...
            Int32 b@55  = Const32(65535, D@50)
            Int32 b@137 = BitAnd(b@118, $65535(b@55), D@160)
            Int32 b@168 = Const32(16, D@40)
            Int32 b@141 = Shl(b@137, $16(b@168), D@163)
            Int32 b@143 = BitAnd(b@23, $65535(b@55), D@166)
            Int32 b@144 = BitOr(b@141, b@143, D@169)

        The pattern of BFI is d = ((n & mask1) << lsb) | (d & mask2). So, it is obvious that 
        BFI can be utilized in b@144 where the d is b@23.

            // Incorrect AIR opcode of BFI
            arm64: InsertBitField32 U:G:32, U:G:32, U:G:32, ZD:G:32
                Tmp, Imm, Imm, Tmp

            // Air w/o use role
            Add32            %x3, %x7, %x7,      b@23
            ...
            InsertBitField32 %x3, $16, $16, %x4, b@144

            // Generated code w/o use role
            add      w7, w3,  w7
            ...
            bfi      w4, w3, #16, #16

        In Air, the added value is stored in the w7. But the value is not preserved after 
        lowering with BFI. To fix this, the use role should be enabled for the destination 
        register.

            // Correnct AIR opcode of BFI
            arm64: InsertBitField32 U:G:32, U:G:32, U:G:32, UZD:G:32
                Tmp, Imm, Imm, Tmp

            // Air w/ use role
            Add32            %x3, %x7, %x7,      b@23
            ...
            Move32           %x7, %x4,           b@144
            InsertBitField32 %x3, $16, $16, %x4, b@144

            // Generated code w/ use role
            add      w7, w3, w7
            ...
            ubfx     x4, x7,  #0, #32
            bfi      w4, w3, #16, #16

        In addition, BFXIL, which has pattern d = ((n >> lsb) & mask1) | (d & mask2), also needs 
        the similar update.

        * b3/B3LowerToAir.cpp:
        * b3/air/AirOpcode.opcodes:
        * b3/testb3_2.cpp:
        (testInsertBitField32):
        (testInsertBitField64):
        (testExtractInsertBitfieldAtLowEnd32):
        (testExtractInsertBitfieldAtLowEnd64):
        * runtime/OptionsList.h:

2021-07-04  Robin Morisset  <rmorisset@apple.com>

        ActiveScratchBufferScope should take the buffer as argument
        https://bugs.webkit.org/show_bug.cgi?id=227670
        rdar://80011612

        Reviewed by Mark Lam.

        https://bugs.webkit.org/show_bug.cgi?id=227013 created ActiveScratchBufferScope.
        It is used by operations that can cause the GC to run, to mark as roots the contents of the scratch buffer that is live during that time (if any).
        The bug is that it simply asks the VM for a scratch buffer of the right size, but this will always return the last scratch buffer, and not necessarily the one that the operation is actually using.

        A fairly simple fix is to pass it directly the scratch buffer, since the operation normally can get it easily enough.
        In most cases the operation has access to the m_buffer field of the ScratchBuffer, but getting a pointer to the entire structure from that is fairly simple (I added ScratchBuffer::fromData() to do so).

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGOSRExit.h:
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileNewArray):
        * dfg/DFGThunks.cpp:
        (JSC::DFG::osrExitGenerationThunkGenerator):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::haveABadTime):
        * runtime/VM.h:
        (JSC::ScratchBuffer::fromData):
        * runtime/VMInlines.h:
        (JSC::ActiveScratchBufferScope::ActiveScratchBufferScope):
        (JSC::ActiveScratchBufferScope::~ActiveScratchBufferScope):

2021-07-04  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] Simplify generation of runtime conditionally read-write attributes
        https://bugs.webkit.org/show_bug.cgi?id=227672

        Reviewed by Sam Weinig.

        * runtime/Lookup.h:
        (JSC::HashTableValue::makeReadOnlyCopy const):

2021-07-03  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] Rework runtime enabled properties leveraging PropertyCallback
        https://bugs.webkit.org/show_bug.cgi?id=227275

        Reviewed by Saam Barati.

        To make the implementation of WebIDL runtime enabled properties independent of eager
        property reification, this change:

        1. Introduces IsLazyPropertyEnabledCallback, which is needed separately from existing
           value callback to maintain the invariant that reifyStaticProperty() always puts a
           property, and to keep enumeration fast.

           Calling disableCaching() isn't enough to achieve correct [[Get]] inline caching,
           so isTaintedByOpaqueObject() is leveraged to prohibit caching of runtime disabled
           properties, just like in operationTryGetByIdOptimize().

           The only case that might seem weird is runtime disabled properties, which were
           enabled after all static properties were reified via [[Delete]], are not appearing.
           It's fixable, yet there is currently no demand for it.

        2. Adds support for LazyPropertyCallback returning GetterSetter / CustomGetterSetter,
           ensuring correct structure flags and slot initialization. Previously, the callback
           was used to init only objects and constructors, using putDirect() unconditionally.

           To avoid mixing other non-basic attributes with PropertyCallback, which would require
           hoisting of checks against PropertyCallback and complicating attribute validation in
           HashTableValue methods, this patch checks the type of callback's return value instead.

           In the future, sticking to this approach will make returning CustomValue impossible
           as it can't be distinguished from CustomAccessor. That's fine because all present
           CustomValue usages merely do lazy init, which PropertyCallback is better suited for.

        Also, this patch:

        3. Expands setUpStaticFunctionSlot() to handle constant integers so the code using
           `Node.ELEMENT_NODE` & friends doesn't regress (proven by attached microbenchmark).

        4. Removes extra checks from setUpStaticPropertySlot(), which is called only on
           non-reified properties.

        5. Removes invariant that DOMJITAttribute property is read-only, which was broken
           by `document.body` having a non-JIT custom setter. This aligns non-reified
           properties with structure ones.

        * jit/Repatch.cpp:
        (JSC::tryCacheGetBy):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::setupGetByIdPrototypeCache):
        * runtime/HasOwnPropertyCache.h:
        (JSC::HasOwnPropertyCache::tryAdd):
        * runtime/JSObject.cpp:
        (JSC::lookupPropertyForPut):
        (JSC::JSObject::putInlineSlow):
        (JSC::JSObject::reifyAllStaticProperties):
        * runtime/JSObject.h:
        (JSC::JSObject::getOwnNonIndexPropertySlot):
        (JSC::JSObject::fillStructurePropertySlot):
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::getNonReifiedStaticPropertyNames):
        * runtime/Lookup.cpp:
        (JSC::setUpStaticPropertySlot):
        (JSC::setUpStaticFunctionSlot): Deleted.
        * runtime/Lookup.h:
        (JSC::HashTableValue::isLazyPropertyEnabled const):
        (JSC::getStaticPropertySlotFromTable):
        (JSC::reifyStaticProperty):
        (JSC::reifyStaticProperties):
        * tools/JSDollarVM.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSDollarVM::finishCreation):

2021-07-02  Keith Miller  <keith_miller@apple.com>

        Add 10 more unified source cpp files for JSC
        https://bugs.webkit.org/show_bug.cgi?id=227643

        Reviewed by Alex Christensen.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Scripts/generate-unified-sources.sh:
        * UnifiedSources-output.xcfilelist:

2021-07-02  Philippe Normand  <pnormand@igalia.com>

        [GTK] Add new revision variable in pkgconfig file
        https://bugs.webkit.org/show_bug.cgi?id=227629

        Reviewed by Michael Catanzaro.

        * javascriptcoregtk.pc.in: Include SVN_REVISION as revision variable, useful for apps to
        know on which upstream SVN revision their WebKitGTK-based app is built on.

2021-07-01  Yijia Huang  <yijia_huang@apple.com>

        Remove unnecessary canBeInternal invocations to mitigate the cost of potential unmatched patterns in B3LowerToAir
        https://bugs.webkit.org/show_bug.cgi?id=227508

        Reviewed by Filip Pizlo.

        The bit pattern doesn't cause worse code generation in the all-internals-are-captured 
        case. So, they don't need canBeInternal checks which might terminate potential matched 
        scenarios.

        The equivalent pattern of SBFIZ is ((src << amount) >> amount) << lsb. Given the code:

        a = x << C
        b = a >> C
        c = b << D

        print(a)
        print(b)
        print(c)

        The pattern won't match because of !canBeInternal for a and b (useCounts > 1). 
        So, this would emit three separate instructions. But if we removed canBeInternal, 
        it would still be just three separate instructions, and they wouldn't be any more 
        expensive. Suppose the print(b) is removed, above. Then, with the canBeInternal check, 
        it is emitting three instructions. Without the canBeInternal check, it would emit only 
        two (x << C and SBFIZ to compute c). And that would be less expensive.

        * b3/B3LowerToAir.cpp:

2021-07-01  Yijia Huang  <yijia_huang@apple.com>

        Add a new pattern to instruction selector to use EXTR supported by ARM64
        https://bugs.webkit.org/show_bug.cgi?id=227171

        Reviewed by Robin Morisset.

        This patch includes two modifications:
            1. Introduce a strength reduction rule to zero extend bitfield.
            2. Add Extract Register (EXTR) to Air opcode to serve instruction selector.

        -------------------------------------------------------
        ### Part A zero extend bitfield ###
        -------------------------------------------------------
        A new strength reduction rule is added for the canonical form of the zero-extend 
        bitfield.

        Turn this: ZShr(Shl(value, amount)), amount)
        Into this: BitAnd(value, mask)

        with constraints:
        1. 0 <= amount < datasize
        2. width = datasize - amount
        3. mask is !(mask & (mask + 1)) where bitCount(mask) == width

        -------------------
        ### Part B EXTR ###
        -------------------

        Given instruction:
        extr Rd, Rn, Rm, lowWidth

        Extract register (EXTR) extracts a register from a pair of registers, where 
        concat = Rn:Rm and Rd = concat<lowWidth + datasize - 1:lowWidth>.

        The equivalent pattern of this instruction is:

        d = ((n & mask) << highWidth) | (m >> lowWidth)
        highWidth = datasize - lowWidth
        mask = (1 << lowWidth) - 1

        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = ArgumentReg(%x1)
        Int @2 = mask
        Int @3 = BitAnd(@0, @2)
        Int @4 = highWidth
        Int @5 = Shl(@3, @4)
        Int @6 = lowWidth
        Int @7 = ZShr(@1, @6)
        Int @8 = BitOr(@7, @5)
        Void@9 = Return(@10, Terminal)

        Before Adding BIC:
        // Old optimized AIR
        InsertUnsignedBitfieldInZero %x0, highWidth, lowWidth, %x0, @5
        Urshift                      %x1,  lowWidth,      %x1,      @7
        Or                           %x0,       %x1,      %x0,      @8
        Ret                          %x0,                           @9

        After Adding BIC:
        // New optimized AIR
        ExtractRegister   %x0, %x1, lowWidth, %x0, @8
        Ret               %x0,                     @9

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::extractRegister32):
        (JSC::MacroAssemblerARM64::extractRegister64):
        * assembler/testmasm.cpp:
        (JSC::testExtractRegister32):
        (JSC::testExtractRegister64):
        * b3/B3LowerToAir.cpp:
        * b3/B3ReduceStrength.cpp:
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.h:
        * b3/testb3_2.cpp:
        (testBitfieldZeroExtend32):
        (testBitfieldZeroExtend64):
        (testExtractRegister32):
        (testExtractRegister64):
        (addBitTests):

2021-06-30  Saam Barati  <sbarati@apple.com>

        Turn off data ICs by default
        https://bugs.webkit.org/show_bug.cgi?id=227334
        <rdar://problem/79802812>

        Reviewed by Yusuke Suzuki.

        There are GC crashes that are caused by access data IC sharing. This
        patch is both turning off data IC sharing by default, and turning off data
        ICs by default.
        
        We should re-enable this once we figure out the issue:
        https://bugs.webkit.org/show_bug.cgi?id=227551
        
        Some of our testing modes are still running with data ICs on, so the code doesn't
        bit rot. And a select few tests are running with data IC sharing on, for
        similar reasons, even though we know it has issues. If those tests start
        crashing, we'll just disable sharing completely until the issue is resolved.

        * bytecode/PolymorphicAccess.cpp:
        (JSC::PolymorphicAccess::regenerate):
        * runtime/OptionsList.h:

2021-06-30  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Stop generating default parameter code if class constructor is called without 'new'
        https://bugs.webkit.org/show_bug.cgi?id=227547
        rdar://78821453

        Reviewed by Mark Lam.

        We already do not generate body bytecode when class constructor is called without 'new' because many features including "super()" assume
        that they generate bytecode only when it is called as a constructor. But we are not doing that for default parameters' bytecode generation.
        This patch stops generating bytecode for default parameters if class constructor is called without 'new'.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * runtime/ConstructorKind.h:

2021-06-30  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Private names should be handled by usedVariables mechanism
        https://bugs.webkit.org/show_bug.cgi?id=227476
        rdar://76049469

        Reviewed by Saam Barati.

        Private name handling in the current parser has many problems.

            1. The parser backtracks when it sees destructuring assignment, arrow function etc. In that case, the discarded code
               must not have any effect on the outside of that code. However, private name handling is annotating "used" of the
               upper scopes, which is wrong.
            2. In class expression, private name lookup intentionally skips the class-scope when parsing class heritage. But this
               is not correct since CodeBlock will perform lookup on the normal scope chain and this will look into the class-scope
               inconsistently. This means that we could encounter different private name at runtime. (it is tested in the added test).
            3. We skip inner function parsing when it is parsed previously. At that case, we must preserve private name annotation,
               but restored function information does not preserve that.

        This patch changes how private name is handled.

            1. We were anyway defining #XXX variables which holds private symbols. So we track "use" information by the mechanism used
               for usual variables. We remove Used / Declared bits from PrivateNameEntry since they are not necessary at runtime, and
               these information is handled / tracked in Parser's Scope. For backtracking, we already have a mechanism to roll-back
               m_usedVariables, so using variable mechanism automatically fixes the problem.
            2. We define class-head-scope separately from class-scope. class-heritage expression can see class name, but it cannot use
               private names. Previously, our implementation attempted to achieve that by hacky way: skipping this class-scope for private
               names only while parsing class-heritage. But this was wrong since it does not consider CodeBlock's linking phase as described
               in the problem (2). Instead, we just define class-head-scope which holds class constructor name.
            3. We clean up popScopeInternal to populate lexical-variables and function-stack. Previously, we are stealing them before popping
               the scope when necessary, but this is a hack and a bit wrong since scope's popping operation needs to access these information
               in some cases. Instead, popScopeInternal populates them after popping the scope.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::pushClassHeadLexicalScope):
        (JSC::BytecodeGenerator::popClassHeadLexicalScope):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ClassExprNode::emitBytecode):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createClassExpr):
        (JSC::ASTBuilder::createBlockStatement):
        (JSC::ASTBuilder::createForLoop):
        (JSC::ASTBuilder::createForInLoop):
        (JSC::ASTBuilder::createForOfLoop):
        (JSC::ASTBuilder::createTryStatement):
        (JSC::ASTBuilder::createSwitchStatement):
        * parser/NodeConstructors.h:
        (JSC::ForNode::ForNode):
        (JSC::TryNode::TryNode):
        (JSC::ClassExprNode::ClassExprNode):
        (JSC::SwitchNode::SwitchNode):
        (JSC::BlockNode::BlockNode):
        (JSC::EnumerationNode::EnumerationNode):
        (JSC::ForInNode::ForInNode):
        (JSC::ForOfNode::ForOfNode):
        * parser/Nodes.cpp:
        (JSC::ScopeNode::ScopeNode):
        (JSC::ProgramNode::ProgramNode):
        (JSC::ModuleProgramNode::ModuleProgramNode):
        (JSC::EvalNode::EvalNode):
        (JSC::FunctionNode::FunctionNode):
        (JSC::VariableEnvironmentNode::VariableEnvironmentNode):
        * parser/Nodes.h:
        (JSC::VariableEnvironmentNode::VariableEnvironmentNode): Deleted.
        * parser/Parser.cpp:
        (JSC::isPrivateFieldName):
        (JSC::Parser<LexerType>::parseInner):
        (JSC::Parser<LexerType>::parseForStatement):
        (JSC::Parser<LexerType>::parseSwitchStatement):
        (JSC::Parser<LexerType>::parseTryStatement):
        (JSC::Parser<LexerType>::parseBlockStatement):
        (JSC::Parser<LexerType>::parseFunctionDeclarationStatement):
        (JSC::Parser<LexerType>::parseFunctionInfo):
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseBinaryExpression):
        (JSC::Parser<LexerType>::parseMemberExpression):
        (JSC::Parser<LexerType>::usePrivateName): Deleted.
        * parser/Parser.h:
        (JSC::Scope::finalizeLexicalEnvironment):
        (JSC::Scope::takeLexicalEnvironment):
        (JSC::Scope::takeDeclaredVariables):
        (JSC::Scope::takeFunctionDeclarations):
        (JSC::Scope::forEachUsedVariable):
        (JSC::Scope::usePrivateName):
        (JSC::Scope::currentUsedVariablesSize):
        (JSC::Parser::popScopeInternal):
        (JSC::Parser::popScope):
        (JSC::Parser<LexerType>::parse):
        (JSC::Scope::copyUndeclaredPrivateNamesTo): Deleted.
        (JSC::Scope::hasUsedButUndeclaredPrivateNames const): Deleted.
        (JSC::Parser::privateNameScope): Deleted.
        (JSC::Parser::copyUndeclaredPrivateNamesToOuterScope): Deleted.
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createClassExpr):
        (JSC::SyntaxChecker::createBlockStatement):
        (JSC::SyntaxChecker::createForLoop):
        (JSC::SyntaxChecker::createForInLoop):
        (JSC::SyntaxChecker::createForOfLoop):
        (JSC::SyntaxChecker::createTryStatement):
        (JSC::SyntaxChecker::createSwitchStatement):
        * parser/VariableEnvironment.cpp:
        (JSC::VariableEnvironmentEntry::dump const):
        (JSC::VariableEnvironment::declarePrivateField):
        (JSC::VariableEnvironment::declarePrivateAccessor):
        (JSC::VariableEnvironment::declarePrivateMethod):
        (JSC::VariableEnvironment::dump const):
        * parser/VariableEnvironment.h:
        (JSC::VariableEnvironment::declarePrivateField):
        (JSC::VariableEnvironment::privateNameEnvironment):
        (JSC::VariableEnvironment::addPrivateNamesFrom):
        (JSC::PrivateNameEntry::isUsed const): Deleted.
        (JSC::PrivateNameEntry::isDeclared const): Deleted.
        (JSC::PrivateNameEntry::setIsUsed): Deleted.
        (JSC::PrivateNameEntry::setIsDeclared): Deleted.
        (JSC::VariableEnvironment::usePrivateName): Deleted.
        (JSC::VariableEnvironment::copyPrivateNamesTo const): Deleted.
        (JSC::VariableEnvironment::copyUndeclaredPrivateNamesTo const): Deleted.

2021-06-30  Mark Lam  <mark.lam@apple.com>

        ARM64: Disable selection of BFI instruction variants by default.
        https://bugs.webkit.org/show_bug.cgi?id=227554
        rdar://79978150

        Reviewed by Saam Barati.

        We suspect that this may have caused some hangs.  Disabling while we investigate.

        * b3/B3LowerToAir.cpp:
        * b3/testb3_2.cpp:
        (testInsertBitField32):
        (testInsertBitField64):
        * runtime/OptionsList.h:

2021-06-29  Joonghun Park  <jh718.park@samsung.com>

        Remove "function declared ‘static’ but never defined" build warnings since r278971.
        https://bugs.webkit.org/show_bug.cgi?id=227436

        This patch removes the build warnings below.
        warning: ‘bool JSC::cannotBeIdentPartOrEscapeStart(LChar)’ declared ‘static’ but never defined [-Wunused-function]

        Reviewed by Michael Catanzaro.

        * runtime/LiteralParser.cpp: Add definitions for cannotBeIdentPartOrEscapeStart.
        (JSC::cannotBeIdentPartOrEscapeStart):

2021-06-29  Yijia Huang  <yijia_huang@apple.com>

        Add a new pattern to instruction selector to use SBX and SBFIZ supported by ARM64
        https://bugs.webkit.org/show_bug.cgi?id=227203

        Reviewed by Filip Pizlo.

        This patch includes two modifications:
            1. Introduce a strength reduction rule for sign extending bitfield.
            2. Add Signed Bitfield Extract (SBFX) and Signed Bitfield Insert 
               in Zero (SBFIZ) to Air opcode to serve instruction selector.

        -------------------------------------------------------
        ### Part A Sign extending from a variable bit-width ###
        -------------------------------------------------------
        According to Bit Twiddling Hacks, there are two ways to sign extend bitfield.
        (https://graphics.stanford.edu/~seander/bithacks.html#VariableSignExtend)

        int bf;    // sign extend this width-bit number to bfsx
        int width; // number of bits representing the number in bf
        int bfsx;  // resulting sign-extended number

        Approach 1
        mask1 = (1 << width) - 1
        mask2 = 1 << (width - 1)
        bf    = bf & mask1      // zero bits in bf above position width  
        bfsx  = (bf ^ mask2) - mask2

        Approach 2
        amount = CHAR_BIT * sizeof(bf) - width
        bfsx   = (bf << amount) >> amount

        Then, a new strength reduction rule is introduced:
            Turn this: ((bf & mask1) ^ mask2) - mask2 
            Into this: (bf << amount) >> amount

        -------------------
        ### Part B SBFX ###
        -------------------
        Given instruction:
        sbfx Rd, Rn, lsb, width

        Signed Bitfield Extract (SBFX) extracts width number of adjacent bits at lsb position 
        from a register Rn, sign-extends them to the size of the register, and writes the 
        result to the destination register Rd.

        The equivalent patterns of this instruction are:

        Pattern 1:
            bf    = src >> lsb
            dst   = ((bf & mask1) ^ mask2) - mask2
            mask1 = (1 << width) - 1
            mask2 = 1 << (width - 1) // (mask2 << 1) - 1 = mask1

        Pattern 2:
            bf     = src >> lsb
            amount = CHAR_BIT * sizeof(bf) - width
            dst    = (bf << amount) >> amount
        
        Then, (bf << amount) >> amount is selected as the canonical form with the strength reduction 
        rule introduced above.

        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = lsb
        Int @2 = amount
        Int @3 = ZShr(@0, @1)
        Int @4 = Shl(@3, @2)
        Int @5 = SShr(@4, @2)
        Void@6 = Return(@5, Terminal)

        Before Adding BIC:
        // Old optimized AIR
        Urshift %x0,    lsb, %x0, @3
        Lshift  %x0, amount, %x0, @4
        Rshift  %x0, amount, %x0, @5
        Ret     %x0,              @6

        After Adding BIC:
        // New optimized AIR
        ExtractSignedBitfield %x0, lsb, width, %x0, @5
        Ret                   %x0,                  @6
    
        --------------------
        ### Part B SBFIZ ###
        --------------------
        Given instruction:
        sbfiz Rd, Rn, lsb, width

        Signed Bitfield Insert in Zero (SBFIZ) zeroes the destination register Rd and copies 
        width number of contiguous bits from a source register Rn into lsb position in the 
        destination register, sign-extending the most significant bit of the transferred value.

        The equivalent patterns of this instruction are:

        Pattern 1:
            bfsx  = ((src & mask1) ^ mask2) - mask2
            dst   = bfsx << lsb
            mask1 = (1 << width) - 1
            mask2 = 1 << (width - 1) // (mask2 << 1) - 1 = mask1

        Pattern 2:
            amount = CHAR_BIT * sizeof(bf) - width
            bfsx   = (src << amount) >> amount
            dst    = bfsx << lsb
        
        Then, ((src << amount) >> amount) << lsb is selected as the canonical form with the 
        strength reduction rule introduced above.

        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = lsb
        Int @2 = amount
        Int @3 = Shl(@0, @2)
        Int @4 = SShr(@3, @2)
        Int @5 = Shl(@4, @1)
        Void@6 = Return(@5, Terminal)

        Before Adding BIC:
        // Old optimized AIR
        Lshift %x0, amount, %x0, @3
        Rshift %x0, amount, %x0, @4
        Lshift %x0,    lsb, %x0, @5
        Ret    %x0,              @6

        After Adding BIC:
        // New optimized AIR
        InsertSignedBitfieldInZero %x0, lsb, width, %x0, @5
        Ret                        %x0,                  @6

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::insertSignedBitfieldInZero32):
        (JSC::MacroAssemblerARM64::insertSignedBitfieldInZero64):
        (JSC::MacroAssemblerARM64::extractSignedBitfield32):
        (JSC::MacroAssemblerARM64::extractSignedBitfield64):
        * assembler/testmasm.cpp:
        (JSC::testInsertSignedBitfieldInZero32):
        (JSC::testInsertSignedBitfieldInZero64):
        (JSC::testExtractSignedBitfield32):
        (JSC::testExtractSignedBitfield64):
        * b3/B3LowerToAir.cpp:
        * b3/B3ReduceStrength.cpp:
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.h:
        * b3/testb3_2.cpp:
        (addBitTests):
        * b3/testb3_3.cpp:
        (testInsertSignedBitfieldInZero32):
        (testInsertSignedBitfieldInZero64):
        (testExtractSignedBitfield32):
        (testExtractSignedBitfield64):

2021-06-28  Yijia Huang  <yijia_huang@apple.com>

        Add a new pattern to instruction selector to use BIC supported by ARM64
        https://bugs.webkit.org/show_bug.cgi?id=227202

        Reviewed by Filip Pizlo.

        This patch includes three modifications:
            1. Add bit clear (BIC), or not (ORN), and extract and insert bitfield at the 
               lower end (BFXIL) to Air opcode to serve instruction selector.
            2. Add bitfield clear (BFC) to MacroAssembler.
            4. Do refactoring - rename Air opcodes added in the previous patches.

        ------------------
        ### Part A BIC ###
        ------------------
        Given the operation:

        bic Rd, Rn, Rm

        The BIC (Bit Clear) instruction performs an AND operation on the bits in Rn with the 
        complements of the corresponding bits in the value of Rm. The instruction selector can 
        utilize this to lowering certain patterns in B3 IR before further Air optimization. 
        The equivalent patterns of this instruction are:

        Pattern 1:
            d = n & (-m - 1)

        Pattern 2:
            d = n & (m ^ -1)

        In order to get benefits for complement operation, the current instruction selector uses 
        mvn instruction to lower the pattern value ^ -1. Then, a new strength reduction rule is 
        introduced:
            Turn this: -value - 1 
            Into this: value ^ -1

        So, d = n & (m ^ -1) is selected as the canonical form.

        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = ArgumentReg(%x1)
        Int @2 = -1
        Int @3 = BitXor(@1, @2)
        Int @4 = BitAnd(@0, @3)
        Void@5 = Return(@4, Terminal)

        Before Adding BIC:
        // Old optimized AIR
        Not %x1, %x1,      @3
        And %x0, %x1, %x0, @4
        Ret %x0,           @5

        After Adding BIC:
        // New optimized AIR
        Bic %x0, %x1, %x0, @4
        Ret %x0,           @5

        ------------------
        ### Part A ORN ###
        ------------------
        Given the operation:

        orn Rd, Rn, Rm

        Bitwise OR NOT (shifted register) performs a bitwise (inclusive) OR of a register value 
        Rn and the complement of an optionally-shifted register value Rm, and writes the result 
        to the destination register Rd.

        The equivalent patterns of this instruction are:

        Pattern 1:
            d = n | (-m - 1)

        Pattern 2:
            d = n | (m ^ -1)

        Then, d = n | (m ^ -1) is selected as the canonical form.

        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = ArgumentReg(%x1)
        Int @2 = -1
        Int @3 = BitXor(@1, @2)
        Int @4 = BitOr(@0, @3)
        Void@5 = Return(@4, Terminal)

        Before Adding BIC:
        // Old optimized AIR
        Not %x1, %x1,      @3
        Or  %x0, %x1, %x0, @4
        Ret %x0,           @5

        After Adding BIC:
        // New optimized AIR
        Orn %x0, %x1, %x0, @4
        Ret %x0,           @5

        --------------------
        ### Part A BFXIL ###
        --------------------
        Given the operation:

        bfxil Rd, Rn, lsb, width

        Bitfield extract and insert at low end(BFXIL) copies any number of low-order bits 
        from a source register into the same number of adjacent bits at the low end in 
        the destination register, leaving other bits unchanged.

        The equivalent patterns of this instruction are:

        Pattern 1:
        mask1 = (1 << width) - 1
        mask2 = ~mask1
        ((n >> lsb) & mask1) | (d & mask2)

        Pattern 2:
        mask1 = ((1 << width) - 1) << lsb
        mask2 = ~(mask1 >> lsb)
        ((n & mask1) >> lsb) | (d & mask2)

        Then, introduce a strength reduction rule for easier recognization.
        Turn this: (v & maskShift) >> shiftAmount
        Into this: (v >> shiftAmount) & mask

        with constraints:
        1. maskShift = mask << lsb
        2. mask = (1 << width) - 1
        3. 0 <= shiftAmount < datasize
        4. 0 < width < datasize
        5. shiftAmount + width <= datasize

        The canonical form to match BFXIL is d = ((n >> lsb) & mask1) | (d & mask2).
        
        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = ArgumentReg(%x1)
        Int @2 = lsb
        Int @3 = mask1
        Int @4 = mask2
        Int @5 = BitAnd(@1, @3)
        Int @6 = BitAnd(@0, @4))
        Int @7 = ZShr(@5, @2)
        Int @8 = BitOr(@7, @6)
        Void@9 = Return(@8, Terminal)

        Before Adding BIC:
        // Old optimized AIR
        And                      mask2, %x0,   %x0,      @6
        ExtractUnsignedBitfield    %x1, lsb, width, %x1, @7
        Or                         %x0, %x1,   %x0,      @8
        Ret                        %x0,                  @9

        After Adding BIC:
        // New optimized AIR
        ExtractInsertBitfieldAtLowEnd %x1, lsb, width, %x0, @8
        Ret64                         %x0,                  @9

        --------------
        ### Part B ###
        --------------
        The Bitfield Clear (BFC), leaving other bits unchanged, is similar to BFI which is an 
        alias of BFM. Given the operation:

        bfc Rd, lsb, width

        The equivalent pattern of this instruction is:

        mask = ((1 << width) - 1) << lsb
        d = d & ~mask

        Since mask is a constant and B3 performs constant fold in the optimization phase, this 
        pattern will directly lower to the BitAnd binary operation. So, no need to match this pattern.

        --------------
        ### Part C ###
        --------------
        At MacroAssembler level, the emitters are exepected to be expressed in english 
        (e.g. something like clearBitField for BFC). Do refactoring to rename Air opcode for 
        UBFX, UBFIZ, BFI, and BIC.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::bfc):
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::extractUnsignedBitfield32):
        (JSC::MacroAssemblerARM64::extractUnsignedBitfield64):
        (JSC::MacroAssemblerARM64::insertUnsignedBitfieldInZero32):
        (JSC::MacroAssemblerARM64::insertUnsignedBitfieldInZero64):
        (JSC::MacroAssemblerARM64::insertBitField32):
        (JSC::MacroAssemblerARM64::insertBitField64):
        (JSC::MacroAssemblerARM64::clearBitField32):
        (JSC::MacroAssemblerARM64::clearBitField64):
        (JSC::MacroAssemblerARM64::clearBitsWithMask32):
        (JSC::MacroAssemblerARM64::clearBitsWithMask64):
        (JSC::MacroAssemblerARM64::orNot32):
        (JSC::MacroAssemblerARM64::orNot64):
        (JSC::MacroAssemblerARM64::ubfx32): Deleted.
        (JSC::MacroAssemblerARM64::ubfx64): Deleted.
        (JSC::MacroAssemblerARM64::ubfiz32): Deleted.
        (JSC::MacroAssemblerARM64::ubfiz64): Deleted.
        (JSC::MacroAssemblerARM64::bitFieldInsert32): Deleted.
        (JSC::MacroAssemblerARM64::bitFieldInsert64): Deleted.
        * assembler/testmasm.cpp:
        (JSC::testMultiplySignExtend32):
        (JSC::testMultiplySubSignExtend32):
        (JSC::testExtractUnsignedBitfield32):
        (JSC::testExtractUnsignedBitfield64):
        (JSC::testInsertUnsignedBitfieldInZero32):
        (JSC::testInsertUnsignedBitfieldInZero64):
        (JSC::testInsertBitField32):
        (JSC::testInsertBitField64):
        (JSC::testClearBitField32):
        (JSC::testClearBitField64):
        (JSC::testClearBitsWithMask32):
        (JSC::testClearBitsWithMask64):
        (JSC::testOrNot32):
        (JSC::testOrNot64):
        (JSC::testMul32SignExtend): Deleted.
        (JSC::testMulSubSignExtend32): Deleted.
        (JSC::testUbfx32): Deleted.
        (JSC::testUbfx64): Deleted.
        (JSC::testUbfiz32): Deleted.
        (JSC::testUbfiz64): Deleted.
        (JSC::testBitFieldInsert32): Deleted.
        (JSC::testBitFieldInsert64): Deleted.
        * b3/B3LowerToAir.cpp:
        * b3/B3ReduceStrength.cpp:
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.h:
        * b3/testb3_2.cpp:
        (testInsertBitField32):
        (testInsertBitField64):
        (testBIC32):
        (testBIC64):
        (testOrNot32):
        (testOrNot64):
        (addBitTests):
        (testBitFieldInsert32): Deleted.
        (testBitFieldInsert64): Deleted.
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::cageWithoutUntagging):
        (JSC::AssemblyHelpers::cageConditionallyAndUntag):

2021-06-28  Mikhail R. Gadelha  <mikhail@igalia.com>

        Add LLInt fast path for less, lesseq, greater and greatereq
        https://bugs.webkit.org/show_bug.cgi?id=226266

        Reviewed by Tadeu Zagallo.

        The motivation is to add fast path for integers and doubles
        in LLInt, so we don't need to go to slow path for those cases.

        This patch implements the less, lesseq, greater, greatereq 
        instruction for ARMv7, MIPS and CLoop.

        Microbenchmarking results:
        * x86_64: number-comparison-inline definitely 1.3520x faster
        * ARMv7: number-comparison-inline definitely 1.3520x faster

        JetStream2 results:
        * x86_64 jit: 1.015 times better
        * x86_64 no-jit: 1.018 times better
        * ARMv7 no-jit: 1.004 times worse

        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * offlineasm/arm.rb:
        * offlineasm/cloop.rb:
        * offlineasm/mips.rb:

2021-06-28  Mikhail R. Gadelha  <mikhail@igalia.com>

        Prevent sign-extended casts for 32 bits arch
        https://bugs.webkit.org/show_bug.cgi?id=227170

        Reviewed by Yusuke Suzuki.

        In a number of places, addresses are reinterpreted as uint64, which can
        lead to wrong addresses in 32 bits arch.

        * assembler/testmasm.cpp:
        (JSC::testBranchTruncateDoubleToInt32):
        * disassembler/ARM64/A64DOpcode.h:
        (JSC::ARM64Disassembler::A64DOpcode::appendPCRelativeOffset):
        * runtime/JSCell.cpp:
        (JSC::reportZappedCellAndCrash):
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::emitEntryTierUpCheck):
        (JSC::Wasm::AirIRGenerator::emitLoopTierUpCheck):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::emitEntryTierUpCheck):
        (JSC::Wasm::B3IRGenerator::emitLoopTierUpCheck):

2021-06-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r279266.
        https://bugs.webkit.org/show_bug.cgi?id=227402

        Causes crash loop

        Reverted changeset:

        "Remove references to order files"
        https://bugs.webkit.org/show_bug.cgi?id=227377
        https://trac.webkit.org/changeset/279266

2021-06-24  Sihui Liu  <sihui_liu@apple.com>

        Remove references to order files
        https://bugs.webkit.org/show_bug.cgi?id=227377
        rdar://76070556

        Reviewed by Mark Lam.

        * Configurations/JavaScriptCore.xcconfig:

2021-06-24  Asumu Takikawa  <asumu@igalia.com>

        [WASM-Function-References] Add support for (ref null? $t) type constructor
        https://bugs.webkit.org/show_bug.cgi?id=226296

        Reviewed by Yusuke Suzuki.

        Adds the `ref` type constructor from the typed function references proposal:

          https://github.com/WebAssembly/function-references/blob/master/proposals/function-references/Overview.md

        It's also required for the type imports and GC proposals as well. Ref types represent
        references to any heap type (including existing funcref and externref) with a specified
        nullability.

        This requires a new isNullable flag in the type representation. This flag also enables
        non-null externref and funcrefs, and hence this commit also adds the necessary checks
        at Wasm/JS boundaries.

        Non-null reference types also generally cannot be used as function locals.

        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::gTypeIdx):
        (JSC::Wasm::AirIRGenerator::tmpForType):
        (JSC::Wasm::AirIRGenerator::emitCCall):
        (JSC::Wasm::AirIRGenerator::moveOpForValueType):
        (JSC::Wasm::AirIRGenerator::AirIRGenerator):
        (JSC::Wasm::AirIRGenerator::addLocal):
        (JSC::Wasm::AirIRGenerator::addConstant):
        (JSC::Wasm::AirIRGenerator::addRefFunc):
        * wasm/WasmCallingConvention.h:
        (JSC::Wasm::WasmCallingConvention::marshallLocation const):
        (JSC::Wasm::JSCallingConvention::marshallLocation const):
        * wasm/WasmFormat.h:
        (JSC::Wasm::isSubtype):
        (JSC::Wasm::isValidHeapTypeKind):
        (JSC::Wasm::isDefaultableType):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parse):
        (JSC::Wasm::FunctionParser<Context>::parseAnnotatedSelectImmediates):
        (JSC::Wasm::FunctionParser<Context>::checkBranchTarget):
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmGlobal.cpp:
        (JSC::Wasm::Global::get const):
        (JSC::Wasm::Global::set):
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::callInformationForCaller):
        (JSC::Wasm::LLIntGenerator::callInformationForCallee):
        (JSC::Wasm::LLIntGenerator::addArguments):
        * wasm/WasmParser.h:
        (JSC::Wasm::Parser<SuccessType>::parseBlockSignature):
        (JSC::Wasm::Parser<SuccessType>::parseValueType):
        (JSC::Wasm::Parser<SuccessType>::parseRefType):
        * wasm/WasmSectionParser.cpp:
        (JSC::Wasm::SectionParser::parseType):
        (JSC::Wasm::SectionParser::parseElement):
        (JSC::Wasm::SectionParser::parseInitExpr):
        (JSC::Wasm::SectionParser::parseElementSegmentVectorOfExpressions):
        (JSC::Wasm::SectionParser::parseGlobalType):
        * wasm/WasmSignature.cpp:
        (JSC::Wasm::computeHash):
        * wasm/generateWasmOpsHeader.py:
        * wasm/js/WasmToJS.cpp:
        (JSC::Wasm::wasmToJS):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
        * wasm/js/WebAssemblyFunctionBase.h:
        (JSC::WebAssemblyFunctionBase::offsetOfSignatureIndex):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::linkImpl):
        * wasm/wasm.json:

2021-06-24  Mark Lam  <mark.lam@apple.com>

        Use ldp and stp more for saving / restoring registers on ARM64.
        https://bugs.webkit.org/show_bug.cgi?id=227039
        rdar://79354736

        Reviewed by Saam Barati.

        This patch introduces a spooler abstraction in AssemblyHelpers.  The spooler
        basically batches up load / store operations and emit them as pair instructions
        if appropriate.

        There are 4 spooler classes:
        a. Spooler
           - template base class for LoadRegSpooler and StoreRegSpooler.
           - encapsulates the batching strategy for load / store pairs.

        b. LoadRegSpooler - specializes Spooler to handle load pairs.
        b. StoreRegSpooler - specializes Spooler to handle store pairs.

        d. CopySpooler
           - handles matching loads with stores.
           - tries to emit loads as load pairs if possible.
           - tries to emot stores as store pairs if possible.
           - ensures that pre-requisite loads are emitted before stores are emitted.
           - other than loads, also support constants and registers as sources of values
             to be stored.  This is useful in OSR exit ramps where we may materialize a
             stack value to store from constants or registers in addition to values we
             load from the old stack frame or from a scratch buffer.

        In this patch, we also do the following:

        1. Use spoolers in many places so that we can emit load / store pairs instead of
           single load / stores.  This helps shrink JIT code side, and also potentially
           improves performance.

        2. In DFG::OSRExit::compileExit(), we used to recover constants into a scratch
           buffer, and then later, load from that scratch buffer to store into the
           new stack frame(s).

           This patch changes it so that we defer constant recovery until the final
           loop where we store the recovered value directly into the new stack frame(s).
           This saves us the work (and JIT code space) for storing into a scratch buffer
           and then reloading from the scratch buffer.

           There is one exception: tmp values used by active checkpoints.  We need to call
           operationMaterializeOSRExitSideState() to materialize the active checkpoint
           side state before the final loop where we now recover constants.  Hence, we
           need these tmp values recovered before hand.

           So, we check upfront if we have active checkpoint side state to materialize.
           If so, we'll eagerly recover the constants for initializing those tmps.

           We also use the CopySpooler in the final loop to emit load / store pairs for
           filling in the new stack frame(s).

           One more thing: it turns out that the vast majority of constants to be recovered
           is simply the undefined value.  So, as an optimization, the final loop keeps
           the undefined value in a register, and has the spooler store directly from
           that register when appropriate.  This saves on JIT code to repeatedly materialize
           the undefined JSValue constant.

        3. In reifyInlinedCallFrames(), replace the use of GPRInfo::nonArgGPR0 with
           GPRInfo::regT4.  nonArgGPRs are sometimes map to certain regTXs on certain ports.
           Replacing with regT4 makes it easier to ensure that we're not trashing the
           register when we use more temp registers.

           reifyInlinedCallFrames() will be using emitSaveOrCopyLLIntBaselineCalleeSavesFor()
           later where we need more temp registers.

        4. Move the following functions to AssemblyHelpers.cpp.  They don't need to be
           inline functions.  Speedometer2 and JetStream2 shows that making these non
           inline does not hurt performance:

                AssemblyHelpers::emitSave(const RegisterAtOffsetList&);
                AssemblyHelpers::emitRestore(const RegisterAtOffsetList&);
                AssemblyHelpers::emitSaveCalleeSavesFor(const RegisterAtOffsetList*);
                AssemblyHelpers::emitSaveOrCopyCalleeSavesFor(...);
                AssemblyHelpers::emitRestoreCalleeSavesFor(const RegisterAtOffsetList*);
                AssemblyHelpers::copyLLIntBaselineCalleeSavesFromFrameOrRegisterToEntryFrameCalleeSavesBuffer(...);

           Also renamed emitSaveOrCopyCalleeSavesFor() to emitSaveOrCopyLLIntBaselineCalleeSavesFor()
           because it is only used with baseline codeBlocks.

        Results:
        Cummulative LinkBuffer profile sizes shrunk by ~2M in aggregate:

                            base                           new
                            ====                           ===
               BaselineJIT: 83827048 (79.943703 MB)     => 83718736 (79.840408 MB)
                       DFG: 56594836 (53.973042 MB)     => 56603508 (53.981312 MB)
               InlineCache: 33923900 (32.352352 MB)     => 33183156 (31.645924 MB)
                       FTL: 6770956 (6.457287 MB)       => 6568964 (6.264652 MB)
                DFGOSRExit: 5212096 (4.970642 MB)       => 3728088 (3.555382 MB)
                    CSSJIT: 748428 (730.886719 KB)      => 748428 (730.886719 KB)
                FTLOSRExit: 692276 (676.050781 KB)      => 656884 (641.488281 KB)
                   YarrJIT: 445280 (434.843750 KB)      => 512988 (500.964844 KB)
                  FTLThunk: 22908 (22.371094 KB)        => 22556 (22.027344 KB)
        BoundFunctionThunk: 8400 (8.203125 KB)          => 10088 (9.851562 KB)
             ExtraCTIThunk: 6952 (6.789062 KB)          => 6824 (6.664062 KB)
          SpecializedThunk: 4508 (4.402344 KB)          => 4508 (4.402344 KB)
                     Thunk: 3912 (3.820312 KB)          => 3784 (3.695312 KB)
                LLIntThunk: 2908 (2.839844 KB)          => 2908 (2.839844 KB)
              VirtualThunk: 1248 (1.218750 KB)          => 1248 (1.218750 KB)
                  DFGThunk: 1084 (1.058594 KB)          => 444
               DFGOSREntry: 216                         => 184
                JumpIsland: 0
                 WasmThunk: 0
                      Wasm: 0
             Uncategorized: 0
                     Total: 188266956 (179.545361 MB)   => 185773296 (177.167221 MB)

        Speedometer2 and JetStream2 results shows that performance is neutral for this
        patch (as measured on an M1 Mac):

        Speedometer2:
        ----------------------------------------------------------------------------------------------------------------------------------
        |               subtest                |     ms      |     ms      |  b / a   | pValue (significance using False Discovery Rate) |
        ----------------------------------------------------------------------------------------------------------------------------------
        | Elm-TodoMVC                          |129.037500   |127.212500   |0.985857  | 0.012706                                         |
        | VueJS-TodoMVC                        |28.312500    |27.525000    |0.972185  | 0.240315                                         |
        | EmberJS-TodoMVC                      |132.550000   |132.025000   |0.996039  | 0.538034                                         |
        | Flight-TodoMVC                       |80.762500    |80.875000    |1.001393  | 0.914749                                         |
        | BackboneJS-TodoMVC                   |51.637500    |51.175000    |0.991043  | 0.285427                                         |
        | Preact-TodoMVC                       |21.025000    |22.075000    |1.049941  | 0.206140                                         |
        | AngularJS-TodoMVC                    |142.900000   |142.887500   |0.999913  | 0.990681                                         |
        | Inferno-TodoMVC                      |69.300000    |69.775000    |1.006854  | 0.505201                                         |
        | Vanilla-ES2015-TodoMVC               |71.500000    |71.225000    |0.996154  | 0.608650                                         |
        | Angular2-TypeScript-TodoMVC          |43.287500    |43.275000    |0.999711  | 0.987926                                         |
        | VanillaJS-TodoMVC                    |57.212500    |57.812500    |1.010487  | 0.333357                                         |
        | jQuery-TodoMVC                       |276.150000   |276.775000   |1.002263  | 0.614404                                         |
        | EmberJS-Debug-TodoMVC                |353.612500   |352.762500   |0.997596  | 0.518836                                         |
        | React-TodoMVC                        |93.637500    |92.637500    |0.989321  | 0.036277                                         |
        | React-Redux-TodoMVC                  |158.237500   |156.587500   |0.989573  | 0.042154                                         |
        | Vanilla-ES2015-Babel-Webpack-TodoMVC |68.050000    |68.087500    |1.000551  | 0.897149                                         |
        ----------------------------------------------------------------------------------------------------------------------------------

        a mean = 236.26950
        b mean = 236.57964
        pValue = 0.7830785938
        (Bigger means are better.)
        1.001 times better
        Results ARE NOT significant

        JetStream2:
        -------------------------------------------------------------------------------------------------------------------------
        |          subtest          |     pts      |     pts      |  b / a   | pValue (significance using False Discovery Rate) |
        -------------------------------------------------------------------------------------------------------------------------
        | gaussian-blur             |542.570057    |542.671885    |1.000188  | 0.982573                                         |
        | HashSet-wasm              |57.710498     |64.406371     |1.116025  | 0.401424                                         |
        | gcc-loops-wasm            |44.516009     |44.453535     |0.998597  | 0.973651                                         |
        | json-parse-inspector      |241.275085    |240.720491    |0.997701  | 0.704732                                         |
        | prepack-wtb               |62.640114     |63.754878     |1.017796  | 0.205840                                         |
        | date-format-xparb-SP      |416.976817    |448.921409    |1.076610  | 0.052977                                         |
        | WSL                       |1.555257      |1.570233      |1.009629  | 0.427924                                         |
        | OfflineAssembler          |177.052352    |179.746511    |1.015217  | 0.112114                                         |
        | cdjs                      |192.517586    |194.598906    |1.010811  | 0.025807                                         |
        | UniPoker                  |514.023694    |526.111500    |1.023516  | 0.269892                                         |
        | json-stringify-inspector  |227.584725    |223.619390    |0.982576  | 0.102714                                         |
        | crypto-sha1-SP            |980.728788    |984.192104    |1.003531  | 0.838618                                         |
        | Basic                     |685.148483    |711.590247    |1.038593  | 0.142952                                         |
        | chai-wtb                  |106.256376    |106.590318    |1.003143  | 0.865894                                         |
        | crypto-aes-SP             |722.308829    |728.702310    |1.008851  | 0.486766                                         |
        | Babylon                   |655.857561    |654.204901    |0.997480  | 0.931520                                         |
        | string-unpack-code-SP     |407.837271    |405.710752    |0.994786  | 0.729122                                         |
        | stanford-crypto-aes       |456.906021    |449.993856    |0.984872  | 0.272994                                         |
        | raytrace                  |883.911335    |902.887238    |1.021468  | 0.189785                                         |
        | multi-inspector-code-load |409.997347    |405.643639    |0.989381  | 0.644447                                         |
        | hash-map                  |593.590160    |601.576332    |1.013454  | 0.249414                                         |
        | stanford-crypto-pbkdf2    |722.178638    |728.283532    |1.008453  | 0.661195                                         |
        | coffeescript-wtb          |42.393544     |41.869545     |0.987640  | 0.197441                                         |
        | Box2D                     |452.034685    |454.104868    |1.004580  | 0.535342                                         |
        | richards-wasm             |140.873688    |148.394050    |1.053384  | 0.303651                                         |
        | lebab-wtb                 |61.671318     |62.119403     |1.007266  | 0.620998                                         |
        | tsf-wasm                  |108.592794    |119.498398    |1.100427  | 0.504710                                         |
        | base64-SP                 |629.744643    |603.425565    |0.958207  | 0.049997                                         |
        | navier-stokes             |740.588523    |739.951662    |0.999140  | 0.871445                                         |
        | jshint-wtb                |51.938359     |52.651104     |1.013723  | 0.217137                                         |
        | regex-dna-SP              |459.251148    |463.492489    |1.009235  | 0.371891                                         |
        | async-fs                  |235.853820    |236.031189    |1.000752  | 0.938459                                         |
        | first-inspector-code-load |275.298325    |274.172125    |0.995909  | 0.623403                                         |
        | segmentation              |44.002842     |43.445960     |0.987344  | 0.207134                                         |
        | typescript                |26.360161     |26.458820     |1.003743  | 0.609942                                         |
        | octane-code-load          |1126.749036   |1087.132024   |0.964840  | 0.524171                                         |
        | float-mm.c                |16.691935     |16.721354     |1.001762  | 0.194425                                         |
        | quicksort-wasm            |461.630091    |450.161127    |0.975156  | 0.371394                                         |
        | Air                       |392.442375    |412.201810    |1.050350  | 0.046887                                         |
        | splay                     |510.111886    |475.131657    |0.931426  | 0.024732                                         |
        | ai-astar                  |607.966974    |626.573181    |1.030604  | 0.468711                                         |
        | acorn-wtb                 |67.510766     |68.143956     |1.009379  | 0.481663                                         |
        | gbemu                     |144.133842    |145.620304    |1.010313  | 0.802154                                         |
        | richards                  |963.475078    |946.658879    |0.982546  | 0.231189                                         |
        | 3d-cube-SP                |549.426784    |550.479154    |1.001915  | 0.831307                                         |
        | espree-wtb                |68.707483     |73.762202     |1.073569  | 0.033603                                         |
        | bomb-workers              |96.882596     |96.116121     |0.992089  | 0.687952                                         |
        | tagcloud-SP               |309.888767    |303.538511    |0.979508  | 0.187768                                         |
        | mandreel                  |133.667031    |135.009929    |1.010047  | 0.075232                                         |
        | 3d-raytrace-SP            |491.967649    |492.528992    |1.001141  | 0.957842                                         |
        | delta-blue                |1066.718312   |1080.230772   |1.012667  | 0.549382                                         |
        | ML                        |139.617293    |140.088630    |1.003376  | 0.661651                                         |
        | regexp                    |351.773956    |351.075935    |0.998016  | 0.769250                                         |
        | crypto                    |1510.474663   |1519.218842   |1.005789  | 0.638420                                         |
        | crypto-md5-SP             |795.447899    |774.082493    |0.973140  | 0.079728                                         |
        | earley-boyer              |812.574545    |870.678372    |1.071506  | 0.044081                                         |
        | octane-zlib               |25.162470     |25.660261     |1.019783  | 0.554591                                         |
        | date-format-tofte-SP      |395.296135    |398.008992    |1.006863  | 0.650475                                         |
        | n-body-SP                 |1165.386611   |1150.525110   |0.987248  | 0.227908                                         |
        | pdfjs                     |189.060252    |191.015628    |1.010343  | 0.633777                                         |
        | FlightPlanner             |908.426192    |903.636642    |0.994728  | 0.838821                                         |
        | uglify-js-wtb             |34.029399     |34.164342     |1.003965  | 0.655652                                         |
        | babylon-wtb               |81.329869     |80.855680     |0.994170  | 0.854393                                         |
        | stanford-crypto-sha256    |826.850533    |838.494164    |1.014082  | 0.579636                                         |
        -------------------------------------------------------------------------------------------------------------------------

        a mean = 237.91084
        b mean = 239.92670
        pValue = 0.0657710897
        (Bigger means are better.)
        1.008 times better
        Results ARE NOT significant

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::pushToSaveByteOffset):
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::pushToSaveByteOffset):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::compileExit):
        * dfg/DFGOSRExitCompilerCommon.cpp:
        (JSC::DFG::reifyInlinedCallFrames):
        * dfg/DFGThunks.cpp:
        (JSC::DFG::osrExitGenerationThunkGenerator):
        * ftl/FTLSaveRestore.cpp:
        (JSC::FTL::saveAllRegisters):
        (JSC::FTL::restoreAllRegisters):
        * ftl/FTLSaveRestore.h:
        * ftl/FTLThunks.cpp:
        (JSC::FTL::genericGenerationThunkGenerator):
        (JSC::FTL::slowPathCallThunkGenerator):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::restoreCalleeSavesFromEntryFrameCalleeSavesBuffer):
        (JSC::AssemblyHelpers::copyCalleeSavesToEntryFrameCalleeSavesBufferImpl):
        (JSC::AssemblyHelpers::emitSave):
        (JSC::AssemblyHelpers::emitRestore):
        (JSC::AssemblyHelpers::emitSaveCalleeSavesFor):
        (JSC::AssemblyHelpers::emitRestoreCalleeSavesFor):
        (JSC::AssemblyHelpers::copyLLIntBaselineCalleeSavesFromFrameOrRegisterToEntryFrameCalleeSavesBuffer):
        (JSC::AssemblyHelpers::emitSaveOrCopyLLIntBaselineCalleeSavesFor):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::copyLLIntBaselineCalleeSavesFromFrameOrRegisterToEntryFrameCalleeSavesBuffer):
        (JSC::AssemblyHelpers::emitSave): Deleted.
        (JSC::AssemblyHelpers::emitRestore): Deleted.
        (JSC::AssemblyHelpers::emitSaveOrCopyCalleeSavesFor): Deleted.
        * jit/AssemblyHelpersSpoolers.h: Added.
        (JSC::AssemblyHelpers::Spooler::Spooler):
        (JSC::AssemblyHelpers::Spooler::handleGPR):
        (JSC::AssemblyHelpers::Spooler::finalizeGPR):
        (JSC::AssemblyHelpers::Spooler::handleFPR):
        (JSC::AssemblyHelpers::Spooler::finalizeFPR):
        (JSC::AssemblyHelpers::Spooler::op):
        (JSC::AssemblyHelpers::LoadRegSpooler::LoadRegSpooler):
        (JSC::AssemblyHelpers::LoadRegSpooler::loadGPR):
        (JSC::AssemblyHelpers::LoadRegSpooler::finalizeGPR):
        (JSC::AssemblyHelpers::LoadRegSpooler::loadFPR):
        (JSC::AssemblyHelpers::LoadRegSpooler::finalizeFPR):
        (JSC::AssemblyHelpers::LoadRegSpooler::handlePair):
        (JSC::AssemblyHelpers::LoadRegSpooler::handleSingle):
        (JSC::AssemblyHelpers::StoreRegSpooler::StoreRegSpooler):
        (JSC::AssemblyHelpers::StoreRegSpooler::storeGPR):
        (JSC::AssemblyHelpers::StoreRegSpooler::finalizeGPR):
        (JSC::AssemblyHelpers::StoreRegSpooler::storeFPR):
        (JSC::AssemblyHelpers::StoreRegSpooler::finalizeFPR):
        (JSC::AssemblyHelpers::StoreRegSpooler::handlePair):
        (JSC::AssemblyHelpers::StoreRegSpooler::handleSingle):
        (JSC::RegDispatch<GPRReg>::get):
        (JSC::RegDispatch<GPRReg>::temp1):
        (JSC::RegDispatch<GPRReg>::temp2):
        (JSC::RegDispatch<GPRReg>::regToStore):
        (JSC::RegDispatch<GPRReg>::invalid):
        (JSC::RegDispatch<GPRReg>::regSize):
        (JSC::RegDispatch<GPRReg>::isValidLoadPairImm):
        (JSC::RegDispatch<GPRReg>::isValidStorePairImm):
        (JSC::RegDispatch<FPRReg>::get):
        (JSC::RegDispatch<FPRReg>::temp1):
        (JSC::RegDispatch<FPRReg>::temp2):
        (JSC::RegDispatch<FPRReg>::regToStore):
        (JSC::RegDispatch<FPRReg>::invalid):
        (JSC::RegDispatch<FPRReg>::regSize):
        (JSC::RegDispatch<FPRReg>::isValidLoadPairImm):
        (JSC::RegDispatch<FPRReg>::isValidStorePairImm):
        (JSC::AssemblyHelpers::CopySpooler::Source::getReg):
        (JSC::AssemblyHelpers::CopySpooler::CopySpooler):
        (JSC::AssemblyHelpers::CopySpooler::temp1 const):
        (JSC::AssemblyHelpers::CopySpooler::temp2 const):
        (JSC::AssemblyHelpers::CopySpooler::regToStore):
        (JSC::AssemblyHelpers::CopySpooler::invalid):
        (JSC::AssemblyHelpers::CopySpooler::regSize):
        (JSC::AssemblyHelpers::CopySpooler::isValidLoadPairImm):
        (JSC::AssemblyHelpers::CopySpooler::isValidStorePairImm):
        (JSC::AssemblyHelpers::CopySpooler::load):
        (JSC::AssemblyHelpers::CopySpooler::move):
        (JSC::AssemblyHelpers::CopySpooler::copy):
        (JSC::AssemblyHelpers::CopySpooler::store):
        (JSC::AssemblyHelpers::CopySpooler::flush):
        (JSC::AssemblyHelpers::CopySpooler::loadGPR):
        (JSC::AssemblyHelpers::CopySpooler::copyGPR):
        (JSC::AssemblyHelpers::CopySpooler::moveConstant):
        (JSC::AssemblyHelpers::CopySpooler::storeGPR):
        (JSC::AssemblyHelpers::CopySpooler::finalizeGPR):
        (JSC::AssemblyHelpers::CopySpooler::loadFPR):
        (JSC::AssemblyHelpers::CopySpooler::copyFPR):
        (JSC::AssemblyHelpers::CopySpooler::storeFPR):
        (JSC::AssemblyHelpers::CopySpooler::finalizeFPR):
        (JSC::AssemblyHelpers::CopySpooler::loadPair):
        (JSC::AssemblyHelpers::CopySpooler::storePair):
        * jit/ScratchRegisterAllocator.cpp:
        (JSC::ScratchRegisterAllocator::preserveReusedRegistersByPushing):
        (JSC::ScratchRegisterAllocator::restoreReusedRegistersByPopping):
        (JSC::ScratchRegisterAllocator::preserveRegistersToStackForCall):
        (JSC::ScratchRegisterAllocator::restoreRegistersFromStackForCall):
        * jit/ScratchRegisterAllocator.h:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::addReturn):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addReturn):

2021-06-24  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix for ARM64
        https://bugs.webkit.org/show_bug.cgi?id=227201

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::cageWithoutUntagging):
        (JSC::AssemblyHelpers::cageConditionallyAndUntag):

2021-06-24  Yijia Huang  <yijia_huang@apple.com>

        Add a new pattern to instruction selector to utilize BFI supported by ARM64
        https://bugs.webkit.org/show_bug.cgi?id=227201

        Reviewed by Filip Pizlo.

        Bitfield insert(BFI), leaving other bits unchanged. The instruction selector 
        can utilize this to lowering certain patterns in B3 IR before further Air 
        optimization. Given the operation:

        bfi d, n, lsb, width

        The equivalent pattern would be:

        Pattern 1:
            mask1 = ((1 << width) - 1) << lsb
            mask2 = ~mask1
            d = ((n << lsb) & mask1) | (d & mask2);

        Pattern 2:
            mask1 = (1 << width) - 1
            mask2 = ~(mask1 << lsb)
            d = ((n & mask1) << lsb) | (d & mask2)

        Current optimizer already has the strength reduction rule:
            Turn This: (n << lsb) & mask1)
            Into This: (n & mask1) << lsb)

        Then, d = ((n & mask1) << lsb) | (d & mask2) is the canonical form.

        With constraints:
            1. 0 <= lsb < datasize
            2. 0 < width < datasize
            3. lsb + width <= dataszie

        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = ArgumentReg(%x1)
        Int @2 = lsb
        Int @3 = mask
        Int @4 = BitAnd(@1, @3)
        Int @5 = Shl(@4, @2)
        Int @6 = BitOr(@0, @5)
        Int @7 = Return(@6, Terminal)

        Before Adding BFI:
        // Old optimized AIR
        And   mask, %x1, %x1, @4
        Lshift %x1, lsb, %x1, @5
        Or     %x1, %x0, %x0, @6
        Ret    %x0,           @7

        After Adding BFI:
        // New optimized AIR
        BitFieldInsert %x1, lsb, width, %x0, @6
        Ret            %x0,                  @7

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::bitFieldInsert32):
        (JSC::MacroAssemblerARM64::bitFieldInsert64):
        * assembler/testmasm.cpp:
        (JSC::testUbfx32):
        (JSC::testUbfx64):
        (JSC::testUbfiz32):
        (JSC::testUbfiz64):
        (JSC::testBitFieldInsert32):
        (JSC::testBitFieldInsert64):
        * b3/B3LowerToAir.cpp:
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.h:
        * b3/testb3_2.cpp:
        (testBitFieldInsert32):
        (testBitFieldInsert64):
        (addBitTests):

2021-06-24  Xan López  <xan@igalia.com>

        [JSC] Implement returnEarlyFromInfiniteLoopsForFuzzing for 32bits
        https://bugs.webkit.org/show_bug.cgi?id=227290

        Reviewed by Mark Lam.

        Mostly a matter of changing the counter type to uintptr_t and
        making the baseline/dfg/ftl code generation work on both 32 and
        64bits, most of it can be shared with minor tweaks.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileLoopHint):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_loop_hint):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LowLevelInterpreter32_64.asm:
        * runtime/VM.cpp:
        (JSC::VM::addLoopHintExecutionCounter):
        (JSC::VM::getLoopHintExecutionCounter):
        * runtime/VM.h:

2021-06-23  Mark Lam  <mark.lam@apple.com>

        Base Options::useWebAssemblyFastMemory's default value on Gigacage::hasCapacityToUseLargeGigacage.
        https://bugs.webkit.org/show_bug.cgi?id=227328

        Reviewed by Saam Barati.

        Gigacage::hasCapacityToUseLargeGigacage is determined based on EFFECTIVE_ADDRESS_WIDTH.
        If we have enough address range to potentially use a large gigacage, then we have
        enough address range to useWebAssemblyFastMemory.

        * runtime/Options.cpp:
        (JSC::canUseWebAssemblyFastMemory):
        * runtime/OptionsList.h:

2021-06-23  Yijia Huang  <yijia_huang@apple.com>

        Add a new pattern to instruction selector to utilize UBFIZ supported by ARM64
        https://bugs.webkit.org/show_bug.cgi?id=227204

        Reviewed by Filip Pizlo.

        This patch includes three parts:
            A) Add UBFIZ to instruction selector.
            B) Fix UBFX, introduced in https://bugs.webkit.org/show_bug.cgi?id=226984, 
               to match all patterns. 
            C) Fix error condition in one strength reduction rule introduced 
               in https://bugs.webkit.org/show_bug.cgi?id=227138.

        Part A
        Unsigned Bitfield Insert in Zero(UBFIZ), supported by ARM64, zeros the 
        destination register and copies any number of contiguous bits from a 
        source register into any position in the destination register. The 
        instruction selector can utilize this to lowering certain patterns in 
        B3 IR before further Air optimization. 

        Given the operation: ubfiz d, n, lsb, width

        This is equivalent to "d = (n << lsb) & (((1 << width) - 1) << lsb)". 
        Since wasm introduces constant folding, then the matched patterns would be:
        1.1 d = (n << lsb) & maskShift
        1.2 d = maskShift & (n << lsb)

        2.1 d = (n & mask) << lsb
        2.2 d = (mask & n) << lsb

        Where:
            maskShift = mask << lsb
            mask = (1 << width) - 1

        To make the pattern matching in instruction selection beneficial to JIT, these 
        constraints should be introduced:
            1. 0 <= lsb < datasize
            2. 0 < width < datasize
            3. lsb + width <= datasize

        Choose (n & mask) << lsb as the canonical form and introduce a strength reduction.
        Turn this: (n << lsb) & maskShift
        Into this: (n & mask) << lsb

        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = lsb
        Int @2 = 0b0110
        Int @3 = Shl(@0, @1)
        Int @4 = BitAnd(@3, @2)  
        Void@5 = Return(@4, Terminal)      

        Before Adding UBFIZ Pattern:
        // Old optimized AIR
        Lshift  %x0, $62, %x0, @3
        And  0b0110, %x0, %x0, @4
        Ret     %x0,           @5

        After Adding UBFIZ Pattern:
        // New optimized AIR
        Ubfiz %x0, lsb, 2, %x0, @4
        Ret   %x0,              @5

        Part B
        Fix UBFX to match both patterns:
        dest = (src >> lsb) & mask
        dest = mask & (src >> lsb)

        Where:
        1. mask = (1 << width) - 1
        2. 0 <= lsb < datasize
        3. 0 < width < datasize
        4. lsb + width <= datasize       

        Part C
        Fix one B3 strength reduction.
        Turn this: (src >> shiftAmount) & mask
        Into this: src >> shiftAmount

        With updated constraints:
        1. mask = (1 << width) - 1
        2. 0 <= shiftAmount < datasize
        3. 0 < width < datasize
        4. shiftAmount + width >= datasize

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::ubfiz32):
        (JSC::MacroAssemblerARM64::ubfiz64):
        * assembler/testmasm.cpp:
        (JSC::testUbfiz32):
        (JSC::testUbfiz64):
        * b3/B3LowerToAir.cpp:
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.h:
        * b3/testb3_2.cpp:
        (testUbfx32ArgLeft):
        (testUbfx32ArgRight):
        (testUbfx64ArgLeft):
        (testUbfx64ArgRight):
        (testUbfiz32ArgLeft):
        (testUbfiz32ArgRight):
        (testUbfiz64ArgLeft):
        (testUbfiz64ArgRight):
        (addBitTests):
        (testUbfx32): Deleted.
        (testUbfx32PatternMatch): Deleted.
        (testUbfx64): Deleted.
        (testUbfx64PatternMatch): Deleted.

2021-06-23  Keith Miller  <keith_miller@apple.com>

        add/removeManagedReference:withOwner: should have autoreleasepools
        https://bugs.webkit.org/show_bug.cgi?id=227308

        Reviewed by Darin Adler.

        Since these APIs create autoreleased objects as an implementation detail
        but don't return any to the caller there's no indication such autoreleased
        objects could be accumulating. Additionally, it's entirely reasonable to
        call these methods in a loop an a large set of objects, which further
        exacerbates the problem.

        * API/JSVirtualMachine.mm:
        (-[JSVirtualMachine addManagedReference:withOwner:]):
        (-[JSVirtualMachine removeManagedReference:withOwner:]):

2021-06-23  Saam Barati  <sbarati@apple.com>

        Run lazy properties initializers under a DeferTerminationForAWhile scope
        https://bugs.webkit.org/show_bug.cgi?id=227271

        Reviewed by Mark Lam.

        We don't expect that exceptions can be thrown when initializing 
        a lazy property. Termination exceptions were preventing this from
        being true. The latest example found is inside JSModuleLoader when
        it asserts that no exception is thrown when creating its JSMap field.
        This patch makes it so termination exceptions can't be thrown when
        running lazy property initializers.

        * runtime/LazyPropertyInlines.h:
        (JSC::ElementType>::initLater):
        (JSC::ElementType>::callFunc):

2021-06-22  Yijia Huang  <yijia_huang@apple.com>

        Add a new pattern to instruction selector to utilize SMADDL supported by ARM64
        https://bugs.webkit.org/show_bug.cgi?id=227188

        Reviewed by Saam Barati.

        Signed Multiply-Add Long(SMADDL), supported by ARM64, multiplies two 32-bit 
        register values, adds a 64-bit register value, and writes the result to the 
        64-bit destination register. The instruction selector can utilize this to 
        lowering certain patterns in B3 IR before further Air optimization. 

        Given the operation:

        smaddl d, n, m, a

        The equivalent patterns would be:

        d = a + SExt32(n) * SExt32(m)
        d = SExt32(n) * SExt32(m) + a

        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = SExt32(Trunc(ArgumentReg(%x1)))
        Int @2 = SExt32(Trunc(ArgumentReg(%x2)))
        Int @3 = Mul(@1, @2)
        Int @4 = Add(@0, @3)
        Void@5 = Return(@4, Terminal)

        Before Adding SMADDL:
        // Old optimized AIR
        SignExtend32ToPtr  %x1, %x1,           @1
        SignExtend32ToPtr  %x2, %x2,           @2
        MultiplyAdd64      %x1, %x2, %x0, %x0, @4
        Ret64              %x0,                @5

        After Adding SMADDL:
        // New optimized AIR
        MultiplyAddSignExtend32 %x1, %x2, %x0, %x0, @8
        Ret64                   %x0,                @9

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::multiplyAddSignExtend32):
        * assembler/testmasm.cpp:
        (JSC::testMultiplyAddSignExtend32Left):
        (JSC::testMultiplyAddSignExtend32Right):
        * b3/B3LowerToAir.cpp:
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.h:
        * b3/testb3_2.cpp:
        (testMulAddArg):
        (testMulAddArgsLeft):
        (testMulAddArgsRight):
        (testMulAddSignExtend32ArgsLeft):
        (testMulAddSignExtend32ArgsRight):
        (testMulAddArgsLeft32):
        (testMulAddArgsRight32):
        * b3/testb3_3.cpp:
        (addArgTests):

2021-06-22  Saam Barati  <sbarati@apple.com>

        jitCompileAndSetHeuristics shouldn't return true when we fail to compile
        https://bugs.webkit.org/show_bug.cgi?id=227155

        Reviewed by Tadeu Zagallo.

        jitCompileAndSetHeuristics should only return true when we've successfully
        compiled a baseline JIT CodeBlock. However, with the rewrite to using a
        unified JIT worklist, the code was changed to returning true when a
        compilation finished, regardless of it being successful or not. This patch
        fixes that error.
        
        This bug was found by our existing executable allocation fuzzer, but at a low
        hit rate. That fuzzer only ran a single test case. This patch also introduces
        a new form of the executable fuzzer where we fail to allocate JIT code
        randomly, and the crash manifests more reliably. And this patch also hooks
        the new fuzzer into more JSC stress tests.

        * dfg/DFGLICMPhase.cpp:
        (JSC::DFG::LICMPhase::run):
        * jit/ExecutableAllocationFuzz.cpp:
        (JSC::doExecutableAllocationFuzzing):
        * jsc.cpp:
        (runJSC):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::jitCompileAndSetHeuristics):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/OptionsList.h:

2021-06-22  Angelos Oikonomopoulos  <angelos@igalia.com>

        Properly set numFPRs on ARM with NEON/VFP_V3_D32
        https://bugs.webkit.org/show_bug.cgi?id=227212

        Reviewed by Filip Pizlo.

        Don't hardcode the number of FP regs on ARMv7 to 16; when targetting a
        CPU with NEON or VFP_V3_d32, the number of FP regs is 32.

        This also reverts the recent change to add an extra word to RegisterSet
        which essentially covered up for this mismatch. The reason this bug only
        manifested on certain compiler versions was that GCC 8.4/8.5 where built using
        our buildroot infrastructure, whereas the other GCC versions we tested with
        were debian system toolchains, targetting a lowest common denominator.

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::std::initializer_list<int>):
        * jit/RegisterSet.h:

2021-06-21  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Add JIT ICs for `#x in obj` feature
        https://bugs.webkit.org/show_bug.cgi?id=226146

        Reviewed by Saam Barati.

        This patch implements JIT ICs for the new `#x in obj` feature and turns the feature on by default.
        Implementation closely follows InByVal, though HasPrivateBrand has a few subtleties
        (namely, it cannot be viewed in terms of a PropertySlot and should not be converted to InById).

        Microbenchmarks:
            has-private-name        46.5777+-0.1374     ^      6.0589+-0.0296        ^ definitely 7.6875x faster
            has-private-brand       25.8823+-0.0561     ^     19.1509+-0.0447        ^ definitely 1.3515x faster

        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::reset):
        * bytecode/StructureStubInfo.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleInByAsMatchStructure):
        (JSC::DFG::ByteCodeParser::handleInById):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileInByVal):
        (JSC::DFG::SpeculativeJIT::compileHasPrivate):
        (JSC::DFG::SpeculativeJIT::compileHasPrivateName):
        (JSC::DFG::SpeculativeJIT::compileHasPrivateBrand):
        * dfg/DFGSpeculativeJIT.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITInlineCacheGenerator.cpp:
        (JSC::JITInByValGenerator::JITInByValGenerator):
        * jit/JITInlineCacheGenerator.h:
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jit/JITOperations.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_in_by_val):
        (JSC::JIT::emitHasPrivate):
        (JSC::JIT::emitHasPrivateSlow):
        (JSC::JIT::emit_op_has_private_name):
        (JSC::JIT::emitSlow_op_has_private_name):
        (JSC::JIT::emit_op_has_private_brand):
        (JSC::JIT::emitSlow_op_has_private_brand):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_in_by_val):
        (JSC::JIT::emitHasPrivate):
        (JSC::JIT::emitHasPrivateSlow):
        (JSC::JIT::emit_op_has_private_name):
        (JSC::JIT::emitSlow_op_has_private_name):
        (JSC::JIT::emit_op_has_private_brand):
        (JSC::JIT::emitSlow_op_has_private_brand):
        * jit/Repatch.cpp:
        (JSC::appropriateOptimizingInByFunction):
        (JSC::appropriateGenericInByFunction):
        (JSC::tryCacheInBy):
        (JSC::repatchInBy):
        (JSC::tryCacheHasPrivateBrand):
        (JSC::repatchHasPrivateBrand):
        (JSC::resetInBy):
        (JSC::resetHasPrivateBrand):
        * jit/Repatch.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LLIntSlowPaths.h:
        * llint/LowLevelInterpreter.asm:
        * runtime/CommonSlowPaths.cpp:
        * runtime/CommonSlowPaths.h:
        * runtime/OptionsList.h:

2021-06-21  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes late June 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=227241

        Unreviewed non-unified build fixes.

        * dfg/DFGDriver.h:

2021-06-21  Xan Lopez  <xan@igalia.com>

        [JSC] Fix consistency check during stack splitting in Wasm::LLIntGenerator::addLoop
        https://bugs.webkit.org/show_bug.cgi?id=226012

        Reviewed by Tadeu Zagallo.

        It is possible for the wasm llint generator to call
        checkConsistency() on a stack that is only halfway through being
        properly setup. Specifically, when generating a loop block, we use
        splitStack() to pop the arguments for the loop into a new stack,
        and materializeConstantsAndLocals() to materialize the constants
        and aliases in the loop arguments, but the arguments won't be
        added back to the stack until the very end of the loop code
        generation. Since materializeConstantsAndLocals() will check the
        correctness of the expression stack, which isn't yet fully formed,
        we'll fail its ASSERT. To workaround this, we create a variant of
        materializeConstantsAndLocals() that does not check for
        correctness (similar to what we do in push()), and manually check
        the correctness of the new split stack in
        Wasm::LLIntGenerator::addLoop(), which is the place that knows the
        details of this intermediate state.

        For more details, see: https://bugs.webkit.org/show_bug.cgi?id=226012#c8

        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::checkConsistencyOfExpressionStack):
        (JSC::Wasm::LLIntGenerator::checkConsistency):
        (JSC::Wasm::LLIntGenerator::materializeConstantsAndLocals):
        (JSC::Wasm::LLIntGenerator::addLoop):

2021-06-21  Yusuke Suzuki  <ysuzuki@apple.com>

        Release assert memory in JSC::Wasm::Memory::growShared(JSC::Wasm::PageCount)::<lambda()>
        https://bugs.webkit.org/show_bug.cgi?id=227180

        Reviewed by Keith Miller.

        When Wasm.Memory is shared, we should allocate bound growable memory even if initial size is 0 bytes,
        since this range can be later extended by mprotect. If maximum size is also 0 byte, we already have
        a path that does not allocate anything.

        * wasm/WasmMemory.cpp:
        (JSC::Wasm::Memory::tryCreate):

2021-06-21  Yijia Huang  <yijia_huang@apple.com>

        Add a new pattern to instruction selector to utilize SMSUBL supported by ARM64
        https://bugs.webkit.org/show_bug.cgi?id=227195

        Reviewed by Keith Miller.

        Signed Multiply-Subtract Long(SMSUBL), supported by ARM64, multiplies two 
        32-bit register values, subtracts the product from a 64-bit register value, 
        and writes the result 64-bit destination register. The instruction selector 
        can utilize this to lowering certain patterns in B3 IR before further Air 
        optimization. Given the operation:

        smsubl d, n, m, a

        The equivalent pattern would be:

        d = a - SExt32(n) * SExt32(m)

        Given B3 IR:
        Int @0 = ArgumentReg(%x0)
        Int @1 = SExt32(Trunc(ArgumentReg(%x1)))
        Int @2 = SExt32(Trunc(ArgumentReg(%x2)))
        Int @3 = Mul(@1, @2)
        Int @4 = Sub(@0, @3)
        Void@5 = Return(@4, Terminal)

        Before Adding SMSUBL:
        // Old optimized AIR
        SignExtend32ToPtr  %x1, %x1,           @1
        SignExtend32ToPtr  %x2, %x2,           @2
        MultiplySub64      %x1, %x2, %x0, %x0, @4
        Ret64              %x0,                @5

        After Adding SMSUBL:
        // New optimized AIR
        MultiplySubSignExtend32 %x1, %x2, %x0, %x0, @4
        Ret64                   %x0,                @5

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::multiplySubSignExtend32):
        * assembler/testmasm.cpp:
        (JSC::testMulSubSignExtend32):
        * b3/B3LowerToAir.cpp:
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.h:
        * b3/testb3_2.cpp:
        (testMulSubArgsLeft):
        (testMulSubArgsRight):
        (testMulSubArgsLeft32):
        (testMulSubArgsRight32):
        (testMulSubSignExtend32Args):
        * b3/testb3_3.cpp:
        (addArgTests):

2021-06-21  Kimmo Kinnunen  <kkinnunen@apple.com>

        makeUnique cannot be used to instantiate function-local classes
        https://bugs.webkit.org/show_bug.cgi?id=227163

        Reviewed by Antti Koivisto.

        Make JSC_MAKE_PARSER_ARENA_DELETABLE_ALLOCATED
        consistent with WTF_MAKE_FAST_ALLOCATED behavior
        with respect to unused typedefs inside the macro.

        * parser/Nodes.h:

2021-06-20  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add ValueOf fast path in toPrimitive
        https://bugs.webkit.org/show_bug.cgi?id=226948

        Reviewed by Ross Kirsling.

        Add fast path for Object.prototype.valueOf function call since we
        sometimes encounter this case in Speedometer2/EmberJS-Debug-TodoMVC.

                                       ToT                     Patched

            value-of-call        65.7169+-0.6192     ^     45.0986+-0.0830        ^ definitely 1.4572x faster

        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::toStringSlowCase const):
        * runtime/JSObject.cpp:
        (JSC::callToPrimitiveFunction):

2021-06-20  Robin Morisset  <rmorisset@apple.com>

        Fix speculated type in the one-argument overload of speculateNeitherDoubleNorHeapBigIntNorString
        https://bugs.webkit.org/show_bug.cgi?id=227119

        Reviewed by Yusuke Suzuki.

        Same problem as bug 226786: a missing check for HeapBigInt in the speculateNeitherDoubleNorHeapBigIntNorString function introduced in 226676.

        I also rewrote the SpeculatedType for NeitherDoubleNorHeapBigIntNorString in typeFilterFor for readability. The old and the new SpeculatedType are perfectly identical, it is just a different (and in my view more readable) way of writing it.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::speculateNeitherDoubleNorHeapBigIntNorString):
        * dfg/DFGUseKind.h:
        (JSC::DFG::typeFilterFor):

2021-06-19  Mark Lam  <mark.lam@apple.com>

        [Revert r278576] Put the Baseline JIT prologue and op_loop_hint code in JIT thunks.
        https://bugs.webkit.org/show_bug.cgi?id=226375

        Not reviewed.

        Suspect regresses Speedometer2.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::untagReturnAddress):
        (JSC::AbstractMacroAssembler::untagReturnAddressWithoutExtraValidation): Deleted.
        * assembler/MacroAssemblerARM64E.h:
        (JSC::MacroAssemblerARM64E::untagReturnAddress):
        (JSC::MacroAssemblerARM64E::untagReturnAddressWithoutExtraValidation): Deleted.
        * assembler/MacroAssemblerARMv7.h:
        * assembler/MacroAssemblerMIPS.h:
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addressOfNumParameters):
        (JSC::CodeBlock::offsetOfNumParameters):
        (JSC::CodeBlock::offsetOfInstructionsRawPointer):
        (JSC::CodeBlock::offsetOfNumCalleeLocals): Deleted.
        (JSC::CodeBlock::offsetOfNumVars): Deleted.
        (JSC::CodeBlock::offsetOfArgumentValueProfiles): Deleted.
        (JSC::CodeBlock::offsetOfShouldAlwaysBeInlined): Deleted.
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::emitSaveCalleeSavesFor):
        (JSC::AssemblyHelpers::emitSaveCalleeSavesForBaselineJIT): Deleted.
        (JSC::AssemblyHelpers::emitRestoreCalleeSavesForBaselineJIT): Deleted.
        * jit/JIT.cpp:
        (JSC::JIT::compileAndLinkWithoutFinalizing):
        (JSC::JIT::privateCompileExceptionHandlers):
        (JSC::prologueGeneratorSelector): Deleted.
        (JSC::JIT::prologueGenerator): Deleted.
        (JSC::JIT::arityFixupPrologueGenerator): Deleted.
        * jit/JIT.h:
        * jit/JITInlines.h:
        (JSC::JIT::emitNakedNearCall):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::op_ret_handlerGenerator):
        (JSC::JIT::emit_op_enter):
        (JSC::JIT::op_enter_handlerGenerator):
        (JSC::JIT::emit_op_loop_hint):
        (JSC::JIT::emitSlow_op_loop_hint):
        (JSC::JIT::op_enter_Generator): Deleted.
        (JSC::JIT::op_enter_canBeOptimized_Generator): Deleted.
        (JSC::JIT::op_enter_cannotBeOptimized_Generator): Deleted.
        (JSC::JIT::op_loop_hint_Generator): Deleted.
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_enter):
        * jit/ThunkGenerators.cpp:
        (JSC::popThunkStackPreservesAndHandleExceptionGenerator):

2021-06-19  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r278699.
        https://bugs.webkit.org/show_bug.cgi?id=227174

        Regressed JetStream2/WSL

        Reverted changeset:

        "[JSC] Remove useDataICInOptimizingJIT option"
        https://bugs.webkit.org/show_bug.cgi?id=226862
        https://trac.webkit.org/changeset/278699

2021-06-18  Yijia Huang  <yijia_huang@apple.com>

        Add a new pattern to B3ReduceStrength based on Bug 226984
        https://bugs.webkit.org/show_bug.cgi?id=227138

        Reviewed by Filip Pizlo.

        In the previous patch bug 226984, a new pattern could be introduced to 
        B3ReduceStrength.cpp for further optimization, which is that:

        dest = (src >> shiftAmount) & mask

        is equivalent to

        src >> shiftAmount

        under these constraints:

        1. shiftAmount >= 0 
        2. mask has a binary format in contiguous ones starting from the 
           least significant bit.
        3. shiftAmount + bitCount(mask) == maxBitWidth

        For instance (32-bit):

        (src >> 12) & 0x000fffff == src >> 12

        This reduction is more beneficial than UBFX in this case.  

        // B3 IR
        Int @0 = ArgumentReg(%0)
        Int @1 = 12
        Int @2 = ZShr(@0, @1)
        Int @3 = 0x000fffff
        Int @4 = BitAnd(@2, @3))
        Void@5 = Return(@4, Terminal)    

        w/o the pattern:
        // Old optimized AIR
        Ubfx %0, $12, $20, %0, @4
        Ret  %0,               @5

        w/ the pattern:
        // New optimized AIR
        Urshift %0, $12, %0, @3
        Ret32   %0,          @6

        * b3/B3ReduceStrength.cpp:
        * b3/testb3.h:
        * b3/testb3_2.cpp:
        (testBitAndZeroShiftRightImmMask32):
        (testBitAndZeroShiftRightImmMask64):
        (addBitTests):

2021-06-18  Robin Morisset  <rmorisset@apple.com>

        [DFG] Untyped branches should eliminate checks based on results from the AbstractInterpreter
        https://bugs.webkit.org/show_bug.cgi?id=227159

        Reviewed by Filip Pizlo.

        We currently emit a ton of code for Untyped branches, as we use branchIfTruthy which does not know anything about the abstract interpreter.
        Even worse: we call branchIfTruthy after emitting some fast paths, and branchIfTruthy replicates these fast paths (Int32 and Booleans).
        While I plan to reduce the number of Untyped branches in some separate patches, there is a very long tail of predicted types visible in benchmarks, so I expect some of them to remain no matter what, justifying making the code emitted in that case more reasonable.

        The implementation in this patch is fairly straightforward, as it follows very closely branchOnValue() from AssemblyHelpers (which was previously called through branchIfTruthy).

        It was tested on the JSC stress tests, as well as on JetStream2.

        On JetStream2, it reduced the average number of bytes emitted for Branch by the DFG from 30.1 to 27.5 (highly significant, it only changes by about 0.1 between runs).
        Since only about 1.5k branches are untyped out of 34k in that benchmark, it means that this patch reduces the amount of code emitted for untyped branches by about 50 bytes on average.

        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::branchDoubleZeroOrNaN):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitUntypedBranch):
        (JSC::DFG::SpeculativeJIT::emitBranch):

2021-06-17  Mark Lam  <mark.lam@apple.com>

        Rename numberOfPACBits to maxNumberOfAllowedPACBits.
        https://bugs.webkit.org/show_bug.cgi?id=227156

        Reviewed by Saam Barati.

        Just renaming the constant to better describe what it represents.  There are no
        behavior changes.

        * assembler/MacroAssemblerARM64E.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::cageWithoutUntagging):
        (JSC::AssemblyHelpers::cageConditionallyAndUntag):
        * llint/LowLevelInterpreter64.asm:

2021-06-17  Mark Lam  <mark.lam@apple.com>

        Define MacroAssemblerARM64E::numberOfPACBits based on OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH).
        https://bugs.webkit.org/show_bug.cgi?id=227147
        rdar://78785309

        Reviewed by Saam Barati.

        * assembler/MacroAssemblerARM64E.h:
        * bytecode/CodeOrigin.h:
        * runtime/JSString.h:
        * runtime/OptionsList.h:

2021-06-17  Fujii Hironori  <Hironori.Fujii@sony.com>

        Reimplement JSC::CachePayload without FileSystem::unmapViewOfFile and FileSystem::MappedFileData::leakHandle
        https://bugs.webkit.org/show_bug.cgi?id=227014

        Reviewed by Yusuke Suzuki.

        r247542 (Bug 199759) added FileSystem::unmapViewOfFile and
        FileSystem::MappedFileData::leakHandle for JSC::CachePayload to
        get the mapped address and to free the address.

        However, Bug 227011 is going to add a file mapping handle to
        FileSystem::MappedFileData for Windows port to create a
        SharedMemory from a MappedFileData. Destruction of MappedFileData
        should be done only by MappedFileData dtor.

        * runtime/CachePayload.cpp:
        (JSC::CachePayload::makeMappedPayload):
        (JSC::CachePayload::makeMallocPayload):
        (JSC::CachePayload::makeEmptyPayload):
        (JSC::CachePayload::CachePayload):
        (JSC::CachePayload::data const):
        (JSC::CachePayload::size const):
        (JSC::CachePayload::~CachePayload): Deleted.
        (JSC::CachePayload::operator=): Deleted.
        (JSC::CachePayload::freeData): Deleted.
        * runtime/CachePayload.h: Use Variant for data.
        (JSC::CachePayload::data const): Deleted.
        (JSC::CachePayload::size const): Deleted.
        (JSC::CachePayload::CachePayload): Deleted.

2021-06-17  Yijia Huang  <yijia_huang@apple.com>

        Add a new pattern to instruction selector to utilize UBFX supported by ARM64
        https://bugs.webkit.org/show_bug.cgi?id=226984

        Reviewed by Filip Pizlo.

        UBFX, supported by ARM64, copies adjacent bits from the source register into 
        the least significant bits of a destination register in zero extension. The 
        instruction selector can utilize this to lowering certain patterns in B3 IR 
        before further Air optimization.

        ubfx dest, src, lsb, width
           tmp, tmp, imm, imm

        This is equivalent to "dest = (src >> lsb) & ((1 << width) - 1)". Since wasm 
        introduces constant folding, then the pattern would be:

        dest = (src >> lsb) & mask

        where the mask should have a binary format in contiguous ones starting from 
        the least significant bit. For example:

        0b00111111

        To make the pattern matching in instruction selection beneficial to JIT, these 
        constraints should be introduced:

        1. lsb >= 0 
        2. width > 0
        3. lsb + width <= bit field limit (32 or 64)

        Given:
        // B3 IR
        Int @0 = ArgumentReg(%0)
        Int @1 = lsb
        Int @2 = 0b0011
        Int @3 = ZShr(@0, @1)
        Int @4 = BitAnd(@3, @2)  
        Void@5 = Return(@4, Terminal)      

        w/o UBFX Pattern:
        // Old optimized AIR
        Urshift %x0, lsb, %x0, @3
        And  0b0011, %x0, %x0, @4
        Ret     %x0,           @5

        w/ UBFX Pattern:
        // New optimized AIR
        Ubfx %x0, lsb, 2, %x0, @4
        Ret  %x0,              @5

        Note:
        Suppose a 32-bit version of (src >> 20) & 0x0FFF, it is equivalent to src >> 20. 
        In this case, Logical Shift Right should be utilized instead when:

        lsb + width == bit field limit (32 or 64)

        This case/pattern should be added and upadated in the future patch.

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::ubfx32):
        (JSC::MacroAssemblerARM64::ubfx64):
        * assembler/testmasm.cpp:
        (JSC::testUbfx32):
        (JSC::testUbfx64):
        * b3/B3LowerToAir.cpp:
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.h:
        * b3/testb3_2.cpp:
        (testUbfx64PatternMatch):
        (testUbfx32PatternMatch):
        (addBitTests):

2021-06-17  Angelos Oikonomopoulos  <angelos@igalia.com>

        [JSC] Work around apparent miscompilation on ARM/GCC >=8.4
        https://bugs.webkit.org/show_bug.cgi?id=227125

        Reviewed by Filip Pizlo.

        This seems to be a GCC miscompilation, revealed by
        https://bugs.webkit.org/show_bug.cgi?id=227078.  Introduce a
        workaround for the GCC versions that seem to be affected.

        * jit/RegisterSet.h:

2021-06-16  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Optimize JSON.parse with small data by changing Identifier pool mechanism
        https://bugs.webkit.org/show_bug.cgi?id=227101

        Reviewed by Mark Lam.

        Found that std::array<Identifier, 128> pool in LiteralParser is too costly for construction and destruction
        if JSON.parse is invoked for small data. This patch changes this pool mechanism so that we do not waste effort
        allocating null Identifiers to pre-populate the recent identifiers pool. Instead, we now use a m_recentIdentifiersIndex
        uint8_t array to indicate whether there's a cached recent identifier for each given first character.

        We also use KeywordLookup.h's COMPARE_XCHARS to perform "true" / "false" / "null" lexing in JSON parser.
        Roughly 20% improvement in microbenchmark. And roughly 2-3% improvement in Speedometer2/Flight-TodoMVC.

                                            ToT                     Patched

            flight-todomvc-json       67.8755+-1.1202     ^     56.7114+-0.5048        ^ definitely 1.1969x faster

        * runtime/Identifier.cpp:
        (JSC::Identifier::add):
        (JSC::Identifier::add8):
        * runtime/Identifier.h:
        (JSC::Identifier::Identifier):
        (JSC::Identifier::add):
        * runtime/IdentifierInlines.h:
        (JSC::Identifier::add):
        (JSC::Identifier::fromString):
        * runtime/LiteralParser.cpp:
        (JSC::compare3Chars):
        (JSC::compare4Chars):
        (JSC::LiteralParser<CharType>::makeIdentifier):
        (JSC::LiteralParser<CharType>::Lexer::lex):
        * runtime/LiteralParser.h:

2021-06-16  Mark Lam  <mark.lam@apple.com>

        Adopt com.apple.security.cs.jit-write-allowlist on internal builds.
        https://bugs.webkit.org/show_bug.cgi?id=222148
        rdar://74284026

        Reviewed by Per Arne Vollan.

        This will prevent various pthread permissions switching APIs from working.
        We only want to adopt this for internal builds where we use the fast permission
        switching macro instead.  We can't adopt it for open source builds, where we
        still rely on the pthread API.

        * Scripts/process-entitlements.sh:

2021-06-16  Robin Morisset  <rmorisset@apple.com>

        Don't look at the (non-existent) child2 of DelById
        https://bugs.webkit.org/show_bug.cgi?id=227095

        Reviewed by Mark Lam.

        Trivial fix to a broken rebase: while it is ok to share most code between DelById and DelByVal, only the latter has a child2(), so it should not be accessed if we are compiling the former.
        No new test, as it was caught by one of our existing tests.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileDelBy):

2021-06-16  Yijia Huang  <yijia_huang@apple.com>

        Add Air opcode sub32/64(Reg, Imm, Reg) form for ARM64 and select this instruction in Air
        https://bugs.webkit.org/show_bug.cgi?id=226937

        Reviewed by Yusuke Suzuki.

        Previously, Air arm64 sub32/64 utilize sub(Imm, Tmp) at optlevel = 0 and 
        add(Tmp, -Imm) at optlevel > 0 to perform and optimize sub(Tmp, Imm, Tmp).
        The issue with this is that we were not eliding redundant operations. 

        For example:
        // B3 IR
        @0 = Trunc(ArgumentReg(0))
        @1 = Const
        @2 = Sub(@0, @1)
        @3 = Return(@2)

        // Old optimized Air IR
        // OptLevel = 0
        Move    %x0, %tmp1, @0
        Move $Const, %tmp2, @1
        Move  %tmp1, %tmp0, @2 // Redundant
        Sub  $Const, %tmp0, @2
        Move  %tmp0,   %x0, @3
        Ret32   %x0,        @3

        To remove those redundant instructions, Air arm64 sub32/64 opcode should 
        indicate a new form sub(Tmp, Imm, Tmp).

        // New optimized Air IR
        // OptLevel = 0
        Move    %x0,  %tmp1,        @0
        Move $Const,  %tmp2,        @1
        Sub   %tmp1, $Const, %tmp0, @2
        Move  %tmp0,    %x0,        @3
        Ret32   %x0,                @3

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::sub32):
        (JSC::MacroAssemblerARM64::sub64):
        * assembler/testmasm.cpp:
        (JSC::testSub32Args):
        (JSC::testSub32Imm):
        (JSC::testSub32ArgImm):
        (JSC::testSub64Imm32):
        (JSC::testSub64ArgImm32):
        (JSC::testSub64Imm64):
        (JSC::testSub64ArgImm64):
        * b3/B3ReduceStrength.cpp:
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.h:
        * b3/testb3_2.cpp:
        (testSubArgs32ZeroExtend):
        * b3/testb3_3.cpp:
        (addArgTests):

2021-06-16  Robin Morisset  <rmorisset@apple.com>

        Drop the FTL(DFG) graph after lowering to B3
        https://bugs.webkit.org/show_bug.cgi?id=226556

        Reviewed by Phil Pizlo.

        This patch originally landed as r278463, was reverted in r278463.
        I believe that the bug for which it was reverted actually comes from r278371, which was also reverted at the same time. So I am now relanding this.

        The challenge in this patch was dealing with all of the Patchpoints created by FTLLowerDFGToB3: they get a lambda at that time, which they execute at the end of Air, and many of these lambdas were capturing a pointer to some parts of the DFG graph and reading through it when being executed.
        In all cases but one it was easily fixed: they were only reading a few bits from a given node, so I just read these bits in FTLLowerDFGToB3, and captured them (by value) instead of the pointer to the node.
        The exception was compileCallOrConstructVarargsSpread(): its patchpoint generator was walking through the graph, flattening a tree of PhantomSpread/PhantomNewArrayWithSpread/PhantomNewArrayBuffer/PhantomCreateRest, emitting some code along the way.
        We now do this flattening of the tree in FTLLowerDFGToB3, store just enough information to later emit the required code in a vector, and capture that vector in the lambda (through a move capture, which is allowed since C++14). See `struct VarargsSpreadArgumentToEmit` for the information that we need to store in that vector.

        I tested this change by completing a full run of JetStream2 with ASAN.
        I also ran the stress tests with "spread" in their name in Debug mode.

        * b3/B3SparseCollection.h:
        (JSC::B3::SparseCollection::clearAll):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::freeDFGIRAfterLowering):
        * dfg/DFGGraph.h:
        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileUnaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileBinaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::getPrivateName):
        (JSC::FTL::DFG::LowerDFGToB3::compilePrivateBrandAccess):
        (JSC::FTL::DFG::LowerDFGToB3::cachedPutById):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileDelBy):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct):
        (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct):
        (JSC::FTL::DFG::LowerDFGToB3::compileTailCall):
        (JSC::FTL::DFG::LowerDFGToB3::VarargsSpreadArgumentToEmit::VarargsSpreadArgumentToEmit):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallEval):
        (JSC::FTL::DFG::LowerDFGToB3::compileInById):
        (JSC::FTL::DFG::LowerDFGToB3::compileInstanceOf):
        (JSC::FTL::DFG::LowerDFGToB3::getById):
        (JSC::FTL::DFG::LowerDFGToB3::getByIdWithThis):
        (JSC::FTL::DFG::LowerDFGToB3::emitBinarySnippet):
        (JSC::FTL::DFG::LowerDFGToB3::emitBinaryBitOpSnippet):
        (JSC::FTL::DFG::LowerDFGToB3::emitRightShiftSnippet):
        (JSC::FTL::DFG::LowerDFGToB3::crash):

2021-06-16  Filip Pizlo  <fpizlo@apple.com>

        RegisterSet should be smaller
        https://bugs.webkit.org/show_bug.cgi?id=227078

        Reviewed by Geoff Garen.

        Previously, every RegisterSet would have an extra 64-bit word in it just to hold state
        relevant to hashtable keys.

        But RegisterSet is almost never used as a hashtable key.

        This patch moves the hashtable key support into a subclass, HashableRegisterSet. That class
        ends up only being used in one place.

        On ARM64, this makes RegisterSet use 64 bits instead of 128 bits.

        On X86_64, this makes RegisterSet use 32 bits instead of 64 bits.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * ftl/FTLSlowPathCallKey.h:
        (JSC::FTL::SlowPathCallKey::SlowPathCallKey):
        * jit/HashableRegisterSet.h: Added.
        (JSC::HashableRegisterSet::HashableRegisterSet):
        (JSC::HashableRegisterSet::isEmptyValue const):
        (JSC::HashableRegisterSet::isDeletedValue const):
        (JSC::RegisterSetHash::hash):
        (JSC::RegisterSetHash::equal):
        * jit/RegisterSet.h:
        (): Deleted.
        (JSC::RegisterSet::isEmptyValue const): Deleted.
        (JSC::RegisterSet::isDeletedValue const): Deleted.
        (JSC::RegisterSetHash::hash): Deleted.
        (JSC::RegisterSetHash::equal): Deleted.

2021-06-16  Tadeu Zagallo  <tzagallo@apple.com>

        AssemblyHelpers should save/restore callee save FPRs
        https://bugs.webkit.org/show_bug.cgi?id=227052
        <rdar://77080162>

        Reviewed by Mark Lam.

        We have 3 functions in AssemblyHelpers to save and restore callee save registers that were filtering
        out any FPRs. This is an issue since we do have callee save FPRs in arm64 and these functions can be
        called from the FTL, and FTL uses those callee saves. The test case shows how that's an issue with tail
        calls on FTL: the callee saves are correctly stored in the prologue and restored in the epilogue, but
        when emitting a tail call we use AssemblyHelpers::emitRestoreCalleeSaves to restore the callee saves,
        which doesn't restore FPRs. This results in the callee save FPRs being trashed. To fix this we just need
        to stop filtering out the FPRs, if they are listed as used by the code block they should be saved/restored
        accordingly. I also changed DFGOSREntry to stop filtering out the callee save FPRs and instead assert
        there aren't any, since they aren't currently used in the DFG, but it could help avoid the same issue in
        the future.

        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::emitSaveCalleeSavesFor):
        (JSC::AssemblyHelpers::emitSaveOrCopyCalleeSavesFor):
        (JSC::AssemblyHelpers::emitRestoreCalleeSavesFor):

2021-06-16  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r278846.
        https://bugs.webkit.org/show_bug.cgi?id=227060

        Speculative revert based on failure history of Speedometer2

        Reverted changeset:

        "Add Air opcode sub32/64(Reg, Imm, Reg) form for ARM64 and
        select this instruction in Air"
        https://bugs.webkit.org/show_bug.cgi?id=226937
        https://trac.webkit.org/changeset/278846

2021-06-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Optimize JSON.parse with small content by dropping single character Identifier pool
        https://bugs.webkit.org/show_bug.cgi?id=227057

        Reviewed by Sam Weinig.

        Profiler results and investigation suggest interesting things.

            1. Sampling profiler says Flight-TodoMVC is mostly JSON.parse benchmark.
            2. Each JSON data of Flight-TodoMVC is small. And JSON.parse is super frequently called.
            3. In the case of JSON.parse with small data, LiteralParser's construction / destruction costs much since
               it has large Identifier pool with std::array<>.

        As a simple first step, this patch removes single character Identifier pool from LiteralParser since
        the exact same Identifier data can be retrieved from VM's SmallStrings.

        We created a microbenchmark from Flight-TodoMVC's data, and the result is roughly 20% better.
        And we observed 0.6% improvement in Speedometer2.

                                            ToT                     Patched

            flight-todomvc-json       81.0552+-0.8403     ^     67.5756+-0.6221        ^ definitely 1.1995x faster

            ----------------------------------------------------------------------------------------------------------------------------------
            |               subtest                |     ms      |     ms      |  b / a   | pValue (significance using False Discovery Rate) |
            ----------------------------------------------------------------------------------------------------------------------------------
            | Elm-TodoMVC                          |128.991667   |128.450000   |0.995801  | 0.278228                                         |
            | VueJS-TodoMVC                        |28.487500    |27.925000    |0.980254  | 0.139315                                         |
            | EmberJS-TodoMVC                      |133.950000   |134.175000   |1.001680  | 0.685021                                         |
            | BackboneJS-TodoMVC                   |51.670833    |51.537500    |0.997420  | 0.628993                                         |
            | Preact-TodoMVC                       |21.783333    |21.754167    |0.998661  | 0.944237                                         |
            | AngularJS-TodoMVC                    |143.820833   |143.770833   |0.999652  | 0.933953                                         |
            | Vanilla-ES2015-TodoMVC               |71.608333    |71.416667    |0.997323  | 0.500591                                         |
            | Inferno-TodoMVC                      |69.179167    |69.525000    |1.004999  | 0.412406                                         |
            | Flight-TodoMVC                       |81.354167    |79.020833    |0.971319  | 0.000053 (significant)                           |
            | Angular2-TypeScript-TodoMVC          |42.654167    |41.887500    |0.982026  | 0.086053                                         |
            | VanillaJS-TodoMVC                    |57.054167    |56.633333    |0.992624  | 0.176804                                         |
            | jQuery-TodoMVC                       |274.595833   |275.670833   |1.003915  | 0.148812                                         |
            | EmberJS-Debug-TodoMVC                |358.387500   |357.595833   |0.997791  | 0.323387                                         |
            | React-TodoMVC                        |93.804167    |93.329167    |0.994936  | 0.113410                                         |
            | React-Redux-TodoMVC                  |157.954167   |157.266667   |0.995647  | 0.131298                                         |
            | Vanilla-ES2015-Babel-Webpack-TodoMVC |68.687500    |68.054167    |0.990779  | 0.002155 (significant)                           |
            ----------------------------------------------------------------------------------------------------------------------------------
            a mean = 235.28964
            b mean = 236.72163
            pValue = 0.0121265559
            (Bigger means are better.)
            1.006 times better
            Results ARE significant

        * runtime/Identifier.h:
        (JSC::Identifier::canUseSingleCharacterString):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser<CharType>::makeIdentifier):
        * runtime/LiteralParser.h:
        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::singleCharacterStringRep):
        * runtime/SmallStrings.h:

2021-06-15  Keith Miller  <keith_miller@apple.com>

        Shouldn't drain the micro task queue when calling out to ObjC
        https://bugs.webkit.org/show_bug.cgi?id=161942

        Unreviewed, relanding r278734.

        * API/tests/testapi.cpp:
        (TestAPI::promiseDrainDoesNotEatExceptions):
        (testCAPIViaCpp):
        * API/tests/testapi.mm:
        (testMicrotaskWithFunction):
        (testObjectiveCAPI):
        * runtime/JSLock.cpp:
        (JSC::JSLock::willReleaseLock):
        * runtime/ObjectPrototype.cpp:
        (JSC::isPokerBros):
        * runtime/VM.cpp:
        (JSC::VM::didExhaustMicrotaskQueue):

2021-06-15  Michael Catanzaro  <mcatanzaro@gnome.org>

        -Warray-bounds warning in Packed.h
        https://bugs.webkit.org/show_bug.cgi?id=226557
        <rdar://problem/79103658>

        Reviewed by Darin Adler.

        * b3/air/AirAllocateRegistersByGraphColoring.cpp:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):

2021-06-15  Mark Lam  <mark.lam@apple.com>

        Move setting of scratch buffer active lengths to the runtime functions.
        https://bugs.webkit.org/show_bug.cgi?id=227013
        rdar://79325068

        Reviewed by Keith Miller.

        We previously emit JIT'ed code to set and unset the ScratchBuffer active length
        around calls into C++ runtime functions.  This was needed because the runtime
        functions may allow GC to run, and GC needs to be able to scan the values stored
        in the ScratchBuffer.

        In this patch, we change it so that the runtime functions that need it will
        declare an ActiveScratchBufferScope RAII object that will set the ScratchBuffer
        active length, and unset it on exit.  This allows us to:

        1. Emit less JIT code.  The runtime function can take care of it.
        2. Elide setting the ScratchBuffer active length if not needed.  The runtime
           functions know whether they can GC or not.  They only need to set the active
           length if they can GC.

        Note that scanning of the active ScratchBuffer is done synchronously on the
        mutator thread via Heap::gatherScratchBufferRoots(), which is called as part of
        the GC conservative root scan.  This means there is no urgency / sequencing that
        requires that the active length be set before calling into the runtime function.
        Setting it in the runtime function itself is fine as long as it is done before
        the function executes any operations that can GC.

        This patch also made the following changes:

        1. Introduce ActiveScratchBufferScope RAII object used to set/unset the
           ScratchBuffer length in the runtime functions.  ActiveScratchBufferScope takes
           the active length in units of number of stack slots / Registers / JSValues
           instead of bytes.

        2. Deleted ScratchRegisterAllocator::preserveUsedRegistersToScratchBufferForCall()
           and ScratchRegisterAllocator::restoreUsedRegistersFromScratchBufferForCall().
           These functions are unused.

        The reasoning behind what values to pass to ActiveScratchBufferScope, is any:

        1. AssemblyHelpers::debugCall() in AssemblyHelpers.cpp:
           The ScratchBuffer is only used for operationDebugPrintSpeculationFailure(),
           which now declares an ActiveScratchBufferScope.

           The active length is GPRInfo::numberOfRegisters + FPRInfo::numberOfRegisters.
           See scratchSize in AssemblyHelpers::debugCall().

        2. genericGenerationThunkGenerator() in FTLThunks.cpp:
           The scratch buffer size for determining the active length is
           requiredScratchMemorySizeInBytes().  

           However, genericGenerationThunkGenerator() generates code to call either
           operationCompileFTLOSRExit() or operationCompileFTLLazySlowPath().  Both of
           these functions will DeferGCForAWhile.  Hence, GC cannot run, and we don't need
           to set the active length here.

        3. compileArrayPush() in FTLLowerDFGToB3.cpp:

           Cases Array::Int32, Array::Contiguous, or Array::Double calls
           operationArrayPushMultiple() or operationArrayPushDoubleMultiple().

           For operationArrayPushMultiple(), the active length is elementCount.  See
           computation of scratchSize.

           For operationArrayPushDoubleMultiple(), we don't need to set the active length
           because the ScratchBuffer only contains double values.  The GC does not need
           to scan those.

           Case Array::ArrayStorage calls operationArrayPushMultiple().
           The active length is elementCount.  See computation of scratchSize.

           compileNewArray() in FTLLowerDFGToB3.cpp:

           Calls operationNewArray().  Active length is m_node->numChildren(), which is
           passed to operationNewArray() as the size parameter.  See computation of
           scratchSize.

           compileNewArrayWithSpread() in FTLLowerDFGToB3.cpp:

           Calls operationNewArrayWithSpreadSlow().  Active length is m_node->numChildren(),
           which is passes to operationNewArrayWithSpreadSlow() as the numItems parameter.
           See computation of scratchSize.

        4. osrExitGenerationThunkGenerator() in DFGThunks.cpp:

           Calls operationCompileOSRExit().  Active length is GPRInfo::numberOfRegisters +
           FPRInfo::numberOfRegisters.  See computation of scratchSize.

        5. compileNewArray() in DFGSpeculativeJIT.cpp:

           Calls operationNewArray().  Active length is node->numChildren(), which is
           passed in as the size parameter.

           compileNewArrayWithSpread() in DFGSpeculativeJIT.cpp:

           Calls operationNewArrayWithSpreadSlow().  Active length is node->numChildren(),
           which is passed in as the numItems parameter.

           compileArrayPush() in DFGSpeculativeJIT.cpp:

           Calls operationArrayPushMultiple().  Active length is elementCount, which is
           passed in as the elementCount parameter.

           Calls operationArrayPushDoubleMultiple().  Active length is elementCount, but
           we don't need to set it because the ScratchBuffer only contains double values.


        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileNewArray):
        (JSC::DFG::SpeculativeJIT::compileNewArrayWithSpread):
        (JSC::DFG::SpeculativeJIT::compileArrayPush):
        * dfg/DFGThunks.cpp:
        (JSC::DFG::osrExitGenerationThunkGenerator):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileArrayPush):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArray):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::JSC_DEFINE_JIT_OPERATION):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::JSC_DEFINE_JIT_OPERATION):
        * ftl/FTLThunks.cpp:
        (JSC::FTL::genericGenerationThunkGenerator):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::debugCall):
        * jit/ScratchRegisterAllocator.cpp:
        (JSC::ScratchRegisterAllocator::preserveUsedRegistersToScratchBufferForCall): Deleted.
        (JSC::ScratchRegisterAllocator::restoreUsedRegistersFromScratchBufferForCall): Deleted.
        * jit/ScratchRegisterAllocator.h:
        * runtime/VM.h:
        * runtime/VMInlines.h:
        (JSC::ActiveScratchBufferScope::ActiveScratchBufferScope):
        (JSC::ActiveScratchBufferScope::~ActiveScratchBufferScope):

2021-06-14  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Workaround ICU uloc_addLikelySubtags / uloc_minimizeSubtags bugs
        https://bugs.webkit.org/show_bug.cgi?id=226996
        rdar://79250513

        Reviewed by Ross Kirsling.

        ICU has bugs that uloc_addLikelySubtags / uloc_minimizeSubtags cannot handle very long locale ID that exceeds ULOC_FULLNAME_CAPACITY,
        while these functions can take arbitrary sized buffer for output. This can be achieved simply by (1) attaching many unicode extensions,
        or (2) having many variants.

        In this patch, we add a workaround: if uloc_addLikelySubtags / uloc_minimizeSubtags failed, we perform them without having locale ID
        keywords part. After performing the operations, we append these keywords back.

        This is workaround, and still this workaround is not complete since we could have many variants. In that case, uloc_addLikelySubtags / uloc_minimizeSubtags
        still fails, and in that case, for now, we give up performing uloc_addLikelySubtags / uloc_minimizeSubtags. Fixing this needs to be
        done in ICU side: https://unicode-org.atlassian.net/browse/ICU-21639

        * runtime/IntlLocale.cpp:
        (JSC::IntlLocale::keywordValue const):
        (JSC::IntlLocale::maximal):
        (JSC::IntlLocale::minimal):
        (JSC::IntlLocale::baseName):

2021-06-14  Mark Lam  <mark.lam@apple.com>

        Add ldp and stp support for FP registers, plus some bug fixes.
        https://bugs.webkit.org/show_bug.cgi?id=226998
        rdar://79313717

        Reviewed by Robin Morisset.

        This patch does the following:
        1. Add ldp and stp support for FP registers.
           This simply entails providing wrappers that take FPRegisterID and passing true
           for the V bit to the underlying loadStoreRegisterPairXXX encoding function.
           V is for vector (aka floating point).  This will cause bit 26 in the instruction
           to be set indicating that it's loading / storing floating point registers.

        2. Add ARM64 disassembler support ldp and stp for FP registers.
           This includes fixing A64DOpcodeLoadStoreRegisterPair::mask to not exclude the
           FP versions of the instructions.

        3. Add ARM64Assembler query methods for determining if an immediate is encodable
           as the signed 12 bit immediate of ldp and stp instructions.

        4. Fix ldp and stp offset form to take an int instead of an unsigned.  The
           immediate it takes is a 12-bit signed int, not unsigned.

        5. In loadStoreRegisterPairXXX encoding functions used by the forms of ldp and stp,
           RELEASE_ASSERT that the passed in immediate is encodable.  Unlike ldur / stur,
           there is no form of ldp / stp that takes the offset in a register that can be
           used as a fail over.  Hence, if the immediate is not encodable, this is a
           non-recoverable event.  The client is responsible for ensuring that the offset
           is encodable.

        6. Added some testmasm tests for testing the offset form (as opposed to PreIndex
           and PostIndex forms) of ldp and stp.  We currently only use the offset form
           in our JITs.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::isValidLDPImm):
        (JSC::ARM64Assembler::isValidLDPFPImm):
        (JSC::ARM64Assembler::ldp):
        (JSC::ARM64Assembler::ldnp):
        (JSC::ARM64Assembler::isValidSTPImm):
        (JSC::ARM64Assembler::isValidSTPFPImm):
        (JSC::ARM64Assembler::stp):
        (JSC::ARM64Assembler::stnp):
        (JSC::ARM64Assembler::loadStoreRegisterPairPostIndex):
        (JSC::ARM64Assembler::loadStoreRegisterPairPreIndex):
        (JSC::ARM64Assembler::loadStoreRegisterPairOffset):
        (JSC::ARM64Assembler::loadStoreRegisterPairNonTemporal):
        * assembler/AssemblerCommon.h:
        (JSC::isValidSignedImm7):
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::loadPair64):
        (JSC::MacroAssemblerARM64::storePair64):
        * assembler/testmasm.cpp:
        (JSC::testLoadStorePair64Int64):
        (JSC::testLoadStorePair64Double):
        * disassembler/ARM64/A64DOpcode.cpp:
        (JSC::ARM64Disassembler::A64DOpcodeLoadStoreRegisterPair::format):
        * disassembler/ARM64/A64DOpcode.h:

2021-06-14  Yijia Huang  <yijia_huang@apple.com>

        Add Air opcode sub32/64(Reg, Imm, Reg) form for ARM64 and select this instruction in Air
        https://bugs.webkit.org/show_bug.cgi?id=226937

        Reviewed by Saam Barati.

        Previously, Air arm64 sub32/64 utilize sub(Imm, Tmp) at optlevel = 0 and 
        add(Tmp, -Imm) at optlevel > 0 to perform and optimize sub(Tmp, Imm, Tmp).
        The issue with this is that we were not eliding redundant operations. 

        For example:
        // B3 IR
        @0 = Trunc(ArgumentReg(0))
        @1 = Const
        @2 = Sub(@0, @1)
        @3 = Return(@2)

        // Old optimized Air IR
        // OptLevel = 0
        Move    %x0, %tmp1, @0
        Move $Const, %tmp2, @1
        Move  %tmp1, %tmp0, @2 // Redundant
        Sub  $Const, %tmp0, @2
        Move  %tmp0,   %x0, @3
        Ret32   %x0,        @3

        To remove those redundant instructions, Air arm64 sub32/64 opcode should 
        indicate a new form sub(Tmp, Imm, Tmp).

        // New optimized Air IR
        // OptLevel = 0
        Move    %x0,  %tmp1,        @0
        Move $Const,  %tmp2,        @1
        Sub   %tmp1, $Const, %tmp0, @2
        Move  %tmp0,    %x0,        @3
        Ret32   %x0,                @3

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::sub32):
        (JSC::MacroAssemblerARM64::sub64):
        * assembler/testmasm.cpp:
        (JSC::testSub32Args):
        (JSC::testSub32Imm):
        (JSC::testSub32ArgImm):
        (JSC::testSub64Imm32):
        (JSC::testSub64ArgImm32):
        (JSC::testSub64Imm64):
        (JSC::testSub64ArgImm64):
        * b3/B3ReduceStrength.cpp:
        * b3/air/AirOpcode.opcodes:
        * b3/testb3.h:
        * b3/testb3_2.cpp:
        (testSubArgs32ZeroExtend):
        * b3/testb3_3.cpp:
        (addArgTests):

2021-06-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r278734.
        https://bugs.webkit.org/show_bug.cgi?id=226973

        broke jsc testapi

        Reverted changeset:

        "Shouldn't drain the micro task queue when calling out to
        ObjC"
        https://bugs.webkit.org/show_bug.cgi?id=161942
        https://trac.webkit.org/changeset/278734

2021-06-13  Saam Barati  <sbarati@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=226576
        <rdar://problem/78810362>

        Reviewed by Yusuke Suzuki.

        ShortCircuitReadModifyResolveNode can't emit a value into
        its result until after it emits a TDZ check. We were temporarily
        storing the result of the get_from_scope into the dst. Then
        we'd emit the TDZ check. The TDZ check can throw, and it could
        lead to us returning TDZ from the eval itself. Instead, we need
        to use a temporary to emit a TDZ check on. Only after the TDZ check
        passes can we move the temporary into the result.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::ShortCircuitReadModifyResolveNode::emitBytecode):

2021-06-12  Michael Catanzaro  <mcatanzaro@gnome.org>

        -Wnonnull warning in JITCall.cpp
        https://bugs.webkit.org/show_bug.cgi?id=226643
        <rdar://problem/79197261>

        Reviewed by Darin Adler.

        This is a false-positive, so suppress it using
        IGNORE_ERRONEOUS_GCC_NULL_CHECK_WARNINGS_BEGIN.

        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):

2021-06-12  Robin Morisset  <rmorisset@apple.com>

        We should drop B3 values while running Air
        https://bugs.webkit.org/show_bug.cgi?id=226187

        Reviewed by Saam Barati.

        NB: this patch first landed as r278371, then was reverted in r278587 as it broke --dumpDisassembly().
        I fixed the bug (a missing line setDisassembler()) and am now re-landing it. Below is a copy of the original Changelog.

        We must keep the following values:
        - WasmBoundsCheck, to know whether it is Pinned or Maximum, and if it is pinned find its argument.
        - CCall/Patch/Check/CheckAdd/CheckSub/CheckMul and all of their children, because all of these are lowered to Air::Patchpoint, which needs to know the type of its arguments, and does so by looking at the children of its        origin.
        I intend to fix these in later patches if possible.

        Finally we must preserve all B3 values in the following cases:
        - if we dump the disassembly or the Air graph: because otherwise we cannot print the origins
        - if we are using the sampling profiler, because it relies on PCToCodeOriginMap which we cannot accurately fill without these origins.

        We must also keep m_tuples alive, as it is used by Patchpoints in Air to understand the types of their arguments.
        We also don't touch StackSlots (in this patch), because one of them is captured by FTL::State.

        Also now PCToOriginMap has a Vector with no inline capacity, since it is either quite large (if needed) or empty (otherwise).

        The performance impact of this is a progression on various RAMification subtests on Mac, but is more mitigated on iPhone7, with various regressions.
        I suspect these to be noise, and will monitor the performance bots post-landing to make sure of it.

        * b3/B3LowerToAir.cpp:
        (JSC::B3::lowerToAir):
        * b3/B3Procedure.cpp:
        (JSC::B3::Procedure::freeUnneededB3ValuesAfterLowering):
        * b3/B3Procedure.h:
        (JSC::B3::Procedure::releasePCToOriginMap):
        (JSC::B3::Procedure::setNeedsPCToOriginMap):
        (JSC::B3::Procedure::needsPCToOriginMap):
        * b3/B3SparseCollection.h:
        (JSC::B3::SparseCollection::clearAll):
        (JSC::B3::SparseCollection::filterAndTransfer):
        * b3/air/AirCode.cpp:
        (JSC::B3::Air::Code::Code):
        * b3/air/AirCode.h:
        (JSC::B3::Air::Code::shouldPreserveB3Origins const):
        * b3/air/AirGenerate.cpp:
        (JSC::B3::Air::generateWithAlreadyAllocatedRegisters):
        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile):
        * ftl/FTLState.cpp:
        (JSC::FTL::State::State):

2021-06-11  Patrick Angle  <pangle@apple.com>

        Web Inspector: Add instrumentation to node destruction for InspectorDOMAgent
        https://bugs.webkit.org/show_bug.cgi?id=226624

        Reviewed by Devin Rousso.

        Add new `DOM.willDestroyDOMNode` event to inform the frontend of DOM nodes that no longer exist, even if they
        weren't in the DOM tree. This work serves as a prelude to <https://webkit.org/b/189687> (Web Inspector: preserve
        DOM.NodeId if a node is removed and re-added) to eventually only forget about nodes upon destruction, instead of
        removal from the DOM tree.

        * inspector/protocol/DOM.json:

2021-06-11  Yijia Huang  <yijia_huang@apple.com>

        Air ARM64 sub32 opcode should indicate that it zero-extends its result
        https://bugs.webkit.org/show_bug.cgi?id=226849

        Reviewed by Saam Barati.

        Sub32 was previously not saying that its result is zero defined. However,
        sub32 on arm64 architectures zero defines its result, so the top 32 bits
        are zeroed. The issue with this is what we were not eliding provably
        redundant zero extend operations.

        For example:
        // B3 IR
        @0 = Trunc(ArgumentReg(0))
        @1 = Trunc(ArgumentReg(1))
        @2 = Sub(@0, @1)
        @3 = ZExt32(@2) // i64
        @4 = Return(@3) or Store(@3, @x)

        // Old optimized Air IR
        Sub32 %x0, %x1, %x0, b@2
        Move32 %x0, %x0, b@3
        Ret64 %x0, b@4 or Move %x0, (%x), b@4

        To remove that redundant zero extend instruction (Move32), Air arm64 
        sub32 opcode should indicate that it zero-extends its result.

        // New optimized Air IR
        Sub32 %x0, %x1, %x0, b@2
        Ret64 %x0, b@6 or Move %x0, (%x), b@4

        * b3/air/AirOpcode.opcodes:

2021-06-10  Keith Miller  <keith_miller@apple.com>

        Shouldn't drain the micro task queue when calling out to ObjC
        https://bugs.webkit.org/show_bug.cgi?id=161942

        Reviewed by Saam Barati.

        It looks like the issue is that we aren't checking for the
        presence of dropped locks when deciding to drain microtasks during
        JSLock::unlock. This meant that when we drop all locks when
        calling out to API clients we would drain our microtasks at that
        point. An alternative would be to pass an extra parameter to the
        unlock function that says not to drain microtasks. I chose not to
        do that since it seemed a bit less robust.

        This patch is very likely to break existing API users. So I'm adding
        a linked on or after check to protect existing Apps.

        Lastly, change our Poker Bros check to use applicationSDKVersion too
        so others trying to add a linked on or after check don't use
        the dyld function directly too.

        * API/tests/testapi.cpp:
        (TestAPI::promiseDrainDoesNotEatExceptions):
        (testCAPIViaCpp):
        * API/tests/testapi.mm:
        (testMicrotaskWithFunction):
        (testObjectiveCAPI):
        * runtime/JSLock.cpp:
        (JSC::JSLock::willReleaseLock):
        * runtime/ObjectPrototype.cpp:
        (JSC::isPokerBros):
        * runtime/VM.cpp:
        (JSC::VM::didExhaustMicrotaskQueue):

2021-06-10  Mark Lam  <mark.lam@apple.com>

        Another speculative build fix for Win32.
        https://bugs.webkit.org/show_bug.cgi?id=226880
        rdar://79124858

        Reviewed by Keith Miller.

        We're getting reports of "warning C4206: nonstandard extension used: translation
        unit is empty" turning into a build error on Win32 ports.  By design, we rely on
        #define flags to make some translation units empty.  Hence, we don't want this
        warning to turn into an error.

        * config.h:

2021-06-10  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove useDataICInOptimizingJIT option
        https://bugs.webkit.org/show_bug.cgi?id=226862

        Reviewed by Mark Lam.

        Originally this option is added to fix performance problem when using DataIC in DFG / FTL.
        But it turned out that that performance regression was caused due to disablement of InlineAccess when
        using DataIC. With the configuration using DataIC and InlineAccess, we do not observe performance regression.
        So, let's just drop this option.

        * jit/JITCode.h:
        (JSC::JITCode::useDataIC):
        * runtime/Options.cpp:
        (JSC::Options::recomputeDependentOptions):
        * runtime/OptionsList.h:

2021-06-10  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, early May 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=226763

        Unreviewed non-unified build fixes.

        * bytecode/InlineAccess.h: Add missing forward declaration for the CodeBlock type.
        * jit/JITInlineCacheGenerator.cpp: Add missing CCallHelpers.h header.
        * runtime/Intrinsic.h: Add missing <optional> header.
        * yarr/YarrUnicodeProperties.h: Ditto.

2021-06-10  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Ignore Intl.NumberFormat feature options when linked-ICU is old
        https://bugs.webkit.org/show_bug.cgi?id=226861
        rdar://77393100

        Reviewed by Ross Kirsling.

        Let's just ignore the option when Intl.NumberFormat features cannot be implemented since the linked ICU is old.
        There is no way not to expose these features since Intl.NumberFormat's these changes are additional ones and Intl.NumberFormat existed before.

        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::initializeNumberFormat):

2021-06-09  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Rename *ByIdVariant to *ByVariant and *ByKind::Normal to *ByKind::ById
        https://bugs.webkit.org/show_bug.cgi?id=226750

        Reviewed by Yusuke Suzuki.

        Cleanup patch following r278445.

        1. {Get, Delete, In}ByStatus (but not `Put`) have had `Id` removed from their names; likewise, remove `Id`
           from the names of {Get, Delete, In}ByIdVariant. These are used *before* ByVal has been converted to ById.

        2. The {Get, Del, In}ByKind enum classes shouldn't really call ById `Normal` -- let's say `ById` explicitly.

        3. Bonus: In DFGBytecodeParser, move some *Status::computeFor calls inside the conditional that uses them.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/DeleteByStatus.cpp:
        (JSC::DeleteByStatus::appendVariant):
        (JSC::DeleteByStatus::computeForStubInfoWithoutExitSiteFeedback):
        (JSC::DeleteByStatus::visitAggregateImpl):
        (JSC::DeleteByStatus::markIfCheap):
        * bytecode/DeleteByStatus.h:
        * bytecode/DeleteByVariant.cpp: Renamed from Source/JavaScriptCore/bytecode/DeleteByIdVariant.cpp.
        (JSC::DeleteByVariant::DeleteByVariant):
        (JSC::DeleteByVariant::~DeleteByVariant):
        (JSC::DeleteByVariant::operator=):
        (JSC::DeleteByVariant::attemptToMerge):
        (JSC::DeleteByVariant::writesStructures const):
        (JSC::DeleteByVariant::visitAggregateImpl):
        (JSC::DeleteByVariant::markIfCheap):
        (JSC::DeleteByVariant::dump const):
        (JSC::DeleteByVariant::finalize):
        (JSC::DeleteByVariant::dumpInContext const):
        * bytecode/DeleteByVariant.h: Renamed from Source/JavaScriptCore/bytecode/DeleteByIdVariant.h.
        (JSC::DeleteByVariant::overlaps):
        * bytecode/GetByStatus.cpp:
        (JSC::GetByStatus::appendVariant):
        (JSC::GetByStatus::computeFromLLInt):
        (JSC::GetByStatus::computeForStubInfoWithoutExitSiteFeedback):
        (JSC::GetByStatus::computeFor):
        (JSC::GetByStatus::merge):
        (JSC::GetByStatus::visitAggregateImpl):
        (JSC::GetByStatus::markIfCheap):
        (JSC::GetByStatus::finalize):
        * bytecode/GetByStatus.h:
        * bytecode/GetByVariant.cpp: Renamed from Source/JavaScriptCore/bytecode/GetByIdVariant.cpp.
        (JSC::GetByVariant::GetByVariant):
        (JSC::GetByVariant::~GetByVariant):
        (JSC::GetByVariant::operator=):
        (JSC::GetByVariant::canMergeIntrinsicStructures const):
        (JSC::GetByVariant::attemptToMerge):
        (JSC::GetByVariant::visitAggregateImpl):
        (JSC::GetByVariant::markIfCheap):
        (JSC::GetByVariant::finalize):
        (JSC::GetByVariant::dump const):
        (JSC::GetByVariant::dumpInContext const):
        * bytecode/GetByVariant.h: Renamed from Source/JavaScriptCore/bytecode/GetByIdVariant.h.
        (JSC::GetByVariant::overlaps):
        * bytecode/InByStatus.cpp:
        (JSC::InByStatus::appendVariant):
        (JSC::InByStatus::computeForStubInfoWithoutExitSiteFeedback):
        (JSC::InByStatus::merge):
        (JSC::InByStatus::markIfCheap):
        (JSC::InByStatus::finalize):
        * bytecode/InByStatus.h:
        * bytecode/InByVariant.cpp: Renamed from Source/JavaScriptCore/bytecode/InByIdVariant.cpp.
        (JSC::InByVariant::InByVariant):
        (JSC::InByVariant::attemptToMerge):
        (JSC::InByVariant::markIfCheap):
        (JSC::InByVariant::finalize):
        (JSC::InByVariant::dump const):
        (JSC::InByVariant::dumpInContext const):
        * bytecode/InByVariant.h: Renamed from Source/JavaScriptCore/bytecode/InByIdVariant.h.
        (JSC::InByVariant::overlaps):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::reset):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicGetter):
        (JSC::DFG::ByteCodeParser::handleDOMJITGetter):
        (JSC::DFG::ByteCodeParser::handleGetById):
        (JSC::DFG::ByteCodeParser::handleGetPrivateNameById):
        (JSC::DFG::ByteCodeParser::handleDeleteById):
        (JSC::DFG::ByteCodeParser::handleInById):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        (JSC::DFG::ConstantFoldingPhase::emitGetByOffset):
        (JSC::DFG::ConstantFoldingPhase::emitDeleteByOffset):
        * dfg/DFGNode.h:
        * dfg/DFGValidate.cpp:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileDelBy):
        (JSC::FTL::DFG::LowerDFGToB3::compileDeleteById):
        (JSC::FTL::DFG::LowerDFGToB3::compileDeleteByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileMultiDeleteByOffset):
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jit/Repatch.cpp:
        (JSC::appropriateOptimizingGetByFunction):
        (JSC::appropriateGetByFunction):
        (JSC::tryCacheGetBy):
        (JSC::repatchDeleteBy):
        (JSC::tryCacheInBy):
        (JSC::repatchInBy):
        (JSC::resetGetBy):
        (JSC::resetDelBy):
        (JSC::resetInBy):
        * jit/Repatch.h:

2021-06-09  Fujii Hironori  <Hironori.Fujii@sony.com>

        clang-cl: JIT.h(966,67): error: no viable conversion from 'JSC::AbstractMacroAssembler<JSC::X86Assembler>::Address' to 'FunctionPtr<CFunctionPtrTag>'
        https://bugs.webkit.org/show_bug.cgi?id=226850

        Reviewed by Yusuke Suzuki.

        WinCairo clang-cl builds got broken since r278656 (Bug 226072).

        * jit/JIT.h: Use the common callOperation(Address, Args...) for
        x64 Windows. Added static_assert to check the return type.

2021-06-09  Mark Lam  <mark.lam@apple.com>

        Speculative build fix for Win32.
        https://bugs.webkit.org/show_bug.cgi?id=226793
        rdar://79032803

        Reviewed by Saam Barati.

        * API/JSCallbackObject.h:

2021-06-09  Xan Lopez  <xan@igalia.com>

        [JSC] Fix incorrect register reuse in 32bit after r278568
        https://bugs.webkit.org/show_bug.cgi?id=226817

        Reviewed by Caio Araujo Neponoceno de Lima.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileNotDoubleNeitherDoubleNorHeapBigIntNorStringStrictEquality):
        The JSVALUE32_64 branch potentially needs both the tag and payload
        registers for both left/right nodes, so we cannot reuse any of
        them for the result since the first thing the code does is set it
        zero. Just remove the Reuse construction.

2021-06-09  Mikhail R. Gadelha  <mikhail@igalia.com>

        Fix inadvertent tag corruption in functionAddressOf
        https://bugs.webkit.org/show_bug.cgi?id=226503

        Reviewed by Darin Adler.

        Original patch by Angelos Oikonomopoulos.

        The cast was sign-extending the JSValue address in 32 bits, so that addresses
        that had the most significant set gave us a sign-extended result in
        asNumber which was then converted to an invalid NaN by the bitcast.

        Instead, cast the address to uintptr_t, and the result will be promoted
        uint64_t without sign-extending the address.

        * jsc.cpp:
        (JSC_DEFINE_HOST_FUNCTION):

2021-06-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use DataIC for AccessCase
        https://bugs.webkit.org/show_bug.cgi?id=226072

        Reviewed by Saam Barati and Filip Pizlo.

        This patch adds non-repatching IC for Baseline JIT in ARM64.
        This does not work in non-ARM64 architectures (including X64) due to the use of link-register.

        1. We add non-repatching IC, which is enabled only in Baseline due to performance reason. We are using the
           existing IC in DFG and FTL. Non-repatching includes fast-path, and slow-path's operation function.
        2. We still keep InlineAccess in all tiers. Removing that causes 0.3 ~ 1.0% regression in Speedometer2. This
           means that we still need some repatching when we first introduce stubs.
        3. We add a mechanism to share generated code stubs in non-repatching IC. Currently, getter / setter / custom
           accessors are excluded since their code relies on JSGlobalObject, CodeBlock etc. which are not included in
           AccessCase's data structure.
        4. This patch still relies on that CodeBlock will be destroyed synchronously since we need to ensure that sharing-hash-table
           does not include already-dead JIT code stubs. We can fix it (e.g. annotating epoch to these stubs, bump them in
           finalizeUnconditionally), but we avoid doing that to prevent from further enlarging this patch. This patch is already
           significant in its size.
        5. Added callOperation(Address) support in CCallHelpers, which can save the target in nonArgGPR0, and call it so that we can use
           Address including GPR which is also used for arguments.

        Performance is neutral in JetStream2 and Speedometer2. But it offers the way to remove some code generation in Baseline.

        * assembler/MacroAssemblerARM64E.h:
        (JSC::MacroAssemblerARM64E::call):
        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::create):
        (JSC::AccessCase::createTransition):
        (JSC::AccessCase::createDelete):
        (JSC::AccessCase::createCheckPrivateBrand):
        (JSC::AccessCase::createSetPrivateBrand):
        (JSC::AccessCase::fromStructureStubInfo):
        (JSC::AccessCase::clone const):
        (JSC::AccessCase::generateWithGuard):
        (JSC::AccessCase::generateImpl):
        (JSC::AccessCase::canBeShared):
        * bytecode/AccessCase.h:
        (JSC::AccessCase::hash const):
        (JSC::AccessCase::AccessCase):
        (JSC::SharedJITStubSet::Hash::Key::Key):
        (JSC::SharedJITStubSet::Hash::Key::isHashTableDeletedValue const):
        (JSC::SharedJITStubSet::Hash::Key::operator==):
        (JSC::SharedJITStubSet::Hash::hash):
        (JSC::SharedJITStubSet::Hash::equal):
        (JSC::SharedJITStubSet::Searcher::Translator::hash):
        (JSC::SharedJITStubSet::Searcher::Translator::equal):
        (JSC::SharedJITStubSet::PointerTranslator::hash):
        (JSC::SharedJITStubSet::PointerTranslator::equal):
        (JSC::SharedJITStubSet::add):
        (JSC::SharedJITStubSet::remove):
        (JSC::SharedJITStubSet::find):
        * bytecode/ByValInfo.h:
        (JSC::ByValInfo::setUp):
        (JSC::ByValInfo::offsetOfSlowOperation):
        (JSC::ByValInfo::offsetOfNotIndexJumpTarget):
        (JSC::ByValInfo::offsetOfBadTypeJumpTarget):
        * bytecode/CallLinkInfo.cpp:
        (JSC::CallLinkInfo::initializeDirectCall):
        (JSC::CallLinkInfo::setDirectCallTarget):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::useDataIC const):
        * bytecode/GetterSetterAccessCase.cpp:
        (JSC::GetterSetterAccessCase::create):
        (JSC::GetterSetterAccessCase::clone const):
        (JSC::GetterSetterAccessCase::emitDOMJITGetter):
        * bytecode/GetterSetterAccessCase.h:
        * bytecode/InlineAccess.cpp:
        (JSC::getScratchRegister):
        (JSC::InlineAccess::rewireStubAsJumpInAccessNotUsingInlineAccess):
        (JSC::InlineAccess::rewireStubAsJumpInAccess):
        (JSC::InlineAccess::resetStubAsJumpInAccess):
        (JSC::InlineAccess::resetStubAsJumpInAccessNotUsingInlineAccess):
        (JSC::InlineAccess::rewireStubAsJump): Deleted.
        * bytecode/InlineAccess.h:
        * bytecode/InstanceOfAccessCase.cpp:
        (JSC::InstanceOfAccessCase::create):
        (JSC::InstanceOfAccessCase::clone const):
        * bytecode/InstanceOfAccessCase.h:
        * bytecode/IntrinsicGetterAccessCase.cpp:
        (JSC::IntrinsicGetterAccessCase::create):
        (JSC::IntrinsicGetterAccessCase::clone const):
        * bytecode/IntrinsicGetterAccessCase.h:
        * bytecode/ModuleNamespaceAccessCase.cpp:
        (JSC::ModuleNamespaceAccessCase::create):
        (JSC::ModuleNamespaceAccessCase::clone const):
        * bytecode/ModuleNamespaceAccessCase.h:
        * bytecode/ObjectPropertyConditionSet.h:
        (JSC::ObjectPropertyConditionSet::hash const):
        (JSC::ObjectPropertyConditionSet::operator==):
        (JSC::ObjectPropertyConditionSet::operator!=):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessGenerationState::installWatchpoint):
        (JSC::AccessGenerationState::succeed):
        (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions):
        (JSC::PolymorphicAccess::addCases):
        (JSC::PolymorphicAccess::addCase):
        (JSC::PolymorphicAccess::visitWeak const):
        (JSC::PolymorphicAccess::regenerate):
        * bytecode/PolymorphicAccess.h:
        (JSC::AccessGenerationState::AccessGenerationState):
        (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions):
        * bytecode/ProxyableAccessCase.cpp:
        (JSC::ProxyableAccessCase::create):
        (JSC::ProxyableAccessCase::clone const):
        * bytecode/ProxyableAccessCase.h:
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::StructureStubInfo):
        (JSC::StructureStubInfo::addAccessCase):
        (JSC::StructureStubInfo::reset):
        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::offsetOfCodePtr):
        (JSC::StructureStubInfo::offsetOfSlowPathStartLocation):
        (JSC::StructureStubInfo::offsetOfSlowOperation):
        (JSC::StructureStubInfo::patchableJump): Deleted.
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::appendCall):
        * dfg/DFGSlowPathGenerator.h:
        (JSC::DFG::slowPathICCall):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetById):
        (JSC::DFG::SpeculativeJIT::compileGetByIdFlush):
        (JSC::DFG::SpeculativeJIT::compileDeleteById):
        (JSC::DFG::SpeculativeJIT::compileDeleteByVal):
        (JSC::DFG::SpeculativeJIT::compileInById):
        (JSC::DFG::SpeculativeJIT::compileInByVal):
        (JSC::DFG::SpeculativeJIT::compileGetPrivateNameByVal):
        (JSC::DFG::SpeculativeJIT::compileGetPrivateNameById):
        (JSC::DFG::SpeculativeJIT::compilePutPrivateNameById):
        (JSC::DFG::SpeculativeJIT::compileCheckPrivateBrand):
        (JSC::DFG::SpeculativeJIT::compileSetPrivateBrand):
        (JSC::DFG::SpeculativeJIT::compileInstanceOfForCells):
        (JSC::DFG::SpeculativeJIT::compileInstanceOf):
        (JSC::DFG::SpeculativeJIT::compilePutByIdFlush):
        (JSC::DFG::SpeculativeJIT::compilePutById):
        (JSC::DFG::SpeculativeJIT::compilePutByIdDirect):
        (JSC::DFG::SpeculativeJIT::cachedPutById):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        (JSC::DFG::SpeculativeJIT::appendCall):
        (JSC::DFG::SpeculativeJIT::appendCallSetResult):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetById):
        (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetById):
        (JSC::DFG::SpeculativeJIT::cachedGetByIdWithThis):
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::getPrivateName):
        (JSC::FTL::DFG::LowerDFGToB3::compilePrivateBrandAccess):
        (JSC::FTL::DFG::LowerDFGToB3::cachedPutById):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileDelBy):
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        * ftl/FTLSlowPathCall.cpp:
        (JSC::FTL::SlowPathCallContext::SlowPathCallContext):
        (JSC::FTL::SlowPathCallContext::keyWithTarget const):
        (JSC::FTL::SlowPathCallContext::makeCall):
        * ftl/FTLSlowPathCall.h:
        (JSC::FTL::callOperation):
        * ftl/FTLSlowPathCallKey.cpp:
        (JSC::FTL::SlowPathCallKey::dump const):
        * ftl/FTLSlowPathCallKey.h:
        (JSC::FTL::SlowPathCallKey::SlowPathCallKey):
        (JSC::FTL::SlowPathCallKey::indirectOffset const):
        (JSC::FTL::SlowPathCallKey::withCallTarget):
        (JSC::FTL::SlowPathCallKey::operator== const):
        (JSC::FTL::SlowPathCallKey::hash const):
        * ftl/FTLThunks.cpp:
        (JSC::FTL::genericGenerationThunkGenerator):
        (JSC::FTL::slowPathCallThunkGenerator):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitVirtualCall):
        * jit/CCallHelpers.cpp:
        (JSC::CCallHelpers::emitJITCodeOver):
        * jit/CCallHelpers.h:
        (JSC::CCallHelpers::ArgCollection::ArgCollection):
        (JSC::CCallHelpers::ArgCollection::pushRegArg):
        (JSC::CCallHelpers::ArgCollection::pushExtraRegArg):
        (JSC::CCallHelpers::ArgCollection::pushNonArg):
        (JSC::CCallHelpers::ArgCollection::addGPRArg):
        (JSC::CCallHelpers::ArgCollection::addGPRExtraArg):
        (JSC::CCallHelpers::ArgCollection::addStackArg):
        (JSC::CCallHelpers::ArgCollection::addPoke):
        (JSC::CCallHelpers::calculatePokeOffset):
        (JSC::CCallHelpers::pokeForArgument):
        (JSC::CCallHelpers::stackAligned):
        (JSC::CCallHelpers::marshallArgumentRegister):
        (JSC::CCallHelpers::setupArgumentsImpl):
        (JSC::CCallHelpers::pokeArgumentsAligned):
        (JSC::CCallHelpers::std::is_integral<CURRENT_ARGUMENT_TYPE>::value):
        (JSC::CCallHelpers::std::is_pointer<CURRENT_ARGUMENT_TYPE>::value):
        (JSC::CCallHelpers::setupArgumentsEntryImpl):
        (JSC::CCallHelpers::setupArguments):
        (JSC::CCallHelpers::setupArgumentsForIndirectCall):
        * jit/GCAwareJITStubRoutine.cpp:
        (JSC::GCAwareJITStubRoutine::GCAwareJITStubRoutine):
        (JSC::GCAwareJITStubRoutine::makeGCAware):
        (JSC::GCAwareJITStubRoutine::observeZeroRefCount):
        (JSC::PolymorphicAccessJITStubRoutine::PolymorphicAccessJITStubRoutine):
        (JSC::PolymorphicAccessJITStubRoutine::observeZeroRefCount):
        (JSC::PolymorphicAccessJITStubRoutine::computeHash):
        (JSC::MarkingGCAwareJITStubRoutine::MarkingGCAwareJITStubRoutine):
        (JSC::GCAwareJITStubRoutineWithExceptionHandler::GCAwareJITStubRoutineWithExceptionHandler):
        (JSC::createICJITStubRoutine):
        (JSC::createJITStubRoutine): Deleted.
        * jit/GCAwareJITStubRoutine.h:
        (JSC::GCAwareJITStubRoutine::create):
        (JSC::PolymorphicAccessJITStubRoutine::cases const):
        (JSC::PolymorphicAccessJITStubRoutine::weakStructures const):
        (JSC::PolymorphicAccessJITStubRoutine::hash const):
        * jit/GPRInfo.h:
        * jit/JIT.cpp:
        (JSC::JIT::link):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::emit_op_iterator_open):
        (JSC::JIT::emitSlow_op_iterator_open):
        (JSC::JIT::emit_op_iterator_next):
        (JSC::JIT::emitSlow_op_iterator_next):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::emit_op_iterator_open):
        (JSC::JIT::emit_op_iterator_next):
        * jit/JITCode.h:
        (JSC::JITCode::useDataIC):
        * jit/JITInlineCacheGenerator.cpp:
        (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator):
        (JSC::JITInlineCacheGenerator::finalize):
        (JSC::JITByIdGenerator::JITByIdGenerator):
        (JSC::JITByIdGenerator::finalize):
        (JSC::JITByIdGenerator::generateFastCommon):
        (JSC::JITGetByIdGenerator::JITGetByIdGenerator):
        (JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator):
        (JSC::JITPutByIdGenerator::JITPutByIdGenerator):
        (JSC::JITDelByValGenerator::JITDelByValGenerator):
        (JSC::JITDelByValGenerator::generateFastPath):
        (JSC::JITDelByValGenerator::finalize):
        (JSC::JITDelByIdGenerator::JITDelByIdGenerator):
        (JSC::JITDelByIdGenerator::generateFastPath):
        (JSC::JITDelByIdGenerator::finalize):
        (JSC::JITInByValGenerator::JITInByValGenerator):
        (JSC::JITInByValGenerator::generateFastPath):
        (JSC::JITInByValGenerator::finalize):
        (JSC::JITInByIdGenerator::JITInByIdGenerator):
        (JSC::JITInstanceOfGenerator::JITInstanceOfGenerator):
        (JSC::JITInstanceOfGenerator::generateFastPath):
        (JSC::JITInstanceOfGenerator::finalize):
        (JSC::JITGetByValGenerator::JITGetByValGenerator):
        (JSC::JITGetByValGenerator::generateFastPath):
        (JSC::JITGetByValGenerator::finalize):
        (JSC::JITPrivateBrandAccessGenerator::JITPrivateBrandAccessGenerator):
        (JSC::JITPrivateBrandAccessGenerator::generateFastPath):
        (JSC::JITPrivateBrandAccessGenerator::finalize):
        * jit/JITInlineCacheGenerator.h:
        (JSC::JITGetByIdGenerator::JITGetByIdGenerator): Deleted.
        (JSC::JITGetByIdWithThisGenerator::JITGetByIdWithThisGenerator): Deleted.
        (JSC::JITPutByIdGenerator::JITPutByIdGenerator): Deleted.
        (JSC::JITDelByValGenerator::JITDelByValGenerator): Deleted.
        (JSC::JITDelByValGenerator::slowPathJump const): Deleted.
        (JSC::JITDelByIdGenerator::JITDelByIdGenerator): Deleted.
        (JSC::JITDelByIdGenerator::slowPathJump const): Deleted.
        (JSC::JITInByIdGenerator::JITInByIdGenerator): Deleted.
        (JSC::JITInstanceOfGenerator::JITInstanceOfGenerator): Deleted.
        (JSC::JITGetByValGenerator::JITGetByValGenerator): Deleted.
        (JSC::JITGetByValGenerator::slowPathJump const): Deleted.
        (JSC::JITPrivateBrandAccessGenerator::JITPrivateBrandAccessGenerator): Deleted.
        (JSC::JITPrivateBrandAccessGenerator::slowPathJump const): Deleted.
        * jit/JITInlines.h:
        (JSC::JIT::emitLoadForArrayMode):
        (JSC::JIT::appendCallWithExceptionCheck):
        (JSC::JIT::appendCallWithExceptionCheckSetJSValueResult):
        (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emitSlow_op_instanceof):
        (JSC::JIT::privateCompileHasIndexedProperty):
        (JSC::JIT::emit_op_has_enumerable_indexed_property):
        (JSC::JIT::emitSlow_op_has_enumerable_indexed_property):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::privateCompileHasIndexedProperty):
        (JSC::JIT::emit_op_has_enumerable_indexed_property):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::slow_op_get_by_val_prepareCallGenerator):
        (JSC::JIT::emit_op_get_private_name):
        (JSC::JIT::emitSlow_op_get_private_name):
        (JSC::JIT::slow_op_get_private_name_prepareCallGenerator):
        (JSC::JIT::emit_op_set_private_brand):
        (JSC::JIT::emitSlow_op_set_private_brand):
        (JSC::JIT::emit_op_check_private_brand):
        (JSC::JIT::emitSlow_op_check_private_brand):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitGenericContiguousPutByVal):
        (JSC::JIT::emitArrayStoragePutByVal):
        (JSC::JIT::emitPutByValWithCachedId):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::slow_op_put_by_val_prepareCallGenerator):
        (JSC::JIT::emit_op_put_private_name):
        (JSC::JIT::emitSlow_op_put_private_name):
        (JSC::JIT::slow_op_put_private_name_prepareCallGenerator):
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emitSlow_op_del_by_id):
        (JSC::JIT::slow_op_del_by_id_prepareCallGenerator):
        (JSC::JIT::emit_op_del_by_val):
        (JSC::JIT::emitSlow_op_del_by_val):
        (JSC::JIT::slow_op_del_by_val_prepareCallGenerator):
        (JSC::JIT::emit_op_try_get_by_id):
        (JSC::JIT::emitSlow_op_try_get_by_id):
        (JSC::JIT::emit_op_get_by_id_direct):
        (JSC::JIT::emitSlow_op_get_by_id_direct):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::slow_op_get_by_id_prepareCallGenerator):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        (JSC::JIT::slow_op_get_by_id_with_this_prepareCallGenerator):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::slow_op_put_by_id_prepareCallGenerator):
        (JSC::JIT::emit_op_in_by_id):
        (JSC::JIT::emitSlow_op_in_by_id):
        (JSC::JIT::emit_op_in_by_val):
        (JSC::JIT::emitSlow_op_in_by_val):
        (JSC::JIT::privateCompilePutByVal):
        (JSC::JIT::privateCompilePutPrivateNameWithCachedId):
        (JSC::JIT::privateCompilePutByValWithCachedId):
        (JSC::JIT::emitDoubleLoad):
        (JSC::JIT::emitContiguousLoad):
        (JSC::JIT::emitArrayStorageLoad):
        (JSC::JIT::emitIntTypedArrayPutByVal):
        (JSC::JIT::emitFloatTypedArrayPutByVal):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emit_op_del_by_val):
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_get_private_name):
        (JSC::JIT::emit_op_set_private_brand):
        (JSC::JIT::emit_op_check_private_brand):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emitGenericContiguousPutByVal):
        (JSC::JIT::emitArrayStoragePutByVal):
        (JSC::JIT::emit_op_try_get_by_id):
        (JSC::JIT::emit_op_get_by_id_direct):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emit_op_in_by_id):
        (JSC::JIT::emit_op_in_by_val):
        * jit/JITStubRoutine.h:
        * jit/PolymorphicCallStubRoutine.cpp:
        (JSC::PolymorphicCallStubRoutine::PolymorphicCallStubRoutine):
        * jit/Repatch.cpp:
        (JSC::readPutICCallTarget):
        (JSC::repatchSlowPathCall):
        (JSC::tryCacheGetBy):
        (JSC::repatchGetBy):
        (JSC::tryCacheArrayGetByVal):
        (JSC::repatchArrayGetByVal):
        (JSC::tryCachePutByID):
        (JSC::repatchPutByID):
        (JSC::tryCacheDeleteBy):
        (JSC::repatchDeleteBy):
        (JSC::tryCacheInBy):
        (JSC::repatchInBy):
        (JSC::tryCacheCheckPrivateBrand):
        (JSC::repatchCheckPrivateBrand):
        (JSC::tryCacheSetPrivateBrand):
        (JSC::repatchSetPrivateBrand):
        (JSC::tryCacheInstanceOf):
        (JSC::repatchInstanceOf):
        (JSC::linkSlowFor):
        (JSC::linkVirtualFor):
        (JSC::resetGetBy):
        (JSC::resetPutByID):
        (JSC::resetDelBy):
        (JSC::resetInBy):
        (JSC::resetInstanceOf):
        (JSC::resetCheckPrivateBrand):
        (JSC::resetSetPrivateBrand):
        (JSC::resetPatchableJump): Deleted.
        * jit/Repatch.h:
        * runtime/Options.cpp:
        (JSC::Options::recomputeDependentOptions):
        * runtime/OptionsList.h:
        * runtime/StructureIDTable.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        (JSC::VM::~VM):
        * runtime/VM.h:

2021-06-08  Robin Morisset  <rmorisset@apple.com>

        Fix speculated type in speculateNeitherDoubleNorHeapBigIntNorString
        https://bugs.webkit.org/show_bug.cgi?id=226786

        Reviewed by Mark Lam.

        I had forgotten the HeapBigInt part.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::speculateNeitherDoubleNorHeapBigIntNorString):

2021-06-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use ResolvedClosureVar to get brand from scope
        https://bugs.webkit.org/show_bug.cgi?id=226677
        rdar://78802869

        Reviewed by Saam Barati.

        Private brand lookup is doing wrong way to get scope.

            1. op_resolve_scope with private name (e.g. #x)
            2. then, doing op_get_from_scope with (1)'s scope with different name (e.g. @privateBrand)

        This is wrong in JSC. We resolve scope at link-time in CodeBlock. So we need to ensure that both op_resolve_scope and op_get_from_scope
        starts with the current scope-register. As a result, private-brand lookup is broken right now. Let's see the buggy case.

            class D {
              #x() {}
              m() {
                class C {
                  #yy;
                  #z() { }
                  a() {
                    this.#x(); // <===== This point.
                  }
                }
                let c = new C();
                c.a();
              }
            }

        In the above point, we first lookup the scope with #x, and we get the D's class-scope. But our get_from_scope is using privateBrand, and
        privateBrand property exists too in C's class-scope too since C also has #yy and #z. As a result, CodeBlock linking configures the offset for
        C's class-scope in get_from_scope. And this offset is different from D's class-scope's privateBrand.

        Only allowed case for the above usage is ResolvedClosureVar. And generatorification uses it too. In this patch,

        1. We ensure that class-scope (with private name) must have @privateBrand and @privateClassBrand with offset 1 and 0.
        2. Use ResolvedClosureVar with the above pre-defined offset

        Since CodeBlock's linking does not resolve the scope for get_from_scope if it is ResolvedClosureVar, we can just perform the desired ResolvedClosureVar lookup
        with the given scope with the compiled offset.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::instantiateLexicalVariables):
        (JSC::BytecodeGenerator::pushLexicalScope):
        (JSC::BytecodeGenerator::pushLexicalScopeInternal):
        (JSC::BytecodeGenerator::emitCreatePrivateBrand):
        (JSC::BytecodeGenerator::emitGetPrivateBrand):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::BaseDotNode::emitGetPropertyValue):
        (JSC::BaseDotNode::emitPutProperty):
        (JSC::PostfixNode::emitDot):
        (JSC::PrefixNode::emitDot):
        (JSC::InNode::emitBytecode):
        (JSC::BlockNode::emitBytecode):
        (JSC::ForNode::emitBytecode):
        (JSC::ForInNode::emitBytecode):
        (JSC::ForOfNode::emitBytecode):
        (JSC::SwitchNode::emitBytecode):
        (JSC::ClassExprNode::emitBytecode):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseClass):
        * parser/VariableEnvironment.h:

2021-06-07  Alexey Shvayka  <shvaikalesh@gmail.com>

        Unreviewed, reland r276592 with a fix for put() override in prototype chain of a JSProxy
        https://bugs.webkit.org/show_bug.cgi?id=226185

        The API test added in r278366 revealed a flaw in JSObject::definePropertyOnReceiver()
        that caused putDirectInternal() to be performed on a JSProxy instead of it's target.
        Remedies that via a type check, ensuring the test and iOS apps are functional.

        The issue was originally missed because the prototype chain of a global object is immutable
        and none of the global object's prototypes override put(). OpaqueJSClass::prototype() sets
        the [[Prototype]] directly, ignoring the IsImmutablePrototypeExoticObject type info flag.

        Also, excludes an invariant from the original patch that required put() to be overriden
        when implementing custom [[DefineOwnProperty]]. It is now broken by WindowProperties object.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::put):
        * API/tests/testapiScripts/testapi.js:
        * debugger/DebuggerScope.h:
        * runtime/ClassInfo.h:
        * runtime/ClonedArguments.h:
        * runtime/CustomGetterSetter.cpp:
        (JSC::callCustomSetter): Deleted.
        * runtime/CustomGetterSetter.h:
        * runtime/ErrorConstructor.h:
        * runtime/ErrorInstance.h:
        * runtime/GenericArguments.h:
        * runtime/GenericArgumentsInlines.h:
        (JSC::GenericArguments<Type>::put):
        * runtime/GetterSetter.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::put):
        * runtime/JSArray.h:
        * runtime/JSArrayBufferView.cpp:
        (JSC::JSArrayBufferView::put): Deleted.
        * runtime/JSArrayBufferView.h:
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::putToPrimitive):
        * runtime/JSCell.cpp:
        (JSC::JSCell::doPutPropertySecurityCheck): Deleted.
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::put):
        * runtime/JSFunction.h:
        * runtime/JSGenericTypedArrayView.h:
        * runtime/JSGlobalLexicalEnvironment.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::put):
        * runtime/JSGlobalObject.h:
        * runtime/JSLexicalEnvironment.h:
        * runtime/JSModuleEnvironment.h:
        * runtime/JSModuleNamespaceObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::getOwnPropertySlot):
        (JSC::JSObject::putInlineSlow):
        (JSC::definePropertyOnReceiverSlow):
        (JSC::JSObject::definePropertyOnReceiver):
        (JSC::JSObject::putInlineFastReplacingStaticPropertyIfNeeded):
        (JSC::JSObject::doPutPropertySecurityCheck): Deleted.
        (JSC::JSObject::prototypeChainMayInterceptStoreTo): Deleted.
        * runtime/JSObject.h:
        (JSC::JSObject::putByIndexInline):
        (JSC::JSObject::hasNonReifiedStaticProperties):
        (JSC::JSObject::getOwnPropertySlot):
        (JSC::JSObject::putDirect):
        (JSC::JSObject::doPutPropertySecurityCheck): Deleted.
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::canPerformFastPutInlineExcludingProto):
        (JSC::JSObject::putInlineForJSObject):
        (JSC::JSObject::putInlineFast):
        (JSC::JSObject::putDirectInternal):
        * runtime/JSProxy.h:
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::hasStaticPropertyTable const):
        (JSC::TypeInfo::overridesPut const):
        (JSC::TypeInfo::getOwnPropertySlotMayBeWrongAboutDontEnum const):
        (JSC::TypeInfo::hasPutPropertySecurityCheck const): Deleted.
        * runtime/Lookup.h:
        (JSC::putEntry): Deleted.
        (JSC::lookupPut): Deleted.
        * runtime/PropertySlot.h:
        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::put):
        * runtime/ProxyObject.h:
        * runtime/PutPropertySlot.h:
        (JSC::PutPropertySlot::PutPropertySlot):
        (JSC::PutPropertySlot::context const):
        (JSC::PutPropertySlot::isTaintedByOpaqueObject const):
        (JSC::PutPropertySlot::setIsTaintedByOpaqueObject):
        * runtime/ReflectObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::put):
        * runtime/RegExpObject.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::put):
        * runtime/StringObject.h:
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::finishCreation):
        (JSC::StringPrototype::create):
        * runtime/StringPrototype.h:
        * runtime/Structure.cpp:
        (JSC::Structure::validateFlags):
        * runtime/Structure.h:
        (JSC::Structure::hasNonReifiedStaticProperties const):
        * tools/JSDollarVM.cpp:

2021-06-07  Alexey Shvayka  <shvaikalesh@gmail.com>

        Introduce LexicalScopeFeatures to enable future bytecode optimizations
        https://bugs.webkit.org/show_bug.cgi?id=224072

        Reviewed by Keith Miller.

        Before this patch, BytecodeGenerator was capable of reasoning about the presence of `with`
        statements, direct `eval`, or any other code features only within the current executable:

            ```
            with (foo) {
                (function() {
                    // There was no way to detect WithScope during generation of this function.
                })();
            }
            ```

        This change is required for op_to_this rewrite (#225397): if FunctionCallResolveNode and
        friends knew there is no WithScope, op_call could be emitted with |this| value of
        `undefined` as per spec [1], instead of resolved scope. This would:
          - simplify op_to_this on all tiers, likely resulting in minor perf boost;
          - save 1 instruction per strict function by removing op_to_this;
          - remove toThis() from the method table and ~30 its call sites from built-ins;
          - fix built-in methods that were observably lacking toThis();
          - fix __proto__ getter / setter called on global scope;
          - fix WebIDL accessors called with |this| value of `undefined` and `null`.

        Also, if ResolveNode knew that unforgeable global properties are not shadowed and there
        is no `with` statement or sloppy mode direct `eval`, then `undefined` / `Infinity` / `NaN`
        lookups could be constant-folded. This would save up to 3 bytecode ops per each usage
        and allow emitting op_is_undefined_or_null for `x === undefined || x === null`.
        V8 performs this optimization [2].

        This patch introduces LexicalScopeFeatures to allow passing such information from Parser
        to BytecodeGenerator with a minimal code diff. These features are kept separate from
        CodeFeature to simplify reasoning about feature's scope and because we need to propagate
        lexical features from parent to child scope.

        Strict mode is the first use case of LexicalScopeFeatures, which this change carefully
        fits into existing abstractions without increasing their memory usage even by 1 byte.

        [1]: https://tc39.es/ecma262/#sec-evaluatecall (step 2)
        [2]: https://medium.com/@bmeurer/sometimes-undefined-is-defined-7701e1c9eff8

        * builtins/BuiltinExecutables.cpp:
        (JSC::BuiltinExecutables::createExecutable):
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::recordParse):
        (JSC::UnlinkedCodeBlock::lexicalScopeFeatures const):
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::generateUnlinkedFunctionCodeBlock):
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        (JSC::UnlinkedFunctionExecutable::setInvalidTypeProfilingOffsets):
        * bytecode/UnlinkedFunctionExecutable.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitNewClassFieldInitializerFunction):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::lexicalScopeFeatures const):
        (JSC::BytecodeGenerator::generate):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createFunctionMetadata):
        * parser/Nodes.cpp:
        (JSC::ScopeNode::ScopeNode):
        (JSC::ProgramNode::ProgramNode):
        (JSC::ModuleProgramNode::ModuleProgramNode):
        (JSC::EvalNode::EvalNode):
        (JSC::FunctionMetadataNode::FunctionMetadataNode):
        (JSC::FunctionMetadataNode::operator== const):
        (JSC::FunctionMetadataNode::dump const):
        (JSC::FunctionNode::FunctionNode):
        * parser/Nodes.h:
        (JSC::ScopeNode::lexicalScopeFeatures):
        (JSC::ScopeNode::isStrictMode const):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseInner):
        (JSC::Parser<LexerType>::parseGeneratorFunctionSourceElements):
        (JSC::Parser<LexerType>::parseAsyncFunctionSourceElements):
        (JSC::Parser<LexerType>::parseAsyncGeneratorFunctionSourceElements):
        (JSC::Parser<LexerType>::parseFunctionBody):
        (JSC::Parser<LexerType>::parseFunctionInfo):
        * parser/Parser.h:
        (JSC::Scope::Scope):
        (JSC::Scope::lexicalScopeFeatures const):
        (JSC::Scope::setStrictMode):
        (JSC::Scope::strictMode const):
        (JSC::Scope::fillParametersForSourceProviderCache):
        (JSC::Scope::restoreFromSourceProviderCache):
        (JSC::Parser::pushScope):
        (JSC::Parser::lexicalScopeFeatures):
        (JSC::Parser<LexerType>::parse):
        * parser/ParserModes.h:
        * parser/SourceProviderCacheItem.h:
        (JSC::SourceProviderCacheItem::lexicalScopeFeatures const):
        (JSC::SourceProviderCacheItem::SourceProviderCacheItem):
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createFunctionMetadata):
        * runtime/CachedBytecode.cpp:
        (JSC::CachedBytecode::addFunctionUpdate):
        * runtime/CachedTypes.cpp:
        (JSC::CachedFunctionExecutable::lexicalScopeFeatures const):
        (JSC::CachedCodeBlock::lexicalScopeFeatures const):
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::CachedFunctionExecutable::encode):
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        (JSC::CachedCodeBlock<CodeBlockType>::encode):
        (JSC::CachedFunctionExecutable::isInStrictContext const): Deleted.
        * runtime/CachedTypes.h:
        * runtime/CodeCache.cpp:
        (JSC::generateUnlinkedCodeBlockImpl):
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        * runtime/ECMAMode.h:
        (JSC::ECMAMode::fromBool):
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::FunctionExecutable):
        * runtime/GlobalExecutable.h:
        (JSC::GlobalExecutable::recordParse):
        (JSC::GlobalExecutable::GlobalExecutable):
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::ScriptExecutable):
        (JSC::ScriptExecutable::newCodeBlockFor):
        (JSC::ScriptExecutable::recordParse):
        * runtime/ScriptExecutable.h:
        (JSC::ScriptExecutable::isInStrictContext const):
        (JSC::ScriptExecutable::recordParse):

2021-06-07  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r278371 and r278463.
        https://bugs.webkit.org/show_bug.cgi?id=226749

        Break dumpDisassembly in JetStream2

        Reverted changesets:

        "We should drop B3 values while running Air"
        https://bugs.webkit.org/show_bug.cgi?id=226187
        https://trac.webkit.org/changeset/278371

        "Drop the FTL(DFG) graph after lowering to B3"
        https://bugs.webkit.org/show_bug.cgi?id=226556
        https://trac.webkit.org/changeset/278463

2021-06-07  Alexey Shvayka  <shvaikalesh@gmail.com>

        Window should behave like a legacy platform object without indexed setter
        https://bugs.webkit.org/show_bug.cgi?id=225894

        Reviewed by Darin Adler.

        * runtime/TypeError.h:
        (JSC::typeError):

2021-06-07  Saam Barati  <sbarati@apple.com>

        Short circuit read modify write nodes emit byte code that uses the wrong locals
        https://bugs.webkit.org/show_bug.cgi?id=226576
        <rdar://problem/78810362>

        Reviewed by Yusuke Suzuki.

        It's never a good idea to use the wrong local :-)
        
        This patch also adds support for dumping predecessors of basic blocks
        in the bytecode dump.

        * bytecode/BytecodeDumper.cpp:
        (JSC::CodeBlockBytecodeDumper<Block>::dumpGraph):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ShortCircuitReadModifyResolveNode::emitBytecode):
        (JSC::ShortCircuitReadModifyDotNode::emitBytecode):
        (JSC::ShortCircuitReadModifyBracketNode::emitBytecode):

2021-06-07  Mark Lam  <mark.lam@apple.com>

        Put the Baseline JIT prologue and op_loop_hint code in JIT thunks.
        https://bugs.webkit.org/show_bug.cgi?id=226375

        Reviewed by Keith Miller and Robin Morisset.

        Baseline JIT prologue code varies in behavior based on several variables.  These
        variables include (1) whether the prologue does any arguments value profiling,
        (2) whether the prologue is for a constructor, and (3) whether the compiled
        CodeBlock will have such a large frame that it is greater than the stack reserved
        zone (aka red zone) which would require additional stack check logic.

        The pre-existing code would generate specialized code based on these (and other
        variables).  In converting to using thunks for the prologue, we opt not to
        convert these specializations into runtime checks.  Instead, the implementation
        uses 1 of 8 possible specialized thunks to reduce the need to pass arguments for
        runtime checks.  The only needed argument passed to the prologue thunks is the
        codeBlock pointer.

        There are 8 possible thunks because we specialize based on 3 variables:
        1. doesProfiling
        2. isConstructor
        3. hasHugeFrame

        2**3 yields 8 permutations of prologue thunk specializations.

        Similarly, there are also 8 analogous arity fixup prologues that work similarly.

        The op_loop_hint thunk only takes 1 runtime argument: the bytecode offset.

        We've tried doing the loop_hint optimization check in the thunk (in order to move
        both the fast and slow path into the thunk for maximum space savings).  However,
        this seems to have some slight negative impact on benchmark performance.  We ended
        up just keeping the fast path and instead have the slow path call a thunk to do
        its work.  This realizes the bulk of the size savings without the perf impact.

        This patch also optimizes op_enter a bit more by eliminating the need to pass any
        arguments to the thunk.  The thunk previously took 2 arguments: localsToInit and
        canBeOptimized.  localsToInit is now computed in the thunk at runtime, and
        canBeOptimized is used as a specialization argument to generate 2 variants of the
        op_enter thunk: op_enter_canBeOptimized_Generator and op_enter_cannotBeOptimized_Generator,
        thereby removing the need to pass it as a runtime argument.

        LinkBuffer size results (from a single run of Speedometer2):

           BaselineJIT: 93319628 (88.996532 MB)   => 83851824 (79.967331 MB)   0.90x
         ExtraCTIThunk: 5992 (5.851562 KB)        => 6984 (6.820312 KB)        1.17x
                        ...
                 Total: 197530008 (188.379295 MB) => 188459444 (179.728931 MB) 0.95x

        Speedometer2 and JetStream2 results (as measured on an M1 Mac) are neutral.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::untagReturnAddressWithoutExtraValidation):
        * assembler/MacroAssemblerARM64E.h:
        (JSC::MacroAssemblerARM64E::untagReturnAddress):
        (JSC::MacroAssemblerARM64E::untagReturnAddressWithoutExtraValidation):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::branchAdd32):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::branchAdd32):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::offsetOfNumCalleeLocals):
        (JSC::CodeBlock::offsetOfNumVars):
        (JSC::CodeBlock::offsetOfArgumentValueProfiles):
        (JSC::CodeBlock::offsetOfShouldAlwaysBeInlined):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::emitSaveCalleeSavesFor):
        (JSC::AssemblyHelpers::emitSaveCalleeSavesForBaselineJIT):
        (JSC::AssemblyHelpers::emitRestoreCalleeSavesForBaselineJIT):
        * jit/JIT.cpp:
        (JSC::JIT::compileAndLinkWithoutFinalizing):
        (JSC::JIT::prologueGenerator):
        (JSC::JIT::arityFixupPrologueGenerator):
        (JSC::JIT::privateCompileExceptionHandlers):
        * jit/JIT.h:
        * jit/JITInlines.h:
        (JSC::JIT::emitNakedNearCall):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::op_ret_handlerGenerator):
        (JSC::JIT::emit_op_enter):
        (JSC::JIT::op_enter_Generator):
        (JSC::JIT::op_enter_canBeOptimized_Generator):
        (JSC::JIT::op_enter_cannotBeOptimized_Generator):
        (JSC::JIT::emit_op_loop_hint):
        (JSC::JIT::emitSlow_op_loop_hint):
        (JSC::JIT::op_loop_hint_Generator):
        (JSC::JIT::op_enter_handlerGenerator): Deleted.
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_enter):
        * jit/ThunkGenerators.cpp:
        (JSC::popThunkStackPreservesAndHandleExceptionGenerator):

2021-06-07  Robin Morisset  <rmorisset@apple.com>

        Optimize compareStrictEq when neither side is a double and at least one is neither a string nor a BigInt
        https://bugs.webkit.org/show_bug.cgi?id=226676

        Reviewed by Filip Pizlo.

        There is exactly one case where x === y must return false despite x and y being JSValues with the same bits:
            NaN === NaN
        There are a few cases where x === y must return true despite x and y being JSValues with potentially different bits:
            Double === Int32
            String === String
            HeapBigInt === HeapBigInt
            HeapBigInt === BigInt32 (if they are enabled)
        If we don't have a double on either side, at least one side has neither a String nor a HeapBigInt, and BigInt32 are disabled, we can clearly ignore all of these pathological cases.

        This optimization was decided based on looking at DFG graphs of Speedometer2; here is a sample of the compareStrictEq(Untyped, Untyped), courtesy of Phil:
            Final|Array|String|Bool, Final|Array|String|Bool
            Array|String|Bool, String|Bool (twice)
            Array|String|Bool, String|Int32 (once in DFG, once in FTL)
        !   Array|String|Bool, Array|Bool
        !   Final|Other, Final|Other
        !   Int32|Other, Int32
            Final|StringIdent, Final|StringIdent (3 times)
            Final|StringIdent|BoolInt32, StringIdent|BoolInt32 (twice)
            String|Bool, String|Bool (4 times)
            DoublePureNaN, String|Bool
        !   Other, Function|Other
        !   Final|Other, Final|Function|Other (twice)
            Final|String|Bool|Other, Final|String|Bool|Other (3 times, two in the FTL)
            Final|String|Int32, String|Int32 (four times)
            String|Int32|Bool, Function|String|Int32|Bool (twice)
            String|DoublePureNaN, String|Bool (twice)
        !   Final|Bool|Other, Final|Function|Other (four times, twice in FTL)
        I marked with a ! those for which this optimization should apply.

        The only slightly interesting part of this patch is DFG::SpeculativeJIT::speculateNeitherDoubleNorHeapBigIntNorString where I took care to skip every test whose result we can predict from the abstract interpreter.

        Results on microbenchmarks:
            poly-stricteq-not-double                  45.5793+-0.5304     ?     46.0306+-0.5621        ?
            poly-stricteq-not-double-nor-string       45.5829+-0.5750     ^     16.9089+-0.3070        ^ definitely 2.6958x faster
            poly-stricteq                             49.9719+-0.6450           48.9855+-0.5227          might be 1.0201x faster

        I also measured the amount of code that we generate in the DFG on JetStream2.
        The results here are disappointing but still measurable. Before:
            DFG_fast_CompareStrictEq totalBytes: 468425 count: 10951 avg: 42.774632
            DFG_fast_CompareStrictEq totalBytes: 468020 count: 10917 avg: 42.870752
            DFG_fast_CompareStrictEq totalBytes: 467424 count: 10888 avg: 42.930198
        After:
            DFG_fast_CompareStrictEq totalBytes: 463946 count: 10917 avg: 42.497573
            DFG_fast_CompareStrictEq totalBytes: 474492 count: 11138 avg: 42.601185
            DFG_fast_CompareStrictEq totalBytes: 467138 count: 10970 avg: 42.583227

        * bytecode/SpeculatedType.h:
        (JSC::isNeitherDoubleNorHeapBigIntNorStringSpeculation):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupCompareStrictEqAndSameValue):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateNeitherDoubleNorHeapBigIntNorString):
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::SafeToExecuteEdge::operator()):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileStrictEq):
        (JSC::DFG::SpeculativeJIT::compileNotDoubleNeitherDoubleNorHeapBigIntNorStringStrictEquality):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleNotDoubleNeitherDoubleNorHeapBigIntNorStringStrictEquality):
        (JSC::DFG::SpeculativeJIT::speculateNotDouble):
        (JSC::DFG::SpeculativeJIT::speculateNeitherDoubleNorHeapBigIntNorString):
        (JSC::DFG::SpeculativeJIT::speculate):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGUseKind.cpp:
        (WTF::printInternal):
        * dfg/DFGUseKind.h:
        (JSC::DFG::typeFilterFor):
        (JSC::DFG::checkMayCrashIfInputIsEmpty):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        (JSC::FTL::DFG::LowerDFGToB3::speculate):
        (JSC::FTL::DFG::LowerDFGToB3::speculateNeitherDoubleNorHeapBigIntNorString):

2021-06-07  Tuomas Karkkainen  <tuomas.webkit@apple.com>

        $vm should have a function for checking if security assertions are enabled similar to $vm.assertEnabled
        https://bugs.webkit.org/show_bug.cgi?id=226020
        <rdar://problem/78567619>

        Reviewed by Mark Lam.

        Add method $vm.securityAssertEnabled() which parallels $vm.assertEnabled(), and allows
        checking at runtime whether the current JavaScriptCore build has security assertions enabled.

        * tools/JSDollarVM.cpp:

2021-06-04  Chris Dumez  <cdumez@apple.com>

        FileSystem::readFromFile() should return data as `void*`
        https://bugs.webkit.org/show_bug.cgi?id=226671

        Reviewed by Darin Adler.

        FileSystem::readFromFile() should return data as `void*` instead of `char*`. This is more flexible and
        consistent with FileSystem::writeToFile().

        * inspector/remote/socket/RemoteInspectorSocket.cpp:
        (Inspector::RemoteInspector::backendCommands const):

2021-06-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: mark recently added protocol commands/events as page-only
        https://bugs.webkit.org/show_bug.cgi?id=226661

        Reviewed by Joseph Pecoraro.

        * inspector/protocol/CSS.json:
        * inspector/protocol/Network.json:
        These commands are not implemented in ITML. By not specifying `"targetTypes": ["page"]` it's
        implicitly saying that the command/event is supported by ITML since the command/event will
        fall back to the domain's `"targetTypes"`, which includes ITML.

2021-06-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Private static method should define privateClassBrandIdentifier in class-scope
        https://bugs.webkit.org/show_bug.cgi?id=226656
        rdar://78313139

        Reviewed by Keith Miller.

        We accidentally made `declaresStaticPrivateMethod` always `false`.
        This patch fixes that so that we properly define privateClassBrandIdentifier field in the class-scope if static-private-method is defined.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseClass):

2021-06-04  Filip Pizlo  <fpizlo@apple.com>

        Don't emit the NotDouble checks if we're already NotDouble.

        Rubber stamped by Saam Barati.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::speculateNotDouble):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::speculateNotDouble):

2021-06-04  Mark Lam  <mark.lam@apple.com>

        Placate exception checker validation in objectPrototypeHasOwnProperty.
        https://bugs.webkit.org/show_bug.cgi?id=226651
        rdar://78861296

        Reviewed by Keith Miller.

        * runtime/ObjectPrototype.cpp:
        (JSC::objectPrototypeHasOwnProperty):

2021-06-03  Filip Pizlo  <fpizlo@apple.com>

        DFG should speculate on CompareStrictEq(@x, @x)
        https://bugs.webkit.org/show_bug.cgi?id=226621

        Reviewed by Mark Lam.

        Introduces a NotDouble: speculation. We use it to speculate on CompareStrictEq(@x, @x).

        * bytecode/SpeculatedType.h:
        (JSC::isNotDoubleSpeculation):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupCompareStrictEqAndSameValue):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateNotDouble):
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::SafeToExecuteEdge::operator()):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::speculateNotDouble):
        (JSC::DFG::SpeculativeJIT::speculate):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGUseKind.cpp:
        (WTF::printInternal):
        * dfg/DFGUseKind.h:
        (JSC::DFG::typeFilterFor):
        (JSC::DFG::checkMayCrashIfInputIsEmpty):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::speculate):
        (JSC::FTL::DFG::LowerDFGToB3::speculateNotDouble):

2021-06-04  Robin Morisset  <rmorisset@apple.com>

        Drop the FTL(DFG) graph after lowering to B3
        https://bugs.webkit.org/show_bug.cgi?id=226556

        Reviewed by Phil Pizlo.

        The challenge in this patch was dealing with all of the Patchpoints created by FTLLowerDFGToB3: they get a lambda at that time, which they execute at the end of Air, and many of these lambdas were capturing a pointer to some parts of the DFG graph and reading through it when being executed.
        In all cases but one it was easily fixed: they were only reading a few bits from a given node, so I just read these bits in FTLLowerDFGToB3, and captured them (by value) instead of the pointer to the node.
        The exception was compileCallOrConstructVarargsSpread(): its patchpoint generator was walking through the graph, flattening a tree of PhantomSpread/PhantomNewArrayWithSpread/PhantomNewArrayBuffer/PhantomCreateRest, emitting some code along the way.
        We now do this flattening of the tree in FTLLowerDFGToB3, store just enough information to later emit the required code in a vector, and capture that vector in the lambda (through a move capture, which is allowed since C++14). See `struct VarargsSpreadArgumentToEmit` for the information that we need to store in that vector.

        I tested this change by completing a full run of JetStream2 with ASAN.
        I also ran the stress tests with "spread" in their name in Debug mode.

        * b3/B3SparseCollection.h:
        (JSC::B3::SparseCollection::clearAll):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::freeDFGIRAfterLowering):
        * dfg/DFGGraph.h:
        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileUnaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileBinaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::getPrivateName):
        (JSC::FTL::DFG::LowerDFGToB3::compilePrivateBrandAccess):
        (JSC::FTL::DFG::LowerDFGToB3::cachedPutById):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileDelBy):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct):
        (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct):
        (JSC::FTL::DFG::LowerDFGToB3::compileTailCall):
        (JSC::FTL::DFG::LowerDFGToB3::VarargsSpreadArgumentToEmit::VarargsSpreadArgumentToEmit):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallEval):
        (JSC::FTL::DFG::LowerDFGToB3::compileInById):
        (JSC::FTL::DFG::LowerDFGToB3::compileInstanceOf):
        (JSC::FTL::DFG::LowerDFGToB3::getById):
        (JSC::FTL::DFG::LowerDFGToB3::getByIdWithThis):
        (JSC::FTL::DFG::LowerDFGToB3::emitBinarySnippet):
        (JSC::FTL::DFG::LowerDFGToB3::emitBinaryBitOpSnippet):
        (JSC::FTL::DFG::LowerDFGToB3::emitRightShiftSnippet):
        (JSC::FTL::DFG::LowerDFGToB3::crash):

2021-06-04  Tadeu Zagallo  <tzagallo@apple.com>

        Optimize Function.prototype.toString
        https://bugs.webkit.org/show_bug.cgi?id=226418
        <rdar://77861846>

        Reviewed by Saam Barati.

        Add caching to Function.prototype.toString. This is used heavily in Speedometer2, and repeatedly recomputing a
        string which is a constant is costly. We cache the results of toString in all cases except for bound functions.
        To make this work for bound functions, we'd need to add a new field they can use for this cache. For other
        functions, we cache it on the executable (either NativeExecutable or FunctionExecutable). The reason we can't
        do this on the executable for bound functions is that all bound functions share the same executable, but
        individual bound functions can have different names. The reason it's valid to cache the results in general is that a
        function's name field can't be changed from JS code -- it's non-writable.

        This patch also makes Function.prototype.toString an intrinsic in the DFG/FTL. We emit code on the fast path
        which reads the cached value if it's present. If not, we call into the slow path, which will compute
        the cached value for non bound functions, or compute the result for bound functions.

        I added a new microbenchmark that speeds up by >35x:

        function-to-string     2197.5952+-30.7118    ^     59.9861+-2.5550        ^ definitely 36.6350x faster

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::getExecutable):
        (JSC::DFG::SpeculativeJIT::compileFunctionToString):
        (JSC::DFG::SpeculativeJIT::compileGetExecutable):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::getExecutable):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetExecutable):
        (JSC::FTL::DFG::LowerDFGToB3::compileFunctionToString):
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::visitChildrenImpl):
        (JSC::FunctionExecutable::toStringSlow):
        * runtime/FunctionExecutable.h:
        * runtime/FunctionExecutableInlines.h:
        (JSC::FunctionExecutable::toString):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::addFunctionProperties):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/Intrinsic.cpp:
        (JSC::intrinsicName):
        * runtime/Intrinsic.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::toString):
        * runtime/JSFunction.h:
        * runtime/JSFunctionInlines.h:
        (JSC::JSFunction::asStringConcurrently const):
        * runtime/JSStringInlines.h:
        * runtime/NativeExecutable.cpp:
        (JSC::NativeExecutable::toStringSlow):
        (JSC::NativeExecutable::visitChildrenImpl):
        * runtime/NativeExecutable.h:

2021-06-04  Michael Catanzaro  <mcatanzaro@gnome.org>

        Fix more GCC warnings
        https://bugs.webkit.org/show_bug.cgi?id=226193

        Reviewed by Adrian Perez de Castro.

        Fix -Wreturn-type warnings due to missing RELEASE_ASSERT_NOT_REACHED() where expected.

        * jit/JITPlan.cpp:
        (JSC::JITPlan::tier const):
        * jit/ThunkGenerators.cpp:
        (JSC::virtualThunkFor):

2021-06-03  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Implement JIT ICs for InByVal
        https://bugs.webkit.org/show_bug.cgi?id=226563

        Reviewed by Saam Barati.

        Until now, InByVal has had few optimizations implemented:
        DFG would attempt to convert string index lookups to InById and int32 lookups to HasIndexedProperty,
        but there has been no inline caching nor any special handling for symbol lookups.

        This has become a more urgent problem now, as `#x in obj` (i.e. HasPrivateName / HasPrivateBrand)
        will need to mimic InByVal's inline caching strategy in order to be deemed performant enough to ship.

        This patch thus implements inline caching for InByVal at all JIT tiers.
        The result is a night-and-day difference for symbols, a nice boost for string indices, and no change for int32s: 

        in-by-val-symbol                  203.5572+-2.7647     ^     19.1035+-0.7498        ^ definitely 10.6555x faster
        in-by-val-string-index             87.0368+-44.7766          45.9971+-32.0007         might be 1.8922x faster
        in-by-val-int32                   110.9904+-1.7109     ?    111.3431+-1.7558        ?

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/CheckPrivateBrandStatus.cpp:
        (JSC::CheckPrivateBrandStatus::singleIdentifier const):
        * bytecode/DeleteByStatus.cpp:
        (JSC::DeleteByStatus::singleIdentifier const):
        * bytecode/GetByStatus.cpp:
        (JSC::GetByStatus::singleIdentifier const):
        * bytecode/ICStatusMap.h:
        * bytecode/ICStatusUtils.h:
        (JSC::singleIdentifierForICStatus):
        * bytecode/InByIdVariant.cpp:
        (JSC::InByIdVariant::InByIdVariant):
        (JSC::InByIdVariant::attemptToMerge):
        (JSC::InByIdVariant::dumpInContext const):
        * bytecode/InByIdVariant.h:
        (JSC::InByIdVariant::identifier const):
        (JSC::InByIdVariant::overlaps):
        * bytecode/InByStatus.cpp: Renamed from Source/JavaScriptCore/bytecode/InByIdStatus.cpp.
        (JSC::InByStatus::appendVariant):
        (JSC::InByStatus::shrinkToFit):
        (JSC::InByStatus::computeFor):
        (JSC::InByStatus::computeForStubInfo):
        (JSC::InByStatus::computeForStubInfoWithoutExitSiteFeedback):
        (JSC::InByStatus::merge):
        (JSC::InByStatus::filter):
        (JSC::InByStatus::markIfCheap):
        (JSC::InByStatus::finalize):
        (JSC::InByStatus::singleIdentifier const):
        (JSC::InByStatus::dump const):
        * bytecode/InByStatus.h: Renamed from Source/JavaScriptCore/bytecode/InByIdStatus.h.
        * bytecode/RecordedStatuses.cpp:
        (JSC::RecordedStatuses::addInByStatus): Renamed from addInByIdStatus.
        * bytecode/RecordedStatuses.h:
        * bytecode/SetPrivateBrandStatus.cpp:
        (JSC::SetPrivateBrandStatus::singleIdentifier const):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::reset):
        * bytecode/StructureStubInfo.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::filterICStatus):
        * dfg/DFGArgumentsEliminationPhase.cpp:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleInById):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGClobbersExitState.cpp:
        (JSC::DFG::clobbersExitState):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addInByVal):
        * dfg/DFGMayExit.cpp:
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasInByStatus): Renamed from hasInByIdStatus.
        (JSC::DFG::Node::inByStatus): Renamed from inByIdStatus.
        * dfg/DFGNodeType.h:
        * dfg/DFGObjectAllocationSinkingPhase.cpp:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileInByVal):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGVarargsForwardingPhase.cpp:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileInBy):
        (JSC::FTL::DFG::LowerDFGToB3::compileInById):
        (JSC::FTL::DFG::LowerDFGToB3::compileInByVal):
        * jit/ICStats.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::link):
        * jit/JIT.h:
        * jit/JITInlineCacheGenerator.cpp:
        (JSC::JITInByValGenerator::JITInByValGenerator):
        (JSC::JITInByValGenerator::generateFastPath):
        (JSC::JITInByValGenerator::finalize):
        (JSC::JITInByIdGenerator::JITInByIdGenerator):
        * jit/JITInlineCacheGenerator.h:
        (JSC::JITDelByIdGenerator::slowPathJump const):
        (JSC::JITInByValGenerator::JITInByValGenerator):
        (JSC::JITInByValGenerator::slowPathJump const):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jit/JITOperations.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_in_by_val):
        (JSC::JIT::emitSlow_op_in_by_val):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_in_by_val):
        (JSC::JIT::emitSlow_op_in_by_val):
        * jit/Repatch.cpp:
        (JSC::tryCacheInBy): Renamed from tryCacheInByID.
        (JSC::repatchInBy): Renamed from repatchInByID.
        (JSC::resetInBy): Renamed from resetInByID.
        * jit/Repatch.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LLIntSlowPaths.h:
        * llint/LowLevelInterpreter.asm:
        * runtime/CommonSlowPaths.cpp:
        * runtime/CommonSlowPaths.h:

2021-06-03  Mark Lam  <mark.lam@apple.com>

        Fix an ASSERT in objectPrototypeHasOwnProperty() to account for TerminationException.
        https://bugs.webkit.org/show_bug.cgi?id=226609
        rdar://78465046

        Reviewed by Robin Morisset.

        * runtime/ObjectPrototype.cpp:
        (JSC::objectPrototypeHasOwnProperty):

2021-06-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Make $vm's accessor test functions robust against primitive |this|
        https://bugs.webkit.org/show_bug.cgi?id=226591

        Reviewed by Saam Barati.

        These functions are testing-purpose, and they are not robust against passing primitive as |this|.
        This patch makes them robust so that we throw an error instead of crash.

        * tools/JSDollarVM.cpp:

2021-06-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r278356.
        https://bugs.webkit.org/show_bug.cgi?id=226606

        "Breaks jsc tests".

        Reverted changeset:

        "Convert small JIT pool tests into executable fuzzing"
        https://bugs.webkit.org/show_bug.cgi?id=226279
        https://trac.webkit.org/changeset/278356

2021-06-03  Filip Pizlo  <fpizlo@apple.com>

        DFG should eliminate obvious store barriers
        https://bugs.webkit.org/show_bug.cgi?id=226604

        Reviewed by Mark Lam.

        This has a couple changes:
        
        - PutByOffset doesn't GC! So let's not say that it does.

        - The store barrier clustering phase is no longer called the store barrier fencing phase in
          dumps.

        Small Speedometer2 speed-up. Definite speed-up for Elm.

        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGStoreBarrierClusteringPhase.cpp:

2021-06-03  Patrick Angle  <pangle@apple.com>

        Web Inspector: [Cocoa] `RemoteInspector` won't connect to a new relay if it hasn't yet failed to communicate with a previously connected relay
        https://bugs.webkit.org/show_bug.cgi?id=226539

        Reviewed by Devin Rousso.

        `RemoteInspector` communicates with a relay daemon running on the same device in order to send updates like new
        or removed inspectable targets and receive changes to settings like automatic debugging. The relay daemon then
        communicates with a client that connects for debugging. Only one relay daemon should ever be running at a time,
        and its lifecycle is managed separately from JavaScriptCore.

        RemoteInspector holds a RefPtr to its connection to this relay, and only clears this pointer upon a failure to
        communicate over the XPC connection or a known disconnection. However, it is possible, and in some cases likely
        (for example the relay restarting from a brief client disconnection and reconnection), that we can be informed
        of a newly launched relay being available while still thinking we are connected to the old relay, as we have not 
        yet sent a message and triggered a failure in the interim period of time.

        To correct this we now send a simple message any time `setupXPCConnectionIfNeeded` is called if we have an
        existing RefPtr to a relay connection in order to verify the connection is still functional. We now also retry
        to connect to a relay upon failure in order to create a new connection to the current relay.

        In order to prevent entering a retry loop where every subsequent retry's failure results in another retry
        forever, a flag to retry connecting is set when a call to setupXPCConnectionIfNeeded is made while we already
        have a RefPtr to a relay connection. On failure if we are in this special state we will retry once to connect
        but subsequent failures will not automatically reattempt a connection.

        * inspector/remote/RemoteInspector.h:
        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
        (Inspector::RemoteInspector::stopInternal):
        - Clear the retry connection flag when stopping in an orderly fashion.
        (Inspector::RemoteInspector::setupXPCConnectionIfNeeded):
        - Set the retry connection flag and send a simple message if we already have a relay connection in order to make
        sure the connection is either still valid or is torn down properly on failure.
        (Inspector::RemoteInspector::xpcConnectionFailed):
        - If the retry flag is set, schedule a retry and clear the retry flag.

2021-06-02  Robin Morisset  <rmorisset@apple.com>

        B3MoveConstants should filter directly on Values, and only create ValueKeys when useful
        https://bugs.webkit.org/show_bug.cgi?id=226420

        Reviewed by Phil Pizlo.

        I did a few runs of JetStream2 to measure results, the time spent in B3MoveConstants goes from 160-180ms to 100-110ms.
        The total time spent in B3+Air is in the 6 to 8s range, so this is approximately a 1% speedup.

        * b3/B3MoveConstants.cpp:

2021-06-02  Robin Morisset  <rmorisset@apple.com>

        Merge B3::StackSlot and Air::StackSlot
        https://bugs.webkit.org/show_bug.cgi?id=226362

        Reviewed by Filip Pizlo.

        This is a very simple and safe (although small) memory saving, since every B3StackSlot eventually becomes an AirStackSlot with an exact copy of all the same information.
        Simply dropping the B3StackSlot past that point is tricky, because one of them might be retained by FTLState (and modified by Air).
        It is much simpler to just use Air::StackSlot throughout. It saves us:
        - 16 bytes per B3StackSlot (for the structure itself)
        - another 8 bytes per B3StackSlot (for the pointer in the SparseCollection)
        - 8 bytes per AirStackSlot (for the pointer to the B3::StackSlot)
        I also took the opportunity to save an extra 8 bytes per AirStackSlot, by shrinking the bytesize field to a uint16_t (with a RELEASE_ASSERT that we never overflow it) and moving the StackSlotKind in the hole this creates.
        Total savings: 16 bytes per spill slot and 40 bytes per locked (by B3) slot.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * b3/B3LowerToAir.cpp:
        * b3/B3Procedure.cpp:
        (JSC::B3::Procedure::addStackSlot):
        (JSC::B3::Procedure::dump const):
        * b3/B3Procedure.h:
        * b3/B3ProcedureInlines.h:
        (JSC::B3::Procedure::stackSlots):
        (JSC::B3::Procedure::stackSlots const):
        * b3/B3SlotBaseValue.cpp:
        * b3/B3SlotBaseValue.h:
        * b3/B3StackSlot.cpp: Removed.
        * b3/B3StackSlot.h: Removed.
        * b3/B3Value.cpp:
        * b3/air/AirCode.cpp:
        (JSC::B3::Air::Code::addStackSlot):
        * b3/air/AirCode.h:
        * b3/air/AirStackSlot.cpp:
        (JSC::B3::Air::StackSlot::setOffsetFromFP):
        (JSC::B3::Air::StackSlot::deepDump const):
        (JSC::B3::Air::StackSlot::StackSlot):
        * b3/air/AirStackSlot.h:
        (JSC::B3::Air::StackSlot::ensureSize):
        * b3/testb3.h:
        * ftl/FTLCompile.cpp:
        * ftl/FTLState.h:

2021-06-02  Pablo Saavedra  <psaavedra@igalia.com>

        Fix build error with ENABLE_DFG_JIT=OFF
        https://bugs.webkit.org/show_bug.cgi?id=226550

        Reviewed by Mark Lam.

        * jit/JITPlan.cpp:
        (JSC::JITPlan::compileInThread):

2021-06-02  Robin Morisset  <rmorisset@apple.com>

        We should drop B3 values while running Air
        https://bugs.webkit.org/show_bug.cgi?id=226187

        Reviewed by Saam Barati.

        We must keep the following values:
        - WasmBoundsCheck, to know whether it is Pinned or Maximum, and if it is pinned find its argument.
        - CCall/Patch/Check/CheckAdd/CheckSub/CheckMul and all of their children, because all of these are lowered to Air::Patchpoint, which needs to know the type of its arguments, and does so by looking at the children of its        origin.
        I intend to fix these in later patches if possible.

        Finally we must preserve all B3 values in the following cases:
        - if we dump the disassembly or the Air graph: because otherwise we cannot print the origins
        - if we are using the sampling profiler, because it relies on PCToCodeOriginMap which we cannot accurately fill without these origins.

        We must also keep m_tuples alive, as it is used by Patchpoints in Air to understand the types of their arguments.
        We also don't touch StackSlots (in this patch), because one of them is captured by FTL::State.

        Also now PCToOriginMap has a Vector with no inline capacity, since it is either quite large (if needed) or empty (otherwise).

        The performance impact of this is a progression on various RAMification subtests on Mac, but is more mitigated on iPhone7, with various regressions.
        I suspect these to be noise, and will monitor the performance bots post-landing to make sure of it.

        * b3/B3LowerToAir.cpp:
        (JSC::B3::lowerToAir):
        * b3/B3Procedure.cpp:
        (JSC::B3::Procedure::freeUnneededB3ValuesAfterLowering):
        * b3/B3Procedure.h:
        (JSC::B3::Procedure::releasePCToOriginMap):
        (JSC::B3::Procedure::setNeedsPCToOriginMap):
        (JSC::B3::Procedure::needsPCToOriginMap):
        * b3/B3SparseCollection.h:
        (JSC::B3::SparseCollection::clearAll):
        (JSC::B3::SparseCollection::filterAndTransfer):
        * b3/air/AirCode.cpp:
        (JSC::B3::Air::Code::Code):
        * b3/air/AirCode.h:
        (JSC::B3::Air::Code::shouldPreserveB3Origins const):
        * b3/air/AirGenerate.cpp:
        (JSC::B3::Air::generateWithAlreadyAllocatedRegisters):
        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile):
        * ftl/FTLState.cpp:
        (JSC::FTL::State::State):

2021-06-02  Chris Dumez  <cdumez@apple.com>

        Drop Checked::safeGet()
        https://bugs.webkit.org/show_bug.cgi?id=226537

        Reviewed by Geoffrey Garen.

        Drop Checked::safeGet() and replace with uses of Checked::operator T() or Checked::value().
        safeGet() is a bit akward, having both a return value and an out-parameter.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * runtime/JSArray.cpp:
        (JSC::JSArray::appendMemcpy):
        (JSC::JSArray::unshiftCountWithAnyIndexingType):
        * runtime/JSStringJoiner.cpp:
        (JSC::JSStringJoiner::joinedLength const):
        * wasm/WasmFormat.cpp:
        (JSC::Wasm::Segment::create):
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
        * wasm/WasmTable.cpp:
        (JSC::Wasm::Table::grow):

2021-06-02  Keith Miller  <keith_miller@apple.com>

        Add globalObject API set property test
        https://bugs.webkit.org/show_bug.cgi?id=226542
        <rdar://78287979>

        Reviewed by Alexey Shvayka.

        * API/tests/testapi.cpp:
        (TestAPI::testJSObjectSetOnGlobalObjectSubclassDefinition):
        (testCAPIViaCpp):

2021-06-02  Keith Miller  <keith_miller@apple.com>

        Convert small JIT pool tests into executable fuzzing
        https://bugs.webkit.org/show_bug.cgi?id=226279

        Right now, we try to test our engine on a small JIT pool. This isn't a known configuration for any
        actual ports and causes issues if we run out of JIT memory when we need to compile an OSR exit.
        Instead of testing such a small pool we should just fuzz each executable allocation that says it
        can fail.

        The current fuzzing doesn't do a good job tracking the number of DFG/FTL compiles when allocations
        fail, so when enabled those tests will just exit early. Also, right now we use a random seed picked
        by the engine for these tests, which makes it hard to reproduce crashes on the bots. If we see
        flakiness on the bots we can have the harness pass in a number so it gets logged in the repro command.

        Reviewed by Michael Saboff.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::numberOfDFGCompiles):
        * jit/ExecutableAllocationFuzz.cpp:
        (JSC::doExecutableAllocationFuzzing):
        * jsc.cpp:
        (runJSC):

2021-06-02  Chris Dumez  <cdumez@apple.com>

        Use Checked aliases instead of Checked<T, RecordOverflow>
        https://bugs.webkit.org/show_bug.cgi?id=226535

        Reviewed by Keith Miller.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::JSC_DEFINE_JIT_OPERATION):
        * runtime/JSArray.cpp:
        (JSC::JSArray::appendMemcpy):
        (JSC::JSArray::unshiftCountWithAnyIndexingType):
        * runtime/JSStringJoiner.cpp:
        (JSC::JSStringJoiner::joinedLength const):
        * runtime/JSStringJoiner.h:
        * runtime/StringPrototype.cpp:
        (JSC::jsSpliceSubstringsWithSeparators):
        * wasm/WasmFormat.cpp:
        (JSC::Wasm::Segment::create):
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
        * wasm/WasmTable.cpp:
        (JSC::Wasm::Table::grow):
        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::ByteCompiler::emitDisjunction):
        * yarr/YarrParser.h:
        (JSC::Yarr::Parser::consumeNumber):
        * yarr/YarrPattern.cpp:

2021-06-01  Darin Adler  <darin@apple.com>

        Remove <wtf/Optional.h>
        https://bugs.webkit.org/show_bug.cgi?id=226437

        Reviewed by Chris Dumez.

        * <many files>: Remove include of <wtf/Optional.h>.

        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:
        (CppBackendDispatcherHeaderGenerator._generate_secondary_header_includes): Don't generate
        an include of wtf/Optional.h; including WTFString.h takes care of this anyway.
        * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:
        (CppFrontendDispatcherHeaderGenerator._generate_secondary_header_includes): Ditto.
        * inspector/scripts/codegen/generate_cpp_protocol_types_header.py:
        (CppProtocolTypesHeaderGenerator._generate_secondary_header_includes): Ditto.

        * inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:
        (CppProtocolTypesImplementationGenerator.generate_output): Generate an include of <optional>
        instead of <wtf/Optional.h>.

        * inspector/scripts/tests/expected/*: Regenerate.

2021-06-01  Chris Dumez  <cdumez@apple.com>

        Rename Checked::unsafeGet() to Checked::value()
        https://bugs.webkit.org/show_bug.cgi?id=226514

        Reviewed by Darin Adler.

        Rename Checked::unsafeGet() to Checked::value(). The "unsafeGet" naming is confusing as this
        function isn't really unsafe since it will crash if the value has overflowed. Also add an
        `operator T()` to implicitly convert a Checked to its underlying type without needing to
        call value().

        * b3/B3Const32Value.cpp:
        (JSC::B3::Const32Value::checkAddConstant const):
        (JSC::B3::Const32Value::checkSubConstant const):
        (JSC::B3::Const32Value::checkMulConstant const):
        * b3/B3Const64Value.cpp:
        (JSC::B3::Const64Value::checkAddConstant const):
        (JSC::B3::Const64Value::checkSubConstant const):
        (JSC::B3::Const64Value::checkMulConstant const):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::FinallyContext::numberOfBreaksOrContinues const):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileForwardVarargsWithSpread):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::JSC_DEFINE_JIT_OPERATION):
        * heap/Heap.cpp:
        (JSC::Heap::deprecatedReportExtraMemorySlowCase):
        (JSC::Heap::extraMemorySize):
        (JSC::Heap::updateAllocationLimits):
        (JSC::Heap::reportExtraMemoryVisited):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::propagateExternalMemoryVisitedIfNecessary):
        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBuffer::slowEnsureCapacity):
        (JSC::MarkedArgumentBuffer::expandCapacity):
        * runtime/ArrayPrototype.cpp:
        (JSC::concatAppendOne):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/CommonSlowPaths.cpp:
        (JSC::JSC_DEFINE_COMMON_SLOW_PATH):
        * runtime/DirectArguments.h:
        * runtime/HashMapImpl.h:
        (JSC::HashMapBuffer::allocationSize):
        (JSC::HashMapImpl::HashMapImpl):
        * runtime/HashMapImplInlines.h:
        (JSC::nextCapacity):
        (JSC::HashMapImpl<HashMapBucketType>::finishCreation):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::parseInt):
        * runtime/JSImmutableButterfly.h:
        (JSC::JSImmutableButterfly::tryCreate):
        * runtime/JSLexicalEnvironment.h:
        (JSC::JSLexicalEnvironment::offsetOfVariable):
        (JSC::JSLexicalEnvironment::allocationSizeForScopeSize):
        * runtime/JSObject.h:
        * runtime/JSPropertyNameEnumerator.cpp:
        (JSC::JSPropertyNameEnumerator::create):
        * runtime/JSString.h:
        * runtime/ScopedArguments.cpp:
        (JSC::ScopedArguments::createUninitialized):
        * runtime/StringPrototype.cpp:
        (JSC::jsSpliceSubstrings):
        (JSC::jsSpliceSubstringsWithSeparators):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::create):
        * runtime/VM.h:
        (JSC::ScratchBuffer::allocationSize):
        * runtime/WeakMapImpl.h:
        (JSC::WeakMapBuffer::allocationSize):
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::AirIRGenerator):
        (JSC::Wasm::AirIRGenerator::emitCallPatchpoint):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        * wasm/WasmInstance.cpp:
        * wasm/WasmInstance.h:
        (JSC::Wasm::Instance::allocationSize):
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::push):
        (JSC::Wasm::LLIntGenerator::getDropKeepCount):
        (JSC::Wasm::LLIntGenerator::walkExpressionStack):
        (JSC::Wasm::LLIntGenerator::finalize):
        (JSC::Wasm::LLIntGenerator::callInformationForCaller):
        (JSC::Wasm::LLIntGenerator::addLoop):
        (JSC::Wasm::LLIntGenerator::addTopLevel):
        (JSC::Wasm::LLIntGenerator::addBlock):
        (JSC::Wasm::LLIntGenerator::addIf):
        (JSC::Wasm::LLIntGenerator::addElseToUnreachable):
        * wasm/WasmSignature.h:
        (JSC::Wasm::Signature::allocatedSize):
        * wasm/WasmStreamingParser.cpp:
        (JSC::Wasm::StreamingParser::addBytes):
        * wasm/WasmTable.cpp:
        (JSC::Wasm::Table::Table):
        (JSC::Wasm::Table::grow):
        (JSC::Wasm::FuncRefTable::FuncRefTable):
        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::DisjunctionContext::allocationSize):
        (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::allocationSize):
        (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext):
        (JSC::Yarr::ByteCompiler::atomCharacterClass):
        (JSC::Yarr::ByteCompiler::atomBackReference):
        (JSC::Yarr::ByteCompiler::atomParentheticalAssertionEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesOnceEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesTerminalEnd):
        (JSC::Yarr::ByteCompiler::emitDisjunction):
        * yarr/YarrInterpreter.h:
        (JSC::Yarr::ByteTerm::ByteTerm):
        (JSC::Yarr::ByteTerm::CheckInput):
        (JSC::Yarr::ByteTerm::UncheckInput):
        * yarr/YarrJIT.cpp:
        * yarr/YarrParser.h:
        (JSC::Yarr::Parser::consumeNumber):
        * yarr/YarrPattern.cpp:
        (JSC::Yarr::PatternTerm::dumpQuantifier):

2021-06-01  Adrian Perez de Castro  <aperez@igalia.com>

        [WPE][GTK] Support building against uClibc
        https://bugs.webkit.org/show_bug.cgi?id=226244

        Reviewed by Michael Catanzaro.

        * assembler/MacroAssemblerARM64.cpp:
        (getauxval): Provide a fallback implementation of getauxval() for
        systems which do not provide <sys/auxv.h>, like those using uClibc
        as their C library.

2021-05-30  Chris Dumez  <cdumez@apple.com>

        Drop UncheckedCondition / UncheckedLock
        https://bugs.webkit.org/show_bug.cgi?id=226432

        Reviewed by Darin Adler.

        Drop one remaining use of UncheckedLock in favor of Lock.

        * jit/JITSafepoint.cpp:
        * jit/JITWorklistThread.h:

2021-05-30  Darin Adler  <darin@apple.com>

        Remove WTF::Optional synonym for std::optional, using that class template directly instead
        https://bugs.webkit.org/show_bug.cgi?id=226433

        Reviewed by Chris Dumez.

        * <many files>: Let the do-webcore-rename script rename Optional<> to std::optional<>.

        * inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:
        (ObjCProtocolTypesImplementationGenerator._generate_init_method_for_payload): Use auto instead
        of Optional<>. Also use * instead of value() and nest the definition of the local inside an if
        statement in the case where it's an optional.

        * inspector/scripts/tests/expected/*: Regenerated these results.

2021-05-29  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in JSC::VMInspector
        https://bugs.webkit.org/show_bug.cgi?id=226427

        Reviewed by Mark Lam.

        Stop using UncheckedLock in JSC::VMInspector, as it is being phased out in favor
        of Lock, which supports Clang thread safety analysis.

        * tools/HeapVerifier.cpp:
        (JSC::HeapVerifier::checkIfRecorded):
        * tools/SigillCrashAnalyzer.cpp:
        (JSC::SigillCrashAnalyzer::analyze):
        * tools/VMInspector.cpp:
        (JSC::VMInspector::isValidExecutableMemory):
        (JSC::VMInspector::codeBlockForMachinePC):
        (JSC::VMInspector::lock): Deleted.
        * tools/VMInspector.h:
        (JSC::VMInspector::WTF_RETURNS_LOCK):
        (JSC::VMInspector::WTF_REQUIRES_LOCK):
        (JSC::VMInspector::getLock): Deleted.
        (JSC::VMInspector::iterate): Deleted.

2021-05-29  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in JSC::ConcurrentJSLock
        https://bugs.webkit.org/show_bug.cgi?id=226428

        Reviewed by Darin Adler.

        Stop using UncheckedLock in JSC::ConcurrentJSLock as it is being phased out in
        favor of Lock, which supports Clang thread safety analysis.

        * runtime/ConcurrentJSLock.h:
        (JSC::ConcurrentJSLockerBase::ConcurrentJSLockerBase):
        * runtime/Structure.cpp:
        (JSC::Structure::findStructuresAndMapForMaterialization):
        (JSC::Structure::materializePropertyTable):
        * runtime/Structure.h:
        * runtime/StructureInlines.h:
        (JSC::Structure::forEachPropertyConcurrently):
        * yarr/YarrInterpreter.cpp:

2021-05-28  Darin Adler  <darin@apple.com>

        Clients of optional should use has_value instead of relying on hasValue macro
        https://bugs.webkit.org/show_bug.cgi?id=226395

        Reviewed by Chris Dumez.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::RegExpNode::emitBytecode): Don't use hasValue.

2021-05-29  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in JSC::SamplingProfiler
        https://bugs.webkit.org/show_bug.cgi?id=226414

        Reviewed by Darin Adler.

        Stop using UncheckedLock in JSC::SamplingProfiler as it is being phased out in favor of Lock,
        which supports clang thread safety analysis.

        * heap/Heap.cpp:
        (JSC::visitSamplingProfiler):
        * inspector/agents/InspectorScriptProfilerAgent.cpp:
        (Inspector::InspectorScriptProfilerAgent::startTracking):
        (Inspector::InspectorScriptProfilerAgent::trackingComplete):
        (Inspector::InspectorScriptProfilerAgent::stopSamplingWhenDisconnecting):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::createThreadIfNecessary):
        (JSC::SamplingProfiler::timerLoop):
        (JSC::SamplingProfiler::takeSample):
        (JSC::SamplingProfiler::processUnverifiedStackTraces):
        (JSC::SamplingProfiler::start):
        (JSC::SamplingProfiler::startWithLock):
        (JSC::SamplingProfiler::pause):
        (JSC::SamplingProfiler::noticeCurrentThreadAsJSCExecutionThreadWithLock):
        (JSC::SamplingProfiler::noticeCurrentThreadAsJSCExecutionThread):
        (JSC::SamplingProfiler::noticeJSLockAcquisition):
        (JSC::SamplingProfiler::noticeVMEntry):
        (JSC::SamplingProfiler::clearData):
        (JSC::SamplingProfiler::releaseStackTraces):
        (JSC::SamplingProfiler::stackTracesAsJSON):
        (JSC::SamplingProfiler::reportTopFunctions):
        (JSC::SamplingProfiler::reportTopBytecodes):
        * runtime/SamplingProfiler.h:
        (JSC::SamplingProfiler::WTF_RETURNS_LOCK):
        (JSC::SamplingProfiler::WTF_REQUIRES_LOCK):

2021-05-29  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in JSC::dumpJITMemory()
        https://bugs.webkit.org/show_bug.cgi?id=226413

        Reviewed by Darin Adler.

        Stop using UncheckedLock in JSC::dumpJITMemory() as it is being phased out in favor of Lock,
        which supports Clang thread safety analysis.

        * jit/ExecutableAllocator.cpp:
        (JSC::dumpJITMemory):

2021-05-29  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in JSC::WasmCalleeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=226412

        Reviewed by Darin Adler.

        Stop using UncheckedLock in JSC::WasmCalleeRegistry, as it is being phased out in favor of
        Lock, which supports Clang thread safety analysis.

        * runtime/SamplingProfiler.cpp:
        (JSC::FrameWalker::FrameWalker):
        (JSC::FrameWalker::recordJITFrame):
        (JSC::CFrameWalker::CFrameWalker):
        (JSC::SamplingProfiler::takeSample):
        * wasm/WasmCalleeRegistry.h:
        (JSC::Wasm::CalleeRegistry::WTF_RETURNS_LOCK):
        (JSC::Wasm::CalleeRegistry::WTF_REQUIRES_LOCK):
        (JSC::Wasm::CalleeRegistry::getLock): Deleted.
        (JSC::Wasm::CalleeRegistry::isValidCallee): Deleted.
        * wasm/WasmFaultSignalHandler.cpp:
        (JSC::Wasm::trapHandler):

2021-05-29  Mark Lam  <mark.lam@apple.com>

        VM::isTerminationException() should only be run on a non-null exception value.
        https://bugs.webkit.org/show_bug.cgi?id=226417
        rdar://78646170

        Reviewed by Filip Pizlo.

        * jsc.cpp:
        (runInteractive):

2021-05-29  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late-ish May 2021 edition redux
        https://bugs.webkit.org/show_bug.cgi?id=226401

        Unreviewed non-unified build fixes.

        * jit/JITSizeStatistics.cpp: Add missing LinkBuffer.h header.
        * jit/JITSizeStatistics.h: Add missing CCallHelpers.h and wtf/text/WTFString.h headers;
        remove unneeded CCallHelpers forward declaration.

2021-05-28  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in WTF::MetaAllocator
        https://bugs.webkit.org/show_bug.cgi?id=226396

        Reviewed by Darin Adler.

        Stop using UncheckedLock in WTF::MetaAllocator, as it is being phased out in favor on Lock,
        which supports Clang thread safety analysis.

        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::getLock const):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocatorBase::WTF_RETURNS_LOCK):
        * tools/VMInspector.cpp:
        (JSC::VMInspector::isValidExecutableMemory):

2021-05-28  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in JSDOMGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=226281

        Reviewed by Darin Adler.

        Drop JSC::lockDuringMarking() and its now empty header given that it does conditional
        locking and it is not compatible with Clang thread safety analysis.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/UnlinkedCodeBlock.h:
        * heap/LockDuringMarking.h: Removed.

2021-05-28  Saam Barati  <sbarati@apple.com>

        Add the ability to dump statistics about cumulative counts and code sizes of Baseline JIT opcodes and DFG nodes
        https://bugs.webkit.org/show_bug.cgi?id=226200

        Reviewed by Robin Morisset.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * dfg/DFGSlowPathGenerator.h:
        (JSC::DFG::SlowPathGenerator::currentNode const):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::runSlowPathGenerators):
        (JSC::DFG::SpeculativeJIT::compileCurrentBlock):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::compileAndLinkWithoutFinalizing):
        * jit/JITSizeStatistics.cpp: Added.
        (JSC::JITSizeStatistics::markStart):
        (JSC::JITSizeStatistics::markEnd):
        (JSC::JITSizeStatistics::dump const):
        * jit/JITSizeStatistics.h: Added.
        (JSC::JITSizeStatistics::reset):
        * jsc.cpp:
        (runJSC):
        * runtime/OptionsList.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:
        * tools/JSDollarVM.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSDollarVM::finishCreation):

2021-05-28  Saam Barati  <sbarati@apple.com>

        Don't sink arguments past the context of the inline call frame they were created in
        https://bugs.webkit.org/show_bug.cgi?id=226363
        <rdar://78392801>

        Reviewed by Filip Pizlo.

        DFG OSR exit isn't set up to allow materializing phantom arguments objects
        when the inline call frame is no longer present in the exit metadata. There
        may be multiple reasons for this, but there's at least one I discovered:
        We don't analyze any locals when reconstructing the variable event stream
        if that local is past the extent of the inline call frame.
        
        This patch makes it so we treat it as an escape if between the definition and
        the last use of a sink candidate (either via an IR use or bytecode liveness)
        there is an exit to a place in the graph where the inline call frame of the
        definition is no longer present.

        * dfg/DFGVarargsForwardingPhase.cpp:

2021-05-28  Stephan Szabo  <stephan.szabo@sony.com>

        Regenerate builtins generator expectations after optional changes
        https://bugs.webkit.org/show_bug.cgi?id=226381

        Reviewed by Chris Dumez.

        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.prototype-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-BuiltinConstructor-Separate.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-InternalClashingNames-Combined.js-result:
        * Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-UnguardedBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:

2021-05-28  Mark Lam  <mark.lam@apple.com>

        The jsc shell should not continue executing after a termination has been received.
        https://bugs.webkit.org/show_bug.cgi?id=226368
        rdar://78013374

        Reviewed by Saam Barati.

        This patch makes the jsc shell forbid execution in all the places that it has
        caught and seen a TerminationException.

        * jsc.cpp:
        (JSC_DEFINE_HOST_FUNCTION):
        (checkException):
        (runWithOptions):
        (runInteractive):

2021-05-27  Robin Morisset  <rmorisset@apple.com>

        AirAllocateStackByGraphColoring should use the optimized interference graphs from AirAllocateRegistersByGraphColoring
        https://bugs.webkit.org/show_bug.cgi?id=226258

        Reviewed by Phil Pizlo.

        The main change in this patch is that AirAllocateStackByGraphColoring is now using the optimized datastructures in wtf/InterferenceGraph.h.
        This required templating most of it over the interference graph used (Small/Large/Huge), but I tried keeping some common parts out of the templated class to minimize the impact on compile times and binary size.

        A consequence of that change is that coalescableMoves and remappedStackSlots now store indices instead of direct pointers to StackSlots, resulting in a memory reduction of about 3x as well.

        Another consequence is that I had to slightly alter the way that coalescing works: instead of carefully removing the interference edges of the killed slot, we simply use mayClear() which is not guaranteed to remove anything.
        I believe that this is sound, because every subsequent access to m_interference checks whether a slot has been coalesced first, so dropping these edges is purely a memory saving, but has no logical effect.

        The new code was tested in a few ways:
        - running on JetStream2 with asan
        - running on JetStream2 with TEST_OPTIMIZED_INTERFERENCE_GRAPH
        - running on JetStream2 and logging the frame sizes at the end of this phase, and comparing to the results of doing the same on ToT (same average frame size)

        The two functions where this code had the largest memory footprint in JetStream2 were both in tsf-wasm.
        One has 751 stack slots, and had an interference graph of 2.1MB and a coalescableMoves vector of 440kB
        The other has 673 stack slots, and had an interference graph of 1.9MB and a coalescableMoves vector of 421kB.
        With this patch, they respectively use 79kB+146kB and 67kB+140kB
        The effect on the rest of JetStream2 is less likely to matter as few functions used more than a few dozens of kB in this phase, but in percentages are just as huge.

        More importantly (and the reason I wrote this patch in the first place), I checked mruby-wasm.aotoki.dev which with a few other pages forced us to lower Options::maximumTmpsForGraphColoring because of jetsams.
        It has two massive functions that reach this phase if I increase Options::maximumTmpsForGraphColoring:
        - about 6k stack slots -> 215MB + 6MB (interference graph + coalescableMoves)
        - about 9k stack slots -> 395MB + 4MB
        After this patch, they respectively use 4.5MB+2MB and 9MB+1.5MB, or roughly a 40x improvement.
        Combined with the recent improvements to the register allocator, I hope to be able to increase Options::maximumTmpsForGraphColoring soon (in a different patch for easier bisection if either cause a perf regression).
        This would be helpful, since its lowering cratered our performance on some other wasm application by 8x.

        In terms of compile times, this patch lowered the time spent in AllocateStackByGraphColoring over the course of a run of JetStream2 from roughly 350ms to roughly 270ms.
        This is almost certainly negligible, but at least it guarantees that it did not regress.

        * b3/air/AirAllocateRegistersByGraphColoring.cpp:
        * b3/air/AirAllocateStackByGraphColoring.cpp:
        (JSC::B3::Air::allocateStackByGraphColoring):

2021-05-27  Darin Adler  <darin@apple.com>

        Next step toward using std::optional directly instead of through WTF::Optional typedef
        https://bugs.webkit.org/show_bug.cgi?id=226280

        Reviewed by Chris Dumez.

        * <many files>: Accept the renaming done by do-webcore-rename.

        * yarr/YarrSyntaxChecker.cpp: Since the style checker complained about this file,
        tweaked style to make it happy after the renaming done by do-webcore-rename, and
        also hand-updated Optional to std::optional as long as we were touching it.

2021-05-27  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late May 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=226322

        Unreviewed non-unified build fixes.

        * jit/JITPlan.cpp: Add missing HeapInlines.h and VMInlines.h headers.
        * jit/JITWorklist.cpp: Add missing HeapInlines.h and SlotVisitorInlines.h headers,
        remove SlotVisitor.h which is now unneeded.
        * jit/JITWorklistThread.cpp: Add missing HeapInlines.h header.

2021-05-27  Daniel Kolesa  <dkolesa@igalia.com>

        [JSC] Fix crash on 32-bit big endian systems.
        https://bugs.webkit.org/show_bug.cgi?id=226264

        Reviewed by Caio Araujo Neponoceno de Lima.

        This is an instance where properly offsetting was missed since
        the issue was not present in 2.30 series and therefore not fixed
        by r273104.

        * llint/LowLevelInterpreter32_64.asm:

2021-05-26  Chris Dumez  <cdumez@apple.com>

        Leverage the new Vector(const T*, size_t) constructor
        https://bugs.webkit.org/show_bug.cgi?id=226304

        Reviewed by Darin Adler.

        Leverage the new Vector(const T*, size_t) constructor in existing code.

        * wasm/WasmStreamingParser.cpp:
        (JSC::Wasm::StreamingParser::consume):

2021-05-26  Tadeu Zagallo  <tzagallo@apple.com>

        REGRESSION: ASSERTION FAILED: !isCompilationThread() in JSC::Profiler::Database::addCompilation()
        https://bugs.webkit.org/show_bug.cgi?id=226302
        <rdar://78537378>

        Reviewed by Saam Barati.

        We started linking the JIT code in the compiler thread, which now triggers this assertion.
        The assertion was introduce before a lock was held to modify the data structures in the
        profiler database, but it's safe to remove it now.

        * profiler/ProfilerDatabase.cpp:
        (JSC::Profiler::Database::addCompilation):

2021-05-26  Chris Dumez  <cdumez@apple.com>

        Use UncheckedLock even less in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=226278

        Reviewed by Darin Adler.

        Use UncheckedLock even less in JavaScriptCore as it is being phased out in
        favor of Lock, which supports Clang thread safety analysis.

        * heap/BlockDirectory.h:
        (JSC::BlockDirectory::WTF_RETURNS_LOCK):
        * heap/CodeBlockSet.h:
        (JSC::CodeBlockSet::WTF_RETURNS_LOCK):
        * heap/Heap.h:
        * heap/MarkedSpace.h:
        (JSC::MarkedSpace::directoryLock):
        * heap/MarkingConstraintSolver.h:
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::donateKnownParallel):
        * heap/SlotVisitor.h:
        * jit/JITWorklist.cpp:
        * jit/JITWorklist.h:
        * jsc.cpp:
        * profiler/ProfilerDatabase.h:
        * runtime/DeferredWorkTimer.h:
        * runtime/VMTraps.cpp:
        (JSC::VMTraps::invalidateCodeBlocksOnStack):
        * runtime/VMTraps.h:
        * tools/FunctionOverrides.cpp:
        (JSC::FunctionOverrides::FunctionOverrides):
        (JSC::FunctionOverrides::reinstallOverrides):
        (JSC::FunctionOverrides::parseOverridesInFile):
        * tools/FunctionOverrides.h:
        (JSC::FunctionOverrides::WTF_REQUIRES_LOCK):
        * tools/VMInspector.cpp:
        (JSC::ensureIsSafeToLock):
        (JSC::VMInspector::codeBlockForMachinePC):
        * wasm/WasmBBQPlan.cpp:
        (JSC::Wasm::BBQPlan::work):
        (JSC::Wasm::BBQPlan::compileFunction):
        (JSC::Wasm::BBQPlan::didCompleteCompilation):
        * wasm/WasmBBQPlan.h:
        * wasm/WasmEntryPlan.cpp:
        (JSC::Wasm::EntryPlan::parseAndValidateModule):
        (JSC::Wasm::EntryPlan::prepare):
        (JSC::Wasm::EntryPlan::ThreadCountHolder::~ThreadCountHolder):
        (JSC::Wasm::EntryPlan::complete):
        * wasm/WasmEntryPlan.h:
        (JSC::Wasm::EntryPlan::tryReserveCapacity):
        * wasm/WasmLLIntPlan.cpp:
        (JSC::Wasm::LLIntPlan::compileFunction):
        (JSC::Wasm::LLIntPlan::didCompleteCompilation):
        (JSC::Wasm::LLIntPlan::completeInStreaming):
        (JSC::Wasm::LLIntPlan::didFailInStreaming):
        * wasm/WasmLLIntPlan.h:
        * wasm/WasmOMGForOSREntryPlan.cpp:
        (JSC::Wasm::OMGForOSREntryPlan::work):
        * wasm/WasmOMGForOSREntryPlan.h:
        * wasm/WasmOMGPlan.cpp:
        (JSC::Wasm::OMGPlan::work):
        * wasm/WasmOMGPlan.h:
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::runCompletionTasks):
        (JSC::Wasm::Plan::tryRemoveContextAndCancelIfLast):
        (JSC::Wasm::Plan::fail):
        * wasm/WasmPlan.h:
        * wasm/WasmStreamingCompiler.cpp:
        (JSC::Wasm::StreamingCompiler::didCompileFunction):
        (JSC::Wasm::StreamingCompiler::completeIfNecessary):
        (JSC::Wasm::StreamingCompiler::didComplete):
        (JSC::Wasm::StreamingCompiler::finalize):
        * wasm/WasmStreamingCompiler.h:
        * wasm/WasmStreamingPlan.cpp:
        (JSC::Wasm::StreamingPlan::work):
        * wasm/WasmStreamingPlan.h:
        * wasm/WasmThunks.h:

2021-05-26  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in WTF::AutomaticThread
        https://bugs.webkit.org/show_bug.cgi?id=226255

        Reviewed by Keith Miller.

        Some code in JSC had to be ported from UncheckedLock to Lock as a result of
        WTF::AutomaticThread using the Lock type.

        * dfg/DFGWorklist.cpp:
        (JSC::DFG::Worklist::Worklist):
        * dfg/DFGWorklist.h:
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        * heap/Heap.h:
        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::JITWorklist):
        * jit/JITWorklist.h:
        * runtime/VMTraps.cpp:
        (JSC::VMTraps::VMTraps):
        * runtime/VMTraps.h:
        * wasm/WasmWorklist.cpp:
        (JSC::Wasm::Worklist::Worklist):
        * wasm/WasmWorklist.h:

2021-05-26  Tadeu Zagallo  <tzagallo@apple.com>

        Merge all the JIT worklists into a shared worklist
        https://bugs.webkit.org/show_bug.cgi?id=226207

        Reviewed by Saam Barati.

        Delete the DFG and FTL worklists and refactor JITWorklist to handle the compilation
        for all tiers. This reduces the total number of compiler threads while allowing each
        tier to use more threads whenever necessary. The default configuration is for the
        worklist to have 3 threads, baseline can use up to all 3 threads and DFG and FTL follow
        the previous limits set through JSC::Options. Right now, the worklist will only do work
        on upper tiers when all lower tiers have no pending tasks or have exceeded the maximum
        number of concurrent compilations. i.e. by default we only DFG compile when there are
        no baseline tasks in the queue and we only FTL compile when we either have no DFG tasks
        in the queue OR there are already 2 DFG compilations in progress.

        * API/JSVirtualMachine.mm:
        (+[JSVirtualMachine setNumberOfDFGCompilerThreads:]):
        (+[JSVirtualMachine setNumberOfFTLCompilerThreads:]):
        * API/tests/testapi.mm:
        (runJITThreadLimitTests):
        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::checkIfOptimizationThresholdReached):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCommon.h:
        (JSC::DFG::verboseCompilationEnabled):
        (JSC::DFG::logCompilationChanges):
        (JSC::DFG::shouldDumpGraphAtEachPhase):
        (JSC::DFG::shouldDumpDisassembly):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compileImpl):
        (JSC::DFG::compile):
        * dfg/DFGDriver.h:
        * dfg/DFGGraph.h:
        * dfg/DFGGraphSafepoint.h:
        * dfg/DFGOSRAvailabilityAnalysisPhase.cpp:
        (JSC::DFG::OSRAvailabilityAnalysisPhase::run):
        * dfg/DFGOSREntrypointCreationPhase.cpp:
        (JSC::DFG::OSREntrypointCreationPhase::run):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::triggerFTLReplacementCompile):
        (JSC::DFG::tierUpCommon):
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::Plan):
        (JSC::DFG::Plan::codeSize const):
        (JSC::DFG::Plan::finalizeInGC):
        (JSC::DFG::Plan::notifyReady):
        (JSC::DFG::Plan::cancel):
        (JSC::DFG::Plan::compileInThreadImpl):
        (JSC::DFG::Plan::finalize):
        (JSC::DFG::Plan::iterateCodeBlocksForGC):
        (JSC::DFG::Plan::checkLivenessAndVisitChildren):
        (JSC::DFG::Plan::isKnownToBeLiveDuringGC):
        (JSC::DFG::Plan::isKnownToBeLiveAfterGC):
        * dfg/DFGPlan.h:
        * dfg/DFGPlanInlines.h: Removed.
        * dfg/DFGTierUpCheckInjectionPhase.cpp:
        (JSC::DFG::TierUpCheckInjectionPhase::run):
        * dfg/DFGWorklist.cpp: Removed.
        * dfg/DFGWorklist.h: Removed.
        * dfg/DFGWorklistInlines.h: Removed.
        * ftl/FTLCompile.h:
        * ftl/FTLLink.cpp:
        (JSC::FTL::link):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::lower):
        (JSC::FTL::DFG::LowerDFGToB3::buildExitArguments):
        * ftl/FTLState.cpp:
        (JSC::FTL::State::State):
        * ftl/FTLState.h:
        (JSC::FTL::verboseCompilationEnabled):
        (JSC::FTL::shouldDumpDisassembly):
        * heap/Heap.cpp:
        (JSC::Heap::completeAllJITPlans):
        (JSC::Heap::iterateExecutingAndCompilingCodeBlocks):
        (JSC::Heap::removeDeadCompilerWorklistEntries):
        (JSC::Heap::stopThePeriphery):
        (JSC::Heap::suspendCompilerThreads):
        (JSC::Heap::resumeCompilerThreads):
        (JSC::Heap::addCoreConstraints):
        * heap/Heap.h:
        * heap/RootMarkReason.h:
        * jit/JIT.cpp:
        (JSC::JIT::compileAndLinkWithoutFinalizing):
        (JSC::JIT::codeSize const):
        (JSC::JIT::compileTimeStats):
        * jit/JIT.h:
        * jit/JITBaselinePlan.cpp: Copied from Source/JavaScriptCore/ftl/FTLState.cpp.
        (JSC::JITBaselinePlan::JITBaselinePlan):
        (JSC::JITBaselinePlan::compileInThreadImpl):
        (JSC::JITBaselinePlan::codeSize const):
        (JSC::JITBaselinePlan::finalize):
        * jit/JITBaselinePlan.h: Copied from Source/JavaScriptCore/dfg/DFGScannable.h.
        * jit/JITCompilationKey.cpp: Renamed from Source/JavaScriptCore/dfg/DFGCompilationKey.cpp.
        (JSC::JITCompilationKey::dump const):
        * jit/JITCompilationKey.h: Renamed from Source/JavaScriptCore/dfg/DFGCompilationKey.h.
        (JSC::JITCompilationKey::JITCompilationKey):
        (JSC::JITCompilationKey::operator! const):
        (JSC::JITCompilationKey::isHashTableDeletedValue const):
        (JSC::JITCompilationKey::mode const):
        (JSC::JITCompilationKey::operator== const):
        (JSC::JITCompilationKey::hash const):
        (JSC::JITCompilationKeyHash::hash):
        (JSC::JITCompilationKeyHash::equal):
        * jit/JITCompilationMode.cpp: Renamed from Source/JavaScriptCore/dfg/DFGCompilationMode.cpp.
        (WTF::printInternal):
        * jit/JITCompilationMode.h: Renamed from Source/JavaScriptCore/dfg/DFGCompilationMode.h.
        (JSC::isFTL):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jit/JITPlan.cpp: Added.
        (JSC::JITPlan::JITPlan):
        (JSC::JITPlan::cancel):
        (JSC::JITPlan::notifyCompiling):
        (JSC::JITPlan::notifyReady):
        (JSC::JITPlan::tier const):
        (JSC::JITPlan::key):
        (JSC::JITPlan::isKnownToBeLiveAfterGC):
        (JSC::JITPlan::isKnownToBeLiveDuringGC):
        (JSC::JITPlan::iterateCodeBlocksForGC):
        (JSC::JITPlan::checkLivenessAndVisitChildren):
        (JSC::JITPlan::computeCompileTimes const):
        (JSC::JITPlan::reportCompileTimes const):
        (JSC::JITPlan::compileInThread):
        * jit/JITPlan.h: Added.
        (JSC::JITPlan::~JITPlan):
        (JSC::JITPlan::vm const):
        (JSC::JITPlan::codeBlock const):
        (JSC::JITPlan::thread const):
        (JSC::JITPlan::mode const):
        (JSC::JITPlan::stage const):
        (JSC::JITPlan::isFTL const):
        (JSC::JITPlan::finalizeInGC):
        * jit/JITPlanStage.h: Renamed from Source/JavaScriptCore/dfg/DFGThreadData.cpp.
        * jit/JITSafepoint.cpp: Renamed from Source/JavaScriptCore/dfg/DFGSafepoint.cpp.
        (JSC::Safepoint::Safepoint):
        (JSC::Safepoint::~Safepoint):
        (JSC::Safepoint::begin):
        (JSC::Safepoint::cancel):
        * jit/JITSafepoint.h: Renamed from Source/JavaScriptCore/dfg/DFGSafepoint.h.
        * jit/JITScannable.h: Copied from Source/JavaScriptCore/dfg/DFGScannable.h.
        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::JITWorklist):
        (JSC::JITWorklist::~JITWorklist):
        (JSC::JITWorklist::existingGlobalWorklistOrNull):
        (JSC::JITWorklist::ensureGlobalWorklist):
        (JSC::JITWorklist::enqueue):
        (JSC::JITWorklist::queueLength const):
        (JSC::JITWorklist::suspendAllThreads):
        (JSC::JITWorklist::resumeAllThreads):
        (JSC::JITWorklist::compilationState):
        (JSC::JITWorklist::completeAllReadyPlansForVM):
        (JSC::JITWorklist::waitUntilAllPlansForVMAreReady):
        (JSC::JITWorklist::completeAllPlansForVM):
        (JSC::JITWorklist::cancelAllPlansForVM):
        (JSC::JITWorklist::removeDeadPlans):
        (JSC::JITWorklist::setMaximumNumberOfConcurrentDFGCompilations):
        (JSC::JITWorklist::setMaximumNumberOfConcurrentFTLCompilations):
        (JSC::JITWorklist::visitWeakReferences):
        (JSC::JITWorklist::dump const):
        (JSC::JITWorklist::removeAllReadyPlansForVM):
        (JSC::JITWorklist::removeMatchingPlansForVM):
        * jit/JITWorklist.h:
        (JSC::JITWorklist::static_cast<size_t>):
        * jit/JITWorklistInlines.h: Renamed from Source/JavaScriptCore/dfg/DFGScannable.h.
        (JSC::JITWorklist::iterateCodeBlocksForGC):
        * jit/JITWorklistThread.cpp: Added.
        (JSC::JITWorklistThread::JITWorklistThread):
        (JSC::JITWorklistThread::name const):
        (JSC::JITWorklistThread::poll):
        (JSC::JITWorklistThread::work):
        (JSC::JITWorklistThread::threadDidStart):
        (JSC::JITWorklistThread::threadIsStopping):
        * jit/JITWorklistThread.h: Renamed from Source/JavaScriptCore/dfg/DFGThreadData.h.
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::jitCompileAndSetHeuristics):
        * runtime/OptionsList.h:
        * runtime/VM.cpp:
        (JSC::VM::~VM):

2021-05-25  Fujii Hironori  <Hironori.Fujii@sony.com>

        Clang can't compile Optional<GPRTemporary> since r278035 because GPRTemporary has non-const copy constructor
        https://bugs.webkit.org/show_bug.cgi?id=226251

        Reviewed by Chris Dumez.

        WinCairo clang-cl builds reported a compilation error since r278035.
        > include\optional(95,5): error: the parameter for this explicitly-defaulted copy constructor is const, but a member or base requires it to be non-const

        * dfg/DFGSpeculativeJIT.h: Deleted the const copy ctor instead of the non-const copy ctor.

2021-05-25  Chris Dumez  <cdumez@apple.com>

        Use UncheckedLock less in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=226212

        Reviewed by Saam Barati.

        Use UncheckedLock less in JavaScriptCore as it is being phased out in favor of Lock, which
        enables Clang thread safety analysis.

        * assembler/testmasm.cpp:
        * dfg/DFGCommon.cpp:
        * dynbench.cpp:
        * heap/Heap.cpp:
        * heap/Heap.h:
        * inspector/remote/socket/RemoteInspectorSocketEndpoint.h:
        * runtime/JSLock.cpp:
        * runtime/JSLock.h:
        * runtime/VM.h:

2021-05-25  Devin Rousso  <drousso@apple.com>

        [Modern Media Controls] REGRESSION(r254389) media controls needs the full list of language preferences for ordering tracks
        https://bugs.webkit.org/show_bug.cgi?id=226038

        Reviewed by Myles C. Maxfield and Eric Carlson.

        Media controls need access to the full list of language preferences in order to properly
        sort/order the list of tracks in the controls UI. For example, if a `<video>` has subtitles
        for English, Spanish, and French, and the user has English (default) and French (alternate)
        configured in the Language & Region view of System Preferences on macOS, WebKit should order
        the subtitles list English, French, and then Spanish.

        * shell/playstation/TestShell.cpp:
        (preTest):
        Instead of propagating the override, just clear it out.

2021-05-25  Chris Dumez  <cdumez@apple.com>

        Stop using UncheckedLock in JSC::PerfLog
        https://bugs.webkit.org/show_bug.cgi?id=226209

        Reviewed by Saam Barati.

        Stop using UncheckedLock in JSC::PerfLog and use Lock instead to benefit from Clang thread
        safety analysis.

        * assembler/PerfLog.cpp:
        (JSC::PerfLog::PerfLog):
        (JSC::PerfLog::write):
        (JSC::PerfLog::flush):
        (JSC::PerfLog::log):
        * assembler/PerfLog.h:

2021-05-24  Darin Adler  <darin@apple.com>

        Switch from WTF::Optional to std::optional
        https://bugs.webkit.org/show_bug.cgi?id=211674

        Reviewed by Chris Dumez.

        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::initializeCollator): Use JSObject* instead of
        Optional<JSObject&>.
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::toDateTimeOptionsAnyDate): Ditto.
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat): Ditto.
        * runtime/IntlDisplayNames.cpp:
        (JSC::IntlDisplayNames::initializeDisplayNames): Ditto.
        * runtime/IntlListFormat.cpp:
        (JSC::IntlListFormat::initializeListFormat): Ditto.
        * runtime/IntlLocale.cpp:
        (JSC::IntlLocale::initializeLocale): Ditto.
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::initializeNumberFormat): Ditto.
        * runtime/IntlNumberFormat.h: Ditto.
        * runtime/IntlNumberFormatInlines.h:
        (JSC::setNumberFormatDigitOptions): Ditto.
        * runtime/IntlObject.cpp:
        (JSC::intlBooleanOption): Ditto.
        (JSC::intlStringOption): Ditto.
        (JSC::intlNumberOption): Ditto.
        (JSC::supportedLocales): Ditto.
        * runtime/IntlObject.h: Ditto.
        * runtime/IntlObjectInlines.h:
        (JSC::intlOption): Ditto.
        (JSC::intlGetOptionsObject): Ditto.
        (JSC::intlCoerceOptionsToObject): Ditto.
        * runtime/IntlPluralRules.cpp:
        (JSC::IntlPluralRules::initializePluralRules): Ditto.
        * runtime/IntlPluralRules.h: Ditto.
        * runtime/IntlRelativeTimeFormat.cpp:
        (JSC::IntlRelativeTimeFormat::initializeRelativeTimeFormat): Ditto.
        * runtime/IntlSegmenter.cpp:
        (JSC::IntlSegmenter::initializeSegmenter): Ditto.

2021-05-25  Saam Barati  <sbarati@apple.com>

        Finalize DFG/FTL code refs on the compiler threads
        https://bugs.webkit.org/show_bug.cgi?id=226096

        Reviewed by Mark Lam.

        Previously, link tasks that ran via the addLinkTask API were guaranteed to be
        called on the main thread. This is no longer the case. Most link tasks are
        happy running on a background thread, since all they're really doing is
        linking branches/calls or grabbing labels. However, a few users of addLinkTask were
        relying on it running on the main thread. For those users, there is a new
        addMainThreadFinalizationTask API, which is now used instead.

        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::~LinkBuffer):
        (JSC::LinkBuffer::runMainThreadFinalizationTasks):
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::cancel):
        (JSC::LinkBuffer::addMainThreadFinalizationTask):
        (JSC::LinkBuffer::~LinkBuffer): Deleted.
        * dfg/DFGFailedFinalizer.cpp:
        (JSC::DFG::FailedFinalizer::finalizeFunction): Deleted.
        * dfg/DFGFailedFinalizer.h:
        * dfg/DFGFinalizer.h:
        (JSC::DFG::Finalizer::cancel):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compile):
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGJITFinalizer.cpp:
        (JSC::DFG::JITFinalizer::cancel):
        (JSC::DFG::JITFinalizer::finalize):
        (JSC::DFG::JITFinalizer::finalizeFunction): Deleted.
        (JSC::DFG::JITFinalizer::finalizeCommon): Deleted.
        * dfg/DFGJITFinalizer.h:
        * dfg/DFGLazyJSValue.cpp:
        (JSC::DFG::LazyJSValue::emit const):
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::finalizeWithoutNotifyingCallback):
        (JSC::DFG::Plan::cancel):
        * ftl/FTLJITFinalizer.cpp:
        (JSC::FTL::JITFinalizer::finalize):
        (JSC::FTL::JITFinalizer::cancel):
        (JSC::FTL::JITFinalizer::finalizeFunction): Deleted.
        (JSC::FTL::JITFinalizer::finalizeCommon): Deleted.
        * ftl/FTLJITFinalizer.h:
        * ftl/FTLLink.cpp:
        (JSC::FTL::link):
        * ftl/FTLPatchpointExceptionHandle.cpp:
        (JSC::FTL::PatchpointExceptionHandle::scheduleExitCreationForUnwind):
        * ftl/FTLThunks.h:
        (JSC::FTL::Thunks::getSlowPathCallThunk):
        Add a lock to FTLThunks since we now may be calling into it from more than
        one thread at a time.

        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitVirtualCall):
        (JSC::AssemblyHelpers::emitUnlinkedVirtualCall): Deleted.
        * jit/AssemblyHelpers.h:
        * jit/JIT.cpp:
        (JSC::JIT::finalizeOnMainThread):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileCallEvalSlowCase):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileCallEvalSlowCase):

2021-05-25  Mark Lam  <mark.lam@apple.com>

        Reduce Baseline JIT emitted code size for op_jfalse, op_jtrue, op_get_from_scope, op_resolve_scope.
        https://bugs.webkit.org/show_bug.cgi?id=226107

        Reviewed by Saam Barati.

        Benchmarking with JetStream2 and Speedometer2 on M1 Mac shows that performance is
        neutral.

        This patch reduces Baseline JIT emitted code side on a run of JetStream2 CLI by
        another ~6.6M:
                        Base                     New                      Diff

           BaselineJIT: 64955116 (61.946026 MB)  57991704 (55.305199 MB)  0.89x (reduction)
                   DFG: 36382012 (34.696590 MB)  36540652 (34.847881 MB)  1.00x
                 Thunk: 23217692 (22.142117 MB)  23115852 (22.044994 MB)  1.00x
           InlineCache: 22228140 (21.198406 MB)  22262572 (21.231243 MB)  1.00x
                   FTL: 6025320 (5.746193 MB)    6164332 (5.878765 MB)    1.02x
                  Wasm: 2327604 (2.219776 MB)    2297036 (2.190624 MB)    0.99x
               YarrJIT: 1547172 (1.475498 MB)    1522584 (1.452049 MB)    0.98x
                CSSJIT: 0                        0
         Uncategorized: 0                        0

        Cumulative diff since the start of this effort to reduce Baseline JIT code size:

                        Base                     New                      Diff

           BaselineJIT: 89089964 (84.962811 MB)  57991704 (55.305199 MB)  0.65x (reduction)
                   DFG: 39117360 (37.305222 MB)  36540652 (34.847881 MB)  0.93x (reduction)
                 Thunk: 23230968 (22.154778 MB)  23115852 (22.044994 MB)  1.00x
           InlineCache: 22027416 (21.006981 MB)  22262572 (21.231243 MB)  1.01x
                   FTL: 6575772 (6.271145 MB)    6164332 (5.878765 MB)    0.94x (reduction)
                  Wasm: 2302724 (2.196049 MB)    2297036 (2.190624 MB)    1.00x
               YarrJIT: 1538956 (1.467663 MB)    1522584 (1.452049 MB)    0.99x
                CSSJIT: 0                        0
         Uncategorized: 0                        0

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::offsetInMetadataTable):
        (JSC::CodeBlock::offsetOfMetadataTable):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::branchIfValue):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::branchIfTruthy):
        (JSC::AssemblyHelpers::branchIfFalsey):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::valueIsFalseyGenerator):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::valueIsTruthyGenerator):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jit/JITOperations.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_resolve_scope):
        (JSC::JIT::generateOpResolveScopeThunk):
        (JSC::JIT::slow_op_resolve_scopeGenerator):
        (JSC::JIT::emitSlow_op_get_from_scope):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::generateOpGetFromScopeThunk):
        (JSC::JIT::slow_op_get_from_scopeGenerator):
        * jit/ThunkGenerators.cpp:
        (JSC::popThunkStackPreservesAndHandleExceptionGenerator):
        * runtime/GetPutInfo.h:
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::offsetOfGlobalLexicalEnvironment):
        (JSC::JSGlobalObject::offsetOfGlobalLexicalBindingEpoch):

2021-05-24  Robin Morisset  <rmorisset@apple.com>

        When running with --reportTotalPhaseTimes=1, we should also log the max time in a phase
        https://bugs.webkit.org/show_bug.cgi?id=226196

        Reviewed by Saam Barati.

        It is especially useful when looking at DFG phases, since the GC may have to wait for them to finish.

        * tools/CompilerTimingScope.cpp:

2021-05-24  Saam Barati  <sbarati@apple.com>

        Allow CTI stubs to be generated off the main thread
        https://bugs.webkit.org/show_bug.cgi?id=226180

        Reviewed by Mark Lam.

        We make this work by tracking if we're a compiler thread when generating
        the CTI stub. If so, it means that the main thread needs to issue a
        crossModifyingCodeFence when it's going to run the CTI stub for the first
        time.
        
        This patch also does away with pre-generating thunks. Thunks can now generate
        other thunks while they're running. To do this, we make JITThunks lock a
        recursive lock. The reason this is ok is that we don't have any recursive
        thunks in the thunk graph. It's a DAG.

        * dfg/DFGDriver.cpp:
        (JSC::DFG::compileImpl):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::op_check_traps_handlerGenerator):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::slow_op_get_from_scopeGenerator):
        (JSC::JIT::slow_op_put_to_scopeGenerator):
        * jit/JITThunks.cpp:
        (JSC::JITThunks::ctiInternalFunctionCall):
        (JSC::JITThunks::ctiInternalFunctionConstruct):
        (JSC::JITThunks::ctiStubImpl):
        (JSC::JITThunks::ctiStub):
        (JSC::JITThunks::ctiSlowPathFunctionStub):
        (JSC::JITThunks::existingCTIStub): Deleted.
        (JSC::JITThunks::preinitializeCTIThunks): Deleted.
        * jit/JITThunks.h:
        * jit/SlowPathCall.cpp:
        (JSC::JITSlowPathCall::generateThunk):
        * jit/ThunkGenerators.cpp:
        (JSC::popThunkStackPreservesAndHandleExceptionGenerator):
        (JSC::checkExceptionGenerator):
        (JSC::virtualThunkFor):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        (JSC::VM::getCTIInternalFunctionTrampolineFor):
        * runtime/VM.h:

2021-05-24  Darin Adler  <darin@apple.com>

        Remove StringBuilder::appendLiteral
        https://bugs.webkit.org/show_bug.cgi?id=226137

        Reviewed by Chris Dumez.

        * API/tests/PingPongStackOverflowTest.cpp:
        (PingPongStackOverflowObject_hasInstance): Use append instead of appendLiteral.

        * bindings/ScriptFunctionCall.cpp:
        (Deprecated::ScriptCallArgumentHandler::appendArgument): Remove unnecessary cast
        from const char* to String, which defeats optimization and has no benefit.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::ArrayPatternNode::toString const): Use append instead of appendLiteral.
        (JSC::RestParameterNode::toString const): Ditto.

        * heap/HeapSnapshotBuilder.cpp:
        (JSC::HeapSnapshotBuilder::json): Use append instead of appendLiteral.
        Removed unnecesary use of appendQuotedJSONString to append the result of
        snapshotTypeToString and edgeTypeToString, which return a const char* that
        never contains characters that require special quoting consideration, so
        can be appended efficiently with the normal append function.

        * inspector/agents/InspectorAuditAgent.cpp:
        (Inspector::InspectorAuditAgent::run): Use makeString instead of StringBuilder.

        * inspector/agents/InspectorConsoleAgent.cpp: Use auto for the result of makeString.

        * jsc.cpp: Use appned instead of appendLiteral.

        * parser/ParserArena.cpp:
        (JSC::IdentifierArena::makePrivateIdentifier): Use auto for the result of makeString.

        * runtime/ConsoleClient.cpp:
        (JSC::ConsoleClient::printConsoleMessage): Use append instead of appendLiteral.
        Also use variadic append when practical for better efficiency.
        (JSC::ConsoleClient::printConsoleMessageWithArguments): Ditto.
        * runtime/DateConversion.cpp:
        (JSC::formatDateTime): Ditto.

        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::sanitizedToString): Use makeString instead of StringBuilder.

        * runtime/ExceptionHelpers.cpp:
        (JSC::notAFunctionSourceAppender): Use append instead of appendLiteral.
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat): Ditto.
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::initializeNumberFormat): Ditto.

        * runtime/JSCustomGetterFunction.cpp:
        (JSC::JSCustomGetterFunction::create): Use auto and cut down on reference count
        churn by using passing the StringImpl to makeString.
        * runtime/JSCustomSetterFunction.cpp:
        (JSC::JSCustomSetterFunction::create): Ditto.

        * runtime/JSGlobalObjectFunctions.cpp: Use more const and use variadic
        append for better efficiency.

        * runtime/JSONObject.cpp:
        (JSC::Stringifier::appendStringifiedValue): Use append instead of appendLiteral.
        (JSC::Stringifier::Holder::appendNextProperty): Ditto.

        * runtime/JSStringJoiner.h: Deleted unused appendLiteral function.
        Unrelated to StringBuilder::appendLiteral, but dead code.

        * runtime/Options.cpp:
        (JSC::Options::dumpOption): Use append instead of appendLiteral.
        * runtime/RegExpPrototype.cpp:
        (JSC::appendLineTerminatorEscape<UChar>): Ditto.

        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::reportTopFunctions): Use auto for the result of makeString.
        (JSC::SamplingProfiler::reportTopBytecodes): Ditto.

        * runtime/TypeProfiler.cpp:
        (JSC::TypeProfiler::typeInformationForExpressionAtOffset): Use append instead of
        appendLiteral.

        * runtime/TypeSet.cpp:
        (JSC::TypeSet::dumpTypes const): Use append instead of appendLiteral.
        (JSC::TypeSet::toJSONString const): Ditto.
        (JSC::StructureShape::propertyHash): Ditto.
        (JSC::StructureShape::toJSONString const): Ditto.

2021-05-24  Keith Miller  <keith_miller@apple.com>

        Unreviewed, revert r276610 because it causes a 1% PLT regression.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitChildren):
        (JSC::CodeBlock::JITData::size const): Deleted.
        * bytecode/CodeBlock.h:
        * jit/JITCodeMap.h:
        (JSC::JITCodeMap::memorySize const): Deleted.

2021-05-24  Chris Dumez  <cdumez@apple.com>

        Drop CheckedLock / CheckedCondition aliases
        https://bugs.webkit.org/show_bug.cgi?id=226176

        Reviewed by Kate Cheney.

        Drop CheckedLock / CheckedCondition aliases now that they are the default.

        * API/JSVirtualMachine.mm:
        * API/glib/JSCVirtualMachine.cpp:
        * assembler/PerfLog.h:
        * assembler/testmasm.cpp:
        * bytecode/StructureStubInfo.h:
        * bytecode/SuperSampler.cpp:
        * dfg/DFGCommon.cpp:
        * dfg/DFGCommonData.cpp:
        * dfg/DFGPlan.h:
        * dfg/DFGThreadData.h:
        * dfg/DFGWorklist.cpp:
        (JSC::DFG::Worklist::Worklist):
        * dfg/DFGWorklist.h:
        * disassembler/Disassembler.cpp:
        * dynbench.cpp:
        * heap/BlockDirectory.cpp:
        (JSC::BlockDirectory::parallelNotEmptyBlockSource):
        * heap/BlockDirectory.h:
        (JSC::BlockDirectory::bitvectorLock):
        * heap/CodeBlockSet.h:
        (JSC::CodeBlockSet::getLock):
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        * heap/Heap.h:
        * heap/IsoSubspacePerVM.h:
        * heap/MarkedSpace.h:
        (JSC::MarkedSpace::directoryLock):
        * heap/MarkingConstraintSolver.h:
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::donateKnownParallel):
        * heap/SlotVisitor.h:
        * inspector/remote/socket/RemoteInspectorConnectionClient.h:
        * inspector/remote/socket/RemoteInspectorSocketEndpoint.h:
        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::getLock const):
        (JSC::dumpJITMemory):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocatorBase::getLock const):
        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::JITWorklist):
        * jit/JITWorklist.h:
        * jsc.cpp:
        * profiler/ProfilerDatabase.h:
        * runtime/ConcurrentJSLock.h:
        * runtime/DeferredWorkTimer.h:
        * runtime/JSLock.h:
        * runtime/SamplingProfiler.cpp:
        (JSC::FrameWalker::FrameWalker):
        (JSC::CFrameWalker::CFrameWalker):
        (JSC::SamplingProfiler::takeSample):
        * runtime/SamplingProfiler.h:
        (JSC::SamplingProfiler::getLock):
        * runtime/VM.h:
        * runtime/VMTraps.cpp:
        (JSC::VMTraps::invalidateCodeBlocksOnStack):
        (JSC::VMTraps::VMTraps):
        * runtime/VMTraps.h:
        * tools/FunctionOverrides.h:
        * tools/VMInspector.cpp:
        (JSC::ensureIsSafeToLock):
        * tools/VMInspector.h:
        (JSC::VMInspector::getLock):
        * wasm/WasmCalleeRegistry.h:
        (JSC::Wasm::CalleeRegistry::getLock):
        * wasm/WasmPlan.h:
        * wasm/WasmStreamingCompiler.h:
        * wasm/WasmThunks.h:
        * wasm/WasmWorklist.cpp:
        (JSC::Wasm::Worklist::Worklist):
        * wasm/WasmWorklist.h:

2021-05-23  Chris Dumez  <cdumez@apple.com>

        Make CheckedLock the default Lock
        https://bugs.webkit.org/show_bug.cgi?id=226157

        Reviewed by Darin Adler.

        Make CheckedLock the default Lock so that we get more benefits from Clang
        Thread Safety Analysis. Note that CheckedLock 100% relies on the existing
        Lock implementation and merely adds the clang anotations for thread 
        safety.

        That this patch does is:
        1. Rename the Lock class to UncheckedLock
        2. Rename the CheckedLock class to Lock
        3. Rename the Condition class to UncheckedCondition
        4. Rename the CheckedCondition class to Condition
        5. Update the types of certain variables from Lock / Condition to
           UncheckedLock / UncheckedCondition if I got a build failure. Build 
           failures are usually caused by the following facts:
           - Locker<CheckedLock> doesn't subclass AbstractLocker which a lot of
             JSC code passes as argument
           - Locker<CheckedLock> has no move constructor
           - Locker<CheckedLock> cannot be constructed from a lock pointer, only
             a reference

        For now, CheckedLock and CheckedCondition remain as aliases to Lock and 
        Condition, in their respective CheckedLock.h / CheckedCondition.h headers.
        I will drop them in a follow-up to reduce patch size.

        I will also follow-up to try and get rid of as much usage of UncheckedLock
        and UncheckedCondition as possible. I did not try very hard in this patch
        to reduce patch size. 

        * assembler/testmasm.cpp:
        * dfg/DFGCommon.cpp:
        * dfg/DFGThreadData.h:
        * dfg/DFGWorklist.cpp:
        (JSC::DFG::Worklist::Worklist):
        * dfg/DFGWorklist.h:
        * dynbench.cpp:
        * heap/BlockDirectory.h:
        (JSC::BlockDirectory::bitvectorLock):
        * heap/CodeBlockSet.h:
        (JSC::CodeBlockSet::getLock):
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        * heap/Heap.h:
        * heap/MarkedSpace.h:
        (JSC::MarkedSpace::directoryLock):
        * heap/MarkingConstraintSolver.h:
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::donateKnownParallel):
        * heap/SlotVisitor.h:
        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::getLock const):
        (JSC::dumpJITMemory):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocatorBase::getLock const):
        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::JITWorklist):
        * jit/JITWorklist.h:
        * jsc.cpp:
        * profiler/ProfilerDatabase.h:
        * runtime/ConcurrentJSLock.h:
        * runtime/DeferredWorkTimer.h:
        * runtime/JSLock.h:
        * runtime/SamplingProfiler.cpp:
        (JSC::FrameWalker::FrameWalker):
        (JSC::CFrameWalker::CFrameWalker):
        (JSC::SamplingProfiler::takeSample):
        * runtime/SamplingProfiler.h:
        (JSC::SamplingProfiler::getLock):
        * runtime/VM.h:
        * runtime/VMTraps.cpp:
        (JSC::VMTraps::invalidateCodeBlocksOnStack):
        (JSC::VMTraps::VMTraps):
        * runtime/VMTraps.h:
        * tools/FunctionOverrides.h:
        * tools/VMInspector.cpp:
        (JSC::ensureIsSafeToLock):
        * tools/VMInspector.h:
        (JSC::VMInspector::getLock):
        * wasm/WasmCalleeRegistry.h:
        (JSC::Wasm::CalleeRegistry::getLock):
        * wasm/WasmPlan.h:
        * wasm/WasmStreamingCompiler.h:
        * wasm/WasmThunks.h:
        * wasm/WasmWorklist.cpp:
        (JSC::Wasm::Worklist::Worklist):
        * wasm/WasmWorklist.h:

2021-05-23  Mark Lam  <mark.lam@apple.com>

        Remove some now invalid tests in testmasm.
        https://bugs.webkit.org/show_bug.cgi?id=226155

        Reviewed by Yusuke Suzuki.

        The ARM64E tests were checking that cageConditionallyAndUntag() would fail to
        produce a caged pointer if fed invalid values.  These tests are no longer feasible
        because on ARM64E, feeding cageConditionallyAndUntag() invalid values will now
        result in a crash.  This patch removes these tests.

        * assembler/testmasm.cpp:
        (JSC::testCagePreservesPACFailureBit):

2021-05-23  Mark Lam  <mark.lam@apple.com>

        Remove ENABLE(MASM_PROBE) flag.
        https://bugs.webkit.org/show_bug.cgi?id=226154

        Reviewed by Yusuke Suzuki.

        * assembler/MacroAssembler.cpp:
        * assembler/MacroAssembler.h:
        * assembler/MacroAssemblerARM64.cpp:
        * assembler/MacroAssemblerARMv7.cpp:
        (JSC::MacroAssembler::probe):
        * assembler/MacroAssemblerMIPS.cpp:
        (JSC::MacroAssembler::probe):
        * assembler/MacroAssemblerPrinter.cpp:
        * assembler/MacroAssemblerPrinter.h:
        * assembler/MacroAssemblerX86Common.cpp:
        (JSC::MacroAssembler::probe):
        * assembler/ProbeContext.cpp:
        * assembler/ProbeContext.h:
        * assembler/ProbeFrame.h:
        * assembler/ProbeStack.cpp:
        * assembler/ProbeStack.h:
        * assembler/testmasm.cpp:
        (JSC::isSpecialGPR):
        (JSC::testClearBits64WithMask):
        (JSC::testClearBits64WithMaskTernary):
        (JSC::testShiftAndAdd):
        (JSC::testProbeModifiesStackValues):
        (JSC::run):
        * b3/B3LowerToAir.cpp:
        * b3/air/AirPrintSpecial.cpp:
        * b3/air/AirPrintSpecial.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * tools/JSDollarVM.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION_WITH_ATTRIBUTES):

2021-05-23  Chris Dumez  <cdumez@apple.com>

        Use CheckedLock in even more places
        https://bugs.webkit.org/show_bug.cgi?id=226152

        Reviewed by Darin Adler.

        Use CheckedLock in even more places to benefit from Clang Thread Safety Analysis.

        * API/JSVirtualMachine.mm:
        (WTF_REQUIRES_LOCK):
        * API/glib/JSCVirtualMachine.cpp:
        * bytecode/StructureStubInfo.h:
        * bytecode/SuperSampler.cpp:
        * dfg/DFGCommonData.cpp:
        (JSC::DFG::CommonData::invalidate):
        (JSC::DFG::CommonData::~CommonData):
        (JSC::DFG::CommonData::installVMTrapBreakpoints):
        (JSC::DFG::codeBlockForVMTrapPC):
        * dfg/DFGPlan.h:
        (JSC::DFG::Plan::WTF_GUARDED_BY_LOCK):
        * disassembler/Disassembler.cpp:
        * heap/BlockDirectory.cpp:
        (JSC::BlockDirectory::parallelNotEmptyBlockSource):
        * heap/Heap.h:
        * heap/IsoSubspacePerVM.h:
        * inspector/remote/socket/RemoteInspectorConnectionClient.h:

2021-05-23  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed. Fix JSC Debug tests for r277926. 

        * jit/JITThunks.cpp:
        (JSC::JITThunks::preinitializeCTIThunks):
        Address oversight, made visible by the assertion added in r277850.

2021-05-23  Chris Dumez  <cdumez@apple.com>

        Drop WTF::tryHoldLock() as it is incompatible with Clang Thread Safety Analysis
        https://bugs.webkit.org/show_bug.cgi?id=226145

        Reviewed by Darin Adler.

        Drop WTF::tryHoldLock() as it is incompatible with Clang Thread Safety Analysis.
        Instead, use the following pattern which is supported:
        ```
        if (lock.tryLock()) {
            Locker locker { AdoptLock, lock };
            // ...
        }
        ```

        * heap/Heap.cpp:
        (JSC::Heap::resumeThePeriphery):
        * runtime/VMTraps.cpp:
        (JSC::VMTraps::tryInstallTrapBreakpoints):

2021-05-22  Mark Lam  <mark.lam@apple.com>

        Use singleton thunks for virtual calls.
        https://bugs.webkit.org/show_bug.cgi?id=226149
        rdar://problem/78357604

        Reviewed by Yusuke Suzuki.

        Change virtualThunkFor() to return 1 of 6 possible singleton thunks.
        These thunks are cached via vm.jitStubs->ctiStubs().

        This change saves us ~16M of executable JIT memory (for the unique thunks) on a
        single run of Speedometer2.  On an M1 Mac, switching to singleton thunks here also
        appears to be a 1.012x speed up on Speedometer2.  Performance is neutral on
        JetStream2.

        * jit/JITThunks.cpp:
        (JSC::JITThunks::ctiInternalFunctionCall):
        (JSC::JITThunks::ctiInternalFunctionConstruct):
        * jit/JITThunks.h:
        * jit/ThunkGenerators.cpp:
        (JSC::virtualThunkFor):
        (JSC::virtualThunkForRegularCall):
        (JSC::virtualThunkForRegularConstruct):
        (JSC::virtualThunkForTailCall):
        (JSC::virtualThunkForTailConstruct):
        (JSC::virtualThunkForConstructCall):
        (JSC::virtualThunkForConstructConstruct):
        * runtime/VM.cpp:
        (JSC::VM::getCTIInternalFunctionTrampolineFor):
        * runtime/VM.h:

2021-05-22  Mark Lam  <mark.lam@apple.com>

        Enhance Link Buffer stats to have more fine grain profiles, and to collect count information.
        https://bugs.webkit.org/show_bug.cgi?id=226151
        rdar://problem/78359436

        Reviewed by Yusuke Suzuki.

        And also add a total of the sizes.
        Also added $vm.clearLinkBufferStats() which resets all the stats to 0.

        Here's an example of that the new stats look like:

            Cummulative LinkBuffer profile sizes:
                       BaselineJIT: 61092032 (58.261902 MB) count 11621 avg size 5257
                               DFG: 35387904 (33.748535 MB) count 11143 avg size 3175
                       InlineCache: 19639155 (18.729358 MB) count 283890 avg size 69
                      VirtualThunk: 14256800 (13.596344 MB) count 43900 avg size 324
                        DFGOSRExit: 7636736 (7.282959 MB) count 5235 avg size 1458
                               FTL: 4927616 (4.699341 MB) count 5269 avg size 935
                              Wasm: 2134688 (2.035797 MB) count 847 avg size 2520
                           YarrJIT: 1320928 (1.259735 MB) count 2075 avg size 636
                        FTLOSRExit: 1084096 (1.033875 MB) count 417 avg size 2599
                         WasmThunk: 41408 (40.437500 KB) count 252 avg size 164
                          FTLThunk: 25088 (24.500000 KB) count 426 avg size 58
                     ExtraCTIThunk: 5984 (5.843750 KB) count 95 avg size 62
                  SpecializedThunk: 3456 (3.375000 KB) count 19 avg size 181
                             Thunk: 1760 (1.718750 KB) count 10 avg size 176
                BoundFunctionThunk: 864 count 3 avg size 288
                        LLIntThunk: 608 count 18 avg size 33
                          DFGThunk: 608 count 1 avg size 608
                       DFGOSREntry: 160 count 1 avg size 160
                        JumpIsland: 0
                            CSSJIT: 0
                     Uncategorized: 0
                             Total: 147559891 (140.724078 MB)

        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::performFinalization):
        (JSC::LinkBuffer::clearProfileStatistics):
        (JSC::LinkBuffer::dumpProfileStatistics):
        * assembler/LinkBuffer.h:
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGThunks.cpp:
        (JSC::DFG::osrExitGenerationThunkGenerator):
        (JSC::DFG::osrEntryThunkGenerator):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        * ftl/FTLThunks.cpp:
        (JSC::FTL::genericGenerationThunkGenerator):
        (JSC::FTL::slowPathCallThunkGenerator):
        * jit/ExecutableAllocator.cpp:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::op_ret_handlerGenerator):
        (JSC::JIT::op_throw_handlerGenerator):
        (JSC::JIT::op_enter_handlerGenerator):
        (JSC::JIT::op_check_traps_handlerGenerator):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::slow_op_get_by_val_prepareCallGenerator):
        (JSC::JIT::slow_op_get_private_name_prepareCallGenerator):
        (JSC::JIT::slow_op_put_by_val_prepareCallGenerator):
        (JSC::JIT::slow_op_put_private_name_prepareCallGenerator):
        (JSC::JIT::slow_op_del_by_id_prepareCallGenerator):
        (JSC::JIT::slow_op_del_by_val_prepareCallGenerator):
        (JSC::JIT::slow_op_get_by_id_prepareCallGenerator):
        (JSC::JIT::slow_op_get_by_id_with_this_prepareCallGenerator):
        (JSC::JIT::slow_op_put_by_id_prepareCallGenerator):
        (JSC::JIT::slow_op_get_from_scopeGenerator):
        (JSC::JIT::slow_op_put_to_scopeGenerator):
        * jit/SlowPathCall.cpp:
        (JSC::JITSlowPathCall::generateThunk):
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::finalize):
        * jit/ThunkGenerators.cpp:
        (JSC::handleExceptionGenerator):
        (JSC::handleExceptionWithCallFrameRollbackGenerator):
        (JSC::popThunkStackPreservesAndHandleExceptionGenerator):
        (JSC::checkExceptionGenerator):
        (JSC::virtualThunkFor):
        (JSC::boundFunctionCallGenerator):
        * llint/LLIntThunks.cpp:
        (JSC::LLInt::generateThunkWithJumpTo):
        (JSC::LLInt::generateThunkWithJumpToPrologue):
        (JSC::LLInt::generateThunkWithJumpToLLIntReturnPoint):
        (JSC::LLInt::getHostCallReturnValueThunk):
        (JSC::LLInt::createJSGateThunk):
        (JSC::LLInt::createWasmGateThunk):
        (JSC::LLInt::createTailCallGate):
        (JSC::LLInt::loopOSREntryGateThunk):
        (JSC::LLInt::entryOSREntryGateThunk):
        (JSC::LLInt::wasmOSREntryGateThunk):
        (JSC::LLInt::exceptionHandlerGateThunk):
        (JSC::LLInt::returnFromLLIntGateThunk):
        (JSC::LLInt::tagGateThunk):
        (JSC::LLInt::untagGateThunk):
        (JSC::LLInt::jitCagePtrThunk):
        * tools/JSDollarVM.cpp:
        (JSC::JSDollarVM::finishCreation):
        * wasm/WasmBinding.cpp:
        (JSC::Wasm::wasmToWasm):
        * wasm/WasmThunks.cpp:
        (JSC::Wasm::throwExceptionFromWasmThunkGenerator):
        (JSC::Wasm::throwStackOverflowFromWasmThunkGenerator):
        (JSC::Wasm::triggerOMGEntryTierUpThunkGenerator):
        * wasm/js/WasmToJS.cpp:
        (JSC::Wasm::wasmToJS):

2021-05-22  Ross Kirsling  <ross.kirsling@sony.com>

        Support Ergonomic Brand Checks proposal (`#x in obj`)
        https://bugs.webkit.org/show_bug.cgi?id=221093

        Reviewed by Caio Araujo Neponoceno de Lima.

        This patch implements the following Stage 3 proposal (behind a runtime option):
        https://github.com/tc39/proposal-private-fields-in-in

        Specifically, it extends the `in` keyword to allow the LHS to be a private name,
        thereby allowing users to implement Array.isArray-esque brand checks for their own classes
        *without* having to wrap a private member get in a try-catch.

        For example:
        ```
        class C {
            #x;
            static isC(obj) { return #x in obj; }
        }
        ```

        This is done by adding two new bytecode ops, HasPrivateName and HasPrivateBrand. For the moment,
        these are implemented without fast paths, as we should do so for InByVal first and then have these follow suit.

        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitHasPrivateName):
        (JSC::BytecodeGenerator::emitHasPrivateBrand):
        (JSC::BytecodeGenerator::emitCheckPrivateBrand):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::InNode::emitBytecode):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNodeType.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileHasPrivateName):
        (JSC::DFG::SpeculativeJIT::compileHasPrivateBrand):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileHasPrivateName):
        (JSC::FTL::DFG::LowerDFGToB3::compileHasPrivateBrand):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jit/JITOperations.h:
        * llint/LowLevelInterpreter.asm:
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createPrivateIdentifierNode):
        * parser/NodeConstructors.h:
        (JSC::PrivateIdentifierNode::PrivateIdentifierNode):
        * parser/Nodes.h:
        (JSC::ExpressionNode::isPrivateIdentifier const):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseBinaryExpression):
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createPrivateIdentifierNode):
        * parser/VariableEnvironment.h:
        * runtime/CommonSlowPaths.cpp:
        (JSC::JSC_DEFINE_COMMON_SLOW_PATH):
        * runtime/CommonSlowPaths.h:
        * runtime/JSObject.h:
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::hasPrivateField):
        (JSC::JSObject::hasPrivateBrand):
        (JSC::JSObject::checkPrivateBrand):
        * runtime/OptionsList.h:

2021-05-22  Chris Dumez  <cdumez@apple.com>

        Replace LockHolder with Locker in local variables
        https://bugs.webkit.org/show_bug.cgi?id=226133

        Reviewed by Darin Adler.

        Replace LockHolder with Locker in local variables. It is shorter and it allows switching the lock
        type more easily since the compiler with deduce the lock type T for Locker<T>.

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::deletePrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::visitChildren):
        * API/JSValue.mm:
        (handerForStructTag):
        * API/tests/testapi.cpp:
        (testCAPIViaCpp):
        * assembler/testmasm.cpp:
        (JSC::run):
        * b3/air/testair.cpp:
        * b3/testb3_1.cpp:
        (run):
        * bytecode/DirectEvalCodeCache.cpp:
        (JSC::DirectEvalCodeCache::setSlow):
        (JSC::DirectEvalCodeCache::clear):
        (JSC::DirectEvalCodeCache::visitAggregateImpl):
        * bytecode/SuperSampler.cpp:
        (JSC::initializeSuperSampler):
        (JSC::resetSuperSamplerState):
        (JSC::printSuperSamplerState):
        (JSC::enableSuperSampler):
        (JSC::disableSuperSampler):
        * dfg/DFGCommonData.cpp:
        (JSC::DFG::CommonData::invalidate):
        (JSC::DFG::CommonData::~CommonData):
        (JSC::DFG::CommonData::installVMTrapBreakpoints):
        (JSC::DFG::codeBlockForVMTrapPC):
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::cleanMustHandleValuesIfNecessary):
        * dfg/DFGWorklist.cpp:
        (JSC::DFG::Worklist::~Worklist):
        (JSC::DFG::Worklist::finishCreation):
        (JSC::DFG::Worklist::isActiveForVM const):
        (JSC::DFG::Worklist::enqueue):
        (JSC::DFG::Worklist::compilationState):
        (JSC::DFG::Worklist::waitUntilAllPlansForVMAreReady):
        (JSC::DFG::Worklist::removeAllReadyPlansForVM):
        (JSC::DFG::Worklist::completeAllReadyPlansForVM):
        (JSC::DFG::Worklist::visitWeakReferences):
        (JSC::DFG::Worklist::removeDeadPlans):
        (JSC::DFG::Worklist::removeNonCompilingPlansForVM):
        (JSC::DFG::Worklist::queueLength):
        (JSC::DFG::Worklist::dump const):
        (JSC::DFG::Worklist::setNumberOfThreads):
        * dfg/DFGWorklistInlines.h:
        (JSC::DFG::Worklist::iterateCodeBlocksForGC):
        * disassembler/Disassembler.cpp:
        * heap/BlockDirectory.cpp:
        (JSC::BlockDirectory::addBlock):
        * heap/CodeBlockSetInlines.h:
        (JSC::CodeBlockSet::iterateCurrentlyExecuting):
        * heap/ConservativeRoots.cpp:
        (JSC::ConservativeRoots::add):
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::lastChanceToFinalize):
        (JSC::Heap::collectAsync):
        (JSC::Heap::runBeginPhase):
        (JSC::Heap::waitForCollector):
        (JSC::Heap::requestCollection):
        (JSC::Heap::notifyIsSafeToCollect):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::didReachTermination):
        * inspector/agents/InspectorScriptProfilerAgent.cpp:
        (Inspector::InspectorScriptProfilerAgent::startTracking):
        (Inspector::InspectorScriptProfilerAgent::trackingComplete):
        (Inspector::InspectorScriptProfilerAgent::stopSamplingWhenDisconnecting):
        * inspector/remote/RemoteConnectionToTarget.cpp:
        (Inspector::RemoteConnectionToTarget::setup):
        (Inspector::RemoteConnectionToTarget::sendMessageToTarget):
        (Inspector::RemoteConnectionToTarget::close):
        (Inspector::RemoteConnectionToTarget::targetClosed):
        * inspector/remote/RemoteInspector.cpp:
        (Inspector::RemoteInspector::registerTarget):
        (Inspector::RemoteInspector::unregisterTarget):
        (Inspector::RemoteInspector::updateTarget):
        (Inspector::RemoteInspector::updateClientCapabilities):
        (Inspector::RemoteInspector::setClient):
        (Inspector::RemoteInspector::setupFailed):
        (Inspector::RemoteInspector::setupCompleted):
        (Inspector::RemoteInspector::stop):
        * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:
        (Inspector::RemoteTargetHandleRunSourceGlobal):
        (Inspector::RemoteTargetQueueTaskOnGlobalQueue):
        (Inspector::RemoteTargetHandleRunSourceWithInfo):
        (Inspector::RemoteConnectionToTarget::setup):
        (Inspector::RemoteConnectionToTarget::targetClosed):
        (Inspector::RemoteConnectionToTarget::close):
        (Inspector::RemoteConnectionToTarget::sendMessageToTarget):
        (Inspector::RemoteConnectionToTarget::queueTaskOnPrivateRunLoop):
        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
        (Inspector::RemoteInspector::updateAutomaticInspectionCandidate):
        (Inspector::RemoteInspector::sendMessageToRemote):
        (Inspector::RemoteInspector::start):
        (Inspector::RemoteInspector::setupXPCConnectionIfNeeded):
        (Inspector::RemoteInspector::setParentProcessInformation):
        (Inspector::RemoteInspector::xpcConnectionReceivedMessage):
        (Inspector::RemoteInspector::xpcConnectionFailed):
        (Inspector::RemoteInspector::pushListingsSoon):
        (Inspector::RemoteInspector::receivedIndicateMessage):
        (Inspector::RemoteInspector::receivedProxyApplicationSetupMessage):
        * inspector/remote/cocoa/RemoteInspectorXPCConnection.mm:
        (Inspector::RemoteInspectorXPCConnection::close):
        (Inspector::RemoteInspectorXPCConnection::closeFromMessage):
        (Inspector::RemoteInspectorXPCConnection::deserializeMessage):
        (Inspector::RemoteInspectorXPCConnection::handleEvent):
        * inspector/remote/glib/RemoteInspectorGlib.cpp:
        (Inspector::RemoteInspector::start):
        (Inspector::RemoteInspector::setupConnection):
        (Inspector::RemoteInspector::pushListingsSoon):
        (Inspector::RemoteInspector::sendMessageToRemote):
        (Inspector::RemoteInspector::receivedGetTargetListMessage):
        (Inspector::RemoteInspector::receivedDataMessage):
        (Inspector::RemoteInspector::receivedCloseMessage):
        (Inspector::RemoteInspector::setup):
        * inspector/remote/socket/RemoteInspectorConnectionClient.cpp:
        (Inspector::RemoteInspectorConnectionClient::didReceive):
        * inspector/remote/socket/RemoteInspectorSocket.cpp:
        (Inspector::RemoteInspector::didClose):
        (Inspector::RemoteInspector::start):
        (Inspector::RemoteInspector::pushListingsSoon):
        (Inspector::RemoteInspector::setup):
        (Inspector::RemoteInspector::setupInspectorClient):
        (Inspector::RemoteInspector::frontendDidClose):
        (Inspector::RemoteInspector::sendMessageToBackend):
        (Inspector::RemoteInspector::startAutomationSession):
        * inspector/remote/socket/RemoteInspectorSocketEndpoint.cpp:
        (Inspector::RemoteInspectorSocketEndpoint::listenInet):
        (Inspector::RemoteInspectorSocketEndpoint::isListening):
        (Inspector::RemoteInspectorSocketEndpoint::workerThread):
        (Inspector::RemoteInspectorSocketEndpoint::createClient):
        (Inspector::RemoteInspectorSocketEndpoint::disconnect):
        (Inspector::RemoteInspectorSocketEndpoint::invalidateClient):
        (Inspector::RemoteInspectorSocketEndpoint::invalidateListener):
        (Inspector::RemoteInspectorSocketEndpoint::getPort const):
        (Inspector::RemoteInspectorSocketEndpoint::recvIfEnabled):
        (Inspector::RemoteInspectorSocketEndpoint::sendIfEnabled):
        (Inspector::RemoteInspectorSocketEndpoint::send):
        (Inspector::RemoteInspectorSocketEndpoint::acceptInetSocketIfEnabled):
        * interpreter/CLoopStack.cpp:
        (JSC::CLoopStack::addToCommittedByteCount):
        (JSC::CLoopStack::committedByteCount):
        * jit/ExecutableAllocator.cpp:
        (JSC::dumpJITMemory):
        * jit/ICStats.cpp:
        (JSC::ICStats::ICStats):
        (JSC::ICStats::~ICStats):
        * jit/JITThunks.cpp:
        (JSC::JITThunks::ctiStub):
        (JSC::JITThunks::existingCTIStub):
        (JSC::JITThunks::ctiSlowPathFunctionStub):
        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::Plan::compileInThread):
        (JSC::JITWorklist::Plan::isFinishedCompiling):
        (JSC::JITWorklist::JITWorklist):
        (JSC::JITWorklist::completeAllForVM):
        (JSC::JITWorklist::poll):
        (JSC::JITWorklist::compileLater):
        (JSC::JITWorklist::finalizePlans):
        * parser/SourceProvider.cpp:
        (JSC::SourceProvider::getID):
        * profiler/ProfilerDatabase.cpp:
        (JSC::Profiler::Database::ensureBytecodesFor):
        (JSC::Profiler::Database::notifyDestruction):
        (JSC::Profiler::Database::addCompilation):
        (JSC::Profiler::Database::logEvent):
        (JSC::Profiler::Database::addDatabaseToAtExit):
        (JSC::Profiler::Database::removeDatabaseFromAtExit):
        (JSC::Profiler::Database::removeFirstAtExitDatabase):
        * profiler/ProfilerUID.cpp:
        (JSC::Profiler::UID::create):
        * runtime/DeferredWorkTimer.cpp:
        (JSC::DeferredWorkTimer::scheduleWorkSoon):
        (JSC::DeferredWorkTimer::didResumeScriptExecutionOwner):
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::timerLoop):
        (JSC::SamplingProfiler::shutdown):
        (JSC::SamplingProfiler::start):
        (JSC::SamplingProfiler::noticeCurrentThreadAsJSCExecutionThread):
        (JSC::SamplingProfiler::noticeJSLockAcquisition):
        (JSC::SamplingProfiler::noticeVMEntry):
        (JSC::SamplingProfiler::registerForReportAtExit):
        * runtime/Watchdog.cpp:
        (JSC::Watchdog::startTimer):
        (JSC::Watchdog::willDestroyVM):
        * tools/VMInspector.cpp:
        (JSC::VMInspector::isValidExecutableMemory):
        * wasm/WasmBBQPlan.cpp:
        (JSC::Wasm::BBQPlan::work):
        * wasm/WasmEntryPlan.cpp:
        (JSC::Wasm::EntryPlan::ThreadCountHolder::ThreadCountHolder):
        (JSC::Wasm::EntryPlan::ThreadCountHolder::~ThreadCountHolder):
        * wasm/WasmOMGPlan.cpp:
        (JSC::Wasm::OMGPlan::work):
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::addCompletionTask):
        (JSC::Wasm::Plan::waitForCompletion):
        (JSC::Wasm::Plan::tryRemoveContextAndCancelIfLast):
        * wasm/WasmSignature.cpp:
        (JSC::Wasm::SignatureInformation::signatureFor):
        (JSC::Wasm::SignatureInformation::tryCleanup):
        * wasm/WasmWorklist.cpp:
        (JSC::Wasm::Worklist::enqueue):
        (JSC::Wasm::Worklist::completePlanSynchronously):
        (JSC::Wasm::Worklist::stopAllPlansForContext):
        (JSC::Wasm::Worklist::Worklist):
        (JSC::Wasm::Worklist::~Worklist):

2021-05-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r277913.
        https://bugs.webkit.org/show_bug.cgi?id=226140

        Caused multiple layout-test crash on mac debug queues

        Reverted changeset:

        "Replace LockHolder with Locker in local variables"
        https://bugs.webkit.org/show_bug.cgi?id=226133
        https://trac.webkit.org/changeset/277913

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Remove WTF::holdLock() / WTF::holdLockIf()
        https://bugs.webkit.org/show_bug.cgi?id=226135

        Reviewed by Darin Adler.

        Remove WTF::holdLock() / WTF::holdLockIf() because they are not compatible with
        Clang Thread Safety Analysis. All call sites have been converted to use the Locker
        constructor directly.

        * heap/LockDuringMarking.h:
        (JSC::lockDuringMarking):

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Replace LockHolder with Locker in local variables
        https://bugs.webkit.org/show_bug.cgi?id=226133

        Reviewed by Darin Adler.

        Replace LockHolder with Locker in local variables. It is shorter and it allows switching the lock
        type more easily since the compiler with deduce the lock type T for Locker<T>.

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::deletePrivateProperty):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::visitChildren):
        * API/JSValue.mm:
        (handerForStructTag):
        * API/tests/testapi.cpp:
        (testCAPIViaCpp):
        * assembler/testmasm.cpp:
        (JSC::run):
        * b3/air/testair.cpp:
        * b3/testb3_1.cpp:
        (run):
        * bytecode/DirectEvalCodeCache.cpp:
        (JSC::DirectEvalCodeCache::setSlow):
        (JSC::DirectEvalCodeCache::clear):
        (JSC::DirectEvalCodeCache::visitAggregateImpl):
        * bytecode/SuperSampler.cpp:
        (JSC::initializeSuperSampler):
        (JSC::resetSuperSamplerState):
        (JSC::printSuperSamplerState):
        (JSC::enableSuperSampler):
        (JSC::disableSuperSampler):
        * dfg/DFGCommonData.cpp:
        (JSC::DFG::CommonData::invalidate):
        (JSC::DFG::CommonData::~CommonData):
        (JSC::DFG::CommonData::installVMTrapBreakpoints):
        (JSC::DFG::codeBlockForVMTrapPC):
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::cleanMustHandleValuesIfNecessary):
        * dfg/DFGWorklist.cpp:
        (JSC::DFG::Worklist::~Worklist):
        (JSC::DFG::Worklist::finishCreation):
        (JSC::DFG::Worklist::isActiveForVM const):
        (JSC::DFG::Worklist::enqueue):
        (JSC::DFG::Worklist::compilationState):
        (JSC::DFG::Worklist::waitUntilAllPlansForVMAreReady):
        (JSC::DFG::Worklist::removeAllReadyPlansForVM):
        (JSC::DFG::Worklist::completeAllReadyPlansForVM):
        (JSC::DFG::Worklist::visitWeakReferences):
        (JSC::DFG::Worklist::removeDeadPlans):
        (JSC::DFG::Worklist::removeNonCompilingPlansForVM):
        (JSC::DFG::Worklist::queueLength):
        (JSC::DFG::Worklist::dump const):
        (JSC::DFG::Worklist::setNumberOfThreads):
        * dfg/DFGWorklistInlines.h:
        (JSC::DFG::Worklist::iterateCodeBlocksForGC):
        * disassembler/Disassembler.cpp:
        * heap/BlockDirectory.cpp:
        (JSC::BlockDirectory::addBlock):
        * heap/CodeBlockSetInlines.h:
        (JSC::CodeBlockSet::iterateCurrentlyExecuting):
        * heap/ConservativeRoots.cpp:
        (JSC::ConservativeRoots::add):
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::lastChanceToFinalize):
        (JSC::Heap::collectAsync):
        (JSC::Heap::runBeginPhase):
        (JSC::Heap::waitForCollector):
        (JSC::Heap::requestCollection):
        (JSC::Heap::notifyIsSafeToCollect):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::didReachTermination):
        * inspector/agents/InspectorScriptProfilerAgent.cpp:
        (Inspector::InspectorScriptProfilerAgent::startTracking):
        (Inspector::InspectorScriptProfilerAgent::trackingComplete):
        (Inspector::InspectorScriptProfilerAgent::stopSamplingWhenDisconnecting):
        * inspector/remote/RemoteConnectionToTarget.cpp:
        (Inspector::RemoteConnectionToTarget::setup):
        (Inspector::RemoteConnectionToTarget::sendMessageToTarget):
        (Inspector::RemoteConnectionToTarget::close):
        (Inspector::RemoteConnectionToTarget::targetClosed):
        * inspector/remote/RemoteInspector.cpp:
        (Inspector::RemoteInspector::registerTarget):
        (Inspector::RemoteInspector::unregisterTarget):
        (Inspector::RemoteInspector::updateTarget):
        (Inspector::RemoteInspector::updateClientCapabilities):
        (Inspector::RemoteInspector::setClient):
        (Inspector::RemoteInspector::setupFailed):
        (Inspector::RemoteInspector::setupCompleted):
        (Inspector::RemoteInspector::stop):
        * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:
        (Inspector::RemoteTargetHandleRunSourceGlobal):
        (Inspector::RemoteTargetQueueTaskOnGlobalQueue):
        (Inspector::RemoteTargetHandleRunSourceWithInfo):
        (Inspector::RemoteConnectionToTarget::setup):
        (Inspector::RemoteConnectionToTarget::targetClosed):
        (Inspector::RemoteConnectionToTarget::close):
        (Inspector::RemoteConnectionToTarget::sendMessageToTarget):
        (Inspector::RemoteConnectionToTarget::queueTaskOnPrivateRunLoop):
        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
        (Inspector::RemoteInspector::updateAutomaticInspectionCandidate):
        (Inspector::RemoteInspector::sendMessageToRemote):
        (Inspector::RemoteInspector::start):
        (Inspector::RemoteInspector::setupXPCConnectionIfNeeded):
        (Inspector::RemoteInspector::setParentProcessInformation):
        (Inspector::RemoteInspector::xpcConnectionReceivedMessage):
        (Inspector::RemoteInspector::xpcConnectionFailed):
        (Inspector::RemoteInspector::pushListingsSoon):
        (Inspector::RemoteInspector::receivedIndicateMessage):
        (Inspector::RemoteInspector::receivedProxyApplicationSetupMessage):
        * inspector/remote/cocoa/RemoteInspectorXPCConnection.mm:
        (Inspector::RemoteInspectorXPCConnection::close):
        (Inspector::RemoteInspectorXPCConnection::closeFromMessage):
        (Inspector::RemoteInspectorXPCConnection::deserializeMessage):
        (Inspector::RemoteInspectorXPCConnection::handleEvent):
        * inspector/remote/glib/RemoteInspectorGlib.cpp:
        (Inspector::RemoteInspector::start):
        (Inspector::RemoteInspector::setupConnection):
        (Inspector::RemoteInspector::pushListingsSoon):
        (Inspector::RemoteInspector::sendMessageToRemote):
        (Inspector::RemoteInspector::receivedGetTargetListMessage):
        (Inspector::RemoteInspector::receivedDataMessage):
        (Inspector::RemoteInspector::receivedCloseMessage):
        (Inspector::RemoteInspector::setup):
        * inspector/remote/socket/RemoteInspectorConnectionClient.cpp:
        (Inspector::RemoteInspectorConnectionClient::didReceive):
        * inspector/remote/socket/RemoteInspectorSocket.cpp:
        (Inspector::RemoteInspector::didClose):
        (Inspector::RemoteInspector::start):
        (Inspector::RemoteInspector::pushListingsSoon):
        (Inspector::RemoteInspector::setup):
        (Inspector::RemoteInspector::setupInspectorClient):
        (Inspector::RemoteInspector::frontendDidClose):
        (Inspector::RemoteInspector::sendMessageToBackend):
        (Inspector::RemoteInspector::startAutomationSession):
        * inspector/remote/socket/RemoteInspectorSocketEndpoint.cpp:
        (Inspector::RemoteInspectorSocketEndpoint::listenInet):
        (Inspector::RemoteInspectorSocketEndpoint::isListening):
        (Inspector::RemoteInspectorSocketEndpoint::workerThread):
        (Inspector::RemoteInspectorSocketEndpoint::createClient):
        (Inspector::RemoteInspectorSocketEndpoint::disconnect):
        (Inspector::RemoteInspectorSocketEndpoint::invalidateClient):
        (Inspector::RemoteInspectorSocketEndpoint::invalidateListener):
        (Inspector::RemoteInspectorSocketEndpoint::getPort const):
        (Inspector::RemoteInspectorSocketEndpoint::recvIfEnabled):
        (Inspector::RemoteInspectorSocketEndpoint::sendIfEnabled):
        (Inspector::RemoteInspectorSocketEndpoint::send):
        (Inspector::RemoteInspectorSocketEndpoint::acceptInetSocketIfEnabled):
        * interpreter/CLoopStack.cpp:
        (JSC::CLoopStack::addToCommittedByteCount):
        (JSC::CLoopStack::committedByteCount):
        * jit/ExecutableAllocator.cpp:
        (JSC::dumpJITMemory):
        * jit/ICStats.cpp:
        (JSC::ICStats::ICStats):
        (JSC::ICStats::~ICStats):
        * jit/JITThunks.cpp:
        (JSC::JITThunks::ctiStub):
        (JSC::JITThunks::existingCTIStub):
        (JSC::JITThunks::ctiSlowPathFunctionStub):
        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::Plan::compileInThread):
        (JSC::JITWorklist::Plan::isFinishedCompiling):
        (JSC::JITWorklist::JITWorklist):
        (JSC::JITWorklist::completeAllForVM):
        (JSC::JITWorklist::poll):
        (JSC::JITWorklist::compileLater):
        (JSC::JITWorklist::finalizePlans):
        * parser/SourceProvider.cpp:
        (JSC::SourceProvider::getID):
        * profiler/ProfilerDatabase.cpp:
        (JSC::Profiler::Database::ensureBytecodesFor):
        (JSC::Profiler::Database::notifyDestruction):
        (JSC::Profiler::Database::addCompilation):
        (JSC::Profiler::Database::logEvent):
        (JSC::Profiler::Database::addDatabaseToAtExit):
        (JSC::Profiler::Database::removeDatabaseFromAtExit):
        (JSC::Profiler::Database::removeFirstAtExitDatabase):
        * profiler/ProfilerUID.cpp:
        (JSC::Profiler::UID::create):
        * runtime/DeferredWorkTimer.cpp:
        (JSC::DeferredWorkTimer::scheduleWorkSoon):
        (JSC::DeferredWorkTimer::didResumeScriptExecutionOwner):
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::timerLoop):
        (JSC::SamplingProfiler::shutdown):
        (JSC::SamplingProfiler::start):
        (JSC::SamplingProfiler::noticeCurrentThreadAsJSCExecutionThread):
        (JSC::SamplingProfiler::noticeJSLockAcquisition):
        (JSC::SamplingProfiler::noticeVMEntry):
        (JSC::SamplingProfiler::registerForReportAtExit):
        * runtime/Watchdog.cpp:
        (JSC::Watchdog::startTimer):
        (JSC::Watchdog::willDestroyVM):
        * tools/VMInspector.cpp:
        (JSC::VMInspector::isValidExecutableMemory):
        * wasm/WasmBBQPlan.cpp:
        (JSC::Wasm::BBQPlan::work):
        * wasm/WasmEntryPlan.cpp:
        (JSC::Wasm::EntryPlan::ThreadCountHolder::ThreadCountHolder):
        (JSC::Wasm::EntryPlan::ThreadCountHolder::~ThreadCountHolder):
        * wasm/WasmOMGPlan.cpp:
        (JSC::Wasm::OMGPlan::work):
        * wasm/WasmPlan.cpp:
        (JSC::Wasm::Plan::addCompletionTask):
        (JSC::Wasm::Plan::waitForCompletion):
        (JSC::Wasm::Plan::tryRemoveContextAndCancelIfLast):
        * wasm/WasmSignature.cpp:
        (JSC::Wasm::SignatureInformation::signatureFor):
        (JSC::Wasm::SignatureInformation::tryCleanup):
        * wasm/WasmWorklist.cpp:
        (JSC::Wasm::Worklist::enqueue):
        (JSC::Wasm::Worklist::completePlanSynchronously):
        (JSC::Wasm::Worklist::stopAllPlansForContext):
        (JSC::Wasm::Worklist::Worklist):
        (JSC::Wasm::Worklist::~Worklist):

2021-05-21  Chris Dumez  <cdumez@apple.com>

        Stop using holdLock() in JSC as it is not compatible with Clang thread safety analysis
        https://bugs.webkit.org/show_bug.cgi?id=226116

        Reviewed by Mark Lam.

        Stop using holdLock() in JSC as it is not compatible with Clang thread safety analysis
        (WTF::CheckedLock). Use the Locker constructor instead.

        I'll eventually get rid of the holdLock() definition once I have managed to get rid of
        all its usages.

        * API/JSVirtualMachine.mm:
        (+[JSVMWrapperCache addWrapper:forJSContextGroupRef:]):
        (+[JSVMWrapperCache wrapperForJSContextGroupRef:]):
        (-[JSVirtualMachine addExternalRememberedObject:]):
        (-[JSVirtualMachine addManagedReference:withOwner:]):
        (-[JSVirtualMachine removeManagedReference:withOwner:]):
        (scanExternalObjectGraph):
        (scanExternalRememberedSet):
        * API/glib/JSCVirtualMachine.cpp:
        (addWrapper):
        (removeWrapper):
        * API/tests/ExecutionTimeLimitTest.cpp:
        (testExecutionTimeLimit):
        * assembler/PerfLog.cpp:
        (JSC::PerfLog::PerfLog):
        (JSC::PerfLog::log):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::visitAggregateImpl):
        (JSC::StructureStubInfo::visitWeakReferences):
        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::considerCaching):
        (JSC::StructureStubInfo::clearBufferedStructures):
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::UnlinkedCodeBlock::visitChildrenImpl):
        * bytecode/UnlinkedCodeBlockGenerator.cpp:
        (JSC::UnlinkedCodeBlockGenerator::finalize):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * heap/BlockDirectory.cpp:
        (JSC::BlockDirectory::~BlockDirectory):
        (JSC::BlockDirectory::removeBlock):
        (JSC::BlockDirectory::stopAllocatingForGood):
        (JSC::BlockDirectory::parallelNotEmptyBlockSource):
        * heap/CodeBlockSet.cpp:
        (JSC::CodeBlockSet::add):
        (JSC::CodeBlockSet::remove):
        * heap/CodeBlockSetInlines.h:
        (JSC::CodeBlockSet::iterate):
        * heap/CompleteSubspace.cpp:
        (JSC::CompleteSubspace::allocatorForSlow):
        * heap/Heap.cpp:
        (JSC::Heap::lastChanceToFinalize):
        (JSC::Heap::runNotRunningPhase):
        (JSC::Heap::runEndPhase):
        (JSC::Heap::finishRelinquishingConn):
        (JSC::visitSamplingProfiler):
        (JSC::Heap::setBonusVisitorTask):
        (JSC::Heap::runTaskInParallel):
        * heap/HeapSnapshotBuilder.cpp:
        (JSC::HeapSnapshotBuilder::buildSnapshot):
        (JSC::HeapSnapshotBuilder::analyzeNode):
        (JSC::HeapSnapshotBuilder::analyzeEdge):
        (JSC::HeapSnapshotBuilder::analyzePropertyNameEdge):
        (JSC::HeapSnapshotBuilder::analyzeVariableNameEdge):
        (JSC::HeapSnapshotBuilder::analyzeIndexEdge):
        (JSC::HeapSnapshotBuilder::setOpaqueRootReachabilityReasonForCell):
        * heap/IsoAlignedMemoryAllocator.cpp:
        (JSC::IsoAlignedMemoryAllocator::tryAllocateAlignedMemory):
        (JSC::IsoAlignedMemoryAllocator::freeAlignedMemory):
        * heap/IsoCellSet.cpp:
        (JSC::IsoCellSet::parallelNotEmptyMarkedBlockSource):
        (JSC::IsoCellSet::addSlow):
        (JSC::IsoCellSet::didRemoveBlock):
        (JSC::IsoCellSet::sweepToFreeList):
        * heap/IsoCellSetInlines.h:
        (JSC::IsoCellSet::forEachMarkedCellInParallel):
        * heap/IsoSubspace.cpp:
        (JSC::IsoSubspace::IsoSubspace):
        * heap/IsoSubspacePerVM.cpp:
        (JSC::IsoSubspacePerVM::forVM):
        * heap/LocalAllocator.cpp:
        (JSC::LocalAllocator::LocalAllocator):
        (JSC::LocalAllocator::~LocalAllocator):
        * heap/MachineStackMarker.cpp:
        (JSC::MachineThreads::tryCopyOtherThreadStacks):
        (JSC::MachineThreads::gatherConservativeRoots):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::Handle::stopAllocating):
        (JSC::MarkedBlock::Handle::resumeAllocating):
        (JSC::MarkedBlock::aboutToMarkSlow):
        (JSC::MarkedBlock::Handle::didConsumeFreeList):
        (JSC::MarkedBlock::noteMarkedSlow):
        (JSC::MarkedBlock::Handle::dumpState):
        * heap/MarkedBlockInlines.h:
        (JSC::MarkedBlock::Handle::isLive):
        * heap/MarkingConstraint.cpp:
        (JSC::MarkingConstraint::doParallelWork):
        * heap/MarkingConstraintSolver.cpp:
        (JSC::MarkingConstraintSolver::addParallelTask):
        (JSC::MarkingConstraintSolver::runExecutionThread):
        * heap/ParallelSourceAdapter.h:
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::updateMutatorIsStopped):
        (JSC::SlotVisitor::drain):
        (JSC::SlotVisitor::performIncrementOfDraining):
        (JSC::SlotVisitor::drainFromShared):
        (JSC::SlotVisitor::drainInParallelPassively):
        (JSC::SlotVisitor::waitForTermination):
        (JSC::SlotVisitor::donateAll):
        (JSC::SlotVisitor::didRace):
        * heap/Subspace.cpp:
        (JSC::Subspace::parallelDirectorySource):
        * heap/SubspaceInlines.h:
        (JSC::Subspace::forEachMarkedCellInParallel):
        * inspector/JSInjectedScriptHost.cpp:
        * jit/ExecutableAllocator.cpp:
        * jsc.cpp:
        (Worker::Worker):
        (Worker::~Worker):
        (Worker::dequeue):
        (Workers::broadcast):
        (Workers::report):
        (Workers::tryGetReport):
        (Workers::getReport):
        (JSC_DEFINE_HOST_FUNCTION):
        * runtime/DeferredWorkTimer.cpp:
        (JSC::DeferredWorkTimer::doWork):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::finishCreation):
        * runtime/EvalExecutable.cpp:
        (JSC::EvalExecutable::visitChildrenImpl):
        * runtime/FileBasedFuzzerAgentBase.cpp:
        (JSC::FileBasedFuzzerAgentBase::getPrediction):
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::visitChildrenImpl):
        * runtime/JSArray.cpp:
        (JSC::JSArray::shiftCountWithArrayStorage):
        (JSC::JSArray::unshiftCountWithArrayStorage):
        * runtime/JSArrayBufferView.cpp:
        (JSC::JSArrayBufferView::detach):
        (JSC::JSArrayBufferView::slowDownAndWasteMemory):
        * runtime/JSCell.h:
        * runtime/JSFinalizationRegistry.cpp:
        (JSC::JSFinalizationRegistry::visitChildrenImpl):
        (JSC::JSFinalizationRegistry::finalizeUnconditionally):
        (JSC::JSFinalizationRegistry::takeDeadHoldingsValue):
        (JSC::JSFinalizationRegistry::registerTarget):
        (JSC::JSFinalizationRegistry::unregister):
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::visitChildrenImpl):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::finishCreation):
        (JSC::JSModuleNamespaceObject::visitChildrenImpl):
        * runtime/JSObject.cpp:
        (JSC::JSObject::visitButterflyImpl):
        * runtime/JSRunLoopTimer.cpp:
        (JSC::JSRunLoopTimer::Manager::timerDidFire):
        (JSC::JSRunLoopTimer::Manager::registerVM):
        (JSC::JSRunLoopTimer::Manager::unregisterVM):
        (JSC::JSRunLoopTimer::Manager::scheduleTimer):
        (JSC::JSRunLoopTimer::Manager::cancelTimer):
        (JSC::JSRunLoopTimer::Manager::timeUntilFire):
        (JSC::JSRunLoopTimer::timerDidFire):
        (JSC::JSRunLoopTimer::setTimeUntilFire):
        (JSC::JSRunLoopTimer::cancelTimer):
        (JSC::JSRunLoopTimer::addTimerSetNotification):
        (JSC::JSRunLoopTimer::removeTimerSetNotification):
        * runtime/JSSegmentedVariableObject.cpp:
        (JSC::JSSegmentedVariableObject::findVariableIndex):
        (JSC::JSSegmentedVariableObject::addVariables):
        (JSC::JSSegmentedVariableObject::visitChildrenImpl):
        * runtime/ModuleProgramExecutable.cpp:
        (JSC::ModuleProgramExecutable::visitChildrenImpl):
        * runtime/NarrowingNumberPredictionFuzzerAgent.cpp:
        (JSC::NarrowingNumberPredictionFuzzerAgent::getPrediction):
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::visitChildrenImpl):
        * runtime/RandomizingFuzzerAgent.cpp:
        (JSC::RandomizingFuzzerAgent::getPrediction):
        * runtime/RegExp.cpp:
        (JSC::RegExp::compile):
        (JSC::RegExp::matchConcurrently):
        (JSC::RegExp::compileMatchOnly):
        (JSC::RegExp::deleteCode):
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::takeSample):
        (JSC::SamplingProfiler::stackTracesAsJSON):
        (JSC::SamplingProfiler::reportTopFunctions):
        (JSC::SamplingProfiler::reportTopBytecodes):
        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::createTemplateObject):
        * runtime/SparseArrayValueMap.cpp:
        (JSC::SparseArrayValueMap::add):
        (JSC::SparseArrayValueMap::remove):
        (JSC::SparseArrayValueMap::getConcurrently):
        (JSC::SparseArrayValueMap::visitChildrenImpl):
        * runtime/Structure.cpp:
        (JSC::Structure::changePrototypeTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::nonPropertyTransitionSlow):
        (JSC::Structure::setBrandTransition):
        * runtime/StructureCache.cpp:
        (JSC::StructureCache::createEmptyStructure):
        (JSC::StructureCache::emptyObjectStructureConcurrently):
        * runtime/VM.cpp:
        (JSC::waitForVMDestruction):
        (JSC::VM::~VM):
        (JSC::VM::gatherScratchBufferRoots):
        (JSC::VM::scratchBufferForSize):
        (JSC::VM::clearScratchBuffers):
        (JSC::VM::addLoopHintExecutionCounter):
        (JSC::VM::getLoopHintExecutionCounter):
        (JSC::VM::removeLoopHintExecutionCounter):
        * runtime/VMTraps.cpp:
        (JSC::VMTraps::tryInstallTrapBreakpoints):
        (JSC::VMTraps::invalidateCodeBlocksOnStack):
        (JSC::VMTraps::willDestroyVM):
        (JSC::VMTraps::fireTrap):
        (JSC::VMTraps::handleTraps):
        (JSC::VMTraps::takeTopPriorityTrap):
        * runtime/WeakMapImpl.cpp:
        (JSC::WeakMapImpl<BucketType>::visitOutputConstraints):
        * runtime/WeakMapImpl.h:
        (JSC::WeakMapImpl::finishCreation):
        * runtime/WeakMapImplInlines.h:
        (JSC::WeakMapImpl<WeakMapBucket>::rehash):
        * runtime/WideningNumberPredictionFuzzerAgent.cpp:
        (JSC::WideningNumberPredictionFuzzerAgent::getPrediction):
        * tools/CompilerTimingScope.cpp:
        * tools/FunctionOverrides.cpp:
        (JSC::FunctionOverrides::FunctionOverrides):
        (JSC::FunctionOverrides::reinstallOverrides):
        (JSC::FunctionOverrides::initializeOverrideFor):
        * tools/Integrity.cpp:
        (JSC::Integrity::Random::reloadAndCheckShouldAuditSlow):
        * tools/VMInspector.cpp:
        (JSC::VMInspector::add):
        (JSC::VMInspector::remove):
        (JSC::VMInspector::codeBlockForMachinePC):
        * wasm/WasmBBQPlan.cpp:
        (JSC::Wasm::BBQPlan::work):
        (JSC::Wasm::BBQPlan::compileFunction):
        * wasm/WasmCalleeRegistry.h:
        (JSC::Wasm::CalleeRegistry::registerCallee):
        (JSC::Wasm::CalleeRegistry::unregisterCallee):
        * wasm/WasmCodeBlock.cpp:
        (JSC::Wasm::CodeBlock::CodeBlock):
        (JSC::Wasm::CodeBlock::waitUntilFinished):
        (JSC::Wasm::CodeBlock::compileAsync):
        * wasm/WasmContext.cpp:
        (JSC::Wasm::Context::scratchBufferForSize):
        * wasm/WasmEntryPlan.cpp:
        (JSC::Wasm::EntryPlan::parseAndValidateModule):
        (JSC::Wasm::EntryPlan::prepare):
        (JSC::Wasm::EntryPlan::compileFunctions):
        * wasm/WasmEntryPlan.h:
        (JSC::Wasm::EntryPlan::tryReserveCapacity):
        * wasm/WasmFaultSignalHandler.cpp:
        (JSC::Wasm::trapHandler):
        * wasm/WasmInstance.cpp:
        (JSC::Wasm::Instance::setFunctionWrapper):
        * wasm/WasmLLIntPlan.cpp:
        (JSC::Wasm::LLIntPlan::compileFunction):
        (JSC::Wasm::LLIntPlan::completeInStreaming):
        (JSC::Wasm::LLIntPlan::didCompileFunctionInStreaming):
        (JSC::Wasm::LLIntPlan::didFailInStreaming):
        * wasm/WasmMachineThreads.cpp:
        (JSC::Wasm::resetInstructionCacheOnAllThreads):
        * wasm/WasmMemory.cpp:
        (JSC::Wasm::Memory::growShared):
        * wasm/WasmModule.cpp:
        (JSC::Wasm::Module::getOrCreateCodeBlock):
        * wasm/WasmOMGForOSREntryPlan.cpp:
        (JSC::Wasm::OMGForOSREntryPlan::work):
        * wasm/WasmOMGPlan.cpp:
        (JSC::Wasm::OMGPlan::work):
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::triggerOMGReplacementCompile):
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
        * wasm/WasmSignatureInlines.h:
        (JSC::Wasm::SignatureInformation::get):
        * wasm/WasmSlowPaths.cpp:
        (JSC::LLInt::jitCompileAndSetHeuristics):
        (JSC::LLInt::WASM_SLOW_PATH_DECL):
        * wasm/WasmStreamingCompiler.cpp:
        (JSC::Wasm::StreamingCompiler::didCompileFunction):
        (JSC::Wasm::StreamingCompiler::finalize):
        (JSC::Wasm::StreamingCompiler::fail):
        (JSC::Wasm::StreamingCompiler::cancel):
        * wasm/WasmStreamingPlan.cpp:
        (JSC::Wasm::StreamingPlan::work):
        * wasm/WasmTable.cpp:
        (JSC::Wasm::Table::grow):
        (JSC::Wasm::Table::visitAggregateImpl):
        * wasm/WasmThunks.cpp:
        (JSC::Wasm::Thunks::stub):
        (JSC::Wasm::Thunks::existingStub):
        * wasm/WasmWorklist.cpp:
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::visitChildrenImpl):

2021-05-21  Mark Lam  <mark.lam@apple.com>

        Remove the unnecessary use of CompileOpStrictEqType.
        https://bugs.webkit.org/show_bug.cgi?id=226121

        Reviewed by Saam Barati and Robin Morisset.

        We're already emitting template code.  Might as well make the relevant condition
        checks a build time check on the opcode type the template is specializing on
        instead of a runtime check on a passed in CompileOpStrictEqType.

        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::emit_op_stricteq):
        (JSC::JIT::emit_op_nstricteq):
        (JSC::JIT::compileOpStrictEqJump):
        (JSC::JIT::emit_op_jstricteq):
        (JSC::JIT::emit_op_jnstricteq):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::emit_op_stricteq):
        (JSC::JIT::emit_op_nstricteq):
        (JSC::JIT::compileOpStrictEqJump):
        (JSC::JIT::emit_op_jstricteq):
        (JSC::JIT::emit_op_jnstricteq):

2021-05-21  Mark Lam  <mark.lam@apple.com>

        Introducing JITThunks::preinitializeCTIThunks().
        https://bugs.webkit.org/show_bug.cgi?id=226105

        Reviewed by Geoffrey Garen.

        We're basically renaming JITThunks::preinitializeExtraCTIThunks() to
        JITThunks::preinitializeCTIThunks() and making it not conditional on
        #if ENABLE(EXTRA_CTI_THUNKS).  Some thunks need to be initialized independent of
        #if ENABLE(EXTRA_CTI_THUNKS).

        * jit/JITThunks.cpp:
        (JSC::JITThunks::preinitializeCTIThunks):
        (JSC::JITThunks::preinitializeExtraCTIThunks): Deleted.
        * jit/JITThunks.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):

2021-05-21  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late-ish May 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=225990

        Unreviewed non-unified build fixes.

        * jit/CCallHelpers.cpp: Add missing LinkBuffer.h header.

2021-05-21  Sam Sneddon  <gsnedders@apple.com>

        Fix Python 3.6+ DeprecationWarnings about unknown escapes
        https://bugs.webkit.org/show_bug.cgi?id=226018

        Reviewed by Jonathan Bedard.

        Fix Python 3.6+ DeprecationWarnings about unknown escapes

        * wasm/generateWasmB3IRGeneratorInlinesHeader.py:

2021-05-20  Saam Barati  <sbarati@apple.com>

        [ Catalina Release JSC] A large number of JSC test appear to be flaky failing
        https://bugs.webkit.org/show_bug.cgi?id=225998
        <rdar://problem/78235001>

        Reviewed by Yusuke Suzuki.

        This patch is fixing some fallout from moving JIT::link() to a background
        thread:
        1. We can't shrink the CodeBlock's constant pool on a background thread
        since we read from it without grabbing a lock on the main thread (when
        reading things off the stack in slow path calls).
        2. We can't create GCAwareJITStubRoutines on the compilation thread, since
        creating a GCAwareJITStubRoutines adds to a global hash table inside Heap. This
        means that we have to do that step of emitting virtual calls for eval when
        we're finalizing code on the main thread.
        
        This patch also makes it so that a baseline JIT compilation thread is
        correctly marked as such.

        * heap/JITStubRoutineSet.cpp:
        (JSC::JITStubRoutineSet::add):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitUnlinkedVirtualCall):
        (JSC::AssemblyHelpers::emitVirtualCall):
        * jit/AssemblyHelpers.h:
        * jit/JIT.cpp:
        (JSC::JIT::link):
        (JSC::JIT::finalizeOnMainThread):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileCallEvalSlowCase):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileCallEvalSlowCase):
        * jit/JITWorklist.cpp:

2021-05-20  Saam Barati  <sbarati@apple.com>

        Make polymorphic calls play nice with Data Call ICs
        https://bugs.webkit.org/show_bug.cgi?id=225793

        Reviewed by Robin Morisset.

        This patch makes it so that Polymorphic stubs don't repatch when using
        Data Call ICs. We add a branch to the Data IC fast path to see if we're
        polymorphic. If we are, then we either call or tail call the polymorphic
        stub, depending on the CallLinkInfo's call type. This patch also changes
        the polymorphic stub to handle being called instead of jumped to, since that
        will now happen for Data ICs of non tail calls.

        * bytecode/CallLinkInfo.cpp:
        (JSC::CallLinkInfo::setMonomorphicCallee):
        (JSC::CallLinkInfo::callee):
        (JSC::CallLinkInfo::visitWeak):
        (JSC::CallLinkInfo::emitFastPathImpl):
        (JSC::CallLinkInfo::revertCallToStub):
        (JSC::CallLinkInfo::setStub):
        (JSC::CallLinkInfo::emitFirstInstructionForDataIC): Deleted.
        * bytecode/CallLinkInfo.h:
        * jit/Repatch.cpp:
        (JSC::linkPolymorphicCall):

2021-05-20  Tuomas Karkkainen  <tuomas.webkit@apple.com>

        $vm should have a function for checking if ASan is enabled similar to $vm.assertEnabled
        https://bugs.webkit.org/show_bug.cgi?id=226019

        Reviewed by Mark Lam.

        Add method $vm.asanEnabled(), which parallels $vm.assertEnabled(), and allows checking at
        runtime whether the current JavaScriptCore build is instrumented with AddressSanitizer.

        * tools/JSDollarVM.cpp:

2021-05-19  Mark Lam  <mark.lam@apple.com>

        AbstractSlotVisitor::containsOpaqueRoot() should only declare didFindOpaqueRoot if the root is actually found.
        https://bugs.webkit.org/show_bug.cgi?id=226000
        rdar://78208014

        Reviewed by Robin Morisset.

        It was erroneously calling didFindOpaqueRoot() all the time even when the root is
        not found.  This only affects the GC verifier tool.  It has no effect on production
        code.

        * heap/AbstractSlotVisitorInlines.h:
        (JSC::AbstractSlotVisitor::containsOpaqueRoot const):

2021-05-19  Mark Lam  <mark.lam@apple.com>

        Speed up debug validation in CacheableIdentifier::createFromIdentifierOwnedByCodeBlock().
        https://bugs.webkit.org/show_bug.cgi?id=225948

        Not reviewed.

        Build fix after r277727.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::hasIdentifier):

2021-05-19  Mark Lam  <mark.lam@apple.com>

        Ripping out broken Baseline JIT rare case profiling.
        https://bugs.webkit.org/show_bug.cgi?id=225983

        Reviewed by Saam Barati and Robin Morisset.

        The profiling has been broken in recent times.  Fixing it to work does not appear
        to improve performance.  Ripping out the profiling appears to not hurt performance.
        However, ripping out the profiling appears to save on code size generated for the
        Baseline JIT.

                        Base                     New                      Diff

           BaselineJIT: 73299112 (69.903481 MB)  65910128 (62.856796 MB)  0.90x (reduction)
                   DFG: 36850540 (35.143414 MB)  36374400 (34.689331 MB)  0.99x
                 Thunk: 23128652 (22.057201 MB)  22892292 (21.831791 MB)  0.99x
           InlineCache: 22210972 (21.182034 MB)  22083508 (21.060474 MB)  0.99x
                   FTL: 6065064 (5.784096 MB)    6128080 (5.844193 MB)    1.01x
                  Wasm: 2305124 (2.198338 MB)    2309732 (2.202732 MB)    1.00x
               YarrJIT: 1522712 (1.452171 MB)    1536104 (1.464943 MB)    1.01x
                CSSJIT: 0                        0
         Uncategorized: 0                        0

        Cumulative diff since the start of this effort to put more code in JIT thunks:

                        Base                     New                      Diff

           BaselineJIT: 89089964 (84.962811 MB)  65910128 (62.856796 MB)  0.74x (reduction)
                   DFG: 39117360 (37.305222 MB)  36374400 (34.689331 MB)  0.93x (reduction)
                 Thunk: 23230968 (22.154778 MB)  22892292 (21.831791 MB)  0.99x
           InlineCache: 22027416 (21.006981 MB)  22083508 (21.060474 MB)  1.00x
                   FTL: 6575772 (6.271145 MB)    6128080 (5.844193 MB)    0.93x (reduction)
                  Wasm: 2302724 (2.196049 MB)    2309732 (2.202732 MB)    1.00x
               YarrJIT: 1538956 (1.467663 MB)    1536104 (1.464943 MB)    1.00x
                CSSJIT: 0                        0
         Uncategorized: 0                        0

        Benchmarking was done with Speedometer2 and JetSteam2 on an M1 Mac.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::JITData::size const):
        (JSC::CodeBlock::dumpValueProfiles):
        (JSC::CodeBlock::setRareCaseProfiles): Deleted.
        (JSC::CodeBlock::rareCaseProfileForBytecodeIndex): Deleted.
        (JSC::CodeBlock::rareCaseProfileCountForBytecodeIndex): Deleted.
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::likelyToTakeSlowCase): Deleted.
        (JSC::CodeBlock::couldTakeSlowCase): Deleted.
        * bytecode/ValueProfile.h:
        (JSC::RareCaseProfile::RareCaseProfile): Deleted.
        (JSC::getRareCaseProfileBytecodeIndex): Deleted.
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::makeSafe):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):

2021-05-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC} Remove exception checks from non-throwing function calls in Baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=224920

        Reviewed by Tadeu Zagallo.

        These functions are not taking JSGlobalObject and will not throw an error.
        Use callOperationNoExceptionCheck instead to avoid emitting unnecessary exception checks.

        * jit/JIT.cpp:
        (JSC::JIT::emitEnterOptimizationCheck):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emitSlow_op_new_object):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emitSlow_op_loop_hint):
        (JSC::JIT::emit_op_profile_type):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emitSlow_op_new_object):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_profile_type):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitWriteBarrier):

2021-05-19  Robin Morisset  <rmorisset@apple.com>

        Fix typo in AirUseCounts
        https://bugs.webkit.org/show_bug.cgi?id=225977
        rdar://78210501

        Reviewed by Mark Lam.

        I had just messed up a copy-and-paste, using "gp" instead of "fp" in code that deals with floating point values.
        This did not show in my tests, probably because few functions have more floating point temporaries than non-floating-point.

        * b3/air/AirUseCounts.h:
        (JSC::B3::Air::UseCounts::UseCounts):

2021-05-18  Darin Adler  <darin@apple.com>

        Move CFStringRef and NSString support from StringBuilder into StringConcatenateCF
        https://bugs.webkit.org/show_bug.cgi?id=225839

        Reviewed by Sam Weinig.

        * inspector/ConsoleMessage.cpp:
        (Inspector::ConsoleMessage::ConsoleMessage): Use StringBuilder::clear instead of
        StringBuilder::resize; no advantage to the latter after calling StringBuilder::toString.

        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Holder::appendNextProperty): Update for name change of
        StringBuilder::resize to StringBuilder::shrink.
        * runtime/TypeSet.cpp:
        (JSC::StructureShape::stringRepresentation): Ditto.

2021-05-19  Mark Lam  <mark.lam@apple.com>

        Speed up debug validation in CacheableIdentifier::createFromIdentifierOwnedByCodeBlock().
        https://bugs.webkit.org/show_bug.cgi?id=225948
        rdar://78175542

        Reviewed by Yusuke Suzuki.

        1. Introduce CodeBlock::hasIdentifier() so that we can encapsulate the identifier
           search better.  Change CacheableIdentifier::createFromIdentifierOwnedByCodeBlock()
           to call this method instead of rolling its own identifier search.

        2. If the CodeBlock is pathological and has a ridiculous number of identifiers
           to search, create a cached hash set of the identifiers, and use that for
           doing the search instead.

           Apparently, YouTube can have a single JS function with 2177689 bytecodes, where
           a large portion of those are put_by_ids.  The function also has some 17k+
           identifiers.  With that may bytecodes doing a validation search on 17k+
           identifiers in a Debug build, the site can become un-useable.  This optimization
           brings it back from un-useable to barely tolerable on the Debug build.

        3. Also fetch the UnlinkedCodeBlock from the WriteBarrier field just once in
           CodeBlock::identifier() and CodeBlock::hasIdentifier().  This may not matter
           on a Release build, but it can add up on a Debug build, which is already slow.
           We should try to avoid doing redundant validation via the WriteBarrier access.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::identifier const):
        (JSC::CodeBlock::hasIdentifier):
        * bytecode/CodeBlock.h:
        * runtime/CacheableIdentifierInlines.h:
        (JSC::CacheableIdentifier::createFromIdentifierOwnedByCodeBlock):

2021-05-19  Saam Barati  <sbarati@apple.com>

        Link Baseline JIT code off the main thread
        https://bugs.webkit.org/show_bug.cgi?id=225940

        Reviewed by Yusuke Suzuki.

        This patch makes JIT::link() able to run on compiler threads.
        Most of what the function was already doing happily remains the
        same. This patch moves a few operations to JIT::finalizeOnMainThread
        for things that can't happen on the compiler thread:
        - Adding data to some global hash tables which aren't synchronized.
        - Setting the JITCode.
        - Setting the code pointer for exception handlers.
        - Some other metadata the Sampling Profiler looks at.

        * jit/JIT.cpp:
        (JSC::JIT::compileAndLinkWithoutFinalizing):
        (JSC::JIT::link):
        (JSC::JIT::finalizeOnMainThread):
        (JSC::JIT::privateCompile):
        (JSC::JIT::compileWithoutLinking): Deleted.
        * jit/JIT.h:
        * jit/JITWorklist.cpp:
        (JSC::JITWorklist::Plan::compileInThread):
        (JSC::JITWorklist::Plan::finalize):
        (JSC::JITWorklist::Plan::compileOnMainThreadNow):
        (JSC::JITWorklist::compileLater):
        (JSC::JITWorklist::compileOnMainThreadNow):
        (JSC::JITWorklist::finalizePlans):
        (JSC::JITWorklist::Plan::compileNow): Deleted.
        (JSC::JITWorklist::compileNow): Deleted.
        * jit/JITWorklist.h:

2021-05-18  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Prune CommonSlowPaths of JITPropertyAccess functions
        https://bugs.webkit.org/show_bug.cgi?id=225953

        Reviewed by Mark Lam.

        A few bytecode operations with slow paths in JITPropertyAccess appear to have either redundant or unnecessary
        "common" slow paths; namely, get_private_name and del_by_val already have LLInt slow paths, while in_by_id
        and get_by_id_with_this can have their "common" slow path moved to be LLInt-specific.

        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LLIntSlowPaths.h:
        * llint/LowLevelInterpreter.asm:
        * runtime/CommonSlowPaths.cpp:
        * runtime/CommonSlowPaths.h:

2021-05-18  Robin Morisset  <rmorisset@apple.com>

        Make AirAllocateRegistersByGraphColoring use less memory
        https://bugs.webkit.org/show_bug.cgi?id=225848

        Reviewed by Filip Pizlo.

        We've had some jetsam problems caused by the main Air register allocator, which caused us to lower Options::maximumTmpsForGraphColoring.
        Hence this patch tries to improve the memory usage of the allocator. It includes several changes:
        - Change the datastructure used for representing the interference graph. Before it was effectively a HashSet<std::pair<uint16_t, uint16_t>. Now, it is either a Bitvector (for n < 400 for now, can be tweaked easily), or a Vector<LikelyDenseUnsignedIntegerSet<uint16_t>> otherwise.
        LikelyDenseUnsignedIntegerSet is a new datastructure introduced by this patch, it is either a HashSet if very sparse, or a BitVector + an amount to shift it by.
        This is by far the largest memory reduction in this patch, it reduces the maximum memory used for an interference graph in tsf-wasm in JetStream2 from 16MB to 700kB, and in mruby-wasm.aotoki.dev from 262MB to 20MB (the later only happen when we increase Options::maximumTmpsForGraphColoring.. this is the exact function which caused us to lower it).
        Its effect on smaller functions in JetStream2 is rarely as dramatic but always an improvement, and improvements between 2x and 5x are extremely common (10x to 30x are significantly rarer but do occur).
        - In order to easily test this change and any further change to this datastructure, the old approach was preserved as InterferenceHashSet, and a template to run two such datastructures in parallel, checking their equivalence was added: InstrumentedInterferenceGraph. Running with it and reportInterferenceGraphMemoryUse set to true was used to compute the numbers given above.
        - There was already some template parameter to change the size of the tmp indices from unsigned to uint16_t but the code failed to compile unless it was unsigned. I fixed this, made more consistent use of it, and switched to uint16_t in the very common case that we have less than 65k Tmps (we can have more despite the option because of spilling). This halved the memory usage of various other datastructures in the register allocator
        - unspillableTmps was a HashSet<unsigned>. Since it is often quite dense (often around 20% on JetStream2), I replaced it by a Bitvector instead
        - m_biases was a HashMap<IndexType, HashSet<IndexType>>. Since it is extremely rare that the sets have more than 8 elements (from looking at some instrumented run of JetStream2), I replaced it by HashMap<IndexType, SmallSet<IndexType>>. This not only significantly reduces memory, but nearly halves the time spent in assignColors(around 80ms -> 40ms in JetStream 2)
        - UseCounts was needlessly general: it is only used by the register allocator (all other references to UseCounts refer to the completely different B3::UseCounts), so there is no point in it computing, and then storing lots of irrelevant data. A float is also more than enough precision (especially since it is pretty much always 1, 10, 100, or 1000 in practice…). Also, since we only need it indexed by Tmps, we can use a Vector with AbsoluteTmpMapper instead of its HashMap. These changes are not just memory savings, they also make selectSpill way faster (570ms -> 250ms on my machine on JetStream2)
        - While I was at it, I did a couple of other tweaks to the logic of selectSpill. In particular, instead of having to check for isFastTmp every time, I just put the fast tmps directly in unspillableTmps, which prevents them from getting added to m_spillWorklist in the first place. This + a bit of clean-up (for example putting an early exit instead of setting score to infinity in the case of dead tmps) resulted in a further perf win (to roughly 200ms spent in selectSpill() on JetStream2)

        All together, this patch reduces the time spent in the register allocator by roughly 15 to 20% in JetStream2 (tested both with the Briggs and the IRC allocators on my MBP 2019).

        I do not yet have precise performance numbers for this exact patch, but benchmarking a previous version of it (with a less optimized interference graph) resulted in significant RAMification improvements (around 1%), and more surprisingly some JetStream2 improvements on weaker machines (e.g. an iPhone 7 gained > 1%). I believe these gains come either from less trashing of the caches, or less contention caused by the memory traffic.
        I will try to update the bugzilla with more up-to-date thorough results when I get them.

        This patch does not increase Options::maximumTmpsForGraphColoring, I intend to do that in a separate patch to make it easier to revert in case of a problem.

        * b3/B3ReduceLoopStrength.cpp:
        (JSC::B3::ReduceLoopStrength::reduceByteCopyLoopsToMemcpy):
        * b3/air/AirAllocateRegistersAndStackByLinearScan.cpp:
        * b3/air/AirAllocateRegistersByGraphColoring.cpp:
        (JSC::B3::Air::allocateRegistersByGraphColoring):
        * b3/air/AirCode.h:
        (JSC::B3::Air::Code::forEachFastTmp const):
        * b3/air/AirUseCounts.h:
        (JSC::B3::Air::UseCounts::UseCounts):
        (JSC::B3::Air::UseCounts::isConstDef const):
        (JSC::B3::Air::UseCounts::numWarmUsesAndDefs const):
        (JSC::B3::Air::UseCounts::dump const):
        * parser/Nodes.h:

2021-05-18  Saam Barati  <sbarati@apple.com>

        Add Data Call ICs that don't repatch and use them in the baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=225321
        <rdar://problem/77773796>

        Reviewed by Michael Saboff.

        This patch adds Data ICs for calls. Data ICs for calls work by loading a code 
        pointer from CallLinkInfo, and indirect calling that pointer. This means that
        to repatch such an IC, all we need to do is replace a code pointer inside
        CallLinkInfo. No need to repatch the JIT code.
        
        The current implementation only does this for monomorphic calls. We still
        repatch the JIT code for polymorphic calls. In a followup, we will also
        opt polymorphic call ICs into data-based calls:
        https://bugs.webkit.org/show_bug.cgi?id=225793
        
        This patch only uses Data Call ICs for the Baseline JIT. Even with that, it
        reduces the number of calls to cacheFlush by ~45% on JetStream2.
        
        Performance is neutral on AS Macs, but it paves the way towards doing
        unlinked JITting in JSC.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::addLateLinkTask):
        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::linkCode):
        (JSC::LinkBuffer::performFinalization):
        * assembler/LinkBuffer.h:
        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateImpl):
        * bytecode/CallLinkInfo.cpp:
        (JSC::CallLinkInfo::CallLinkInfo):
        (JSC::CallLinkInfo::unlink):
        (JSC::CallLinkInfo::fastPathStart):
        (JSC::CallLinkInfo::slowPathStart):
        (JSC::CallLinkInfo::doneLocation):
        (JSC::CallLinkInfo::setMonomorphicCallee):
        (JSC::CallLinkInfo::clearCallee):
        (JSC::CallLinkInfo::emitFirstInstructionForDataIC):
        (JSC::CallLinkInfo::emitFastPathImpl):
        (JSC::CallLinkInfo::emitFastPath):
        (JSC::CallLinkInfo::emitTailCallFastPath):
        (JSC::CallLinkInfo::emitSlowPath):
        (JSC::CallLinkInfo::emitDirectFastPath):
        (JSC::CallLinkInfo::emitDirectTailCallFastPath):
        (JSC::CallLinkInfo::initializeDirectCall):
        (JSC::CallLinkInfo::setDirectCallTarget):
        (JSC::CallLinkInfo::setSlowPathCallDestination):
        (JSC::CallLinkInfo::revertCallToStub):
        (JSC::CallLinkInfo::setStub):
        (JSC::CallLinkInfo::callReturnLocation): Deleted.
        (JSC::CallLinkInfo::patchableJump): Deleted.
        (JSC::CallLinkInfo::hotPathBegin): Deleted.
        (JSC::CallLinkInfo::setCallee): Deleted.
        * bytecode/CallLinkInfo.h:
        (JSC::CallLinkInfo::calleeGPR const):
        (JSC::CallLinkInfo::isDataIC const):
        (JSC::CallLinkInfo::setUsesDataICs):
        (JSC::CallLinkInfo::setCodeLocations):
        (JSC::CallLinkInfo::offsetOfCallee):
        (JSC::CallLinkInfo::offsetOfMonomorphicCallDestination):
        (JSC::CallLinkInfo::offsetOfSlowPathCallDestination):
        (JSC::CallLinkInfo::setCallLocations): Deleted.
        (JSC::CallLinkInfo::hotPathOther): Deleted.
        (JSC::CallLinkInfo::setStub): Deleted.
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addJSCall):
        (JSC::DFG::JITCompiler::addJSDirectCall):
        (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord):
        (JSC::DFG::JITCompiler::JSDirectCallRecord::JSDirectCallRecord):
        (JSC::DFG::JITCompiler::addJSDirectTailCall): Deleted.
        (JSC::DFG::JITCompiler::JSDirectTailCallRecord::JSDirectTailCallRecord): Deleted.
        * dfg/DFGOSRExitCompilerCommon.cpp:
        (JSC::DFG::callerReturnPC):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct):
        (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct):
        (JSC::FTL::DFG::LowerDFGToB3::compileTailCall):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs):
        * jit/CCallHelpers.cpp:
        (JSC::CCallHelpers::emitJITCodeOver):
        * jit/CCallHelpers.h:
        * jit/JIT.cpp:
        (JSC::JIT::link):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileTailCall):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jit/PolymorphicCallStubRoutine.cpp:
        (JSC::PolymorphicCallNode::unlink):
        * jit/Repatch.cpp:
        (JSC::linkSlowPathTo):
        (JSC::linkSlowFor):
        (JSC::linkMonomorphicCall):
        (JSC::linkDirectCall):
        (JSC::revertCall):
        (JSC::unlinkCall):
        (JSC::linkPolymorphicCall):
        (JSC::linkFor): Deleted.
        (JSC::linkDirectFor): Deleted.
        (JSC::unlinkFor): Deleted.
        * jit/Repatch.h:
        * wasm/js/WasmToJS.cpp:
        (JSC::Wasm::wasmToJS):

2021-05-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r276655.
        https://bugs.webkit.org/show_bug.cgi?id=225930

        caused a 2% PLT regression

        Reverted changeset:

        "StructureStubInfo and PolymorphicAccess should account for
        their non-GC memory"
        https://bugs.webkit.org/show_bug.cgi?id=225113
        https://trac.webkit.org/changeset/276655

2021-05-18  Keith Miller  <keith_miller@apple.com>

        Temporarily revert r276592 as it breaks some native apps
        https://bugs.webkit.org/show_bug.cgi?id=225917

        Unreviewed, revert.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::put):
        * debugger/DebuggerScope.h:
        * runtime/ClassInfo.h:
        * runtime/ClonedArguments.h:
        * runtime/CustomGetterSetter.cpp:
        (JSC::callCustomSetter):
        * runtime/CustomGetterSetter.h:
        * runtime/ErrorConstructor.h:
        * runtime/ErrorInstance.h:
        * runtime/GenericArguments.h:
        * runtime/GenericArgumentsInlines.h:
        (JSC::GenericArguments<Type>::put):
        * runtime/GetterSetter.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::put):
        * runtime/JSArray.h:
        * runtime/JSArrayBufferView.cpp:
        (JSC::JSArrayBufferView::put):
        * runtime/JSArrayBufferView.h:
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::putToPrimitive):
        * runtime/JSCell.cpp:
        (JSC::JSCell::doPutPropertySecurityCheck):
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::put):
        * runtime/JSFunction.h:
        * runtime/JSGenericTypedArrayView.h:
        * runtime/JSGlobalLexicalEnvironment.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::put):
        * runtime/JSGlobalObject.h:
        * runtime/JSLexicalEnvironment.h:
        * runtime/JSModuleEnvironment.h:
        * runtime/JSModuleNamespaceObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::doPutPropertySecurityCheck):
        (JSC::JSObject::putInlineSlow):
        (JSC::JSObject::prototypeChainMayInterceptStoreTo):
        (JSC::definePropertyOnReceiverSlow): Deleted.
        (JSC::JSObject::definePropertyOnReceiver): Deleted.
        (JSC::JSObject::putInlineFastReplacingStaticPropertyIfNeeded): Deleted.
        * runtime/JSObject.h:
        (JSC::JSObject::putByIndexInline):
        (JSC::JSObject::doPutPropertySecurityCheck):
        (JSC::JSObject::hasNonReifiedStaticProperties): Deleted.
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::canPerformFastPutInlineExcludingProto):
        (JSC::JSObject::putInlineForJSObject):
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::putInlineFast): Deleted.
        * runtime/JSProxy.h:
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::overridesGetOwnPropertySlot const):
        (JSC::TypeInfo::overridesAnyFormOfGetOwnPropertyNames const):
        (JSC::TypeInfo::hasPutPropertySecurityCheck const):
        (JSC::TypeInfo::hasStaticPropertyTable const): Deleted.
        (JSC::TypeInfo::overridesPut const): Deleted.
        * runtime/Lookup.h:
        (JSC::putEntry):
        (JSC::lookupPut):
        * runtime/PropertySlot.h:
        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::put):
        * runtime/ProxyObject.h:
        * runtime/PutPropertySlot.h:
        (JSC::PutPropertySlot::PutPropertySlot):
        (JSC::PutPropertySlot::context const):
        (JSC::PutPropertySlot::type const):
        (JSC::PutPropertySlot::isInitialization const):
        (JSC::PutPropertySlot::isTaintedByOpaqueObject const): Deleted.
        (JSC::PutPropertySlot::setIsTaintedByOpaqueObject): Deleted.
        * runtime/ReflectObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::put):
        * runtime/RegExpObject.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::put):
        * runtime/StringObject.h:
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::finishCreation):
        (JSC::StringPrototype::create):
        * runtime/StringPrototype.h:
        * runtime/Structure.cpp:
        (JSC::Structure::validateFlags):
        * runtime/Structure.h:
        (JSC::Structure::takesSlowPathInDFGForImpureProperty):
        (JSC::Structure::hasNonReifiedStaticProperties const): Deleted.
        * tools/JSDollarVM.cpp:

2021-05-18  Yoshiaki Jitsukawa  <yoshiaki.jitsukawa@sony.com>

        [PlayStation] Fix PlayStation port
        https://bugs.webkit.org/show_bug.cgi?id=225913

        Reviewed by Don Olmstead.

        Fix PlayStation port

        * jsc.cpp: Include LinkBuffer.h.

2021-05-18  Adrian Perez de Castro  <aperez@igalia.com>

        [JSCOnly] Non unified build fixes
        https://bugs.webkit.org/show_bug.cgi?id=225872

        Unreviewed non-unified build fixes.

        * jit/JITPropertyAccess.cpp: Add missing ThunkGenerators.h header.
        * jit/SlowPathCall.cpp: Add missing JITInlines.h and ThunkGenerators.h headers.
        * wasm/js/WebAssemblyFunctionBase.h: Add missing WasmFormat.h header.

2021-05-17  Saam Barati  <sbarati@apple.com>

        Enable JS to emit sign posts and trace points under Options::exposeProfilersOnGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=225895

        Reviewed by Yusuke Suzuki.

        * runtime/JSGlobalObject.cpp:
        (JSC::asTracePointInt):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::asSignpostString):
        (JSC::JSGlobalObject::init):

2021-05-17  Geoffrey Garen  <ggaren@apple.com>

        StructureRareData::m_replacementWatchpointSets should not be a pointer to a pointer
        https://bugs.webkit.org/show_bug.cgi?id=225840

        Reviewed by Mark Lam.

        HashMap is already just one pointer. Making it a pointer to a pointer
        causes heap fragmentation. Worth about 1MB on GMail.

        * runtime/Structure.cpp:
        (JSC::Structure::ensurePropertyReplacementWatchpointSet):
        * runtime/StructureInlines.h:
        (JSC::Structure::didReplaceProperty):
        (JSC::Structure::propertyReplacementWatchpointSet):
        * runtime/StructureRareData.h:

2021-05-17  Alexey Shvayka  <shvaikalesh@gmail.com>

        REGRESSION (r271119): Object methods defined with shorthand notation cannot access "caller" in non-strict mode
        https://bugs.webkit.org/show_bug.cgi?id=225277

        Reviewed by Darin Adler.

        This patch loosens `function.caller` to allow non-strict getters, setters, arrow functions,
        and ES6 methods to be returned as callers, fixing web compatibility.

        The intent of r230662 is preserved: generator / async functions are never exposed. There is
        no good way to acquire wrapper function from the internal body one, nor from its arguments.
        Also, this behavior is on standards track [1] (seems to be considered desirable).

        [1]: https://github.com/claudepache/es-legacy-function-reflection/blob/master/spec.md#get-functionprototypecaller (step 14)

        * runtime/JSFunction.cpp:
        (JSC::JSC_DEFINE_CUSTOM_GETTER):

2021-05-16  Mark Lam  <mark.lam@apple.com>

        Implement baseline op_enter, op_ret, op_check_traps, op_throw using JIT thunks.
        https://bugs.webkit.org/show_bug.cgi?id=225846

        Reviewed by Filip Pizlo.

        op_enter, op_ret, op_check_traps are 3 of the most common opcodes.  Throwing in
        op_throw because it's easy.

        In this patch, the following changes were also made:

        1. Renamed copyCalleeSavesFromFrameOrRegisterToEntryFrameCalleeSavesBuffer() to
           copyLLIntBaselineCalleeSavesFromFrameOrRegisterToEntryFrameCalleeSavesBuffer().

           It is only used by the baseline JIT.  Changed it to always operate on
           RegisterAtOffsetList::llintBaselineCalleeSaveRegisters().  This removes the
           dependency on a current codeBlock being compiled, and allows us to use it
           for a JIT thunk.

        2. Added JIT::emitNakedNearJump() to make it easy to emit direct jumps to JIT thunks.

           Currently, it is only used by op_ret and op_throw.

        3. Changed some thunks to use emitNonPatchableExceptionCheck() instead
           emitExceptionCheck() to make it explicit that these are not intended to be
           patchable.

        With this patch, --dumpLinkBufferStats shows the following changes in emitted
        JIT code size (using a single run of the CLI version of JetStream2 on AS Mac)
        comparing to current tip of tree:

                        Base                     New                      Diff

           BaselineJIT: 77429400 (73.842430 MB)  72407904 (69.053558 MB)  0.94x (reduction)
                   DFG: 36160880 (34.485703 MB)  36622176 (34.925629 MB)  1.01x
                 Thunk: 23159024 (22.086166 MB)  23295448 (22.216270 MB)  1.01x
           InlineCache: 22068348 (21.046017 MB)  22157236 (21.130787 MB)  1.00x
                   FTL: 6004736 (5.726562 MB)    6030536 (5.751167 MB)    1.00x
                  Wasm: 2429204 (2.316669 MB)    2300872 (2.194283 MB)    0.95x (probably noise)
               YarrJIT: 1522488 (1.451958 MB)    1522616 (1.452080 MB)    1.00x
                CSSJIT: 0                        0
         Uncategorized: 0                        0

        Cumulative diff since the start of this effort to put more code in JIT thunks:

                        Base                     New                      Diff

           BaselineJIT: 89089964 (84.962811 MB)  72407904 (69.053558 MB)  0.81x (reduction)
                   DFG: 39117360 (37.305222 MB)  36622176 (34.925629 MB)  0.94x (reduction)
                 Thunk: 23230968 (22.154778 MB)  23295448 (22.216270 MB)  1.00x
           InlineCache: 22027416 (21.006981 MB)  22157236 (21.130787 MB)  1.01x
                   FTL: 6575772 (6.271145 MB)    6030536 (5.751167 MB)    0.92x (reduction)
                  Wasm: 2302724 (2.196049 MB)    2300872 (2.194283 MB)    1.00x
               YarrJIT: 1538956 (1.467663 MB)    1522616 (1.452080 MB)    0.99x
                CSSJIT: 0                        0
         Uncategorized: 0                        0

        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::sub64):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::emitRestoreCalleeSavesFor):
        (JSC::AssemblyHelpers::copyLLIntBaselineCalleeSavesFromFrameOrRegisterToEntryFrameCalleeSavesBuffer):
        (JSC::AssemblyHelpers::copyCalleeSavesFromFrameOrRegisterToEntryFrameCalleeSavesBuffer): Deleted.
        * jit/JIT.cpp:
        (JSC::JIT::emitEnterOptimizationCheck):
        (JSC::JIT::link):
        * jit/JIT.h:
        (JSC::NearJumpRecord::NearJumpRecord):
        * jit/JITInlines.h:
        (JSC::JIT::emitNakedNearJump):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_ret):
        (JSC::JIT::op_ret_handlerGenerator):
        (JSC::JIT::emit_op_throw):
        (JSC::JIT::op_throw_handlerGenerator):
        (JSC::JIT::emit_op_enter):
        (JSC::JIT::op_enter_handlerGenerator):
        (JSC::JIT::emitSlow_op_loop_hint):
        (JSC::JIT::emitSlow_op_check_traps):
        (JSC::JIT::op_check_traps_handlerGenerator):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::slow_op_get_from_scopeGenerator):
        (JSC::JIT::slow_op_put_to_scopeGenerator):
        * jit/JITThunks.cpp:
        (JSC::JITThunks::preinitializeExtraCTIThunks):
        * jit/SlowPathCall.cpp:
        (JSC::JITSlowPathCall::generateThunk):

2021-05-16  Keith Miller  <keith_miller@apple.com>

        IsoAlignedMemoryAllocator should use BitVector
        https://bugs.webkit.org/show_bug.cgi?id=225852

        Reviewed by Mark Lam.

        Right now IsoAlignedMemoryAllocator uses FastBitVector, which does
        not have inline storage for small sizes. However, it's not
        uncommon for IsoAlignedMemoryAllocator to be holding onto only a
        few blocks. Those blocks may exist for a long time, which some
        data indicates causes IsoAlignedMemoryAllocator's FastBitVector to
        pin a full physical page for one 8 byte allocation. Since
        accessing the commited blocks list is not a particularly hot
        operation, we should just use a BitVector instead.

        This seems to be perf neutral on benchmarks.

        * heap/IsoAlignedMemoryAllocator.cpp:
        (JSC::IsoAlignedMemoryAllocator::~IsoAlignedMemoryAllocator):
        (JSC::IsoAlignedMemoryAllocator::tryAllocateAlignedMemory):
        (JSC::IsoAlignedMemoryAllocator::freeAlignedMemory):
        * heap/IsoAlignedMemoryAllocator.h:

2021-05-16  Saam Barati  <sbarati@apple.com>

        DFGVarargsForwardingPhase shouldn't consult Flush
        https://bugs.webkit.org/show_bug.cgi?id=225824

        Reviewed by Filip Pizlo and Yusuke Suzuki.

        In the Varargs Forwarding Phase, we were treating Flush as if it
        were any other form of node that interferes with an argument
        via clobbering a stack location.
        
        This isn't how Flush works though. It doesn't have execution
        semantics at the node's graph location. Instead, Flush means that
        any variable it's linked to in CPS should be flushed to the stack
        between it and the Flush.
        
        The semantics of arguments is that they're already flushed to the
        stack, and they've always been. Seeing a Flush node doesn't prevent
        arguments elimination, we already know the arguments are on the stack,
        and all we're searching for is if there is an interference operation
        that says it'll clobber that stack slot. Flush isn't an interference operation.
        
        This is a 0.5% Speedometer progression.

        * dfg/DFGVarargsForwardingPhase.cpp:

2021-05-15  Alexey Shvayka  <shvaikalesh@gmail.com>

        Turn callGetter() / callSetter() into instance methods
        https://bugs.webkit.org/show_bug.cgi?id=225831

        Reviewed by Ross Kirsling.

        1. Turn callGetter() / callSetter() into instance methods to simplify their signatures.
        2. Rename `base` parameter to `thisValue`, avoiding similarity with slotBase().
        3. Accept `bool shouldThrow` in callSetter() since ECMAMode is cumbersome to construct.
        4. Replace isSetterNull(), which does LIKELY(inherits), with direct JSType check.
        5. Introduce getCallData(VM&, JSCell*) overload to avoid extra checks / casts.
        6. Move isValidCallee() to JSCell and handle primitives gracefully.

        No behavior change. Advances provided callSetter() microbenchmark by 2%.

        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::callGetter):
        (JSC::GetterSetter::callSetter):
        (JSC::callGetter): Deleted.
        (JSC::callSetter): Deleted.
        * runtime/GetterSetter.h:
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::isValidCallee): Deleted.
        * runtime/JSCJSValue.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::isValidCallee const):
        * runtime/JSCell.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::putInlineSlow):
        * runtime/JSObjectInlines.h:
        (JSC::getCallData):
        (JSC::getConstructData):
        * runtime/PropertySlot.cpp:
        (JSC::PropertySlot::functionGetter const):
        * runtime/SparseArrayValueMap.cpp:
        (JSC::SparseArrayEntry::put):

2021-05-14  Chris Dumez  <cdumez@apple.com>

        Drop FileSystem::fileMetadata() / fileMetadataFollowingSymlinks()
        https://bugs.webkit.org/show_bug.cgi?id=225820

        Reviewed by Darin Adler.

        Update our code base because of the FileSystem API changes.

        * API/JSScript.mm:
        (validateBytecodeCachePath):

2021-05-14  Ross Kirsling  <ross.kirsling@sony.com>

        REGRESSION (r277221): 2 test262 tests failing
        https://bugs.webkit.org/show_bug.cgi?id=225819

        Reviewed by Alexey Shvayka.

        Undo the other part of r277221's code consolidation --
        I'd forgotten that this exists to enforce a evaluation order on AggregateError's arguments.

        * runtime/AggregateError.cpp:
        (JSC::createAggregateError):

2021-05-14  Mark Lam  <mark.lam@apple.com>

        Implement Baseline JIT property access slow paths using JIT thunks.
        https://bugs.webkit.org/show_bug.cgi?id=225771

        Reviewed by Yusuke Suzuki and Saam Barati.

        This patch applies the following strategy to Baseline JIT property access slow paths:

        1. If the slow path operation call is not patchable, emit a near call to a JIT
           thunk to do the entire operation call.

        2. If the slow path operation call is patachable, emit a near call to a prepare
           call JIT thunk before the patchable operation call, and a near call to an exception
           check JIT thunk after.

        This strategy reduces the amount of instructions emitted for all the slow paths.
        Performance is expected to be neutral or slightly improved due to the reduced
        compile times and better cache locality.

        With this patch, --dumpLinkBufferStats shows the following changes in emitted
        JIT code size (using a single run of the CLI version of JetStream2 on AS Mac)
        comparing to current tip of tree:

                        Base                     New                      Diff

           BaselineJIT: 84624776 (80.704475 MB)  77429400 (73.842430 MB)  0.91x (reduction)
                   DFG: 36415264 (34.728302 MB)  36160880 (34.485703 MB)  0.99x
                 Thunk: 23130336 (22.058807 MB)  23159024 (22.086166 MB)  1.00x
           InlineCache: 21969728 (20.951965 MB)  22068348 (21.046017 MB)  1.00x
                   FTL: 6097336 (5.814873 MB)    6004736 (5.726562 MB)    0.98x
                  Wasm: 2301956 (2.195316 MB)    2429204 (2.316669 MB)    1.06x (probably noise)
               YarrJIT: 1522488 (1.451958 MB)    1522488 (1.451958 MB)    1.00x
                CSSJIT: 0
         Uncategorized: 0

        Comparing to tip of tree at the start of this effort to move put slow paths in
        JIT thunks:

                        Base                     New                      Diff

           BaselineJIT: 89089964 (84.962811 MB)  77429400 (73.842430 MB)  0.87x (reduction)
                   DFG: 39117360 (37.305222 MB)  36160880 (34.485703 MB)  0.92x (reduction)
                 Thunk: 23230968 (22.154778 MB)  23159024 (22.086166 MB)  1.00x
           InlineCache: 22027416 (21.006981 MB)  22068348 (21.046017 MB)  1.00x
                   FTL: 6575772 (6.271145 MB)    6004736 (5.726562 MB)    0.91x (reduction)
                  Wasm: 2302724 (2.196049 MB)    2429204 (2.316669 MB)    1.05x (probably noise)
               YarrJIT: 1538956 (1.467663 MB)    1522488 (1.451958 MB)    0.99x
                CSSJIT: 0                        0
         Uncategorized: 0                        0

        This patch has passed the JSC tests on AS Mac, and also a subset of the JSC tests
        (as a smoke test) on x86_64.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::offsetOfGlobalObject):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::callExceptionFuzz):
        (JSC::AssemblyHelpers::emitExceptionCheck):
        (JSC::AssemblyHelpers::emitNonPatchableExceptionCheck):
        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::slow_op_get_by_val_prepareCallGenerator):
        (JSC::JIT::emitSlow_op_get_private_name):
        (JSC::JIT::slow_op_get_private_name_prepareCallGenerator):
        (JSC::JIT::emitSlow_op_set_private_brand):
        (JSC::JIT::emitSlow_op_check_private_brand):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::slow_op_put_by_val_prepareCallGenerator):
        (JSC::JIT::emitSlow_op_put_private_name):
        (JSC::JIT::slow_op_put_private_name_prepareCallGenerator):
        (JSC::JIT::emitSlow_op_del_by_id):
        (JSC::JIT::slow_op_del_by_id_prepareCallGenerator):
        (JSC::JIT::emitSlow_op_del_by_val):
        (JSC::JIT::slow_op_del_by_val_prepareCallGenerator):
        (JSC::JIT::emitSlow_op_try_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id_direct):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::slow_op_get_by_id_prepareCallGenerator):
        (JSC::JIT::emitSlow_op_get_by_id_with_this):
        (JSC::JIT::slow_op_get_by_id_with_this_prepareCallGenerator):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::slow_op_put_by_id_prepareCallGenerator):
        (JSC::JIT::emitSlow_op_in_by_id):
        (JSC::JIT::emitSlow_op_get_from_scope):
        (JSC::JIT::slow_op_get_from_scopeGenerator):
        (JSC::JIT::emitSlow_op_put_to_scope):
        (JSC::JIT::slow_op_put_to_scopeGenerator):
        * jit/JITThunks.cpp:
        (JSC::JITThunks::preinitializeExtraCTIThunks):
        * jit/SlowPathCall.cpp:
        (JSC::JITSlowPathCall::call):
        * jit/ThunkGenerators.cpp:
        (JSC::checkExceptionGenerator):
        * jit/ThunkGenerators.h:

2021-05-14  Chris Dumez  <cdumez@apple.com>

        Rename FileSystem::getFileSize() to FileSystem::fileSize()
        https://bugs.webkit.org/show_bug.cgi?id=225798

        Reviewed by Alex Christensen.

        Update code path to due to the API change.

        * inspector/remote/socket/RemoteInspectorSocket.cpp:
        (Inspector::RemoteInspector::backendCommands const):
        * jsc.cpp:

2021-05-13  Darin Adler  <darin@apple.com>

        Follow-up fix for: Remove StringBuilder::appendNumber
        https://bugs.webkit.org/show_bug.cgi?id=225732
        rdar://78000283

        * heap/HeapSnapshotBuilder.cpp:
        (JSC::HeapSnapshotBuilder::json): Removed a stray single quote mark that
        meant we produced a JSON file that could not be parsed.

2021-05-13  Patrick Angle  <pangle@apple.com>

        [REGRESSION: r271876] Web Inspector: [Cocoa] Remote inspection crashes when using WEB_THREAD
        https://bugs.webkit.org/show_bug.cgi?id=225794

        Reviewed by Devin Rousso.

        For WEB_THREAD, move `callback` in `dispatchAsyncOnTarget` to `block` scope to ensure it is available for the
        lifetime of the block.

        * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:
        (Inspector::RemoteConnectionToTarget::dispatchAsyncOnTarget):

2021-05-13  Geoffrey Garen  <ggaren@apple.com>

        m_calleeSaveRegisters should not be a pointer to a pointer
        https://bugs.webkit.org/show_bug.cgi?id=225787

        Reviewed by Keith Miller.

        Ben found this through memory stress testing.

        RegisterAtOffsetList is effectively just a pointer. unique_ptr<RegisterAtOffsetList>
        is a pointer to a pointer. RegisterAtOffsetList is long-lived, so it
        creates heap page fragmentation.

        Worth 3MB on Ben's test.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::setCalleeSaveRegisters):
        (JSC::CodeBlock::calleeSaveRegisters const): Use a fence before setting
        m_hasCalleeSaveRegisters to ensure that all writes have completed before
        the struct becomes visible.

        * bytecode/CodeBlock.h: Use RegisterAtOffsetList directly instead of 
        unique_ptr<RegisterAtOffsetList> to avoid a long-lived lonely 8 byte
        allocation.

        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile): Updated for type change.

2021-05-13  Chris Dumez  <cdumez@apple.com>

        Rename FileSystem::directoryName() to FileSystem::parentPath()
        https://bugs.webkit.org/show_bug.cgi?id=225768

        Reviewed by Darin Adler.

        Rename FileSystem::directoryName() to FileSystem::parentPath() for clarity and
        consistency with std::filesystem::parent_path() which is used internally.

        * API/JSScript.mm:
        (validateBytecodeCachePath):

2021-05-13  Chris Dumez  <cdumez@apple.com>

        Rename FileSystem::fileIsDirectory(path, followSymlinks) to isDirectory(path) / isDirectoryFollowingSymlinks(path)
        https://bugs.webkit.org/show_bug.cgi?id=225772

        Reviewed by Darin Adler.

        Update code base due to API naming change.

        * API/JSScript.mm:
        (validateBytecodeCachePath):

2021-05-13  Darin Adler  <darin@apple.com>

        Remove StringBuilder::appendNumber
        https://bugs.webkit.org/show_bug.cgi?id=225732

        Reviewed by Sam Weinig.

        * API/JSContextRef.cpp:
        (BacktraceFunctor::operator() const): Use append instead of appendNumber.
        * API/tests/PingPongStackOverflowTest.cpp:
        (PingPongStackOverflowObject_hasInstance): Ditto.
        * heap/HeapSnapshotBuilder.cpp:
        (JSC::HeapSnapshotBuilder::json): Ditto.

        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::Frame::toString const): Use makeString instead of StringBuilder.

        * runtime/ConsoleClient.cpp:
        (JSC::appendURLAndPosition): Ditto.
        (JSC::ConsoleClient::printConsoleMessageWithArguments): Use append instead of appendNumber.
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::appendStringifiedValue): Ditto.
        * runtime/Options.cpp:
        (JSC::OptionReader::Option::dump const): Ditto.

        * runtime/StackFrame.cpp:
        (JSC::StackFrame::toString const): Use makeString instead of StringBuilder.

2021-05-12  Geoffrey Garen  <ggaren@apple.com>

        ConservativeRoots triggers page demand on Speedometer
        https://bugs.webkit.org/show_bug.cgi?id=225676

        Reviewed by Filip Pizlo.

        Use a 2048 item / 16kB inline buffer. That's about 10% bigger than the
        max capacity observed on Speedometer, and small enough to reasonably fit
        on the stack.

        Removed the separate out of line capacity because it was smaller than
        the new inline capacity.

        * heap/ConservativeRoots.cpp:
        (JSC::ConservativeRoots::grow):
        * heap/ConservativeRoots.h:

2021-05-12  Mark Lam  <mark.lam@apple.com>

        Implement some common Baseline JIT slow paths using JIT thunks.
        https://bugs.webkit.org/show_bug.cgi?id=225682

        Reviewed by Filip Pizlo.

        This patch implements the following changes:

        1. Implement exception handling thunks:
           a. handleExceptionGenerator, which calls operationLookupExceptionHandler().
           b. handleExceptionWithCallFrameRollbackGenerator, which calls
              operationLookupExceptionHandlerFromCallerFrame().

           All the JIT tiers were emitting their own copy of these routines to call these
           operation, one per CodeBlock.  We now emit 2 thunks for these and have all the
           tiers just jump to them.

           PolymorphicAccess also now uses the handleExceptionGenerator thunk.

           DFG::JITCompiler::compileExceptionHandlers() has one small behavior difference
           before it calls operationLookupExceptionHandlerFromCallerFrame(): it first
           re-sets the top of stack for the function where we are about to throw a
           StackOverflowError from.  This re-setting of top of stack is useless because
           we're imminently unwinding out of at least this frame for the StackOverflowError.
           Hence, it is ok to use the handleExceptionWithCallFrameRollbackGenerator thunk
           here as well.  Note that no other tiers does this re-setting of top of stack.

           FTLLowerDFGToB3 has one case using operationLookupExceptionHandlerFromCallerFrame()
           which cannot be refactored to use these thunks because it does additional
           work to throw a StackOverflowError.  A different thunk will be needed.  I left
           it alone for now.

        2. Introduce JITThunks::existingCTIStub(ThunkGenerator, NoLockingNecessaryTag) so
           that a thunk can get a pointer to another thunk without locking the JITThunks
           lock.  Otherwise, deadlock ensues.

        3. Change SlowPathCall to emit and use thunks instead of emitting a blob of code
           to call a slow path function for every bytecode in a CodeBlock.

        4. Introduce JITThunks::ctiSlowPathFunctionStub() to manage these SlowPathFunction
           thunks.

        5. Introduce JITThunks::preinitializeAggressiveCTIThunks() to initialize these
           thunks at VM initialization time.  Pre-initializing them has multiple benefits:
           a. the thunks are not scattered through out JIT memory, thereby reducing
              fragmentation.
           b. we don't spend time at runtime compiling them when the user is interacting
              with the VM.  Conceptually, these thunks can be VM independent and can be
              shared by VMs process-wide.  However, it will require some additional work.
              For now, the thunks remain bound to a specific VM instance.

        These changes are only enabled when ENABLE(EXTRA_CTI_THUNKS), which is currently
        only available for ARM64 and non-Windows x86_64.

        This patch has passed JSC tests on AS Mac.

        With this patch, --dumpLinkBufferStats shows the following changes in emitted
        JIT code size (using a single run of the CLI version of JetStream2 on AS Mac):

                        Base                     New                      Diff

           BaselineJIT: 89089964 (84.962811 MB)  84624776 (80.704475 MB)  0.95x (reduction)
                   DFG: 39117360 (37.305222 MB)  36415264 (34.728302 MB)  0.93x (reduction)
                 Thunk: 23230968 (22.154778 MB)  23130336 (22.058807 MB)  1.00x
           InlineCache: 22027416 (21.006981 MB)  21969728 (20.951965 MB)  1.00x
                   FTL: 6575772 (6.271145 MB)    6097336 (5.814873 MB)    0.93x (reduction)
                  Wasm: 2302724 (2.196049 MB)    2301956 (2.195316 MB)    1.00x
               YarrJIT: 1538956 (1.467663 MB)    1522488 (1.451958 MB)    0.99x
                CSSJIT: 0                        0
         Uncategorized: 0                        0

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::offsetOfInstructionsRawPointer):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessGenerationState::emitExplicitExceptionHandler):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileExceptionHandlers):
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile):
        * ftl/FTLLink.cpp:
        (JSC::FTL::link):
        * jit/JIT.cpp:
        (JSC::JIT::link):
        (JSC::JIT::privateCompileExceptionHandlers):
        * jit/JIT.h:
        * jit/JITThunks.cpp:
        (JSC::JITThunks::existingCTIStub):
        (JSC::JITThunks::ctiSlowPathFunctionStub):
        (JSC::JITThunks::preinitializeExtraCTIThunks):
        * jit/JITThunks.h:
        * jit/SlowPathCall.cpp: Added.
        (JSC::JITSlowPathCall::call):
        (JSC::JITSlowPathCall::generateThunk):
        * jit/SlowPathCall.h:
        * jit/ThunkGenerators.cpp:
        (JSC::handleExceptionGenerator):
        (JSC::handleExceptionWithCallFrameRollbackGenerator):
        (JSC::popThunkStackPreservesAndHandleExceptionGenerator):
        * jit/ThunkGenerators.h:
        * runtime/CommonSlowPaths.h:
        * runtime/SlowPathFunction.h: Added.
        * runtime/VM.cpp:
        (JSC::VM::VM):

2021-05-12  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r277346.
        https://bugs.webkit.org/show_bug.cgi?id=225705

        Introduced a (rare) deadlock

        Reverted changeset:

        "ConservativeRoots triggers page demand on Speedometer"
        https://bugs.webkit.org/show_bug.cgi?id=225676
        https://trac.webkit.org/changeset/277346

2021-05-12  Mark Lam  <mark.lam@apple.com>

        Remove dead code around ENABLE(OPCODE_SAMPLING) and ENABLE(CODEBLOCK_SAMPLING).
        https://bugs.webkit.org/show_bug.cgi?id=225699

        Reviewed by Tadeu Zagallo.

        This code revolves around an Interpreter::sampler() method which returns a
        SamplingTool*.  Neither the Interpreter method nor the SamplingTool class exists
        anymore.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::compileWithoutLinking):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileCallEval):
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileCallEval):
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITInlines.h:
        (JSC::JIT::sampleInstruction): Deleted.
        (JSC::JIT::sampleCodeBlock): Deleted.
        * jit/JITOperations.cpp:
        * jit/SlowPathCall.h:
        (JSC::JITSlowPathCall::call):
        * runtime/ScriptExecutable.h:
        (JSC::ScriptExecutable::finishCreation): Deleted.

2021-05-11  Geoffrey Garen  <ggaren@apple.com>

        ConservativeRoots triggers page demand on Speedometer
        https://bugs.webkit.org/show_bug.cgi?id=225676

        Reviewed by Saam Barati.

        Use a Vector instead of OSAllocator to avoid mmap() and page fault --
        and, like, come on.

        Bump default inlineCapacity up to 1024 because we seem to overflow
        frequently.

        * heap/ConservativeRoots.cpp:
        (JSC::ConservativeRoots::ConservativeRoots):
        (JSC::ConservativeRoots::~ConservativeRoots):
        (JSC::ConservativeRoots::genericAddPointer):
        (JSC::ConservativeRoots::grow): Deleted.
        * heap/ConservativeRoots.h:
        (JSC::ConservativeRoots::roots const):
        (JSC::ConservativeRoots::size const): Deleted.
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::append):
        * heap/VerifierSlotVisitor.cpp:
        (JSC::VerifierSlotVisitor::append):

2021-05-10  Filip Pizlo  <fpizlo@apple.com>

        Tune number of threads for AS
        https://bugs.webkit.org/show_bug.cgi?id=225635

        Reviewed by Mark Lam.

        Using 4 GC markers (which really means 3 parallel GC worker threads -- the mutator thread is
        the 4th), 2 DFG threads, and 2 FTL threads seems to be more optimal than going off ncpu.

        ~1% JetStream2 speed-up, ~1% Speedometer2 speed-up.

        * runtime/Options.cpp:
        (JSC::overrideDefaults):

2021-05-10  Mark Lam  <mark.lam@apple.com>

        Removed unused CallRecord::bytecodeIndex field.
        https://bugs.webkit.org/show_bug.cgi?id=225627

        Reviewed by Yusuke Suzuki.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileExceptionHandlers):
        * jit/JIT.h:
        (JSC::CallRecord::CallRecord):
        * jit/JITInlines.h:
        (JSC::JIT::emitNakedNearCall):
        (JSC::JIT::emitNakedNearTailCall):

2021-05-10  Mark Lam  <mark.lam@apple.com>

        Add support to collect stats on cumulative LinkBuffer linked sizes based on profiles.
        https://bugs.webkit.org/show_bug.cgi?id=225617

        Reviewed by Saam Barati.

        There are 2 ways to dump the stats:
        1. Specify --dumpLinkBufferStats as an argument to the jsc shell.
        2. Call $vm.dumpLinkBufferStats() from your JS script to get the stats as a string.
           e.g.
                $vm.print($vm.dumpLinkBufferStats());

        Here's an example of what the dump looks like:

            Cummulative LinkBuffer profile sizes:
                       BaselineJIT: 79480320 (75.798340 MB)
                               DFG: 36108672 (34.435913 MB)
                             Thunk: 22495360 (21.453247 MB)
                       InlineCache: 19538521 (18.633386 MB)
                               FTL: 5186240 (4.945984 MB)
                              Wasm: 1998272 (1.905701 MB)
                           YarrJIT: 1331072 (1.269409 MB)
                            CSSJIT: 0
                     Uncategorized: 0

        The stats are currently grouped into some coarse profiles.  If needed, we can
        break these down into more fine grain profiles later.

        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::performFinalization):
        (JSC::LinkBuffer::dumpProfileStatistics):
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::LinkBuffer):
        * bytecode/InlineAccess.cpp:
        (JSC::linkCodeInline):
        (JSC::InlineAccess::rewireStubAsJump):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::PolymorphicAccess::regenerate):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compile):
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGThunks.cpp:
        (JSC::DFG::osrExitGenerationThunkGenerator):
        (JSC::DFG::osrEntryThunkGenerator):
        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile):
        * ftl/FTLLazySlowPath.cpp:
        (JSC::FTL::LazySlowPath::generate):
        * ftl/FTLLink.cpp:
        (JSC::FTL::link):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        * ftl/FTLThunks.cpp:
        (JSC::FTL::genericGenerationThunkGenerator):
        (JSC::FTL::slowPathCallThunkGenerator):
        * jit/ExecutableAllocator.cpp:
        (JSC::jitWriteThunkGenerator):
        * jit/JIT.cpp:
        (JSC::JIT::compileWithoutLinking):
        * jit/JITMathIC.h:
        (JSC::JITMathIC::generateOutOfLine):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileHasIndexedProperty):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileHasIndexedProperty):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByVal):
        (JSC::JIT::privateCompilePutPrivateNameWithCachedId):
        (JSC::JIT::privateCompilePutByValWithCachedId):
        * jit/Repatch.cpp:
        (JSC::linkPolymorphicCall):
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::finalize):
        * jit/ThunkGenerators.cpp:
        (JSC::throwExceptionFromCallSlowPathGenerator):
        (JSC::linkCallThunkGenerator):
        (JSC::linkPolymorphicCallThunkGenerator):
        (JSC::virtualThunkFor):
        (JSC::nativeForGenerator):
        (JSC::arityFixupGenerator):
        (JSC::unreachableGenerator):
        (JSC::stringGetByValGenerator):
        (JSC::boundFunctionCallGenerator):
        * jsc.cpp:
        (CommandLine::parseArguments):
        (jscmain):
        * llint/LLIntThunks.cpp:
        (JSC::LLInt::generateThunkWithJumpTo):
        (JSC::LLInt::generateThunkWithJumpToPrologue):
        (JSC::LLInt::generateThunkWithJumpToLLIntReturnPoint):
        (JSC::LLInt::getHostCallReturnValueThunk):
        (JSC::LLInt::createJSGateThunk):
        (JSC::LLInt::createWasmGateThunk):
        (JSC::LLInt::createTailCallGate):
        (JSC::LLInt::loopOSREntryGateThunk):
        (JSC::LLInt::entryOSREntryGateThunk):
        (JSC::LLInt::wasmOSREntryGateThunk):
        (JSC::LLInt::exceptionHandlerGateThunk):
        (JSC::LLInt::returnFromLLIntGateThunk):
        (JSC::LLInt::tagGateThunk):
        (JSC::LLInt::untagGateThunk):
        (JSC::LLInt::jitCagePtrThunk):
        * tools/JSDollarVM.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSDollarVM::finishCreation):
        * wasm/WasmBBQPlan.cpp:
        (JSC::Wasm::BBQPlan::work):
        (JSC::Wasm::BBQPlan::didCompleteCompilation):
        * wasm/WasmBinding.cpp:
        (JSC::Wasm::wasmToWasm):
        * wasm/WasmLLIntPlan.cpp:
        (JSC::Wasm::LLIntPlan::didCompleteCompilation):
        * wasm/WasmOMGForOSREntryPlan.cpp:
        (JSC::Wasm::OMGForOSREntryPlan::work):
        * wasm/WasmOMGPlan.cpp:
        (JSC::Wasm::OMGPlan::work):
        * wasm/WasmThunks.cpp:
        (JSC::Wasm::throwExceptionFromWasmThunkGenerator):
        (JSC::Wasm::throwStackOverflowFromWasmThunkGenerator):
        (JSC::Wasm::triggerOMGEntryTierUpThunkGenerator):
        * wasm/js/WasmToJS.cpp:
        (JSC::Wasm::wasmToJS):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
        * yarr/YarrJIT.cpp:

2021-05-08  Darin Adler  <darin@apple.com>

        Remove calls to the String::toInt family of functions from JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=225571

        Reviewed by Sam Weinig.

        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::parseLocation): Use parseIntegerAllowingTrailingJunk<JSC::SourceID>
        instead of String::toIntPtr. There was no reason to parse the source ID as a
        signed integer, and it's more elegant to parse the type we intend to store and
        process, not a different but similar type.
        (Inspector::InspectorDebuggerAgent::searchInContent): Ditto.
        (Inspector::InspectorDebuggerAgent::getScriptSource): Ditto.

        * inspector/agents/InspectorRuntimeAgent.cpp:
        (Inspector::InspectorRuntimeAgent::getRuntimeTypesForVariablesAtOffsets): Use
        parseInteger<uintptr_t> instead of String::toIntPtrStrict.
        (Inspector::InspectorRuntimeAgent::getBasicBlocks): Use
        parseIntegerAllowingTrailingJunk<uintptr_t> instead of String::toIntPtr.

        * runtime/FuzzerPredictions.cpp:
        (JSC::FuzzerPredictions::FuzzerPredictions): Use parseInteger<uint64_t>
        instead of String::toUInt64Strict.

2021-05-08  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Fix invalid exception checks after recent ErrorInstance changes
        https://bugs.webkit.org/show_bug.cgi?id=225565

        Reviewed by Alexey Shvayka.

        r277221 and r277224 each introduced issues under validateExceptionChecks=1; this patch fixes them.

        Of particular note:
        The earlier patch sought to consolidate Error#cause logic under ErrorInstance::finishCreation.
        This part must be undone as it is crucial that non-user-thrown errors be able to bypass that logic
        (otherwise throwException itself would need to be exception-checked).

        * runtime/AggregateError.cpp:
        (JSC::createAggregateError):
        * runtime/ArrayPrototype.cpp:
        (JSC::getProperty):
        * runtime/Error.cpp:
        (JSC::createError):
        (JSC::createEvalError):
        (JSC::createRangeError):
        (JSC::createReferenceError):
        (JSC::createSyntaxError):
        (JSC::createTypeError):
        (JSC::createURIError):
        (JSC::createGetterTypeError):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::create):
        (JSC::ErrorInstance::finishCreation):
        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::create):
        * runtime/JSObject.h:
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::getIfPropertyExists):
        * runtime/NullSetterFunction.cpp:
        (JSC::NullSetterFunctionInternal::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/JSWebAssemblyCompileError.cpp:
        (JSC::createJSWebAssemblyCompileError):
        * wasm/js/JSWebAssemblyLinkError.cpp:
        (JSC::createJSWebAssemblyLinkError):
        * wasm/js/JSWebAssemblyRuntimeError.cpp:
        (JSC::createJSWebAssemblyRuntimeError):

2021-05-08  Chris Dumez  <cdumez@apple.com>

        Port Filesystem::pathByAppendingComponent() & Filesystem:: pathByAppendingComponents() to std::filesystem
        https://bugs.webkit.org/show_bug.cgi?id=225550

        Reviewed by Darin Adler.

        Build fix.

        * Configurations/JavaScriptCore.xcconfig:

2021-05-08  Ross Kirsling  <ross.kirsling@sony.com>

        Introduce JSObject::getIfPropertyExists helper
        https://bugs.webkit.org/show_bug.cgi?id=225553

        Reviewed by Alexey Shvayka.

        Suggested by Alexey during review of r277221.
        ArrayPrototype also has a "Has-guarded Get", so it's helpful for JSObject to house this functionality.

        * runtime/ArrayPrototype.cpp:
        (JSC::getProperty):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::finishCreation):
        * runtime/JSObject.h:
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::getIfPropertyExists):

2021-05-07  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Error#cause must recognize explicit undefined
        https://bugs.webkit.org/show_bug.cgi?id=225535

        Reviewed by Alexey Shvayka.

        Error#cause is specified such that `new Error(message, {})` and `new Error(message, { cause: undefined })`
        are not the same -- namely, the latter should create a property descriptor with an undefined `value`.

        This would seem absurd, but the reason is because the `cause` field is meant to store a thrown object,
        and `throw undefined;` is valid code.

        In aligning our implementation with the spec, this patch also consolidates the relevant logic in one place
        (ErrorInstance::finishCreation) to minimize confusion.

        * runtime/AggregateError.cpp:
        (JSC::createAggregateError):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::create):
        (JSC::ErrorInstance::finishCreation):
        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::create):

2021-05-06  Chris Dumez  <cdumez@apple.com>

        Port Filesystem::fileMetadata() & Filesystem::getFileModificationTime() to std::filesystem
        https://bugs.webkit.org/show_bug.cgi?id=225362

        Reviewed by Darin Adler.

        Build fix.

        * Configurations/JavaScriptCore.xcconfig:

2021-05-06  Eleni Maria Stea  <estea@igalia.com>

        Removed the assertion m_numParameters >= 0, it is always true as
        m_numParameters is unsigned.
        https://bugs.webkit.org/show_bug.cgi?id=225457

        Reviewed by Yusuke Suzuki.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::numberOfArgumentValueProfiles):

2021-05-06  Filip Pizlo  <fpizlo@apple.com>

        Make some things easier to dataLog in wasm
        https://bugs.webkit.org/show_bug.cgi?id=225472

        Reviewed by Yusuke Suzuki.

        * wasm/WasmMemoryMode.cpp:
        (WTF::printInternal):
        * wasm/WasmMemoryMode.h:
        * wasm/WasmWorklist.cpp:
        (JSC::Wasm::Worklist::dump const):
        * wasm/WasmWorklist.h:

2021-05-06  Filip Pizlo  <fpizlo@apple.com>

        Reduce use of dmb ish on ARM64
        https://bugs.webkit.org/show_bug.cgi?id=225465

        Reviewed by Keith Miller.
        
        We use loadLoadFence a lot, often in situations like:
        
        Foo* ptr = loadStuff;
        loadLoadFence();
        use ptr
        
        On ARM64, we don't need a dmb ish here.  This introduces a dependentLoadLoadFence() for these
        cases; it's just a compiler fence on ARM64 and Intel.

        We also used loadLoadFence in some places where I couldn't think of any good reason for the
        fence other than paranoia. I got rid of those.

        * bytecode/CallLinkStatus.cpp:
        (JSC::CallLinkStatus::computeFromCallLinkInfo):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::jitType const):
        * bytecode/ObjectAllocationProfile.h:
        (JSC::ObjectAllocationProfileBase::structure):
        (JSC::ObjectAllocationProfileWithPrototype::prototype):
        * bytecode/Watchpoint.h:
        (JSC::WatchpointSet::state const):
        (JSC::InlineWatchpointSet::state const):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::handlePutByVal):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt):
        * runtime/GetterSetter.h:
        * runtime/InferredValue.h:
        (JSC::InferredValue::state const):
        * runtime/Structure.h:
        (JSC::Structure::tryRareData):
        * runtime/StructureInlines.h:
        (JSC::Structure::propertyReplacementWatchpointSet):

2021-05-06  Filip Pizlo  <fpizlo@apple.com>

        It should be possible to --logJIT=true
        https://bugs.webkit.org/show_bug.cgi?id=225464

        Reviewed by Mark Lam.

        This makes it easy to just log when JITing happens. It's like --dumpDisassembly=true but
        without the disassembly.

        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::finalizeCodeWithDisassemblyImpl):
        * assembler/LinkBuffer.h:
        * runtime/Options.cpp:
        (JSC::Options::recomputeDependentOptions):
        * runtime/OptionsList.h:

2021-05-06  Mark Lam  <mark.lam@apple.com>

        Forbid further execution in jsc shell if execution is terminated.
        https://bugs.webkit.org/show_bug.cgi?id=225410
        rdar://77548608

        Reviewed by Michael Saboff.

        1. Introduce a VM::m_executionForbidden flag.
        2. In the jsc shell, forbid further execution if termination was encountered.

        * jsc.cpp:
        (runWithOptions):
        * runtime/VM.cpp:
        (JSC::VM::drainMicrotasks):
        * runtime/VM.h:
        (JSC::VM::executionForbidden const):
        (JSC::VM::setExecutionForbidden):

2021-05-06  Mark Lam  <mark.lam@apple.com>

        Fix missing exception check in objectConstructorGetOwnPropertyDescriptors().
        https://bugs.webkit.org/show_bug.cgi?id=225413
        rdar://77551530

        Reviewed by Michael Saboff.

        Need to handle TerminationException.

        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorGetOwnPropertyDescriptors):

2021-05-05  Mark Lam  <mark.lam@apple.com>

        Introduce VM::hasPendingTerminationException() to make code a little more terse.
        https://bugs.webkit.org/show_bug.cgi?id=225412

        Reviewed by Michael Saboff.

        This is purely a refactoring patch.  There is no behavior change.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeProgram):
        * jit/JITOperations.cpp:
        * runtime/ExceptionScope.h:
        (JSC::ExceptionScope::assertNoExceptionExceptTermination):
        (JSC::ExceptionScope::releaseAssertNoExceptionExceptTermination):
        * runtime/JSObject.h:
        (JSC::JSObject::get const):
        * runtime/LazyPropertyInlines.h:
        (JSC::ElementType>::callFunc):
        * runtime/VM.cpp:
        (JSC::VM::throwException):
        * runtime/VM.h:
        (JSC::VM::hasPendingTerminationException const):
        * runtime/VMTraps.cpp:
        (JSC::VMTraps::deferTerminationSlow):

2021-05-05  Mark Lam  <mark.lam@apple.com>

        Enable incremental sweeping of GCAwareJITStubRoutines.
        https://bugs.webkit.org/show_bug.cgi?id=225376

        Reviewed by Filip Pizlo.

        This patch makes the following changes:

        1. Enhance JITStubRoutineSet::deleteUnmarkedJettisonedStubRoutines() to be able to
           run in an incremental time slice.

        2. Added JITStubRoutineSet::notifyHaveRoutinesToDelete() so that
           GCAwareJITStubRoutine::observeZeroRefCount() can flag that the GC may have
           some dead GCAwareJITStubRoutines to delete.

        3. Added JITStubRoutineSet::mayHaveRoutinesToDelete() so that clients can do
           a cheap check ahead of time to determine if there's work to do, and avoid
           calling JITStubRoutineSet::deleteUnmarkedJettisonedStubRoutines() altogether
           if not needed.

        4. Added Heap::mayHaveJITStubRoutinesToDelete() and Heap::deleteDeadJITStubRoutines()
           as wrappers around JITStubRoutineSet::mayHaveRoutinesToDelete() and
           JITStubRoutineSet::deleteUnmarkedJettisonedStubRoutines() because the use of
           the JITStubRoutineSet is a heap internal implementation detail.

        5. Enhanced the IncrementalSweeper to also call Heap::deleteDeadJITStubRoutines()
           if needed.

        6. Enhanced Heap::sweepSynchronously() to also call Heap::deleteDeadJITStubRoutines()
           if needed.

        7. Time slices for Heap::deleteDeadJITStubRoutines() is currently set at the
           current values:
           a. max of 1 ms (1/10 of the IncreamentalSweeper's time slice) when invoked from
              the IncreamentalSweeper.
           b. max of 5 ms when invoked from Heap::deleteUnmarkedCompiledCode().
           c. unlimited time (with a sanity check) when called from Heap::sweepSynchronously().

           The choices of 1ms and 5ms were picked to not be too long, but would still delete
           the bulk of the dead GCAwareJITStubRoutines quickly enough based on data from my
           instrumented runs the CLI version of JetStream2.

           I think these hardcoded values will do for now.  If need be, we can try something
           more sophisticated later.

        * CMakeLists.txt:
        * heap/Heap.cpp:
        (JSC::Heap::deleteUnmarkedCompiledCode):
        (JSC::Heap::sweepSynchronously):
        * heap/Heap.h:
        * heap/HeapInlines.h:
        (JSC::Heap::mayHaveJITStubRoutinesToDelete):
        (JSC::Heap::deleteDeadJITStubRoutines):
        * heap/IncrementalSweeper.cpp:
        (JSC::IncrementalSweeper::doSweep):
        * heap/JITStubRoutineSet.cpp:
        (JSC::JITStubRoutineSet::deleteUnmarkedJettisonedStubRoutines):
        * heap/JITStubRoutineSet.h:
        (JSC::JITStubRoutineSet::mayHaveRoutinesToDelete):
        (JSC::JITStubRoutineSet::notifyHaveRoutinesToDelete):
        (JSC::JITStubRoutineSet::deleteUnmarkedJettisonedStubRoutines):
        * jit/GCAwareJITStubRoutine.cpp:
        (JSC::GCAwareJITStubRoutine::observeZeroRefCount):
        * jit/JITStubRoutine.h:
        (JSC::JITStubRoutine::createSelfManagedRoutine): Deleted.

2021-05-03  Mark Lam  <mark.lam@apple.com>

        Fix syntax error message for AUTOPLUSPLUS token.
        https://bugs.webkit.org/show_bug.cgi?id=225308
        rdar://76830934

        Reviewed by Saam Barati.

        For the record, it's not easy to tell from the code why AUTOPLUSPLUS is needed.
        It's needed to distinguish this:
            ```
            statement ++ stuff  // ++ is a postfix operator applied to `statement`.
            ```
        from this:
            ```
            statement
            ++stuff    // The `\n` before the ++ makes it a prefix operator applied to `stuff``.
            ```

        If we merely tokenize the ++ as a PLUSPLUS token, then it's unclear whether it acts
        as a postfix or prefix token in the 2nd case above.

        This is why the correct fix is not to get rid of the AUTOPLUSPLUS token, but to
        teach the syntax error message to be aware of the AUTOPLUSPLUS token.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseUnaryExpression):

2021-05-03  Chris Dumez  <cdumez@apple.com>

        Restore pre-r276879 behavior for FileSystem::deleteFile() and FileSystem::deleteEmptyDirectory()
        https://bugs.webkit.org/show_bug.cgi?id=225289

        Reviewed by Darin Adler.

        Fix build.

        * Configurations/JavaScriptCore.xcconfig:

2021-05-03  Mark Lam  <mark.lam@apple.com>

        Add some missing exception checks before some jsCasts.
        https://bugs.webkit.org/show_bug.cgi?id=225264
        rdar://77381608

        Reviewed by Saam Barati.

        Introducing JSObject::getAs() and JSValue::getAs() convenience methods that will
        check for an exception before doing a jsCast on the get result.  We only need this
        to placate the assertion in jsCast in the event a pending exception exists at the
        time of the jsCast.  If ASSERTs are not enabled, this will be a no-op.  All clients
        that use jsCast this way (and now use getAs instead) will already be doing an
        exception check immediately after.  Hence, they are already doing the right thing
        in terms of handling exceptions.  We're only placating the jsCast assertion here.

        * runtime/AbstractModuleRecord.cpp:
        (JSC::AbstractModuleRecord::hostResolveImportedModule):
        * runtime/JSCJSValue.h:
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::getAs const):
        * runtime/JSInternalPromise.cpp:
        (JSC::JSInternalPromise::then):
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::dependencyKeysIfEvaluated):
        (JSC::JSModuleLoader::provideFetch):
        (JSC::JSModuleLoader::loadAndEvaluateModule):
        (JSC::JSModuleLoader::loadModule):
        (JSC::JSModuleLoader::linkAndEvaluateModule):
        (JSC::JSModuleLoader::requestImportModule):
        * runtime/JSObject.h:
        (JSC::JSObject::getAs const):
        * runtime/JSPromise.cpp:
        (JSC::JSPromise::createDeferredData):
        * runtime/VM.h:

2021-05-03  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-Function-References] Add call_ref instruction
        https://bugs.webkit.org/show_bug.cgi?id=222903

        Reviewed by Yusuke Suzuki.

        Add support for call_ref instruction from the typed function
        references proposal: https://github.com/WebAssembly/function-references/blob/master/proposals/function-references/Overview.md.
        call_ref calls the given function references from the stack 
        and it does almost the same stuff as call_indirect but
        it doesn't check signatures because wasm types system guaranties
        correctness.

        * bytecode/BytecodeList.rb:
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * llint/LowLevelInterpreter.asm:
        * llint/WebAssembly.asm:
        * runtime/Gate.h:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::addCallIndirect):
        (JSC::Wasm::AirIRGenerator::addCallRef):
        (JSC::Wasm::AirIRGenerator::emitIndirectCall):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::emitIndirectCall):
        (JSC::Wasm::B3IRGenerator::addCallIndirect):
        (JSC::Wasm::B3IRGenerator::addCallRef):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::addCallRef):
        * wasm/WasmSlowPaths.cpp:
        (JSC::LLInt::doWasmCallRef):
        (JSC::LLInt::WASM_SLOW_PATH_DECL):
        * wasm/WasmSlowPaths.h:
        * wasm/js/JSWebAssemblyTable.cpp:
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::WebAssemblyFunction):
        * wasm/js/WebAssemblyFunction.h:
        * wasm/js/WebAssemblyFunctionBase.cpp:
        (JSC::WebAssemblyFunctionBase::WebAssemblyFunctionBase):
        * wasm/js/WebAssemblyFunctionBase.h:
        (JSC::WebAssemblyFunctionBase::offsetOfEntrypointLoadLocation):
        * wasm/js/WebAssemblyWrapperFunction.cpp:
        (JSC::WebAssemblyWrapperFunction::WebAssemblyWrapperFunction):
        * wasm/js/WebAssemblyWrapperFunction.h:
        * wasm/wasm.json:

2021-05-01  Chris Dumez  <cdumez@apple.com>

        Start leveraging std::filesystem in WTF::FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=225255

        Reviewed by Sam Weinig.

        Unexport some symbols to fix build.

        * Configurations/JavaScriptCore.xcconfig:

2021-04-30  Filip Pizlo  <fpizlo@apple.com>

        Make small JIT pool tests pass on AS
        https://bugs.webkit.org/show_bug.cgi?id=225256

        Reviewed by Mark Lam.

        If we ask for a JIT pool that is smaller than the smallest possible "region" (thing with jump
        island) that we can create -- i.e. smaller than a jump region, then assume that the user is
        asking us to create a pool that has that much usable space plus a jump region.

        I think that this makes the option easier to use when you're testing ridiculously small JIT
        pools, which we happen to do in our test suite.

        Also remove some dead options I didn't mean to commit.

        * jit/ExecutableAllocator.cpp:
        (JSC::initializeJITPageReservation):
        * runtime/OptionsList.h:

2021-04-30  Filip Pizlo  <fpizlo@apple.com>

        Make the JIT pool smaller on AS
        https://bugs.webkit.org/show_bug.cgi?id=225249

        Reviewed by Saam Barati.

        This adds three related features:

        - Makes it easy to dump where the JIT pool was allocated.

        - Makes it possible to override the JIT pool size with Options even with jump islands.

        - Changes the default JIT pool size on AS to 512MB.

        Estimated 2% speed-up on JetStream2, 1.5% speed-up on Speedometer2.

        * jit/ExecutableAllocator.cpp:
        (JSC::initializeJITPageReservation):
        * runtime/OptionsList.h:

2021-04-29  Saam Barati  <sbarati@apple.com>

        Inlining property accesses inside constant folding should check Options::useAccessInlining
        https://bugs.webkit.org/show_bug.cgi?id=225194

        Reviewed by Mark Lam.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        (JSC::DFG::ConstantFoldingPhase::tryFoldAsPutByOffset):

2021-04-29  Saam Barati  <sbarati@apple.com>

        Sampling profiler should dump a tier breakdown, and add ability to see time spent in C code with sampleCCode=0, and fix bugs with frames having the wrong jitType if they're inlined
        https://bugs.webkit.org/show_bug.cgi?id=225116

        Reviewed by Yusuke Suzuki.

        This patch makes it so we also dump time spent in each tier when dumping top
        bytecodes. This can be helpful info when analyzing benchmarks.
        
        This patch also makes it so we know when we're in C/C++ code when we're not
        using the sampleCCode=true option. I found some weird performance pathologies
        with that option that cause us to not sample code at all. I was seeing ~50
        samples taken for ~7 seconds of code running time. It's worth figuring out
        what's going on there eventually. But for now, I've made it so that we
        recognize that the top frame is C/C++ when using the collectExtraSamplingProfilerData=1
        option.
        
        This patch also fixes a bug where we mis-attribute JITTypes for inline
        frames. We'd attribute it to whatever the CodeBlock was compiled as, instead
        of using the machine frame's JITType.

        * jsc.cpp:
        (CommandLine::parseArguments):
        * runtime/OptionsList.h:
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::takeSample):
        (JSC::SamplingProfiler::processUnverifiedStackTraces):
        (JSC::SamplingProfiler::StackFrame::displayName):
        (JSC::SamplingProfiler::reportTopBytecodes):

2021-04-28  Mark Lam  <mark.lam@apple.com>

        Fix exception assertions in light of the TerminationException.
        https://bugs.webkit.org/show_bug.cgi?id=225128
        rdar://76694909

        Reviewed by Robin Morisset.

        Some pre-existing functions assertNoException() or releaseAssertNoException().
        These assertion may not be valid anymore in light of the TerminationException, and
        require some fix up:

        1. If it makes sense to convert the assertion into an exception check, then do so.

           For example, see objectPrototypeToString(), slow_path_create_this().

        2. If the assertion is at the end of a function just before it returns, or if the
           remaining code in the function will not be affected by the pending exception,
           then we can replace the assertion as follows:

               assertNoException() => assertNoExceptionExceptTermination()
               releaseAssertNoException() => releaseAssertNoExceptionExceptTermination()

           For example, see objectPrototypeHasOwnProperty(), JSObject::getOwnNonIndexPropertyNames().

        3. If the assertion is in a function where perf is not absolutely critical, and the
           function isn't calling any other functions that will re-enter the VM or potentially
           get stuck in an infinite loop, then we can use a DeferTermination scope to defer
           termination.

           For example, see Debugger::pauseIfNeeded(), SamplingProfiler::StackFrame::nameFromCallee().

        4. If the assertion is in an initializer function is only run once and adding
           exception checks would complicate the code more than it's worth (an engineering
           judgement), then use a DeferTermination scope.

           For example, see ProgramExecutable::initializeGlobalProperties(), setupAdaptiveWatchpoint().

           Some leaf (or near-leaf) functions that currently DECLARE_CATCH_SCOPE() may also
           fall under this category.

           For example, see JSFunction::prototypeForConstruction().

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::addBigIntConstant):
        * debugger/Debugger.cpp:
        (JSC::Debugger::pauseIfNeeded):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * interpreter/Interpreter.cpp:
        (JSC::notifyDebuggerOfUnwinding):
        (JSC::Interpreter::executeProgram):
        (JSC::Interpreter::debug):
        * interpreter/ShadowChicken.cpp:
        (JSC::ShadowChicken::functionsOnStack):
        * jsc.cpp:
        (runWithOptions):
        * parser/ParserArena.cpp:
        (JSC::IdentifierArena::makeBigIntDecimalIdentifier):
        * runtime/AbstractModuleRecord.cpp:
        (JSC::AbstractModuleRecord::finishCreation):
        * runtime/CommonSlowPaths.cpp:
        (JSC::JSC_DEFINE_COMMON_SLOW_PATH):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::sanitizedMessageString):
        (JSC::ErrorInstance::sanitizedNameString):
        * runtime/ExceptionScope.h:
        (JSC::ExceptionScope::assertNoExceptionExceptTermination):
        (JSC::ExceptionScope::releaseAssertNoExceptionExceptTermination):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::prototypeForConstruction):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::genericTypedArrayViewProtoFuncIncludes):
        (JSC::genericTypedArrayViewProtoFuncIndexOf):
        (JSC::genericTypedArrayViewProtoFuncLastIndexOf):
        (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate):
        * runtime/JSGlobalObject.cpp:
        (JSC::setupAdaptiveWatchpoint):
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::defineOwnProperty):
        (JSC::JSGlobalObject::tryInstallSpeciesWatchpoint):
        * runtime/JSModuleLoader.cpp:
        (JSC::printableModuleKey):
        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::finishCreation):
        * runtime/JSObject.cpp:
        (JSC::JSObject::ordinaryToPrimitive const):
        (JSC::JSObject::getOwnNonIndexPropertyNames):
        * runtime/JSTemplateObjectDescriptor.cpp:
        (JSC::JSTemplateObjectDescriptor::createTemplateObject):
        * runtime/JSTypedArrayViewPrototype.cpp:
        * runtime/ObjectPrototype.cpp:
        (JSC::objectPrototypeHasOwnProperty):
        (JSC::objectPrototypeToString):
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::initializeGlobalProperties):
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::StackFrame::nameFromCallee):
        * tools/JSDollarVM.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-04-28  Daniel Kolesa  <dkolesa@igalia.com>

        [WPE][GTK] More correct fixes for stack size issues on musl libc
        https://bugs.webkit.org/show_bug.cgi?id=225099

        Reviewed by Adrian Perez de Castro.

        Partial revert https://bugs.webkit.org/show_bug.cgi?id=210068

        After fixing the thread stack issues in WTF properly, we can revert
        the JSC options changes, which are actually harmful since they result
        in JSC being unstable. Previously, softReservedZoneSize was causing a
        crash when set to 128K because of the main thread stack bounds, and
        this is now fixed. We can keep the maxPerThreadStackUsage at 5M as
        well; there is no fundamental difference from how things are done on
        glibc anymore.

        * runtime/OptionsList.h:

2021-04-27  Filip Pizlo  <fpizlo@apple.com>

        Get the bytecode profiler working again
        https://bugs.webkit.org/show_bug.cgi?id=225129

        Reviewed by Saam Barati.

        The bytecode profiler was broken because it was trying to look at unset labels. This patch
        improves our label discipline a bit so we don't try to look at unset labels.

        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::linkOSRExits):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::emitInvalidationPoint):

2021-04-27  Mark Lam  <mark.lam@apple.com>

        Move ExceptionExpectation into its own .h file.
        https://bugs.webkit.org/show_bug.cgi?id=225124

        Reviewed by Robin Morisset.

        Also fixed some compiler warnings.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/ExceptionExpectation.h: Added.
        * runtime/ExceptionHelpers.h:
        * runtime/HashMapImplInlines.h:
        (JSC::jsMapHashImpl):
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::setWithSpecificType):
        (JSC::JSGenericTypedArrayView<Adaptor>::getOwnPropertySlotByIndex):

2021-04-27  Alexey Shvayka  <shvaikalesh@gmail.com>

        [JSC] Remove defaultValue() from the method table
        https://bugs.webkit.org/show_bug.cgi?id=225032

        Reviewed by Darin Adler.

        This patch not only removes the unnecessary method table entry, but also makes
        the presence of custom ToPrimitive behavior observable to userland code.

        To maintain object identity and (possibly) enable caching, Symbol.toPrimitive
        method is stored on a structure. To avoid any potential breakage, it's made
        replaceable and configurable, covering the case when its holder is a [[ProxyTarget]].

        For JSCallbackObject, Symbol.toPrimitive method is created only if ConvertToType
        callback is present, before initialization is performed.

        Also, this change adds additional ordinaryToPrimitive() cast to fix the invariant
        that toPrimitive() returns a primitive value, which was broken if ConvertToType
        callback returned an object. The invariant is enforced by the spec [1][2] and is
        validated via assertion in JSValue::toStringSlowCase().

        [1]: https://tc39.es/ecma262/#sec-toprimitive (step 2.b.vi)
        [2]: https://tc39.es/ecma262/#sec-ordinarytoprimitive (step 6)

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::init):
        (JSC::JSCallbackObject<Parent>::customToPrimitive):
        (JSC::JSCallbackObject<Parent>::defaultValue): Deleted.
        * API/tests/testapiScripts/testapi.js:
        * runtime/ClassInfo.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::defaultValue): Deleted.
        * runtime/JSCell.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::toPrimitive const):
        (JSC::JSObject::defaultValue): Deleted.
        * runtime/JSObject.h:
        * runtime/Operations.cpp:
        (JSC::jsAddSlowCase):

2021-04-27  Keith Miller  <keith_miller@apple.com>

        StructureStubInfo and PolymorphicAccess should account for their non-GC memory
        https://bugs.webkit.org/show_bug.cgi?id=225113

        Reviewed by Mark Lam.

        We don't pass the ConcurrentJSLocker to the helper methods here since the
        DECLARE_VISIT_AGGREGATE macro does not allow for extra parameters to be passed.
        I filed https://bugs.webkit.org/show_bug.cgi?id=225114 to track that.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::JITData::size const):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::PolymorphicAccess::extraMemoryInBytes const):
        * bytecode/PolymorphicAccess.h:
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::extraMemoryInBytes):
        * bytecode/StructureStubInfo.h:

2021-04-26  Keith Miller  <keith_miller@apple.com>

        UnlinkedCodeBlock should have better accounting for extra memory
        https://bugs.webkit.org/show_bug.cgi?id=225080

        Reviewed by Mark Lam.

        Right now we aren't telling the JS GC about the extra memory
        attached to UnlinkedCodeBlocks. It looks like on at least some sites this
        can be a fairly large percentage of the total memory retained by
        the JS object graph. This is very similar to the change we made for
        CodeBlocks in r276610.

        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::visitChildrenImpl):
        (JSC::UnlinkedCodeBlock::RareData::sizeInBytes const):
        * bytecode/UnlinkedCodeBlock.h:

2021-04-26  Alex Christensen  <achristensen@webkit.org>

        Update Mac-specific CMake files
        https://bugs.webkit.org/show_bug.cgi?id=225064

        Rubber-stamped by Tim Horton.

        * PlatformMac.cmake:

2021-04-26  Mark Lam  <mark.lam@apple.com>

        %TypedArray%.prototype.sort() should not use a regular array as a temp buffer.
        https://bugs.webkit.org/show_bug.cgi?id=225062
        rdar://77021547

        Reviewed by Yusuke Suzuki.

        %TypedArray%.prototype.sort() should not be affected by property changes in
        Array.prototype.

        References:
        [1] https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort
        [2] https://tc39.es/ecma262/#sec-array.prototype.sort
        [3] https://tc39.es/ecma262/#sec-sortcompare

        * builtins/TypedArrayPrototype.js:
        (globalPrivate.typedArrayMergeSort):

2021-04-26  Keith Miller  <keith_miller@apple.com>

        CodeBlock should do a better job accounting for extra memory it allocates.
        https://bugs.webkit.org/show_bug.cgi?id=225068

        Reviewed by Mark Lam.

        Right now we aren't telling the JS GC about the extra memory
        attached to CodeBlocks. It looks like on at least some sites this
        can be a fairly large percentage of the total memory retained by
        the JS object graph.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitChildren):
        (JSC::CodeBlock::JITData::size const):
        * bytecode/CodeBlock.h:
        * jit/JITCodeMap.h:
        (JSC::JITCodeMap::memorySize const):

2021-04-26  Keith Miller  <keith_miller@apple.com>

        numCalleeLocals, numParameters, and numVars should be unsigned
        https://bugs.webkit.org/show_bug.cgi?id=224995

        Reviewed by Mark Lam.

        All of the various CodeBlock classes currently have the
        numCalleeLocals and numVars marked as ints. I believe this is just
        a historical artifact or because VirtualRegister's offset is an
        int to make handling constants easier. Regardless, it's a bit
        strange to not handle the sign conversion at the point of
        comparison between a VirtualRegister offset and the local/var
        count. This doesn't completely fix every place we use ints for
        these values but starts on the right track. Lastly, I also added
        some Check<unsigned>s to the wasm parser for sanity checking.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::setNumParameters):
        (JSC::CodeBlock::ensureCatchLivenessIsComputedForBytecodeIndexSlow):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::numParameters const):
        (JSC::CodeBlock::numberOfArgumentsToSkip const):
        (JSC::CodeBlock::numCalleeLocals const):
        (JSC::CodeBlock::numVars const):
        (JSC::CodeBlock::numTmps const):
        (JSC::CodeBlock::addressOfNumParameters):
        (JSC::CodeBlock::isTemporaryRegister):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::numCalleeLocals const):
        (JSC::UnlinkedCodeBlock::numVars const):
        * bytecode/UnlinkedCodeBlockGenerator.h:
        (JSC::UnlinkedCodeBlockGenerator::numCalleeLocals const):
        (JSC::UnlinkedCodeBlockGenerator::numVars const):
        (JSC::UnlinkedCodeBlockGenerator::setNumCalleeLocals):
        (JSC::UnlinkedCodeBlockGenerator::setNumVars):
        (JSC::UnlinkedCodeBlockGenerator::setNumParameters):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::emitPushFunctionNameScope):
        * bytecompiler/BytecodeGeneratorBaseInlines.h:
        (JSC::BytecodeGeneratorBase<Traits>::newRegister):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleRecursiveTailCall):
        (JSC::DFG::ByteCodeParser::inliningCost):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGOSREntrypointCreationPhase.cpp:
        (JSC::DFG::OSREntrypointCreationPhase::run):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::lower):
        * ftl/FTLOSREntry.cpp:
        (JSC::FTL::prepareOSREntry):
        * interpreter/CallFrameClosure.h:
        * interpreter/ProtoCallFrameInlines.h:
        (JSC::ProtoCallFrame::init):
        * jit/JIT.cpp:
        (JSC::JIT::compileWithoutLinking):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::numberOfStackPaddingSlots):
        (JSC::CommonSlowPaths::numberOfStackPaddingSlotsWithExtraSlots):
        * wasm/WasmFunctionCodeBlock.h:
        (JSC::Wasm::FunctionCodeBlock::numVars const):
        (JSC::Wasm::FunctionCodeBlock::numCalleeLocals const):
        (JSC::Wasm::FunctionCodeBlock::setNumVars):
        (JSC::Wasm::FunctionCodeBlock::setNumCalleeLocals):
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::push):
        (JSC::Wasm::LLIntGenerator::getDropKeepCount):
        (JSC::Wasm::LLIntGenerator::walkExpressionStack):
        (JSC::Wasm::LLIntGenerator::checkConsistency):
        (JSC::Wasm::LLIntGenerator::materializeConstantsAndLocals):
        (JSC::Wasm::LLIntGenerator::splitStack):
        (JSC::Wasm::LLIntGenerator::finalize):
        (JSC::Wasm::LLIntGenerator::callInformationForCaller):
        (JSC::Wasm::LLIntGenerator::addLoop):
        (JSC::Wasm::LLIntGenerator::addTopLevel):
        (JSC::Wasm::LLIntGenerator::addBlock):
        (JSC::Wasm::LLIntGenerator::addIf):
        (JSC::Wasm::LLIntGenerator::addElseToUnreachable):

2021-04-26  Alexey Shvayka  <shvaikalesh@gmail.com>

        [JSC] OrdinarySet should invoke custom [[Set]] methods
        https://bugs.webkit.org/show_bug.cgi?id=217916

        Reviewed by Yusuke Suzuki.

        This patch fixes putInlineSlow() to handle special properties (like JSFunction's "name"
        and JSArray's "length") in prototype chain. When such property is encountered, prototype
        chain traversal is stopped; if it's read-only, a TypeError is thrown in strict mode.

        This change adds OverridesPut out of line type info flag, and utilizes it in putInlineSlow()
        to invoke overriden methods. While this approach requires put() methods to be aware of
        altered receivers, it renders several benefits:
          1. put() method can be used for both "real" [[Set]] overrides and special properties,
             with its return value remaining `bool`;
          2. it is simpler, faster, and more predictable than calling [[GetOwnProperty]] in
             putInlineSlow() or adding defineOwnPropertyViaPut() to the method table.

        Removes ordinarySetSlow() for non-index properties, which didn't invoke some [[Set]]
        methods as well. Instead, definePropertyOnReceiver() is introduced for altered receivers,
        which performs correctly when reached because:
          1. all special properties were already handled (unless it's Reflect.set);
          2. performing putDirectInternal() is unobservable (unless ProxyObject was seen);
          3. putDirectInternal() now fully implements property definition of OrdinarySet [1];
          4. put() override is required if a spec defines custom [[DefineOwnProperty]].

        Since indexed puts handle overrides / altered receivers quite differently, they will
        be fixed in a follow-up, completely removing ordinarySetSlow().

        Also, by merging putEntry() / putToPrimitive() into putInlineSlow() and introducing
        putInlineFastReplacingStaticPropertyIfNeeded() helper, this patch fixes a few bugs:
          1. Direct [[Set]] to non-reified static property now preserves its attributes when replacing [[Value]].
          2. Prototype chain [[Set]] to non-reified static property now throws if receiver is non-extensible.
          3. Non-reified static writable property now shadows read-only one that is further in prototype chain.
          4. Non-reified static properties in prototype chain of a primitive are now considered.

        Fixes a few issues that were previously unobservable:
          1. PropertyAttribute::CustomValue is now unset when a setter-less property is reassigned.
          2. uint64_t putByIndexInline() now calls put() via method table like uint32_t counterpart.

        Other notable refactors:
          1. Inlines callCustomSetter(), dropping weird TriState return value.
          2. Simplifies initialization of StringPrototype.
          3. Simplifies isThisValueAltered() to pointer comparisons at non-JSProxy call sites.
          4. Removes doPutPropertySecurityCheck() methods as the same checks are performed by put() methods.
          5. Removes prototypeChainMayInterceptStoreTo(), which pretty much duplicated canPerformFastPutInline().
          6. Removes dummy JSArrayBufferView::put() method.
          7. Removes now unused lookupPut().

        Aligns JSC with V8 and SpiderMonkey.

        This patch carefully preserves the current behavior of Reflect.set with CustomValue
        and prototype chain [[Set]] to a JSCallbackObject / legacy platform object.

        This change is performance-neutral on /put/ microbenchmarks as it doesn't affect
        caching, only the slow path. Reflect.set with JSFinalObject receiver is 130% faster.
        putInlineSlow() microbenchmarks progress by 4-18%.

        [1]: https://tc39.es/ecma262/#sec-ordinarysetwithowndescriptor (step 3)

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::put):
        * API/tests/testapiScripts/testapi.js:
        * debugger/DebuggerScope.h:
        * runtime/ClassInfo.h:
        * runtime/ClonedArguments.h:
        * runtime/CustomGetterSetter.cpp:
        (JSC::callCustomSetter): Deleted.
        * runtime/CustomGetterSetter.h:
        * runtime/ErrorConstructor.h:
        * runtime/ErrorInstance.h:
        * runtime/GenericArguments.h:
        * runtime/GenericArgumentsInlines.h:
        (JSC::GenericArguments<Type>::put):
        * runtime/GetterSetter.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::put):
        * runtime/JSArray.h:
        * runtime/JSArrayBufferView.cpp:
        (JSC::JSArrayBufferView::put): Deleted.
        * runtime/JSArrayBufferView.h:
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::putToPrimitive):
        * runtime/JSCell.cpp:
        (JSC::JSCell::doPutPropertySecurityCheck): Deleted.
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::put):
        * runtime/JSFunction.h:
        * runtime/JSGenericTypedArrayView.h:
        * runtime/JSGlobalLexicalEnvironment.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::put):
        * runtime/JSGlobalObject.h:
        * runtime/JSLexicalEnvironment.h:
        * runtime/JSModuleEnvironment.h:
        * runtime/JSModuleNamespaceObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::getOwnPropertySlot):
        (JSC::JSObject::putInlineSlow):
        (JSC::definePropertyOnReceiverSlow):
        (JSC::JSObject::definePropertyOnReceiver):
        (JSC::JSObject::putInlineFastReplacingStaticPropertyIfNeeded):
        (JSC::JSObject::doPutPropertySecurityCheck): Deleted.
        (JSC::JSObject::prototypeChainMayInterceptStoreTo): Deleted.
        * runtime/JSObject.h:
        (JSC::JSObject::putByIndexInline):
        (JSC::JSObject::hasNonReifiedStaticProperties):
        (JSC::JSObject::getOwnPropertySlot):
        (JSC::JSObject::putDirect):
        (JSC::JSObject::doPutPropertySecurityCheck): Deleted.
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::canPerformFastPutInlineExcludingProto):
        (JSC::JSObject::putInlineForJSObject):
        (JSC::JSObject::putInlineFast):
        (JSC::JSObject::putDirectInternal):
        * runtime/JSProxy.h:
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::hasStaticPropertyTable const):
        (JSC::TypeInfo::overridesPut const):
        (JSC::TypeInfo::getOwnPropertySlotMayBeWrongAboutDontEnum const):
        (JSC::TypeInfo::hasPutPropertySecurityCheck const): Deleted.
        * runtime/Lookup.h:
        (JSC::putEntry): Deleted.
        (JSC::lookupPut): Deleted.
        * runtime/PropertySlot.h:
        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::put):
        * runtime/ProxyObject.h:
        * runtime/PutPropertySlot.h:
        (JSC::PutPropertySlot::PutPropertySlot):
        (JSC::PutPropertySlot::context const):
        (JSC::PutPropertySlot::isTaintedByOpaqueObject const):
        (JSC::PutPropertySlot::setIsTaintedByOpaqueObject):
        * runtime/ReflectObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::put):
        * runtime/RegExpObject.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::put):
        * runtime/StringObject.h:
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::finishCreation):
        (JSC::StringPrototype::create):
        * runtime/StringPrototype.h:
        * runtime/Structure.cpp:
        (JSC::Structure::validateFlags):
        * runtime/Structure.h:
        (JSC::Structure::hasNonReifiedStaticProperties const):
        * tools/JSDollarVM.cpp:

2021-04-23  Michael Saboff  <msaboff@apple.com>

        [YARR Interpreter] Improper backtrack of parentheses with non-zero based greedy quantifiers
        https://bugs.webkit.org/show_bug.cgi?id=224983

        Reviewed by Mark Lam.

        When we backtrack a parentheses with a greedy non zero based quantifier,
        we don't properly restore for the case where we hadn't reached the minimum count.
        We now save the input position on entry and restore it when we backtrack for
        this case.  We also properly release the allocated ParenthesesDisjunctionContext's.

        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::matchParentheses):
        (JSC::Yarr::Interpreter::backtrackParentheses):

2021-04-23  Mark Lam  <mark.lam@apple.com>

        Fix B3 strength reduction for shl.
        https://bugs.webkit.org/show_bug.cgi?id=224913
        rdar://76978874

        Reviewed by Michael Saboff.

        If the operation can potentially either underflow or overflow, then the result
        can be any value.

        * b3/B3ReduceStrength.cpp:

2021-04-23  Fujii Hironori  <Hironori.Fujii@sony.com>

        [JSC][Win] callOperationNoExceptionCheck() also needs to support operations that return SlowPathReturnType
        https://bugs.webkit.org/show_bug.cgi?id=224964

        Reviewed by Yusuke Suzuki.

        r229989 (Bug 183655) added the x64 Windows support only for
        callOperation(), but for callOperationNoExceptionCheck().
        callOperationNoExceptionCheck() also needs the x64 Windows
        support.

        This change is a preparation for Bug 224920 that is going to use
        callOperationNoExceptionCheck instead of callOperation.

        * jit/JIT.h:
        (callOperation): Rewrote by using 'if constexpr' instead of SFINAE.
        (callOperationNoExceptionCheck): Added a new implementation for
        x64 Windows based on callOperation.

2021-04-23  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r276486.
        https://bugs.webkit.org/show_bug.cgi?id=224973

        broke windows build

        Reverted changeset:

        "[JSC][Win] callOperationNoExceptionCheck() also needs to
        support operations that return SlowPathReturnType"
        https://bugs.webkit.org/show_bug.cgi?id=224964
        https://trac.webkit.org/changeset/276486

2021-04-22  Fujii Hironori  <Hironori.Fujii@sony.com>

        [JSC][Win] callOperationNoExceptionCheck() also needs to support operations that return SlowPathReturnType
        https://bugs.webkit.org/show_bug.cgi?id=224964

        Reviewed by Yusuke Suzuki.

        r229989 (Bug 183655) added the x64 Windows support only for
        callOperation(), but for callOperationNoExceptionCheck().
        callOperationNoExceptionCheck() also needs the x64 Windows
        support.

        This change is a preparation for Bug 224920 that is going to use
        callOperationNoExceptionCheck instead of callOperation.

        * jit/JIT.h:
        (callOperation): Rewrote by using 'if constexpr' instead of SFINAE.
        (callOperationNoExceptionCheck): Added a new implementation for
        x64 Windows based on callOperation.

2021-04-22  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r276456.
        https://bugs.webkit.org/show_bug.cgi?id=224952

        Windows specific crash

        Reverted changeset:

        "[JSC} Remove exception checks from non-throwing function
        calls in Baseline JIT"
        https://bugs.webkit.org/show_bug.cgi?id=224920
        https://trac.webkit.org/changeset/276456

2021-04-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC} Remove exception checks from non-throwing function calls in Baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=224920

        Reviewed by Tadeu Zagallo.

        These functions are not taking JSGlobalObject and will not throw an error.
        Use callOperationNoExceptionCheck instead to avoid emitting unnecessary exception checks.

        * jit/JIT.cpp:
        (JSC::JIT::emitEnterOptimizationCheck):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emitSlow_op_new_object):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emitSlow_op_loop_hint):
        (JSC::JIT::emit_op_profile_type):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emitSlow_op_new_object):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_profile_type):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitWriteBarrier):

2021-04-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Baseline should have fast path for switch_imm
        https://bugs.webkit.org/show_bug.cgi?id=224521

        Reviewed by Tadeu Zagallo.

        This patch implements op_switch_imm fast path in Baseline.
        We have this fast path in LLInt, DFG, and FTL. So only Baseline lacks this.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::emitSwitchIntJump):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_switch_imm):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_switch_imm):

2021-04-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] DFG / FTL should inline switch_string
        https://bugs.webkit.org/show_bug.cgi?id=224578

        Reviewed by Mark Lam.

        Because of r275840 change, we no longer copy StringJumpTable when compiling DFG / FTL code.
        Instead we are using a pointer to UnlinkedStringTable stored in UnlinkedCodeBlock.
        This allows DFG / FTL to inline CodeBlock which includes op_switch_string. We were previously not able
        to do that because we cannot copy StringImpl in DFG / FTL concurrent compiler thread.

        1. We handle StringJumpTable / UnlinkedStringJumpTable in the same way as SimpleJumpTable / UnlinkedSimpleJumpTable.
        2. We put m_ctiDefault of StringJumpTable in the last element of m_ctiOffsets vector of StringJumpTable to make
           sizeof(StringJumpTable) small.
        3. We use m_indexInTable instead of m_branchOffset in FTL switch generation to make switch table dense.

        The microbenchmark shows 30% improvement because of unlocking inlining feature.

                                        ToT                     Patched

            switch-inlining       27.1238+-0.2708     ^     20.2630+-0.1477        ^ definitely 1.3386x faster

            <geometric>           27.1238+-0.2708     ^     20.2630+-0.1477        ^ definitely 1.3386x faster

        * bytecode/JumpTable.h:
        (JSC::StringJumpTable::ensureCTITable):
        (JSC::StringJumpTable::ctiForValue const):
        (JSC::StringJumpTable::ctiDefault const):
        (JSC::StringJumpTable::isEmpty const):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedStringJumpTable::indexForValue const):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGGraph.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::emitSwitchStringOnString):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::switchStringSlow):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::JSC_DEFINE_JIT_OPERATION):
        * ftl/FTLOperations.h:
        * jit/JIT.cpp:
        (JSC::JIT::link):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_switch_string):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_switch_string):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):

2021-04-21  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, mid April 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=222652
        <rdar://problem/75262285>

        Unreviewed non-unified build fixes.

        * bytecode/JumpTable.cpp: Remove inclusion of wtf/text/StringHash.h
        * bytecode/JumpTable.h: Add missing inclusions of wtf/FixedVector.h and
        wtf/text/StringHash.h
        * bytecode/SpeculatedType.cpp: Add missing includes JSCJSValueInlines.h and
        JSCellInlines.h
        * bytecompiler/BytecodeGenerator.cpp: Move template method to header, remove now uneeded
        LinkTimeConstant.h include.
        * bytecompiler/BytecodeGenerator.h: Add include for LinkTimeConstant.h
        (JSC::BytecodeGenerator::emitDirectSetPrototypeOf): Template method moved here from
        BytecodeGenerator.cpp to avoid compile errors due to usage of missing template body
        definition.
        * dfg/DFGDesiredGlobalProperties.cpp: Add missing DFGDesiredWatchpoints.h include.
        * ftl/FTLAbstractHeap.cpp: Add missing JSCJSValueInlines.h include.
        * runtime/JSCustomGetterFunction.cpp: Add missing IdentifierInlines.h include.
        * runtime/JSCustomSetterFunction.cpp: Ditto.
        * runtime/SetPrototype.cpp: Add missing HashMapImplInlines.h include.
        * runtime/VMTraps.cpp: Add missing VMEntryScope.h include.
        * runtime/WeakSetConstructor.cpp: Add missing WeakMapImplInlines.h include.
        * runtime/WeakSetPrototype.cpp: Add missing includes for HashMapImplInlines.h and
        WeakMapImplInlines.h
        * wasm/js/JSWebAssemblyTable.cpp: Add missing ObjectConstructor.h include.

2021-04-20  Michael Catanzaro  <mcatanzaro@gnome.org>

        Static asserts in WasmAirIRGenerator.cpp and WasmB3IRGenerator.cpp trigger -Wnonnull warnings with GCC 11
        https://bugs.webkit.org/show_bug.cgi?id=224826

        Reviewed by Yusuke Suzuki.

        Rewrite these static asserts to avoid warnings when built with GCC 11. Credit to Jonathan
        Wakely for providing this mind-bending solution.

        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::restoreWebAssemblyGlobalState):
        (JSC::Wasm::AirIRGenerator::addCurrentMemory):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addCurrentMemory):

2021-04-20  Michael Catanzaro  <mcatanzaro@gnome.org>

        -Warray-bounds warning in AirAllocateRegistersByGraphColoring.cpp with GCC 11
        https://bugs.webkit.org/show_bug.cgi?id=224782

        Reviewed by Darin Adler.

        These warnings don't make any sense to me. Suppress them.

        * b3/air/AirAllocateRegistersByGraphColoring.cpp:

2021-04-20  Keith Miller  <keith_miller@apple.com>

        FullGCActivityCallback should use the percentage of pages uncompressed in RAM to determine deferral.
        https://bugs.webkit.org/show_bug.cgi?id=224817

        Reviewed by Filip Pizlo.

        Right now we try to determine if too many pages are paged out by
        dereferencing them and bailing out of the GC if we go over a
        deadline. While this works if the only goal is to avoid causing
        extensive thrashing on spinny disks (HDD), it doesn't prevent
        thrashing when access to disk is fast (e.g. SSD). This is because
        on fast disks the proportional time to load the memory from disk
        is much lower. Additionally, on SSDs in particular we don't want
        to load the pages into RAM then bail as that will force a
        different page onto disk, increasing wear.

        This patch switches to asking the OS if each MarkedBlock is paged
        out. Then if we are over a threshold we wait until we would have
        GC'd anyway. This patch uses the (maxVMGrowthFactor - 1) as the
        percentage of "slow" pages (paged out or compressed) needed to
        defer the GC. The idea behind that threshold is that if we add
        that many pages then the same number of pages would be forced
        out of RAM for us to do a GC anyway (in the limit).

        * heap/BlockDirectory.cpp:
        (JSC::BlockDirectory::updatePercentageOfPagedOutPages):
        (JSC::BlockDirectory::isPagedOut): Deleted.
        * heap/BlockDirectory.h:
        * heap/FullGCActivityCallback.cpp:
        (JSC::FullGCActivityCallback::doCollection):
        * heap/Heap.cpp:
        (JSC::Heap::isPagedOut):
        * heap/Heap.h:
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::isPagedOut):
        * heap/MarkedSpace.h:
        * runtime/OptionsList.h:

2021-04-20  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Don't use FORWARDING_HEADERS_DIR for JSC GLib headers
        https://bugs.webkit.org/show_bug.cgi?id=224821

        Reviewed by Michael Catanzaro.

        Use JavaScriptCoreGLib_FRAMEWORK_HEADERS_DIR and JavaScriptCoreGLib_DERIVED_SOURCES_DIR
        for GLib JSC headers instead of FORWARDING_HEADERS_DIR and DERIVED_SOURCES_DIR.

        * GLib.cmake:
        * PlatformGTK.cmake:

2021-04-20  Ben Nham  <nham@apple.com>

        LinkBuffer fails to build when MALLOC_HEAP_BREAKDOWN is enabled
        https://bugs.webkit.org/show_bug.cgi?id=224722

        Reviewed by Yusuke Suzuki.

        When ENABLE_MALLOC_HEAP_BREAKDOWN is set, LinkBuffer causes a build failure at link time
        since it never defines its debugHeap. Fix that.

        * assembler/LinkBuffer.cpp:

2021-04-20  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use FixedVector for LLIntPrototypeLoadAdaptiveStructureWatchpoint vector
        https://bugs.webkit.org/show_bug.cgi?id=224729

        Reviewed by Darin Adler.

        Replace Vector<LLIntPrototypeLoadAdaptiveStructureWatchpoint> with FixedVector.

        * bytecode/CodeBlock.h:
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::LLIntPrototypeLoadAdaptiveStructureWatchpoint):
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::initialize):
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::setupGetByIdPrototypeCache):

2021-04-19  Mark Lam  <mark.lam@apple.com>

        Build fix for Debug -O3 after r276162.
        https://bugs.webkit.org/show_bug.cgi?id=224681
        rdar://76698113

        Not reviewed.

        * runtime/JSObject.cpp:

2021-04-19  Kimmo Kinnunen  <kkinnunen@apple.com>

        Enable -Wthread-safety, add attributes to custom lock classes, and provide macros to declare guards
        https://bugs.webkit.org/show_bug.cgi?id=221614
        <rdar://problem/74396781>

        Reviewed by David Kilzer.

        Add -Wthread-safety to compile flags.

        * Configurations/Base.xcconfig:

2021-04-18  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix
        https://bugs.webkit.org/show_bug.cgi?id=224715

        * dfg/DFGDesiredWatchpoints.h:

2021-04-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Do not use Bag<> for DFG / FTL watchpoints
        https://bugs.webkit.org/show_bug.cgi?id=224715

        Reviewed by Darin Adler.

        While Bag<> is useful since its allocated memory will not be moved,
        this is really memory-inefficient data structure. Each entry gets a
        tail pointer (so adding 8 bytes) and we allocate each entry separately.

        In DFG and FTL, we are using Bag<> for watchpoints. But this is not necessary actually: thanks to
        concurrent compilers, our watchpoint registration is batched at the end of compilation. This means
        that we have a way to know how many watchpoints we should register at that point.

        In this patch, we introduce WatchpointCollector. In DesiredGlobalProperties, we run reallyAdd twice
        with WatchpointCollector. First time, we just count # of watchpoints. Then we allocate FixedVector<XXXWatchpoint>
        and install them. Since we do not (cannot) grow this fixed vector, watchpoint's address will not be changed as required.

        We also move DesiredGlobalProperties under DesiredWatchpoints since this basically registers watchpoints.

        * bytecode/AdaptiveInferredPropertyValueWatchpointBase.cpp:
        (JSC::AdaptiveInferredPropertyValueWatchpointBase::AdaptiveInferredPropertyValueWatchpointBase):
        (JSC::AdaptiveInferredPropertyValueWatchpointBase::initialize):
        * bytecode/AdaptiveInferredPropertyValueWatchpointBase.h:
        * bytecode/CodeBlockJettisoningWatchpoint.h:
        * dfg/DFGAdaptiveInferredPropertyValueWatchpoint.cpp:
        (JSC::DFG::AdaptiveInferredPropertyValueWatchpoint::AdaptiveInferredPropertyValueWatchpoint):
        (JSC::DFG::AdaptiveInferredPropertyValueWatchpoint::initialize):
        * dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:
        * dfg/DFGAdaptiveStructureWatchpoint.cpp:
        (JSC::DFG::AdaptiveStructureWatchpoint::AdaptiveStructureWatchpoint):
        (JSC::DFG::AdaptiveStructureWatchpoint::initialize):
        * dfg/DFGAdaptiveStructureWatchpoint.h:
        * dfg/DFGCommonData.cpp:
        (JSC::DFG::CommonData::validateReferences):
        (JSC::DFG::CommonData::clearWatchpoints):
        * dfg/DFGCommonData.h:
        * dfg/DFGDesiredGlobalProperties.cpp:
        (JSC::DFG::DesiredGlobalProperties::reallyAdd):
        * dfg/DFGDesiredGlobalProperties.h:
        * dfg/DFGDesiredWatchpoints.cpp:
        (JSC::DFG::ArrayBufferViewWatchpointAdaptor::add):
        (JSC::DFG::SymbolTableAdaptor::add):
        (JSC::DFG::FunctionExecutableAdaptor::add):
        (JSC::DFG::AdaptiveStructureWatchpointAdaptor::add):
        (JSC::DFG::DesiredWatchpoints::addLazily):
        (JSC::DFG::DesiredWatchpoints::reallyAdd):
        (JSC::DFG::DesiredWatchpoints::areStillValidOnMainThread):
        (JSC::DFG::WatchpointCollector::finalize):
        * dfg/DFGDesiredWatchpoints.h:
        (JSC::DFG::SetPointerAdaptor::add):
        (JSC::DFG::GenericDesiredWatchpoints::reallyAdd):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::watchGlobalProperty):
        * dfg/DFGGraph.h:
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::reallyAdd):
        (JSC::DFG::Plan::isStillValidOnMainThread):
        (JSC::DFG::Plan::cancel):
        * dfg/DFGPlan.h:
        (JSC::DFG::Plan::transitions):
        (JSC::DFG::Plan::globalProperties): Deleted.

2021-04-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Make more DFG/FTL data FixedVector/Vector
        https://bugs.webkit.org/show_bug.cgi?id=224713

        Reviewed by Darin Adler.

        1. DFG::JITCode::m_osrEntry / DFG::JITCode::m_osrExit / DFG::JITCode::m_speculationRecovery are changed to FixedVector.
           They are added at compiling time, and after that, these vectors are not modified. So when finalizing, we can easily make it FixedVector.
           We also change OSREntry::{m_reshufflings,m_expectedValues} to FixedVector and FixedOperands.
        2. FTL::JITCode::m_osrExit is changed from SegmentedVector to Vector. We are still using Vector since it also involves osrExitDescriptor.
           But later, we should merge m_osrExit to osrExitDescriptor. Vector is still better than SegmentedVector since it wastes several entries
           per segment. SegmentedVector was used to use a direct pointer of OSRExit (this is not possible in Vector since this pointer can be invalidated
           after growing), but usage of that is fairly limited so that we can just replace them with m_index + osrExit vector.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::tallyFrequentExitSites):
        * bytecode/Operands.h:
        (JSC::Operands::Operands):
        * dfg/DFGJITCode.cpp:
        (JSC::DFG::JITCode::shrinkToFit):
        (JSC::DFG::JITCode::liveRegistersToPreserveAtExceptionHandlingCallSite):
        (JSC::DFG::JITCode::validateReferences):
        (JSC::DFG::JITCode::findPC):
        (JSC::DFG::JITCode::finalizeOSREntrypoints):
        * dfg/DFGJITCode.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::linkOSRExits):
        (JSC::DFG::JITCompiler::link):
        (JSC::DFG::JITCompiler::noticeOSREntry):
        (JSC::DFG::JITCompiler::appendExceptionHandlingOSRExit):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::appendOSRExit):
        (JSC::DFG::JITCompiler::appendSpeculationRecovery):
        * dfg/DFGOSREntry.h:
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::speculationCheck):
        (JSC::DFG::SpeculativeJIT::emitInvalidationPoint):
        (JSC::DFG::SpeculativeJIT::linkOSREntries):
        * ftl/FTLJITCode.cpp:
        (JSC::FTL::JITCode::shrinkToFit):
        (JSC::FTL::JITCode::validateReferences):
        (JSC::FTL::JITCode::liveRegistersToPreserveAtExceptionHandlingCallSite):
        (JSC::FTL::JITCode::findPC):
        * ftl/FTLJITCode.h:
        * ftl/FTLOSRExit.cpp:
        (JSC::FTL::OSRExitDescriptor::prepareOSRExitHandle):
        (JSC::FTL::OSRExit::OSRExit):
        * ftl/FTLOSRExit.h:
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::JSC_DEFINE_JIT_OPERATION):
        * ftl/FTLOSRExitHandle.cpp:
        (JSC::FTL::OSRExitHandle::emitExitThunk):
        * ftl/FTLOSRExitHandle.h:
        (JSC::FTL::OSRExitHandle::OSRExitHandle):
        * ftl/FTLPatchpointExceptionHandle.cpp:
        (JSC::FTL::PatchpointExceptionHandle::scheduleExitCreationForUnwind):

2021-04-17  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, suppress warnings
        https://bugs.webkit.org/show_bug.cgi?id=224616

        * runtime/HashMapImpl.h:
        * runtime/HashMapImplInlines.h:
        (JSC::areKeysEqual):
        (JSC::wangsInt64Hash):

2021-04-16  Mark Lam  <mark.lam@apple.com>

        More changes to support the TerminationException.
        https://bugs.webkit.org/show_bug.cgi?id=224681
        rdar://76698113

        Reviewed by Keith Miller.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeProgram):
        - ProgramExecutable::initializeGlobalProperties() can throw the TerminationException.
          Add handling for that.

        * runtime/JSObject.cpp:
        (JSC::JSObject::defineOwnIndexedProperty):
        - JSObject::defineOwnIndexedProperty() has a blob of assertion code that it verifying
          that getOwnPropertyDescriptor() should succeed without throwing any exceptions if
          the fast path is allowed.  However, this is assertion is only true if there isn't
          a termination being requested.  So, use the DeferTermination scope to allow this
          assertion to be tested without the complication of a TerminationException.

2021-04-16  Keith Miller  <keith_miller@apple.com>

        Before deleting a MarkedBlock we do not need to clear its m_directory pointer.
        https://bugs.webkit.org/show_bug.cgi?id=224677

        Reviewed by Yusuke Suzuki.

        Right now when we are about to free a MarkedBlock we clear the
        m_directory pointer in the MarkedBlock's Handle. This has the
        downside, however, of potentially paging in the footer from disk /
        the compressor, which some data we have seen shows is happening.
        This patch prevents this uncessary store to hopefully reduce the
        number of pageins/decompressions caused by Safari web content.

        * heap/BlockDirectory.cpp:
        (JSC::BlockDirectory::removeBlock):
        (JSC::BlockDirectory::removeBlockForDeletion):
        * heap/BlockDirectory.h:
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::Handle::~Handle):
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::freeBlock):

2021-04-16  Mark Lam  <mark.lam@apple.com>

        Build fix for Debug -O3 after r276069.
        https://bugs.webkit.org/show_bug.cgi?id=224619

        Not reviewed.

        * runtime/HashMapImplInlines.h:

2021-04-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r276112.
        https://bugs.webkit.org/show_bug.cgi?id=224646

        .h files should not #include *Inlines.h files.

        Reverted changeset:

        "REGRESSION(r276039) [GTK] Build failures on Ubuntu 18.04"
        https://bugs.webkit.org/show_bug.cgi?id=224644
        https://trac.webkit.org/changeset/276112

2021-04-15  Lauro Moura  <lmoura@igalia.com>

        REGRESSION(r276039) [GTK] Build failures on Ubuntu 18.04
        https://bugs.webkit.org/show_bug.cgi?id=224644

        Unreviewed build fix.

        * runtime/JSSet.h: Use HashMapImplInlines to include the base
        finishCreation implementation. Somehow GCC 7.5 wasn't picking it up.

2021-04-15  Mark Lam  <mark.lam@apple.com>

        HashMapImpl::rehash() should use a version of jsMapHash that cannot throw.
        https://bugs.webkit.org/show_bug.cgi?id=224610
        rdar://76698910

        Reviewed by Yusuke Suzuki.

        For context, HashMapImpl::rehash()'s rehash operation relies on jsMapHash().
        jsMapHash() can be interrupted by a TerminationException, and as a result, may
        not return the string hash we are expecting.  This in turn can lead to the
        rehash operation hashing with wrong keys.

        However, all the keys should have already been hashed.  Hence, rehash() should
        never see an exception thrown there.  We can avoid this complication with the
        TerminationException by simply calling an alternate version of jsMapHash() that
        is guaranteed to never throw e.g. a jsMapHashForAlreadyHashedValue() function.

        * runtime/ExceptionHelpers.h:
        * runtime/HashMapImplInlines.h:
        (JSC::jsMapHashImpl):
        (JSC::jsMapHash):
        (JSC::jsMapHashForAlreadyHashedValue):
        (JSC::HashMapImpl<HashMapBucketType>::rehash):

2021-04-14  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove CodeBlock::RareData::m_catchProfiles
        https://bugs.webkit.org/show_bug.cgi?id=224593

        Reviewed by Mark Lam.

        We are having this Vector just because we would like to destroy them when destroying the owner Baseline / LLInt CodeBlock.
        But we are setting a pointer in OpCatch's metadata in Baseline / LLInt.
        So we should just iterate metadata for that and destroy them in the destructor. No need to keep them separately.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::ensureCatchLivenessIsComputedForBytecodeIndex):
        (JSC::CodeBlock::ensureCatchLivenessIsComputedForBytecodeIndexSlow):
        (JSC::CodeBlock::updateAllValueProfilePredictionsAndCountLiveness):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::createRareDataIfNecessary):
        * bytecode/ValueProfile.h:
        (JSC::ValueProfileAndVirtualRegisterBuffer::ValueProfileAndVirtualRegisterBuffer): Deleted.
        (JSC::ValueProfileAndVirtualRegisterBuffer::~ValueProfileAndVirtualRegisterBuffer): Deleted.
        (JSC::ValueProfileAndVirtualRegisterBuffer::forEach): Deleted.
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):

2021-04-15  Mark Lam  <mark.lam@apple.com>

        Optimize the DeferTermination scope to be more efficient.
        https://bugs.webkit.org/show_bug.cgi?id=224619

        Reviewed by Saam Barati.

        This can be beneficial since we may be using DeferTermination in more places in
        the code.

        1. Added a VMTrapsInlines.h to hold the inline functions.

        2. Split deferTermination() and undoDeferTermination() into fast and slow functions.
           The fast functions are inlineable.

        3. Remove the locking of VMTraps::m_lock in these functions.  These functions only
           modify the following:
           a. VMTraps::m_deferTerminationCount
           b. VMTraps::m_suspendedTerminationException
           c. VMTraps::m_trapBits for setting the NeedTermination bit if needed.
           d. VM::m_exception

           Except for VMTraps::m_trapBits, all of these are only written to from the mutator
           thread.  VMTraps::m_trapBits is always written to using Atomics.  There isn't
           anything that needs to be guarded by VMTraps::m_lock.

        4. Fix VMTraps::deferTermination() to only set m_suspendedTerminationException
           and clear an existing TerminationException if it's being called from the
           outermost DeferTermination (i.e. m_deferTerminationCount is 1 after incrementing).
           These conditional operations are not done in VMTraps::deferTerminationSlow().

           In practice, it wouldn't have mattered anyway because we would never throw a
           TerminationException while a DeferTermination scope is in effect.  The
           the vm.isTerminationException() in the original deferTermination() would
           always have prevented the slow path operations from being executed anyway.

           However, for the purpose of this patch, we want to avoid as much unnecessary
           work as possible in the fast path.  Hence, it is good to skip the slow path
           if deferTermination() isn't called from the outermost scope.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jit/JITOperations.cpp:
        * jsc.cpp:
        * runtime/JSGlobalObject.cpp:
        * runtime/VMTraps.cpp:
        (JSC::VMTraps::deferTerminationSlow):
        (JSC::VMTraps::undoDeferTerminationSlow):
        (JSC::VMTraps::vm const): Deleted.
        (JSC::VMTraps::deferTermination): Deleted.
        (JSC::VMTraps::undoDeferTermination): Deleted.
        * runtime/VMTraps.h:
        * runtime/VMTrapsInlines.h: Added.
        (JSC::VMTraps::vm const):
        (JSC::VMTraps::deferTermination):
        (JSC::VMTraps::undoDeferTermination):

2021-04-15  Mark Lam  <mark.lam@apple.com>

        Refactor inline functions out of HashMapImpl.h into HashMapImplInlines.h.
        https://bugs.webkit.org/show_bug.cgi?id=224616
        rdar://76713709

        Reviewed by Yusuke Suzuki.

        Also do the same for clients of HashMapImpl that require similar refactoring.
        This fixes the #include of JSCJSValueInlines.h in HashMapImpl.h, as well as makes
        it easier to use other inline functions from other classes in the implementation
        of HashMapImpl's inline functions in the future.

        This patch only moves inline functions out to their respective *Inlines.h.
        There are no behavior changes.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGAbstractInterpreterInlines.h:
        * dfg/DFGOperations.cpp:
        * runtime/AbstractModuleRecord.cpp:
        * runtime/HashMapImpl.cpp:
        * runtime/HashMapImpl.h:
        (JSC::areKeysEqual): Deleted.
        (JSC::normalizeMapKey): Deleted.
        (JSC::wangsInt64Hash): Deleted.
        (JSC::jsMapHash): Deleted.
        (JSC::concurrentJSMapHash): Deleted.
        (JSC::shouldShrink): Deleted.
        (JSC::shouldRehashAfterAdd): Deleted.
        (JSC::nextCapacity): Deleted.
        (JSC::HashMapImpl::finishCreation): Deleted.
        (JSC::HashMapImpl::findBucket): Deleted.
        (JSC::HashMapImpl::get): Deleted.
        (JSC::HashMapImpl::has): Deleted.
        (JSC::HashMapImpl::add): Deleted.
        (JSC::HashMapImpl::addNormalized): Deleted.
        (JSC::HashMapImpl::remove): Deleted.
        (JSC::HashMapImpl::clear): Deleted.
        (JSC::HashMapImpl::setUpHeadAndTail): Deleted.
        (JSC::HashMapImpl::addNormalizedNonExistingForCloning): Deleted.
        (JSC::HashMapImpl::addNormalizedInternal): Deleted.
        (JSC::HashMapImpl::findBucketAlreadyHashedAndNormalized): Deleted.
        (JSC::HashMapImpl::rehash): Deleted.
        (JSC::HashMapImpl::checkConsistency const): Deleted.
        (JSC::HashMapImpl::makeAndSetNewBuffer): Deleted.
        (JSC::HashMapImpl::assertBufferIsEmpty const): Deleted.
        * runtime/HashMapImplInlines.h: Added.
        (JSC::areKeysEqual):
        (JSC::normalizeMapKey):
        (JSC::wangsInt64Hash):
        (JSC::jsMapHash):
        (JSC::concurrentJSMapHash):
        (JSC::shouldShrink):
        (JSC::shouldRehashAfterAdd):
        (JSC::nextCapacity):
        (JSC::HashMapImpl<HashMapBucketType>::finishCreation):
        (JSC::HashMapImpl<HashMapBucketType>::findBucket):
        (JSC::HashMapImpl<HashMapBucketType>::get):
        (JSC::HashMapImpl<HashMapBucketType>::has):
        (JSC::HashMapImpl<HashMapBucketType>::add):
        (JSC::HashMapImpl<HashMapBucketType>::addNormalized):
        (JSC::HashMapImpl<HashMapBucketType>::remove):
        (JSC::HashMapImpl<HashMapBucketType>::clear):
        (JSC::HashMapImpl<HashMapBucketType>::setUpHeadAndTail):
        (JSC::HashMapImpl<HashMapBucketType>::addNormalizedNonExistingForCloning):
        (JSC::HashMapImpl<HashMapBucketType>::addNormalizedInternal):
        (JSC::HashMapImpl<HashMapBucketType>::findBucketAlreadyHashedAndNormalized):
        (JSC::HashMapImpl<HashMapBucketType>::rehash):
        (JSC::HashMapImpl<HashMapBucketType>::checkConsistency const):
        (JSC::HashMapImpl<HashMapBucketType>::makeAndSetNewBuffer):
        (JSC::HashMapImpl<HashMapBucketType>::assertBufferIsEmpty const):
        * runtime/JSMap.h:
        * runtime/JSMapInlines.h: Added.
        (JSC::JSMap::set):
        * runtime/JSSetInlines.h: Added.
        * runtime/JSWeakMap.h:
        * runtime/JSWeakMapInlines.h: Added.
        (JSC::JSWeakMap::set):
        * runtime/MapConstructor.cpp:
        * runtime/MapPrototype.cpp:
        * runtime/SetConstructor.cpp:
        * runtime/WeakMapConstructor.cpp:
        * runtime/WeakMapImpl.h:
        (JSC::jsWeakMapHash): Deleted.
        (JSC::nextCapacityAfterBatchRemoval): Deleted.
        (JSC::WeakMapImpl::add): Deleted.
        (JSC::WeakMapImpl::shouldRehashAfterAdd const): Deleted.
        (JSC::WeakMapImpl::rehash): Deleted.
        * runtime/WeakMapImplInlines.h:
        (JSC::jsWeakMapHash):
        (JSC::nextCapacityAfterBatchRemoval):
        (JSC::WeakMapImpl<WeakMapBucket>::add):
        (JSC::WeakMapImpl<WeakMapBucket>::rehash):
        (JSC::WeakMapImpl<WeakMapBucket>::shouldRehashAfterAdd const):
        * runtime/WeakMapPrototype.cpp:

2021-04-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Change Vector<> to FixedVector<> in DFG::CommonData if possible
        https://bugs.webkit.org/show_bug.cgi?id=224588

        Reviewed by Mark Lam.

        DFG::CommonData is kept alive so long as DFG code exists. It includes a lot of Vectors while they are not mutable after the DFG code compilation.
        This patch changes Vector<> to FixedVector<> if possible to shrink sizeof(DFG::CommonData). And this also removes the need of calling shrinkToFit
        explicitly for them.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::propagateTransitions):
        (JSC::CodeBlock::determineLiveness):
        (JSC::CodeBlock::stronglyVisitWeakReferences):
        (JSC::CodeBlock::jettison):
        (JSC::CodeBlock::numberOfDFGIdentifiers const):
        (JSC::CodeBlock::identifier const):
        * bytecode/CodeBlock.h:
        * dfg/DFGCommonData.cpp:
        (JSC::DFG::CommonData::shrinkToFit):
        (JSC::DFG::CommonData::invalidate):
        (JSC::DFG::CommonData::~CommonData):
        (JSC::DFG::CommonData::installVMTrapBreakpoints):
        (JSC::DFG::CommonData::isVMTrapBreakpoint):
        (JSC::DFG::CommonData::finalizeCatchEntrypoints):
        (JSC::DFG::CommonData::notifyCompilingStructureTransition): Deleted.
        * dfg/DFGCommonData.h:
        (JSC::DFG::CommonData::catchOSREntryDataForBytecodeIndex):
        (JSC::DFG::CommonData::appendCatchEntrypoint): Deleted.
        * dfg/DFGDesiredIdentifiers.cpp:
        (JSC::DFG::DesiredIdentifiers::reallyAdd):
        * dfg/DFGDesiredTransitions.cpp:
        (JSC::DFG::DesiredTransition::DesiredTransition):
        (JSC::DFG::DesiredTransitions::DesiredTransitions):
        (JSC::DFG::DesiredTransitions::addLazily):
        (JSC::DFG::DesiredTransitions::reallyAdd):
        (JSC::DFG::DesiredTransition::reallyAdd): Deleted.
        * dfg/DFGDesiredTransitions.h:
        * dfg/DFGDesiredWeakReferences.cpp:
        (JSC::DFG::DesiredWeakReferences::reallyAdd):
        * dfg/DFGGraph.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        (JSC::DFG::JITCompiler::noticeCatchEntrypoint):
        * dfg/DFGOSREntry.h:
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::Plan):
        (JSC::DFG::Plan::finalizeWithoutNotifyingCallback):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::linkOSREntries):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compilePutStructure):
        (JSC::FTL::DFG::LowerDFGToB3::compileMultiPutByOffset):
        (JSC::FTL::DFG::LowerDFGToB3::compileInvalidationPoint):

2021-04-14  Mark Lam  <mark.lam@apple.com>

        Add missing exception check in operationGetPrivateNameOptimize().
        https://bugs.webkit.org/show_bug.cgi?id=224592
        rdar://76645873

        Reviewed by Yusuke Suzuki.

        Though the fieldNameValue.toPropertyKey() call in operationGetPrivateNameOptimize()
        would not normally throw an exception, it still can throw a TerminationException
        because it contains RETURN_IF_EXCEPTION checks.

        * jit/JITOperations.cpp:

2021-04-14  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Do not copy SimpleJumpTable
        https://bugs.webkit.org/show_bug.cgi?id=224472

        Reviewed by Mark Lam.

        This patch avoids copying UnlinkedSimpleJumpTable to SimpleJumpTable by decoupling CTI addresses from jump offset in SimpleJumpTable.
        SimpleJumpTable and UnlinkedSimpleJumpTable are almost identical. SimpleJumpTable adds JIT jump target for each branch.
        We should use data from UnlinkedSimpleJumpTable and jump via SimpleJumpTable. Do not need to have copy of branches from UnlinkedSimpleJumpTable.

        This way removes Vector<SimpleJumpTable> from CodeBlock::RareData. And this is moved to CodeBlock::JITData. And it only includes jump target addresses,
        and branch offset information is kept in UnlinkedSimpleJumpTable side. We no longer need to carefully copy these vectors in CodeBlock including DFG / FTL ones.

        In LLInt, we instead use UnlinkedSimpleJumpTable for jumping.

        In Baseline, we first allocate enough FixedVector<SimpleJumpTable> and fill content via SimpleJumpTable::ensureCTITable() call when compiling corresponding
        switch opcode. Finally we fill these data structures with actual code locations in JIT::link function.

        In DFG, we first collect UnlinkedSimpleJumpTable without copying. This is OK since it is kept by UnlinkedCodeBlock, and UnlinkedCodeBlock is kept by baseline CodeBlocks that
        are handled by this DFG compilation. We hold Vector<const UnlinkedSimpleJumpTable*> in DFG::Graph and we materialize Vector<SimpleJumpTable> in DFG::Graph.
        During DFG compilation, we touch this DFG::Graph's jump tables, and JIT compiler generates code via these tables. And when linking, we move the content to CodeBlock.

        In FTL, while we use UnlinkedSimpleJumpTable in FTL code generation, FTL do not use SimpleJumpTable and instead FTL uses Switch in B3.

        * bytecode/BytecodeDumper.cpp:
        (JSC::CodeBlockBytecodeDumper<Block>::dumpSwitchJumpTables):
        * bytecode/BytecodeDumper.h:
        * bytecode/BytecodeGeneratorification.cpp:
        (JSC::BytecodeGeneratorification::run):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::switchJumpTable):
        (JSC::CodeBlock::numberOfUnlinkedSwitchJumpTables const):
        (JSC::CodeBlock::unlinkedSwitchJumpTable):
        (JSC::CodeBlock::numberOfSwitchJumpTables const): Deleted.
        (JSC::CodeBlock::clearSwitchJumpTables): Deleted.
        (JSC::CodeBlock::addSwitchJumpTableFromProfiledCodeBlock): Deleted.
        * bytecode/JumpTable.cpp:
        (JSC::SimpleJumpTable::offsetForValue): Deleted.
        * bytecode/JumpTable.h:
        (JSC::SimpleJumpTable::ensureCTITable):
        (JSC::SimpleJumpTable::ctiForValue const):
        (JSC::SimpleJumpTable::isEmpty const):
        (): Deleted.
        (JSC::SimpleJumpTable::cloneNonJITPart const): Deleted.
        (JSC::SimpleJumpTable::ctiForValue): Deleted.
        (JSC::SimpleJumpTable::clear): Deleted.
        * bytecode/PreciseJumpTargetsInlines.h:
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedSimpleJumpTable::offsetForValue const):
        (JSC::UnlinkedSimpleJumpTable::add):
        (JSC::UnlinkedCodeBlock::numberOfUnlinkedSwitchJumpTables const):
        (JSC::UnlinkedCodeBlock::unlinkedSwitchJumpTable const):
        (JSC::UnlinkedCodeBlock::unlinkedStringSwitchJumpTable const):
        (JSC::UnlinkedCodeBlock::numberOfSwitchJumpTables const): Deleted.
        (JSC::UnlinkedCodeBlock::switchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlock::unlinkedStringSwitchJumpTable): Deleted.
        * bytecode/UnlinkedCodeBlockGenerator.cpp:
        (JSC::UnlinkedCodeBlockGenerator::finalize):
        * bytecode/UnlinkedCodeBlockGenerator.h:
        (JSC::UnlinkedCodeBlockGenerator::numberOfUnlinkedSwitchJumpTables const):
        (JSC::UnlinkedCodeBlockGenerator::addUnlinkedSwitchJumpTable):
        (JSC::UnlinkedCodeBlockGenerator::unlinkedSwitchJumpTable):
        (JSC::UnlinkedCodeBlockGenerator::numberOfSwitchJumpTables const): Deleted.
        (JSC::UnlinkedCodeBlockGenerator::addSwitchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlockGenerator::switchJumpTable): Deleted.
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::beginSwitch):
        (JSC::prepareJumpTableForSwitch):
        (JSC::BytecodeGenerator::endSwitch):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        * dfg/DFGGraph.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::emitSwitchIntJump):
        (JSC::DFG::SpeculativeJIT::emitSwitchImm):
        (JSC::DFG::SpeculativeJIT::emitSwitchChar):
        (JSC::DFG::SpeculativeJIT::emitSwitchString):
        * ftl/FTLLink.cpp:
        (JSC::FTL::link):
        * jit/JIT.cpp:
        (JSC::JIT::compileWithoutLinking):
        (JSC::JIT::link):
        * jit/JIT.h:
        (JSC::SwitchRecord::SwitchRecord):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_switch_char):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_switch_char):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jit/JITOperations.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CachedTypes.cpp:
        (JSC::CachedSimpleJumpTable::encode):
        (JSC::CachedSimpleJumpTable::decode const):
        (JSC::CachedCodeBlockRareData::encode):
        (JSC::CachedCodeBlockRareData::decode const):

2021-04-14  Alex Christensen  <achristensen@webkit.org>

        Keep UniqueRef<MathICGenerationState> instead of MathICGenerationState in HashTables
        https://bugs.webkit.org/show_bug.cgi?id=224569

        Reviewed by Geoffrey Garen.

        sizeof(KeyValuePair<const Instruction*, MathICGenerationState>) is 136 on some platforms.
        That's on the big side for sparse HashTable entries.  I think using UniqueRef will help performance.

        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitMathICFast):
        (JSC::JIT::emitMathICSlow):
        * jit/JITMathIC.h:

2021-04-14  Mark Lam  <mark.lam@apple.com>

        Apply DeferTermination in some utility functions in the jsc shell.
        https://bugs.webkit.org/show_bug.cgi?id=224572
        rdar://76646089

        Reviewed by Yusuke Suzuki.

        This is to make sure that these functions don't get in the way of testing with
        the watchdog.  Since these are only test utility functions, just doing the simple
        thing of using a DeferTermination scope is the right thing to do here.

        * jsc.cpp:

2021-04-14  Mark Lam  <mark.lam@apple.com>

        Defer TerminationExceptions when evaluating ASSERT in HashMapIml::addNormalized().
        https://bugs.webkit.org/show_bug.cgi?id=224565
        rdar://76645980

        Reviewed by Yusuke Suzuki.

        HashMapImpl::addNormalized() has an ASSERT that calls jsMapHash(), which can
        potentially throw exceptions.  As a result, it has a RETURN_IF_EXCEPTION which
        provides an opportunity to handle traps and throw a TerminationException.  This
        in turn causes the ASSERT to fail.

        To fix this, we do:

        1. Introduce VMTraps::DeferAction, which gives us DeferForAWhile and DeferUntilEndOfScope.

        2. Templatize the DeferTermination RAII object on VMTraps::DeferAction.
           Introduce DeferTerrminationForAWhile, which is DeferTermination<VMTraps::DeferAction::DeferForAWhile>.
           DeferForAWhile means that the deferScope will not throw the TerminationException
           on exit.  Instead, it will re-set the NeedTermination bit in the traps, and let
           the next trap check handle it.

        3. Introduce DEFER_TERMINATION_AND_ASSERT_WITH_MESSAGE (and friends) which creates
           a DeferTerrminationForAWhile scope before doing an ASSERT_WITH_MESSAGE.

        4. Use DEFER_TERMINATION_AND_ASSERT_WITH_MESSAGE instead in HashMapImpl::addNormalized().

        * runtime/DeferTermination.h:
        (JSC::DeferTermination::DeferTermination):
        (JSC::DeferTermination::~DeferTermination):
        * runtime/ExceptionHelpers.h:
        * runtime/HashMapImpl.h:
        (JSC::HashMapImpl::addNormalized):
        * runtime/VMTraps.cpp:
        (JSC::VMTraps::deferTermination):
        (JSC::VMTraps::undoDeferTermination):
        * runtime/VMTraps.h:

2021-04-13  Mark Lam  <mark.lam@apple.com>

        The watchdog should not fire when it's not active.
        https://bugs.webkit.org/show_bug.cgi?id=224494
        rdar://76581259

        Reviewed by Saam Barati and Yusuke Suzuki.

        The watchdog is only active when we have entered the VM.  If we haven't entered
        the VM, we postpone starting the watchdog.  For example, see Watchdog::enteredVM()
        and Watchdog::exitedVM().

        The underlying timer may still fire the NeedWatchdogCheck event after
        Watchdog::stopTimer() is called.  So, we need to just ignore the event if the
        watchdog isn't active.

        * runtime/VMTraps.cpp:
        (JSC::VMTraps::handleTraps):
        * runtime/Watchdog.h:
        (JSC::Watchdog::isActive const):

2021-04-13  Ross Kirsling  <ross.kirsling@sony.com>

        Move cloneUBreakIterator declaration to IntlWorkaround.h
        https://bugs.webkit.org/show_bug.cgi?id=224511

        Reviewed by Yusuke Suzuki.

        Follow up to r275856. There's ultimately no reason IntlWorkaround.cpp needs to be headerless;
        this was tied to some confusion about how to successfully include ubrk.h in two different ways.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/IntlSegmenter.cpp:
        * runtime/IntlSegmenter.h:
        * runtime/IntlSegments.cpp:
        * runtime/IntlWorkaround.cpp:
        * runtime/IntlWorkaround.h: Added.

2021-04-13  Mark Lam  <mark.lam@apple.com>

        Use a JSString for the TerminationException value instead of a Symbol.
        https://bugs.webkit.org/show_bug.cgi?id=224490

        Reviewed by Yusuke Suzuki.

        This makes it convertible to a String for clients that wish to report the exception.
        Clients, in this case, does not apply to JS code, only C++ code that catches the
        exception at the outermost point to handle the termination.  The TerminationException
        value is not visible to JS code because the TerminationException cannot be caught.
        So, this change is transparent to JS code.

        * runtime/VM.cpp:
        (JSC::VM::ensureTerminationException):

2021-04-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r275867.
        https://bugs.webkit.org/show_bug.cgi?id=224495

        Need alternate fix.

        Reverted changeset:

        "Reduce functionWithHellaArguments3()'s number of arguments
        from 5000 to 500."
        https://bugs.webkit.org/show_bug.cgi?id=224474
        https://trac.webkit.org/changeset/275867

2021-04-13  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, casting to unsigned long long to suppress warning
        https://bugs.webkit.org/show_bug.cgi?id=224473

        * b3/B3ConstDoubleValue.cpp:
        (JSC::B3::ConstDoubleValue::dumpMeta const):

2021-04-13  Mark Lam  <mark.lam@apple.com>

        Reduce functionWithHellaArguments3()'s number of arguments from 5000 to 500.
        https://bugs.webkit.org/show_bug.cgi?id=224474
        rdar://73614896

        Reviewed by Yusuke Suzuki.

        Using 5000 arguments seems excessive, and may blow out the stack on more resource
        constrained devices.  500 should be high enough.

        * b3/testb3_5.cpp:
        (JSC_DEFINE_JIT_OPERATION):
        (testCallFunctionWithHellaArguments3):

2021-04-12  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove CodeBlock::m_constantsSourceCodeRepresentation
        https://bugs.webkit.org/show_bug.cgi?id=224473

        Reviewed by Mark Lam.

        CodeBlock::m_constantsSourceCodeRepresentation is identical to UnlinkedCodeBlock::m_constantsSourceCodeRepresentation.

        1. For all constants existing at bytecode compile time, elements of the above vectors are identical.
        2. For lazily added constants from DFG, it is always SourceCodeRepresentation::Other.

        And the array is effectively accessed only when compiling DFG code. So we should remove copy of that in CodeBlock, and
        get SourceCodeRepresentation from UnlinkedCodeBlock.

        * bytecode/BytecodeDumper.cpp:
        (JSC::CodeBlockBytecodeDumper<Block>::dumpConstants):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::setConstantRegisters):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::constants):
        (JSC::CodeBlock::addConstant):
        (JSC::CodeBlock::addConstantLazily):
        (JSC::CodeBlock::constantSourceCodeRepresentation const):
        (JSC::CodeBlock::constantsSourceCodeRepresentation): Deleted.
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::constantSourceCodeRepresentation const):
        * bytecode/UnlinkedCodeBlockGenerator.h:
        (JSC::UnlinkedCodeBlockGenerator::constantSourceCodeRepresentation const):
        (JSC::UnlinkedCodeBlockGenerator::constantsSourceCodeRepresentation): Deleted.
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::registerFrozenValues):

2021-04-12  Mark Lam  <mark.lam@apple.com>

        Interpreter::executeProgram() should install its VMEntryScope at the top.
        https://bugs.webkit.org/show_bug.cgi?id=224450
        rdar://76530841

        Reviewed by Yusuke Suzuki.

        "top" includes before any VM code that can throw exceptions is run.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeProgram):

2021-04-12  Ross Kirsling  <ross.kirsling@sony.com>

        ICU 69 deprecates ubrk_safeClone in favor of ubrk_clone
        https://bugs.webkit.org/show_bug.cgi?id=224093

        Reviewed by Yusuke Suzuki.

        In a shining example of "disappointing library practices", ICU 69 deprecates ubrk_safeClone in favor of
        a new *draft* API ubrk_clone, meaning that no function with this functionality is exposed by default.

        This patch introduces a function cloneUBreakIterator to abstract over this change; however, since we need to:

          1. confine the effects of disabling U_HIDE_DRAFT_API to a non-unified implementation file
          2. still be able to include ubrk.h from IntlSegmenter.h to instantiate ICUDeleter<ubrk_close> (*not* `clone`!)

        ...the new helper function is introduced in a *headerless* implementation file, IntlWorkaround.cpp.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * runtime/IntlSegmenter.cpp:
        (JSC::IntlSegmenter::segment const):
        * runtime/IntlSegmenter.h:
        * runtime/IntlSegments.cpp:
        (JSC::IntlSegments::createSegmentIterator):
        * runtime/IntlWorkaround.cpp: Added.
        (JSC::cloneUBreakIterator):

2021-04-12  Don Olmstead  <don.olmstead@sony.com>

        Inspector code is wrongly including some private headers
        https://bugs.webkit.org/show_bug.cgi?id=224456

        Reviewed by Alex Christensen.

        These files were including some headers using #include <JavaScriptCore/Foo.h> style instead
        of "Foo.h" style. This caused a build error when attempting to revive the Mac CMake build
        since those headers were private and private headers are generated after the JavaScriptCore
        build. No other ports were have ENABLE_INSPECTOR_ALTERNATE_DISPATCHERS turned on so the
        issue hadn't manifested until now. 

        * API/JSContextRefInspectorSupport.h:
        * inspector/augmentable/AlternateDispatchableAgent.h:
        * inspector/augmentable/AugmentableInspectorController.h:

2021-04-12  BJ Burg  <bburg@apple.com>

        Modernize uses of ConsoleClient
        https://bugs.webkit.org/show_bug.cgi?id=224398

        Reviewed by David Kilzer.

        ConsoleClient acts like a delegate, so its callers
        should be using weak references to it.

        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::consoleClient const):
        * inspector/JSGlobalObjectInspectorController.h:
        * runtime/ConsoleClient.h:
        * runtime/ConsoleObject.cpp:
        (JSC::consoleLogWithLevel):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::setConsoleClient):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::consoleClient const):
        (JSC::JSGlobalObject::setConsoleClient): Deleted.

2021-04-11  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Do not copy StringSwitchJumpTable
        https://bugs.webkit.org/show_bug.cgi?id=224414

        Reviewed by Keith Miller.

        Previously, we were copying UnlinkedStringJumpTable to CodeBlock's StringJumpTable because we embed CodeLocation pointer
        inside CodeBlock's StringJumpTable. This is copying a mostly identical hashtable to each CodeBlock even in DFG and FTL. This
        even prevents us from inlining op_switch_string in DFG and FTL because (1) we don't want to copy this string tables collected from
        each inlined CodeBlock into a new DFG / FTL CodeBlock and (2) we cannot ref/deref StringImpl inside DFG / FTL compilers so copying
        these tables in the compiler threads need additional "DesiredStringSwitchJumpTable" etc.

        In this patch, we stop copying StringSwitchJumpTable. We decouple CodeLocation pointers from the hashtable so that we can use
        UnlinkedStringJumpTable in UnlinkedCodeBlock. UnlinkedStringJumpTable's hashtable inclues m_indexInTable in each entry so that
        we can have array of CodeLocation pointers in CodeBlock's JITData to have JIT jump targets separately. This design prevents us
        from copying unnecessary hashtables, and even this paves the way to inlining switch_string in DFG and FTL.

        * bytecode/BytecodeDumper.cpp:
        (JSC::CodeBlockBytecodeDumper<Block>::dumpStringSwitchJumpTables):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::stringSwitchJumpTable):
        (JSC::CodeBlock::numberOfUnlinkedStringSwitchJumpTables const):
        (JSC::CodeBlock::unlinkedStringSwitchJumpTable):
        (JSC::CodeBlock::numberOfStringSwitchJumpTables const): Deleted.
        * bytecode/JumpTable.h:
        (JSC::StringJumpTable::ctiForValue const):
        (JSC::StringJumpTable::offsetForValue): Deleted.
        (JSC::StringJumpTable::ctiForValue): Deleted.
        (JSC::StringJumpTable::clear): Deleted.
        * bytecode/PreciseJumpTargetsInlines.h:
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedStringJumpTable::offsetForValue const):
        (JSC::UnlinkedCodeBlock::numberOfUnlinkedStringSwitchJumpTables const):
        (JSC::UnlinkedCodeBlock::unlinkedStringSwitchJumpTable):
        (JSC::UnlinkedStringJumpTable::offsetForValue): Deleted.
        (JSC::UnlinkedCodeBlock::numberOfStringSwitchJumpTables const): Deleted.
        (JSC::UnlinkedCodeBlock::stringSwitchJumpTable): Deleted.
        * bytecode/UnlinkedCodeBlockGenerator.cpp:
        (JSC::UnlinkedCodeBlockGenerator::finalize):
        * bytecode/UnlinkedCodeBlockGenerator.h:
        (JSC::UnlinkedCodeBlockGenerator::numberOfUnlinkedStringSwitchJumpTables const):
        (JSC::UnlinkedCodeBlockGenerator::addUnlinkedStringSwitchJumpTable):
        (JSC::UnlinkedCodeBlockGenerator::unlinkedStringSwitchJumpTable):
        (JSC::UnlinkedCodeBlockGenerator::numberOfStringSwitchJumpTables const): Deleted.
        (JSC::UnlinkedCodeBlockGenerator::addStringSwitchJumpTable): Deleted.
        (JSC::UnlinkedCodeBlockGenerator::stringSwitchJumpTable): Deleted.
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::beginSwitch):
        (JSC::prepareJumpTableForStringSwitch):
        (JSC::BytecodeGenerator::endSwitch):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::switchStringSlow):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::JSC_DEFINE_JIT_OPERATION):
        * jit/JIT.cpp:
        (JSC::JIT::link):
        * jit/JIT.h:
        (JSC::SwitchRecord::SwitchRecord):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_switch_string):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_switch_string):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/CachedTypes.cpp:
        (JSC::CachedStringJumpTable::encode):
        (JSC::CachedStringJumpTable::decode const):
        (JSC::CachedCodeBlockRareData::encode):
        (JSC::CachedCodeBlockRareData::decode const):

2021-04-10  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] B3 reduce-double-to-float should reduce only when constant double is canonical one to reduced float value
        https://bugs.webkit.org/show_bug.cgi?id=224403
        <rdar://problem/76259599>

        Reviewed by Mark Lam.

        When reducing double-constant value to float in B3, we should check whether the double value is a canonical one
        which can be converted back from the reduced float value. For example, double 1.1 is not the one since it is truncated
        into float 1.1 by removing some bits.

            static_cast<double>(static_cast<float>(1.1)) != 1.1

        Reducing such a double to float changes the semantics.

        * b3/B3ConstDoubleValue.cpp:
        (JSC::B3::ConstDoubleValue::dumpMeta const):
        * b3/B3ConstFloatValue.cpp:
        (JSC::B3::ConstFloatValue::dumpMeta const):
        * b3/B3ReduceDoubleToFloat.cpp:
        * b3/B3ReduceStrength.cpp:
        * b3/testb3.h:
        (populateWithInterestingValues):
        * b3/testb3_1.cpp:
        (run):
        * b3/testb3_3.cpp:
        (testConvertDoubleToFloatToDouble):
        (testConvertDoubleToFloatEqual):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::JSC_DEFINE_JIT_OPERATION_WITH_ATTRIBUTES):
        (JSC::FTL::DFG::LowerDFGToB3::crash):
        (JSC::FTL::DFG::ftlUnreachable): Deleted.

2021-04-10  Mark Lam  <mark.lam@apple.com>

        Enable VMTraps checks in RETURN_IF_EXCEPTION.
        https://bugs.webkit.org/show_bug.cgi?id=224078
        rdar://75037057

        Reviewed by Keith Miller.

        In pre-existing code, termination of a VM's execution can already be requested
        asynchronously (with respect to the mutator thread).  For example, sources of such
        a request can be a watchdog timer firing, or a request to stop execution issued
        from a main web thread to a worker thread.

        This request is made by firing the VMTraps::NeedTermination event on VMTraps.
        Firing the event here only means setting a flag to indicate the presence of the
        request.  We still have to wait till the mutator thread reaches one of the
        pre-designated polling check points to call VMTraps::handleTraps() in order to
        service the request.  As a result of this need to wait for a polling check point,
        if the mutator is executing in a long running C++ loop, then a termination request
        may not be serviced for a long time.

        However, we observed that a lot of our C++ loops already have RETURN_IF_EXCEPTION
        checks.  Hence, if we can check VMTraps::needHandling() there, we can service the
        VMTraps events more frequently even in a lot of C++ loops, and get a better response.

        Full details of what this patch changes:

        1. Shorten some type and methods names in the VMTraps class to make code easier to
           read e.g. EventType => Event, needTrapHandling => needHandling.

        2. Remove the VMTraps::Mask class.  Mask was introduced so that we can express a
           concatenation of multiple VMTraps events to form a bit mask in a simple way.
           In the end, it isn't flexible enough but makes the code more complicated than
           necessary.  It is now replaced by the simpler solution of using macros to define
           the Events as bit fields.  Having Events as bit fields intrinsically make them
           easy to concatenate (bitwise or) or filter (bitwise and).

           Also removed the unused VMTraps::Error class.

        3. Make VMTraps::BitField a uint32_t.  There was always unused padding in VMTraps
           to allow for this.  So, we'll just extend it to a full 32-bit to make it easier
           to add more events in the future for other uses.

        4. Add NeedExceptionHandling as a VMTrap::Event.

        5. Make VMTraps::m_trapBits Atomic.  This makes it easier to set and clear the
           NeedExceptionHandling bit from the mutator without a lock.

        6. RETURN_IF_EXCEPTION now checks VMTraps::m_trapBits (via VMTraps::needHandling())
           instead of checking VM::m_exception.  If the VMTraps::m_trapBits is non-null,
           the macro will call VM:hasExceptionsAfterHandlingTraps() to service VMTraps
           events as appropriate before returning whether an exception is being thrown.
           The result of VM:hasExceptionsAfterHandlingTraps() will determine if
           RETURN_IF_EXCEPTION returns or not.

           VM:hasExceptionsAfterHandlingTraps() is intentionally designed to take a minimum
           of arguments (just the VM as this pointer).  This is because RETURN_IF_EXCEPTION
           is called from many places, and we would like to minimize code size bloating
           from this change.

        7. Simplify paramaters of VMTraps::handleTraps().

           NeedDebuggerBreak's callFrame argument was always vm.topCallFrame anyway.
           So, the patch makes it explicit, and removes the callFrame parameter.

           NeedWatchdogCheck's globalObject argument should have always been
           vm.entryScope->globalObject(), and we can remove the globalObject parameter.

           Before this, we pass in whichever globalObject was convenient to grab hold of.
           However, the idea of the watchdog is to time out the current script executing
           on the stack.  Hence, it makes sense to identify thay script by the globalObject
           in use at VM entry.

           So far, the only clients that uses the watchdog mechanism only operates in
           scenarios with only one globalObject anyway.  So this formalization to use
           VMEntryScope's globalObject does not change the expected behavior.

        8. Make the execution of termination more robust.  Before reading this, please
           read the description of the Events in VMTraps.h first, especially the section
           on NeedTermination.

           Here's the life cycle of a termination:

           a. a client requests termination of the current execution stack by calling
              VM::notifyNeedTermination().  notifyNeedTermination() does 2 things:

               i. fire the NeedTermination event on VMTraps.
              ii. set the VM::m_terminationInProgress flag.

           b. Firing the NeedTermination event on VMTraps means setting the NeedTermination
              bit on VMTraps::m_trapBits.  This bit will be polled by the mutator thread
              later at various designated points (including RETURN_IF_EXCEPTION, which we
              added in this patch).

              Once the mutator sees the NeedTermination bit is set, it will clear the bit
              and throw the TerminationException (see VMTraps::handleTraps()).  This is
              unless the mutator thread is currently in a DeferTermination scope (see (8)
              below).  If in a DeferTermination scope, then it will not throw the
              TerminationException.

              Since the NeedTermination bit is cleared, the VM will no longer call
              VMTraps::handleTraps() to service the event.  If the mutator thread is in
              a DeferTermination scope, then on exiting the scope (at scope destruction),
              the scope will see that VM::m_terminationInProgress is set, and throw the
              deferred TerminationException then.

           c. The TerminationException will trigger unwinding out of the current stack
              until we get to the outermost VMEntryScope.

           d. At the the outermost VMEntryScope, we will clear VM::m_terminationInProgress
              if the NeedTermination bit in VMtraps::m_trapBits is cleared.

              If the NeedTermination bit is set, then that means we haven't thrown the
              TerminationException yet.  Currently, clients expect that we must throw the
              TerminationException if NeedTermination was requested (again, read comments
              at the top of VMTraps.h).

              If the NeedTermination bit is set, we'll leave VM::m_terminationInProgress
              set until the next time we re-enter the VM and exit to the outermost
              VMEntryScope.

           e. The purpose of VM::m_terminationInProgress is to provide a summary of the
              fact that the VM is in a state of trying to terminate the current stack.

              Note that this state is first indicated by the NeedTermination bit being set
              in VMTraps::m_trapBits.  Then, in VMTraps::handleTraps(), the state is
              handed of with the NeedTermination bit being cleared, and the
              TerminationException being thrown.

              While the VM is in this termination state, we need to prevent new DFG/FTL
              JIT code from being compiled and run.  The reason is the firing of the
              NeedTermination event has invalidated DFG/FTL code on the stack, thereby
              allowing their baseline / LLInt versions which have VMTraps polling checks
              to run.  We don't want to compile new DFG / FTL code and possibly get stuck
              in loops in there before the termination is complete.

              In operationOptimize(), we check if VM::m_terminationInProgress is set, and
              prevent new DFG (and therefore FTL) code from being compiled if needed.
              Note: it is easier to check a single flag, VM::m_terminationInProgress,
              then to check both if the NeedTermination bit is set or if the
              TerminationException is being being thrown.

        9. One complication of being able to service VMTraps in RETURN_IF_EXCEPTION checks
           is that some of our code (usually for lengthier initializations and bootstrapping)
           currently does not handle exceptions well, e.g. JSGlobalObject::init().  They
           rely on the code crashing if an exception is thrown while still initializing.

           However, for a worker thread, a TerminationException (requested by the main
           thread) may arrive before the initialization is complete.  This can lead to
           crashes because part of the initialization may be aborted in the presence of
           an exception, while other parts still expect everything prior to have been
           initialized correctly.  For resource exhaustion cases (which is abnormal), it
           is OK to crash.  For the TerminationException (which can be part of normal
           operation), we should not be crashing.

           To work around this, we introduce a DeferTermination RAII scope object that we
           deploy in this type of initialization code.  With the scope in effect,

           a. if a TerminationException arrives but hasn't been thrown yet, it will be
              deferred till the scope ends before being thrown.
           b. if a TerminationException has already been thrown, the scope will stash
              the exception, clear it from the VM so that the initialization code can
              run to completion, and then re-throw the exception when the scope ends.

           Currently, we only need to use the DeferTermination scope in a few places
           where we know that initialization code will only run for a short period of time.

           DeferTermination should not be used for code that can block waiting on an
           external event for a long time.  Obviously, doing so will prevent the VM
           termination mechanism from working.

       10. Replaced llint_slow_path_check_if_exception_is_uncatchable_and_notify_profiler
           and operationCheckIfExceptionIsUncatchableAndNotifyProfiler with
           llint_slow_path_retrieve_and_clear_exception_if_catchable and
           operationRetrieveAndClearExceptionIfCatchable.

           The 2 runtime functions doesn't actually do anything to notify a profiler.
           So, we drop that part of the name.

           After returning from these runtime functions respectively, the previous LLInt
           and JIT code, which calls these runtimes functions, would go on to load
           VM::m_exception, and then store a nullptr there to clear it.  This is wasteful.

           This patch changes the runtime function to clear and return the Exception
           instead.  As a result, the calling LLInt and JIT code is simplified a bit.

           Note also that clearing an exception now also entails clearing the
           NeedExceptionHandling bit in VMTraps::m_trapBits in an atomic way.  The above
           change makes it easy to do this clearing with C++ code.

       11. Fix ScriptFunctionCall::call() to handle exceptions correctly.  Previously,
           it had one case where it propagates an exception, while another eats it.
           Change this function to eat the exception in both cases.  This is approproiate
           because ScriptFunctionCall is only used to execute some Inspector instrumentation
           calls.  It doesn't make sense to propagate the exception back to user code.

       12. Fix the lazy initialization of JSGlobalObject::m_defaultCollator to be able to
           handle the TerminationException.

       13. Not related to TerminationException, but this patch also fixes
           MarkedArgumentBuffer::expandCapacity() to use Gigacage::tryMalloc() instead of
           Gigacage::malloc().  This is needed as one of the fixes to make the
           accompanying test case work.

        This patch increases code size by 320K (144K for JSC, 176K for WebCore) measured
        on x86_64.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::branchTest32):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::branchTest32):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::branchTest32):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::branchTest32):
        * bindings/ScriptFunctionCall.cpp:
        (Deprecated::ScriptFunctionCall::call):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCheckTraps):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckTraps):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeProgram):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeModuleProgram):
        * interpreter/InterpreterInlines.h:
        (JSC::Interpreter::execute):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_check_traps):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_catch):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jit/JITOperations.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LLIntSlowPaths.h:
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBuffer::expandCapacity):
        * runtime/DeferTermination.h: Added.
        (JSC::DeferTermination::DeferTermination):
        (JSC::DeferTermination::~DeferTermination):
        * runtime/ExceptionScope.h:
        (JSC::ExceptionScope::exception const):
        (JSC::ExceptionScope::exception): Deleted.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::finishCreation):
        * runtime/LazyPropertyInlines.h:
        (JSC::ElementType>::callFunc):
        * runtime/StringPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/VM.cpp:
        (JSC::VM::hasExceptionsAfterHandlingTraps):
        (JSC::VM::clearException):
        (JSC::VM::setException):
        (JSC::VM::throwTerminationException):
        (JSC::VM::throwException):
        * runtime/VM.h:
        (JSC::VM::terminationInProgress const):
        (JSC::VM::setTerminationInProgress):
        (JSC::VM::notifyNeedTermination):
        (JSC::VM::DeferExceptionScope::DeferExceptionScope):
        (JSC::VM::DeferExceptionScope::~DeferExceptionScope):
        (JSC::VM::handleTraps): Deleted.
        (JSC::VM::needTrapHandling): Deleted.
        (JSC::VM::needTrapHandlingAddress): Deleted.
        (JSC::VM::setException): Deleted.
        (JSC::VM::clearException): Deleted.
        * runtime/VMEntryScope.cpp:
        (JSC::VMEntryScope::~VMEntryScope):
        * runtime/VMTraps.cpp:
        (JSC::VMTraps::tryInstallTrapBreakpoints):
        (JSC::VMTraps::fireTrap):
        (JSC::VMTraps::handleTraps):
        (JSC::VMTraps::takeTopPriorityTrap):
        (JSC::VMTraps::deferTermination):
        (JSC::VMTraps::undoDeferTermination):
        * runtime/VMTraps.h:
        (JSC::VMTraps::onlyContainsAsyncEvents):
        (JSC::VMTraps::needHandling const):
        (JSC::VMTraps::trapBitsAddress):
        (JSC::VMTraps::isDeferringTermination const):
        (JSC::VMTraps::notifyGrabAllLocks):
        (JSC::VMTraps::hasTrapBit):
        (JSC::VMTraps::clearTrapBit):
        (JSC::VMTraps::setTrapBit):
        (JSC::VMTraps::Mask::Mask): Deleted.
        (JSC::VMTraps::Mask::allEventTypes): Deleted.
        (JSC::VMTraps::Mask::bits const): Deleted.
        (JSC::VMTraps::Mask::init): Deleted.
        (JSC::VMTraps::interruptingTraps): Deleted.
        (JSC::VMTraps::needTrapHandling): Deleted.
        (JSC::VMTraps::needTrapHandlingAddress): Deleted.
        (JSC::VMTraps::hasTrapForEvent): Deleted.
        (JSC::VMTraps::setTrapForEvent): Deleted.
        (JSC::VMTraps::clearTrapForEvent): Deleted.

2021-04-09  Alexey Shvayka  <shvaikalesh@gmail.com>

        Remove className() and toStringName() from the method table
        https://bugs.webkit.org/show_bug.cgi?id=224247

        Reviewed by Darin Adler.

        ES6 introduced Symbol.toStringTag to customize Object.prototype.toString return value.
        It was adopted by WebIDL spec, Chrome's DevTools, Node.js etc. There is no reason to
        keep 2 method table methods, each with only 1 call site, instead of using the symbol.

        Also, it's a bit confusing that for some objects, method table's className() returns
        different result than JSCell::className(VM&).

        This change:

        1. Removes JSProxy's className() / toStringName() methods because its target() is a
           global object that never has these overrides and uses Symbol.toStringTag instead.

        2. Removes DebuggerScope's className() / toStringName() overrides because its objectAtScope()
           has these methods extremely rarely (e.g. `with (new Date) {}`), and its not displayed
           by Web Inspector.

        3. Merges JSCallbackObject's className() / toStringName() methods into Symbol.toStringTag
           branch of getOwnPropertySlot(), with permissive property attributes. To avoid any possible
           breakage, we make sure that it will be shadowed by a structure property.

        4. Reworks JSObject::calculatedClassName() to rely on Symbol.toStringTag, matching Chrome's
           DevTools behavior. On its own, it's a nice change for Web Inspector. We make sure to
           lookup Symbol.toStringTag if `constructor.name` inference fails to avoid confusion when
           extending builtins.

        5. Removes now unused className() from the method table.

        6. Removes toStringName() override from JSFinalizationRegistry because its builtin tag [1]
           is already "Object".

        7. Introduces BooleanObjectType for Boolean wrapper object, and Boolean.prototype as it's
           also required to have a [[BooleanData]] internal slot [2].

        8. Reworks Object.prototype.toString to determine builtin tag [1] based on JSType rather than
           performing method table call. It's guaranteed that a) the set of types we are checking
           against won't be expanded, and b) objects with these types have correct `className`.

        9. Removes now unused toStringTag() from the method table.

        This patch is performance-neutral and carefully preserves current behavior for API objects,
        including isPokerBros() hack.

        [1]: https://tc39.es/ecma262/#sec-object.prototype.tostring (steps 5-14)
        [2]: https://tc39.es/ecma262/#sec-properties-of-the-boolean-prototype-object

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::getOwnPropertySlot):
        (JSC::JSCallbackObject<Parent>::className): Deleted.
        (JSC::JSCallbackObject<Parent>::toStringName): Deleted.
        * API/tests/testapiScripts/testapi.js:
        * debugger/DebuggerScope.cpp:
        (JSC::DebuggerScope::className): Deleted.
        (JSC::DebuggerScope::toStringName): Deleted.
        * debugger/DebuggerScope.h:
        * runtime/BooleanObject.cpp:
        (JSC::BooleanObject::toStringName): Deleted.
        * runtime/BooleanObject.h:
        (JSC::BooleanObject::createStructure):
        * runtime/BooleanPrototype.h:
        * runtime/ClassInfo.h:
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::toStringName): Deleted.
        * runtime/DateInstance.h:
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::toStringName): Deleted.
        * runtime/ErrorInstance.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::className): Deleted.
        (JSC::JSCell::toStringName): Deleted.
        * runtime/JSCell.h:
        * runtime/JSFinalizationRegistry.cpp:
        (JSC::JSFinalizationRegistry::toStringName): Deleted.
        * runtime/JSFinalizationRegistry.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::calculatedClassName):
        (JSC::JSObject::className): Deleted.
        (JSC::isPokerBros): Deleted.
        (JSC::JSObject::toStringName): Deleted.
        * runtime/JSObject.h:
        * runtime/JSProxy.cpp:
        (JSC::JSProxy::className): Deleted.
        (JSC::JSProxy::toStringName): Deleted.
        * runtime/JSProxy.h:
        * runtime/JSType.cpp:
        (WTF::printInternal):
        * runtime/JSType.h:
        * runtime/NumberObject.cpp:
        (JSC::NumberObject::toStringName): Deleted.
        * runtime/NumberObject.h:
        (JSC::NumberObject::createStructure):
        * runtime/ObjectPrototype.cpp:
        (JSC::isPokerBros):
        (JSC::inferBuiltinTag):
        (JSC::objectPrototypeToString):
        1. Removes jsNontrivialString() because it's assertion may fail in case of iOS hack.
        2. Utilizes AtomStringImpl to avoid allocating StringImpl for a small fixed set of strings.

        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::toStringName): Deleted.
        * runtime/RegExpObject.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::toStringName): Deleted.
        * runtime/StringObject.h:

2021-04-08  Khem Raj  <raj.khem@gmail.com>

        [WPE] Build fixes for musl C library on Linux
        https://bugs.webkit.org/show_bug.cgi?id=210068

        Reviewed by Carlos Alberto Lopez Perez.

        Use OS(LINUX) to include musl in platform test
        for linux and consolidate all linux platfrom
        under same test. Use smaller limits for JSC
        stack size per thread and reserved zone size.

        * runtime/MachineContext.h:
        (JSC::MachineContext::stackPointerImpl):
        (JSC::MachineContext::framePointerImpl):
        (JSC::MachineContext::instructionPointerImpl):
        (JSC::MachineContext::argumentPointer<1>):
        (JSC::MachineContext::llintInstructionPointer):
        * runtime/OptionsList.h:

2021-04-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] DUCET level-1 weighs are equal if characters are alphabets
        https://bugs.webkit.org/show_bug.cgi?id=224047

        Reviewed by Saam Barati and Mark Lam.

        ASCII comparison optimization was based on that DUCET level-1 weights are all different (except for 0000 case), but this was wrong.
        If we have the same latin letters with different capitalization, then they have the same level-1 weight ('A' v.s. 'a').
        In this patch,

            1. If we found that the result of level-1 weight comparison is equal, and characters are not equal, then we do level-3 weight comparison.
               We do not perform level-2 since they are all the same weight in ASCII (excluding control characters) region.
            2. We do not perform level-4 weight comparison since level-1 and level-3 comparison must distinguish the strings. Level-1 weights are equal
               only when characters are the same latin letters. And level-3 weight puts different weights for capital latin letters. Since we already know
               that these strings are different while they are equal in level-1 weight comparison, the only case is that they have same latin letters in
               the same position. In that case, level-3 weight must say different results for these characters so that we never meet "equal" status in
               level-3 weight comparison if characters are different.

        * runtime/IntlObject.cpp:
        * runtime/IntlObject.h:
        * runtime/IntlObjectInlines.h:
        (JSC::canUseASCIIUCADUCETComparison):
        (JSC::compareASCIIWithUCADUCETLevel3):
        (JSC::compareASCIIWithUCADUCET):

2021-04-02  Darin Adler  <darin@apple.com>

        Use Hasher more, remove IntegerHasher, fix hashing-related mistakes
        https://bugs.webkit.org/show_bug.cgi?id=224138

        Reviewed by Chris Dumez.

        * bytecode/BytecodeIndex.h:
        (JSC::BytecodeIndex::hash const): Remove unneeded WTF prefix on call
        to intHash.

        * ftl/FTLAbstractHeap.h: Use HashTraits instead of WTF::GenericHashTraits.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::validateAIState): Remove unneeded WTF
        prefix on call to intHash.

        * wasm/WasmLLIntGenerator.cpp: Use HashTraits instead of WTF::GenericHashTraits.

2021-04-07  Mark Lam  <mark.lam@apple.com>

        Rename and make the TerminationException a singleton.
        https://bugs.webkit.org/show_bug.cgi?id=224295

        Reviewed by Keith Miller.

        We previously call it the TerminatedExecutionException, which is a mouthful but
        adds no meaningful information.  It's now renamed to TerminationException.

        We can make it a singleton because the TerminationException is just a VM internal
        mechanism for implementing the termination of the current execution stack.  It
        should never be exposed to user JS code, and therefore, there is no value in
        making it a JS object.  Making it a singleton simplifies the code.

        A TerminationException is now implemented as an Exception cell which holds a
        Symbol with the name "TerminationError".  The TerminationException is only created
        if needed e.g. if the JSC watchdog is created, or if the VM is for a Worker thread
        which needs to be able to handle termination requests.

        We'll also stop notifying the debugger when we throw the TerminationException.
        This is because the TerminationException is not like ordinary exceptions that
        should be reported to the debugger. The fact that the TerminationException uses
        the exception handling mechanism is just a VM internal implementation detail.
        It is not meaningful to report it to the debugger as an exception.

        * API/JSContext.mm:
        (-[JSContext evaluateJSScript:]):
        * API/tests/ExecutionTimeLimitTest.cpp:
        (testExecutionTimeLimit):
        * bindings/ScriptFunctionCall.cpp:
        (Deprecated::ScriptFunctionCall::call):
        * heap/Heap.cpp:
        (JSC::Heap::addCoreConstraints):
        * inspector/InjectedScriptManager.cpp:
        (Inspector::InjectedScriptManager::injectedScriptFor):
        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::reportAPIException):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::unwind):
        (JSC::Interpreter::notifyDebuggerOfExceptionToBeThrown):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jsc.cpp:
        (checkException):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/ExceptionHelpers.cpp:
        (JSC::TerminatedExecutionError::defaultValue): Deleted.
        (JSC::createTerminatedExecutionException): Deleted.
        (JSC::isTerminatedExecutionException): Deleted.
        (JSC::throwTerminatedExecutionException): Deleted.
        * runtime/ExceptionHelpers.h:
        (): Deleted.
        * runtime/JSObject.h:
        (JSC::JSObject::get const):
        * runtime/JSPromise.cpp:
        (JSC::JSPromise::rejectWithCaughtException):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        (JSC::VM::ensureWatchdog):
        (JSC::VM::ensureTerminationException):
        (JSC::VM::throwTerminationException):
        (JSC::VM::throwException):
        * runtime/VM.h:
        (JSC::VM::terminationException const):
        (JSC::VM::isTerminationException const):
        * runtime/VMTraps.cpp:
        (JSC::VMTraps::handleTraps):

2021-04-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use FixedVector more in bytecode dir and JumpTable
        https://bugs.webkit.org/show_bug.cgi?id=224275

        Reviewed by Michael Saboff and Mark Lam.

        1. Use FixedVector more in bytecode/ directory's long-living data structures.
        2. Use FixedVector in SimpleJumpTable. This involves LLInt changes because we need to access FixedVector data from LLInt.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        * bytecode/InlineCallFrame.cpp:
        (JSC::InlineCallFrame::dumpInContext const):
        * bytecode/InlineCallFrame.h:
        * bytecode/JumpTable.h:
        (JSC::SimpleJumpTable::clear):
        * bytecode/ObjectPropertyConditionSet.cpp:
        (JSC::ObjectPropertyConditionSet::mergedWith const):
        (JSC::ObjectPropertyConditionSet::dumpInContext const):
        (JSC::ObjectPropertyConditionSet::isValidAndWatchable const):
        * bytecode/ObjectPropertyConditionSet.h:
        (JSC::ObjectPropertyConditionSet::create):
        (JSC::ObjectPropertyConditionSet::isValid const):
        (JSC::ObjectPropertyConditionSet::size const):
        (JSC::ObjectPropertyConditionSet::begin const):
        (JSC::ObjectPropertyConditionSet::end const):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::findArgumentPositionForLocal):
        (JSC::DFG::ByteCodeParser::flushImpl):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        * dfg/DFGCommonData.cpp:
        (JSC::DFG::CommonData::validateReferences):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::isLiveInBytecode):
        * dfg/DFGGraph.h:
        * dfg/DFGPreciseLocalClobberize.h:
        (JSC::DFG::PreciseLocalClobberizeAdaptor::readTop):
        * dfg/DFGStackLayoutPhase.cpp:
        (JSC::DFG::StackLayoutPhase::run):
        * ftl/FTLCompile.cpp:
        (JSC::FTL::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetMyArgumentByVal):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::argumentsStart):
        * jit/SetupVarargsFrame.cpp:
        (JSC::emitSetupVarargsFrameFastCase):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/ClonedArguments.cpp:
        (JSC::ClonedArguments::createWithInlineFrame):

2021-04-07  Mark Lam  <mark.lam@apple.com>

        Fix a typo in JITUncoughtExceptionAfterCall.
        https://bugs.webkit.org/show_bug.cgi?id=224290

        Reviewed by Keith Miller.

        * assembler/AbortReason.h:
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::jitReleaseAssertNoException):

2021-04-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] WasmMemory caging should care about nullptr
        https://bugs.webkit.org/show_bug.cgi?id=224268
        <rdar://problem/74654838>

        Reviewed by Mark Lam.

        1. Fix Wasm::MemoryHandle::boundsCheckingSize. We should just return m_mappedCapacity here since UINT32_MAX is not 4GB.
           This checking size can include redzone for fast-memory, but this is OK: bounds-check pass in LLInt (in upper tiers, we
           do not use bounds-check for fast-memory), and access to redzone, then fault occurs and signal handler can make it error
           since signal handler is checking whether the access is within Memory::fastMappedBytes which includes redzone.
        2. Fix caging of wasm memory-base pointer in LLInt. We should use pointer sized length since it can be larger than 4GB.
           And we should handle nullptr case correctly: Wasm::MemoryHandle's memory can be nullptr when mapped size is zero.
           caging needs to handle this case as we do in CagedPtr::getMayBeNull.

        * assembler/MacroAssemblerARM64E.h:
        (JSC::MacroAssemblerARM64E::untagArrayPtrLength32):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::cageTypedArrayStorage):
        * llint/LowLevelInterpreter64.asm:
        * llint/WebAssembly.asm:
        * offlineasm/arm64e.rb:
        * offlineasm/ast.rb:
        * offlineasm/instructions.rb:
        * runtime/CagedBarrierPtr.h:
        (JSC::CagedBarrierPtr::CagedBarrierPtr):
        (JSC::CagedBarrierPtr::set):
        (JSC::CagedBarrierPtr::get const):
        (JSC::CagedBarrierPtr::getMayBeNull const):
        (JSC::CagedBarrierPtr::at const):
        (JSC::CagedBarrierPtr::setWithoutBarrier):
        * wasm/WasmInstance.h:
        (JSC::Wasm::Instance::updateCachedMemory):
        * wasm/WasmMemory.cpp:
        (JSC::Wasm::MemoryHandle::MemoryHandle):
        * wasm/WasmMemory.h:

2021-04-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use FixedVector more in JSC
        https://bugs.webkit.org/show_bug.cgi?id=224255

        Reviewed by Mark Lam.

        Use FixedVector more aggressively. This reduces sizeof(Holder) since sizeof(FixedVector) is 8
        while sizeof(Vector) is 16. And since this allocates just-fit size, this does not waste memory.

        * bytecode/BytecodeLivenessAnalysis.cpp:
        (JSC::BytecodeLivenessAnalysis::computeFullLiveness):
        * bytecode/BytecodeLivenessAnalysis.h:
        * bytecode/FullBytecodeLiveness.h:
        (JSC::FullBytecodeLiveness::FullBytecodeLiveness):
        * bytecode/UnlinkedEvalCodeBlock.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::livenessFor):
        * ftl/FTLForOSREntryJITCode.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::lower):
        * ftl/FTLOSRExit.cpp:
        (JSC::FTL::OSRExitDescriptor::prepareOSRExitHandle):
        * ftl/FTLOSRExit.h:
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileRecovery):
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::sweepPreciseAllocations):
        * jit/RegisterAtOffsetList.cpp:
        (JSC::RegisterAtOffsetList::RegisterAtOffsetList):
        * jit/RegisterAtOffsetList.h:
        (JSC::RegisterAtOffsetList::begin const):
        (JSC::RegisterAtOffsetList::end const):
        (JSC::RegisterAtOffsetList::clear): Deleted.
        * runtime/JSGlobalObject.h:
        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::finishCreation):
        * runtime/JSModuleNamespaceObject.h:
        * yarr/YarrPattern.h:
        (JSC::Yarr::YarrPattern::resetForReparsing):

2021-04-06  Alexey Shvayka  <shvaikalesh@gmail.com>

        Symbol and BigInt wrapper objects should perform OrdinaryToPrimitive
        https://bugs.webkit.org/show_bug.cgi?id=224208

        Reviewed by Yusuke Suzuki.

        ES6 introduced Symbol.toPrimitive as the only way to override ToPrimitive;
        if it's nullish, OrdinaryToPrimitive [1] is performed unconditionally.

        This patch removes two redundant defaultValue() overrides, fixing JSC to call
        (possibly userland) toString() / valueOf() methods of a) Symbol objects whose
        Symbol.toPrimitive was removed, and b) BigInt wrapper objects.

        Aligns JSC with V8 and SpiderMonkey. Coercion of primitives is unaffected.
        Also, removes dummy BigIntObject::internalValue() override.

        [1]: https://tc39.es/ecma262/#sec-toprimitive (step 2.d)

        * runtime/BigIntObject.cpp:
        (JSC::BigIntObject::defaultValue): Deleted.
        * runtime/BigIntObject.h:
        * runtime/SymbolObject.cpp:
        (JSC::SymbolObject::defaultValue): Deleted.
        * runtime/SymbolObject.h:

2021-04-06  Alexey Shvayka  <shvaikalesh@gmail.com>

        Array's toString() is incorrect if join() is non-callable
        https://bugs.webkit.org/show_bug.cgi?id=224215

        Reviewed by Yusuke Suzuki.

        This patch exposes objectPrototypeToString() to be used by Array.prototype.toString
        if "join" lookup doesn't return a callable value [1].

        Fixes Array's toString() to return the correct tag instead of internal `className`,
        perform Symbol.toStringTag lookup, and throw for revoked Proxy objects.
        Aligns JSC with V8 and SpiderMonkey.

        Also, a few objectPrototypeToString() tweaks: a bit nicer `undefined` / `null`
        checks and simpler toObject() exception handling.

        [1]: https://tc39.es/ecma262/#sec-array.prototype.tostring (step 3)

        * runtime/ArrayPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectPrototypeToString):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/ObjectPrototype.h:

2021-04-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Introduce FixedVector and use it for FixedOperands
        https://bugs.webkit.org/show_bug.cgi?id=224171

        Reviewed by Mark Lam.

        Define FixedOperands<T> which uses FixedVector for its storage. We use FixedOperands in FTL::OSRExitDescriptor.
        We also replace RefCountedArray<T> with FixedVector<T> if they are not requiring RefCountedArray<T>'s ref-counting
        semantics.

        * bytecode/BytecodeGeneratorification.cpp:
        (JSC::BytecodeGeneratorification::run):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::setConstantRegisters):
        (JSC::CodeBlock::setNumParameters):
        (JSC::CodeBlock::setRareCaseProfiles):
        (JSC::CodeBlock::insertBasicBlockBoundariesForControlFlowProfiler):
        * bytecode/CodeBlock.h:
        * bytecode/Operands.h:
        (JSC::Operands::Operands):
        * bytecode/OperandsInlines.h:
        (JSC::U>::dumpInContext const):
        (JSC::U>::dump const):
        (JSC::Operands<T>::dumpInContext const): Deleted.
        (JSC::Operands<T>::dump const): Deleted.
        * bytecode/PolyProtoAccessChain.h:
        * bytecode/PolymorphicAccess.cpp:
        (JSC::PolymorphicAccess::regenerate):
        * bytecode/PolymorphicAccess.h:
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::dumpExpressionRangeInfo):
        (JSC::UnlinkedCodeBlock::expressionRangeForBytecodeIndex const):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::expressionInfo):
        (JSC::UnlinkedCodeBlock::identifiers const):
        (JSC::UnlinkedCodeBlock::constantRegisters):
        (JSC::UnlinkedCodeBlock::constantsSourceCodeRepresentation):
        (JSC::UnlinkedCodeBlock::constantIdentifierSets):
        (JSC::UnlinkedCodeBlock::opProfileControlFlowBytecodeOffsets const):
        * bytecode/UnlinkedFunctionExecutable.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::prepareJumpTableForSwitch):
        * dfg/DFGJITCode.h:
        * dfg/DFGPlan.h:
        (JSC::DFG::Plan::tierUpInLoopHierarchy):
        * ftl/FTLOSRExit.h:
        * jit/GCAwareJITStubRoutine.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
        * jit/PolymorphicCallStubRoutine.h:
        * llint/LLIntOffsetsExtractor.cpp:
        * llint/LowLevelInterpreter.asm:
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseInner):
        (JSC::Parser<LexerType>::parseClassFieldInitializerSourceElements):
        * parser/Parser.h:
        (JSC::Parser<LexerType>::parse):
        (JSC::parse):
        * runtime/CachedTypes.cpp:
        (JSC::CachedVector::encode):
        (JSC::CachedVector::decode const):
        * wasm/js/JSWebAssemblyInstance.h:

2021-04-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Shrink some of Vectors in JSC
        https://bugs.webkit.org/show_bug.cgi?id=224162

        Reviewed by Simon Fraser.

        1. Add XXXStatus::shrinkToFit to shrink underlying dynamic Vectors.
        2. Replace tierUpInLoopHierarchy's Vector with RefCountedArray since it is constructed-once-lookup-only data.
        3. Use MemoryCompactLookupOnlyRobinHoodHashSet for StringTables since this is constructed-once-lookup-only data. We also add
           MemoryCompactLookupOnlyRobinHoodHashSet support for CachedTypes.
        4. Use resizeToFit for StringSwitchJumpTables and SwitchJumpTables.
        5. JITStubRoutineSet's Vector should be shrunk.
        6. BlockDirectoryBits's Vector's initial size should be small.
        7. Make PolyProtoAccessChain RefCounted, and use RefCountedArray for its Vector<StructureID>. And remove PolyProtoAccessChain::clone.
           Just having Ref is enough since this is immutable data.
        8. Use RefCountedArray for UnlinkedFunctionExecutable's m_classFieldLocations.
        9. Use RefCountedArray for JSWebAssemblyInstance.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::AccessCase):
        (JSC::AccessCase::create):
        (JSC::AccessCase::createTransition):
        * bytecode/AccessCase.h:
        (JSC::AccessCase::AccessCase): Deleted.
        * bytecode/CallLinkInfo.cpp:
        (JSC::CallLinkInfo::setFrameShuffleData):
        * bytecode/CheckPrivateBrandStatus.cpp:
        (JSC::CheckPrivateBrandStatus::shrinkToFit):
        (JSC::CheckPrivateBrandStatus::computeForStubInfoWithoutExitSiteFeedback):
        (JSC::CheckPrivateBrandStatus::merge):
        * bytecode/CheckPrivateBrandStatus.h:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        * bytecode/DeleteByStatus.cpp:
        (JSC::DeleteByStatus::shrinkToFit):
        (JSC::DeleteByStatus::computeForStubInfoWithoutExitSiteFeedback):
        (JSC::DeleteByStatus::merge):
        * bytecode/DeleteByStatus.h:
        * bytecode/GetByStatus.cpp:
        (JSC::GetByStatus::shrinkToFit):
        (JSC::GetByStatus::computeForStubInfoWithoutExitSiteFeedback):
        (JSC::GetByStatus::computeFor):
        (JSC::GetByStatus::merge):
        * bytecode/GetByStatus.h:
        * bytecode/GetterSetterAccessCase.cpp:
        (JSC::GetterSetterAccessCase::GetterSetterAccessCase):
        (JSC::GetterSetterAccessCase::create):
        * bytecode/GetterSetterAccessCase.h:
        * bytecode/InByIdStatus.cpp:
        (JSC::InByIdStatus::shrinkToFit):
        (JSC::InByIdStatus::computeForStubInfoWithoutExitSiteFeedback):
        (JSC::InByIdStatus::merge):
        * bytecode/InByIdStatus.h:
        * bytecode/InstanceOfStatus.cpp:
        (JSC::InstanceOfStatus::shrinkToFit):
        (JSC::InstanceOfStatus::computeForStubInfo):
        * bytecode/InstanceOfStatus.h:
        * bytecode/IntrinsicGetterAccessCase.cpp:
        (JSC::IntrinsicGetterAccessCase::IntrinsicGetterAccessCase):
        (JSC::IntrinsicGetterAccessCase::create):
        * bytecode/IntrinsicGetterAccessCase.h:
        * bytecode/JumpTable.h:
        * bytecode/PolyProtoAccessChain.cpp:
        (JSC::PolyProtoAccessChain::tryCreate):
        (JSC::PolyProtoAccessChain::create): Deleted.
        * bytecode/PolyProtoAccessChain.h:
        (JSC::PolyProtoAccessChain::clone): Deleted.
        (JSC::PolyProtoAccessChain::chain const): Deleted.
        (JSC::PolyProtoAccessChain::operator!= const): Deleted.
        (JSC::PolyProtoAccessChain::forEach const): Deleted.
        (JSC::PolyProtoAccessChain::slotBaseStructure const): Deleted.
        * bytecode/PolymorphicAccess.cpp:
        (JSC::PolymorphicAccess::visitWeak const):
        (JSC::PolymorphicAccess::regenerate):
        * bytecode/PolymorphicAccess.h:
        * bytecode/ProxyableAccessCase.cpp:
        (JSC::ProxyableAccessCase::ProxyableAccessCase):
        (JSC::ProxyableAccessCase::create):
        * bytecode/ProxyableAccessCase.h:
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::shrinkToFit):
        (JSC::PutByIdStatus::computeForStubInfo):
        (JSC::PutByIdStatus::computeFor):
        (JSC::PutByIdStatus::merge):
        * bytecode/PutByIdStatus.h:
        * bytecode/SetPrivateBrandStatus.cpp:
        (JSC::SetPrivateBrandStatus::shrinkToFit):
        (JSC::SetPrivateBrandStatus::computeForStubInfoWithoutExitSiteFeedback):
        (JSC::SetPrivateBrandStatus::merge):
        * bytecode/SetPrivateBrandStatus.h:
        * bytecode/UnlinkedCodeBlock.h:
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::generateUnlinkedFunctionCodeBlock):
        * bytecode/UnlinkedFunctionExecutable.h:
        * dfg/DFGJITCode.h:
        * dfg/DFGPlan.h:
        (JSC::DFG::Plan::tierUpInLoopHierarchy):
        * dfg/DFGTierUpCheckInjectionPhase.cpp:
        (JSC::DFG::TierUpCheckInjectionPhase::run):
        * heap/BlockDirectoryBits.h:
        * heap/JITStubRoutineSet.cpp:
        (JSC::JITStubRoutineSet::deleteUnmarkedJettisonedStubRoutines):
        * jit/CallFrameShuffleData.h:
        (JSC::CallFrameShuffleData::shrinkToFit):
        * jit/GCAwareJITStubRoutine.h:
        * jit/PolymorphicCallStubRoutine.h:
        * jit/Repatch.cpp:
        (JSC::tryCacheGetBy):
        (JSC::tryCachePutByID):
        (JSC::tryCacheInByID):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseInner):
        (JSC::Parser<LexerType>::parseClassFieldInitializerSourceElements):
        * parser/Parser.h:
        (JSC::Parser<LexerType>::parse):
        (JSC::parse):
        * runtime/CachedTypes.cpp:
        (JSC::CachedFunctionExecutableRareData::encode):
        (JSC::CachedFunctionExecutableRareData::decode const):
        * runtime/VM.cpp:
        (JSC::VM::popAllCheckpointOSRSideStateUntil):
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::visitChildrenImpl):
        * wasm/js/JSWebAssemblyInstance.h:

2021-04-05  Alex Christensen  <achristensen@webkit.org>

        Resurrect Mac CMake build
        https://bugs.webkit.org/show_bug.cgi?id=224084

        Reviewed by Tim Horton.

        * PlatformMac.cmake:

2021-04-05  Keith Miller  <keith_miller@apple.com>

        DFG arity fixup nodes should exit to the caller's call opcode
        https://bugs.webkit.org/show_bug.cgi?id=223278

        Reviewed by Saam Barati.

        Right now when we do arity fixup in the DFG we model it in the
        same way that it executes, which means all the nodes are part of
        the callee. Unfortunately, this causes PhantomInsertionPhase to
        think those nodes could be replacing previously defined
        VirtualRegisters as they are part of the callee's header (always
        alive). When PhantomInsertionPhase then inserts a Phantom it will
        put that node in the caller's frame as that's the first ExitOK
        node. The caller however may have no knowledge of that
        VirtualRegister though. For example:

        --> foo: loc10 is a local in foo.
            ...
            1: MovHint(loc10)
            2: SetLocal(loc10)
        <-- foo // loc10 ten is now out of scope for the InlineCallFrame of the caller.
        ...
        // Phantom will be inserted here refering to loc10, which doesn't make sense.
        --> bar // loc10 is an argument to bar and needs arity fixup.
            ... // All of these nodes are ExitInvalid
            3: MovHint(loc10, ExitInvalid)
            4: SetLocal(loc10, ExitInvalid)
            ...

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::currentNodeOrigin):
        (JSC::DFG::ByteCodeParser::inlineCall):

2021-04-02  Alexey Shvayka  <shvaikalesh@gmail.com>

        Reduce bytecode instruction count emitted for `class extends`
        https://bugs.webkit.org/show_bug.cgi?id=223884

        Reviewed by Yusuke Suzuki.

        This patch adds a variant of globalFuncSetPrototypeDirect() that throws on
        invalid [[Prototype]] values (instead of ignoring them) and utilizes it in
        ClassExprNode::emitBytecode(), removing equivalent checks.

        Throwing for invalid `superclass.prototype` value after setting the [[Prototype]]
        of `constructor` is unobservable because it's a newly created extensible object
        and `superclass` is a proven object.

        The fact that [[Prototype]] set can throw only in case of `superclass.prototype`
        allows keeping descriptive error message via custom appender. To find "extends"
        in a source code, ClassExprNode is made an instance of ThrowableExpressionData.

        This change reduces the number of emitted bytecodes by 4, and fixes IsConstructor's
        error [1] to point to correct source code location.

        [1]: https://tc39.es/ecma262/#sec-runtime-semantics-classdefinitionevaluation (step 5.f)

        * builtins/BuiltinNames.h:
        * bytecode/LinkTimeConstant.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitDirectSetPrototypeOf):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::PropertyListNode::emitPutConstantProperty):
        (JSC::ClassExprNode::emitBytecode):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createClassExpr):
        * parser/Nodes.h:
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseClass):
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createClassExpr):
        * runtime/ExceptionHelpers.cpp:
        (JSC::invalidPrototypeSourceAppender):
        (JSC::createInvalidPrototypeError):
        * runtime/ExceptionHelpers.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSGlobalObjectFunctions.h:

2021-04-02  Jessica Tallon  <jtallon@igalia.com>

        Add type method to WebAssembly.Memory, WebAssembly.Table & WebAssembly.Global objects
        https://bugs.webkit.org/show_bug.cgi?id=222412

        Reviewed by Yusuke Suzuki.

        This adds a type method to several WASM objects as part of the work to add WASM
        type reflections to the JS-API. The methods return a JSON object which describes
        the type of the object and can be passed to the constructor to create a new wasm
        object of that type.

         * wasm/js/JSWebAssemblyGlobal.cpp:
        (JSC::JSWebAssemblyGlobal::type):
        * wasm/js/JSWebAssemblyGlobal.h:
        * wasm/js/JSWebAssemblyMemory.cpp:
        (JSC::JSWebAssemblyMemory::type):
        * wasm/js/JSWebAssemblyMemory.h:
        * wasm/js/JSWebAssemblyTable.cpp:
        (JSC::JSWebAssemblyTable::type):
        * wasm/js/JSWebAssemblyTable.h:
        * wasm/js/WebAssemblyGlobalPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyGlobalPrototype.h:
        * wasm/js/WebAssemblyMemoryPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyTablePrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-04-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [WTF] Introduce RobinHoodHashTable
        https://bugs.webkit.org/show_bug.cgi?id=223895

        Reviewed by Fil Pizlo.

        * builtins/BuiltinNames.cpp:
        (JSC::lookUpPrivateNameImpl):
        (JSC::lookUpWellKnownSymbolImpl):
        * builtins/BuiltinNames.h:
        * bytecode/BytecodeIntrinsicRegistry.h:
        * runtime/Identifier.h:
        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::initializeCollator):
        (JSC::IntlCollator::checkICULocaleInvariants):
        * runtime/IntlCollator.h:
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        * runtime/IntlDateTimeFormatConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlDisplayNames.cpp:
        (JSC::IntlDisplayNames::initializeDisplayNames):
        * runtime/IntlDisplayNamesConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlListFormat.cpp:
        (JSC::IntlListFormat::initializeListFormat):
        * runtime/IntlListFormatConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::initializeNumberFormat):
        * runtime/IntlNumberFormatConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlObject.cpp:
        (JSC::addScriptlessLocaleIfNeeded):
        (JSC::intlAvailableLocales):
        (JSC::intlCollatorAvailableLocales):
        (JSC::intlSegmenterAvailableLocales):
        (JSC::bestAvailableLocale):
        (JSC::lookupMatcher):
        (JSC::bestFitMatcher):
        (JSC::resolveLocale):
        (JSC::lookupSupportedLocales):
        (JSC::bestFitSupportedLocales):
        (JSC::supportedLocales):
        * runtime/IntlObject.h:
        (JSC::intlDateTimeFormatAvailableLocales):
        (JSC::intlDisplayNamesAvailableLocales):
        (JSC::intlNumberFormatAvailableLocales):
        (JSC::intlPluralRulesAvailableLocales):
        (JSC::intlRelativeTimeFormatAvailableLocales):
        (JSC::intlListFormatAvailableLocales):
        * runtime/IntlPluralRules.cpp:
        (JSC::IntlPluralRules::initializePluralRules):
        * runtime/IntlPluralRulesConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlRelativeTimeFormat.cpp:
        (JSC::IntlRelativeTimeFormat::initializeRelativeTimeFormat):
        * runtime/IntlRelativeTimeFormatConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlSegmenter.cpp:
        (JSC::IntlSegmenter::initializeSegmenter):
        * runtime/IntlSegmenterConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/RegExpCache.h:
        * runtime/RegExpKey.h:

2021-04-01  Yusuke Suzuki  <ysuzuki@apple.com>

        REGRESSION(r274724): JITCage trampoline needs to be adjusted
        https://bugs.webkit.org/show_bug.cgi?id=224065

        Reviewed by Saam Barati.

        r274724 introduced a new parameter to custom setters, but it didn't change the parameter recognization of JITCage trampolines for custom accessors.
        As a result, we are jumping with the wrong pointer, and crash when custom setter is called with JITCage.

        This patch fixes the above bug.

        1. Now, custom getter and custom setter have different number of parameters. We should have two different trampolines to invoke it. We remove vmEntryCustomAccessor, and
           add vmEntryCustomGetter/vmEntryCustomSetter.
        2. vmEntryCustomSetter should use a4 parameter as a executable address for trampoline.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateImpl):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCallDOMGetter):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCallDOMGetter):
        * llint/LLIntThunks.cpp:
        * llint/LLIntThunks.h:
        * llint/LowLevelInterpreter.asm:
        * offlineasm/arm64.rb:
        * offlineasm/registers.rb:
        * runtime/PropertySlot.h:

2021-04-01  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Use ucal_getTimeZoneOffsetFromLocal if ICU 69 is present
        https://bugs.webkit.org/show_bug.cgi?id=224075

        Reviewed by Yusuke Suzuki.

        Apple ICU 68 cherry picked ucal_getTimeZoneOffsetFromLocal (see r223783),
        but now that ICU 69 is in RC, we can go ahead and update the #if for non-Apple platforms.

        * runtime/JSDateMath.cpp:

2021-04-01  Tadeu Zagallo  <tzagallo@apple.com>

        Remove use of ENABLE from API header
        https://bugs.webkit.org/show_bug.cgi?id=224060
        <rdar://76111678>

        Reviewed by Mark Lam.

        The use of the ENABLE macro in these API headers has caused build failures. Instead of
        conditionally exposing these API methods we make them into no-ops if DFG is disabled.

        * API/JSVirtualMachine.mm:
        (+[JSVirtualMachine setNumberOfDFGCompilerThreads:]):
        (+[JSVirtualMachine setNumberOfFTLCompilerThreads:]):
        * API/JSVirtualMachinePrivate.h:

2021-04-01  Alexey Shvayka  <shvaikalesh@gmail.com>

        Optimize createListFromArrayLike() and Proxy's [[OwnPropertyKeys]] method
        https://bugs.webkit.org/show_bug.cgi?id=223928

        Reviewed by Yusuke Suzuki.

        createListFromArrayLike() changes:

          1. Use toLength() / getIndex() methods that have fast paths.
          2. Remove RuntimeTypeMask and error messages from its signature: type checks are better
             performed in advance / inside a functor to keep the helper more versatile.
          3. Invert functor's return value to align with Structure::forEachProperty() and friends.
          4. Rename it to forEachInArrayLike() as no list is actually returned.

        ProxyObject::performGetOwnPropertyNames() changes:

          1. Remove RuntimeTypeMask filtering as it's already performed by PropertyNameArray::add().
          2. Store target's keys in a HashSet for faster insertion / search.
          3. Don't populate `targetConfigurableKeys` for extensible target as it won't be used [1].
          4. Leverage return value of HashSet::remove() instead of using a helper.

        This patch advances Proxy's [[OwnPropertyKeys]] microbenchmarks by 20-30%,
        mainly due to createListFromArrayLike() changes. No behavior changes.

        Also, utilizes forEachInArrayLike() for allow list of JSON.stringify().

        [1]: https://tc39.es/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-ownpropertykeys (step 20)

        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Stringifier):
        * runtime/JSObject.h:
        (JSC::JSObject::getIndex const):
        * runtime/JSObjectInlines.h:
        (JSC::forEachInArrayLike):
        (JSC::createListFromArrayLike): Deleted.
        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::performGetOwnPropertyNames):
        * runtime/ReflectObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-03-31  David Kilzer  <ddkilzer@apple.com>

        UBSan: JSC::Parser<LexerType>::parseProperty(): runtime error: load of value nnn, which is not a valid value for type 'bool'
        <https://webkit.org/b/223896>
        <rdar://problem/75970132>

        Reviewed by Darin Adler.

        Based on a suggestion by Darin Adler.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseProperty):
        - Change 'escaped' to 'wasUnescapedIdent' to avoid the undefined
          behavior since m_token.m_data.escaped is only set in the case
          when an identifer is parsed (in Lexer<>::parseIdentifer()),
          not a string (in Lexer<>::parseString()). This simplifies the
          logic later in the method.

2021-03-31  Mark Lam  <mark.lam@apple.com>

        Missing exception check in HashMapImpl::add().
        https://bugs.webkit.org/show_bug.cgi?id=224007
        rdar://76053163

        Reviewed by Saam Barati.

        * runtime/HashMapImpl.h:
        (JSC::HashMapImpl::add):

2021-03-31  Xan Lopez  <xan@igalia.com>

        [JSC] Remove warnings about unnecessary operator= for ARMv7Assembler LinkRecord
        https://bugs.webkit.org/show_bug.cgi?id=223916

        Reviewed by Darin Adler.

        Many years ago we defined an assignment operator for LinkRecord in
        order to speed up build times (see #90930). Recent GCC versions
        tell us that if we do that we almost certainly want to define a
        copy constructor too. The ARM64Assembler file already does it, so
        do it too for ARMv7 to remove the warnings.

        * assembler/ARM64Assembler.h:
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::LinkRecord::LinkRecord):
        (JSC::ARMv7Assembler::LinkRecord::operator=):

2021-03-31  Alexey Shvayka  <shvaikalesh@gmail.com>

        Optimize constructors of ES6 collections
        https://bugs.webkit.org/show_bug.cgi?id=223953

        Reviewed by Yusuke Suzuki.

        This patch speeds up the constructors by avoiding call() for non-observable
        "set" / "add" methods and using getIndex() for Map / WeakMap collections.

        For Map / Set, this change leverages existing cloning helpers, which rely on
        watchpoints, to avoid even a method lookup. However, slower path is used for
        subclasses. Results in 1.9x speed-up for common case.

        For WeakMap / WeakSet, adder function is checked by C++ pointer, which enables
        fast path even for cross-realm subclasses. Results in 2.3x progression.

        Both approaches require special handling of a cross-realm NewTarget to ensure
        that raised exceptions (OOM / TypeError) belong to realm of the adder function,
        and not to constructor's or NewTarget's.

        Also, adds descriptve error messages for non-callable "set" / "add" properties.

        * runtime/JSMap.cpp:
        (JSC::JSMap::isSetFastAndNonObservable):
        (JSC::JSMap::canCloneFastAndNonObservable): Deleted.
        * runtime/JSMap.h:
        * runtime/JSSet.cpp:
        (JSC::JSSet::isAddFastAndNonObservable):
        (JSC::JSSet::canCloneFastAndNonObservable): Deleted.
        * runtime/JSSet.h:
        * runtime/MapConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/SetConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/WeakMapConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/WeakMapPrototype.cpp:
        (JSC::WeakMapPrototype::finishCreation):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/WeakMapPrototype.h:
        * runtime/WeakSetConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/WeakSetPrototype.cpp:
        (JSC::WeakSetPrototype::finishCreation):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/WeakSetPrototype.h:

2021-03-30  Devin Rousso  <drousso@apple.com>

        REGRESSION(r274607): media controls script is visible in Web Inspector even without the engineering "Show WebKit-internal scripts" enabled
        https://bugs.webkit.org/show_bug.cgi?id=223961

        Reviewed by Yusuke Suzuki.

        It turns out that Web Inspector will only ignore scripts that have a source URL directive
        that matches `__InjectedScript_*.js`, not those that have a (source) URL matching that.

        In addition to Web Inspector ignoring these scripts in the UI, it will also cause the
        `Debugger` to not pause in scripts with a matching source URL directive (unless the
        local build engineering only "Pause in WebKit-internal scripts" is enabled).

        * Scripts/make-js-file-arrays.py:
        (main):
        Add a `//# sourceURL=__InjectedScript_*.js` to the contents before it's encoded.

2021-03-30  Sam Weinig  <weinig@apple.com>

        JSGlobalObject's m_customGetterFunctionMap and m_customSetterFunctionMap should be sets, not maps, and should use both the identifier and function pointer as the key
        https://bugs.webkit.org/show_bug.cgi?id=223613

        Reviewed by Saam Barati.

        - Adds a generic WeakGCSet class to go with the existing WeakGCMap.
        - Renames WeakGCMapBase to WeakGCHashTable, moves it to its own file
          and now uses it as the base class of both WeakGCSet and WeakGCMap.
        - Replaces JSGlobalObject's customGetterFunctionMap/customSetterFunctionMap
          with customGetterFunctionSet/customSetterFunctionSet, using the new
          WeakGCSet, and updates them to use both the function pointer and 
          property name for the key, rather than just the function pointer which
          is what the previous code did. This allows multiple custom functions
          to use the same underlying function pointer as long as they have distinct
          property names, which is going to be used to optimize the bindings for
          CSSStyleDeclaration.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        Add new files.

        * heap/Heap.cpp:
        (JSC::Heap::runEndPhase):
        (JSC::Heap::pruneStaleEntriesFromWeakGCHashTables):
        (JSC::Heap::registerWeakGCHashTable):
        (JSC::Heap::unregisterWeakGCHashTable):
        (JSC::Heap::pruneStaleEntriesFromWeakGCMaps): Deleted.
        (JSC::Heap::registerWeakGCMap): Deleted.
        (JSC::Heap::unregisterWeakGCMap): Deleted.
        * heap/Heap.h:
        Update for new name. WeakGCMapBase -> WeakGCHashTable.

        * runtime/JSCInlines.h:
        Add WeakGCSetInlines.h

        * runtime/JSCustomGetterFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSCustomGetterFunction::JSCustomGetterFunction):
        (JSC::JSCustomGetterFunction::create):
        * runtime/JSCustomGetterFunction.h:
        * runtime/JSCustomSetterFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSCustomSetterFunction::JSCustomSetterFunction):
        (JSC::JSCustomSetterFunction::create):
        * runtime/JSCustomSetterFunction.h:
        Add helper type CustomFunctionPointer and helper function customFunctionPointer()
        to allow some generic hashing code to run on either JSCustomGetterFunction
        or JSCustomSetterFunction.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::JSGlobalObject):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::WeakCustomGetterOrSetterHash::hash):
        (JSC::JSGlobalObject::WeakCustomGetterOrSetterHash::equal):
        (JSC::JSGlobalObject::customGetterFunctionSet):
        (JSC::JSGlobalObject::customSetterFunctionSet):
        (JSC::JSGlobalObject::customGetterFunctionMap): Deleted.
        (JSC::JSGlobalObject::customSetterFunctionMap): Deleted.
        Replace m_customGetterFunctionMap/m_customSetterFunctionMap with 
        m_customGetterFunctionSet/m_customSetterFunctionSet. As the key is included
        in the value, it saves space to use a set rather than a map. We now also
        hash and compare both the function pointer and the property name to allow
        sharing implementations.

        * runtime/JSObject.cpp:
        (JSC::WeakCustomGetterOrSetterHashTranslator::hash):
        (JSC::WeakCustomGetterOrSetterHashTranslator::equal):
        (JSC::createCustomGetterFunction):
        (JSC::createCustomSetterFunction):
        Update creation functions to use the new sets, making use of the
        ensureValue function and a HashTranslator allowing the use of a
        std::pair<PropertyName, FunctionPointer> as an alternative lookup
        key. This allows us to avoid creating the JSCustomGetterFunction/JSCustomSetterFunction
        pointer if one with the same property name and function pointer are
        already in the set.

        * runtime/WeakGCHashTable.h: Added.
        (JSC::WeakGCHashTable::~WeakGCHashTable):
        Moved from WeakGCMap and renamed as it is now the base of both
        WeakGCMap and WeakGCSet.
 
        * runtime/WeakGCMap.h:
        Update to use new WeakGCHashTable base class.

        * runtime/WeakGCMapInlines.h:
        (JSC::KeyTraitsArg>::WeakGCMap):
        (JSC::KeyTraitsArg>::~WeakGCMap):
        Update for new Heap function names for WeakGCHashTable.

        * runtime/WeakGCSet.h: Added.
        * runtime/WeakGCSetInlines.h: Added.
        (JSC::TraitsArg>::WeakGCSet):
        (JSC::TraitsArg>::~WeakGCSet):
        (JSC::TraitsArg>::find):
        (JSC::TraitsArg>::find const):
        (JSC::TraitsArg>::contains const):
        (JSC::TraitsArg>::pruneStaleEntries):
        Added a minimal WeakGCSet based on WeakGCMap. 

2021-03-30  Mark Lam  <mark.lam@apple.com>

        Add disableForwardingVPrintfStdErrToOSLog() and use it in the jsc shell.
        https://bugs.webkit.org/show_bug.cgi?id=223963

        Reviewed by Saam Barati.

        This prevents automatic forwarding of vprintf_stderr_common() to os_log_with_args(),
        which results in duplicate output when using the jsc shell.  As a result, ASSERT
        fail messages and crash stack traces will be more readable.

        * jsc.cpp:
        (main):

2021-03-30  Mark Lam  <mark.lam@apple.com>

        Add Options::exitOnResourceExhaustion() to enable exiting instead of crashing on resource exhaustion.
        https://bugs.webkit.org/show_bug.cgi?id=223959
        rdar://63934158

        Reviewed by Tadeu Zagallo.

        This is useful to unblock fuzzers from false positive crashes due to resource
        exhaustion.  Currently, this is only applied to StructureID exhaustion.

        Since we're adding this facility, we might as well implement it in such a way that
        it can be easily deployed for other types of resource exhaustion as well.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * runtime/OptionsList.h:
        * runtime/ResourceExhaustion.cpp: Added.
        (JSC::handleResourceExhaustion):
        * runtime/ResourceExhaustion.h: Added.
        * runtime/StructureIDTable.cpp:
        (JSC::StructureIDTable::resize):

2021-03-30  Ryan Haddad  <ryanhaddad@apple.com>

        Ensure that GlobalPropertyInfo is allocated on the stack.
        https://bugs.webkit.org/show_bug.cgi?id=223911

        Unreviewed test gardening.

        Rebaseline builtins generator tests after r275212.

        * Scripts/tests/builtins/expected/WebCoreJSBuiltins.h-result:

2021-03-30  Mark Lam  <mark.lam@apple.com>

        Add more information to GC verifier verbose dumps.
        https://bugs.webkit.org/show_bug.cgi?id=223951

        Reviewed by Yusuke Suzuki.

        * heap/VerifierSlotVisitor.cpp:
        (JSC::VerifierSlotVisitor::dumpMarkerData):

2021-03-30  Mark Lam  <mark.lam@apple.com>

        Ensure that GlobalPropertyInfo is allocated on the stack.
        https://bugs.webkit.org/show_bug.cgi?id=223911
        rdar://75865742

        Reviewed by Yusuke Suzuki.

        We rely on GlobalPropertyInfo being allocated on the stack to allow its JSValue
        value to be scanned by the GC.  Unfortunately, an ASAN compilation would choose
        to allocate the GlobalPropertyInfo on a side buffer instead of directly on the
        stack.  This prevents the GC from doing the needed scan.

        We'll fix this by suppressing ASAN on the functions that allocated GlobalPropertyInfo
        arrays.  Also added an ASSERT in the GlobalPropertyInfo constructor to assert that
        it is allocated on the stack.

        * Scripts/wkbuiltins/builtins_generate_internals_wrapper_implementation.py:
        (BuiltinsInternalsWrapperImplementationGenerator.generate_initialize_method):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::initStaticGlobals):
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::exposeDollarVM):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo):

2021-03-29  Xan López  <xan@igalia.com>

        [JSC] Use helper method when possible to store data in the callframe header
        https://bugs.webkit.org/show_bug.cgi?id=223432

        Reviewed by Yusuke Suzuki.

        A bunch of the direct stores to the callframe header are zeroing
        out the codeblock slot. Create a helper method to do that and use
        it accordingly. For the rest, use emitPutToCallFrameHeader, which
        already does the right thing. Also, remove a lot of unused helper
        methods in AssemblyHelpers (which have been updated for no reason
        throughout the years).

        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::emitPutToCallFrameHeaderBeforePrologue): Deleted.
        (JSC::AssemblyHelpers::emitPutPayloadToCallFrameHeaderBeforePrologue): Deleted.
        (JSC::AssemblyHelpers::emitPutTagToCallFrameHeaderBeforePrologue): Deleted.
        * wasm/js/JSToWasm.cpp:
        (JSC::Wasm::createJSToWasmWrapper):
        * wasm/js/WasmToJS.cpp:
        (JSC::Wasm::wasmToJS):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):

2021-03-28  Sam Weinig  <weinig@apple.com>

        Remove ENABLE_INDEXED_DATABASE & ENABLE_INDEXED_DATABASE_IN_WORKERS, it seems like it is on for all ports
        https://bugs.webkit.org/show_bug.cgi?id=223810

        Reviewed by Simon Fraser.

        * inspector/protocol/IndexedDB.json:
        Update for remove ENABLE_INDEXED_DATABASE conditional.

2021-03-26  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use AppleICU SPI for canonicalization
        https://bugs.webkit.org/show_bug.cgi?id=223552

        Reviewed by Ryosuke Niwa.

        uloc_canonicalize does not perform alias mapping. This is different from ECMA402's canonicalization requirement.
        ICU C++ icu::Locale can canonicalize locale ID with alias mapping, but this is not exposed to C API.

        In this patch, we adopt AppleICU SPI "ualoc_canonicalForm" added in rdar://74314220. This canonicalization can perform
        alias mapping too. We do not extend uloc_canonicalize since this API explicitly says "It does NOT map aliased names in any way."[1].
        In [2], we are tracking upstreaming of this new SPI. Once it is upstreamed to the mainline ICU, we will switch to that.

        [1]: https://unicode-org.github.io/icu-docs/apidoc/dev/icu4c/uloc_8h.html#a69b148194cf57ac40d4bb15c5b905260
        [2]: https://unicode-org.atlassian.net/browse/ICU-21506

        * runtime/IntlLocale.cpp:
        (JSC::LocaleIDBuilder::initialize):
        (JSC::LocaleIDBuilder::toCanonical):
        * runtime/IntlObject.cpp:
        (JSC::localeIDBufferForLanguageTagWithNullTerminator):
        (JSC::canonicalizeLanguageTag):
        (JSC::canonicalizeLocaleIDWithoutNullTerminator):
        (JSC::localeIDBufferForLanguageTag): Deleted.
        * runtime/IntlObject.h:

2021-03-26  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Deprecate using DERIVED_SOURCES_DIR/FOWARDING_HEADERS_DIR directly
        https://bugs.webkit.org/show_bug.cgi?id=223763

        Reviewed by Michael Catanzaro.

        Remove any usages of DERIVED_SOURCES_DIR and FOWARDING_HEADERS_DIR.

        * CMakeLists.txt:
        * PlatformMac.cmake:

2021-03-26  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use new Apple ICU APIs to avoid C++ ICU API usage
        https://bugs.webkit.org/show_bug.cgi?id=223783
        <rdar://problem/75060240>

        Reviewed by Mark Lam.

        This patch adopts ICU 69's draft APIs to avoid using ICU C++ APIs in newer macOS build.
        AppleICU adopts these draft APIs so that we can use it even in ICU 68 if ICU is AppleICU.
        The API is ucal_getTimeZoneOffsetFromLocal, which is back-ported from ICU 69[1].
        The purpose of this API is that calculating timezone offset and dst offset from *local* time.

        [1]: https://github.com/unicode-org/icu/commit/53aa0505c5f95a8cebbd7b4421d474fd2a790b80

        * runtime/IntlDateTimeFormat.cpp:
        * runtime/JSDateMath.cpp:
        (JSC::OpaqueICUTimeZoneDeleter::operator()):
        (JSC::DateCache::calculateLocalTimeOffset):
        (JSC::DateCache::defaultTimeZone):
        (JSC::DateCache::timeZoneCacheSlow):
        * runtime/JSDateMath.h:

2021-03-26  Jessie Berlin  <jberlin@webkit.org>

        Update the BEFORE/SINCE, SYSTEM_VERSION_PREFIX, and MACOSX_DEPLOYMENT_TARGET flags
        https://bugs.webkit.org/show_bug.cgi?id=223779

        Reviewed by Tim Horton.

        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2021-03-25  Saam Barati  <sbarati@apple.com>

        validate untagArrayPtr
        https://bugs.webkit.org/show_bug.cgi?id=214953
        <rdar://problem/66391434>

        Reviewed by Mark Lam.

        This patch adds validation to untagArrayPtr along paths where we don't
        immediately store/load from the result.
        
        This patch also changes the removeArrayPtrTag macro assembler function to
        use a bitwise and instead of xpacd to strip the tag, because it's faster.

        * assembler/MacroAssemblerARM64E.h:
        (JSC::MacroAssemblerARM64E::untagArrayPtr):
        (JSC::MacroAssemblerARM64E::removeArrayPtrTag):
        * assembler/testmasm.cpp:
        (JSC::testCagePreservesPACFailureBit):
        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateWithGuard):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::cageTypedArrayStorage):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::untagArrayPtr):
        (JSC::FTL::DFG::LowerDFGToB3::caged):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::cageWithoutUntagging):
        (JSC::AssemblyHelpers::cageConditionallyAndUntag):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::cageWithoutUntagging): Deleted.
        (JSC::AssemblyHelpers::cageConditionally): Deleted.
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitIntTypedArrayPutByVal):
        (JSC::JIT::emitFloatTypedArrayPutByVal):
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::restoreWebAssemblyGlobalState):
        (JSC::Wasm::AirIRGenerator::addCallIndirect):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::restoreWebAssemblyGlobalState):
        (JSC::Wasm::B3IRGenerator::addCallIndirect):
        * wasm/WasmBinding.cpp:
        (JSC::Wasm::wasmToWasm):
        * wasm/js/JSToWasm.cpp:
        (JSC::Wasm::createJSToWasmWrapper):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):

2021-03-25  Jessie Berlin  <jberlin@webkit.org>

        Remove 10.13 DEPLOYMENT_TARGETs and SYSTEM_VERSION_PREFIXs
        https://bugs.webkit.org/show_bug.cgi?id=223765

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:

2021-03-25  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK][WPE] JSC crashes if a function expects a parameter but doesn't receive any
        https://bugs.webkit.org/show_bug.cgi?id=223646

        Reviewed by Adrian Perez de Castro.

        Handle the case of receiving fewer argumens than expected in function calls and constructors. We pass undefined
        for the expected arguments that are missing. We were not correctly handling the case of converting undefined and
        null values to JSCValue, so this patch fixes that case too.

        * API/glib/JSCCallbackFunction.cpp:
        (JSC::JSCCallbackFunction::call):
        (JSC::JSCCallbackFunction::construct):
        * API/glib/JSCContext.cpp:
        (jscContextJSValueToWrappedObject):
        (jscContextJSValueToGValue):

2021-03-24  Michael Saboff  <msaboff@apple.com>

        [YARR] Interpreter incorrectly matches non-BMP characters with multiple . w/dotAll flag
        https://bugs.webkit.org/show_bug.cgi?id=223666

        Reviewed by Mark Lam.

        In checkCharacterClassDontAdvanceInputForNonBMP(), we need to check for input.readChecked() returning -1
        and return that the character class didn't match.

        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::checkCharacterClassDontAdvanceInputForNonBMP):

2021-03-24  Saam Barati  <sbarati@apple.com>

        r271034 added code in constant folding phase that's unreachable given current invariants of our ICs and PutByIdStatus
        https://bugs.webkit.org/show_bug.cgi?id=223625

        Reviewed by Yusuke Suzuki.

        The code was doing a lot of wrong things by making bad assumptions about the
        invariants of PutByIdVariants. Replace PutByIdVariants never have object
        property condition sets, since we always replace on the self object (and don't
        look at the prototype chain). This patch clears up the code to make it
        clearer what the invariants are.
        
        With respect to the original fix about not emitting a PutByOffset for a
        Replace on a Structure that has an unfired replacement watchpoint set,
        that was already handled by the PutByIdStatus::computeFor variant we're
        calling inside of constant folding. It will return TakesSlowPathif it
        encounters a Replace where the Structure still has an unfired watchpoint.

        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::tryFoldAsPutByOffset):

2021-03-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Rope string equal operation should first check length
        https://bugs.webkit.org/show_bug.cgi?id=223678

        Reviewed by Mark Lam.

        This can avoid eagerly resolving rope strings if it is not necessary.

        * runtime/JSString.cpp:
        (JSC::JSString::equalSlowCase const):

2021-03-23  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Functor for WeakGCMap::ensureValue must not invoke GC
        https://bugs.webkit.org/show_bug.cgi?id=223629
        <rdar://problem/75619217>

        Reviewed by Mark Lam.

        The functor for WeakGCMap::ensureValue must not invoke GC. GC can prune entries in WeakGCMap.
        So we can modify underlying HashMap while we are just touching it for HashMap::ensure. This
        can corrupt HashMap. To ensure this invariant, we put DisallowGC for WeakGCMap::ensureValue.
        So we cannot invoke GC in the functor of that function (otherwise, assertion hits).

        And we use DeferGC in createCustomGetterFunction / createCustomSetterFunction to avoid invoking
        GC in WeakGCMap::ensureValue. This defers GC invocation until this DeferGC scope is destroyed,
        and ensures that functor invoked by WeakGCMap::ensureValue will not cause GC.

        * runtime/JSObject.cpp:
        (JSC::createCustomGetterFunction):
        (JSC::createCustomSetterFunction):
        (JSC::JSObject::getOwnPropertyDescriptor):
        * runtime/WeakGCMap.h:

2021-03-23  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use ErrorInstance for AggregateError
        https://bugs.webkit.org/show_bug.cgi?id=223626

        Reviewed by Darin Adler.

        From r274609, WebAssembly errors start using normal ErrorInstance. We apply the same thing to AggregateError too.
        This patch removes AggregateError class, and just generating ErrorInstance.

        * runtime/AggregateError.cpp:
        (JSC::createAggregateError):
        (JSC::AggregateError::AggregateError): Deleted.
        (JSC::AggregateError::finishCreation): Deleted.
        (JSC::AggregateError::create): Deleted.
        * runtime/AggregateError.h:
        (): Deleted.
        * runtime/AggregateErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::initializeAggregateErrorConstructor):

2021-03-23  Robin Morisset  <rmorisset@apple.com>

        Object.freeze(this) at the global scope can lose a reference to a WatchpointSet
        https://bugs.webkit.org/show_bug.cgi?id=223608

        Reviewed by Yusuke Suzuki.

        When freezing the global object, we should make a proper copy of symbol table entries, to keep any outstanding reference to the WatchpointSet.
        We cannot use pack(), because it does not support FatEntries.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::defineOwnProperty):
        * runtime/JSSymbolTableObject.h:
        (JSC::symbolTableGet):
        * runtime/SymbolTable.h:
        (JSC::SymbolTableEntry::setReadOnly):

2021-03-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSCustomGetterFunction/JSCustomSetterFunction should use Identifier for their field
        https://bugs.webkit.org/show_bug.cgi?id=223588

        Reviewed by Mark Lam and Saam Barati.

        PropertyName is the holder for passing it as an argument, and it does not ref/deref underlying UniqueStringImpl.
        We should use Identifier to keep it strongly ref-ed in JSCustomGetterFunction/JSCustomSetterFunction.
        And we should make JSCustomGetterFunction/JSCustomSetterFunction destructible objects since Identifier needs to
        deref underlying UniqueStringImpl when destroying these functions.

        * runtime/JSCustomGetterFunction.cpp:
        (JSC::JSCustomGetterFunction::JSCustomGetterFunction):
        (JSC::JSCustomGetterFunction::destroy):
        * runtime/JSCustomGetterFunction.h:
        * runtime/JSCustomSetterFunction.cpp:
        (JSC::JSCustomSetterFunction::JSCustomSetterFunction):
        (JSC::JSCustomSetterFunction::destroy):
        * runtime/JSCustomSetterFunction.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2021-03-22  Saam Barati  <sbarati@apple.com>

        LiteralParser shouldn't make error messages of length ~2^31
        https://bugs.webkit.org/show_bug.cgi?id=223483
        <rdar://75572255>

        Reviewed by Robin Morisset.

        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser<CharType>::parse):

2021-03-22  Michael Saboff  <msaboff@apple.com>

        [YARR] Interpreter incorrectly matches non-BMP characters with multiple .
        https://bugs.webkit.org/show_bug.cgi?id=223498

        Reviewed by Yusuke Suzuki.

        We need to check that we read an actual character before seeing if it is part of a character class.
        In the case where we are checking that a character is not in a character class, like .,
        the failed to read result from input.readChecked(), -1, is not part of the newline character class.
        This will allow regular expressions that require more than the number of characters in a string
        to match.

        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::checkCharacterClass):

2021-03-22  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed, fix Mac and non-unified JSCOnly builds
        https://bugs.webkit.org/show_bug.cgi?id=223546

        * wasm/WasmGlobal.h:
        * wasm/WasmTable.h:
        * wasm/js/JSWebAssemblyCompileError.cpp:
        * wasm/js/JSWebAssemblyLinkError.cpp:
        * wasm/js/JSWebAssemblyRuntimeError.cpp:
        Add missing includes for non-unified JSC build.

2021-03-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Intl.Locale should not assume is8Bit
        https://bugs.webkit.org/show_bug.cgi?id=223553

        Reviewed by Ross Kirsling.

        is8Bit or not is not guaranteed if it is an user-input. For example, "test日本語".substring(0, 3) should be non 8Bit string.
        Intl.Locale has several places that assumed that input should be 8Bit if they are ASCII. This patch fixes it.

        * runtime/IntlLocale.cpp:
        (JSC::LocaleIDBuilder::overrideLanguageScriptRegion):
        (JSC::LocaleIDBuilder::setKeywordValue):

2021-03-22  Sam Weinig  <weinig@apple.com>

        Use the PropertyName parameter passed to custom getters/setters rather than a redundant const char* in DOM attribute prologues
        https://bugs.webkit.org/show_bug.cgi?id=223542

        Reviewed by Alexey Shvayka.

        Add throwVMDOMAttributeSetterTypeError to match existing throwVMDOMAttributeGetterTypeError and move
        additional helpers used by WebCore here to avoid redundant work.

        Removes some now unused functions.

        * runtime/Error.cpp:
        (JSC::createGetterTypeError):
        (JSC::makeDOMAttributeGetterTypeErrorMessage):
        (JSC::makeDOMAttributeSetterTypeErrorMessage):
        (JSC::throwDOMAttributeGetterTypeError):
        (JSC::throwDOMAttributeSetterTypeError):
        (JSC::throwGetterTypeError): Deleted.
        * runtime/Error.h:
        (JSC::throwVMRangeError):
        (JSC::throwVMDOMAttributeSetterTypeError):
        (JSC::throwVMGetterTypeError): Deleted.

2021-03-22  Tyler Wilcock  <twilco.o@protonmail.com>

        AppleWin can't start due to "Failed to determine path to AAS directory." because iTunes changed the registry key
        https://bugs.webkit.org/show_bug.cgi?id=219015

        Reviewed by Alex Christensen.

        It appears that iTunes no longer sets the Apple Application Support
        registry entry.  Fall back to trying to find the iTunes installation
        directory if the AAS directory is not present.

        * shell/DLLLauncherMain.cpp:
        (iTunesDirectory): Added.
        (modifyPath):

2021-03-19  Darin Adler  <darin@apple.com>

        [Cocoa] Make it possible to release a WKWebView on a non-main thread without a crash due to WKScriptMessage race
        https://bugs.webkit.org/show_bug.cgi?id=222336

        Reviewed by Chris Dumez.

        * API/ObjcRuntimeExtras.h: Removed declarations of objc_initWeak and objc_destroyWeak, since
        these are already in <wtf/spi/cocoa/objcSPI.h>.

2021-03-19  Mark Lam  <mark.lam@apple.com>

        BrandedStructure should keep its members alive.
        https://bugs.webkit.org/show_bug.cgi?id=223495
        rdar://75565765

        Reviewed by Saam Barati.

        Normally, each type of JSCell would have its own structure (and therefore, its own
        ClassInfo, MethodTable, etc), which would have handled visiting m_parentBrand.
        Similarly, it would have its own destructor, which would deref m_brand.

        However, the design of BrandedStructure is not like other JSCells.  As present,
        we have chosen to go with having BrandedStructure look exactly like a regular
        Structure, except that its isBrandedStructure flag is set to true.

        This design has advantages because we do checks all over the system for whether
        a cell is a Structure by simply comparing its structureID to structureStructure's
        structureID.  By virtue of BrandedStructure having the same structure as Structure,
        none of this code need to change.

        The downside is that we need to enhance Structure's methods to check if it is
        actually working on an instance of BrandedStructure, and do some additional work.

        This patch fixes 2 bugs:

        1. m_parentBrand was not visited by visitChildren().

           Structure::visitChildrenImpl() now calls BrandedStructure::visitAdditionalChildren()
           to handle this.

        2. m_brand needs to be ref'ed.

           In Structure::setBrandTransition(), if the BrandedStructure is a dictionary,
           then its m_transitionPropertyName will be cleared.  m_transitionPropertyName
           was the only means by which the UniqueStringImpl pointed to by m_brand was
           ref'ed.  The fix is to make m_brand a RefPtr.

           Hence, it follows that we also need to deref m_brand on destruction.
           Structure's destructor now calls BrandedStructure::destruct() to handle this.

        * runtime/BrandedStructure.h:
        * runtime/Structure.cpp:
        (JSC::Structure::~Structure):
        (JSC::Structure::visitChildrenImpl):

2021-03-19  Sam Weinig  <weinig@apple.com>

        Add PropertyName parameter to custom setters to allow shared implementations to do late name lookup
        https://bugs.webkit.org/show_bug.cgi?id=223413

        Reviewed by Alexey Shvayka.

        Make custom setters match custom getters by adding a PropertyName parameter.
        
        This will be used by the CSSStyleDeclaration bindings to avoid > 1000 copies
        of the same getter/setter code, which will instead be able to differentiate
        using the name.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateImpl):
        * jsc.cpp:
        (JSC_DEFINE_CUSTOM_SETTER):
        * runtime/CustomGetterSetter.cpp:
        (JSC::callCustomSetter):
        * runtime/CustomGetterSetter.h:
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::putToPrimitive):
        * runtime/JSCustomSetterFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSCustomSetterFunction::JSCustomSetterFunction):
        (JSC::JSCustomSetterFunction::create):
        * runtime/JSCustomSetterFunction.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::putInlineSlow):
        * runtime/Lookup.h:
        (JSC::putEntry):
        * runtime/PropertySlot.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::JSC_DEFINE_CUSTOM_SETTER):
        * runtime/RegExpObject.cpp:
        (JSC::JSC_DEFINE_CUSTOM_SETTER):
        * tools/JSDollarVM.cpp:

== Rolled over to ChangeLog-2021-03-18 ==
