[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 <ysuzuki@apple.com>
+
+ [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 <ross.kirsling@sony.com>
</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& vm = \
globalObject->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& vm = globalObject->vm();
- CallFrame* callFrame = DECLARE_CALL_FRAME(vm);
- JITOperationPrologueCallFrameTracer tracer(vm, callFrame);
-
- ASSERT(jsDynamicCast<JSObject*>(vm, object));
-
- if (object->structure(vm)->masqueradesAsUndefined(globalObject))
- return static_cast<int32_t>(TypeofType::Undefined);
- if (object->isFunction(vm))
- return static_cast<int32_t>(TypeofType::Function);
- return static_cast<int32_t>(TypeofType::Object);
-}
-
</del><span class="cx"> char* JIT_OPERATION \
operationAllocateSimplePropertyStorageWithInitialCapacity(VM* vmPointer) </span><span \
class="cx"> { </span><span class="cx"> VM& vm = *vmPointer;
</span><span class="lines">@@ -2790,20 +2775,6 @@
</span><span class="cx"> return \
callFrame->codeBlock()->stringSwitchJumpTable(tableIndex).ctiForValue(strImpl).executableAddress<char*>();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-int32_t JIT_OPERATION \
operationSwitchStringAndGetBranchOffset(JSGlobalObject* globalObject, size_t \
tableIndex, JSString* string)
-{
- VM& vm = globalObject->vm();
- CallFrame* callFrame = DECLARE_CALL_FRAME(vm);
- JITOperationPrologueCallFrameTracer tracer(vm, callFrame);
- auto throwScope = DECLARE_THROW_SCOPE(vm);
-
- StringImpl* strImpl = string->value(globalObject).impl();
-
- RETURN_IF_EXCEPTION(throwScope, 0);
-
- return callFrame->codeBlock()->stringSwitchJumpTable(tableIndex).offsetForValue(strImpl, \
std::numeric_limits<int32_t>::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) < 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& vm = \
globalObject->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& vm = globalObject->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& vm = \
globalObject->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& vm = \
globalObject->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->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& vm = \
globalObject->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& vm = globalObject->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->publicLength();
</span><span class="lines">@@ -2982,9 +2953,9 @@
</span><span class="cx"> for (; index < 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& vm = globalObject->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(&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->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(&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->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) < 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 && \
!isSigned(type)); </span><span class="cx"> if (node->shouldSpeculateInt32() \
&& 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<typename SnippetGenerator, J_JITOperation_GJJ \
snippetSlowPathFunction> </span><span class="lines">@@ -3730,7 +3730,7 @@
</span><span class="cx">
</span><span class="cx"> bitOp(op, leftChild->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->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->asInt32() \
& 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->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->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->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->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->child1());
</span><span class="lines">@@ -4923,7 +4923,7 @@
</span><span class="cx"> resultNonZero.link(&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(&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->child1());
</span><span class="cx"> SpeculateInt32Operand op2(this, node->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(&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(&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(&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->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(&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(&m_jit);
</span><span class="cx"> nullVector.link(&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(&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->numberOfArgumentsToSkip())
</span><span class="cx"> \
m_jit.sub32(TrustedImm32(node->numberOfArgumentsToSkip()), resultGPR); \
</span><span class="cx"> done.link(&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& \
target, Optional<GPRReg> indexGPR, GPRReg lengthGPR, GPRReg resultGPR) \
</span><span class="lines">@@ -8610,7 +8610,7 @@ </span><span class="cx"> \
notFound.link(&m_jit); </span><span class="cx"> \
m_jit.move(TrustedImm32(-1), indexGPR); </span><span class="cx"> \
found.link(&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(&m_jit);
</span><span class="cx"> m_jit.move(TrustedImm32(-1), indexGPR);
</span><span class="cx"> found.link(&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->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->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->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->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->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->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->child1(), SpecBoolean, m_jit.branchTest64( \
</span><span class="cx"> JITCompiler::NonZero, result.gpr(), \
TrustedImm32(static_cast<int32_t>(~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->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(&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(&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 = [&] {
</span><span class="lines">@@ -4863,7 +4863,7 @@
</span><span class="cx"> emitBigEndianLoad();
</span><span class="cx"> done.link(&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(&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->child1().useKind() == UntypedUse, m_node->child1().useKind()); \
</span><span class="cx"> LValue argument = lowJSValue(m_node->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->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->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->loadVarargsData(); </span><span class="cx"> LValue jsArguments = \
lowJSValue(m_node->argumentsChild()); </span><span class="cx">
</span><del>- LValue length = vmCall(
- Int32, operationSizeOfVarargs, weakPointer(globalObject), jsArguments,
- m_out.constInt32(data->offset));
</del><ins>+ LValue length = m_out.castToInt32(vmCall(Int64, \
operationSizeOfVarargs, weakPointer(globalObject), jsArguments, \
m_out.constInt32(data->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->child2());
</span><span class="cx"> LValue hasInstance = \
lowJSValue(m_node->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 "C" int32_t JIT_OPERATION \
operationSwitchStringAndGetBranchOffset(JSGlobalObject* globalObject, size_t \
tableIndex, JSString* string) +{
+ VM& vm = globalObject->vm();
+ CallFrame* callFrame = DECLARE_CALL_FRAME(vm);
+ JITOperationPrologueCallFrameTracer tracer(vm, callFrame);
+ auto throwScope = DECLARE_THROW_SCOPE(vm);
+
+ StringImpl* strImpl = string->value(globalObject).impl();
+
+ RETURN_IF_EXCEPTION(throwScope, 0);
+
+ return callFrame->codeBlock()->stringSwitchJumpTable(tableIndex).offsetForValue(strImpl, \
std::numeric_limits<int32_t>::min()); +}
+
+extern "C" int32_t JIT_OPERATION \
operationTypeOfObjectAsTypeofType(JSGlobalObject* globalObject, JSCell* object) +{
+ VM& vm = globalObject->vm();
+ CallFrame* callFrame = DECLARE_CALL_FRAME(vm);
+ JITOperationPrologueCallFrameTracer tracer(vm, callFrame);
+
+ ASSERT(jsDynamicCast<JSObject*>(vm, object));
+
+ if (object->structure(vm)->masqueradesAsUndefined(globalObject))
+ return static_cast<int32_t>(TypeofType::Undefined);
+ if (object->isFunction(vm))
+ return static_cast<int32_t>(TypeofType::Function);
+ return static_cast<int32_t>(TypeofType::Object);
+}
+
</ins><span class="cx"> extern "C" void* JIT_OPERATION \
operationCompileFTLLazySlowPath(CallFrame* callFrame, unsigned index) </span><span \
class="cx"> { </span><span class="cx"> VM& vm = callFrame->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 "C"
</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()->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& vm = globalObject->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<ToInt32Mode::AfterSensibleConversionAttempt>(number); \
</del><ins>+ return \
toUCPUStrictInt32(toInt32Internal<ToInt32Mode::AfterSensibleConversionAttempt>(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 "CPU.h"
</ins><span class="cx"> #include <cmath>
</span><span class="cx"> #include <wtf/Optional.h>
</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<UCPUStrictInt32>(static_cast<uint32_t>(value)); +}
+
</ins><span class="cx"> inline Optional<double> \
safeReciprocalForDivByConst(double constant) </span><span class="cx"> {
</span><span class="cx"> // No "weird" 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