Here's the patch for 2.6.

Despite the commit message I think the changes only apply to ARMv6, but
I'll revisit this to make sure.

Cheers,
Zan

On Wed, Dec 10, 2014 at 10:22 AM, Žan Doberšek <[email protected]>
wrote:

> On Tue, Dec 9, 2014 at 10:55 AM, Alberto Garcia <[email protected]> wrote:
>
>> On Tue, Dec 09, 2014 at 01:26:18PM +1300, Gavin Lambert wrote:
>>
>> > Just FYI, obtaining the Raspbian source package and building from
>> > source had the same behaviour.  I was finally able to get it to
>> > work however by applying the following patch.  This suggests to me
>> > that something is not very well baked in the JS JIT for non-x86
>> > architectures.
>>
>> I don't think that the JSC JIT works fine with ARMv6 in the 2.4
>> branch so it's probably better that you disable it if you target the
>> Raspberry Pi.
>>
>> Žan can probably give you more details, I think he also has some
>> patches, but for the 2.6 branch.
>>
>
> We had the non-fortune of branching 2.4 directly after a set of larger
> changes
> to JavaScriptCore. We never managed to get 2.4 JSC JIT working properly on
> ARMv6.
>
> Things have turned for the better in 2.6, and we've managed to get all the
> optimization levels (apart from FTL, which is specific to 64-bit
> architectures)
> working properly. There's still a small set of changes that we have to
> apply to
> the source tree, but unfortunately I believe there's little interest in
> having ARMv6
> supported upstream.
>
> I'll scrap the patch up and attach it later.
>
> Cheers,
> Zan
>
>
>>
>> Berto
>> _______________________________________________
>> webkit-gtk mailing list
>> [email protected]
>> https://lists.webkit.org/mailman/listinfo/webkit-gtk
>>
>
>
From 31c9199f72c9946e4b7669c57d622c474e9347fc Mon Sep 17 00:00:00 2001
From: Zan Dobersek <[email protected]>
Date: Tue, 25 Nov 2014 06:59:01 -0800
Subject: [PATCH] Fix JavaScriptCore on ARMv6 and ARMv7.

---
 Source/JavaScriptCore/jit/JITOperations.cpp         | 1 +
 Source/JavaScriptCore/jit/JITStubsARM.h             | 1 +
 Source/JavaScriptCore/jit/RegisterSet.cpp           | 8 ++++++++
 Source/JavaScriptCore/llint/LLIntOfflineAsmConfig.h | 6 ++++++
 Source/JavaScriptCore/llint/LowLevelInterpreter.asm | 9 ++++++++-
 Source/JavaScriptCore/llint/LowLevelInterpreter.cpp | 1 +
 Source/JavaScriptCore/offlineasm/arm.rb             | 8 ++++++--
 Source/JavaScriptCore/offlineasm/instructions.rb    | 4 +++-
 8 files changed, 34 insertions(+), 4 deletions(-)

