[JSC] Reenable baseline JIT on mips
authorguijemont@igalia.com <guijemont@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Jan 2019 12:04:36 +0000 (12:04 +0000)
committerguijemont@igalia.com <guijemont@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Jan 2019 12:04:36 +0000 (12:04 +0000)
https://bugs.webkit.org/show_bug.cgi?id=192983

Reviewed by Mark Lam.

.:

Use baseline JIT by default on MIPS.

* Source/cmake/WebKitFeatures.cmake:

JSTests:

Added a new test for a case that was triggering a RELEASE_ASSERT when
testing.
Disable some slow tests that were already disabled for arm and x86.

* stress/json-parse-big-object.js: Added.
* stress/new-largeish-contiguous-array-with-size.js:
* stress/op_add.js:
* stress/op_bitand.js:
* stress/op_bitor.js:
* stress/op_bitxor.js:
* stress/op_lshift-ConstVar.js:
* stress/op_lshift-VarConst.js:
* stress/op_lshift-VarVar.js:
* stress/op_mod-ConstVar.js:
* stress/op_mod-VarConst.js:
* stress/op_mod-VarVar.js:
* stress/op_mul-ConstVar.js:
* stress/op_mul-VarConst.js:
* stress/op_mul-VarVar.js:
* stress/op_rshift-ConstVar.js:
* stress/op_rshift-VarConst.js:
* stress/op_rshift-VarVar.js:
* stress/op_sub-ConstVar.js:
* stress/op_sub-VarConst.js:
* stress/op_sub-VarVar.js:
* stress/op_urshift-ConstVar.js:
* stress/op_urshift-VarConst.js:
* stress/op_urshift-VarVar.js:
* stress/sampling-profiler-richards.js:
* stress/spread-forward-call-varargs-stack-overflow.js:

Source/JavaScriptCore:

Use $s0 as metadata register and make sure it's properly saved and
restored.

* jit/GPRInfo.h:
* jit/RegisterSet.cpp:
(JSC::RegisterSet::vmCalleeSaveRegisters):
(JSC::RegisterSet::llintBaselineCalleeSaveRegisters):
* llint/LowLevelInterpreter.asm:
* offlineasm/mips.rb:

Source/WTF:

Use baseline JIT by default on MIPS.

* wtf/Platform.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240432 268f45cc-cd09-0410-ab3c-d52691b4dbfc

36 files changed:
ChangeLog
JSTests/ChangeLog
JSTests/stress/json-parse-big-object.js [new file with mode: 0644]
JSTests/stress/new-largeish-contiguous-array-with-size.js
JSTests/stress/op_add.js
JSTests/stress/op_bitand.js
JSTests/stress/op_bitor.js
JSTests/stress/op_bitxor.js
JSTests/stress/op_lshift-ConstVar.js
JSTests/stress/op_lshift-VarConst.js
JSTests/stress/op_lshift-VarVar.js
JSTests/stress/op_mod-ConstVar.js
JSTests/stress/op_mod-VarConst.js
JSTests/stress/op_mod-VarVar.js
JSTests/stress/op_mul-ConstVar.js
JSTests/stress/op_mul-VarConst.js
JSTests/stress/op_mul-VarVar.js
JSTests/stress/op_rshift-ConstVar.js
JSTests/stress/op_rshift-VarConst.js
JSTests/stress/op_rshift-VarVar.js
JSTests/stress/op_sub-ConstVar.js
JSTests/stress/op_sub-VarConst.js
JSTests/stress/op_sub-VarVar.js
JSTests/stress/op_urshift-ConstVar.js
JSTests/stress/op_urshift-VarConst.js
JSTests/stress/op_urshift-VarVar.js
JSTests/stress/sampling-profiler-richards.js
JSTests/stress/spread-forward-call-varargs-stack-overflow.js
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/jit/GPRInfo.h
Source/JavaScriptCore/jit/RegisterSet.cpp
Source/JavaScriptCore/llint/LowLevelInterpreter.asm
Source/JavaScriptCore/offlineasm/mips.rb
Source/WTF/ChangeLog
Source/WTF/wtf/Platform.h
Source/cmake/WebKitFeatures.cmake

