Title: [291745] trunk/Source/_javascript_Core
Revision
291745
Author
[email protected]
Date
2022-03-23 07:12:54 -0700 (Wed, 23 Mar 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-03-23
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.

* assembler/MacroAssembler.h:
(JSC::MacroAssembler::add64):
* 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 (291744 => 291745)


--- trunk/Source/_javascript_Core/ChangeLog	2022-03-23 13:54:42 UTC (rev 291744)
+++ trunk/Source/_javascript_Core/ChangeLog	2022-03-23 14:12:54 UTC (rev 291745)
@@ -1,3 +1,23 @@
+2022-03-23  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.
+
+        * assembler/MacroAssembler.h:
+        (JSC::MacroAssembler::add64):
+        * jit/AssemblyHelpers.h:
+        (JSC::AssemblyHelpers::unboxDoubleWithoutAssertions):
+        (JSC::AssemblyHelpers::unboxDouble):
+        * wasm/js/WasmToJS.cpp:
+        (JSC::Wasm::wasmToJS):
+
 2022-03-22  Yusuke Suzuki  <[email protected]>
 
         [JSC] Test DFG / FTL DataIC

Modified: trunk/Source/_javascript_Core/assembler/MacroAssembler.h (291744 => 291745)


--- trunk/Source/_javascript_Core/assembler/MacroAssembler.h	2022-03-23 13:54:42 UTC (rev 291744)
+++ trunk/Source/_javascript_Core/assembler/MacroAssembler.h	2022-03-23 14:12:54 UTC (rev 291745)
@@ -153,6 +153,7 @@
     using MacroAssemblerBase::xor32;
 
 #if CPU(ARM64) || CPU(X86_64) || CPU(RISCV64)
+    using MacroAssemblerBase::add64;
     using MacroAssemblerBase::and64;
     using MacroAssemblerBase::convertInt32ToDouble;
     using MacroAssemblerBase::store64;
@@ -1460,6 +1461,12 @@
             and64(imm.asTrustedImm32(), dest);
     }
 
+    void add64(TrustedImm64 imm, RegisterID src, RegisterID dest)
+    {
+        RegisterID scratch = scratchRegister();
+        move(imm, scratch);
+        add64(scratch, src, dest);
+    }
 #endif // USE(JSVALUE64)
 
 #if !CPU(X86) && !CPU(X86_64) && !CPU(ARM64)

Modified: trunk/Source/_javascript_Core/jit/AssemblyHelpers.h (291744 => 291745)


--- trunk/Source/_javascript_Core/jit/AssemblyHelpers.h	2022-03-23 13:54:42 UTC (rev 291744)
+++ trunk/Source/_javascript_Core/jit/AssemblyHelpers.h	2022-03-23 14:12:54 UTC (rev 291745)
@@ -1378,16 +1378,19 @@
         }
         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)
+            add64(TrustedImm64(JSValue::NumberTag), 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 (291744 => 291745)


--- trunk/Source/_javascript_Core/wasm/js/WasmToJS.cpp	2022-03-23 13:54:42 UTC (rev 291744)
+++ trunk/Source/_javascript_Core/wasm/js/WasmToJS.cpp	2022-03-23 14:12:54 UTC (rev 291745)
@@ -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.unboxDouble(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.unboxDouble(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