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

Changeset 259849 in webkit


Ignore:
Timestamp:
Apr 9, 2020, 11:48:09 PM (6 years ago)
Author:
ysuzuki@apple.com
Message:

[JSC] Use UnconditionalWriteBarrier in Baseline effectively to reduce code size
https://bugs.webkit.org/show_bug.cgi?id=209395

Reviewed by Tadeu Zagallo.

In put/delete we always need to emit write-barrier if the base is a cell since IC can write things (writing new StructureID etc.).
We should use emitWriteBarrier with UnconditionalWriteBarrier to remove unnecessary branch.

  • jit/JITPropertyAccess.cpp:

(JSC::JIT::emitPutByValWithCachedId):
(JSC::JIT::emit_op_del_by_id):
(JSC::JIT::emit_op_del_by_val):
(JSC::JIT::emit_op_put_by_id):

  • jit/JITPropertyAccess32_64.cpp:

(JSC::JIT::emitPutByValWithCachedId):
(JSC::JIT::emit_op_put_by_id):

Location:
trunk/Source/JavaScriptCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r259848 r259849  
     12020-04-09  Yusuke Suzuki  <ysuzuki@apple.com>
     2
     3        [JSC] Use UnconditionalWriteBarrier in Baseline effectively to reduce code size
     4        https://bugs.webkit.org/show_bug.cgi?id=209395
     5
     6        Reviewed by Tadeu Zagallo.
     7
     8        In put/delete we always need to emit write-barrier if the base is a cell since IC can write things (writing new StructureID etc.).
     9        We should use emitWriteBarrier with UnconditionalWriteBarrier to remove unnecessary branch.
     10
     11        * jit/JITPropertyAccess.cpp:
     12        (JSC::JIT::emitPutByValWithCachedId):
     13        (JSC::JIT::emit_op_del_by_id):
     14        (JSC::JIT::emit_op_del_by_val):
     15        (JSC::JIT::emit_op_put_by_id):
     16        * jit/JITPropertyAccess32_64.cpp:
     17        (JSC::JIT::emitPutByValWithCachedId):
     18        (JSC::JIT::emit_op_put_by_id):
     19
    1202020-04-09  Mark Lam  <mark.lam@apple.com>
    221
  • trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp

    r259676 r259849  
    291291    gen.generateFastPath(*this);
    292292    // IC can write new Structure without write-barrier if a base is cell.
    293     // FIXME: Use UnconditionalWriteBarrier in Baseline effectively to reduce code size.
    294     // https://bugs.webkit.org/show_bug.cgi?id=209395
    295     emitWriteBarrier(base, ShouldFilterBase);
     293    // We emit write-barrier unconditionally since we know baseVRege is a cell.
     294    emitWriteBarrier(base, UnconditionalWriteBarrier);
    296295    doneCases.append(jump());
    297296
     
    410409
    411410    // IC can write new Structure without write-barrier if a base is cell.
     411    // We emit write-barrier unconditionally since we know baseVRege is a cell.
    412412    // We should emit write-barrier at the end of sequence since write-barrier clobbers registers.
    413     // FIXME: Use UnconditionalWriteBarrier in Baseline effectively to reduce code size.
    414     // https://bugs.webkit.org/show_bug.cgi?id=209395
    415     emitWriteBarrier(base, ShouldFilterBase);
     413    emitWriteBarrier(base, UnconditionalWriteBarrier);
    416414}
    417415
     
    460458    // We should emit write-barrier at the end of sequence since write-barrier clobbers registers.
    461459    // IC can write new Structure without write-barrier if a base is cell.
    462     // FIXME: Use UnconditionalWriteBarrier in Baseline effectively to reduce code size.
    463     // https://bugs.webkit.org/show_bug.cgi?id=209395
    464     emitWriteBarrier(base, ShouldFilterBase);
     460    // We emit write-barrier unconditionally since we know baseVRege is a cell.
     461    emitWriteBarrier(base, UnconditionalWriteBarrier);
    465462}
    466463
     
    679676   
    680677    // IC can write new Structure without write-barrier if a base is cell.
    681     // FIXME: Use UnconditionalWriteBarrier in Baseline effectively to reduce code size.
    682     // https://bugs.webkit.org/show_bug.cgi?id=209395
    683     emitWriteBarrier(baseVReg, ShouldFilterBase);
     678    // We emit write-barrier unconditionally since we know baseVRege is a cell.
     679    emitWriteBarrier(baseVReg, UnconditionalWriteBarrier);
    684680}
    685681
  • trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp

    r259715 r259849  
    370370    //
    371371    // IC can write new Structure without write-barrier if a base is cell.
     372    // We emit write-barrier unconditionally since we know baseVRege is a cell.
    372373    // We are emitting write-barrier before writing here but this is OK since 32bit JSC does not have concurrent GC.
    373     // FIXME: Use UnconditionalWriteBarrier in Baseline effectively to reduce code size.
    374     // https://bugs.webkit.org/show_bug.cgi?id=209395
    375     emitWriteBarrier(base, ShouldFilterBase);
     374    emitWriteBarrier(base, UnconditionalWriteBarrier);
    376375    emitLoadPayload(base, regT0);
    377376    emitLoad(value, regT3, regT2);
     
    624623   
    625624    // IC can write new Structure without write-barrier if a base is cell.
    626     // FIXME: Use UnconditionalWriteBarrier in Baseline effectively to reduce code size.
    627     // https://bugs.webkit.org/show_bug.cgi?id=209395
    628     emitWriteBarrier(base, ShouldFilterBase);
     625    // We emit write-barrier unconditionally since we know baseVRege is a cell.
     626    emitWriteBarrier(base, UnconditionalWriteBarrier);
    629627}
    630628
Note: See TracChangeset for help on using the changeset viewer.