index 568276d..a69b7ba 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2019-01-24  Guillaume Emont  <guijemont@igalia.com>
+
+        [JSC] Reenable baseline JIT on mips
+        https://bugs.webkit.org/show_bug.cgi?id=192983
+
+        Reviewed by Mark Lam.
+
+        Use baseline JIT by default on MIPS.
+
+        * Source/cmake/WebKitFeatures.cmake:
+
 2019-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         [GTK][WPE] Support JPEG 2000 images
index 4dc67e7..e4819f8 100644 (file)
@@ -1,3 +1,41 @@
+2019-01-24  Guillaume Emont  <guijemont@igalia.com>
+
+        [JSC] Reenable baseline JIT on mips
+        https://bugs.webkit.org/show_bug.cgi?id=192983
+
+        Reviewed by Mark Lam.
+
+        Added a new test for a case that was triggering a RELEASE_ASSERT when
+        testing.
+        Disable some slow tests that were already disabled for arm and x86.
+
+        * stress/json-parse-big-object.js: Added.
+        * stress/new-largeish-contiguous-array-with-size.js:
+        * stress/op_add.js:
+        * stress/op_bitand.js:
+        * stress/op_bitor.js:
+        * stress/op_bitxor.js:
+        * stress/op_lshift-ConstVar.js:
+        * stress/op_lshift-VarConst.js:
+        * stress/op_lshift-VarVar.js:
+        * stress/op_mod-ConstVar.js:
+        * stress/op_mod-VarConst.js:
+        * stress/op_mod-VarVar.js:
+        * stress/op_mul-ConstVar.js:
+        * stress/op_mul-VarConst.js:
+        * stress/op_mul-VarVar.js:
+        * stress/op_rshift-ConstVar.js:
+        * stress/op_rshift-VarConst.js:
+        * stress/op_rshift-VarVar.js:
+        * stress/op_sub-ConstVar.js:
+        * stress/op_sub-VarConst.js:
+        * stress/op_sub-VarVar.js:
+        * stress/op_urshift-ConstVar.js:
+        * stress/op_urshift-VarConst.js:
+        * stress/op_urshift-VarVar.js:
+        * stress/sampling-profiler-richards.js:
+        * stress/spread-forward-call-varargs-stack-overflow.js:
+
 2019-01-23  Yusuke Suzuki  <ysuzuki@apple.com>
 
         [DFG] AvailabilityMap::pruneByLiveness should make non-live operands Availability::unavailable instead of Availability()
diff --git a/JSTests/stress/json-parse-big-object.js b/JSTests/stress/json-parse-big-object.js
new file mode 100644 (file)
index 0000000..d70b3ec
--- /dev/null
@@ -0,0 +1,15 @@
+
+var obj = {
+    "foo1": { "foo2": { "foo3":  { "foo4":  { "foo5":  { "foo6":  { "foo7": [
+        { "bar1":  "a".repeat(670)},
+        { "bar2":  "a".repeat(15771)},
+    ]
+    }}}}}}};
+
+function doTest(x) {
+    for (let i=1; i<10000; i++) {
+        var s = JSON.stringify(x);
+    }
+}
+
+doTest(obj);
index 05a2614..e119442 100644 (file)
@@ -1,6 +1,6 @@
 // We only need one run of this with any GC or JIT strategy. This test is not particularly fast.
 // Unfortunately, it needs to run for a while to test the thing it's testing.
