[prev in list] [next in list] [prev in thread] [next in thread] 

List:       webkit-changes
Subject:    [webkit-changes] [259320] trunk/Source/JavaScriptCore
From:       ysuzuki () apple ! com
Date:       2020-03-31 23:41:50
Message-ID: 20200331234150.D016510051CD () svn ! webkit ! org
[Download RAW message or body]

[Attachment #2 (text/html)]

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[259320] trunk/Source/JavaScriptCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: \
verdana,arial,helvetica,sans-serif; font-size: 10pt;  } #msg dl a { font-weight: \
bold} #msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: \
bold; } #msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: \
6px; } #logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em \
0; } #logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg \
h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; } \
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; \
} #logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: \
-1.5em; padding-left: 1.5em; } #logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em \
1em 0 1em; background: white;} #logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid \
#fa0; border-bottom: 1px solid #fa0; background: #fff; } #logmsg table th { \
text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted \
#fa0; } #logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: \
0.2em 0.5em; } #logmsg table thead th { text-align: center; border-bottom: 1px solid \
#fa0; } #logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: \
6px; } #patch { width: 100%; }
#patch h4 {font-family: \
verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
 #patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, \
#patch .copfile {border:1px solid #ccc;margin:10px 0;} #patch ins \
{background:#dfd;text-decoration:none;display:block;padding:0 10px;} #patch del \
{background:#fdd;text-decoration:none;display:block;padding:0 10px;} #patch .lines, \
                .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a \
href="http://trac.webkit.org/projects/webkit/changeset/259320">259320</a></dd> \
<dt>Author</dt> <dd>ysuzuki@apple.com</dd> <dt>Date</dt> <dd>2020-03-31 16:41:50 \
-0700 (Tue, 31 Mar 2020)</dd> </dl>

<h3>Log Message</h3>
<pre>[JSC] Introduce UCPUStrictInt32 for result type of DFG operations
https://bugs.webkit.org/show_bug.cgi?id=209832

Reviewed by Saam Barati.

Let's introduce UCPUStrictInt32 to DFG operations to offload StrictInt32 code into \
operations C++ code. UCPUStrictInt32 is the same size to UCPURegister, and it is used \
for StrictInt32, which requires upper 32-bits are zeroed.

* assembler/CPU.h:
* dfg/DFGOperations.cpp:
* dfg/DFGOperations.h:
* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
(JSC::DFG::SpeculativeJIT::compileValueToInt32):
(JSC::DFG::SpeculativeJIT::compileUInt32ToNumber):
(JSC::DFG::SpeculativeJIT::compileDoubleAsInt32):
(JSC::DFG::SpeculativeJIT::setIntTypedArrayLoadResult):
(JSC::DFG::SpeculativeJIT::compileBitwiseNot):
(JSC::DFG::SpeculativeJIT::compileBitwiseOp):
(JSC::DFG::SpeculativeJIT::compileShiftOp):
(JSC::DFG::SpeculativeJIT::compileArithAdd):
(JSC::DFG::SpeculativeJIT::compileArithAbs):
(JSC::DFG::SpeculativeJIT::compileArithClz32):
(JSC::DFG::SpeculativeJIT::compileArithSub):
(JSC::DFG::SpeculativeJIT::compileArithNegate):
(JSC::DFG::SpeculativeJIT::compileArithMul):
(JSC::DFG::SpeculativeJIT::compileArithDiv):
(JSC::DFG::SpeculativeJIT::compileArithMod):
(JSC::DFG::SpeculativeJIT::compileArithRounding):
(JSC::DFG::SpeculativeJIT::compileArithMinMax):
(JSC::DFG::SpeculativeJIT::compileGetTypedArrayByteOffset):
(JSC::DFG::SpeculativeJIT::compileGetArrayLength):
(JSC::DFG::SpeculativeJIT::compileVarargsLength):
(JSC::DFG::SpeculativeJIT::compileGetRestLength):
(JSC::DFG::SpeculativeJIT::compileArrayIndexOf):
(JSC::DFG::SpeculativeJIT::compileGetEnumerableLength):
(JSC::DFG::SpeculativeJIT::compileGetArgumentCountIncludingThis):
* dfg/DFGSpeculativeJIT.h:
(JSC::DFG::SpeculativeJIT::strictInt32Result):
(JSC::DFG::SpeculativeJIT::int32Result): Deleted.
* dfg/DFGSpeculativeJIT32_64.cpp:
(JSC::DFG::SpeculativeJIT::compile):
* dfg/DFGSpeculativeJIT64.cpp:
(JSC::DFG::SpeculativeJIT::compile):
(JSC::DFG::SpeculativeJIT::compileStringCodePointAt):
* ftl/FTLLowerDFGToB3.cpp:
(JSC::FTL::DFG::LowerDFGToB3::compileArithClz32):
(JSC::FTL::DFG::LowerDFGToB3::compileArrayIndexOf):
(JSC::FTL::DFG::LowerDFGToB3::compileVarargsLength):
(JSC::FTL::DFG::LowerDFGToB3::mapHashString):
(JSC::FTL::DFG::LowerDFGToB3::compileMapHash):
(JSC::FTL::DFG::LowerDFGToB3::compileHasOwnProperty):
(JSC::FTL::DFG::LowerDFGToB3::compileInstanceOfCustom):
(JSC::FTL::DFG::LowerDFGToB3::doubleToInt32):
(JSC::FTL::DFG::LowerDFGToB3::sensibleDoubleToInt32):
* ftl/FTLOperations.cpp:
(JSC::FTL::operationSwitchStringAndGetBranchOffset):
(JSC::FTL::operationTypeOfObjectAsTypeofType):
* ftl/FTLOperations.h:
* jit/JITOperations.cpp:
* jit/JITOperations.h:
* runtime/MathCommon.cpp:
(JSC::operationToInt32):
(JSC::operationToInt32SensibleSlow):
* runtime/MathCommon.h:
(JSC::toUCPUStrictInt32):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
 <li><a href="#trunkSourceJavaScriptCoreassemblerCPUh">trunk/Source/JavaScriptCore/assembler/CPU.h</a></li>
 <li><a href="#trunkSourceJavaScriptCoredfgDFGOperationscpp">trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp</a></li>
 <li><a href="#trunkSourceJavaScriptCoredfgDFGOperationsh">trunk/Source/JavaScriptCore/dfg/DFGOperations.h</a></li>
 <li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJITcpp">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp</a></li>
 <li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJITh">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h</a></li>
 <li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJIT32_64cpp">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp</a></li>
 <li><a href="#trunkSourceJavaScriptCoredfgDFGSpeculativeJIT64cpp">trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp</a></li>
 <li><a href="#trunkSourceJavaScriptCoreftlFTLLowerDFGToB3cpp">trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp</a></li>
 <li><a href="#trunkSourceJavaScriptCoreftlFTLOperationscpp">trunk/Source/JavaScriptCore/ftl/FTLOperations.cpp</a></li>
 <li><a href="#trunkSourceJavaScriptCoreftlFTLOperationsh">trunk/Source/JavaScriptCore/ftl/FTLOperations.h</a></li>
 <li><a href="#trunkSourceJavaScriptCorejitJITOperationscpp">trunk/Source/JavaScriptCore/jit/JITOperations.cpp</a></li>
 <li><a href="#trunkSourceJavaScriptCorejitJITOperationsh">trunk/Source/JavaScriptCore/jit/JITOperations.h</a></li>
 <li><a href="#trunkSourceJavaScriptCoreruntimeMathCommoncpp">trunk/Source/JavaScriptCore/runtime/MathCommon.cpp</a></li>
 <li><a href="#trunkSourceJavaScriptCoreruntimeMathCommonh">trunk/Source/JavaScriptCore/runtime/MathCommon.h</a></li>
 </ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (259319 => \
259320)</h4> <pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog	2020-03-31 23:03:29 UTC \
                (rev 259319)
+++ trunk/Source/JavaScriptCore/ChangeLog	2020-03-31 23:41:50 UTC (rev 259320)
</span><span class="lines">@@ -1,3 +1,73 @@
</span><ins>+2020-03-31  Yusuke Suzuki  &lt;ysuzuki@apple.com&gt;
+
+        [JSC] Introduce UCPUStrictInt32 for result type of DFG operations
+        https://bugs.webkit.org/show_bug.cgi?id=209832
+
+        Reviewed by Saam Barati.
+
+        Let's introduce UCPUStrictInt32 to DFG operations to offload StrictInt32 \
code into operations C++ code. +        UCPUStrictInt32 is the same size to \
UCPURegister, and it is used for StrictInt32, which requires upper 32-bits +        \
are zeroed. +
+        * assembler/CPU.h:
+        * dfg/DFGOperations.cpp:
+        * dfg/DFGOperations.h:
+        * dfg/DFGSpeculativeJIT.cpp:
+        (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
+        (JSC::DFG::SpeculativeJIT::compileValueToInt32):
+        (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber):
+        (JSC::DFG::SpeculativeJIT::compileDoubleAsInt32):
+        (JSC::DFG::SpeculativeJIT::setIntTypedArrayLoadResult):
+        (JSC::DFG::SpeculativeJIT::compileBitwiseNot):
+        (JSC::DFG::SpeculativeJIT::compileBitwiseOp):
+        (JSC::DFG::SpeculativeJIT::compileShiftOp):
+        (JSC::DFG::SpeculativeJIT::compileArithAdd):
+        (JSC::DFG::SpeculativeJIT::compileArithAbs):
+        (JSC::DFG::SpeculativeJIT::compileArithClz32):
+        (JSC::DFG::SpeculativeJIT::compileArithSub):
+        (JSC::DFG::SpeculativeJIT::compileArithNegate):
+        (JSC::DFG::SpeculativeJIT::compileArithMul):
+        (JSC::DFG::SpeculativeJIT::compileArithDiv):
+        (JSC::DFG::SpeculativeJIT::compileArithMod):
+        (JSC::DFG::SpeculativeJIT::compileArithRounding):
+        (JSC::DFG::SpeculativeJIT::compileArithMinMax):
+        (JSC::DFG::SpeculativeJIT::compileGetTypedArrayByteOffset):
+        (JSC::DFG::SpeculativeJIT::compileGetArrayLength):
+        (JSC::DFG::SpeculativeJIT::compileVarargsLength):
+        (JSC::DFG::SpeculativeJIT::compileGetRestLength):
+        (JSC::DFG::SpeculativeJIT::compileArrayIndexOf):
+        (JSC::DFG::SpeculativeJIT::compileGetEnumerableLength):
+        (JSC::DFG::SpeculativeJIT::compileGetArgumentCountIncludingThis):
+        * dfg/DFGSpeculativeJIT.h:
+        (JSC::DFG::SpeculativeJIT::strictInt32Result):
+        (JSC::DFG::SpeculativeJIT::int32Result): Deleted.
+        * dfg/DFGSpeculativeJIT32_64.cpp:
+        (JSC::DFG::SpeculativeJIT::compile):
+        * dfg/DFGSpeculativeJIT64.cpp:
+        (JSC::DFG::SpeculativeJIT::compile):
+        (JSC::DFG::SpeculativeJIT::compileStringCodePointAt):
+        * ftl/FTLLowerDFGToB3.cpp:
+        (JSC::FTL::DFG::LowerDFGToB3::compileArithClz32):
+        (JSC::FTL::DFG::LowerDFGToB3::compileArrayIndexOf):
+        (JSC::FTL::DFG::LowerDFGToB3::compileVarargsLength):
+        (JSC::FTL::DFG::LowerDFGToB3::mapHashString):
+        (JSC::FTL::DFG::LowerDFGToB3::compileMapHash):
+        (JSC::FTL::DFG::LowerDFGToB3::compileHasOwnProperty):
+        (JSC::FTL::DFG::LowerDFGToB3::compileInstanceOfCustom):
+        (JSC::FTL::DFG::LowerDFGToB3::doubleToInt32):
+        (JSC::FTL::DFG::LowerDFGToB3::sensibleDoubleToInt32):
+        * ftl/FTLOperations.cpp:
+        (JSC::FTL::operationSwitchStringAndGetBranchOffset):
+        (JSC::FTL::operationTypeOfObjectAsTypeofType):
+        * ftl/FTLOperations.h:
+        * jit/JITOperations.cpp:
+        * jit/JITOperations.h:
+        * runtime/MathCommon.cpp:
+        (JSC::operationToInt32):
+        (JSC::operationToInt32SensibleSlow):
+        * runtime/MathCommon.h:
+        (JSC::toUCPUStrictInt32):
+
</ins><span class="cx"> 2020-03-31  Ross Kirsling  &lt;ross.kirsling@sony.com&gt;
</span><span class="cx"> 
</span><span class="cx">         REGRESSION: ASSERTION FAILED: regExpObjectNode in \
JSC::DFG::StrengthReductionPhase::handleNode </span></span></pre></div>
<a id="trunkSourceJavaScriptCoreassemblerCPUh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/assembler/CPU.h \
(259319 => 259320)</h4> <pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/assembler/CPU.h	2020-03-31 \
                23:03:29 UTC (rev 259319)
+++ trunk/Source/JavaScriptCore/assembler/CPU.h	2020-03-31 23:41:50 UTC (rev 259320)
</span><span class="lines">@@ -38,6 +38,8 @@
</span><span class="cx"> using UCPURegister = uint32_t;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+using UCPUStrictInt32 = UCPURegister;
+
</ins><span class="cx"> constexpr bool isARMv7IDIVSupported()
</span><span class="cx"> {
</span><span class="cx"> #if HAVE(ARM_IDIV_INSTRUCTIONS)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGOperationscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp \
(259319 => 259320)</h4> <pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp	2020-03-31 \
                23:03:29 UTC (rev 259319)
+++ trunk/Source/JavaScriptCore/dfg/DFGOperations.cpp	2020-03-31 23:41:50 UTC (rev \
259320) </span><span class="lines">@@ -699,7 +699,7 @@
</span><span class="cx">     return fabs(a);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-uint32_t JIT_OPERATION operationArithClz32(JSGlobalObject* globalObject, \
EncodedJSValue encodedOp1) </del><ins>+UCPUStrictInt32 JIT_OPERATION \
operationArithClz32(JSGlobalObject* globalObject, EncodedJSValue encodedOp1) \
</ins><span class="cx"> { </span><span class="cx">     VM&amp; vm = \
globalObject-&gt;vm(); </span><span class="cx">     CallFrame* callFrame = \
DECLARE_CALL_FRAME(vm); </span><span class="lines">@@ -708,8 +708,8 @@
</span><span class="cx"> 
</span><span class="cx">     JSValue op1 = JSValue::decode(encodedOp1);
</span><span class="cx">     uint32_t value = op1.toUInt32(globalObject);
</span><del>-    RETURN_IF_EXCEPTION(scope, 0);
-    return clz(value);
</del><ins>+    RETURN_IF_EXCEPTION(scope, { });
+    return toUCPUStrictInt32(clz(value));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> double JIT_OPERATION operationArithFRound(JSGlobalObject* \
globalObject, EncodedJSValue encodedOp1) </span><span class="lines">@@ -2293,21 \
+2293,6 @@ </span><span class="cx">     return vm.smallStrings.objectString();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-int32_t JIT_OPERATION operationTypeOfObjectAsTypeofType(JSGlobalObject* \
                globalObject, JSCell* object)
-{
-    VM&amp; vm = globalObject-&gt;vm();
-    CallFrame* callFrame = DECLARE_CALL_FRAME(vm);
-    JITOperationPrologueCallFrameTracer tracer(vm, callFrame);
-
-    ASSERT(jsDynamicCast&lt;JSObject*&gt;(vm, object));
-    
-    if (object-&gt;structure(vm)-&gt;masqueradesAsUndefined(globalObject))
-        return static_cast&lt;int32_t&gt;(TypeofType::Undefined);
-    if (object-&gt;isFunction(vm))
-        return static_cast&lt;int32_t&gt;(TypeofType::Function);
-    return static_cast&lt;int32_t&gt;(TypeofType::Object);
-}
-
</del><span class="cx"> char* JIT_OPERATION \
operationAllocateSimplePropertyStorageWithInitialCapacity(VM* vmPointer) </span><span \
class="cx"> { </span><span class="cx">     VM&amp; vm = *vmPointer;
</span><span class="lines">@@ -2790,20 +2775,6 @@
</span><span class="cx">     return \
callFrame-&gt;codeBlock()-&gt;stringSwitchJumpTable(tableIndex).ctiForValue(strImpl).executableAddress&lt;char*&gt;();
 </span><span class="cx"> }
</span><span class="cx"> 
</span><del>-int32_t JIT_OPERATION \
operationSwitchStringAndGetBranchOffset(JSGlobalObject* globalObject, size_t \
                tableIndex, JSString* string)
-{
-    VM&amp; vm = globalObject-&gt;vm();
-    CallFrame* callFrame = DECLARE_CALL_FRAME(vm);
-    JITOperationPrologueCallFrameTracer tracer(vm, callFrame);
-    auto throwScope = DECLARE_THROW_SCOPE(vm);
-
-    StringImpl* strImpl = string-&gt;value(globalObject).impl();
-
-    RETURN_IF_EXCEPTION(throwScope, 0);
-
-    return callFrame-&gt;codeBlock()-&gt;stringSwitchJumpTable(tableIndex).offsetForValue(strImpl, \
                std::numeric_limits&lt;int32_t&gt;::min());
-}
-
</del><span class="cx"> uintptr_t JIT_OPERATION \
operationCompareStringImplLess(StringImpl* a, StringImpl* b) </span><span class="cx"> \
{ </span><span class="cx">     return codePointCompare(a, b) &lt; 0;
</span><span class="lines">@@ -2878,7 +2849,7 @@
</span><span class="cx">     throwStackOverflowError(globalObject, scope);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-int32_t JIT_OPERATION operationSizeOfVarargs(JSGlobalObject* \
globalObject, EncodedJSValue encodedArguments, uint32_t firstVarArgOffset) \
</del><ins>+UCPUStrictInt32 JIT_OPERATION operationSizeOfVarargs(JSGlobalObject* \
globalObject, EncodedJSValue encodedArguments, uint32_t firstVarArgOffset) \
</ins><span class="cx"> { </span><span class="cx">     VM&amp; vm = \
globalObject-&gt;vm(); </span><span class="cx">     CallFrame* callFrame = \
DECLARE_CALL_FRAME(vm); </span><span class="lines">@@ -2885,10 +2856,10 @@
</span><span class="cx">     JITOperationPrologueCallFrameTracer tracer(vm, \
callFrame); </span><span class="cx">     JSValue arguments = \
JSValue::decode(encodedArguments); </span><span class="cx">     
</span><del>-    return sizeOfVarargs(globalObject, arguments, firstVarArgOffset);
</del><ins>+    return toUCPUStrictInt32(sizeOfVarargs(globalObject, arguments, \
firstVarArgOffset)); </ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-int32_t JIT_OPERATION operationHasOwnProperty(JSGlobalObject* \
globalObject, JSObject* thisObject, EncodedJSValue encodedKey) </del><ins>+size_t \
JIT_OPERATION operationHasOwnProperty(JSGlobalObject* globalObject, JSObject* \
thisObject, EncodedJSValue encodedKey) </ins><span class="cx"> {
</span><span class="cx">     VM&amp; vm = globalObject-&gt;vm();
</span><span class="cx">     CallFrame* callFrame = DECLARE_CALL_FRAME(vm);
</span><span class="lines">@@ -2909,7 +2880,7 @@
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-int32_t JIT_OPERATION operationNumberIsInteger(JSGlobalObject* \
globalObject, EncodedJSValue value) </del><ins>+size_t JIT_OPERATION \
operationNumberIsInteger(JSGlobalObject* globalObject, EncodedJSValue value) \
</ins><span class="cx"> { </span><span class="cx">     VM&amp; vm = \
globalObject-&gt;vm(); </span><span class="cx">     CallFrame* callFrame = \
DECLARE_CALL_FRAME(vm); </span><span class="lines">@@ -2917,7 +2888,7 @@
</span><span class="cx">     return \
NumberConstructor::isIntegerImpl(JSValue::decode(value)); </span><span class="cx"> }
</span><span class="cx"> 
</span><del>-int32_t JIT_OPERATION operationArrayIndexOfString(JSGlobalObject* \
globalObject, Butterfly* butterfly, JSString* searchElement, int32_t index) \
</del><ins>+UCPUStrictInt32 JIT_OPERATION operationArrayIndexOfString(JSGlobalObject* \
globalObject, Butterfly* butterfly, JSString* searchElement, int32_t index) \
</ins><span class="cx"> { </span><span class="cx">     VM&amp; vm = \
globalObject-&gt;vm(); </span><span class="cx">     CallFrame* callFrame = \
DECLARE_CALL_FRAME(vm); </span><span class="lines">@@ -2932,17 +2903,17 @@
</span><span class="cx">             continue;
</span><span class="cx">         auto* string = asString(value);
</span><span class="cx">         if (string == searchElement)
</span><del>-            return index;
</del><ins>+            return toUCPUStrictInt32(index);
</ins><span class="cx">         if (string-&gt;equal(globalObject, searchElement)) {
</span><span class="cx">             scope.assertNoException();
</span><del>-            return index;
</del><ins>+            return toUCPUStrictInt32(index);
</ins><span class="cx">         }
</span><span class="cx">         RETURN_IF_EXCEPTION(scope, { });
</span><span class="cx">     }
</span><del>-    return -1;
</del><ins>+    return toUCPUStrictInt32(-1);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-int32_t JIT_OPERATION \
operationArrayIndexOfValueInt32OrContiguous(JSGlobalObject* globalObject, Butterfly* \
butterfly, EncodedJSValue encodedValue, int32_t index) </del><ins>+UCPUStrictInt32 \
JIT_OPERATION operationArrayIndexOfValueInt32OrContiguous(JSGlobalObject* \
globalObject, Butterfly* butterfly, EncodedJSValue encodedValue, int32_t index) \
</ins><span class="cx"> { </span><span class="cx">     VM&amp; vm = \
globalObject-&gt;vm(); </span><span class="cx">     CallFrame* callFrame = \
DECLARE_CALL_FRAME(vm); </span><span class="lines">@@ -2960,12 +2931,12 @@
</span><span class="cx">         bool isEqual = JSValue::strictEqual(globalObject, \
searchElement, value); </span><span class="cx">         RETURN_IF_EXCEPTION(scope, { \
}); </span><span class="cx">         if (isEqual)
</span><del>-            return index;
</del><ins>+            return toUCPUStrictInt32(index);
</ins><span class="cx">     }
</span><del>-    return -1;
</del><ins>+    return toUCPUStrictInt32(-1);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-int32_t JIT_OPERATION operationArrayIndexOfValueDouble(JSGlobalObject* \
globalObject, Butterfly* butterfly, EncodedJSValue encodedValue, int32_t index) \
</del><ins>+UCPUStrictInt32 JIT_OPERATION \
operationArrayIndexOfValueDouble(JSGlobalObject* globalObject, Butterfly* butterfly, \
EncodedJSValue encodedValue, int32_t index) </ins><span class="cx"> {
</span><span class="cx">     VM&amp; vm = globalObject-&gt;vm();
</span><span class="cx">     CallFrame* callFrame = DECLARE_CALL_FRAME(vm);
</span><span class="lines">@@ -2974,7 +2945,7 @@
</span><span class="cx">     JSValue searchElement = JSValue::decode(encodedValue);
</span><span class="cx"> 
</span><span class="cx">     if (!searchElement.isNumber())
</span><del>-        return -1;
</del><ins>+        return toUCPUStrictInt32(-1);
</ins><span class="cx">     double number = searchElement.asNumber();
</span><span class="cx"> 
</span><span class="cx">     int32_t length = butterfly-&gt;publicLength();
</span><span class="lines">@@ -2982,9 +2953,9 @@
</span><span class="cx">     for (; index &lt; length; ++index) {
</span><span class="cx">         // This comparison ignores NaN.
</span><span class="cx">         if (data[index] == number)
</span><del>-            return index;
</del><ins>+            return toUCPUStrictInt32(index);
</ins><span class="cx">     }
</span><del>-    return -1;
</del><ins>+    return toUCPUStrictInt32(-1);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void JIT_OPERATION operationLoadVarargs(JSGlobalObject* \
globalObject, int32_t firstElementDest, EncodedJSValue encodedArguments, uint32_t \
offset, uint32_t lengthIncludingThis, uint32_t mandatoryMinimum) </span><span \
class="lines">@@ -3330,13 +3301,13 @@ </span><span class="cx">     return \
putDynamicVar(globalObject, vm, scope, value, impl, getPutInfoBits, isStrictMode); \
</span><span class="cx"> } </span><span class="cx"> 
</span><del>-int32_t JIT_OPERATION operationMapHash(JSGlobalObject* globalObject, \
EncodedJSValue input) </del><ins>+UCPUStrictInt32 JIT_OPERATION \
operationMapHash(JSGlobalObject* globalObject, EncodedJSValue input) </ins><span \
class="cx"> { </span><span class="cx">     VM&amp; vm = globalObject-&gt;vm();
</span><span class="cx">     CallFrame* callFrame = DECLARE_CALL_FRAME(vm);
</span><span class="cx">     JITOperationPrologueCallFrameTracer tracer(vm, \
callFrame); </span><span class="cx"> 
</span><del>-    return jsMapHash(globalObject, vm, JSValue::decode(input));
</del><ins>+    return toUCPUStrictInt32(jsMapHash(globalObject, vm, \
JSValue::decode(input))); </ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> JSCell* JIT_OPERATION \
operationJSMapFindBucket(JSGlobalObject* globalObject, JSCell* map, EncodedJSValue \
key, int32_t hash) </span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGOperationsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGOperations.h \
(259319 => 259320)</h4> <pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGOperations.h	2020-03-31 \
                23:03:29 UTC (rev 259319)
+++ trunk/Source/JavaScriptCore/dfg/DFGOperations.h	2020-03-31 23:41:50 UTC (rev \
259320) </span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx"> EncodedJSValue JIT_OPERATION operationInc(JSGlobalObject*, \
EncodedJSValue encodedOp1) WTF_INTERNAL; </span><span class="cx"> EncodedJSValue \
JIT_OPERATION operationDec(JSGlobalObject*, EncodedJSValue encodedOp1) WTF_INTERNAL; \
</span><span class="cx"> double JIT_OPERATION operationArithAbs(JSGlobalObject*, \
EncodedJSValue encodedOp1) WTF_INTERNAL; </span><del>-uint32_t JIT_OPERATION \
operationArithClz32(JSGlobalObject*, EncodedJSValue encodedOp1) WTF_INTERNAL; \
</del><ins>+UCPUStrictInt32 JIT_OPERATION operationArithClz32(JSGlobalObject*, \
EncodedJSValue encodedOp1) WTF_INTERNAL; </ins><span class="cx"> double JIT_OPERATION \
operationArithFRound(JSGlobalObject*, EncodedJSValue encodedOp1) WTF_INTERNAL; \
</span><span class="cx"> double JIT_OPERATION operationArithSqrt(JSGlobalObject*, \
EncodedJSValue encodedOp1) WTF_INTERNAL; </span><span class="cx"> 
</span><span class="lines">@@ -211,7 +211,6 @@
</span><span class="cx"> size_t JIT_OPERATION \
operationObjectIsObject(JSGlobalObject*, JSCell*) WTF_INTERNAL; </span><span \
class="cx"> size_t JIT_OPERATION operationObjectIsFunction(JSGlobalObject*, JSCell*) \
WTF_INTERNAL; </span><span class="cx"> JSCell* JIT_OPERATION \
operationTypeOfObject(JSGlobalObject*, JSCell*) WTF_INTERNAL; </span><del>-int32_t \
JIT_OPERATION operationTypeOfObjectAsTypeofType(JSGlobalObject*, JSCell*) \
WTF_INTERNAL; </del><span class="cx"> char* JIT_OPERATION \
operationAllocateSimplePropertyStorageWithInitialCapacity(VM*) WTF_INTERNAL; \
</span><span class="cx"> char* JIT_OPERATION \
operationAllocateSimplePropertyStorage(VM*, size_t newSize) WTF_INTERNAL; \
</span><span class="cx"> char* JIT_OPERATION \
operationAllocateComplexPropertyStorageWithInitialCapacity(VM*, JSObject*) \
WTF_INTERNAL; </span><span class="lines">@@ -235,7 +234,7 @@
</span><span class="cx"> char* JIT_OPERATION \
operationInt52ToStringWithValidRadix(JSGlobalObject*, int64_t, int32_t); </span><span \
class="cx"> char* JIT_OPERATION \
operationDoubleToStringWithValidRadix(JSGlobalObject*, double, int32_t); </span><span \
class="cx">  </span><del>-int32_t JIT_OPERATION operationMapHash(JSGlobalObject*, \
EncodedJSValue input); </del><ins>+UCPUStrictInt32 JIT_OPERATION \
operationMapHash(JSGlobalObject*, EncodedJSValue input); </ins><span class="cx"> \
JSCell* JIT_OPERATION operationJSMapFindBucket(JSGlobalObject*, JSCell*, \
EncodedJSValue, int32_t); </span><span class="cx"> JSCell* JIT_OPERATION \
operationJSSetFindBucket(JSGlobalObject*, JSCell*, EncodedJSValue, int32_t); \
</span><span class="cx">  </span><span class="lines">@@ -257,7 +256,6 @@
</span><span class="cx"> JSString* JIT_OPERATION operationStrCat3(JSGlobalObject*, \
EncodedJSValue, EncodedJSValue, EncodedJSValue); </span><span class="cx"> char* \
JIT_OPERATION operationFindSwitchImmTargetForDouble(VM*, EncodedJSValue, size_t \
tableIndex); </span><span class="cx"> char* JIT_OPERATION \
operationSwitchString(JSGlobalObject*, size_t tableIndex, JSString*); \
</span><del>-int32_t JIT_OPERATION \
operationSwitchStringAndGetBranchOffset(JSGlobalObject*, size_t tableIndex, \
JSString*); </del><span class="cx"> uintptr_t JIT_OPERATION \
operationCompareStringImplLess(StringImpl*, StringImpl*); </span><span class="cx"> \
uintptr_t JIT_OPERATION operationCompareStringImplLessEq(StringImpl*, StringImpl*); \
</span><span class="cx"> uintptr_t JIT_OPERATION \
operationCompareStringImplGreater(StringImpl*, StringImpl*); </span><span \
class="lines">@@ -268,17 +266,16 @@ </span><span class="cx"> uintptr_t JIT_OPERATION \
operationCompareStringGreaterEq(JSGlobalObject*, JSString*, JSString*); </span><span \
class="cx"> void JIT_OPERATION operationNotifyWrite(VM*, WatchpointSet*); \
</span><span class="cx"> void JIT_OPERATION \
operationThrowStackOverflowForVarargs(JSGlobalObject*) WTF_INTERNAL; \
</span><del>-int32_t JIT_OPERATION operationSizeOfVarargs(JSGlobalObject*, \
EncodedJSValue arguments, uint32_t firstVarArgOffset); </del><ins>+UCPUStrictInt32 \
JIT_OPERATION operationSizeOfVarargs(JSGlobalObject*, EncodedJSValue arguments, \
uint32_t firstVarArgOffset); </ins><span class="cx"> void JIT_OPERATION \
operationLoadVarargs(JSGlobalObject*, int32_t firstElementDest, EncodedJSValue \
arguments, uint32_t offset, uint32_t length, uint32_t mandatoryMinimum); </span><span \
class="cx"> void JIT_OPERATION operationThrowDFG(JSGlobalObject*, EncodedJSValue); \
</span><span class="cx"> void JIT_OPERATION \
operationThrowStaticError(JSGlobalObject*, JSString*, uint32_t); </span><span \
class="cx">  </span><del>-int32_t JIT_OPERATION \
operationHasOwnProperty(JSGlobalObject*, JSObject*, EncodedJSValue); \
</del><ins>+size_t JIT_OPERATION operationHasOwnProperty(JSGlobalObject*, JSObject*, \
EncodedJSValue); </ins><span class="cx"> 
</span><del>-int32_t JIT_OPERATION operationArrayIndexOfString(JSGlobalObject*, \
                Butterfly*, JSString*, int32_t);
-int32_t JIT_OPERATION operationArrayIndexOfValue(JSGlobalObject*, Butterfly*, \
                EncodedJSValue, int32_t);
-int32_t JIT_OPERATION operationArrayIndexOfValueDouble(JSGlobalObject*, Butterfly*, \
                EncodedJSValue, int32_t);
-int32_t JIT_OPERATION operationArrayIndexOfValueInt32OrContiguous(JSGlobalObject*, \
Butterfly*, EncodedJSValue, int32_t); </del><ins>+UCPUStrictInt32 JIT_OPERATION \
operationArrayIndexOfString(JSGlobalObject*, Butterfly*, JSString*, int32_t); \
+UCPUStrictInt32 JIT_OPERATION operationArrayIndexOfValueDouble(JSGlobalObject*, \
Butterfly*, EncodedJSValue, int32_t); +UCPUStrictInt32 JIT_OPERATION \
operationArrayIndexOfValueInt32OrContiguous(JSGlobalObject*, Butterfly*, \
EncodedJSValue, int32_t); </ins><span class="cx"> 
</span><span class="cx"> JSCell* JIT_OPERATION \
operationSpreadFastArray(JSGlobalObject*, JSCell*); </span><span class="cx"> JSCell* \
JIT_OPERATION operationSpreadGeneric(JSGlobalObject*, JSCell*); </span><span \
class="lines">@@ -294,7 +291,7 @@ </span><span class="cx"> int64_t JIT_OPERATION \
operationConvertBoxedDoubleToInt52(EncodedJSValue); </span><span class="cx"> int64_t \
JIT_OPERATION operationConvertDoubleToInt52(double); </span><span class="cx"> 
</span><del>-int32_t JIT_OPERATION operationNumberIsInteger(JSGlobalObject*, \
EncodedJSValue); </del><ins>+size_t JIT_OPERATION \
operationNumberIsInteger(JSGlobalObject*, EncodedJSValue); </ins><span class="cx"> 
</span><span class="cx"> size_t JIT_OPERATION \
operationDefaultHasInstance(JSGlobalObject*, JSCell* value, JSCell* proto); \
</span><span class="cx">  </span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJITcpp"></a>
<div class="modfile"><h4>Modified: \
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp (259319 => 259320)</h4> <pre \
class="diff"><span> <span class="info">--- \
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp	2020-03-31 23:03:29 UTC (rev \
                259319)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp	2020-03-31 23:41:50 UTC \
(rev 259320) </span><span class="lines">@@ -2160,7 +2160,7 @@
</span><span class="cx"> 
</span><span class="cx">     cont8Bit.link(&amp;m_jit);
</span><span class="cx"> 
</span><del>-    int32Result(scratchReg, m_currentNode);
</del><ins>+    strictInt32Result(scratchReg, m_currentNode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SpeculativeJIT::compileGetByValOnString(Node* node)
</span><span class="lines">@@ -2344,7 +2344,7 @@
</span><span class="cx">         GPRReg op1GPR = op1.gpr();
</span><span class="cx">         GPRReg resultGPR = result.gpr();
</span><span class="cx">         m_jit.zeroExtend32ToPtr(op1GPR, resultGPR);
</span><del>-        int32Result(resultGPR, node, DataFormatInt32);
</del><ins>+        strictInt32Result(resultGPR, node, DataFormatInt32);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> #endif // USE(JSVALUE64)
</span><span class="lines">@@ -2364,7 +2364,7 @@
</span><span class="cx">             \
addSlowPathGenerator(slowPathCall(notTruncatedToInteger, this, </span><span \
class="cx">                 hasSensibleDoubleToInt() ? operationToInt32SensibleSlow : \
operationToInt32, NeedToSpill, ExceptionCheckRequirement::CheckNotNeeded, gpr, fpr)); \
</span><span class="cx">         } </span><del>-        int32Result(gpr, node);
</del><ins>+        strictInt32Result(gpr, node);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -2375,7 +2375,7 @@
</span><span class="cx">             SpeculateInt32Operand op1(this, \
node-&gt;child1(), ManualOperandSpeculation); </span><span class="cx">             \
GPRTemporary result(this, Reuse, op1); </span><span class="cx">             \
m_jit.move(op1.gpr(), result.gpr()); </span><del>-            \
int32Result(result.gpr(), node, op1.format()); </del><ins>+            \
strictInt32Result(result.gpr(), node, op1.format()); </ins><span class="cx">          \
return; </span><span class="cx">         }
</span><span class="cx">         case GeneratedOperandJSValue: {
</span><span class="lines">@@ -2488,7 +2488,7 @@
</span><span class="cx">                 converted.link(&amp;m_jit);
</span><span class="cx">             }
</span><span class="cx"> #endif
</span><del>-            int32Result(resultGpr, node);
</del><ins>+            strictInt32Result(resultGpr, node);
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         case GeneratedOperandTypeUnknown:
</span><span class="lines">@@ -2540,7 +2540,7 @@
</span><span class="cx"> 
</span><span class="cx">     speculationCheck(Overflow, JSValueRegs(), 0, \
m_jit.branch32(MacroAssembler::LessThan, result.gpr(), TrustedImm32(0))); \
</span><span class="cx">  </span><del>-    int32Result(result.gpr(), node, \
op1.format()); </del><ins>+    strictInt32Result(result.gpr(), node, op1.format());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SpeculativeJIT::compileDoubleAsInt32(Node* node)
</span><span class="lines">@@ -2560,7 +2560,7 @@
</span><span class="cx">         shouldCheckNegativeZero(node-&gt;arithMode()));
</span><span class="cx">     speculationCheck(Overflow, JSValueRegs(), 0, \
failureCases); </span><span class="cx"> 
</span><del>-    int32Result(resultGPR, node);
</del><ins>+    strictInt32Result(resultGPR, node);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SpeculativeJIT::compileDoubleRep(Node* node)
</span><span class="lines">@@ -2917,7 +2917,7 @@
</span><span class="cx"> void SpeculativeJIT::setIntTypedArrayLoadResult(Node* node, \
GPRReg resultReg, TypedArrayType type, bool canSpeculate) </span><span class="cx"> {
</span><span class="cx">     if (elementSize(type) &lt; 4 || isSigned(type)) {
</span><del>-        int32Result(resultReg, node);
</del><ins>+        strictInt32Result(resultReg, node);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -2924,7 +2924,7 @@
</span><span class="cx">     ASSERT(elementSize(type) == 4 &amp;&amp; \
!isSigned(type)); </span><span class="cx">     if (node-&gt;shouldSpeculateInt32() \
&amp;&amp; canSpeculate) { </span><span class="cx">         \
speculationCheck(Overflow, JSValueRegs(), 0, m_jit.branch32(MacroAssembler::LessThan, \
resultReg, TrustedImm32(0))); </span><del>-        int32Result(resultReg, node);
</del><ins>+        strictInt32Result(resultReg, node);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -3574,7 +3574,7 @@
</span><span class="cx"> 
</span><span class="cx">     m_jit.not32(resultGPR);
</span><span class="cx"> 
</span><del>-    int32Result(resultGPR, node);
</del><ins>+    strictInt32Result(resultGPR, node);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> template&lt;typename SnippetGenerator, J_JITOperation_GJJ \
snippetSlowPathFunction&gt; </span><span class="lines">@@ -3730,7 +3730,7 @@
</span><span class="cx"> 
</span><span class="cx">         bitOp(op, leftChild-&gt;asInt32(), op2.gpr(), \
result.gpr()); </span><span class="cx"> 
</span><del>-        int32Result(result.gpr(), node);
</del><ins>+        strictInt32Result(result.gpr(), node);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -3740,7 +3740,7 @@
</span><span class="cx"> 
</span><span class="cx">         bitOp(op, rightChild-&gt;asInt32(), op1.gpr(), \
result.gpr()); </span><span class="cx"> 
</span><del>-        int32Result(result.gpr(), node);
</del><ins>+        strictInt32Result(result.gpr(), node);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -3752,7 +3752,7 @@
</span><span class="cx">     GPRReg reg2 = op2.gpr();
</span><span class="cx">     bitOp(op, reg1, reg2, result.gpr());
</span><span class="cx"> 
</span><del>-    int32Result(result.gpr(), node);
</del><ins>+    strictInt32Result(result.gpr(), node);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SpeculativeJIT::emitUntypedRightShiftBitOp(Node* node)
</span><span class="lines">@@ -3928,7 +3928,7 @@
</span><span class="cx"> 
</span><span class="cx">         shiftOp(op, op1.gpr(), rightChild-&gt;asInt32() \
&amp; 0x1f, result.gpr()); </span><span class="cx"> 
</span><del>-        int32Result(result.gpr(), node);
</del><ins>+        strictInt32Result(result.gpr(), node);
</ins><span class="cx">     } else {
</span><span class="cx">         // Do not allow shift amount to be used as the \
result, MacroAssembler does not permit this. </span><span class="cx">         \
SpeculateInt32Operand op1(this, leftChild); </span><span class="lines">@@ -3939,7 \
+3939,7 @@ </span><span class="cx">         GPRReg reg2 = op2.gpr();
</span><span class="cx">         shiftOp(op, reg1, reg2, result.gpr());
</span><span class="cx"> 
</span><del>-        int32Result(result.gpr(), node);
</del><ins>+        strictInt32Result(result.gpr(), node);
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -4333,7 +4333,7 @@
</span><span class="cx"> 
</span><span class="cx">             if (!shouldCheckOverflow(node-&gt;arithMode())) \
{ </span><span class="cx">                 m_jit.add32(Imm32(imm2), gpr1, gprResult);
</span><del>-                int32Result(gprResult, node);
</del><ins>+                strictInt32Result(gprResult, node);
</ins><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="lines">@@ -4344,7 +4344,7 @@
</span><span class="cx">             } else
</span><span class="cx">                 speculationCheck(Overflow, JSValueRegs(), 0, \
check); </span><span class="cx"> 
</span><del>-            int32Result(gprResult, node);
</del><ins>+            strictInt32Result(gprResult, node);
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">                 
</span><span class="lines">@@ -4371,7 +4371,7 @@
</span><span class="cx">                 speculationCheck(Overflow, JSValueRegs(), 0, \
check); </span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        int32Result(gprResult, node);
</del><ins>+        strictInt32Result(gprResult, node);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">         
</span><span class="lines">@@ -4437,7 +4437,7 @@
</span><span class="cx">         m_jit.xor32(scratch.gpr(), result.gpr());
</span><span class="cx">         if (shouldCheckOverflow(node-&gt;arithMode()))
</span><span class="cx">             speculationCheck(Overflow, JSValueRegs(), 0, \
m_jit.branchTest32(MacroAssembler::Signed, result.gpr())); </span><del>-        \
int32Result(result.gpr(), node); </del><ins>+        strictInt32Result(result.gpr(), \
node); </ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -4472,7 +4472,7 @@
</span><span class="cx">         GPRReg valueReg = value.gpr();
</span><span class="cx">         GPRReg resultReg = result.gpr();
</span><span class="cx">         m_jit.countLeadingZeros32(valueReg, resultReg);
</span><del>-        int32Result(resultReg, node);
</del><ins>+        strictInt32Result(resultReg, node);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     JSValueOperand op1(this, node-&gt;child1());
</span><span class="lines">@@ -4482,7 +4482,7 @@
</span><span class="cx">     flushRegisters();
</span><span class="cx">     callOperation(operationArithClz32, resultReg, \
TrustedImmPtr::weakPointer(m_graph, \
m_graph.globalObjectFor(node-&gt;origin.semantic)), op1Regs); </span><span \
class="cx">     m_jit.exceptionCheck(); </span><del>-    int32Result(resultReg, \
node); </del><ins>+    strictInt32Result(resultReg, node);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SpeculativeJIT::compileArithDoubleUnaryOp(Node* node, \
double (*doubleFunction)(double), double (*operation)(JSGlobalObject*, \
EncodedJSValue)) </span><span class="lines">@@ -4528,7 +4528,7 @@
</span><span class="cx">                 speculationCheck(Overflow, JSValueRegs(), 0, \
m_jit.branchSub32(MacroAssembler::Overflow, op1.gpr(), Imm32(imm2), result.gpr(), \
scratch.gpr())); </span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            int32Result(result.gpr(), node);
</del><ins>+            strictInt32Result(result.gpr(), node);
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">             
</span><span class="lines">@@ -4543,7 +4543,7 @@
</span><span class="cx">             else
</span><span class="cx">                 speculationCheck(Overflow, JSValueRegs(), 0, \
m_jit.branchSub32(MacroAssembler::Overflow, op2.gpr(), result.gpr())); </span><span \
class="cx">                  </span><del>-            int32Result(result.gpr(), \
node); </del><ins>+            strictInt32Result(result.gpr(), node);
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">             
</span><span class="lines">@@ -4557,7 +4557,7 @@
</span><span class="cx">         } else
</span><span class="cx">             speculationCheck(Overflow, JSValueRegs(), 0, \
m_jit.branchSub32(MacroAssembler::Overflow, op1.gpr(), op2.gpr(), result.gpr())); \
</span><span class="cx">  </span><del>-        int32Result(result.gpr(), node);
</del><ins>+        strictInt32Result(result.gpr(), node);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">         
</span><span class="lines">@@ -4659,7 +4659,7 @@
</span><span class="cx">             m_jit.neg32(result.gpr());
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        int32Result(result.gpr(), node);
</del><ins>+        strictInt32Result(result.gpr(), node);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -4894,7 +4894,7 @@
</span><span class="cx">                 }
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            int32Result(resultGPR, node);
</del><ins>+            strictInt32Result(resultGPR, node);
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx">         SpeculateInt32Operand op1(this, node-&gt;child1());
</span><span class="lines">@@ -4923,7 +4923,7 @@
</span><span class="cx">             resultNonZero.link(&amp;m_jit);
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        int32Result(result.gpr(), node);
</del><ins>+        strictInt32Result(result.gpr(), node);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -5215,7 +5215,7 @@
</span><span class="cx">             speculationCheck(Overflow, JSValueRegs(), 0, \
m_jit.branchTest32(JITCompiler::NonZero, edx.gpr())); </span><span class="cx">        \
 </span><span class="cx">         done.link(&amp;m_jit);
</span><del>-        int32Result(eax.gpr(), node);
</del><ins>+        strictInt32Result(eax.gpr(), node);
</ins><span class="cx"> #elif HAVE(ARM_IDIV_INSTRUCTIONS) || CPU(ARM64)
</span><span class="cx">         SpeculateInt32Operand op1(this, node-&gt;child1());
</span><span class="cx">         SpeculateInt32Operand op2(this, node-&gt;child2());
</span><span class="lines">@@ -5244,7 +5244,7 @@
</span><span class="cx">             speculationCheck(Overflow, JSValueRegs(), 0, \
m_jit.branch32(JITCompiler::NotEqual, multiplyAnswer.gpr(), op1GPR)); </span><span \
class="cx">         } </span><span class="cx"> 
</span><del>-        int32Result(quotient.gpr(), node);
</del><ins>+        strictInt32Result(quotient.gpr(), node);
</ins><span class="cx"> #else
</span><span class="cx">         RELEASE_ASSERT_NOT_REACHED();
</span><span class="cx"> #endif
</span><span class="lines">@@ -5392,7 +5392,7 @@
</span><span class="cx">                     numeratorPositive.link(&amp;m_jit);
</span><span class="cx">                 }
</span><span class="cx"> 
</span><del>-                int32Result(resultGPR, node);
</del><ins>+                strictInt32Result(resultGPR, node);
</ins><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="lines">@@ -5431,7 +5431,7 @@
</span><span class="cx">                 if (op1SaveGPR != op1Gpr)
</span><span class="cx">                     unlock(op1SaveGPR);
</span><span class="cx"> 
</span><del>-                int32Result(edx.gpr(), node);
</del><ins>+                strictInt32Result(edx.gpr(), node);
</ins><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="lines">@@ -5528,7 +5528,7 @@
</span><span class="cx">             unlock(op1SaveGPR);
</span><span class="cx">             
</span><span class="cx">         done.link(&amp;m_jit);
</span><del>-        int32Result(edx.gpr(), node);
</del><ins>+        strictInt32Result(edx.gpr(), node);
</ins><span class="cx"> 
</span><span class="cx"> #elif HAVE(ARM_IDIV_INSTRUCTIONS) || CPU(ARM64)
</span><span class="cx">         GPRTemporary temp(this);
</span><span class="lines">@@ -5575,7 +5575,7 @@
</span><span class="cx"> 
</span><span class="cx">         done.link(&amp;m_jit);
</span><span class="cx"> 
</span><del>-        int32Result(quotientThenRemainderGPR, node);
</del><ins>+        strictInt32Result(quotientThenRemainderGPR, node);
</ins><span class="cx"> #else // not architecture that can do integer division
</span><span class="cx">         RELEASE_ASSERT_NOT_REACHED();
</span><span class="cx"> #endif
</span><span class="lines">@@ -5622,7 +5622,7 @@
</span><span class="cx">                 m_jit.branchConvertDoubleToInt32(resultFPR, \
resultGPR, failureCases, scratchFPR, \
shouldCheckNegativeZero(node-&gt;arithRoundingMode())); </span><span class="cx">      \
speculationCheck(Overflow, JSValueRegs(), node, failureCases); </span><span \
class="cx">  </span><del>-                int32Result(resultGPR, node);
</del><ins>+                strictInt32Result(resultGPR, node);
</ins><span class="cx">             } else
</span><span class="cx">                 doubleResult(resultFPR, node);
</span><span class="cx">         };
</span><span class="lines">@@ -5782,7 +5782,7 @@
</span><span class="cx">         } else
</span><span class="cx">             op1Less.link(&amp;m_jit);
</span><span class="cx"> 
</span><del>-        int32Result(resultGPR, node);
</del><ins>+        strictInt32Result(resultGPR, node);
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -6931,7 +6931,7 @@
</span><span class="cx">     done.link(&amp;m_jit);
</span><span class="cx">     nullVector.link(&amp;m_jit);
</span><span class="cx"> 
</span><del>-    int32Result(vectorGPR, node);
</del><ins>+    strictInt32Result(vectorGPR, node);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SpeculativeJIT::compileGetByValOnDirectArguments(Node* \
node) </span><span class="lines">@@ -7108,7 +7108,7 @@
</span><span class="cx">         GPRReg resultReg = result.gpr();
</span><span class="cx">         m_jit.load32(MacroAssembler::Address(storageReg, \
Butterfly::offsetOfPublicLength()), resultReg); </span><span class="cx">             
</span><del>-        int32Result(resultReg, node);
</del><ins>+        strictInt32Result(resultReg, node);
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx">     case Array::ArrayStorage:
</span><span class="lines">@@ -7121,7 +7121,7 @@
</span><span class="cx">             
</span><span class="cx">         speculationCheck(Uncountable, JSValueRegs(), 0, \
m_jit.branch32(MacroAssembler::LessThan, resultReg, \
MacroAssembler::TrustedImm32(0))); </span><span class="cx">             
</span><del>-        int32Result(resultReg, node);
</del><ins>+        strictInt32Result(resultReg, node);
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx">     case Array::String: {
</span><span class="lines">@@ -7147,7 +7147,7 @@
</span><span class="cx"> 
</span><span class="cx">             done.link(&amp;m_jit);
</span><span class="cx">         }
</span><del>-        int32Result(resultGPR, node);
</del><ins>+        strictInt32Result(resultGPR, node);
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx">     case Array::DirectArguments: {
</span><span class="lines">@@ -7171,7 +7171,7 @@
</span><span class="cx">         m_jit.load32(
</span><span class="cx">             MacroAssembler::Address(baseReg, \
DirectArguments::offsetOfLength()), resultReg); </span><span class="cx">         
</span><del>-        int32Result(resultReg, node);
</del><ins>+        strictInt32Result(resultReg, node);
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx">     case Array::ScopedArguments: {
</span><span class="lines">@@ -7195,7 +7195,7 @@
</span><span class="cx">         m_jit.load32(
</span><span class="cx">             MacroAssembler::Address(baseReg, \
ScopedArguments::offsetOfTotalLength()), resultReg); </span><span class="cx">         \
 </span><del>-        int32Result(resultReg, node);
</del><ins>+        strictInt32Result(resultReg, node);
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx">     default: {
</span><span class="lines">@@ -7205,7 +7205,7 @@
</span><span class="cx">         GPRReg baseGPR = base.gpr();
</span><span class="cx">         GPRReg resultGPR = result.gpr();
</span><span class="cx">         m_jit.load32(MacroAssembler::Address(baseGPR, \
JSArrayBufferView::offsetOfLength()), resultGPR); </span><del>-        \
int32Result(resultGPR, node); </del><ins>+        strictInt32Result(resultGPR, node);
</ins><span class="cx">         break;
</span><span class="cx">     } }
</span><span class="cx"> }
</span><span class="lines">@@ -7362,7 +7362,7 @@
</span><span class="cx"> 
</span><span class="cx">     m_jit.add32(TrustedImm32(1), GPRInfo::returnValueGPR, \
argCountIncludingThisGPR); </span><span class="cx"> 
</span><del>-    int32Result(argCountIncludingThisGPR, node);  
</del><ins>+    strictInt32Result(argCountIncludingThisGPR, node);  
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SpeculativeJIT::compileLoadVarargs(Node* node)
</span><span class="lines">@@ -8353,7 +8353,7 @@
</span><span class="cx">     if (node-&gt;numberOfArgumentsToSkip())
</span><span class="cx">         \
m_jit.sub32(TrustedImm32(node-&gt;numberOfArgumentsToSkip()), resultGPR); \
</span><span class="cx">     done.link(&amp;m_jit); </span><del>-    \
int32Result(resultGPR, node); </del><ins>+    strictInt32Result(resultGPR, node);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SpeculativeJIT::emitPopulateSliceIndex(Edge&amp; \
target, Optional&lt;GPRReg&gt; indexGPR, GPRReg lengthGPR, GPRReg resultGPR) \
</span><span class="lines">@@ -8610,7 +8610,7 @@ </span><span class="cx">             \
notFound.link(&amp;m_jit); </span><span class="cx">             \
m_jit.move(TrustedImm32(-1), indexGPR); </span><span class="cx">             \
found.link(&amp;m_jit); </span><del>-            int32Result(indexGPR, node);
</del><ins>+            strictInt32Result(indexGPR, node);
</ins><span class="cx">         };
</span><span class="cx"> 
</span><span class="cx">         if (searchElementEdge.useKind() == Int32Use) {
</span><span class="lines">@@ -8717,7 +8717,7 @@
</span><span class="cx">         notFound.link(&amp;m_jit);
</span><span class="cx">         m_jit.move(TrustedImm32(-1), indexGPR);
</span><span class="cx">         found.link(&amp;m_jit);
</span><del>-        int32Result(indexGPR, node);
</del><ins>+        strictInt32Result(indexGPR, node);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -8734,7 +8734,7 @@
</span><span class="cx">         callOperation(operationArrayIndexOfString, \
lengthGPR, TrustedImmPtr::weakPointer(m_graph, \
m_graph.globalObjectFor(node-&gt;origin.semantic)), storageGPR, searchElementGPR, \
indexGPR); </span><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx"> 
</span><del>-        int32Result(lengthGPR, node);
</del><ins>+        strictInt32Result(lengthGPR, node);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -8758,7 +8758,7 @@
</span><span class="cx">         }
</span><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx"> 
</span><del>-        int32Result(lengthGPR, node);
</del><ins>+        strictInt32Result(lengthGPR, node);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -12172,7 +12172,7 @@
</span><span class="cx">     GPRReg resultGPR = result.gpr();
</span><span class="cx"> 
</span><span class="cx">     m_jit.load32(MacroAssembler::Address(enumerator.gpr(), \
JSPropertyNameEnumerator::indexedLengthOffset()), resultGPR); </span><del>-    \
int32Result(resultGPR, node); </del><ins>+    strictInt32Result(resultGPR, node);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SpeculativeJIT::compileHasGenericProperty(Node* node)
</span><span class="lines">@@ -12477,7 +12477,7 @@
</span><span class="cx">     else
</span><span class="cx">         argumentCountRegister = \
CallFrameSlot::argumentCountIncludingThis; </span><span class="cx">     \
m_jit.load32(JITCompiler::payloadFor(argumentCountRegister), result.gpr()); \
</span><del>-    int32Result(result.gpr(), node); </del><ins>+    \
strictInt32Result(result.gpr(), node); </ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void \
SpeculativeJIT::compileSetArgumentCountIncludingThis(Node* node) \
</span></span></pre></div> <a \
id="trunkSourceJavaScriptCoredfgDFGSpeculativeJITh"></a> <div \
class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h \
(259319 => 259320)</h4> <pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h	2020-03-31 \
                23:03:29 UTC (rev 259319)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h	2020-03-31 23:41:50 UTC (rev \
259320) </span><span class="lines">@@ -768,7 +768,7 @@
</span><span class="cx"> 
</span><span class="cx">     // These method called to initialize the GenerationInfo
</span><span class="cx">     // to describe the result of an operation.
</span><del>-    void int32Result(GPRReg reg, Node* node, DataFormat format = \
DataFormatInt32, UseChildrenMode mode = CallUseChildren) </del><ins>+    void \
strictInt32Result(GPRReg reg, Node* node, DataFormat format = DataFormatInt32, \
UseChildrenMode mode = CallUseChildren) </ins><span class="cx">     {
</span><span class="cx">         if (mode == CallUseChildren)
</span><span class="cx">             useChildren(node);
</span><span class="lines">@@ -791,9 +791,9 @@
</span><span class="cx"> #endif
</span><span class="cx">         }
</span><span class="cx">     }
</span><del>-    void int32Result(GPRReg reg, Node* node, UseChildrenMode mode)
</del><ins>+    void strictInt32Result(GPRReg reg, Node* node, UseChildrenMode mode)
</ins><span class="cx">     {
</span><del>-        int32Result(reg, node, DataFormatInt32, mode);
</del><ins>+        strictInt32Result(reg, node, DataFormatInt32, mode);
</ins><span class="cx">     }
</span><span class="cx">     void int52Result(GPRReg reg, Node* node, DataFormat \
format, UseChildrenMode mode = CallUseChildren) </span><span class="cx">     {
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJIT32_64cpp"></a>
<div class="modfile"><h4>Modified: \
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp (259319 => 259320)</h4> \
<pre class="diff"><span> <span class="info">--- \
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp	2020-03-31 23:03:29 UTC \
                (rev 259319)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp	2020-03-31 23:41:50 \
UTC (rev 259320) </span><span class="lines">@@ -1851,7 +1851,7 @@
</span><span class="cx">             GPRTemporary result(this);
</span><span class="cx">             \
m_jit.load32(JITCompiler::payloadFor(node-&gt;machineLocal()), result.gpr()); \
</span><span class="cx">              </span><del>-            // Like int32Result, \
but don't useChildren - our children are phi nodes, </del><ins>+            // Like \
strictInt32Result, but don't useChildren - our children are phi nodes, </ins><span \
class="cx">             // and don't represent values within this dataflow with \
virtual registers. </span><span class="cx">             VirtualRegister \
virtualRegister = node-&gt;virtualRegister(); </span><span class="cx">             \
m_gprs.retain(result.gpr(), virtualRegister, SpillOrderInteger); </span><span \
class="lines">@@ -2366,7 +2366,7 @@ </span><span class="cx">                         \
MacroAssembler::BaseIndex( </span><span class="cx">                             \
storageReg, propertyReg, MacroAssembler::TimesEight, PayloadOffset), </span><span \
class="cx">                         resultPayload.gpr()); </span><del>-               \
int32Result(resultPayload.gpr(), node); </del><ins>+                    \
strictInt32Result(resultPayload.gpr(), node); </ins><span class="cx">                 \
break; </span><span class="cx">                 }
</span><span class="cx">                 
</span><span class="lines">@@ -3045,7 +3045,7 @@
</span><span class="cx">             
</span><span class="cx">             m_jit.move(value.gpr(), result.gpr());
</span><span class="cx"> 
</span><del>-            int32Result(result.gpr(), node);
</del><ins>+            strictInt32Result(result.gpr(), node);
</ins><span class="cx">             break;
</span><span class="cx">         }
</span><span class="cx">             
</span><span class="lines">@@ -3059,7 +3059,7 @@
</span><span class="cx">                 GPRReg resultGPR = result.gpr();
</span><span class="cx">                 
</span><span class="cx">                 m_jit.move(valueGPR, resultGPR);
</span><del>-                int32Result(result.gpr(), node);
</del><ins>+                strictInt32Result(result.gpr(), node);
</ins><span class="cx">                 break;
</span><span class="cx">             }
</span><span class="cx">             
</span><span class="lines">@@ -3739,7 +3739,7 @@
</span><span class="cx">         GPRReg resultGPR = result.gpr();
</span><span class="cx">         callOperation(operationMapHash, resultGPR, \
TrustedImmPtr::weakPointer(m_graph, \
m_graph.globalObjectFor(node-&gt;origin.semantic)), inputRegs); </span><span \
class="cx">         m_jit.exceptionCheck(); </span><del>-        \
int32Result(resultGPR, node); </del><ins>+        strictInt32Result(resultGPR, node);
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJIT64cpp"></a>
<div class="modfile"><h4>Modified: \
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp (259319 => 259320)</h4> <pre \
class="diff"><span> <span class="info">--- \
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp	2020-03-31 23:03:29 UTC (rev \
                259319)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp	2020-03-31 23:41:50 UTC \
