<!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>[172746] 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/172746">172746</a></dd>
<dt>Author</dt> <dd>ossy@webkit.org</dd>
<dt>Date</dt> <dd>2014-08-19 00:14:30 -0700 (Tue, 19 Aug 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>REGRESSION(<a href="http://trac.webkit.org/projects/webkit/changeset/163179">r163179</a>): It broke the build on ARM Thumb2 with GCC
https://bugs.webkit.org/show_bug.cgi?id=136028

Patch by Michael Saboff &lt;msaboff@apple.com&gt; on 2014-08-19
Reviewed by Oliver Hunt.

Added back ARMv7 conditionals around three op addp and subp since ARM Thumb2 spec says that
the behavior for those ops are undefined.  This was originally done in changeset 163179.

* llint/LowLevelInterpreter32_64.asm:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceJavaScriptCoreChangeLog">trunk/Source/JavaScriptCore/ChangeLog</a></li>
<li><a href="#trunkSourceJavaScriptCorellintLowLevelInterpreter32_64asm">trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceJavaScriptCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/ChangeLog (172745 => 172746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/ChangeLog        2014-08-19 06:12:49 UTC (rev 172745)
+++ trunk/Source/JavaScriptCore/ChangeLog        2014-08-19 07:14:30 UTC (rev 172746)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2014-08-19  Michael Saboff  &lt;msaboff@apple.com&gt;
+
+        REGRESSION(r163179): It broke the build on ARM Thumb2 with GCC
+        https://bugs.webkit.org/show_bug.cgi?id=136028
+
+        Reviewed by Oliver Hunt.
+
+        Added back ARMv7 conditionals around three op addp and subp since ARM Thumb2 spec says that
+        the behavior for those ops are undefined.  This was originally done in changeset 163179.
+
+        * llint/LowLevelInterpreter32_64.asm:
+
</ins><span class="cx"> 2014-08-18  Commit Queue  &lt;commit-queue@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r172741.
</span></span></pre></div>
<a id="trunkSourceJavaScriptCorellintLowLevelInterpreter32_64asm"></a>
<div class="modfile"><h4>Modified: trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm (172745 => 172746)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm        2014-08-19 06:12:49 UTC (rev 172745)
+++ trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm        2014-08-19 07:14:30 UTC (rev 172746)
</span><span class="lines">@@ -203,7 +203,12 @@
</span><span class="cx">         loadp 8[cfr], entry
</span><span class="cx">     end
</span><span class="cx"> 
</span><del>-    vmEntryRecord(cfr, sp)
</del><ins>+    if ARMv7
+        vmEntryRecord(cfr, temp1)
+        move temp1, sp
+    else
+        vmEntryRecord(cfr, sp)
+    end
</ins><span class="cx"> 
</span><span class="cx">     storep vm, VMEntryRecord::m_vm[sp]
</span><span class="cx">     loadp VM::topCallFrame[vm], temp2
</span><span class="lines">@@ -219,7 +224,12 @@
</span><span class="cx">     elsif ARM or ARMv7 or ARMv7_TRADITIONAL
</span><span class="cx">         addp CallFrameAlignSlots * SlotSize, sp, temp1
</span><span class="cx">         clrbp temp1, StackAlignmentMask, temp1
</span><del>-        subp temp1, CallFrameAlignSlots * SlotSize, sp
</del><ins>+        if ARMv7
+            subp temp1, CallFrameAlignSlots * SlotSize, temp1
+            move temp1, sp
+        else
+            subp temp1, CallFrameAlignSlots * SlotSize, sp
+        end
</ins><span class="cx">     end
</span><span class="cx"> 
</span><span class="cx">     if X86 or X86_WIN
</span><span class="lines">@@ -252,7 +262,12 @@
</span><span class="cx"> 
</span><span class="cx">     cCall2(_llint_throw_stack_overflow_error, vm, protoCallFrame)
</span><span class="cx"> 
</span><del>-    vmEntryRecord(cfr, sp)
</del><ins>+    if ARMv7
+        vmEntryRecord(cfr, temp1)
+        move temp1, sp
+    else
+        vmEntryRecord(cfr, sp)
+    end
</ins><span class="cx"> 
</span><span class="cx">     loadp VMEntryRecord::m_vm[sp], temp3
</span><span class="cx">     loadp VMEntryRecord::m_prevTopCallFrame[sp], temp4
</span><span class="lines">@@ -260,7 +275,12 @@
</span><span class="cx">     loadp VMEntryRecord::m_prevTopVMEntryFrame[sp], temp4
</span><span class="cx">     storep temp4, VM::topVMEntryFrame[temp3]
</span><span class="cx"> 
</span><del>-    subp cfr, CalleeRegisterSaveSize, sp
</del><ins>+    if ARMv7
+        subp cfr, CalleeRegisterSaveSize, temp3
+        move temp3, sp
+    else
+        subp cfr, CalleeRegisterSaveSize, sp
+    end
</ins><span class="cx"> 
</span><span class="cx">     popCalleeSaves()
</span><span class="cx">     functionEpilogue()
</span><span class="lines">@@ -308,7 +328,12 @@
</span><span class="cx"> 
</span><span class="cx">     makeCall(entry, temp1, temp2)
</span><span class="cx"> 
</span><del>-    vmEntryRecord(cfr, sp)
</del><ins>+    if ARMv7
+        vmEntryRecord(cfr, temp1)
+        move temp1, sp
+    else
+        vmEntryRecord(cfr, sp)
+    end
</ins><span class="cx"> 
</span><span class="cx">     loadp VMEntryRecord::m_vm[sp], temp3
</span><span class="cx">     loadp VMEntryRecord::m_prevTopCallFrame[sp], temp4
</span><span class="lines">@@ -316,7 +341,12 @@
</span><span class="cx">     loadp VMEntryRecord::m_prevTopVMEntryFrame[sp], temp4
</span><span class="cx">     storep temp4, VM::topVMEntryFrame[temp3]
</span><span class="cx"> 
</span><del>-    subp cfr, CalleeRegisterSaveSize, sp
</del><ins>+    if ARMv7
+        subp cfr, CalleeRegisterSaveSize, temp3
+        move temp3, sp
+    else
+        subp cfr, CalleeRegisterSaveSize, sp
+    end
</ins><span class="cx"> 
</span><span class="cx">     popCalleeSaves()
</span><span class="cx">     functionEpilogue()
</span><span class="lines">@@ -372,7 +402,12 @@
</span><span class="cx"> 
</span><span class="cx">     loadp CallerFrame + PayloadOffset[cfr], cfr
</span><span class="cx"> 
</span><del>-    vmEntryRecord(cfr, sp)
</del><ins>+    if ARMv7
+        vmEntryRecord(cfr, t3)
+        move t3, sp
+    else
+        vmEntryRecord(cfr, sp)
+    end
</ins><span class="cx"> 
</span><span class="cx">     loadp VMEntryRecord::m_vm[sp], t3
</span><span class="cx">     loadp VMEntryRecord::m_prevTopCallFrame[sp], t5
</span><span class="lines">@@ -380,7 +415,12 @@
</span><span class="cx">     loadp VMEntryRecord::m_prevTopVMEntryFrame[sp], t5
</span><span class="cx">     storep t5, VM::topVMEntryFrame[t3]
</span><span class="cx"> 
</span><del>-    subp cfr, CalleeRegisterSaveSize, sp
</del><ins>+    if ARMv7
+        subp cfr, CalleeRegisterSaveSize, t3
+        move t3, sp
+    else
+        subp cfr, CalleeRegisterSaveSize, sp
+    end
</ins><span class="cx"> 
</span><span class="cx">     popCalleeSaves()
</span><span class="cx">     functionEpilogue()
</span></span></pre>
</div>
</div>

</body>
</html>