diff --git a/Source/JavaScriptCore/jit/JITOperations.cpp b/Source/JavaScriptCore/jit/JITOperations.cpp
index 8e24166..b1c7888 100644
--- a/Source/JavaScriptCore/jit/JITOperations.cpp
+++ b/Source/JavaScriptCore/jit/JITOperations.cpp
@@ -2010,6 +2010,7 @@ SYMBOL_STRING(getHostCallReturnValue) ":" "\n"
 #elif COMPILER(GCC) && CPU(ARM_TRADITIONAL)
 asm (
 ".text" "\n"
+".align 2" "\n"
 ".globl " SYMBOL_STRING(getHostCallReturnValue) "\n"
 HIDE_SYMBOL(getHostCallReturnValue) "\n"
 INLINE_ARM_FUNCTION(getHostCallReturnValue)
diff --git a/Source/JavaScriptCore/jit/JITStubsARM.h b/Source/JavaScriptCore/jit/JITStubsARM.h
index 19c37b7..904d247 100644
--- a/Source/JavaScriptCore/jit/JITStubsARM.h
+++ b/Source/JavaScriptCore/jit/JITStubsARM.h
@@ -149,6 +149,7 @@ COMPILE_ASSERT(sizeof(MacroAssembler::ProbeContext) == PROBE_SIZE, ProbeContext_
 #if ENABLE(MASM_PROBE)
 asm (
 ".text" "\n"
+".align 2" "\n"
 ".globl " SYMBOL_STRING(ctiMasmProbeTrampoline) "\n"
 HIDE_SYMBOL(ctiMasmProbeTrampoline) "\n"
 INLINE_ARM_FUNCTION(ctiMasmProbeTrampoline) "\n"
diff --git a/Source/JavaScriptCore/jit/RegisterSet.cpp b/Source/JavaScriptCore/jit/RegisterSet.cpp
index 608ebd5..94905b0 100644
--- a/Source/JavaScriptCore/jit/RegisterSet.cpp
+++ b/Source/JavaScriptCore/jit/RegisterSet.cpp
@@ -105,6 +105,14 @@ RegisterSet RegisterSet::calleeSaveRegisters()
         reg <= ARM64Registers::q15;
         reg = static_cast<ARM64Registers::FPRegisterID>(reg + 1))
         result.set(reg);
+#elif CPU(ARM)
+    result.set(ARMRegisters::r4);
+    result.set(ARMRegisters::r5);
+    result.set(ARMRegisters::r6);
+    result.set(ARMRegisters::r7);
+    result.set(ARMRegisters::r8);
+    result.set(ARMRegisters::r9);
+    result.set(ARMRegisters::r10);
 #else
     UNREACHABLE_FOR_PLATFORM();
 #endif
diff --git a/Source/JavaScriptCore/llint/LLIntOfflineAsmConfig.h b/Source/JavaScriptCore/llint/LLIntOfflineAsmConfig.h
index 00e6238..3304001 100644
--- a/Source/JavaScriptCore/llint/LLIntOfflineAsmConfig.h
+++ b/Source/JavaScriptCore/llint/LLIntOfflineAsmConfig.h
@@ -160,4 +160,10 @@
 #define OFFLINE_ASM_GGC 0
 #endif
 
+#if COMPILER_SUPPORTS(EABI) && CPU(ARM)
+#define OFFLINE_ASM_ARM_EABI 1
+#else
+#define OFFLINE_ASM_ARM_EABI 0
+#endif
+
 #endif // LLIntOfflineAsmConfig_h
diff --git a/Source/JavaScriptCore/llint/LowLevelInterpreter.asm b/Source/JavaScriptCore/llint/LowLevelInterpreter.asm
index 29ac65a..dca9561 100644
--- a/Source/JavaScriptCore/llint/LowLevelInterpreter.asm
+++ b/Source/JavaScriptCore/llint/LowLevelInterpreter.asm
@@ -825,11 +825,18 @@ macro setEntryAddress(index, label)
         pcrtoaddr label, t1
         move index, t2
         storep t1, [a0, t2, 8]
-    elsif ARM or ARMv7 or ARMv7_TRADITIONAL
+    elsif ARMv7 or ARMv7_TRADITIONAL
         mvlbl (label - _relativePCBase), t2
         addp t2, t1, t2
         move index, t3
         storep t2, [a0, t3, 4]
+    elsif ARM
+        ldlbl _relativePCBase, t3
+        ldlbl label, t2
+        subp t3, t2
+        addp t2, t1, t2
+        move index, t3
+        storep t2, [a0, t3, 4]
     elsif SH4
         move (label - _relativePCBase), t2
         addp t2, t1, t2
diff --git a/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp b/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp
index d922b83..d58b1a7 100644
--- a/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp
+++ b/Source/JavaScriptCore/llint/LowLevelInterpreter.cpp
@@ -516,6 +516,7 @@ JSValue CLoop::execute(OpcodeID entryOpcodeID, void* executableAddress, VM* vm,
 #else
 #define OFFLINE_ASM_GLOBAL_LABEL(label)         \
     ".text\n"                                   \
+    ".align 4\n"                                \
     ".globl " SYMBOL_STRING(label) "\n"         \
     HIDE_SYMBOL(label) "\n"                     \
     SYMBOL_STRING(label) ":\n"
diff --git a/Source/JavaScriptCore/offlineasm/arm.rb b/Source/JavaScriptCore/offlineasm/arm.rb
index 44cfbe5..344242c 100644
--- a/Source/JavaScriptCore/offlineasm/arm.rb
+++ b/Source/JavaScriptCore/offlineasm/arm.rb
@@ -473,8 +473,10 @@ class Instruction
                 $asm.puts "mov #{armFlippedOperands(operands)}"
             end
         when "mvlbl"
-                $asm.puts "movw #{operands[1].armOperand}, \#:lower16:#{operands[0].value}"
-                $asm.puts "movt #{operands[1].armOperand}, \#:upper16:#{operands[0].value}"
+            $asm.puts "movw #{operands[1].armOperand}, \#:lower16:#{operands[0].value}"
+            $asm.puts "movt #{operands[1].armOperand}, \#:upper16:#{operands[0].value}"
+        when "ldlbl"
+            $asm.puts "ldr #{operands[1].armOperand}, =#{operands[0].value}"
         when "nop"
             $asm.puts "nop"
         when "bieq", "bpeq", "bbeq"
@@ -543,6 +545,8 @@ class Instruction
             else
                 $asm.puts "blx #{operands[0].armOperand}"
             end
+        when "calllbl"
+            $asm.puts "bl #{operands[0].asmLabel}"
         when "break"
             $asm.puts "bkpt #0"
         when "ret"
diff --git a/Source/JavaScriptCore/offlineasm/instructions.rb b/Source/JavaScriptCore/offlineasm/instructions.rb
index 1d0d867..7678925 100644
--- a/Source/JavaScriptCore/offlineasm/instructions.rb
+++ b/Source/JavaScriptCore/offlineasm/instructions.rb
@@ -261,7 +261,9 @@ X86_INSTRUCTIONS =
 ARM_INSTRUCTIONS =
     [
      "clrbp",
-     "mvlbl"
+     "mvlbl",
+     "ldlbl",
+     "calllbl"
     ]
 
 ARM64_INSTRUCTIONS =
-- 
2.1.3

_______________________________________________
webkit-gtk mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-gtk

Reply via email to