(rev 259320) </span><span class="lines">@@ -1959,7 +1959,7 @@
</span><span class="cx">             GPRTemporary result(this);
</span><span class="cx">             \
m_jit.load32(JITCompiler::payloadFor(node-&gt;machineLocal()), result.gpr()); \
</span><span class="cx">              </span><del>-            // Like int32Result, \
but don't useChildren - our children are phi nodes, </del><ins>+            // Like \
strictInt32Result, but don't useChildren - our children are phi nodes, </ins><span \
class="cx">             // and don't represent values within this dataflow with \
virtual registers. </span><span class="cx">             VirtualRegister \
virtualRegister = node-&gt;virtualRegister(); </span><span class="cx">             \
m_gprs.retain(result.gpr(), virtualRegister, SpillOrderInteger); </span><span \
class="lines">@@ -3391,7 +3391,7 @@ </span><span class="cx">                 \
JSValueRegs(value.gpr()), node-&gt;child1(), SpecBoolean, m_jit.branchTest64( \
</span><span class="cx">                     JITCompiler::NonZero, result.gpr(), \
TrustedImm32(static_cast&lt;int32_t&gt;(~1)))); </span><span class="cx"> 
</span><del>-            int32Result(result.gpr(), node);
</del><ins>+            strictInt32Result(result.gpr(), node);
</ins><span class="cx">             break;
</span><span class="cx">         }
</span><span class="cx">             
</span><span class="lines">@@ -3402,7 +3402,7 @@
</span><span class="cx">             if \
(!m_interpreter.needsTypeCheck(node-&gt;child1(), SpecBoolInt32 | SpecBoolean)) { \
</span><span class="cx">                 m_jit.move(value.gpr(), result.gpr()); \
</span><span class="cx">                 m_jit.and32(TrustedImm32(1), result.gpr()); \
</span><del>-                int32Result(result.gpr(), node); </del><ins>+            \
strictInt32Result(result.gpr(), node); </ins><span class="cx">                 break;
</span><span class="cx">             }
</span><span class="cx">             
</span><span class="lines">@@ -4148,7 +4148,7 @@
</span><span class="cx"> 
</span><span class="cx">             m_jit.move(inputGPR, resultGPR);
</span><span class="cx">             m_jit.wangsInt64Hash(resultGPR, tempGPR);
</span><del>-            int32Result(resultGPR, node);
</del><ins>+            strictInt32Result(resultGPR, node);
</ins><span class="cx">             break;
</span><span class="cx">         }
</span><span class="cx">         case CellUse:
</span><span class="lines">@@ -4193,7 +4193,7 @@
</span><span class="cx">             m_jit.exceptionCheck();
</span><span class="cx"> 
</span><span class="cx">             done.link(&amp;m_jit);
</span><del>-            int32Result(resultGPR, node);
</del><ins>+            strictInt32Result(resultGPR, node);
</ins><span class="cx">             break;
</span><span class="cx">         }
</span><span class="cx">         default:
</span><span class="lines">@@ -4236,7 +4236,7 @@
</span><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx"> 
</span><span class="cx">         done.link(&amp;m_jit);
</span><del>-        int32Result(resultGPR, node);
</del><ins>+        strictInt32Result(resultGPR, node);
</ins><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -4834,7 +4834,7 @@
</span><span class="cx">                     m_jit.load8SignedExtendTo32(baseIndex, \
t2); </span><span class="cx">                 else
</span><span class="cx">                     m_jit.load8(baseIndex, t2);
</span><del>-                int32Result(t2, node);
</del><ins>+                strictInt32Result(t2, node);
</ins><span class="cx">                 break;
</span><span class="cx">             case 2: {
</span><span class="cx">                 auto emitLittleEndianLoad = [&amp;] {
</span><span class="lines">@@ -4863,7 +4863,7 @@
</span><span class="cx">                     emitBigEndianLoad();
</span><span class="cx">                     done.link(&amp;m_jit);
</span><span class="cx">                 }
</span><del>-                int32Result(t2, node);
</del><ins>+                strictInt32Result(t2, node);
</ins><span class="cx">                 break;
</span><span class="cx">             }
</span><span class="cx">             case 4: {
</span><span class="lines">@@ -4879,7 +4879,7 @@
</span><span class="cx">                 }
</span><span class="cx"> 
</span><span class="cx">                 if (data.isSigned)
</span><del>-                    int32Result(t2, node);
</del><ins>+                    strictInt32Result(t2, node);
</ins><span class="cx">                 else
</span><span class="cx">                     strictInt52Result(t2, node);
</span><span class="cx">                 break;
</span><span class="lines">@@ -5436,7 +5436,7 @@
</span><span class="cx">     \
m_jit.getEffectiveAddress(CCallHelpers::BaseIndex(scratch1GPR, scratch3GPR, \
CCallHelpers::TimesOne, -U16_SURROGATE_OFFSET), scratch1GPR); </span><span \
class="cx">     done.link(&amp;m_jit); </span><span class="cx"> 
</span><del>-    int32Result(scratch1GPR, m_currentNode);
</del><ins>+    strictInt32Result(scratch1GPR, m_currentNode);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void SpeculativeJIT::compileDeleteById(Node* node)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLLowerDFGToB3cpp"></a>
<div class="modfile"><h4>Modified: \
trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp (259319 => 259320)</h4> <pre \
class="diff"><span> <span class="info">--- \
trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp	2020-03-31 23:03:29 UTC (rev \
                259319)
+++ trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp	2020-03-31 23:41:50 UTC (rev \
259320) </span><span class="lines">@@ -2474,7 +2474,7 @@
</span><span class="cx">         }
</span><span class="cx">         DFG_ASSERT(m_graph, m_node, \
m_node-&gt;child1().useKind() == UntypedUse, m_node-&gt;child1().useKind()); \
</span><span class="cx">         LValue argument = lowJSValue(m_node-&gt;child1()); \
</span><del>-        LValue result = vmCall(Int32, operationArithClz32, \
weakPointer(globalObject), argument); </del><ins>+        LValue result = \
m_out.castToInt32(vmCall(Int64, operationArithClz32, weakPointer(globalObject), \
argument)); </ins><span class="cx">         setInt32(result);
</span><span class="cx">     }
</span><span class="cx">     
</span><span class="lines">@@ -5753,17 +5753,17 @@
</span><span class="cx"> 
</span><span class="cx">         case StringUse:
</span><span class="cx">             ASSERT(m_node-&gt;arrayMode().type() == \
Array::Contiguous); </span><del>-            setInt32(vmCall(Int32, \
operationArrayIndexOfString, weakPointer(globalObject), storage, \
lowString(searchElementEdge), startIndex)); </del><ins>+            \
setInt32(m_out.castToInt32(vmCall(Int64, operationArrayIndexOfString, \
weakPointer(globalObject), storage, lowString(searchElementEdge), startIndex))); \
</ins><span class="cx">             break; </span><span class="cx"> 
</span><span class="cx">         case UntypedUse:
</span><span class="cx">             switch (m_node-&gt;arrayMode().type()) {
</span><span class="cx">             case Array::Double:
</span><del>-                setInt32(vmCall(Int32, operationArrayIndexOfValueDouble, \
weakPointer(globalObject), storage, lowJSValue(searchElementEdge), startIndex)); \
</del><ins>+                setInt32(m_out.castToInt32(vmCall(Int64, \
operationArrayIndexOfValueDouble, weakPointer(globalObject), storage, \
lowJSValue(searchElementEdge), startIndex))); </ins><span class="cx">                 \
break; </span><span class="cx">             case Array::Int32:
</span><span class="cx">             case Array::Contiguous:
</span><del>-                setInt32(vmCall(Int32, \
operationArrayIndexOfValueInt32OrContiguous, weakPointer(globalObject), storage, \
lowJSValue(searchElementEdge), startIndex)); </del><ins>+                \
setInt32(m_out.castToInt32(vmCall(Int64, operationArrayIndexOfValueInt32OrContiguous, \
weakPointer(globalObject), storage, lowJSValue(searchElementEdge), startIndex))); \
</ins><span class="cx">                 break; </span><span class="cx">             \
default: </span><span class="cx">                 RELEASE_ASSERT_NOT_REACHED();
</span><span class="lines">@@ -9832,9 +9832,7 @@
</span><span class="cx">         LoadVarargsData* data = \
m_node-&gt;loadVarargsData(); </span><span class="cx">         LValue jsArguments = \
lowJSValue(m_node-&gt;argumentsChild()); </span><span class="cx"> 
</span><del>-        LValue length = vmCall(
-            Int32, operationSizeOfVarargs, weakPointer(globalObject), jsArguments,
-            m_out.constInt32(data-&gt;offset));
</del><ins>+        LValue length = m_out.castToInt32(vmCall(Int64, \
operationSizeOfVarargs, weakPointer(globalObject), jsArguments, \
m_out.constInt32(data-&gt;offset))); </ins><span class="cx"> 
</span><span class="cx">         LValue lengthIncludingThis = m_out.add(length, \
m_out.int32One); </span><span class="cx"> 
</span><span class="lines">@@ -10620,8 +10618,7 @@
</span><span class="cx">             unsure(slowCase), unsure(continuation));
</span><span class="cx"> 
</span><span class="cx">         m_out.appendTo(slowCase, continuation);
</span><del>-        ValueFromBlock slowResult = m_out.anchor(
-            vmCall(Int32, operationMapHash, weakPointer(globalObject), string));
</del><ins>+        ValueFromBlock slowResult = \
m_out.anchor(m_out.castToInt32(vmCall(Int64, operationMapHash, \
weakPointer(globalObject), string))); </ins><span class="cx">         \
m_out.jump(continuation); </span><span class="cx"> 
</span><span class="cx">         m_out.appendTo(continuation, lastNext);
</span><span class="lines">@@ -10708,8 +10705,7 @@
</span><span class="cx">         m_out.jump(continuation);
</span><span class="cx"> 
</span><span class="cx">         m_out.appendTo(slowCase, continuation);
</span><del>-        ValueFromBlock slowResult = m_out.anchor(
-            vmCall(Int32, operationMapHash, weakPointer(globalObject), value));
</del><ins>+        ValueFromBlock slowResult = \
m_out.anchor(m_out.castToInt32(vmCall(Int64, operationMapHash, \
weakPointer(globalObject), value))); </ins><span class="cx">         \
m_out.jump(continuation); </span><span class="cx"> 
</span><span class="cx">         m_out.appendTo(continuation, lastNext);
</span><span class="lines">@@ -11383,7 +11379,7 @@
</span><span class="cx"> 
</span><span class="cx">         m_out.appendTo(slowCase, continuation);
</span><span class="cx">         ValueFromBlock slowResult;
</span><del>-        slowResult = m_out.anchor(vmCall(Int32, operationHasOwnProperty, \
weakPointer(globalObject), object, keyAsValue)); </del><ins>+        slowResult = \
m_out.anchor(m_out.notZero64(vmCall(Int64, operationHasOwnProperty, \
weakPointer(globalObject), object, keyAsValue))); </ins><span class="cx">         \
m_out.jump(continuation); </span><span class="cx"> 
</span><span class="cx">         m_out.appendTo(continuation, lastNext);
</span><span class="lines">@@ -11561,7 +11557,7 @@
</span><span class="cx">         LValue constructor = lowCell(m_node-&gt;child2());
</span><span class="cx">         LValue hasInstance = \
lowJSValue(m_node-&gt;child3()); </span><span class="cx"> 
</span><del>-        setBoolean(m_out.logicalNot(m_out.equal(m_out.constInt32(0), \
vmCall(Int32, operationInstanceOfCustom, weakPointer(globalObject), value, \
constructor, hasInstance)))); </del><ins>+        \
setBoolean(m_out.notZero64(vmCall(Int64, operationInstanceOfCustom, \
weakPointer(globalObject), value, constructor, hasInstance))); </ins><span \
class="cx">     } </span><span class="cx">     
</span><span class="cx">     void compileCountExecution()
</span><span class="lines">@@ -15919,7 +15915,7 @@
</span><span class="cx">         m_out.jump(continuation);
</span><span class="cx">         
</span><span class="cx">         m_out.appendTo(slowPath, continuation);
</span><del>-        results.append(m_out.anchor(m_out.callWithoutSideEffects(Int32, \
operationToInt32, doubleValue))); </del><ins>+        \
results.append(m_out.anchor(m_out.castToInt32(m_out.callWithoutSideEffects(Int64, \
operationToInt32, doubleValue)))); </ins><span class="cx">         \
m_out.jump(continuation); </span><span class="cx">         
</span><span class="cx">         m_out.appendTo(continuation, lastNext);
</span><span class="lines">@@ -15959,7 +15955,7 @@
</span><span class="cx">             rarely(slowPath), usually(continuation));
</span><span class="cx">         
</span><span class="cx">         LBasicBlock lastNext = m_out.appendTo(slowPath, \
continuation); </span><del>-        ValueFromBlock slowResult = \
m_out.anchor(m_out.callWithoutSideEffects(Int32, operationToInt32SensibleSlow, \
doubleValue)); </del><ins>+        ValueFromBlock slowResult = \
m_out.anchor(m_out.castToInt32(m_out.callWithoutSideEffects(Int64, \
operationToInt32SensibleSlow, doubleValue))); </ins><span class="cx">         \
m_out.jump(continuation); </span><span class="cx">         
</span><span class="cx">         m_out.appendTo(continuation, lastNext);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLOperationscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLOperations.cpp \
(259319 => 259320)</h4> <pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLOperations.cpp	2020-03-31 \
                23:03:29 UTC (rev 259319)
