|
Lines 5469-5485
void SpeculativeJIT::compileStoreBarrier
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp_sec1
|
| 5469 |
noResult(node); |
5469 |
noResult(node); |
| 5470 |
} |
5470 |
} |
| 5471 |
|
5471 |
|
| 5472 |
JITCompiler::Jump SpeculativeJIT::checkMarkByte(CCallHelpers& jit, GPRReg owner) |
|
|
| 5473 |
{ |
| 5474 |
return jit.branchTest8(MacroAssembler::NonZero, MacroAssembler::Address(owner, JSCell::gcDataOffset())); |
| 5475 |
} |
| 5476 |
|
| 5477 |
JITCompiler::Jump SpeculativeJIT::checkMarkByte(CCallHelpers& jit, JSCell* owner) |
| 5478 |
{ |
| 5479 |
uint8_t* address = reinterpret_cast<uint8_t*>(owner) + JSCell::gcDataOffset(); |
| 5480 |
return jit.branchTest8(MacroAssembler::NonZero, MacroAssembler::AbsoluteAddress(address)); |
| 5481 |
} |
| 5482 |
|
| 5483 |
void SpeculativeJIT::storeToWriteBarrierBuffer(GPRReg cell, GPRReg scratch1, GPRReg scratch2) |
5472 |
void SpeculativeJIT::storeToWriteBarrierBuffer(GPRReg cell, GPRReg scratch1, GPRReg scratch2) |
| 5484 |
{ |
5473 |
{ |
| 5485 |
ASSERT(scratch1 != scratch2); |
5474 |
ASSERT(scratch1 != scratch2); |
|
Lines 5536-5549
void SpeculativeJIT::writeBarrier(GPRReg
Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp_sec2
|
| 5536 |
if (Heap::isMarked(value)) |
5525 |
if (Heap::isMarked(value)) |
| 5537 |
return; |
5526 |
return; |
| 5538 |
|
5527 |
|
| 5539 |
JITCompiler::Jump ownerNotMarkedOrAlreadyRemembered = checkMarkByte(m_jit, ownerGPR); |
5528 |
JITCompiler::Jump ownerNotMarkedOrAlreadyRemembered = m_jit.checkMarkByte(ownerGPR); |
| 5540 |
storeToWriteBarrierBuffer(ownerGPR, scratch1, scratch2); |
5529 |
storeToWriteBarrierBuffer(ownerGPR, scratch1, scratch2); |
| 5541 |
ownerNotMarkedOrAlreadyRemembered.link(&m_jit); |
5530 |
ownerNotMarkedOrAlreadyRemembered.link(&m_jit); |
| 5542 |
} |
5531 |
} |
| 5543 |
|
5532 |
|
| 5544 |
void SpeculativeJIT::writeBarrier(GPRReg ownerGPR, GPRReg scratch1, GPRReg scratch2) |
5533 |
void SpeculativeJIT::writeBarrier(GPRReg ownerGPR, GPRReg scratch1, GPRReg scratch2) |
| 5545 |
{ |
5534 |
{ |
| 5546 |
JITCompiler::Jump ownerNotMarkedOrAlreadyRemembered = checkMarkByte(m_jit, ownerGPR); |
5535 |
JITCompiler::Jump ownerNotMarkedOrAlreadyRemembered = m_jit.checkMarkByte(ownerGPR); |
| 5547 |
storeToWriteBarrierBuffer(ownerGPR, scratch1, scratch2); |
5536 |
storeToWriteBarrierBuffer(ownerGPR, scratch1, scratch2); |
| 5548 |
ownerNotMarkedOrAlreadyRemembered.link(&m_jit); |
5537 |
ownerNotMarkedOrAlreadyRemembered.link(&m_jit); |
| 5549 |
} |
5538 |
} |