components/desktop/thunderbird/patches/firefox31-60-Yarr_SPARC.patch
author Stacy Yeh <stacy.yeh@oracle.com>
Mon, 11 Jan 2016 09:27:45 -0800
changeset 5255 cea0e462549a
permissions -rw-r--r--
22322082 Move Firefox/Thunderbird from Desktop consolidation to Userland

Sparc assembler and fixes a bug in JIT.
Also some endian patch.

--- comm-esr31/mozilla/js/src/assembler/assembler/MacroAssemblerSparc.h.orig	2015-06-04 17:42:51.654203814 -0700
+++ comm-esr31/mozilla/js/src/assembler/assembler/MacroAssemblerSparc.h	2015-06-04 17:42:51.667707756 -0700
@@ -337,6 +337,17 @@
             }
         }
 
+        void load16Unaligned(BaseIndex address, RegisterID dest)
+        {
+            m_assembler.sll_imm(address.index, address.scale, SparcRegisters::g2);
+            add32(Imm32(address.offset+1), SparcRegisters::g2);
+            m_assembler.ldub_r(address.base, SparcRegisters::g2, dest);
+            m_assembler.subcc_imm(SparcRegisters::g2, 1, SparcRegisters::g2);
+            m_assembler.ldub_r(address.base, SparcRegisters::g2, SparcRegisters::g3);
+            m_assembler.sll_imm(SparcRegisters::g3, 8, SparcRegisters::g3);
+            m_assembler.or_r(SparcRegisters::g3, dest, dest);
+        }
+
         void store8(RegisterID src, ImplicitAddress address)
         {
             if (m_assembler.isimm13(address.offset))
@@ -416,6 +427,11 @@
             }
         }
 
+        void load8(BaseIndex address, RegisterID dest)
+        {
+            load8ZeroExtend(address, dest);
+        }
+
         void load8SignExtend(BaseIndex address, RegisterID dest)
         {
             m_assembler.sll_imm(address.index, address.scale, SparcRegisters::g2);
--- comm-esr31/mozilla/js/src/assembler/assembler/SparcAssembler.h.orig	2015-06-04 17:42:51.659564348 -0700
+++ comm-esr31/mozilla/js/src/assembler/assembler/SparcAssembler.h	2015-06-04 17:42:51.667904536 -0700
@@ -161,6 +161,10 @@
             {
             }
 
+            bool isSet() const {
+                return m_offset != -1;
+            }
+
         private:
             JmpSrc(int offset)
                 : m_offset(offset)
--- comm-esr31/mozilla/js/src/yarr/YarrJIT.cpp.orig	2015-06-04 17:42:51.665227855 -0700
+++ comm-esr31/mozilla/js/src/yarr/YarrJIT.cpp	2015-06-04 17:42:51.668284205 -0700
@@ -84,6 +84,7 @@
     static const RegisterID regT1 = SparcRegisters::i5;
 
     static const RegisterID returnRegister = SparcRegisters::i0;
+    static const RegisterID returnRegister2 = SparcRegisters::i1;
 #elif WTF_CPU_X86
     static const RegisterID input = X86Registers::eax;
     static const RegisterID index = X86Registers::edx;
@@ -824,6 +825,18 @@
                 ignoreCaseMask |= 32 << shiftAmount;
         }
 
+#if WTF_CPU_BIG_ENDIAN
+        if (m_charSize == Char8) {
+            allCharacters = (allCharacters << 24) | ((allCharacters << 8) & 0xff0000) |
+                            ((allCharacters >> 8) & 0xff00) | ((allCharacters >> 24) & 0xff);
+            ignoreCaseMask = (ignoreCaseMask << 24) | ((ignoreCaseMask << 8) & 0xff0000) |
+                             ((ignoreCaseMask >> 8) & 0xff00) | ((ignoreCaseMask >> 24) & 0xff);
+        } else {
+            allCharacters = (allCharacters << 16) | ((allCharacters >> 16) & 0xffff);
+            ignoreCaseMask = (ignoreCaseMask << 16) | ((ignoreCaseMask >> 16) & 0xffff);
+        }
+#endif
+
         if (m_charSize == Char8) {
             switch (numberCharacters) {
             case 1: