⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 291745 in webkit


Ignore:
Timestamp:
Mar 23, 2022, 7:12:54 AM (5 years ago)
Author:
commit-queue@webkit.org
Message:

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

Patch by Xan Lopez <Xan Lopez> 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):

Location:
trunk/Source/JavaScriptCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r291736 r291745  
     12022-03-23  Xan Lopez  <xan@igalia.com>
     2
     3        [JSC] Add DoNotHaveTagRegisters mode to unboxDouble
     4        https://bugs.webkit.org/show_bug.cgi?id=238018
     5
     6        Reviewed by Yusuke Suzuki.
     7
     8        Wasm cannot use unboxDouble as-is because
     9        GPRInfo::numberTagRegister is not available. Add a
     10        DoNotHaveTagRegister mode so we can get rid of some duplicated
     11        code.
     12
     13        * assembler/MacroAssembler.h:
     14        (JSC::MacroAssembler::add64):
     15        * jit/AssemblyHelpers.h:
     16        (JSC::AssemblyHelpers::unboxDoubleWithoutAssertions):
     17        (JSC::AssemblyHelpers::unboxDouble):
     18        * wasm/js/WasmToJS.cpp:
     19        (JSC::Wasm::wasmToJS):
     20
    1212022-03-22  Yusuke Suzuki  <ysuzuki@apple.com>
    222
  • trunk/Source/JavaScriptCore/assembler/MacroAssembler.h

    r290647 r291745  
    154154
    155155#if CPU(ARM64) || CPU(X86_64) || CPU(RISCV64)
     156    using MacroAssemblerBase::add64;
    156157    using MacroAssemblerBase::and64;
    157158    using MacroAssemblerBase::convertInt32ToDouble;
    … …  
    14611462    }
    14621463
     1464    void add64(TrustedImm64 imm, RegisterID src, RegisterID dest)
     1465    {
     1466        RegisterID scratch = scratchRegister();
     1467        move(imm, scratch);
     1468        add64(scratch, src, dest);
     1469    }
    14631470#endif // USE(JSVALUE64)
    14641471
  • trunk/Source/JavaScriptCore/jit/AssemblyHelpers.h

    r291217 r291745  
    13791379        return gpr;
    13801380    }
    1381     FPRReg unboxDoubleWithoutAssertions(GPRReg gpr, GPRReg resultGPR, FPRReg fpr)
    1382     {
    1383         add64(GPRInfo::numberTagRegister, gpr, resultGPR);
     1381    FPRReg unboxDoubleWithoutAssertions(GPRReg gpr, GPRReg resultGPR, FPRReg fpr, TagRegistersMode mode = HaveTagRegisters)
     1382    {
     1383        if (mode == DoNotHaveTagRegisters)
     1384            add64(TrustedImm64(JSValue::NumberTag), gpr, resultGPR);
     1385        else
     1386            add64(GPRInfo::numberTagRegister, gpr, resultGPR);
    13841387        move64ToDouble(resultGPR, fpr);
    13851388        return fpr;
    13861389    }
    1387     FPRReg unboxDouble(GPRReg gpr, GPRReg resultGPR, FPRReg fpr)
     1390    FPRReg unboxDouble(GPRReg gpr, GPRReg resultGPR, FPRReg fpr, TagRegistersMode mode = HaveTagRegisters)
    13881391    {
    13891392        jitAssertIsJSDouble(gpr);
    1390         return unboxDoubleWithoutAssertions(gpr, resultGPR, fpr);
     1393        return unboxDoubleWithoutAssertions(gpr, resultGPR, fpr, mode);
    13911394    }
    13921395   
  • trunk/Source/JavaScriptCore/wasm/js/WasmToJS.cpp

    r286769 r291745  
    329329
    330330            isDouble.link(&jit);
    331             jit.move(JIT::TrustedImm64(JSValue::NumberTag), GPRInfo::returnValueGPR2);
    332             jit.add64(GPRInfo::returnValueGPR2, GPRInfo::returnValueGPR);
    333             jit.move64ToDouble(GPRInfo::returnValueGPR, dest);
     331            jit.unboxDouble(GPRInfo::returnValueGPR, GPRInfo::returnValueGPR2, dest, DoNotHaveTagRegisters);
    334332            jit.convertDoubleToFloat(dest, dest);
    335333            done.append(jit.jump());
    … …  
    360358
    361359            isDouble.link(&jit);
    362             jit.move(JIT::TrustedImm64(JSValue::NumberTag), GPRInfo::returnValueGPR2);
    363             jit.add64(GPRInfo::returnValueGPR2, GPRInfo::returnValueGPR);
    364             jit.move64ToDouble(GPRInfo::returnValueGPR, dest);
     360            jit.unboxDouble(GPRInfo::returnValueGPR, GPRInfo::returnValueGPR2, dest, DoNotHaveTagRegisters);
    365361            done.append(jit.jump());
    366362
Note: See TracChangeset for help on using the changeset viewer.