Title: [292457] trunk/Source/_javascript_Core
Revision
292457
Author
[email protected]
Date
2022-04-06 03:13:31 -0700 (Wed, 06 Apr 2022)

Log Message

[JSC] Add DoNotHaveTagRegisters mode to unboxDouble
https://bugs.webkit.org/show_bug.cgi?id=238018

Patch by Xan Lopez <[email protected]> on 2022-04-06
Reviewed by Yusuke Suzuki.

Wasm cannot use unboxDouble as-is because
GPRInfo::numberTagRegister is not available. Add a
DoNotHaveTagRegister mode so we can get rid of some duplicated
code.

* jit/AssemblyHelpers.h:
(JSC::AssemblyHelpers::unboxDoubleWithoutAssertions):
(JSC::AssemblyHelpers::unboxDouble):
* wasm/js/WasmToJS.cpp:
(JSC::Wasm::wasmToJS):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (292456 => 292457)


--- trunk/Source/_javascript_Core/ChangeLog	2022-04-06 10:05:05 UTC (rev 292456)
+++ trunk/Source/_javascript_Core/ChangeLog	2022-04-06 10:13:31 UTC (rev 292457)
@@ -1,3 +1,21 @@
+2022-04-06  Xan Lopez  <[email protected]>
+
+        [JSC] Add DoNotHaveTagRegisters mode to unboxDouble
+        https://bugs.webkit.org/show_bug.cgi?id=238018
+
+        Reviewed by Yusuke Suzuki.
+
+        Wasm cannot use unboxDouble as-is because
+        GPRInfo::numberTagRegister is not available. Add a
+        DoNotHaveTagRegister mode so we can get rid of some duplicated
+        code.
+
+        * jit/AssemblyHelpers.h:
+        (JSC::AssemblyHelpers::unboxDoubleWithoutAssertions):
+        (JSC::AssemblyHelpers::unboxDouble):
+        * wasm/js/WasmToJS.cpp:
+        (JSC::Wasm::wasmToJS):
+
 2022-04-06  Adrian Perez de Castro  <[email protected]>
 
         [JSC] Nested includes do not change offlineasm hash output

Modified: trunk/Source/_javascript_Core/jit/AssemblyHelpers.h (292456 => 292457)


--- trunk/Source/_javascript_Core/jit/AssemblyHelpers.h	2022-04-06 10:05:05 UTC (rev 292456)
+++ trunk/Source/_javascript_Core/jit/AssemblyHelpers.h	2022-04-06 10:13:31 UTC (rev 292457)
@@ -1369,16 +1369,20 @@
         }
         return gpr;
     }
-    FPRReg unboxDoubleWithoutAssertions(GPRReg gpr, GPRReg resultGPR, FPRReg fpr)
+    FPRReg unboxDoubleWithoutAssertions(GPRReg gpr, GPRReg resultGPR, FPRReg fpr, TagRegistersMode mode = HaveTagRegisters)
     {
-        add64(GPRInfo::numberTagRegister, gpr, resultGPR);
+        if (mode == DoNotHaveTagRegisters) {
+            move(TrustedImm64(JSValue::NumberTag), resultGPR);
+            add64(gpr, resultGPR);
+        } else
+            add64(GPRInfo::numberTagRegister, gpr, resultGPR);
         move64ToDouble(resultGPR, fpr);
         return fpr;
     }
-    FPRReg unboxDouble(GPRReg gpr, GPRReg resultGPR, FPRReg fpr)
+    FPRReg unboxDouble(GPRReg gpr, GPRReg resultGPR, FPRReg fpr, TagRegistersMode mode = HaveTagRegisters)
     {
         jitAssertIsJSDouble(gpr);
-        return unboxDoubleWithoutAssertions(gpr, resultGPR, fpr);
+        return unboxDoubleWithoutAssertions(gpr, resultGPR, fpr, mode);
     }
     
     void boxDouble(FPRReg fpr, JSValueRegs regs, TagRegistersMode mode = HaveTagRegisters)

Modified: trunk/Source/_javascript_Core/wasm/js/WasmToJS.cpp (292456 => 292457)


--- trunk/Source/_javascript_Core/wasm/js/WasmToJS.cpp	2022-04-06 10:05:05 UTC (rev 292456)
+++ trunk/Source/_javascript_Core/wasm/js/WasmToJS.cpp	2022-04-06 10:13:31 UTC (rev 292457)
@@ -328,9 +328,7 @@
             done.append(jit.jump());
 
             isDouble.link(&jit);
-            jit.move(JIT::TrustedImm64(JSValue::NumberTag), GPRInfo::returnValueGPR2);
-            jit.add64(GPRInfo::returnValueGPR2, GPRInfo::returnValueGPR);
-            jit.move64ToDouble(GPRInfo::returnValueGPR, dest);
+            jit.unboxDoubleWithoutAssertions(GPRInfo::returnValueGPR, GPRInfo::returnValueGPR2, dest, DoNotHaveTagRegisters);
             jit.convertDoubleToFloat(dest, dest);
             done.append(jit.jump());
 
@@ -359,9 +357,7 @@
             done.append(jit.jump());
 
             isDouble.link(&jit);
-            jit.move(JIT::TrustedImm64(JSValue::NumberTag), GPRInfo::returnValueGPR2);
-            jit.add64(GPRInfo::returnValueGPR2, GPRInfo::returnValueGPR);
-            jit.move64ToDouble(GPRInfo::returnValueGPR, dest);
+            jit.unboxDoubleWithoutAssertions(GPRInfo::returnValueGPR, GPRInfo::returnValueGPR2, dest, DoNotHaveTagRegisters);
             done.append(jit.jump());
 
             notANumber.link(&jit);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to