Title: [137919] trunk/Source/_javascript_Core
Revision
137919
Author
[email protected]
Date
2012-12-17 10:25:08 -0800 (Mon, 17 Dec 2012)

Log Message

Implement add64 for MIPS assembler after r136601
https://bugs.webkit.org/show_bug.cgi?id=104106

Patch by Balazs Kilvady <[email protected]> on 2012-12-17
Reviewed by Zoltan Herczeg.

Added add64 function to MacroAssebler of MIPS.

* assembler/MacroAssemblerMIPS.h:
(JSC::MacroAssemblerMIPS::add32):
(JSC::MacroAssemblerMIPS::add64):
(MacroAssemblerMIPS):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (137918 => 137919)


--- trunk/Source/_javascript_Core/ChangeLog	2012-12-17 18:22:08 UTC (rev 137918)
+++ trunk/Source/_javascript_Core/ChangeLog	2012-12-17 18:25:08 UTC (rev 137919)
@@ -1,3 +1,17 @@
+2012-12-17  Balazs Kilvady  <[email protected]>
+
+        Implement add64 for MIPS assembler after r136601
+        https://bugs.webkit.org/show_bug.cgi?id=104106
+
+        Reviewed by Zoltan Herczeg.
+
+        Added add64 function to MacroAssebler of MIPS.
+
+        * assembler/MacroAssemblerMIPS.h:
+        (JSC::MacroAssemblerMIPS::add32):
+        (JSC::MacroAssemblerMIPS::add64):
+        (MacroAssemblerMIPS):
+
 2012-12-17  Jonathan Liu  <[email protected]>
 
         Fix Math.pow implementation with MinGW-w64

Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerMIPS.h (137918 => 137919)


--- trunk/Source/_javascript_Core/assembler/MacroAssemblerMIPS.h	2012-12-17 18:22:08 UTC (rev 137918)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerMIPS.h	2012-12-17 18:25:08 UTC (rev 137919)
@@ -228,22 +228,40 @@
         /*
            li   addrTemp, address
            li   immTemp, imm
-           lw   dataTemp, 0(addrTemp)
-           addu dataTemp, dataTemp, immTemp
+           lw   cmpTemp, 0(addrTemp)
+           addu dataTemp, cmpTemp, immTemp
            sw   dataTemp, 0(addrTemp)
         */
         move(TrustedImmPtr(address.m_ptr), addrTempRegister);
-        m_assembler.lw(dataTempRegister, addrTempRegister, 0);
-        if (imm.m_value >= -32768 && imm.m_value <= 32767
-            && !m_fixedWidth)
-            m_assembler.addiu(dataTempRegister, dataTempRegister, imm.m_value);
+        m_assembler.lw(cmpTempRegister, addrTempRegister, 0);
+        if (imm.m_value >= -32768 && imm.m_value <= 32767 && !m_fixedWidth)
+            m_assembler.addiu(dataTempRegister, cmpTempRegister, imm.m_value);
         else {
             move(imm, immTempRegister);
-            m_assembler.addu(dataTempRegister, dataTempRegister, immTempRegister);
+            m_assembler.addu(dataTempRegister, cmpTempRegister, immTempRegister);
         }
         m_assembler.sw(dataTempRegister, addrTempRegister, 0);
     }
 
+    void add64(TrustedImm32 imm, AbsoluteAddress address)
+    {
+        /*
+            add32(imm, address)
+            sltu  immTemp, dataTemp, cmpTemp    # set carry-in bit
+            lw    dataTemp, 4(addrTemp)
+            addiu dataTemp, imm.m_value >> 31 ? -1 : 0
+            addu  dataTemp, dataTemp, immTemp
+            sw    dataTemp, 4(addrTemp)
+        */
+        add32(imm, address);
+        m_assembler.sltu(immTempRegister, dataTempRegister, cmpTempRegister);
+        m_assembler.lw(dataTempRegister, addrTempRegister, 4);
+        if (imm.m_value >> 31)
+            m_assembler.addiu(dataTempRegister, dataTempRegister, -1);
+        m_assembler.addu(dataTempRegister, dataTempRegister, immTempRegister);
+        m_assembler.sw(dataTempRegister, addrTempRegister, 4);
+    }
+
     void and32(RegisterID src, RegisterID dest)
     {
         m_assembler.andInsn(dest, dest, src);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to