Changeset 90060 in webkit


Ignore:
Timestamp:
Jun 29, 2011 4:11:59 PM (13 years ago)
Author:
ggaren@apple.com
Message:

2011-06-29 Geoffrey Garen <ggaren@apple.com>

Reviewed by Oliver Hunt.

Added a dummy write barrier emitting function in all the right places in the old JIT
https://bugs.webkit.org/show_bug.cgi?id=63667


SunSpider reports no change.

  • jit/JIT.h:
  • jit/JITPropertyAccess.cpp: (JSC::JIT::emit_op_put_by_id): (JSC::JIT::emit_op_put_scoped_var): Do it.

(JSC::JIT::emit_op_put_global_var): Global object needs to be in a register
for the sake of the write barrier.

(JSC::JIT::emitWriteBarrier): Empty for now. Not for long!

  • jit/JITPropertyAccess32_64.cpp: (JSC::JIT::emit_op_put_by_val): (JSC::JIT::emit_op_put_by_id): (JSC::JIT::emit_op_put_scoped_var): Do it.

(JSC::JIT::emit_op_put_global_var): Global object needs to be in a register
for the sake of the write barrier.

(JSC::JIT::emitWriteBarrier): Empty for now. Not for long!

Location:
trunk/Source/JavaScriptCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r90035 r90060  
     12011-06-29  Geoffrey Garen  <ggaren@apple.com>
     2
     3        Reviewed by Oliver Hunt.
     4
     5        Added a dummy write barrier emitting function in all the right places in the old JIT
     6        https://bugs.webkit.org/show_bug.cgi?id=63667
     7       
     8        SunSpider reports no change.
     9
     10        * jit/JIT.h:
     11        * jit/JITPropertyAccess.cpp:
     12        (JSC::JIT::emit_op_put_by_id):
     13        (JSC::JIT::emit_op_put_scoped_var): Do it.
     14
     15        (JSC::JIT::emit_op_put_global_var): Global object needs to be in a register
     16        for the sake of the write barrier.
     17
     18        (JSC::JIT::emitWriteBarrier): Empty for now. Not for long!
     19
     20        * jit/JITPropertyAccess32_64.cpp:
     21        (JSC::JIT::emit_op_put_by_val):
     22        (JSC::JIT::emit_op_put_by_id):
     23        (JSC::JIT::emit_op_put_scoped_var): Do it.
     24
     25        (JSC::JIT::emit_op_put_global_var): Global object needs to be in a register
     26        for the sake of the write barrier.
     27
     28        (JSC::JIT::emitWriteBarrier): Empty for now. Not for long!
     29
    1302011-06-29  Filip Pizlo  <fpizlo@apple.com>
    231
  • trunk/Source/JavaScriptCore/jit/JIT.h

    r89885 r90060  
    299299
    300300        void testPrototype(JSValue, JumpList& failureCases);
     301
     302        void emitWriteBarrier(RegisterID owner, RegisterID scratch);
    301303
    302304#if USE(JSVALUE32_64)
  • trunk/Source/JavaScriptCore/jit/JITPropertyAccess.cpp

    r89630 r90060  
    433433    emitJumpSlowCaseIfNotJSCell(regT0, baseVReg);
    434434
     435    emitWriteBarrier(regT0, regT2);
     436
    435437    BEGIN_UNINTERRUPTED_SEQUENCE(sequencePutById);
    436438
     
    973975    int skip = currentInstruction[2].u.operand;
    974976
     977    emitGetVirtualRegister(currentInstruction[3].u.operand, regT0);
     978
    975979    emitGetFromCallFrameHeaderPtr(RegisterFile::ScopeChain, regT1);
    976     emitGetVirtualRegister(currentInstruction[3].u.operand, regT0);
    977980    bool checkTopLevel = m_codeBlock->codeType() == FunctionCode && m_codeBlock->needsFullScopeChain();
    978981    ASSERT(skip || !checkTopLevel);
     
    986989    while (skip--)
    987990        loadPtr(Address(regT1, OBJECT_OFFSETOF(ScopeChainNode, next)), regT1);
    988 
    989991    loadPtr(Address(regT1, OBJECT_OFFSETOF(ScopeChainNode, object)), regT1);
     992
     993    emitWriteBarrier(regT1, regT2);
     994
    990995    loadPtr(Address(regT1, OBJECT_OFFSETOF(JSVariableObject, m_registers)), regT1);
    991996    storePtr(regT0, Address(regT1, currentInstruction[1].u.operand * sizeof(Register)));
     
    10021007void JIT::emit_op_put_global_var(Instruction* currentInstruction)
    10031008{
    1004     emitGetVirtualRegister(currentInstruction[2].u.operand, regT1);
    1005     JSVariableObject* globalObject = m_codeBlock->globalObject();
    1006     loadPtr(&globalObject->m_registers, regT0);
    1007     storePtr(regT1, Address(regT0, currentInstruction[1].u.operand * sizeof(Register)));
     1009    JSGlobalObject* globalObject = m_codeBlock->globalObject();
     1010
     1011    emitGetVirtualRegister(currentInstruction[2].u.operand, regT0);
     1012    move(TrustedImmPtr(globalObject), regT1);
     1013   
     1014    emitWriteBarrier(regT1, regT2);
     1015
     1016    loadPtr(Address(regT1, OBJECT_OFFSETOF(JSVariableObject, m_registers)), regT1);
     1017    storePtr(regT0, Address(regT1, currentInstruction[1].u.operand * sizeof(Register)));
     1018}
     1019
     1020void JIT::emitWriteBarrier(RegisterID owner, RegisterID scratch)
     1021{
     1022    UNUSED_PARAM(owner);
     1023    UNUSED_PARAM(scratch);
    10081024}
    10091025
  • trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp

    r89985 r90060  
    260260    addSlowCase(branch32(NotEqual, regT3, TrustedImm32(JSValue::Int32Tag)));
    261261    emitJumpSlowCaseIfNotJSCell(base, regT1);
     262    emitWriteBarrier(regT0, regT1);
    262263    addSlowCase(branchPtr(NotEqual, Address(regT0), TrustedImmPtr(m_globalData->jsArrayVPtr)));
    263264    addSlowCase(branch32(AboveOrEqual, regT2, Address(regT0, JSArray::vectorLengthOffset())));
     
    394395   
    395396    emitJumpSlowCaseIfNotJSCell(base, regT1);
     397   
     398    emitWriteBarrier(regT0, regT1);
    396399   
    397400    BEGIN_UNINTERRUPTED_SEQUENCE(sequencePutById);
     
    10291032    while (skip--)
    10301033        loadPtr(Address(regT2, OBJECT_OFFSETOF(ScopeChainNode, next)), regT2);
    1031 
    10321034    loadPtr(Address(regT2, OBJECT_OFFSETOF(ScopeChainNode, object)), regT2);
     1035
     1036    emitWriteBarrier(regT2, regT3);
     1037
    10331038    loadPtr(Address(regT2, OBJECT_OFFSETOF(JSVariableObject, m_registers)), regT2);
    1034 
    10351039    emitStore(index, regT1, regT0, regT2);
    10361040    map(m_bytecodeOffset + OPCODE_LENGTH(op_put_scoped_var), value, regT1, regT0);
     
    10531057void JIT::emit_op_put_global_var(Instruction* currentInstruction)
    10541058{
    1055     JSGlobalObject* globalObject = m_codeBlock->globalObject();
    1056     ASSERT(globalObject->isGlobalObject());
    10571059    int index = currentInstruction[1].u.operand;
    10581060    int value = currentInstruction[2].u.operand;
    10591061
     1062    JSGlobalObject* globalObject = m_codeBlock->globalObject();
     1063
    10601064    emitLoad(value, regT1, regT0);
    1061 
    1062     loadPtr(&globalObject->m_registers, regT2);
     1065    move(TrustedImmPtr(globalObject), regT2);
     1066
     1067    emitWriteBarrier(regT2, regT3);
     1068
     1069    loadPtr(Address(regT2, OBJECT_OFFSETOF(JSVariableObject, m_registers)), regT2);
    10631070    emitStore(index, regT1, regT0, regT2);
    10641071    map(m_bytecodeOffset + OPCODE_LENGTH(op_put_global_var), value, regT1, regT0);
    10651072}
    10661073
     1074void JIT::emitWriteBarrier(RegisterID owner, RegisterID scratch)
     1075{
     1076    UNUSED_PARAM(owner);
     1077    UNUSED_PARAM(scratch);
     1078}
     1079
    10671080} // namespace JSC
    10681081
Note: See TracChangeset for help on using the changeset viewer.