Bug 97243 - MIPS store8 functions
Summary: MIPS store8 functions
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: JavaScriptCore (show other bugs)
Version: 528+ (Nightly build)
Hardware: Other Linux
: P2 Normal
Assignee: Nobody
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-09-20 11:53 PDT by Balazs Kilvady
Modified: 2012-09-24 08:05 PDT (History)
7 users (show)

See Also:


Attachments
MIPS store8 functions (4.49 KB, text/plain)
2012-09-20 11:58 PDT, Balazs Kilvady
barraclough: review+
webkit.review.bot: commit-queue-
Details
MIPS store8 functions (5.63 KB, text/plain)
2012-09-21 02:07 PDT, Balazs Kilvady
no flags Details
MIPS store8 functions (5.45 KB, patch)
2012-09-21 02:15 PDT, Balazs Kilvady
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Balazs Kilvady 2012-09-20 11:53:28 PDT
store8 functions added to MacroAssemblerMIPS.h and low level operations to MIPSAssembler.h. To be able to compile the master branch for MIPS the or32 patch from Chao-Ying Fu (https://bugs.webkit.org/show_bug.cgi?id=97157) also must be applied.
Comment 1 Balazs Kilvady 2012-09-20 11:58:33 PDT
Created attachment 164959 [details]
MIPS store8 functions
Comment 2 WebKit Review Bot 2012-09-21 00:55:05 PDT
Comment on attachment 164959 [details]
MIPS store8 functions

Rejecting attachment 164959 [details] from commit-queue.

Failed to run "['/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch', '--status-host=queues.webkit.org', '-..." exit_code: 2

Last 500 characters of output:
Kit/chromium/third_party/yasm/source/patched-yasm --revision 154708 --non-interactive --force --accept theirs-conflict --ignore-externals' in '/mnt/git/webkit-commit-queue/Source/WebKit/chromium'
51>At revision 154708.

________ running '/usr/bin/python tools/clang/scripts/update.py --mac-only' in '/mnt/git/webkit-commit-queue/Source/WebKit/chromium'

________ running '/usr/bin/python gyp_webkit' in '/mnt/git/webkit-commit-queue/Source/WebKit/chromium'
Updating webkit projects from gyp files...

Full output: http://queues.webkit.org/results/13948513
Comment 3 Balazs Kilvady 2012-09-21 02:05:57 PDT
Comment on attachment 164959 [details]
MIPS store8 functions

>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
Comment 4 Balazs Kilvady 2012-09-21 02:07:38 PDT
Created attachment 165082 [details]
MIPS store8 functions
Comment 5 Balazs Kilvady 2012-09-21 02:15:45 PDT
Created attachment 165085 [details]
MIPS store8 functions
Comment 6 Simon Hausmann 2012-09-24 05:31:55 PDT
Holger, do you know a bit of MIPS assembler to review this? :)
Comment 7 WebKit Review Bot 2012-09-24 08:05:06 PDT
Comment on attachment 165085 [details]
MIPS store8 functions

Clearing flags on attachment: 165085

Committed r129367: <http://trac.webkit.org/changeset/129367>
Comment 8 WebKit Review Bot 2012-09-24 08:05:10 PDT
All reviewed patches have been landed.  Closing bug.