Changeset 162460 in webkit


Ignore:
Timestamp:
Jan 21, 2014 12:19:59 PM (10 years ago)
Author:
mhahnenberg@apple.com
Message:

Registers used in writeBarrierOnOperand can cause clobbering on some platforms
https://bugs.webkit.org/show_bug.cgi?id=127357

Reviewed by Filip Pizlo.

Some platforms use t0 and t1 for their first two arguments, so using those to load the
cell for the write barrier is a bad idea because it will get clobbered.

  • llint/LowLevelInterpreter32_64.asm:
  • llint/LowLevelInterpreter64.asm:
Location:
trunk/Source/JavaScriptCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r162434 r162460  
     12014-01-21  Mark Hahnenberg  <mhahnenberg@apple.com>
     2
     3        Registers used in writeBarrierOnOperand can cause clobbering on some platforms
     4        https://bugs.webkit.org/show_bug.cgi?id=127357
     5
     6        Reviewed by Filip Pizlo.
     7
     8        Some platforms use t0 and t1 for their first two arguments, so using those to load the
     9        cell for the write barrier is a bad idea because it will get clobbered.
     10
     11        * llint/LowLevelInterpreter32_64.asm:
     12        * llint/LowLevelInterpreter64.asm:
     13
    1142014-01-21  Mark Rowe  <mrowe@apple.com>
    215
  • trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm

    r161377 r162460  
    495495    if GGC
    496496        loadisFromInstruction(cellOperand, t1)
    497         loadConstantOrVariablePayload(t1, CellTag, t0, .writeBarrierDone)
    498         checkMarkByte(t0, t1, t2,
     497        loadConstantOrVariablePayload(t1, CellTag, t2, .writeBarrierDone)
     498        checkMarkByte(t2, t1, t3,
    499499            macro(marked)
    500500                btbz marked, .writeBarrierDone
     
    502502                # We make two extra slots because cCall2 will poke.
    503503                subp 8, sp
    504                 cCall2(_llint_write_barrier_slow, cfr, t0)
     504                cCall2(_llint_write_barrier_slow, cfr, t2)
    505505                addp 8, sp
    506506                pop PC, cfr
     
    527527        bineq t0, CellTag, .writeBarrierDone
    528528   
    529         loadp CodeBlock[cfr], t0
    530         loadp CodeBlock::m_globalObject[t0], t0
    531         checkMarkByte(t0, t1, t2,
     529        loadp CodeBlock[cfr], t3
     530        loadp CodeBlock::m_globalObject[t3], t3
     531        checkMarkByte(t3, t1, t2,
    532532            macro(marked)
    533533                btbz marked, .writeBarrierDone
     
    535535                # We make two extra slots because cCall2 will poke.
    536536                subp 8, sp
    537                 cCall2(_llint_write_barrier_slow, cfr, t0)
     537                cCall2(_llint_write_barrier_slow, cfr, t3)
    538538                addp 8, sp
    539539                pop PC, cfr
  • trunk/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm

    r161686 r162460  
    335335    if GGC
    336336        loadisFromInstruction(cellOperand, t1)
    337         loadConstantOrVariableCell(t1, t0, .writeBarrierDone)
    338         checkMarkByte(t0, t1, t2,
     337        loadConstantOrVariableCell(t1, t2, .writeBarrierDone)
     338        checkMarkByte(t2, t1, t3,
    339339            macro(marked)
    340340                btbz marked, .writeBarrierDone
    341341                push PB, PC
    342                 cCall2(_llint_write_barrier_slow, cfr, t0)
     342                cCall2(_llint_write_barrier_slow, cfr, t2)
    343343                pop PC, PB
    344344            end
     
    365365        btpz t0, .writeBarrierDone
    366366   
    367         loadp CodeBlock[cfr], t0
    368         loadp CodeBlock::m_globalObject[t0], t0
    369         checkMarkByte(t0, t1, t2,
     367        loadp CodeBlock[cfr], t3
     368        loadp CodeBlock::m_globalObject[t3], t3
     369        checkMarkByte(t3, t1, t2,
    370370            macro(marked)
    371371                btbz marked, .writeBarrierDone
    372372                push PB, PC
    373                 cCall2(_llint_write_barrier_slow, cfr, t0)
     373                cCall2(_llint_write_barrier_slow, cfr, t3)
    374374                pop PC, PB
    375375            end
Note: See TracChangeset for help on using the changeset viewer.