[Webkit-unassigned] [Bug 97243] MIPS store8 functions

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Fri Sep 21 02:05:27 PDT 2012


https://bugs.webkit.org/show_bug.cgi?id=97243


kilvadyb at homejinni.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
 Attachment #164959|1                           |0
           is patch|                            |
 Attachment #164959|0                           |1
        is obsolete|                            |




--- Comment #3 from kilvadyb at homejinni.com  2012-09-21 02:05:57 PST ---
(From update of attachment 164959)
>diff --git a/Source/JavaScriptCore/assembler/MIPSAssembler.h b/Source/JavaScriptCore/assembler/MIPSAssembler.h
>index 65307d9..d3f8af9 100644
>--- a/Source/JavaScriptCore/assembler/MIPSAssembler.h
>+++ b/Source/JavaScriptCore/assembler/MIPSAssembler.h
>@@ -405,6 +405,18 @@ public:
>         loadDelayNop();
>     }
> 
>+    void sb(RegisterID rt, RegisterID rs, int offset)
>+    {
>+        emitInst(0xa0000000 | (rt << OP_SH_RT) | (rs << OP_SH_RS)
>+                 | (offset & 0xffff));
>+    }
>+
>+    void sh(RegisterID rt, RegisterID rs, int offset)
>+    {
>+        emitInst(0xa4000000 | (rt << OP_SH_RT) | (rs << OP_SH_RS)
>+                 | (offset & 0xffff));
>+    }
>+
>     void sw(RegisterID rt, RegisterID rs, int offset)
>     {
>         emitInst(0xac000000 | (rt << OP_SH_RT) | (rs << OP_SH_RS)
>diff --git a/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h b/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h
>index 8b3ce9f..cfd6a64 100644
>--- a/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h
>+++ b/Source/JavaScriptCore/assembler/MacroAssemblerMIPS.h
>@@ -779,6 +779,81 @@ public:
>         return dataLabel;
>     }
> 
>+    void store8(RegisterID src, BaseIndex address)
>+    {
>+        if (address.offset >= -32768 && address.offset <= 32767
>+            && !m_fixedWidth) {
>+            /*
>+                sll     addrTemp, address.index, address.scale
>+                addu    addrTemp, addrTemp, address.base
>+                sb      src, address.offset(addrTemp)
>+            */
>+            m_assembler.sll(addrTempRegister, address.index, address.scale);
>+            m_assembler.addu(addrTempRegister, addrTempRegister, address.base);
>+            m_assembler.sb(src, addrTempRegister, address.offset);
>+        } else {
>+            /*
>+                sll     addrTemp, address.index, address.scale
>+                addu    addrTemp, addrTemp, address.base
>+                lui     immTemp, (address.offset + 0x8000) >> 16
>+                addu    addrTemp, addrTemp, immTemp
>+                sb      src, (address.offset & 0xffff)(at)
>+            */
>+            m_assembler.sll(addrTempRegister, address.index, address.scale);
>+            m_assembler.addu(addrTempRegister, addrTempRegister, address.base);
>+            m_assembler.lui(immTempRegister, (address.offset + 0x8000) >> 16);
>+            m_assembler.addu(addrTempRegister, addrTempRegister,
>+                             immTempRegister);
>+            m_assembler.sb(src, addrTempRegister, address.offset);
>+        }
>+    }
>+
>+    void store8(TrustedImm32 imm, void* address)
>+    {
>+        /*
>+            li  immTemp, imm
>+            li  addrTemp, address
>+            sb  src, 0(addrTemp)
>+        */
>+        if (!imm.m_value && !m_fixedWidth) {
>+            move(TrustedImmPtr(address), addrTempRegister);
>+            m_assembler.sb(MIPSRegisters::zero, addrTempRegister, 0);
>+        } else {
>+            move(imm, immTempRegister);
>+            move(TrustedImmPtr(address), addrTempRegister);
>+            m_assembler.sb(immTempRegister, addrTempRegister, 0);
>+        }
>+    }
>+
>+    void store16(RegisterID src, BaseIndex address)
>+    {
>+        if (address.offset >= -32768 && address.offset <= 32767
>+            && !m_fixedWidth) {
>+            /*
>+                sll     addrTemp, address.index, address.scale
>+                addu    addrTemp, addrTemp, address.base
>+                sh      src, address.offset(addrTemp)
>+            */
>+            m_assembler.sll(addrTempRegister, address.index, address.scale);
>+            m_assembler.addu(addrTempRegister, addrTempRegister, address.base);
>+            m_assembler.sh(src, addrTempRegister, address.offset);
>+        } else {
>+            /*
>+                sll     addrTemp, address.index, address.scale
>+                addu    addrTemp, addrTemp, address.base
>+                lui     immTemp, (address.offset + 0x8000) >> 16
>+                addu    addrTemp, addrTemp, immTemp
>+                sh      src, (address.offset & 0xffff)(at)
>+            */
>+            m_assembler.sll(addrTempRegister, address.index, address.scale);
>+            m_assembler.addu(addrTempRegister, addrTempRegister, address.base);
>+            m_assembler.lui(immTempRegister, (address.offset + 0x8000) >> 16);
>+            m_assembler.addu(addrTempRegister, addrTempRegister,
>+                             immTempRegister);
>+            m_assembler.sh(src, addrTempRegister, address.offset);
>+        }
>+    }
>+
>     void store32(RegisterID src, ImplicitAddress address)
>     {
>         if (address.offset >= -32768 && address.offset <= 32767

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.



More information about the webkit-unassigned mailing list