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
