<!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>[203544] 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/203544">203544</a></dd>
<dt>Author</dt> <dd>sbarati@apple.com</dd>
<dt>Date</dt> <dd>2016-07-21 18:01:14 -0700 (Thu, 21 Jul 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>callOperation(.) variants in the DFG that explicitly take a tag/payload register should take a JSValueRegs instead
https://bugs.webkit.org/show_bug.cgi?id=160007

Reviewed by Filip Pizlo.

This patch is the first step in my plan to remove all callOperation(.) variants
in the various JITs and to unify them using a couple template variations.
The steps are as follows:
1. Replace all explicit tag/payload pairs with JSValueRegs in the DFG
2. Replace all explicit tag/payload pairs with JSValueRegs in the baseline
3. remove callOperation(.) variants and teach setupArgumentsWithExecState
   about JSValueRegs.

* dfg/DFGSpeculativeJIT.cpp:
(JSC::DFG::SpeculativeJIT::compileGetByValOnString):
(JSC::DFG::SpeculativeJIT::compileValueAdd):
(JSC::DFG::SpeculativeJIT::compileGetDynamicVar):
(JSC::DFG::SpeculativeJIT::compilePutDynamicVar):
(JSC::DFG::SpeculativeJIT::compilePutAccessorByVal):
* dfg/DFGSpeculativeJIT.h:
(JSC::DFG::SpeculativeJIT::callOperation):
* dfg/DFGSpeculativeJIT32_64.cpp:
(JSC::DFG::SpeculativeJIT::cachedGetById):
(JSC::DFG::SpeculativeJIT::cachedPutById):
(JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
(JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::generateInternal):
(JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
(JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
(JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
(JSC::DFG::SpeculativeJIT::emitCall):
(JSC::DFG::SpeculativeJIT::compileLogicalNot):
(JSC::DFG::SpeculativeJIT::emitBranch):
(JSC::DFG::SpeculativeJIT::compile):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</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>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (203543 => 203544)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2016-07-22 00:48:02 UTC (rev 203543)
+++ trunk/Source/JavaScriptCore/ChangeLog        2016-07-22 01:01:14 UTC (rev 203544)
</span><span class="lines">@@ -1,5 +1,41 @@
</span><span class="cx"> 2016-07-21  Saam Barati  &lt;sbarati@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        callOperation(.) variants in the DFG that explicitly take a tag/payload register should take a JSValueRegs instead
+        https://bugs.webkit.org/show_bug.cgi?id=160007
+
+        Reviewed by Filip Pizlo.
+
+        This patch is the first step in my plan to remove all callOperation(.) variants
+        in the various JITs and to unify them using a couple template variations.
+        The steps are as follows:
+        1. Replace all explicit tag/payload pairs with JSValueRegs in the DFG
+        2. Replace all explicit tag/payload pairs with JSValueRegs in the baseline
+        3. remove callOperation(.) variants and teach setupArgumentsWithExecState
+           about JSValueRegs.
+
+        * dfg/DFGSpeculativeJIT.cpp:
+        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
+        (JSC::DFG::SpeculativeJIT::compileValueAdd):
+        (JSC::DFG::SpeculativeJIT::compileGetDynamicVar):
+        (JSC::DFG::SpeculativeJIT::compilePutDynamicVar):
+        (JSC::DFG::SpeculativeJIT::compilePutAccessorByVal):
+        * dfg/DFGSpeculativeJIT.h:
+        (JSC::DFG::SpeculativeJIT::callOperation):
+        * dfg/DFGSpeculativeJIT32_64.cpp:
+        (JSC::DFG::SpeculativeJIT::cachedGetById):
+        (JSC::DFG::SpeculativeJIT::cachedPutById):
+        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
+        (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::generateInternal):
+        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
+        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
+        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
+        (JSC::DFG::SpeculativeJIT::emitCall):
+        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
+        (JSC::DFG::SpeculativeJIT::emitBranch):
+        (JSC::DFG::SpeculativeJIT::compile):
+
+2016-07-21  Saam Barati  &lt;sbarati@apple.com&gt;
+
</ins><span class="cx">         op_add/ValueAdd should be an IC in all JIT tiers
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=159649
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJITcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp (203543 => 203544)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp        2016-07-22 00:48:02 UTC (rev 203543)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp        2016-07-22 01:01:14 UTC (rev 203544)
</span><span class="lines">@@ -2021,7 +2021,7 @@
</span><span class="cx">             addSlowPathGenerator(
</span><span class="cx">                 slowPathCall(
</span><span class="cx">                     outOfBounds, this, operationGetByValStringInt,
</span><del>-                    resultTagReg, scratchReg, baseReg, propertyReg));
</del><ins>+                    JSValueRegs(resultTagReg, scratchReg), baseReg, propertyReg));
</ins><span class="cx"> #endif
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="lines">@@ -3415,7 +3415,7 @@
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             if (addICGenerationState-&gt;shouldSlowPathRepatch)
</span><del>-                addICGenerationState-&gt;slowPathCall = callOperation(operationValueAddOptimize, resultRegs, innerLeftRegs, innerRightRegs, addIC);
</del><ins>+                addICGenerationState-&gt;slowPathCall = callOperation(operationValueAddOptimize, resultRegs, innerLeftRegs, innerRightRegs, TrustedImmPtr(addIC));
</ins><span class="cx">             else
</span><span class="cx">                 addICGenerationState-&gt;slowPathCall = callOperation(operationValueAdd, resultRegs, innerLeftRegs, innerRightRegs);
</span><span class="cx"> 
</span><span class="lines">@@ -8096,7 +8096,7 @@
</span><span class="cx">     flushRegisters();
</span><span class="cx">     GPRFlushedCallResult2 resultTag(this);
</span><span class="cx">     GPRFlushedCallResult resultPayload(this);
</span><del>-    callOperation(operationGetDynamicVar, resultTag.gpr(), resultPayload.gpr(), scopeGPR, identifierUID(node-&gt;identifierNumber()), node-&gt;getPutInfo());
</del><ins>+    callOperation(operationGetDynamicVar, JSValueRegs(resultTag.gpr(), resultPayload.gpr()), scopeGPR, identifierUID(node-&gt;identifierNumber()), node-&gt;getPutInfo());
</ins><span class="cx">     m_jit.exceptionCheck();
</span><span class="cx">     jsValueResult(resultTag.gpr(), resultPayload.gpr(), node);
</span><span class="cx"> #endif
</span><span class="lines">@@ -8116,7 +8116,7 @@
</span><span class="cx">     GPRReg tag = value.tagGPR();
</span><span class="cx">     GPRReg payload = value.payloadGPR();
</span><span class="cx">     flushRegisters();
</span><del>-    callOperation(operationPutDynamicVar, NoResult, scopeGPR, tag, payload, identifierUID(node-&gt;identifierNumber()), node-&gt;getPutInfo());
</del><ins>+    callOperation(operationPutDynamicVar, NoResult, scopeGPR, JSValueRegs(tag, payload), identifierUID(node-&gt;identifierNumber()), node-&gt;getPutInfo());
</ins><span class="cx"> #endif
</span><span class="cx">     m_jit.exceptionCheck();
</span><span class="cx">     noResult(node);
</span><span class="lines">@@ -8142,7 +8142,7 @@
</span><span class="cx">     GPRReg accessorGPR = accessor.gpr();
</span><span class="cx"> 
</span><span class="cx">     flushRegisters();
</span><del>-    callOperation(operation, NoResult, baseGPR, subscriptRegs.tagGPR(), subscriptRegs.payloadGPR(), node-&gt;accessorAttributes(), accessorGPR);
</del><ins>+    callOperation(operation, NoResult, baseGPR, subscriptRegs, node-&gt;accessorAttributes(), accessorGPR);
</ins><span class="cx"> #endif
</span><span class="cx">     m_jit.exceptionCheck();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJITh"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h (203543 => 203544)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h        2016-07-22 00:48:02 UTC (rev 203543)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h        2016-07-22 01:01:14 UTC (rev 203544)
</span><span class="lines">@@ -1288,9 +1288,9 @@
</span><span class="cx"> 
</span><span class="cx"> #if USE(JSVALUE64)
</span><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJJJaic operation, JSValueRegs result, JSValueRegs arg1, JSValueRegs arg2, JITAddIC* addIC)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJJJaic operation, JSValueRegs result, JSValueRegs arg1, JSValueRegs arg2, TrustedImmPtr ptr)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(arg1.gpr(), arg2.gpr(), TrustedImmPtr(addIC));
</del><ins>+        m_jit.setupArgumentsWithExecState(arg1.gpr(), arg2.gpr(), ptr);
</ins><span class="cx">         return appendCallSetResult(operation, result.gpr());
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -1711,37 +1711,37 @@
</span><span class="cx">     }
</span><span class="cx"> #else // USE(JSVALUE32_64)
</span><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJJJaic operation, JSValueRegs result, JSValueRegs arg1, JSValueRegs arg2, JITAddIC* addIC)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJJJaic operation, JSValueRegs result, JSValueRegs arg1, JSValueRegs arg2, TrustedImmPtr ptr)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), arg2.payloadGPR(), arg2.tagGPR(), TrustedImmPtr(addIC));
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), arg2.payloadGPR(), arg2.tagGPR(), ptr);
</ins><span class="cx">         return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJJI operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload, UniquedStringImpl* uid)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJJI operation, JSValueRegs result, JSValueRegs arg1, JSValueRegs arg2, UniquedStringImpl* uid)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, arg2Payload, arg2Tag, TrustedImmPtr(uid));
-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), arg2.payloadGPR(), arg2.tagGPR(), TrustedImmPtr(uid));
+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(V_JITOperation_EJJJI operation, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload, GPRReg arg3Tag, GPRReg arg3Payload, UniquedStringImpl* uid)
</del><ins>+    JITCompiler::Call callOperation(V_JITOperation_EJJJI operation, JSValueRegs arg1, JSValueRegs arg2, JSValueRegs arg3, UniquedStringImpl* uid)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, arg2Payload, arg2Tag, arg3Payload, arg3Tag, TrustedImmPtr(uid));
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), arg2.payloadGPR(), arg2.tagGPR(), arg3.payloadGPR(), arg3.tagGPR(), TrustedImmPtr(uid));
</ins><span class="cx">         return appendCall(operation);
</span><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(V_JITOperation_EJJJJ operation, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload, GPRReg arg3Tag, GPRReg arg3Payload, GPRReg arg4Tag, GPRReg arg4Payload)
</del><ins>+    JITCompiler::Call callOperation(V_JITOperation_EJJJJ operation, JSValueRegs arg1, JSValueRegs arg2, JSValueRegs arg3, JSValueRegs arg4)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, arg2Payload, arg2Tag, arg3Payload, arg3Tag, arg4Payload, arg4Tag);
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), arg2.payloadGPR(), arg2.tagGPR(), arg3.payloadGPR(), arg3.tagGPR(), arg4.payloadGPR(), arg4.tagGPR());
</ins><span class="cx">         return appendCall(operation);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(V_JITOperation_EOJIUi operation, GPRReg arg1, GPRReg arg2Tag, GPRReg arg2Payload, UniquedStringImpl* impl, unsigned value)
</del><ins>+    JITCompiler::Call callOperation(V_JITOperation_EOJIUi operation, GPRReg arg1, JSValueRegs arg2, UniquedStringImpl* impl, unsigned value)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(arg1, arg2Payload, arg2Tag, TrustedImmPtr(impl), TrustedImm32(value));
</del><ins>+        m_jit.setupArgumentsWithExecState(arg1, arg2.payloadGPR(), arg2.tagGPR(), TrustedImmPtr(impl), TrustedImm32(value));
</ins><span class="cx">         return appendCall(operation);
</span><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EOIUi operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, UniquedStringImpl* impl, unsigned value)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EOIUi operation, JSValueRegs result, GPRReg arg1, UniquedStringImpl* impl, unsigned value)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1, TrustedImmPtr(impl), TrustedImm32(value));
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><span class="cx">     JITCompiler::Call callOperation(D_JITOperation_G operation, FPRReg result, JSGlobalObject* globalObject)
</span><span class="cx">     {
</span><span class="lines">@@ -1756,175 +1756,181 @@
</span><span class="cx">         m_jit.zeroExtend32ToPtr(GPRInfo::returnValueGPR, result);
</span><span class="cx">         return call;
</span><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_E operation, GPRReg resultTag, GPRReg resultPayload)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_E operation, JSValueRegs result)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsExecState();
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EP operation, GPRReg resultTag, GPRReg resultPayload, void* pointer)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EP operation, JSValueRegs result, void* pointer)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(TrustedImmPtr(pointer));
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EPP operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, void* pointer)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EPP operation, JSValueRegs result, GPRReg arg1, void* pointer)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1, TrustedImmPtr(pointer));
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EP operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EP operation, JSValueRegs result, GPRReg arg1)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1);
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EI operation, GPRReg resultTag, GPRReg resultPayload, UniquedStringImpl* uid)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EI operation, JSValueRegs result, UniquedStringImpl* uid)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(TrustedImmPtr(uid));
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EA operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EA operation, JSValueRegs result, GPRReg arg1)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1);
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EAZ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, GPRReg arg2)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EAZ operation, JSValueRegs result, GPRReg arg1, GPRReg arg2)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1, arg2);
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJ operation, JSValueRegs result, JSValueRegs arg1)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJ operation, JSValueRegs result, GPRReg arg1)
</ins><span class="cx">     {
</span><del>-        return callOperation(operation, result.tagGPR(), result.payloadGPR(), arg1.tagGPR(), arg1.payloadGPR());
-    }
-    JITCompiler::Call callOperation(J_JITOperation_EJ operation, GPRReg resultPayload, GPRReg resultTag, GPRReg arg1)
-    {
</del><span class="cx">         m_jit.setupArgumentsWithExecState(arg1);
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJC operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJC operation, JSValueRegs result, JSValueRegs arg1, GPRReg arg2)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, arg2);
-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), arg2);
+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJssZ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, GPRReg arg2)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJssZ operation, JSValueRegs result, GPRReg arg1, GPRReg arg2)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1, arg2);
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJssReo operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, GPRReg arg2)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJssReo operation, JSValueRegs result, GPRReg arg1, GPRReg arg2)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1, arg2);
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJssReoJss operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, GPRReg arg2, GPRReg arg3)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJssReoJss operation, JSValueRegs result, GPRReg arg1, GPRReg arg2, GPRReg arg3)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1, arg2, arg3);
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EPS operation, GPRReg resultTag, GPRReg resultPayload, void* pointer, size_t size)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EPS operation, JSValueRegs result, void* pointer, size_t size)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(TrustedImmPtr(pointer), TrustedImmPtr(size));
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_ESS operation, GPRReg resultTag, GPRReg resultPayload, int startConstant, int numConstants)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_ESS operation, JSValueRegs result, int startConstant, int numConstants)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(TrustedImm32(startConstant), TrustedImm32(numConstants));
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJP operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, void* pointer)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJP operation, JSValueRegs result, JSValueRegs arg1, void* pointer)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, TrustedImmPtr(pointer));
-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), TrustedImmPtr(pointer));
+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJP operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJP operation, JSValueRegs result, JSValueRegs arg1, GPRReg arg2)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, arg2);
-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), arg2);
+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EC operation, GPRReg resultTag, GPRReg resultPayload, JSCell* cell)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EC operation, JSValueRegs result, JSCell* cell)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(TrustedImmPtr(cell));
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_ECZ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, GPRReg arg2)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_ECZ operation, JSValueRegs result, GPRReg arg1, GPRReg arg2)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1, arg2);
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJscC operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, JSCell* cell)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJscC operation, JSValueRegs result, GPRReg arg1, JSCell* cell)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1, TrustedImmPtr(cell));
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJscCJ operation, GPRReg result, GPRReg arg1, JSCell* cell, GPRReg arg2Tag, GPRReg arg2Payload)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJscCJ operation, GPRReg result, GPRReg arg1, JSCell* cell, JSValueRegs arg2)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(arg1, TrustedImmPtr(cell), EABI_32BIT_DUMMY_ARG arg2Payload, arg2Tag);
</del><ins>+        m_jit.setupArgumentsWithExecState(arg1, TrustedImmPtr(cell), EABI_32BIT_DUMMY_ARG arg2.payloadGPR(), arg2.tagGPR());
</ins><span class="cx">         return appendCallSetResult(operation, result);
</span><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EGReoJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, GPRReg arg2, GPRReg arg3Tag, GPRReg arg3Payload)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EGReoJ operation, JSValueRegs result, GPRReg arg1, GPRReg arg2, JSValueRegs arg3)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(arg1, arg2, EABI_32BIT_DUMMY_ARG arg3Payload, arg3Tag);
-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        m_jit.setupArgumentsWithExecState(arg1, arg2, EABI_32BIT_DUMMY_ARG arg3.payloadGPR(), arg3.tagGPR());
+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EGReoJss operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, GPRReg arg2, GPRReg arg3)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EGReoJss operation, JSValueRegs result, GPRReg arg1, GPRReg arg2, GPRReg arg3)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1, arg2, arg3);
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_ESsiCI operation, GPRReg resultTag, GPRReg resultPayload, StructureStubInfo* stubInfo, GPRReg arg1, const UniquedStringImpl* uid)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_ESsiCI operation, JSValueRegs result, StructureStubInfo* stubInfo, GPRReg arg1, const UniquedStringImpl* uid)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(TrustedImmPtr(stubInfo), arg1, TrustedImmPtr(uid));
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_ESsiJI operation, GPRReg resultTag, GPRReg resultPayload, StructureStubInfo* stubInfo, GPRReg arg1Tag, GPRReg arg1Payload, UniquedStringImpl* uid)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_ESsiJI operation, JSValueRegs result, StructureStubInfo* stubInfo, JSValueRegs arg1, UniquedStringImpl* uid)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(TrustedImmPtr(stubInfo), arg1Payload, arg1Tag, TrustedImmPtr(uid));
-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        m_jit.setupArgumentsWithExecState(TrustedImmPtr(stubInfo), arg1.payloadGPR(), arg1.tagGPR(), TrustedImmPtr(uid));
+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_ESsiJI operation, GPRReg resultTag, GPRReg resultPayload, StructureStubInfo* stubInfo, int32_t arg1Tag, GPRReg arg1Payload, UniquedStringImpl* uid)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_ESsiJI operation, JSValueRegs result, StructureStubInfo* stubInfo, int32_t arg1Tag, GPRReg arg1Payload, UniquedStringImpl* uid)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(TrustedImmPtr(stubInfo), arg1Payload, TrustedImm32(arg1Tag), TrustedImmPtr(uid));
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EDA operation, GPRReg resultTag, GPRReg resultPayload, FPRReg arg1, GPRReg arg2)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_ESsiJI operation, JSValueRegs result, StructureStubInfo* stubInfo, GPRReg arg1Tag, GPRReg arg1Payload, UniquedStringImpl* uid)
</ins><span class="cx">     {
</span><ins>+        m_jit.setupArgumentsWithExecState(TrustedImmPtr(stubInfo), arg1Payload, arg1Tag, TrustedImmPtr(uid));
+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
+    }
+    JITCompiler::Call callOperation(J_JITOperation_EDA operation, JSValueRegs result, FPRReg arg1, GPRReg arg2)
+    {
</ins><span class="cx">         m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1, arg2);
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJA operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJA operation, JSValueRegs result, JSValueRegs arg1, GPRReg arg2)
</ins><span class="cx">     {
</span><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), arg2);
+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
+    }
+    JITCompiler::Call callOperation(J_JITOperation_EJA operation, JSValueRegs result, TrustedImm32 arg1Tag, GPRReg arg1Payload, GPRReg arg2)
+    {
</ins><span class="cx">         m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, arg2);
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJA operation, GPRReg resultTag, GPRReg resultPayload, TrustedImm32 arg1Tag, GPRReg arg1Payload, GPRReg arg2)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJA operation, JSValueRegs result, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, arg2);
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJ operation, JSValueRegs result, JSValueRegs arg1)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag);
-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR());
+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EZ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EZ operation, JSValueRegs result, GPRReg arg1)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1);
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EZ operation, GPRReg resultTag, GPRReg resultPayload, int32_t arg1)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EZ operation, JSValueRegs result, int32_t arg1)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(TrustedImm32(arg1));
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EZIcfZ operation, GPRReg resultTag, GPRReg resultPayload, int32_t arg1, InlineCallFrame* inlineCallFrame, GPRReg arg2)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EZIcfZ operation, JSValueRegs result, int32_t arg1, InlineCallFrame* inlineCallFrame, GPRReg arg2)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(TrustedImm32(arg1), TrustedImmPtr(inlineCallFrame), arg2);
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EZZ operation, GPRReg resultTag, GPRReg resultPayload, int32_t arg1, GPRReg arg2)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EZZ operation, JSValueRegs result, int32_t arg1, GPRReg arg2)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(TrustedImm32(arg1), arg2);
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     JITCompiler::Call callOperation(P_JITOperation_EJS operation, GPRReg result, JSValueRegs value, size_t index)
</span><span class="lines">@@ -1933,82 +1939,62 @@
</span><span class="cx">         return appendCallSetResult(operation, result);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(P_JITOperation_EStJ operation, GPRReg result, Structure* structure, GPRReg arg2Tag, GPRReg arg2Payload)
</del><ins>+    JITCompiler::Call callOperation(P_JITOperation_EStJ operation, GPRReg result, Structure* structure, JSValueRegs arg2)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(TrustedImmPtr(structure), arg2Payload, arg2Tag);
</del><ins>+        m_jit.setupArgumentsWithExecState(TrustedImmPtr(structure), arg2.payloadGPR(), arg2.tagGPR());
</ins><span class="cx">         return appendCallSetResult(operation, result);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(C_JITOperation_EGJ operation, GPRReg result, JSGlobalObject* globalObject, GPRReg arg1Tag, GPRReg arg1Payload)
-    {
-        m_jit.setupArgumentsWithExecState(TrustedImmPtr(globalObject), arg1Payload, arg1Tag);
-        return appendCallSetResult(operation, result);
-    }
-
</del><span class="cx">     JITCompiler::Call callOperation(C_JITOperation_EGJ operation, GPRReg result, JSGlobalObject* globalObject, JSValueRegs arg1)
</span><span class="cx">     {
</span><del>-        return callOperation(operation, result, globalObject, arg1.tagGPR(), arg1.payloadGPR());
-    }
-
-    JITCompiler::Call callOperation(C_JITOperation_EJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload)
-    {
-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag);
</del><ins>+        m_jit.setupArgumentsWithExecState(TrustedImmPtr(globalObject), arg1.payloadGPR(), arg1.tagGPR());
</ins><span class="cx">         return appendCallSetResult(operation, result);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(C_JITOperation_EJJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload)
</del><ins>+    JITCompiler::Call callOperation(C_JITOperation_EJ operation, GPRReg result, JSValueRegs arg1)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, arg2Payload, arg2Tag);
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR());
</ins><span class="cx">         return appendCallSetResult(operation, result);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(C_JITOperation_EJJJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload, GPRReg arg3Tag, GPRReg arg3Payload)
</del><ins>+    JITCompiler::Call callOperation(C_JITOperation_EJJ operation, GPRReg result, JSValueRegs arg1, JSValueRegs arg2)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, arg2Payload, arg2Tag, arg3Payload, arg3Tag);
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), arg2.payloadGPR(), arg2.tagGPR());
</ins><span class="cx">         return appendCallSetResult(operation, result);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(S_JITOperation_EJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload)
</del><ins>+    JITCompiler::Call callOperation(C_JITOperation_EJJJ operation, GPRReg result, JSValueRegs arg1, JSValueRegs arg2, JSValueRegs arg3)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag);
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), arg2.payloadGPR(), arg2.tagGPR(), arg3.payloadGPR(), arg3.tagGPR());
</ins><span class="cx">         return appendCallSetResult(operation, result);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     JITCompiler::Call callOperation(S_JITOperation_EJ operation, GPRReg result, JSValueRegs arg1)
</span><span class="cx">     {
</span><del>-        return callOperation(operation, result, arg1.tagGPR(), arg1.payloadGPR());
-    }
-
-    JITCompiler::Call callOperation(S_JITOperation_EJI operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload, UniquedStringImpl* uid)
-    {
-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, TrustedImmPtr(uid));
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR());
</ins><span class="cx">         return appendCallSetResult(operation, result);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(S_JITOperation_EJI operation, GPRReg result, JSValueRegs arg1Regs, UniquedStringImpl* uid)
</del><ins>+    JITCompiler::Call callOperation(S_JITOperation_EJI operation, GPRReg result, JSValueRegs arg1, UniquedStringImpl* uid)
</ins><span class="cx">     {
</span><del>-        return callOperation(operation, result, arg1Regs.tagGPR(), arg1Regs.payloadGPR(), uid);
-    }
-
-    JITCompiler::Call callOperation(S_JITOperation_EJJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload)
-    {
-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, SH4_32BIT_DUMMY_ARG arg2Payload, arg2Tag);
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), TrustedImmPtr(uid));
</ins><span class="cx">         return appendCallSetResult(operation, result);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     JITCompiler::Call callOperation(S_JITOperation_EJJ operation, GPRReg result, JSValueRegs arg1, JSValueRegs arg2)
</span><span class="cx">     {
</span><del>-        return callOperation(operation, result, arg1.tagGPR(), arg1.payloadGPR(), arg2.tagGPR(), arg2.payloadGPR());
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), SH4_32BIT_DUMMY_ARG arg2.payloadGPR(), arg2.tagGPR());
+        return appendCallSetResult(operation, result);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(S_JITOperation_EGJJ operation, GPRReg result, GPRReg arg1, GPRReg arg2Tag, GPRReg arg2Payload, GPRReg arg3Tag, GPRReg arg3Payload)
</del><ins>+    JITCompiler::Call callOperation(S_JITOperation_EGJJ operation, GPRReg result, GPRReg arg1, JSValueRegs arg2, JSValueRegs arg3)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(arg1, arg2Payload, arg2Tag, SH4_32BIT_DUMMY_ARG arg3Payload, arg3Tag);
</del><ins>+        m_jit.setupArgumentsWithExecState(arg1, arg2.payloadGPR(), arg2.tagGPR(), SH4_32BIT_DUMMY_ARG arg3.payloadGPR(), arg3.tagGPR());
</ins><span class="cx">         return appendCallSetResult(operation, result);
</span><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(S_JITOperation_EGReoJ operation, GPRReg result, GPRReg arg1, GPRReg arg2, GPRReg arg3Tag, GPRReg arg3Payload)
</del><ins>+    JITCompiler::Call callOperation(S_JITOperation_EGReoJ operation, GPRReg result, GPRReg arg1, GPRReg arg2, JSValueRegs arg3)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(arg1, arg2, EABI_32BIT_DUMMY_ARG arg3Payload, arg3Tag);
</del><ins>+        m_jit.setupArgumentsWithExecState(arg1, arg2, EABI_32BIT_DUMMY_ARG arg3.payloadGPR(), arg3.tagGPR());
</ins><span class="cx">         return appendCallSetResult(operation, result);
</span><span class="cx">     }
</span><span class="cx">     JITCompiler::Call callOperation(S_JITOperation_EGReoJss operation, GPRReg result, GPRReg arg1, GPRReg arg2, GPRReg arg3)
</span><span class="lines">@@ -2016,55 +2002,46 @@
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1, arg2, arg3);
</span><span class="cx">         return appendCallSetResult(operation, result);
</span><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJJ operation, JSValueRegs result, JSValueRegs arg1, JSValueRegs arg2)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, SH4_32BIT_DUMMY_ARG arg2Payload, arg2Tag);
-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), SH4_32BIT_DUMMY_ARG arg2.payloadGPR(), arg2.tagGPR());
+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EGJJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, GPRReg arg2Tag, GPRReg arg2Payload, GPRReg arg3Tag, GPRReg arg3Payload)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EGJJ operation, JSValueRegs result, GPRReg arg1, JSValueRegs arg2, JSValueRegs arg3)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(arg1, arg2Payload, arg2Tag, SH4_32BIT_DUMMY_ARG arg3Payload, arg3Tag);
-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        m_jit.setupArgumentsWithExecState(arg1, arg2.payloadGPR(), arg2.tagGPR(), SH4_32BIT_DUMMY_ARG arg3.payloadGPR(), arg3.tagGPR());
+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, MacroAssembler::TrustedImm32 imm)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJJ operation, JSValueRegs result, JSValueRegs arg1, MacroAssembler::TrustedImm32 imm)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, SH4_32BIT_DUMMY_ARG imm, TrustedImm32(JSValue::Int32Tag));
-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), SH4_32BIT_DUMMY_ARG imm, TrustedImm32(JSValue::Int32Tag));
+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJJ operation, GPRReg resultTag, GPRReg resultPayload, MacroAssembler::TrustedImm32 imm, GPRReg arg2Tag, GPRReg arg2Payload)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJJ operation, JSValueRegs result, MacroAssembler::TrustedImm32 imm, JSValueRegs arg2)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG imm, TrustedImm32(JSValue::Int32Tag), SH4_32BIT_DUMMY_ARG arg2Payload, arg2Tag);
-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG imm, TrustedImm32(JSValue::Int32Tag), SH4_32BIT_DUMMY_ARG arg2.payloadGPR(), arg2.tagGPR());
+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJJ operation, JSValueRegs result, JSValueRegs arg1, JSValueRegs arg2)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_EJJJ operation, JSValueRegs result, JSValueRegs arg1, JSValueRegs arg2, JSValueRegs arg3)
</ins><span class="cx">     {
</span><del>-        return callOperation(operation, result.tagGPR(), result.payloadGPR(), arg1.tagGPR(), arg1.payloadGPR(), arg2.tagGPR(), arg2.payloadGPR());
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), arg2.payloadGPR(), arg2.tagGPR(), arg3.payloadGPR(), arg3.tagGPR());
+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_EJJJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload, GPRReg arg3Tag, GPRReg arg3Payload)
-    {
-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, arg2Payload, arg2Tag, arg3Payload, arg3Tag);
-        return appendCallSetResult(operation, resultPayload, resultTag);
-    }
</del><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_ECJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, GPRReg arg2Tag, GPRReg arg2Payload)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_ECJ operation, JSValueRegs result, GPRReg arg1, JSValueRegs arg2)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(arg1, arg2Payload, arg2Tag);
-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        m_jit.setupArgumentsWithExecState(arg1, arg2.payloadGPR(), arg2.tagGPR());
+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_ECJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, GPRReg arg2Payload)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_ECJ operation, JSValueRegs result, GPRReg arg1, GPRReg arg2Payload)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1, arg2Payload, MacroAssembler::TrustedImm32(JSValue::CellTag));
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
-    }
-    JITCompiler::Call callOperation(J_JITOperation_ECJ operation, JSValueRegs result, GPRReg arg1, JSValueRegs arg2)
-    {
-        m_jit.setupArgumentsWithExecState(arg1, arg2.payloadGPR(), arg2.tagGPR());
</del><span class="cx">         return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</span><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(J_JITOperation_ECC operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, GPRReg arg2)
</del><ins>+    JITCompiler::Call callOperation(J_JITOperation_ECC operation, JSValueRegs result, GPRReg arg1, GPRReg arg2)
</ins><span class="cx">     {
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1, arg2);
</span><del>-        return appendCallSetResult(operation, resultPayload, resultTag);
</del><ins>+        return appendCallSetResult(operation, result.payloadGPR(), result.tagGPR());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     JITCompiler::Call callOperation(V_JITOperation_EOZD operation, GPRReg arg1, GPRReg arg2, FPRReg arg3)
</span><span class="lines">@@ -2073,20 +2050,20 @@
</span><span class="cx">         return appendCall(operation);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(V_JITOperation_EJ operation, GPRReg arg1Tag, GPRReg arg1Payload)
</del><ins>+    JITCompiler::Call callOperation(V_JITOperation_EJ operation, JSValueRegs arg1)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag);
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR());
</ins><span class="cx">         return appendCall(operation);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(V_JITOperation_EJPP operation, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2, void* pointer)
</del><ins>+    JITCompiler::Call callOperation(V_JITOperation_EJPP operation, JSValueRegs arg1, GPRReg arg2, void* pointer)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, arg2, TrustedImmPtr(pointer));
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), arg2, TrustedImmPtr(pointer));
</ins><span class="cx">         return appendCall(operation);
</span><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(V_JITOperation_ESsiJJI operation, StructureStubInfo* stubInfo, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Payload, UniquedStringImpl* uid)
</del><ins>+    JITCompiler::Call callOperation(V_JITOperation_ESsiJJI operation, StructureStubInfo* stubInfo, JSValueRegs arg1, GPRReg arg2Payload, UniquedStringImpl* uid)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(TrustedImmPtr(stubInfo), arg1Payload, arg1Tag, arg2Payload, TrustedImm32(JSValue::CellTag), TrustedImmPtr(uid));
</del><ins>+        m_jit.setupArgumentsWithExecState(TrustedImmPtr(stubInfo), arg1.payloadGPR(), arg1.tagGPR(), arg2Payload, TrustedImm32(JSValue::CellTag), TrustedImmPtr(uid));
</ins><span class="cx">         return appendCall(operation);
</span><span class="cx">     }
</span><span class="cx">     JITCompiler::Call callOperation(V_JITOperation_ECJ operation, GPRReg arg1, JSValueRegs arg2)
</span><span class="lines">@@ -2094,21 +2071,21 @@
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1, arg2.payloadGPR(), arg2.tagGPR());
</span><span class="cx">         return appendCall(operation);
</span><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(V_JITOperation_ECJJ operation, GPRReg arg1, GPRReg arg2Tag, GPRReg arg2Payload, GPRReg arg3Tag, GPRReg arg3Payload)
</del><ins>+    JITCompiler::Call callOperation(V_JITOperation_ECJJ operation, GPRReg arg1, JSValueRegs arg2, JSValueRegs arg3)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(arg1, arg2Payload, arg2Tag, arg3Payload, arg3Tag);
</del><ins>+        m_jit.setupArgumentsWithExecState(arg1, arg2.payloadGPR(), arg2.tagGPR(), arg3.payloadGPR(), arg3.tagGPR());
</ins><span class="cx">         return appendCall(operation);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(V_JITOperation_EPZJ operation, GPRReg arg1, GPRReg arg2, GPRReg arg3Tag, GPRReg arg3Payload)
</del><ins>+    JITCompiler::Call callOperation(V_JITOperation_EPZJ operation, GPRReg arg1, GPRReg arg2, JSValueRegs arg3)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(arg1, arg2, EABI_32BIT_DUMMY_ARG SH4_32BIT_DUMMY_ARG arg3Payload, arg3Tag);
</del><ins>+        m_jit.setupArgumentsWithExecState(arg1, arg2, EABI_32BIT_DUMMY_ARG SH4_32BIT_DUMMY_ARG arg3.payloadGPR(), arg3.tagGPR());
</ins><span class="cx">         return appendCall(operation);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(V_JITOperation_EOZJ operation, GPRReg arg1, GPRReg arg2, GPRReg arg3Tag, GPRReg arg3Payload)
</del><ins>+    JITCompiler::Call callOperation(V_JITOperation_EOZJ operation, GPRReg arg1, GPRReg arg2, JSValueRegs arg3)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(arg1, arg2, EABI_32BIT_DUMMY_ARG SH4_32BIT_DUMMY_ARG arg3Payload, arg3Tag);
</del><ins>+        m_jit.setupArgumentsWithExecState(arg1, arg2, EABI_32BIT_DUMMY_ARG SH4_32BIT_DUMMY_ARG arg3.payloadGPR(), arg3.tagGPR());
</ins><span class="cx">         return appendCall(operation);
</span><span class="cx">     }
</span><span class="cx">     JITCompiler::Call callOperation(V_JITOperation_EOZJ operation, GPRReg arg1, GPRReg arg2, TrustedImm32 arg3Tag, GPRReg arg3Payload)
</span><span class="lines">@@ -2116,40 +2093,41 @@
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1, arg2, EABI_32BIT_DUMMY_ARG SH4_32BIT_DUMMY_ARG arg3Payload, arg3Tag);
</span><span class="cx">         return appendCall(operation);
</span><span class="cx">     }
</span><del>-
-    JITCompiler::Call callOperation(Z_JITOperation_EJOJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2, GPRReg arg3Tag, GPRReg arg3Payload)
</del><ins>+    JITCompiler::Call callOperation(V_JITOperation_EOZJ operation, GPRReg arg1, GPRReg arg2, GPRReg arg3Tag, GPRReg arg3Payload)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, arg2, EABI_32BIT_DUMMY_ARG arg3Payload, arg3Tag);
-        return appendCallSetResult(operation, result);
</del><ins>+        m_jit.setupArgumentsWithExecState(arg1, arg2, EABI_32BIT_DUMMY_ARG SH4_32BIT_DUMMY_ARG arg3Payload, arg3Tag);
+        return appendCall(operation);
</ins><span class="cx">     }
</span><ins>+
</ins><span class="cx">     JITCompiler::Call callOperation(Z_JITOperation_EJOJ operation, GPRReg result, JSValueRegs arg1, GPRReg arg2, JSValueRegs arg3)
</span><span class="cx">     {
</span><del>-        return callOperation(operation, result, arg1.tagGPR(), arg1.payloadGPR(), arg2, arg3.tagGPR(), arg3.payloadGPR());
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), arg2, EABI_32BIT_DUMMY_ARG arg3.payloadGPR(), arg3.tagGPR());
+        return appendCallSetResult(operation, result);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><del>-    JITCompiler::Call callOperation(Z_JITOperation_EJZZ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload, unsigned arg2, unsigned arg3)
</del><ins>+    JITCompiler::Call callOperation(Z_JITOperation_EJZZ operation, GPRReg result, JSValueRegs arg1, unsigned arg2, unsigned arg3)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG  arg1Payload, arg1Tag, TrustedImm32(arg2), TrustedImm32(arg3));
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG  arg1.payloadGPR(), arg1.tagGPR(), TrustedImm32(arg2), TrustedImm32(arg3));
</ins><span class="cx">         return appendCallSetResult(operation, result);
</span><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(F_JITOperation_EFJZZ operation, GPRReg result, GPRReg arg1, GPRReg arg2Tag, GPRReg arg2Payload, unsigned arg3, GPRReg arg4)
</del><ins>+    JITCompiler::Call callOperation(F_JITOperation_EFJZZ operation, GPRReg result, GPRReg arg1, JSValueRegs arg2, unsigned arg3, GPRReg arg4)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(arg1, arg2Payload, arg2Tag, TrustedImm32(arg3), arg4);
</del><ins>+        m_jit.setupArgumentsWithExecState(arg1, arg2.payloadGPR(), arg2.tagGPR(), TrustedImm32(arg3), arg4);
</ins><span class="cx">         return appendCallSetResult(operation, result);
</span><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(Z_JITOperation_EJZ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload, unsigned arg2)
</del><ins>+    JITCompiler::Call callOperation(Z_JITOperation_EJZ operation, GPRReg result, JSValueRegs arg1, unsigned arg2)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, TrustedImm32(arg2));
</del><ins>+        m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1.payloadGPR(), arg1.tagGPR(), TrustedImm32(arg2));
</ins><span class="cx">         return appendCallSetResult(operation, result);
</span><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(V_JITOperation_EZJZZZ operation, unsigned arg1, GPRReg arg2Tag, GPRReg arg2Payload, unsigned arg3, GPRReg arg4, unsigned arg5)
</del><ins>+    JITCompiler::Call callOperation(V_JITOperation_EZJZZZ operation, unsigned arg1, JSValueRegs arg2, unsigned arg3, GPRReg arg4, unsigned arg5)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(TrustedImm32(arg1), arg2Payload, arg2Tag, TrustedImm32(arg3), arg4, TrustedImm32(arg5));
</del><ins>+        m_jit.setupArgumentsWithExecState(TrustedImm32(arg1), arg2.payloadGPR(), arg2.tagGPR(), TrustedImm32(arg3), arg4, TrustedImm32(arg5));
</ins><span class="cx">         return appendCall(operation);
</span><span class="cx">     }
</span><del>-    JITCompiler::Call callOperation(V_JITOperation_ECJZC operation, GPRReg arg1, GPRReg arg2Tag, GPRReg arg2Payload, int32_t arg3, GPRReg arg4)
</del><ins>+    JITCompiler::Call callOperation(V_JITOperation_ECJZC operation, GPRReg arg1, JSValueRegs arg2, int32_t arg3, GPRReg arg4)
</ins><span class="cx">     {
</span><del>-        m_jit.setupArgumentsWithExecState(arg1, arg2Payload, arg2Tag, TrustedImm32(arg3), arg4);
</del><ins>+        m_jit.setupArgumentsWithExecState(arg1, arg2.payloadGPR(), arg2.tagGPR(), TrustedImm32(arg3), arg4);
</ins><span class="cx">         return appendCall(operation);
</span><span class="cx">     }
</span><span class="cx">     JITCompiler::Call callOperation(V_JITOperation_ECIZCC operation, GPRReg arg1, UniquedStringImpl* identOp2, int32_t op3, GPRReg arg4, GPRReg arg5)
</span><span class="lines">@@ -2157,53 +2135,6 @@
</span><span class="cx">         m_jit.setupArgumentsWithExecState(arg1, TrustedImmPtr(identOp2), TrustedImm32(op3), arg4, arg5);
</span><span class="cx">         return appendCall(operation);
</span><span class="cx">     }
</span><del>-    
-    template&lt;typename FunctionType&gt;
-    JITCompiler::Call callOperation(
-        FunctionType operation, JSValueRegs result)
-    {
-        return callOperation(operation, result.tagGPR(), result.payloadGPR());
-    }
-    template&lt;typename FunctionType, typename ArgumentType1&gt;
-    JITCompiler::Call callOperation(
-        FunctionType operation, JSValueRegs result, ArgumentType1 arg1)
-    {
-        return callOperation(operation, result.tagGPR(), result.payloadGPR(), arg1);
-    }
-    template&lt;typename FunctionType, typename ArgumentType1, typename ArgumentType2&gt;
-    JITCompiler::Call callOperation(
-        FunctionType operation, JSValueRegs result, ArgumentType1 arg1, ArgumentType2 arg2)
-    {
-        return callOperation(operation, result.tagGPR(), result.payloadGPR(), arg1, arg2);
-    }
-    template&lt;
-        typename FunctionType, typename ArgumentType1, typename ArgumentType2,
-        typename ArgumentType3&gt;
-    JITCompiler::Call callOperation(
-        FunctionType operation, JSValueRegs result, ArgumentType1 arg1, ArgumentType2 arg2,
-        ArgumentType3 arg3)
-    {
-        return callOperation(operation, result.tagGPR(), result.payloadGPR(), arg1, arg2, arg3);
-    }
-    template&lt;
-        typename FunctionType, typename ArgumentType1, typename ArgumentType2,
-        typename ArgumentType3, typename ArgumentType4&gt;
-    JITCompiler::Call callOperation(
-        FunctionType operation, JSValueRegs result, ArgumentType1 arg1, ArgumentType2 arg2,
-        ArgumentType3 arg3, ArgumentType4 arg4)
-    {
-        return callOperation(operation, result.tagGPR(), result.payloadGPR(), arg1, arg2, arg3, arg4);
-    }
-    template&lt;
-        typename FunctionType, typename ArgumentType1, typename ArgumentType2,
-        typename ArgumentType3, typename ArgumentType4, typename ArgumentType5&gt;
-    JITCompiler::Call callOperation(
-        FunctionType operation, JSValueRegs result, ArgumentType1 arg1, ArgumentType2 arg2,
-        ArgumentType3 arg3, ArgumentType4 arg4, ArgumentType5 arg5)
-    {
-        return callOperation(
-            operation, result.tagGPR(), result.payloadGPR(), arg1, arg2, arg3, arg4, arg5);
-    }
</del><span class="cx"> #endif // USE(JSVALUE32_64)
</span><span class="cx">     
</span><span class="cx"> #if !defined(NDEBUG) &amp;&amp; !CPU(ARM) &amp;&amp; !CPU(MIPS) &amp;&amp; !CPU(SH4)
</span></span></pre></div>
<a id="trunkSourceJavaScriptCoredfgDFGSpeculativeJIT32_64cpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp (203543 => 203544)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp        2016-07-22 00:48:02 UTC (rev 203543)
+++ trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp        2016-07-22 01:01:14 UTC (rev 203544)
</span><span class="lines">@@ -223,8 +223,7 @@
</span><span class="cx">     } else {
</span><span class="cx">         slowPath = slowPathCall(
</span><span class="cx">             slowCases, this, getByIdFunction,
</span><del>-            JSValueRegs(resultTagGPR, resultPayloadGPR), gen.stubInfo(), baseTagGPROrNone,
-            basePayloadGPR, identifierUID(identifierNumber));
</del><ins>+            JSValueRegs(resultTagGPR, resultPayloadGPR), gen.stubInfo(), JSValueRegs(baseTagGPROrNone, basePayloadGPR), identifierUID(identifierNumber));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     m_jit.addGetById(gen, slowPath.get());
</span><span class="lines">@@ -253,8 +252,8 @@
</span><span class="cx">     slowCases.append(gen.slowPathJump());
</span><span class="cx"> 
</span><span class="cx">     auto slowPath = slowPathCall(
</span><del>-        slowCases, this, gen.slowPathFunction(), NoResult, gen.stubInfo(), valueTagGPR,
-        valuePayloadGPR, basePayloadGPR, identifierUID(identifierNumber));
</del><ins>+        slowCases, this, gen.slowPathFunction(), NoResult, gen.stubInfo(), JSValueRegs(valueTagGPR, valuePayloadGPR),
+        basePayloadGPR, identifierUID(identifierNumber));
</ins><span class="cx"> 
</span><span class="cx">     m_jit.addPutById(gen, slowPath.get());
</span><span class="cx">     addSlowPathGenerator(WTFMove(slowPath));
</span><span class="lines">@@ -397,6 +396,8 @@
</span><span class="cx"> 
</span><span class="cx">     JSValueOperand arg1(this, node-&gt;child1());
</span><span class="cx">     JSValueOperand arg2(this, node-&gt;child2());
</span><ins>+    JSValueRegs arg1Regs = arg1.jsValueRegs();
+    JSValueRegs arg2Regs = arg2.jsValueRegs();
</ins><span class="cx">     GPRReg arg1TagGPR = arg1.tagGPR();
</span><span class="cx">     GPRReg arg1PayloadGPR = arg1.payloadGPR();
</span><span class="cx">     GPRReg arg2TagGPR = arg2.tagGPR();
</span><span class="lines">@@ -412,7 +413,7 @@
</span><span class="cx">         arg2.use();
</span><span class="cx"> 
</span><span class="cx">         flushRegisters();
</span><del>-        callOperation(helperFunction, resultGPR, arg1TagGPR, arg1PayloadGPR, arg2TagGPR, arg2PayloadGPR);
</del><ins>+        callOperation(helperFunction, resultGPR, arg1Regs, arg2Regs);
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx"> 
</span><span class="cx">         branchTest32(callResultCondition, resultGPR, taken);
</span><span class="lines">@@ -436,7 +437,7 @@
</span><span class="cx">             slowPath.link(&amp;m_jit);
</span><span class="cx">     
</span><span class="cx">             silentSpillAllRegisters(resultGPR);
</span><del>-            callOperation(helperFunction, resultGPR, arg1TagGPR, arg1PayloadGPR, arg2TagGPR, arg2PayloadGPR);
</del><ins>+            callOperation(helperFunction, resultGPR, arg1Regs, arg2Regs);
</ins><span class="cx">             m_jit.exceptionCheck();
</span><span class="cx">             silentFillAllRegisters(resultGPR);
</span><span class="cx">         
</span><span class="lines">@@ -473,8 +474,7 @@
</span><span class="cx">         this-&gt;setUp(jit);
</span><span class="cx">         this-&gt;recordCall(
</span><span class="cx">             jit-&gt;callOperation(
</span><del>-                this-&gt;m_function, this-&gt;m_result, m_arg1Tag, m_arg1Payload, m_arg2Tag,
-                m_arg2Payload));
</del><ins>+                this-&gt;m_function, this-&gt;m_result, JSValueRegs(m_arg1Tag, m_arg1Payload), JSValueRegs(m_arg2Tag, m_arg2Payload)));
</ins><span class="cx">         jit-&gt;m_jit.and32(JITCompiler::TrustedImm32(1), this-&gt;m_result);
</span><span class="cx">         this-&gt;tearDown(jit);
</span><span class="cx">     }
</span><span class="lines">@@ -505,7 +505,7 @@
</span><span class="cx">         arg2.use();
</span><span class="cx"> 
</span><span class="cx">         flushRegisters();
</span><del>-        callOperation(helperFunction, resultPayloadGPR, arg1TagGPR, arg1PayloadGPR, arg2TagGPR, arg2PayloadGPR);
</del><ins>+        callOperation(helperFunction, resultPayloadGPR, arg1.jsValueRegs(), arg2.jsValueRegs());
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx">         
</span><span class="cx">         booleanResult(resultPayloadGPR, node, UseChildrenCalledExplicitly);
</span><span class="lines">@@ -549,10 +549,10 @@
</span><span class="cx">     
</span><span class="cx">     JSValueOperand arg1(this, node-&gt;child1());
</span><span class="cx">     JSValueOperand arg2(this, node-&gt;child2());
</span><del>-    GPRReg arg1TagGPR = arg1.tagGPR();
</del><span class="cx">     GPRReg arg1PayloadGPR = arg1.payloadGPR();
</span><del>-    GPRReg arg2TagGPR = arg2.tagGPR();
</del><span class="cx">     GPRReg arg2PayloadGPR = arg2.payloadGPR();
</span><ins>+    JSValueRegs arg1Regs = arg1.jsValueRegs();
+    JSValueRegs arg2Regs = arg2.jsValueRegs();
</ins><span class="cx">     
</span><span class="cx">     GPRTemporary resultPayload(this, Reuse, arg1, PayloadWord);
</span><span class="cx">     GPRReg resultPayloadGPR = resultPayload.gpr();
</span><span class="lines">@@ -566,7 +566,7 @@
</span><span class="cx">         branchPtr(JITCompiler::Equal, arg1PayloadGPR, arg2PayloadGPR, invert ? notTaken : taken);
</span><span class="cx">         
</span><span class="cx">         silentSpillAllRegisters(resultPayloadGPR);
</span><del>-        callOperation(operationCompareStrictEqCell, resultPayloadGPR, arg1TagGPR, arg1PayloadGPR, arg2TagGPR, arg2PayloadGPR);
</del><ins>+        callOperation(operationCompareStrictEqCell, resultPayloadGPR, arg1Regs, arg2Regs);
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx">         silentFillAllRegisters(resultPayloadGPR);
</span><span class="cx">         
</span><span class="lines">@@ -575,7 +575,7 @@
</span><span class="cx">         // FIXME: Add fast paths for twoCells, number etc.
</span><span class="cx"> 
</span><span class="cx">         silentSpillAllRegisters(resultPayloadGPR);
</span><del>-        callOperation(operationCompareStrictEq, resultPayloadGPR, arg1TagGPR, arg1PayloadGPR, arg2TagGPR, arg2PayloadGPR);
</del><ins>+        callOperation(operationCompareStrictEq, resultPayloadGPR, arg1Regs, arg2Regs);
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx">         silentFillAllRegisters(resultPayloadGPR);
</span><span class="cx">         
</span><span class="lines">@@ -589,10 +589,10 @@
</span><span class="cx"> {
</span><span class="cx">     JSValueOperand arg1(this, node-&gt;child1());
</span><span class="cx">     JSValueOperand arg2(this, node-&gt;child2());
</span><del>-    GPRReg arg1TagGPR = arg1.tagGPR();
</del><span class="cx">     GPRReg arg1PayloadGPR = arg1.payloadGPR();
</span><del>-    GPRReg arg2TagGPR = arg2.tagGPR();
</del><span class="cx">     GPRReg arg2PayloadGPR = arg2.payloadGPR();
</span><ins>+    JSValueRegs arg1Regs = arg1.jsValueRegs();
+    JSValueRegs arg2Regs = arg2.jsValueRegs();
</ins><span class="cx">     
</span><span class="cx">     GPRTemporary resultPayload(this, Reuse, arg1, PayloadWord);
</span><span class="cx">     GPRReg resultPayloadGPR = resultPayload.gpr();
</span><span class="lines">@@ -612,7 +612,7 @@
</span><span class="cx">         notEqualCase.link(&amp;m_jit);
</span><span class="cx">         
</span><span class="cx">         silentSpillAllRegisters(resultPayloadGPR);
</span><del>-        callOperation(operationCompareStrictEqCell, resultPayloadGPR, arg1TagGPR, arg1PayloadGPR, arg2TagGPR, arg2PayloadGPR);
</del><ins>+        callOperation(operationCompareStrictEqCell, resultPayloadGPR, arg1Regs, arg2Regs);
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx">         silentFillAllRegisters(resultPayloadGPR);
</span><span class="cx">         
</span><span class="lines">@@ -623,7 +623,7 @@
</span><span class="cx">         // FIXME: Add fast paths.
</span><span class="cx"> 
</span><span class="cx">         silentSpillAllRegisters(resultPayloadGPR);
</span><del>-        callOperation(operationCompareStrictEq, resultPayloadGPR, arg1TagGPR, arg1PayloadGPR, arg2TagGPR, arg2PayloadGPR);
</del><ins>+        callOperation(operationCompareStrictEq, resultPayloadGPR, arg1Regs, arg2Regs);
</ins><span class="cx">         silentFillAllRegisters(resultPayloadGPR);
</span><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx">         
</span><span class="lines">@@ -783,7 +783,7 @@
</span><span class="cx"> 
</span><span class="cx">             // Right now, arguments is in argumentsTagGPR/argumentsPayloadGPR and the register file is
</span><span class="cx">             // flushed.
</span><del>-            callOperation(operationSizeFrameForVarargs, GPRInfo::returnValueGPR, argumentsTagGPR, argumentsPayloadGPR, numUsedStackSlots, data-&gt;firstVarArgOffset);
</del><ins>+            callOperation(operationSizeFrameForVarargs, GPRInfo::returnValueGPR, JSValueRegs(argumentsTagGPR, argumentsPayloadGPR), numUsedStackSlots, data-&gt;firstVarArgOffset);
</ins><span class="cx">             m_jit.exceptionCheck();
</span><span class="cx">             
</span><span class="cx">             // Now we have the argument count of the callee frame, but we've lost the arguments operand.
</span><span class="lines">@@ -793,7 +793,7 @@
</span><span class="cx">             emitSetVarargsFrame(m_jit, GPRInfo::returnValueGPR, false, scratchGPR1, scratchGPR1);
</span><span class="cx">             m_jit.addPtr(TrustedImm32(-(sizeof(CallerFrameAndPC) + WTF::roundUpToMultipleOf(stackAlignmentBytes(), 6 * sizeof(void*)))), scratchGPR1, JITCompiler::stackPointerRegister);
</span><span class="cx">             
</span><del>-            callOperation(operationSetupVarargsFrame, GPRInfo::returnValueGPR, scratchGPR1, argumentsTagGPR, argumentsPayloadGPR, data-&gt;firstVarArgOffset, GPRInfo::returnValueGPR);
</del><ins>+            callOperation(operationSetupVarargsFrame, GPRInfo::returnValueGPR, scratchGPR1, JSValueRegs(argumentsTagGPR, argumentsPayloadGPR), data-&gt;firstVarArgOffset, GPRInfo::returnValueGPR);
</ins><span class="cx">             m_jit.exceptionCheck();
</span><span class="cx">             resultGPR = GPRInfo::returnValueGPR;
</span><span class="cx">         }
</span><span class="lines">@@ -1661,6 +1661,7 @@
</span><span class="cx">         GPRTemporary resultPayload(this, Reuse, arg1, PayloadWord);
</span><span class="cx">         GPRReg arg1TagGPR = arg1.tagGPR();
</span><span class="cx">         GPRReg arg1PayloadGPR = arg1.payloadGPR();
</span><ins>+        JSValueRegs arg1Regs = arg1.jsValueRegs();
</ins><span class="cx">         GPRReg resultPayloadGPR = resultPayload.gpr();
</span><span class="cx">         
</span><span class="cx">         arg1.use();
</span><span class="lines">@@ -1671,8 +1672,7 @@
</span><span class="cx"> 
</span><span class="cx">         addSlowPathGenerator(
</span><span class="cx">             slowPathCall(
</span><del>-                slowCase, this, operationConvertJSValueToBoolean, resultPayloadGPR, arg1TagGPR,
-                arg1PayloadGPR, NeedToSpill, ExceptionCheckRequirement::CheckNotNeeded));
</del><ins>+                slowCase, this, operationConvertJSValueToBoolean, resultPayloadGPR, arg1Regs, NeedToSpill, ExceptionCheckRequirement::CheckNotNeeded));
</ins><span class="cx">     
</span><span class="cx">         m_jit.xor32(TrustedImm32(1), resultPayloadGPR);
</span><span class="cx">         booleanResult(resultPayloadGPR, node, UseChildrenCalledExplicitly);
</span><span class="lines">@@ -1825,7 +1825,7 @@
</span><span class="cx"> 
</span><span class="cx">         slowPath.link(&amp;m_jit);
</span><span class="cx">         silentSpillAllRegisters(resultGPR);
</span><del>-        callOperation(operationConvertJSValueToBoolean, resultGPR, valueTagGPR, valuePayloadGPR);
</del><ins>+        callOperation(operationConvertJSValueToBoolean, resultGPR, value.jsValueRegs());
</ins><span class="cx">         silentFillAllRegisters(resultGPR);
</span><span class="cx">     
</span><span class="cx">         branchTest32(JITCompiler::NonZero, resultGPR, taken);
</span><span class="lines">@@ -2166,27 +2166,20 @@
</span><span class="cx">         JSValueOperand op2(this, node-&gt;child2(), ManualOperandSpeculation);
</span><span class="cx">         JSValueOperand op3(this, node-&gt;child3(), ManualOperandSpeculation);
</span><span class="cx">         
</span><del>-        GPRReg op1TagGPR = op1.tagGPR();
-        GPRReg op1PayloadGPR = op1.payloadGPR();
-        GPRReg op2TagGPR = op2.tagGPR();
-        GPRReg op2PayloadGPR = op2.payloadGPR();
-        GPRReg op3TagGPR;
-        GPRReg op3PayloadGPR;
-        if (node-&gt;child3()) {
-            op3TagGPR = op3.tagGPR();
-            op3PayloadGPR = op3.payloadGPR();
-        } else {
-            op3TagGPR = InvalidGPRReg;
-            op3PayloadGPR = InvalidGPRReg;
-        }
</del><ins>+        JSValueRegs op1Regs = op1.jsValueRegs();
+        JSValueRegs op2Regs = op2.jsValueRegs();
+        JSValueRegs op3Regs;
+
+        if (node-&gt;child3())
+            op3Regs = op3.jsValueRegs();
</ins><span class="cx">         
</span><span class="cx">         flushRegisters();
</span><span class="cx"> 
</span><span class="cx">         GPRFlushedCallResult result(this);
</span><span class="cx">         if (node-&gt;child3())
</span><del>-            callOperation(operationStrCat3, result.gpr(), op1TagGPR, op1PayloadGPR, op2TagGPR, op2PayloadGPR, op3TagGPR, op3PayloadGPR);
</del><ins>+            callOperation(operationStrCat3, result.gpr(), op1Regs, op2Regs, op3Regs);
</ins><span class="cx">         else
</span><del>-            callOperation(operationStrCat2, result.gpr(), op1TagGPR, op1PayloadGPR, op2TagGPR, op2PayloadGPR);
</del><ins>+            callOperation(operationStrCat2, result.gpr(), op1Regs, op2Regs);
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx">         
</span><span class="cx">         cellResult(result.gpr(), node);
</span><span class="lines">@@ -2488,13 +2481,12 @@
</span><span class="cx">             SpeculateCellOperand base(this, node-&gt;child1()); // Save a register, speculate cell. We'll probably be right.
</span><span class="cx">             JSValueOperand property(this, node-&gt;child2());
</span><span class="cx">             GPRReg baseGPR = base.gpr();
</span><del>-            GPRReg propertyTagGPR = property.tagGPR();
-            GPRReg propertyPayloadGPR = property.payloadGPR();
</del><ins>+            JSValueRegs propertyRegs = property.jsValueRegs();
</ins><span class="cx">             
</span><span class="cx">             flushRegisters();
</span><span class="cx">             GPRFlushedCallResult2 resultTag(this);
</span><span class="cx">             GPRFlushedCallResult resultPayload(this);
</span><del>-            callOperation(operationGetByValCell, resultTag.gpr(), resultPayload.gpr(), baseGPR, propertyTagGPR, propertyPayloadGPR);
</del><ins>+            callOperation(operationGetByValCell, JSValueRegs(resultTag.gpr(), resultPayload.gpr()), baseGPR, propertyRegs);
</ins><span class="cx">             m_jit.exceptionCheck();
</span><span class="cx">             
</span><span class="cx">             jsValueResult(resultTag.gpr(), resultPayload.gpr(), node);
</span><span class="lines">@@ -2728,14 +2720,11 @@
</span><span class="cx"> 
</span><span class="cx">     case GetByValWithThis: {
</span><span class="cx">         JSValueOperand base(this, node-&gt;child1());
</span><del>-        GPRReg baseTag = base.tagGPR();
-        GPRReg basePayload = base.payloadGPR();
</del><ins>+        JSValueRegs baseRegs = base.jsValueRegs();
</ins><span class="cx">         JSValueOperand thisValue(this, node-&gt;child2());
</span><del>-        GPRReg thisValueTag = thisValue.tagGPR();
-        GPRReg thisValuePayload = thisValue.payloadGPR();
</del><ins>+        JSValueRegs thisValueRegs = thisValue.jsValueRegs();
</ins><span class="cx">         JSValueOperand subscript(this, node-&gt;child3());
</span><del>-        GPRReg subscriptTag = subscript.tagGPR();
-        GPRReg subscriptPayload = subscript.payloadGPR();
</del><ins>+        JSValueRegs subscriptRegs = subscript.jsValueRegs();
</ins><span class="cx"> 
</span><span class="cx">         GPRFlushedCallResult resultPayload(this);
</span><span class="cx">         GPRFlushedCallResult2 resultTag(this);
</span><span class="lines">@@ -2743,7 +2732,7 @@
</span><span class="cx">         GPRReg resultTagGPR = resultTag.gpr();
</span><span class="cx"> 
</span><span class="cx">         flushRegisters();
</span><del>-        callOperation(operationGetByValWithThis, resultTagGPR, resultPayloadGPR, baseTag, basePayload, thisValueTag, thisValuePayload, subscriptTag, subscriptPayload);
</del><ins>+        callOperation(operationGetByValWithThis, JSValueRegs(resultTagGPR, resultPayloadGPR), baseRegs, thisValueRegs, subscriptRegs);
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx"> 
</span><span class="cx">         jsValueResult(resultTagGPR, resultPayloadGPR, node);
</span><span class="lines">@@ -2777,16 +2766,14 @@
</span><span class="cx">             JSValueOperand property(this, child2);
</span><span class="cx">             JSValueOperand value(this, child3);
</span><span class="cx">             GPRReg baseGPR = base.gpr();
</span><del>-            GPRReg propertyTagGPR = property.tagGPR();
-            GPRReg propertyPayloadGPR = property.payloadGPR();
-            GPRReg valueTagGPR = value.tagGPR();
-            GPRReg valuePayloadGPR = value.payloadGPR();
</del><ins>+            JSValueRegs propertyRegs = property.jsValueRegs();
+            JSValueRegs valueRegs = value.jsValueRegs();
</ins><span class="cx">             
</span><span class="cx">             flushRegisters();
</span><span class="cx">             if (node-&gt;op() == PutByValDirect)
</span><del>-                callOperation(m_jit.codeBlock()-&gt;isStrictMode() ? operationPutByValDirectCellStrict : operationPutByValDirectCellNonStrict, baseGPR, propertyTagGPR, propertyPayloadGPR, valueTagGPR, valuePayloadGPR);
</del><ins>+                callOperation(m_jit.codeBlock()-&gt;isStrictMode() ? operationPutByValDirectCellStrict : operationPutByValDirectCellNonStrict, baseGPR, propertyRegs, valueRegs);
</ins><span class="cx">             else
</span><del>-                callOperation(m_jit.codeBlock()-&gt;isStrictMode() ? operationPutByValCellStrict : operationPutByValCellNonStrict, baseGPR, propertyTagGPR, propertyPayloadGPR, valueTagGPR, valuePayloadGPR);
</del><ins>+                callOperation(m_jit.codeBlock()-&gt;isStrictMode() ? operationPutByValCellStrict : operationPutByValCellNonStrict, baseGPR, propertyRegs, valueRegs);
</ins><span class="cx">             m_jit.exceptionCheck();
</span><span class="cx">             
</span><span class="cx">             noResult(node);
</span><span class="lines">@@ -2905,12 +2892,12 @@
</span><span class="cx">                     addSlowPathGenerator(slowPathCall(
</span><span class="cx">                         slowCases, this,
</span><span class="cx">                         m_jit.codeBlock()-&gt;isStrictMode() ? operationPutByValDirectBeyondArrayBoundsStrict : operationPutByValDirectBeyondArrayBoundsNonStrict,
</span><del>-                        NoResult, baseReg, propertyReg, valueTagReg, valuePayloadReg));
</del><ins>+                        NoResult, baseReg, propertyReg, JSValueRegs(valueTagReg, valuePayloadReg)));
</ins><span class="cx">                 } else {
</span><span class="cx">                     addSlowPathGenerator(slowPathCall(
</span><span class="cx">                         slowCases, this,
</span><span class="cx">                         m_jit.codeBlock()-&gt;isStrictMode() ? operationPutByValBeyondArrayBoundsStrict : operationPutByValBeyondArrayBoundsNonStrict,
</span><del>-                        NoResult, baseReg, propertyReg, valueTagReg, valuePayloadReg));
</del><ins>+                        NoResult, baseReg, propertyReg, JSValueRegs(valueTagReg, valuePayloadReg)));
</ins><span class="cx">                 }
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="lines">@@ -3015,24 +3002,20 @@
</span><span class="cx">         static_assert(GPRInfo::numberOfRegisters &gt;= 8, &quot;We are assuming we have enough registers to make this call without incrementally setting up the arguments.&quot;);
</span><span class="cx"> 
</span><span class="cx">         JSValueOperand base(this, m_jit.graph().varArgChild(node, 0));
</span><del>-        GPRReg baseTag = base.tagGPR();
-        GPRReg basePayload = base.payloadGPR();
</del><ins>+        JSValueRegs baseRegs = base.jsValueRegs();
</ins><span class="cx"> 
</span><span class="cx">         JSValueOperand thisValue(this, m_jit.graph().varArgChild(node, 1));
</span><del>-        GPRReg thisValueTag = thisValue.tagGPR();
-        GPRReg thisValuePayload = thisValue.payloadGPR();
</del><ins>+        JSValueRegs thisRegs = thisValue.jsValueRegs();
</ins><span class="cx"> 
</span><span class="cx">         JSValueOperand property(this, m_jit.graph().varArgChild(node, 2));
</span><del>-        GPRReg propertyTag = property.tagGPR();
-        GPRReg propertyPayload = property.payloadGPR();
</del><ins>+        JSValueRegs propertyRegs = property.jsValueRegs();
</ins><span class="cx"> 
</span><span class="cx">         JSValueOperand value(this, m_jit.graph().varArgChild(node, 3));
</span><del>-        GPRReg valueTag = value.tagGPR();
-        GPRReg valuePayload = value.payloadGPR();
</del><ins>+        JSValueRegs valueRegs = value.jsValueRegs();
</ins><span class="cx"> 
</span><span class="cx">         flushRegisters();
</span><span class="cx">         callOperation(m_jit.isStrictModeFor(node-&gt;origin.semantic) ? operationPutByValWithThisStrict : operationPutByValWithThis,
</span><del>-            NoResult, baseTag, basePayload, thisValueTag, thisValuePayload, propertyTag, propertyPayload, valueTag, valuePayload);
</del><ins>+            NoResult, baseRegs, thisRegs, propertyRegs, valueRegs);
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx"> #endif // CPU(X86)
</span><span class="cx"> 
</span><span class="lines">@@ -3057,7 +3040,7 @@
</span><span class="cx">                 GPRFlushedCallResult2 resultTag(this);
</span><span class="cx">                 GPRFlushedCallResult resultPayload(this);
</span><span class="cx">                 callOperation(
</span><del>-                    operationRegExpExecString, resultTag.gpr(), resultPayload.gpr(),
</del><ins>+                    operationRegExpExecString, JSValueRegs(resultTag.gpr(), resultPayload.gpr()),
</ins><span class="cx">                     globalObjectGPR, baseGPR, argumentGPR);
</span><span class="cx">                 m_jit.exceptionCheck();
</span><span class="cx">                 
</span><span class="lines">@@ -3068,8 +3051,7 @@
</span><span class="cx">             SpeculateCellOperand base(this, node-&gt;child2());
</span><span class="cx">             JSValueOperand argument(this, node-&gt;child3());
</span><span class="cx">             GPRReg baseGPR = base.gpr();
</span><del>-            GPRReg argumentTagGPR = argument.tagGPR();
-            GPRReg argumentPayloadGPR = argument.payloadGPR();
</del><ins>+            JSValueRegs argumentRegs = argument.jsValueRegs();
</ins><span class="cx">             speculateRegExpObject(node-&gt;child2(), baseGPR);
</span><span class="cx">         
</span><span class="cx">             flushRegisters();
</span><span class="lines">@@ -3076,8 +3058,7 @@
</span><span class="cx">             GPRFlushedCallResult2 resultTag(this);
</span><span class="cx">             GPRFlushedCallResult resultPayload(this);
</span><span class="cx">             callOperation(
</span><del>-                operationRegExpExec, resultTag.gpr(), resultPayload.gpr(), globalObjectGPR, baseGPR,
-                argumentTagGPR, argumentPayloadGPR);
</del><ins>+                operationRegExpExec, JSValueRegs(resultTag.gpr(), resultPayload.gpr()), globalObjectGPR, baseGPR, argumentRegs);
</ins><span class="cx">             m_jit.exceptionCheck();
</span><span class="cx">         
</span><span class="cx">             jsValueResult(resultTag.gpr(), resultPayload.gpr(), node);
</span><span class="lines">@@ -3086,17 +3067,14 @@
</span><span class="cx">         
</span><span class="cx">         JSValueOperand base(this, node-&gt;child2());
</span><span class="cx">         JSValueOperand argument(this, node-&gt;child3());
</span><del>-        GPRReg baseTagGPR = base.tagGPR();
-        GPRReg basePayloadGPR = base.payloadGPR();
-        GPRReg argumentTagGPR = argument.tagGPR();
-        GPRReg argumentPayloadGPR = argument.payloadGPR();
</del><ins>+        JSValueRegs baseRegs = base.jsValueRegs();
+        JSValueRegs argumentRegs = argument.jsValueRegs();
</ins><span class="cx">         
</span><span class="cx">         flushRegisters();
</span><span class="cx">         GPRFlushedCallResult2 resultTag(this);
</span><span class="cx">         GPRFlushedCallResult resultPayload(this);
</span><span class="cx">         callOperation(
</span><del>-            operationRegExpExecGeneric, resultTag.gpr(), resultPayload.gpr(), globalObjectGPR,
-            baseTagGPR, basePayloadGPR, argumentTagGPR, argumentPayloadGPR);
</del><ins>+            operationRegExpExecGeneric, JSValueRegs(resultTag.gpr(), resultPayload.gpr()), globalObjectGPR, baseRegs, argumentRegs);
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx">         
</span><span class="cx">         jsValueResult(resultTag.gpr(), resultPayload.gpr(), node);
</span><span class="lines">@@ -3129,15 +3107,13 @@
</span><span class="cx">             SpeculateCellOperand base(this, node-&gt;child2());
</span><span class="cx">             JSValueOperand argument(this, node-&gt;child3());
</span><span class="cx">             GPRReg baseGPR = base.gpr();
</span><del>-            GPRReg argumentTagGPR = argument.tagGPR();
-            GPRReg argumentPayloadGPR = argument.payloadGPR();
</del><ins>+            JSValueRegs argumentRegs = argument.jsValueRegs();
</ins><span class="cx">             speculateRegExpObject(node-&gt;child2(), baseGPR);
</span><span class="cx">         
</span><span class="cx">             flushRegisters();
</span><span class="cx">             GPRFlushedCallResult result(this);
</span><span class="cx">             callOperation(
</span><del>-                operationRegExpTest, result.gpr(), globalObjectGPR, baseGPR, argumentTagGPR,
-                argumentPayloadGPR);
</del><ins>+                operationRegExpTest, result.gpr(), globalObjectGPR, baseGPR, argumentRegs);
</ins><span class="cx">             m_jit.exceptionCheck();
</span><span class="cx">         
</span><span class="cx">             booleanResult(result.gpr(), node);
</span><span class="lines">@@ -3146,16 +3122,13 @@
</span><span class="cx">         
</span><span class="cx">         JSValueOperand base(this, node-&gt;child2());
</span><span class="cx">         JSValueOperand argument(this, node-&gt;child3());
</span><del>-        GPRReg baseTagGPR = base.tagGPR();
-        GPRReg basePayloadGPR = base.payloadGPR();
-        GPRReg argumentTagGPR = argument.tagGPR();
-        GPRReg argumentPayloadGPR = argument.payloadGPR();
-        
</del><ins>+        JSValueRegs baseRegs = base.jsValueRegs();
+        JSValueRegs argumentRegs = argument.jsValueRegs();
+
</ins><span class="cx">         flushRegisters();
</span><span class="cx">         GPRFlushedCallResult result(this);
</span><span class="cx">         callOperation(
</span><del>-            operationRegExpTestGeneric, result.gpr(), globalObjectGPR, baseTagGPR, basePayloadGPR,
-            argumentTagGPR, argumentPayloadGPR);
</del><ins>+            operationRegExpTestGeneric, result.gpr(), globalObjectGPR, baseRegs, argumentRegs);
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx">         
</span><span class="cx">         booleanResult(result.gpr(), node);
</span><span class="lines">@@ -3180,8 +3153,7 @@
</span><span class="cx">                     GPRFlushedCallResult2 resultTag(this);
</span><span class="cx">                     GPRFlushedCallResult resultPayload(this);
</span><span class="cx">                     callOperation(
</span><del>-                        operationStringProtoFuncReplaceRegExpEmptyStr, resultTag.gpr(),
-                        resultPayload.gpr(), stringGPR, regExpGPR);
</del><ins>+                        operationStringProtoFuncReplaceRegExpEmptyStr, JSValueRegs(resultTag.gpr(), resultPayload.gpr()), stringGPR, regExpGPR);
</ins><span class="cx">                     m_jit.exceptionCheck();
</span><span class="cx">                     cellResult(resultPayload.gpr(), node);
</span><span class="cx">                     break;
</span><span class="lines">@@ -3202,7 +3174,7 @@
</span><span class="cx">             GPRFlushedCallResult2 resultTag(this);
</span><span class="cx">             GPRFlushedCallResult resultPayload(this);
</span><span class="cx">             callOperation(
</span><del>-                operationStringProtoFuncReplaceRegExpString, resultTag.gpr(), resultPayload.gpr(),
</del><ins>+                operationStringProtoFuncReplaceRegExpString, JSValueRegs(resultTag.gpr(), resultPayload.gpr()),
</ins><span class="cx">                 stringGPR, regExpGPR, replaceGPR);
</span><span class="cx">             m_jit.exceptionCheck();
</span><span class="cx">             cellResult(resultPayload.gpr(), node);
</span><span class="lines">@@ -3217,20 +3189,16 @@
</span><span class="cx">         JSValueOperand string(this, node-&gt;child1());
</span><span class="cx">         JSValueOperand search(this, node-&gt;child2(), child2SpeculationMode);
</span><span class="cx">         JSValueOperand replace(this, node-&gt;child3());
</span><del>-        GPRReg stringTagGPR = string.tagGPR();
-        GPRReg stringPayloadGPR = string.payloadGPR();
-        GPRReg searchTagGPR = search.tagGPR();
-        GPRReg searchPayloadGPR = search.payloadGPR();
-        GPRReg replaceTagGPR = replace.tagGPR();
-        GPRReg replacePayloadGPR = replace.payloadGPR();
</del><ins>+        JSValueRegs stringRegs = string.jsValueRegs();
+        JSValueRegs searchRegs = search.jsValueRegs();
+        JSValueRegs replaceRegs = replace.jsValueRegs();
</ins><span class="cx">         
</span><span class="cx">         flushRegisters();
</span><span class="cx">         GPRFlushedCallResult2 resultTag(this);
</span><span class="cx">         GPRFlushedCallResult resultPayload(this);
</span><span class="cx">         callOperation(
</span><del>-            operationStringProtoFuncReplaceGeneric, resultTag.gpr(), resultPayload.gpr(),
-            stringTagGPR, stringPayloadGPR, searchTagGPR, searchPayloadGPR, replaceTagGPR,
-            replacePayloadGPR);
</del><ins>+            operationStringProtoFuncReplaceGeneric, JSValueRegs(resultTag.gpr(), resultPayload.gpr()),
+            stringRegs, searchRegs, replaceRegs); 
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx">         cellResult(resultPayload.gpr(), node);
</span><span class="cx">         break;
</span><span class="lines">@@ -3303,7 +3271,7 @@
</span><span class="cx">                 slowPathCall(
</span><span class="cx">                     slowPath, this, operationArrayPush,
</span><span class="cx">                     JSValueRegs(storageGPR, storageLengthGPR),
</span><del>-                    valueTagGPR, valuePayloadGPR, baseGPR));
</del><ins>+                    JSValueRegs(valueTagGPR, valuePayloadGPR), baseGPR));
</ins><span class="cx">         
</span><span class="cx">             jsValueResult(storageGPR, storageLengthGPR, node);
</span><span class="cx">             break;
</span><span class="lines">@@ -3354,7 +3322,8 @@
</span><span class="cx">             m_jit.add32(TrustedImm32(1), MacroAssembler::Address(storageGPR, OBJECT_OFFSETOF(ArrayStorage, m_numValuesInVector)));
</span><span class="cx">             m_jit.move(TrustedImm32(JSValue::Int32Tag), storageGPR);
</span><span class="cx">         
</span><del>-            addSlowPathGenerator(slowPathCall(slowPath, this, operationArrayPush, JSValueRegs(storageGPR, storageLengthGPR), valueTagGPR, valuePayloadGPR, baseGPR));
</del><ins>+            addSlowPathGenerator(slowPathCall(slowPath, this, operationArrayPush, JSValueRegs(storageGPR, storageLengthGPR),
+                JSValueRegs(valueTagGPR, valuePayloadGPR), baseGPR));
</ins><span class="cx">         
</span><span class="cx">             jsValueResult(storageGPR, storageLengthGPR, node);
</span><span class="cx">             break;
</span><span class="lines">@@ -3628,7 +3597,7 @@
</span><span class="cx">         addSlowPathGenerator(
</span><span class="cx">             slowPathCall(
</span><span class="cx">                 notPrimitive, this, operationToPrimitive,
</span><del>-                JSValueRegs(resultTagGPR, resultPayloadGPR), argumentTagGPR, argumentPayloadGPR));
</del><ins>+                JSValueRegs(resultTagGPR, resultPayloadGPR), JSValueRegs(argumentTagGPR, argumentPayloadGPR)));
</ins><span class="cx">         
</span><span class="cx">         jsValueResult(resultTagGPR, resultPayloadGPR, node, UseChildrenCalledExplicitly);
</span><span class="cx">         break;
</span><span class="lines">@@ -3641,6 +3610,7 @@
</span><span class="cx"> 
</span><span class="cx">         GPRReg argumentPayloadGPR = argument.payloadGPR();
</span><span class="cx">         GPRReg argumentTagGPR = argument.tagGPR();
</span><ins>+        JSValueRegs argumentRegs = argument.jsValueRegs();
</ins><span class="cx">         JSValueRegs resultRegs(resultTag.gpr(), resultPayload.gpr());
</span><span class="cx"> 
</span><span class="cx">         argument.use();
</span><span class="lines">@@ -3650,7 +3620,7 @@
</span><span class="cx">         // Instead of the slow path generator, we emit callOperation here.
</span><span class="cx">         if (!(m_state.forNode(node-&gt;child1()).m_type &amp; SpecBytecodeNumber)) {
</span><span class="cx">             flushRegisters();
</span><del>-            callOperation(operationToNumber, resultRegs, argumentTagGPR, argumentPayloadGPR);
</del><ins>+            callOperation(operationToNumber, resultRegs, argumentRegs);
</ins><span class="cx">             m_jit.exceptionCheck();
</span><span class="cx">         } else {
</span><span class="cx">             MacroAssembler::Jump notNumber;
</span><span class="lines">@@ -3664,7 +3634,7 @@
</span><span class="cx"> 
</span><span class="cx">             notNumber.link(&amp;m_jit);
</span><span class="cx">             silentSpillAllRegisters(resultRegs);
</span><del>-            callOperation(operationToNumber, resultRegs, argumentTagGPR, argumentPayloadGPR);
</del><ins>+            callOperation(operationToNumber, resultRegs, argumentRegs);
</ins><span class="cx">             silentFillAllRegisters(resultRegs);
</span><span class="cx">             m_jit.exceptionCheck();
</span><span class="cx"> 
</span><span class="lines">@@ -3680,7 +3650,7 @@
</span><span class="cx">         if (node-&gt;child1().useKind() == UntypedUse) {
</span><span class="cx">             JSValueOperand op1(this, node-&gt;child1());
</span><span class="cx">             GPRReg op1PayloadGPR = op1.payloadGPR();
</span><del>-            GPRReg op1TagGPR = op1.tagGPR();
</del><ins>+            JSValueRegs op1Regs = op1.jsValueRegs();
</ins><span class="cx">             
</span><span class="cx">             GPRFlushedCallResult result(this);
</span><span class="cx">             GPRReg resultGPR = result.gpr();
</span><span class="lines">@@ -3697,10 +3667,10 @@
</span><span class="cx">                 slowPath2.link(&amp;m_jit);
</span><span class="cx">             }
</span><span class="cx">             if (op == ToString)
</span><del>-                callOperation(operationToString, resultGPR, op1TagGPR, op1PayloadGPR);
</del><ins>+                callOperation(operationToString, resultGPR, op1Regs);
</ins><span class="cx">             else {
</span><span class="cx">                 ASSERT(op == CallStringConstructor);
</span><del>-                callOperation(operationCallStringConstructor, resultGPR, op1TagGPR, op1PayloadGPR);
</del><ins>+                callOperation(operationCallStringConstructor, resultGPR, op1Regs);
</ins><span class="cx">             }
</span><span class="cx">             m_jit.exceptionCheck();
</span><span class="cx">             if (done.isSet())
</span><span class="lines">@@ -4015,8 +3985,7 @@
</span><span class="cx">             break;
</span><span class="cx">         case UntypedUse: {
</span><span class="cx">             JSValueOperand argument(this, node-&gt;child1());
</span><del>-            GPRReg argumentTagGPR = argument.tagGPR();
-            GPRReg argumentPayloadGPR = argument.payloadGPR();
</del><ins>+            JSValueRegs argumentRegs = argument.jsValueRegs();
</ins><span class="cx">             
</span><span class="cx">             flushRegisters();
</span><span class="cx">             
</span><span class="lines">@@ -4026,8 +3995,7 @@
</span><span class="cx">             JSGlobalObject* globalObject = m_jit.graph().globalObjectFor(node-&gt;origin.semantic);
</span><span class="cx">             callOperation(
</span><span class="cx">                 operationNewTypedArrayWithOneArgumentForType(node-&gt;typedArrayType()),
</span><del>-                resultGPR, globalObject-&gt;typedArrayStructureConcurrently(node-&gt;typedArrayType()),
-                argumentTagGPR, argumentPayloadGPR);
</del><ins>+                resultGPR, globalObject-&gt;typedArrayStructureConcurrently(node-&gt;typedArrayType()), argumentRegs);
</ins><span class="cx">             m_jit.exceptionCheck();
</span><span class="cx">             
</span><span class="cx">             cellResult(resultGPR, node);
</span><span class="lines">@@ -4045,7 +4013,7 @@
</span><span class="cx">         GPRFlushedCallResult resultPayload(this);
</span><span class="cx">         GPRFlushedCallResult2 resultTag(this);
</span><span class="cx">         
</span><del>-        callOperation(operationNewRegexp, resultTag.gpr(), resultPayload.gpr(), m_jit.codeBlock()-&gt;regexp(node-&gt;regexpIndex()));
</del><ins>+        callOperation(operationNewRegexp, JSValueRegs(resultTag.gpr(), resultPayload.gpr()), m_jit.codeBlock()-&gt;regexp(node-&gt;regexpIndex()));
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx">         
</span><span class="cx">         // FIXME: make the callOperation above explicitly return a cell result, or jitAssert the tag is a cell tag.
</span><span class="lines">@@ -4085,7 +4053,7 @@
</span><span class="cx">         addSlowPathGenerator(
</span><span class="cx">             slowPathCall(
</span><span class="cx">                 slowCases, this, function,
</span><del>-                JSValueRegs(tempTagGPR, tempGPR), thisValueTagGPR, thisValuePayloadGPR));
</del><ins>+                JSValueRegs(tempTagGPR, tempGPR), JSValueRegs(thisValueTagGPR, thisValuePayloadGPR)));
</ins><span class="cx"> 
</span><span class="cx">         jsValueResult(tempTagGPR, tempGPR, node);
</span><span class="cx">         break;
</span><span class="lines">@@ -4262,11 +4230,9 @@
</span><span class="cx"> 
</span><span class="cx">     case GetByIdWithThis: {
</span><span class="cx">         JSValueOperand base(this, node-&gt;child1());
</span><del>-        GPRReg baseTag = base.tagGPR();
-        GPRReg basePayload = base.payloadGPR();
</del><ins>+        JSValueRegs baseRegs = base.jsValueRegs();
</ins><span class="cx">         JSValueOperand thisValue(this, node-&gt;child2());
</span><del>-        GPRReg thisTag = thisValue.tagGPR();
-        GPRReg thisPayload = thisValue.payloadGPR();
</del><ins>+        JSValueRegs thisRegs = thisValue.jsValueRegs();
</ins><span class="cx"> 
</span><span class="cx">         GPRFlushedCallResult resultPayload(this);
</span><span class="cx">         GPRFlushedCallResult2 resultTag(this);
</span><span class="lines">@@ -4274,7 +4240,7 @@
</span><span class="cx">         GPRReg resultTagGPR = resultTag.gpr();
</span><span class="cx"> 
</span><span class="cx">         flushRegisters();
</span><del>-        callOperation(operationGetByIdWithThis, resultTagGPR, resultPayloadGPR, baseTag, basePayload, thisTag, thisPayload, identifierUID(node-&gt;identifierNumber()));
</del><ins>+        callOperation(operationGetByIdWithThis, JSValueRegs(resultTagGPR, resultPayloadGPR), baseRegs, thisRegs, identifierUID(node-&gt;identifierNumber()));
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx"> 
</span><span class="cx">         jsValueResult(resultTagGPR, resultPayloadGPR, node);
</span><span class="lines">@@ -4560,18 +4526,15 @@
</span><span class="cx"> 
</span><span class="cx">     case PutByIdWithThis: {
</span><span class="cx">         JSValueOperand base(this, node-&gt;child1());
</span><del>-        GPRReg baseTag = base.tagGPR();
-        GPRReg basePayload = base.payloadGPR();
</del><ins>+        JSValueRegs baseRegs = base.jsValueRegs();
</ins><span class="cx">         JSValueOperand thisValue(this, node-&gt;child2());
</span><del>-        GPRReg thisValueTag = thisValue.tagGPR();
-        GPRReg thisValuePayload = thisValue.payloadGPR();
</del><ins>+        JSValueRegs thisRegs = thisValue.jsValueRegs();
</ins><span class="cx">         JSValueOperand value(this, node-&gt;child3());
</span><del>-        GPRReg valueTag = value.tagGPR();
-        GPRReg valuePayload = value.payloadGPR();
</del><ins>+        JSValueRegs valueRegs = value.jsValueRegs();
</ins><span class="cx"> 
</span><span class="cx">         flushRegisters();
</span><span class="cx">         callOperation(m_jit.isStrictModeFor(node-&gt;origin.semantic) ? operationPutByIdWithThisStrict : operationPutByIdWithThis,
</span><del>-            NoResult, baseTag, basePayload, thisValueTag, thisValuePayload, valueTag, valuePayload, identifierUID(node-&gt;identifierNumber()));
</del><ins>+            NoResult, baseRegs, thisRegs, valueRegs, identifierUID(node-&gt;identifierNumber()));
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx"> 
</span><span class="cx">         noResult(node);
</span><span class="lines">@@ -4843,14 +4806,14 @@
</span><span class="cx">         
</span><span class="cx">         GPRReg argumentsTagGPR;
</span><span class="cx">         GPRReg argumentsPayloadGPR;
</span><ins>+        JSValueRegs argumentsRegs;
</ins><span class="cx">         {
</span><span class="cx">             JSValueOperand arguments(this, node-&gt;child1());
</span><del>-            argumentsTagGPR = arguments.tagGPR();
-            argumentsPayloadGPR = arguments.payloadGPR();
</del><ins>+            argumentsRegs = arguments.jsValueRegs();
</ins><span class="cx">             flushRegisters();
</span><span class="cx">         }
</span><span class="cx">         
</span><del>-        callOperation(operationSizeOfVarargs, GPRInfo::returnValueGPR, argumentsTagGPR, argumentsPayloadGPR, data-&gt;offset);
</del><ins>+        callOperation(operationSizeOfVarargs, GPRInfo::returnValueGPR, argumentsRegs, data-&gt;offset);
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx">         
</span><span class="cx">         lock(GPRInfo::returnValueGPR);
</span><span class="lines">@@ -4858,6 +4821,7 @@
</span><span class="cx">             JSValueOperand arguments(this, node-&gt;child1());
</span><span class="cx">             argumentsTagGPR = arguments.tagGPR();
</span><span class="cx">             argumentsPayloadGPR = arguments.payloadGPR();
</span><ins>+            argumentsRegs = arguments.jsValueRegs();
</ins><span class="cx">             flushRegisters();
</span><span class="cx">         }
</span><span class="cx">         unlock(GPRInfo::returnValueGPR);
</span><span class="lines">@@ -4880,7 +4844,7 @@
</span><span class="cx">         
</span><span class="cx">         m_jit.store32(argCountIncludingThisGPR, JITCompiler::payloadFor(data-&gt;machineCount));
</span><span class="cx">         
</span><del>-        callOperation(operationLoadVarargs, data-&gt;machineStart.offset(), argumentsTagGPR, argumentsPayloadGPR, data-&gt;offset, GPRInfo::returnValueGPR, data-&gt;mandatoryMinimum);
</del><ins>+        callOperation(operationLoadVarargs, data-&gt;machineStart.offset(), argumentsRegs, data-&gt;offset, GPRInfo::returnValueGPR, data-&gt;mandatoryMinimum);
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx">         
</span><span class="cx">         noResult(node);
</span><span class="lines">@@ -4964,13 +4928,12 @@
</span><span class="cx">         SpeculateCellOperand property(this, node-&gt;child2());
</span><span class="cx">         GPRFlushedCallResult resultPayload(this);
</span><span class="cx">         GPRFlushedCallResult2 resultTag(this);
</span><del>-        GPRReg basePayloadGPR = base.payloadGPR();
-        GPRReg baseTagGPR = base.tagGPR();
</del><ins>+        JSValueRegs baseRegs = base.jsValueRegs();
</ins><span class="cx">         GPRReg resultPayloadGPR = resultPayload.gpr();
</span><span class="cx">         GPRReg resultTagGPR = resultTag.gpr();
</span><span class="cx"> 
</span><span class="cx">         flushRegisters();
</span><del>-        callOperation(operationHasGenericProperty, resultTagGPR, resultPayloadGPR, baseTagGPR, basePayloadGPR, property.gpr());
</del><ins>+        callOperation(operationHasGenericProperty, JSValueRegs(resultTagGPR, resultPayloadGPR), baseRegs, property.gpr());
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx">         booleanResult(resultPayloadGPR, node);
</span><span class="cx">         break;
</span><span class="lines">@@ -4998,7 +4961,8 @@
</span><span class="cx"> 
</span><span class="cx">         done.link(&amp;m_jit);
</span><span class="cx"> 
</span><del>-        addSlowPathGenerator(slowPathCall(wrongStructure, this, operationHasGenericProperty, resultTagGPR, resultPayloadGPR, baseTagGPR, basePayloadGPR, propertyGPR));
</del><ins>+        addSlowPathGenerator(slowPathCall(wrongStructure, this, operationHasGenericProperty, 
+            JSValueRegs(resultTagGPR, resultPayloadGPR), JSValueRegs(baseTagGPR, basePayloadGPR), propertyGPR));
</ins><span class="cx">         booleanResult(resultPayloadGPR, node);
</span><span class="cx">         break;
</span><span class="cx">     }
</span><span class="lines">@@ -5064,7 +5028,7 @@
</span><span class="cx">         moveTrueTo(resultPayloadGPR);
</span><span class="cx">         MacroAssembler::Jump done = m_jit.jump();
</span><span class="cx"> 
</span><del>-        addSlowPathGenerator(slowPathCall(slowCases, this, operationHasIndexedProperty, resultTagGPR, resultPayloadGPR, baseGPR, indexGPR));
</del><ins>+        addSlowPathGenerator(slowPathCall(slowCases, this, operationHasIndexedProperty, JSValueRegs(resultTagGPR, resultPayloadGPR), baseGPR, indexGPR));
</ins><span class="cx">         
</span><span class="cx">         done.link(&amp;m_jit);
</span><span class="cx">         booleanResult(resultPayloadGPR, node);
</span><span class="lines">@@ -5091,7 +5055,7 @@
</span><span class="cx">         // Not enough registers on X86 for this code, so always use the slow path.
</span><span class="cx">         flushRegisters();
</span><span class="cx">         m_jit.move(MacroAssembler::TrustedImm32(JSValue::CellTag), scratchGPR);
</span><del>-        callOperation(operationGetByValCell, resultTagGPR, resultPayloadGPR, baseGPR, scratchGPR, propertyGPR);
</del><ins>+        callOperation(operationGetByValCell, JSValueRegs(resultTagGPR, resultPayloadGPR), baseGPR, JSValueRegs(scratchGPR, propertyGPR));
</ins><span class="cx">         m_jit.exceptionCheck();
</span><span class="cx"> #else
</span><span class="cx">         GPRTemporary resultPayload(this);
</span><span class="lines">@@ -5149,7 +5113,7 @@
</span><span class="cx"> 
</span><span class="cx">         done.link(&amp;m_jit);
</span><span class="cx"> 
</span><del>-        addSlowPathGenerator(slowPathCall(slowPath, this, operationGetByValCell, resultTagGPR, resultPayloadGPR, baseGPR, propertyGPR));
</del><ins>+        addSlowPathGenerator(slowPathCall(slowPath, this, operationGetByValCell, JSValueRegs(resultTagGPR, resultPayloadGPR), baseGPR, propertyGPR));
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">         jsValueResult(resultTagGPR, resultPayloadGPR, node);
</span></span></pre>
</div>
</div>

</body>
</html>