-//@ if $architecture =~ /arm/ then skip else runWithRAMSize(10000000) end
+//@ if $architecture =~ /arm|mips/ then skip else runWithRAMSize(10000000) end
 //@ slow!
 
 function foo(x) {
index c629040..ce799de 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index a458603..d014aa6 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index 2668a99..ad3bfaa 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index 769c552..f22fa04 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index 79b46c1..1648c25 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index da7e06f..bfce6c1 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index 26b8688..43f7630 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index 6052bb2..c0f2cb3 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT("--timeoutMultiplier=1.5")
 
 // If all goes well, this test module will terminate silently. If not, it will print
index 3ecc67d..68303fb 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT("--timeoutMultiplier=1.5")
 
 // If all goes well, this test module will terminate silently. If not, it will print
index 1f09be8..29bdccb 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT("--timeoutMultiplier=1.5")
 
 // If all goes well, this test module will terminate silently. If not, it will print
index f1ca9b5..364144d 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index 1de41fe..441b35c 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index fd9f1d0..042fbb8 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index 721856c..a34515b 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index b2bf2da..715aea6 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index a6a1bfc..f1f4166 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index f651df2..1f4e7b4 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index f590d0e..9e7ed1a 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index f194861..3bb0b2d 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index d427c1f..b136be3 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index 1bf063c..8c4308f 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index bc22b99..466d47b 100644 (file)
@@ -1,6 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm" or $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 //@ runFTLNoCJIT
 
 // If all goes well, this test module will terminate silently. If not, it will print
index 475063b..5ea41bd 100644 (file)
@@ -1,6 +1,6 @@
 // [JSC] [Armv7] stress/sampling-profiler-richards.js crashes
 // https://bugs.webkit.org/show_bug.cgi?id=190426
-//@ skip if $architecture == "arm" and $hostOS == "linux"
+//@ skip if ["arm", "mips"].include?($architecture) and $hostOS == "linux"
 //@ skip if $architecture == "x86"
 //@ runDefault("--collectContinuously=1", "--useSamplingProfiler=1", "--collectSamplingProfilerDataForJSCShell=1")
 
index ec1339b..2b76c87 100644 (file)
@@ -1,7 +1,6 @@
 // FIXME: unskip when this is solved
 // https://bugs.webkit.org/show_bug.cgi?id=191163
-//@ skip if $architecture == "arm"
-//@ skip if $architecture == "x86"
+//@ skip if ["arm", "mips", "x86"].include?($architecture)
 function assert(b) {
     if (!b)
         throw new Error("Bad assertion");
index 43d6ca8..bdf15f7 100644 (file)
@@ -1,3 +1,20 @@
+2019-01-24  Guillaume Emont  <guijemont@igalia.com>
+
+        [JSC] Reenable baseline JIT on mips
+        https://bugs.webkit.org/show_bug.cgi?id=192983
+
+        Reviewed by Mark Lam.
+
+        Use $s0 as metadata register and make sure it's properly saved and
+        restored.
+
+        * jit/GPRInfo.h:
+        * jit/RegisterSet.cpp:
+        (JSC::RegisterSet::vmCalleeSaveRegisters):
+        (JSC::RegisterSet::llintBaselineCalleeSaveRegisters):
+        * llint/LowLevelInterpreter.asm:
+        * offlineasm/mips.rb:
+
 2019-01-24  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         [GLIB] Expose JavaScriptCore options in GLib public API
index 175d530..6bcf676 100644 (file)
@@ -716,7 +716,7 @@ public:
 
 #if CPU(MIPS)
 #define NUMBER_OF_ARGUMENT_REGISTERS 4u
-#define NUMBER_OF_CALLEE_SAVES_REGISTERS 0u
+#define NUMBER_OF_CALLEE_SAVES_REGISTERS 1u
 
 class GPRInfo {
 public:
@@ -750,6 +750,7 @@ public:
     static const GPRReg returnValueGPR = regT0;
     static const GPRReg returnValueGPR2 = regT1;
     static const GPRReg nonPreservedNonReturnGPR = regT2;
+    static const GPRReg regCS0 = MIPSRegisters::s0;
 
     static GPRReg toRegister(unsigned index)
     {
index 7c94804..3d02317 100644 (file)
@@ -192,7 +192,7 @@ RegisterSet RegisterSet::vmCalleeSaveRegisters()
     result.set(FPRInfo::fpRegCS5);
     result.set(FPRInfo::fpRegCS6);
     result.set(FPRInfo::fpRegCS7);
-#elif CPU(ARM_THUMB2)
+#elif CPU(ARM_THUMB2) || CPU(MIPS)
     result.set(GPRInfo::regCS0);
 #endif
     return result;
@@ -238,6 +238,7 @@ RegisterSet RegisterSet::llintBaselineCalleeSaveRegisters()
     result.set(GPRInfo::regCS8);
     result.set(GPRInfo::regCS9);
 #elif CPU(MIPS)
+    result.set(GPRInfo::regCS0);
 #else
     UNREACHABLE_FOR_PLATFORM();
 #endif
index 70cd7f1..5963977 100644 (file)
@@ -214,6 +214,8 @@ elsif C_LOOP
     const CalleeSaveSpaceAsVirtualRegisters = 1
 elsif ARMv7
     const CalleeSaveSpaceAsVirtualRegisters = 1
+elsif MIPS
+    const CalleeSaveSpaceAsVirtualRegisters = 1
 else
     const CalleeSaveSpaceAsVirtualRegisters = 0
 end
@@ -280,6 +282,8 @@ else
         const metadataTable = csr3
     elsif ARMv7
         const metadataTable = csr0
+    elsif MIPS
+        const metadataTable = csr0
     else
         error
     end
@@ -614,7 +618,7 @@ if C_LOOP or ARM64 or ARM64E or X86_64 or X86_64_WIN
 elsif ARMv7
     const CalleeSaveRegisterCount = 7
 elsif MIPS
-    const CalleeSaveRegisterCount = 1
+    const CalleeSaveRegisterCount = 2
 elsif X86 or X86_WIN
     const CalleeSaveRegisterCount = 3
 end
@@ -630,8 +634,9 @@ macro pushCalleeSaves()
     elsif ARMv7
         emit "push {r4-r6, r8-r11}"
     elsif MIPS
-        emit "addiu $sp, $sp, -4"
-        emit "sw $s4, 0($sp)"
+        emit "addiu $sp, $sp, -8"
+        emit "sw $s0, 0($sp)" # csr0/metaData
+        emit "sw $s4, 4($sp)"
         # save $gp to $s4 so that we can restore it after a function call
         emit "move $s4, $gp"
     elsif X86
@@ -650,8 +655,9 @@ macro popCalleeSaves()
     elsif ARMv7
         emit "pop {r4-r6, r8-r11}"
     elsif MIPS
-        emit "lw $s4, 0($sp)"
-        emit "addiu $sp, $sp, 4"
+        emit "lw $s0, 0($sp)"
+        emit "lw $s4, 4($sp)"
+        emit "addiu $sp, $sp, 8"
     elsif X86
         emit "pop %ebx"
         emit "pop %edi"
@@ -693,12 +699,11 @@ macro preserveCalleeSavesUsedByLLInt()
     subp CalleeSaveSpaceStackAligned, sp
     if C_LOOP
         storep metadataTable, -PtrSize[cfr]
-    elsif ARMv7
+    elsif ARMv7 or MIPS
         storep metadataTable, -4[cfr]
     elsif ARM64 or ARM64E
         emit "stp x27, x28, [x29, #-16]"
         emit "stp x25, x26, [x29, #-32]"
-    elsif MIPS
     elsif X86
     elsif X86_WIN
     elsif X86_64
@@ -717,12 +722,11 @@ end
 macro restoreCalleeSavesUsedByLLInt()
     if C_LOOP
         loadp -PtrSize[cfr], metadataTable
-    elsif ARMv7
+    elsif ARMv7 or MIPS
         loadp -4[cfr], metadataTable
     elsif ARM64 or ARM64E
         emit "ldp x25, x26, [x29, #-32]"
         emit "ldp x27, x28, [x29, #-16]"
-    elsif MIPS
     elsif X86
     elsif X86_WIN
     elsif X86_64
@@ -739,7 +743,7 @@ macro restoreCalleeSavesUsedByLLInt()
 end
 
 macro copyCalleeSavesToVMEntryFrameCalleeSavesBuffer(vm, temp)
-    if ARM64 or ARM64E or X86_64 or X86_64_WIN or ARMv7
+    if ARM64 or ARM64E or X86_64 or X86_64_WIN or ARMv7 or MIPS
         loadp VM::topEntryFrame[vm], temp
         vmEntryRecord(temp, temp)
         leap VMEntryRecord::calleeSaveRegistersBuffer[temp], temp
@@ -776,14 +780,14 @@ macro copyCalleeSavesToVMEntryFrameCalleeSavesBuffer(vm, temp)
             storeq csr4, 32[temp]
             storeq csr5, 40[temp]
             storeq csr6, 48[temp]
-        elsif ARMv7
+        elsif ARMv7 or MIPS
             storep csr0, [temp]
         end
     end
 end
 
 macro restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer(vm, temp)
-    if ARM64 or ARM64E or X86_64 or X86_64_WIN or ARMv7
+    if ARM64 or ARM64E or X86_64 or X86_64_WIN or ARMv7 or MIPS
         loadp VM::topEntryFrame[vm], temp
         vmEntryRecord(temp, temp)
         leap VMEntryRecord::calleeSaveRegistersBuffer[temp], temp
@@ -820,7 +824,7 @@ macro restoreCalleeSavesFromVMEntryFrameCalleeSavesBuffer(vm, temp)
             loadq 32[temp], csr4
             loadq 40[temp], csr5
             loadq 48[temp], csr6
-        elsif ARMv7
+        elsif ARMv7 or MIPS
             loadp [temp], csr0
         end
     end
index df19c6b..36e1fb7 100644 (file)
@@ -135,6 +135,8 @@ class RegisterID
             "$t5"
         when "cfr"
             "$fp"
+        when "csr0"
+            "$s0"
         when "lr"
             "$ra"
         when "sp"
@@ -878,7 +880,7 @@ class Instruction
             $asm.puts "sw #{mipsOperands(operands)}"
         when "loadb"
             $asm.puts "lbu #{mipsFlippedOperands(operands)}"
-        when "loadbs"
+        when "loadbs", "loadbsp"
             $asm.puts "lb #{mipsFlippedOperands(operands)}"
         when "storeb"
             $asm.puts "sb #{mipsOperands(operands)}"
@@ -1035,7 +1037,14 @@ class Instruction
         when /^bnz/
             $asm.puts "bne #{operands[0].mipsOperand}, #{operands[1].mipsOperand}, #{operands[2].asmLabel}"
         when "leai", "leap"
-            operands[0].mipsEmitLea(operands[1])
+            if operands[0].is_a? LabelReference
+                labelRef = operands[0]
+                raise unless labelRef.offset == 0
+                $asm.puts "lw #{operands[1].mipsOperand}, %got(#{labelRef.asmLabel})($gp)"
+            else
+                operands[0].mipsEmitLea(operands[1])
+            end
+
         when "smulli"
             raise "Wrong number of arguments to smull in #{self.inspect} at #{codeOriginString}" unless operands.length == 4
             $asm.puts "mult #{operands[0].mipsOperand}, #{operands[1].mipsOperand}"
index 5967358..84811fd 100644 (file)
@@ -1,3 +1,14 @@
+2019-01-24  Guillaume Emont  <guijemont@igalia.com>
+
+        [JSC] Reenable baseline JIT on mips
+        https://bugs.webkit.org/show_bug.cgi?id=192983
+
+        Reviewed by Mark Lam.
+
+        Use baseline JIT by default on MIPS.
+
+        * wtf/Platform.h:
+
 2019-01-24  David Kilzer  <ddkilzer@apple.com>
 
         Duplicate global variables: WTF::asciiCaseFoldTable
index e0c0d44..aa21c5f 100644 (file)
 #if !defined(ENABLE_JIT)
 #define ENABLE_JIT 1
 #endif
+#elif CPU(MIPS) && OS(LINUX)
+/* Same on MIPS/Linux, but DFG is disabled for now. */
+#if !defined(ENABLE_JIT)
+#define ENABLE_JIT 1
+#endif
+#undef ENABLE_DFG_JIT
+#define ENABLE_DFG_JIT 0
 #else
-/* Disable JIT and force C_LOOP on all 32bit-architectures but ARMv7-Thumb2/Linux. */
+/* Disable JIT and force C_LOOP on all other 32bit architectures. */
 #undef ENABLE_JIT
 #define ENABLE_JIT 0
 #undef ENABLE_C_LOOP
index 041ab32..bca4e99 100644 (file)
@@ -74,6 +74,12 @@ macro(WEBKIT_OPTION_BEGIN)
         set(USE_SYSTEM_MALLOC_DEFAULT OFF)
         set(ENABLE_C_LOOP_DEFAULT OFF)
         set(ENABLE_SAMPLING_PROFILER_DEFAULT ON)
+    elseif (WTF_CPU_MIPS AND WTF_OS_LINUX)
+        set(ENABLE_JIT_DEFAULT ON)
+        set(ENABLE_FTL_DEFAULT OFF)
+        set(USE_SYSTEM_MALLOC_DEFAULT OFF)
+        set(ENABLE_C_LOOP_DEFAULT OFF)
+        set(ENABLE_SAMPLING_PROFILER_DEFAULT OFF)
     else ()
         set(ENABLE_JIT_DEFAULT OFF)
         set(ENABLE_FTL_DEFAULT OFF)