Title: [215237] trunk/Source/_javascript_Core
Revision
215237
Author
[email protected]
Date
2017-04-11 10:03:59 -0700 (Tue, 11 Apr 2017)

Log Message

[jsc] Add missing MacroAssemblerMIPS::or32() implementation
https://bugs.webkit.org/show_bug.cgi?id=169714

Patch by Guillaume Emont <[email protected]> on 2017-04-11
Reviewed by Michael Catanzaro.

* assembler/MacroAssemblerMIPS.h:
(JSC::MacroAssemblerMIPS::or32):
Added or32(TrustedImm32, Address).

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (215236 => 215237)


--- trunk/Source/_javascript_Core/ChangeLog	2017-04-11 17:00:29 UTC (rev 215236)
+++ trunk/Source/_javascript_Core/ChangeLog	2017-04-11 17:03:59 UTC (rev 215237)
@@ -1,3 +1,14 @@
+2017-04-11  Guillaume Emont  <[email protected]>
+
+        [jsc] Add missing MacroAssemblerMIPS::or32() implementation
+        https://bugs.webkit.org/show_bug.cgi?id=169714
+
+        Reviewed by Michael Catanzaro.
+
+        * assembler/MacroAssemblerMIPS.h:
+        (JSC::MacroAssemblerMIPS::or32):
+        Added or32(TrustedImm32, Address).
+
 2017-04-11  Joseph Pecoraro  <[email protected]>
 
         test262: test262/test/annexB/language/comments/multi-line-html-close.js

Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerMIPS.h (215236 => 215237)


--- trunk/Source/_javascript_Core/assembler/MacroAssemblerMIPS.h	2017-04-11 17:00:29 UTC (rev 215236)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerMIPS.h	2017-04-11 17:03:59 UTC (rev 215237)
@@ -443,6 +443,47 @@
         store32(dataTempRegister, dest.m_ptr);
     }
 
+    void or32(TrustedImm32 imm, Address address)
+    {
+        if (address.offset >= -32768 && address.offset <= 32767
+            && !m_fixedWidth) {
+            /*
+              lw        dataTemp, offset(base)
+              li        immTemp, imm
+              or        dataTemp, dataTemp, immTemp
+              sw        dataTemp, offset(base)
+            */
+            m_assembler.lw(dataTempRegister, address.base, address.offset);
+            if (imm.m_value >= 0 && imm.m_value <= 65535 && !m_fixedWidth)
+                m_assembler.ori(dataTempRegister, dataTempRegister, imm.m_value);
+            else {
+                move(imm, immTempRegister);
+                m_assembler.orInsn(dataTempRegister, dataTempRegister, immTempRegister);
+            }
+            m_assembler.sw(dataTempRegister, address.base, address.offset);
+        } else {
+            /*
+              lui       addrTemp, (offset + 0x8000) >> 16
+              addu      addrTemp, addrTemp, base
+              lw        dataTemp, (offset & 0xffff)(addrTemp)
+              li        immtemp, imm
+              or        dataTemp, dataTemp, immTemp
+              sw        dataTemp, (offset & 0xffff)(addrTemp)
+            */
+            m_assembler.lui(addrTempRegister, (address.offset + 0x8000) >> 16);
+            m_assembler.addu(addrTempRegister, addrTempRegister, address.base);
+            m_assembler.lw(dataTempRegister, addrTempRegister, address.offset);
+
+            if (imm.m_value >= 0 && imm.m_value <= 65535 && !m_fixedWidth)
+                m_assembler.ori(dataTempRegister, dataTempRegister, imm.m_value);
+            else {
+                move(imm, immTempRegister);
+                m_assembler.orInsn(dataTempRegister, dataTempRegister, immTempRegister);
+            }
+            m_assembler.sw(dataTempRegister, addrTempRegister, address.offset);
+        }
+    }
+
     void rshift32(RegisterID shiftAmount, RegisterID dest)
     {
         m_assembler.srav(dest, dest, shiftAmount);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to