+++ trunk/Source/JavaScriptCore/ftl/FTLOperations.cpp	2020-03-31 23:41:50 UTC (rev \
259320) </span><span class="lines">@@ -642,6 +642,35 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+extern &quot;C&quot; int32_t JIT_OPERATION \
operationSwitchStringAndGetBranchOffset(JSGlobalObject* globalObject, size_t \
tableIndex, JSString* string) +{
+    VM&amp; vm = globalObject-&gt;vm();
+    CallFrame* callFrame = DECLARE_CALL_FRAME(vm);
+    JITOperationPrologueCallFrameTracer tracer(vm, callFrame);
+    auto throwScope = DECLARE_THROW_SCOPE(vm);
+
+    StringImpl* strImpl = string-&gt;value(globalObject).impl();
+
+    RETURN_IF_EXCEPTION(throwScope, 0);
+
+    return callFrame-&gt;codeBlock()-&gt;stringSwitchJumpTable(tableIndex).offsetForValue(strImpl, \
std::numeric_limits&lt;int32_t&gt;::min()); +}
+
+extern &quot;C&quot; int32_t JIT_OPERATION \
operationTypeOfObjectAsTypeofType(JSGlobalObject* globalObject, JSCell* object) +{
+    VM&amp; vm = globalObject-&gt;vm();
+    CallFrame* callFrame = DECLARE_CALL_FRAME(vm);
+    JITOperationPrologueCallFrameTracer tracer(vm, callFrame);
+
+    ASSERT(jsDynamicCast&lt;JSObject*&gt;(vm, object));
+
+    if (object-&gt;structure(vm)-&gt;masqueradesAsUndefined(globalObject))
+        return static_cast&lt;int32_t&gt;(TypeofType::Undefined);
+    if (object-&gt;isFunction(vm))
+        return static_cast&lt;int32_t&gt;(TypeofType::Function);
+    return static_cast&lt;int32_t&gt;(TypeofType::Object);
+}
+
</ins><span class="cx"> extern &quot;C&quot; void* JIT_OPERATION \
operationCompileFTLLazySlowPath(CallFrame* callFrame, unsigned index) </span><span \
class="cx"> { </span><span class="cx">     VM&amp; vm = callFrame-&gt;deprecatedVM();
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreftlFTLOperationsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ftl/FTLOperations.h \
(259319 => 259320)</h4> <pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ftl/FTLOperations.h	2020-03-31 \
                23:03:29 UTC (rev 259319)
+++ trunk/Source/JavaScriptCore/ftl/FTLOperations.h	2020-03-31 23:41:50 UTC (rev \
259320) </span><span class="lines">@@ -42,6 +42,9 @@
</span><span class="cx"> 
</span><span class="cx"> void* JIT_OPERATION \
operationCompileFTLLazySlowPath(CallFrame*, unsigned) WTF_INTERNAL; </span><span \
class="cx">  </span><ins>+int32_t JIT_OPERATION \
operationSwitchStringAndGetBranchOffset(JSGlobalObject*, size_t tableIndex, \
JSString*) WTF_INTERNAL; +int32_t JIT_OPERATION \
operationTypeOfObjectAsTypeofType(JSGlobalObject*, JSCell*) WTF_INTERNAL; +
</ins><span class="cx"> } // extern &quot;C&quot;
</span><span class="cx"> 
</span><span class="cx"> } } // namespace JSC::DFG
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.cpp \
(259319 => 259320)</h4> <pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.cpp	2020-03-31 \
                23:03:29 UTC (rev 259319)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.cpp	2020-03-31 23:41:50 UTC (rev \
259320) </span><span class="lines">@@ -1916,7 +1916,7 @@
</span><span class="cx">     scopeSlot = scopeSlot.Register::scope()-&gt;next();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-int32_t JIT_OPERATION operationInstanceOfCustom(JSGlobalObject* \
globalObject, EncodedJSValue encodedValue, JSObject* constructor, EncodedJSValue \
encodedHasInstance) </del><ins>+size_t JIT_OPERATION \
operationInstanceOfCustom(JSGlobalObject* globalObject, EncodedJSValue encodedValue, \
JSObject* constructor, EncodedJSValue encodedHasInstance) </ins><span class="cx"> {
</span><span class="cx">     VM&amp; vm = globalObject-&gt;vm();
</span><span class="cx">     CallFrame* callFrame = DECLARE_CALL_FRAME(vm);
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorejitJITOperationsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/jit/JITOperations.h \
(259319 => 259320)</h4> <pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/jit/JITOperations.h	2020-03-31 \
                23:03:29 UTC (rev 259319)
+++ trunk/Source/JavaScriptCore/jit/JITOperations.h	2020-03-31 23:41:50 UTC (rev \
259320) </span><span class="lines">@@ -280,7 +280,7 @@
</span><span class="cx"> void JIT_OPERATION operationExceptionFuzz(JSGlobalObject*);
</span><span class="cx"> 
</span><span class="cx"> int32_t JIT_OPERATION \
operationCheckIfExceptionIsUncatchableAndNotifyProfiler(VM*); </span><del>-int32_t \
JIT_OPERATION operationInstanceOfCustom(JSGlobalObject*, EncodedJSValue encodedValue, \
JSObject* constructor, EncodedJSValue encodedHasInstance) WTF_INTERNAL; \
</del><ins>+size_t JIT_OPERATION operationInstanceOfCustom(JSGlobalObject*, \
EncodedJSValue encodedValue, JSObject* constructor, EncodedJSValue \
encodedHasInstance) WTF_INTERNAL; </ins><span class="cx"> 
</span><span class="cx"> EncodedJSValue JIT_OPERATION \
operationValueAdd(JSGlobalObject*, EncodedJSValue encodedOp1, EncodedJSValue \
encodedOp2) WTF_INTERNAL; </span><span class="cx"> EncodedJSValue JIT_OPERATION \
operationValueAddProfiled(JSGlobalObject*, EncodedJSValue encodedOp1, EncodedJSValue \
encodedOp2, BinaryArithProfile*) WTF_INTERNAL; </span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeMathCommoncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/MathCommon.cpp \
(259319 => 259320)</h4> <pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/MathCommon.cpp	2020-03-31 \
                23:03:29 UTC (rev 259319)
+++ trunk/Source/JavaScriptCore/runtime/MathCommon.cpp	2020-03-31 23:41:50 UTC (rev \
259320) </span><span class="lines">@@ -450,14 +450,14 @@
</span><span class="cx">     return mathPowInternal(x, y);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-int32_t JIT_OPERATION operationToInt32(double value)
</del><ins>+UCPUStrictInt32 JIT_OPERATION operationToInt32(double value)
</ins><span class="cx"> {
</span><del>-    return JSC::toInt32(value);
</del><ins>+    return toUCPUStrictInt32(JSC::toInt32(value));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-int32_t JIT_OPERATION operationToInt32SensibleSlow(double number)
</del><ins>+UCPUStrictInt32 JIT_OPERATION operationToInt32SensibleSlow(double number)
</ins><span class="cx"> {
</span><del>-    return \
toInt32Internal&lt;ToInt32Mode::AfterSensibleConversionAttempt&gt;(number); \
</del><ins>+    return \
toUCPUStrictInt32(toInt32Internal&lt;ToInt32Mode::AfterSensibleConversionAttempt&gt;(number));
 </ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if HAVE(ARM_IDIV_INSTRUCTIONS)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoreruntimeMathCommonh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/runtime/MathCommon.h \
(259319 => 259320)</h4> <pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/runtime/MathCommon.h	2020-03-31 \
                23:03:29 UTC (rev 259319)
+++ trunk/Source/JavaScriptCore/runtime/MathCommon.h	2020-03-31 23:41:50 UTC (rev \
259320) </span><span class="lines">@@ -25,6 +25,7 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><ins>+#include &quot;CPU.h&quot;
</ins><span class="cx"> #include &lt;cmath&gt;
</span><span class="cx"> #include &lt;wtf/Optional.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -32,8 +33,8 @@
</span><span class="cx"> 
</span><span class="cx"> const int32_t maxExponentForIntegerMathPow = 1000;
</span><span class="cx"> double JIT_OPERATION operationMathPow(double x, double y) \
WTF_INTERNAL; </span><del>-int32_t JIT_OPERATION operationToInt32(double) \
                WTF_INTERNAL;
-int32_t JIT_OPERATION operationToInt32SensibleSlow(double) WTF_INTERNAL;
</del><ins>+UCPUStrictInt32 JIT_OPERATION operationToInt32(double) WTF_INTERNAL;
+UCPUStrictInt32 JIT_OPERATION operationToInt32SensibleSlow(double) WTF_INTERNAL;
</ins><span class="cx"> 
</span><span class="cx"> constexpr double maxSafeInteger()
</span><span class="cx"> {
</span><span class="lines">@@ -156,6 +157,12 @@
</span><span class="cx">     return toInt32(number);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+ALWAYS_INLINE constexpr UCPUStrictInt32 toUCPUStrictInt32(int32_t value)
+{
+    // StrictInt32 format requires that higher bits are all zeros even if value is \
negative. +    return \
static_cast&lt;UCPUStrictInt32&gt;(static_cast&lt;uint32_t&gt;(value)); +}
+
</ins><span class="cx"> inline Optional&lt;double&gt; \
safeReciprocalForDivByConst(double constant) </span><span class="cx"> {
</span><span class="cx">     // No &quot;weird&quot; numbers (NaN, Denormal, etc).
</span></span></pre>
</div>
</div>

</body>
</html>



_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic