|
Lines 474-479
private:
Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp_sec1
|
| 474 |
case PutByOffset: |
474 |
case PutByOffset: |
| 475 |
compilePutByOffset(); |
475 |
compilePutByOffset(); |
| 476 |
break; |
476 |
break; |
|
|
477 |
case MultiPutByOffset: |
| 478 |
compileMultiPutByOffset(); |
| 479 |
break; |
| 477 |
case GetGlobalVar: |
480 |
case GetGlobalVar: |
| 478 |
compileGetGlobalVar(); |
481 |
compileGetGlobalVar(); |
| 479 |
break; |
482 |
break; |
|
Lines 1656-1663
private:
Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp_sec2
|
| 1656 |
{ |
1659 |
{ |
| 1657 |
m_ftlState.jitCode->common.notifyCompilingStructureTransition(m_graph.m_plan, codeBlock(), m_node); |
1660 |
m_ftlState.jitCode->common.notifyCompilingStructureTransition(m_graph.m_plan, codeBlock(), m_node); |
| 1658 |
|
1661 |
|
| 1659 |
m_out.store64( |
1662 |
m_out.storePtr( |
| 1660 |
m_out.constIntPtr(m_node->structureTransitionData().newStructure), |
1663 |
weakPointer(m_node->structureTransitionData().newStructure), |
| 1661 |
lowCell(m_node->child1()), m_heaps.JSCell_structure); |
1664 |
lowCell(m_node->child1()), m_heaps.JSCell_structure); |
| 1662 |
} |
1665 |
} |
| 1663 |
|
1666 |
|
|
Lines 2708-2812
private:
Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp_sec3
|
| 2708 |
void compileAllocatePropertyStorage() |
2711 |
void compileAllocatePropertyStorage() |
| 2709 |
{ |
2712 |
{ |
| 2710 |
StructureTransitionData& data = m_node->structureTransitionData(); |
2713 |
StructureTransitionData& data = m_node->structureTransitionData(); |
| 2711 |
|
|
|
| 2712 |
LValue object = lowCell(m_node->child1()); |
2714 |
LValue object = lowCell(m_node->child1()); |
| 2713 |
|
2715 |
|
| 2714 |
if (data.previousStructure->couldHaveIndexingHeader()) { |
2716 |
setStorage(allocatePropertyStorage(object, data.previousStructure)); |
| 2715 |
setStorage(vmCall( |
|
|
| 2716 |
m_out.operation( |
| 2717 |
operationReallocateButterflyToHavePropertyStorageWithInitialCapacity), |
| 2718 |
m_callFrame, object)); |
| 2719 |
return; |
| 2720 |
} |
| 2721 |
|
| 2722 |
LBasicBlock slowPath = FTL_NEW_BLOCK(m_out, ("AllocatePropertyStorage slow path")); |
| 2723 |
LBasicBlock continuation = FTL_NEW_BLOCK(m_out, ("AllocatePropertyStorage continuation")); |
| 2724 |
|
| 2725 |
LBasicBlock lastNext = m_out.insertNewBlocksBefore(slowPath); |
| 2726 |
|
| 2727 |
LValue endOfStorage = allocateBasicStorageAndGetEnd( |
| 2728 |
m_out.constIntPtr(initialOutOfLineCapacity * sizeof(JSValue)), slowPath); |
| 2729 |
|
| 2730 |
ValueFromBlock fastButterfly = m_out.anchor( |
| 2731 |
m_out.add(m_out.constIntPtr(sizeof(IndexingHeader)), endOfStorage)); |
| 2732 |
|
| 2733 |
m_out.jump(continuation); |
| 2734 |
|
| 2735 |
m_out.appendTo(slowPath, continuation); |
| 2736 |
|
| 2737 |
ValueFromBlock slowButterfly = m_out.anchor(vmCall( |
| 2738 |
m_out.operation(operationAllocatePropertyStorageWithInitialCapacity), m_callFrame)); |
| 2739 |
|
| 2740 |
m_out.jump(continuation); |
| 2741 |
|
| 2742 |
m_out.appendTo(continuation, lastNext); |
| 2743 |
|
| 2744 |
LValue result = m_out.phi(m_out.intPtr, fastButterfly, slowButterfly); |
| 2745 |
m_out.storePtr(result, object, m_heaps.JSObject_butterfly); |
| 2746 |
|
| 2747 |
setStorage(result); |
| 2748 |
} |
2717 |
} |
| 2749 |
|
2718 |
|
| 2750 |
void compileReallocatePropertyStorage() |
2719 |
void compileReallocatePropertyStorage() |
| 2751 |
{ |
2720 |
{ |
| 2752 |
StructureTransitionData& data = m_node->structureTransitionData(); |
2721 |
StructureTransitionData& data = m_node->structureTransitionData(); |
| 2753 |
|
|
|
| 2754 |
Structure* previous = data.previousStructure; |
| 2755 |
LValue object = lowCell(m_node->child1()); |
2722 |
LValue object = lowCell(m_node->child1()); |
| 2756 |
|
2723 |
LValue oldStorage = lowStorage(m_node->child2()); |
| 2757 |
size_t oldSize = previous->outOfLineCapacity() * sizeof(JSValue); |
|
|
| 2758 |
size_t newSize = oldSize * outOfLineGrowthFactor; |
| 2759 |
|
| 2760 |
ASSERT(newSize == data.newStructure->outOfLineCapacity() * sizeof(JSValue)); |
| 2761 |
|
| 2762 |
if (previous->couldHaveIndexingHeader()) { |
| 2763 |
LValue newAllocSize = m_out.constInt64(newSize / sizeof(JSValue)); |
| 2764 |
LValue result = vmCall(m_out.operation(operationReallocateButterflyToGrowPropertyStorage), m_callFrame, object, newAllocSize); |
| 2765 |
setStorage(result); |
| 2766 |
return; |
| 2767 |
} |
| 2768 |
|
2724 |
|
| 2769 |
LBasicBlock slowPath = FTL_NEW_BLOCK(m_out, ("ReallocatePropertyStorage slow path")); |
2725 |
setStorage( |
| 2770 |
LBasicBlock continuation = FTL_NEW_BLOCK(m_out, ("ReallocatePropertyStorage continuation")); |
2726 |
reallocatePropertyStorage( |
| 2771 |
LBasicBlock lastNext = m_out.insertNewBlocksBefore(slowPath); |
2727 |
object, oldStorage, data.previousStructure, data.newStructure)); |
| 2772 |
|
|
|
| 2773 |
LValue endOfStorage = |
| 2774 |
allocateBasicStorageAndGetEnd(m_out.constIntPtr(newSize), slowPath); |
| 2775 |
|
| 2776 |
ValueFromBlock fastButterfly = m_out.anchor(m_out.add(m_out.constIntPtr(sizeof(IndexingHeader)), endOfStorage)); |
| 2777 |
|
| 2778 |
m_out.jump(continuation); |
| 2779 |
|
| 2780 |
m_out.appendTo(slowPath, continuation); |
| 2781 |
|
| 2782 |
LValue newAllocSize = m_out.constInt64(newSize / sizeof(JSValue)); |
| 2783 |
|
| 2784 |
LValue storageLocation = vmCall(m_out.operation(operationAllocatePropertyStorage), m_callFrame, newAllocSize); |
| 2785 |
|
| 2786 |
ValueFromBlock slowButterfly = m_out.anchor(storageLocation); |
| 2787 |
|
| 2788 |
m_out.jump(continuation); |
| 2789 |
|
| 2790 |
m_out.appendTo(continuation, lastNext); |
| 2791 |
|
| 2792 |
LValue result = m_out.phi(m_out.intPtr, fastButterfly, slowButterfly); |
| 2793 |
LValue oldStorage = m_out.loadPtr(object, m_heaps.JSObject_butterfly); |
| 2794 |
|
| 2795 |
ptrdiff_t headerSize = -sizeof(JSValue) - sizeof(void *); |
| 2796 |
ptrdiff_t endStorage = headerSize - static_cast<ptrdiff_t>(oldSize); |
| 2797 |
|
| 2798 |
for (ptrdiff_t offset = headerSize; offset > endStorage; offset -= sizeof(void*)) { |
| 2799 |
LValue loaded = |
| 2800 |
m_out.loadPtr(m_out.address(m_heaps.properties.atAnyNumber(), oldStorage, offset)); |
| 2801 |
m_out.storePtr(loaded, m_out.address(m_heaps.properties.atAnyNumber(), result, offset)); |
| 2802 |
} |
| 2803 |
|
| 2804 |
m_out.storePtr(result, m_out.address(object, m_heaps.JSObject_butterfly)); |
| 2805 |
|
| 2806 |
setStorage(result); |
| 2807 |
} |
2728 |
} |
| 2808 |
|
2729 |
|
| 2809 |
|
|
|
| 2810 |
void compileToString() |
2730 |
void compileToString() |
| 2811 |
{ |
2731 |
{ |
| 2812 |
switch (m_node->child1().useKind()) { |
2732 |
switch (m_node->child1().useKind()) { |
|
Lines 3140-3151
private:
Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp_sec4
|
| 3140 |
StorageAccessData& data = |
3060 |
StorageAccessData& data = |
| 3141 |
m_graph.m_storageAccessData[m_node->storageAccessDataIndex()]; |
3061 |
m_graph.m_storageAccessData[m_node->storageAccessDataIndex()]; |
| 3142 |
|
3062 |
|
| 3143 |
setJSValue( |
3063 |
setJSValue(loadProperty( |
| 3144 |
m_out.load64( |
3064 |
lowStorage(m_node->child1()), data.identifierNumber, data.offset)); |
| 3145 |
m_out.address( |
|
|
| 3146 |
m_heaps.properties[data.identifierNumber], |
| 3147 |
lowStorage(m_node->child1()), |
| 3148 |
offsetRelativeToBase(data.offset)))); |
| 3149 |
} |
3065 |
} |
| 3150 |
|
3066 |
|
| 3151 |
void compileMultiGetByOffset() |
3067 |
void compileMultiGetByOffset() |
|
Lines 3189-3199
private:
Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp_sec5
|
| 3189 |
propertyBase = base; |
3105 |
propertyBase = base; |
| 3190 |
if (!isInlineOffset(variant.offset())) |
3106 |
if (!isInlineOffset(variant.offset())) |
| 3191 |
propertyBase = m_out.loadPtr(propertyBase, m_heaps.JSObject_butterfly); |
3107 |
propertyBase = m_out.loadPtr(propertyBase, m_heaps.JSObject_butterfly); |
| 3192 |
result = m_out.load64( |
3108 |
result = loadProperty(propertyBase, data.identifierNumber, variant.offset()); |
| 3193 |
m_out.address( |
|
|
| 3194 |
m_heaps.properties[data.identifierNumber], |
| 3195 |
propertyBase, |
| 3196 |
offsetRelativeToBase(variant.offset()))); |
| 3197 |
} |
3109 |
} |
| 3198 |
|
3110 |
|
| 3199 |
results.append(m_out.anchor(result)); |
3111 |
results.append(m_out.anchor(result)); |
|
Lines 3213-3224
private:
Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp_sec6
|
| 3213 |
StorageAccessData& data = |
3125 |
StorageAccessData& data = |
| 3214 |
m_graph.m_storageAccessData[m_node->storageAccessDataIndex()]; |
3126 |
m_graph.m_storageAccessData[m_node->storageAccessDataIndex()]; |
| 3215 |
|
3127 |
|
| 3216 |
m_out.store64( |
3128 |
storeProperty( |
| 3217 |
lowJSValue(m_node->child3()), |
3129 |
lowJSValue(m_node->child3()), |
| 3218 |
m_out.address( |
3130 |
lowStorage(m_node->child1()), data.identifierNumber, data.offset); |
| 3219 |
m_heaps.properties[data.identifierNumber], |
3131 |
} |
| 3220 |
lowStorage(m_node->child1()), |
3132 |
|
| 3221 |
offsetRelativeToBase(data.offset))); |
3133 |
void compileMultiPutByOffset() |
|
|
3134 |
{ |
| 3135 |
LValue base = lowCell(m_node->child1()); |
| 3136 |
LValue value = lowJSValue(m_node->child2()); |
| 3137 |
|
| 3138 |
MultiPutByOffsetData& data = m_node->multiPutByOffsetData(); |
| 3139 |
|
| 3140 |
Vector<LBasicBlock, 2> blocks(data.variants.size()); |
| 3141 |
for (unsigned i = data.variants.size(); i--;) |
| 3142 |
blocks[i] = FTL_NEW_BLOCK(m_out, ("MultiPutByOffset case ", i)); |
| 3143 |
LBasicBlock exit = FTL_NEW_BLOCK(m_out, ("MultiPutByOffset fail")); |
| 3144 |
LBasicBlock continuation = FTL_NEW_BLOCK(m_out, ("MultiPutByOffset continuation")); |
| 3145 |
|
| 3146 |
Vector<SwitchCase, 2> cases; |
| 3147 |
for (unsigned i = data.variants.size(); i--;) { |
| 3148 |
PutByIdVariant variant = data.variants[i]; |
| 3149 |
cases.append( |
| 3150 |
SwitchCase(weakPointer(variant.oldStructure()), blocks[i], Weight(1))); |
| 3151 |
} |
| 3152 |
m_out.switchInstruction( |
| 3153 |
m_out.loadPtr(base, m_heaps.JSCell_structure), cases, exit, Weight(0)); |
| 3154 |
|
| 3155 |
LBasicBlock lastNext = m_out.m_nextBlock; |
| 3156 |
|
| 3157 |
for (unsigned i = data.variants.size(); i--;) { |
| 3158 |
m_out.appendTo(blocks[i], i + 1 < data.variants.size() ? blocks[i + 1] : exit); |
| 3159 |
|
| 3160 |
PutByIdVariant variant = data.variants[i]; |
| 3161 |
|
| 3162 |
LValue storage; |
| 3163 |
if (variant.kind() == PutByIdVariant::Replace) { |
| 3164 |
if (isInlineOffset(variant.offset())) |
| 3165 |
storage = base; |
| 3166 |
else |
| 3167 |
storage = m_out.loadPtr(base, m_heaps.JSObject_butterfly); |
| 3168 |
} else { |
| 3169 |
m_graph.m_plan.transitions.addLazily( |
| 3170 |
codeBlock(), m_node->origin.semantic.codeOriginOwner(), |
| 3171 |
variant.oldStructure(), variant.newStructure()); |
| 3172 |
|
| 3173 |
storage = storageForTransition( |
| 3174 |
base, variant.offset(), variant.oldStructure(), variant.newStructure()); |
| 3175 |
m_out.storePtr( |
| 3176 |
weakPointer(variant.newStructure()), base, m_heaps.JSCell_structure); |
| 3177 |
} |
| 3178 |
|
| 3179 |
storeProperty(value, storage, data.identifierNumber, variant.offset()); |
| 3180 |
m_out.jump(continuation); |
| 3181 |
} |
| 3182 |
|
| 3183 |
m_out.appendTo(exit, continuation); |
| 3184 |
terminate(BadCache); |
| 3185 |
m_out.unreachable(); |
| 3186 |
|
| 3187 |
m_out.appendTo(continuation, lastNext); |
| 3222 |
} |
3188 |
} |
| 3223 |
|
3189 |
|
| 3224 |
void compileGetGlobalVar() |
3190 |
void compileGetGlobalVar() |
|
Lines 3748-3753
private:
Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp_sec7
|
| 3748 |
return m_out.booleanFalse; |
3714 |
return m_out.booleanFalse; |
| 3749 |
} |
3715 |
} |
| 3750 |
|
3716 |
|
|
|
3717 |
LValue loadProperty(LValue storage, unsigned identifierNumber, PropertyOffset offset) |
| 3718 |
{ |
| 3719 |
return m_out.load64(addressOfProperty(storage, identifierNumber, offset)); |
| 3720 |
} |
| 3721 |
|
| 3722 |
void storeProperty( |
| 3723 |
LValue value, LValue storage, unsigned identifierNumber, PropertyOffset offset) |
| 3724 |
{ |
| 3725 |
m_out.store64(value, addressOfProperty(storage, identifierNumber, offset)); |
| 3726 |
} |
| 3727 |
|
| 3728 |
TypedPointer addressOfProperty( |
| 3729 |
LValue storage, unsigned identifierNumber, PropertyOffset offset) |
| 3730 |
{ |
| 3731 |
return m_out.address( |
| 3732 |
m_heaps.properties[identifierNumber], storage, offsetRelativeToBase(offset)); |
| 3733 |
} |
| 3734 |
|
| 3735 |
LValue storageForTransition( |
| 3736 |
LValue object, PropertyOffset offset, |
| 3737 |
Structure* previousStructure, Structure* nextStructure) |
| 3738 |
{ |
| 3739 |
if (isInlineOffset(offset)) |
| 3740 |
return object; |
| 3741 |
|
| 3742 |
if (previousStructure->outOfLineCapacity() == nextStructure->outOfLineCapacity()) |
| 3743 |
return m_out.loadPtr(object, m_heaps.JSObject_butterfly); |
| 3744 |
|
| 3745 |
LValue result; |
| 3746 |
if (!previousStructure->outOfLineCapacity()) |
| 3747 |
result = allocatePropertyStorage(object, previousStructure); |
| 3748 |
else { |
| 3749 |
result = reallocatePropertyStorage( |
| 3750 |
object, m_out.loadPtr(object, m_heaps.JSObject_butterfly), |
| 3751 |
previousStructure, nextStructure); |
| 3752 |
} |
| 3753 |
|
| 3754 |
emitStoreBarrier(object); |
| 3755 |
|
| 3756 |
return result; |
| 3757 |
} |
| 3758 |
|
| 3759 |
LValue allocatePropertyStorage(LValue object, Structure* previousStructure) |
| 3760 |
{ |
| 3761 |
if (previousStructure->couldHaveIndexingHeader()) { |
| 3762 |
return vmCall( |
| 3763 |
m_out.operation( |
| 3764 |
operationReallocateButterflyToHavePropertyStorageWithInitialCapacity), |
| 3765 |
m_callFrame, object); |
| 3766 |
} |
| 3767 |
|
| 3768 |
LBasicBlock slowPath = FTL_NEW_BLOCK(m_out, ("allocatePropertyStorage slow path")); |
| 3769 |
LBasicBlock continuation = FTL_NEW_BLOCK(m_out, ("allocatePropertyStorage continuation")); |
| 3770 |
|
| 3771 |
LBasicBlock lastNext = m_out.insertNewBlocksBefore(slowPath); |
| 3772 |
|
| 3773 |
LValue endOfStorage = allocateBasicStorageAndGetEnd( |
| 3774 |
m_out.constIntPtr(initialOutOfLineCapacity * sizeof(JSValue)), slowPath); |
| 3775 |
|
| 3776 |
ValueFromBlock fastButterfly = m_out.anchor( |
| 3777 |
m_out.add(m_out.constIntPtr(sizeof(IndexingHeader)), endOfStorage)); |
| 3778 |
|
| 3779 |
m_out.jump(continuation); |
| 3780 |
|
| 3781 |
m_out.appendTo(slowPath, continuation); |
| 3782 |
|
| 3783 |
ValueFromBlock slowButterfly = m_out.anchor(vmCall( |
| 3784 |
m_out.operation(operationAllocatePropertyStorageWithInitialCapacity), m_callFrame)); |
| 3785 |
|
| 3786 |
m_out.jump(continuation); |
| 3787 |
|
| 3788 |
m_out.appendTo(continuation, lastNext); |
| 3789 |
|
| 3790 |
LValue result = m_out.phi(m_out.intPtr, fastButterfly, slowButterfly); |
| 3791 |
m_out.storePtr(result, object, m_heaps.JSObject_butterfly); |
| 3792 |
|
| 3793 |
return result; |
| 3794 |
} |
| 3795 |
|
| 3796 |
LValue reallocatePropertyStorage( |
| 3797 |
LValue object, LValue oldStorage, Structure* previous, Structure* next) |
| 3798 |
{ |
| 3799 |
size_t oldSize = previous->outOfLineCapacity() * sizeof(JSValue); |
| 3800 |
size_t newSize = oldSize * outOfLineGrowthFactor; |
| 3801 |
|
| 3802 |
ASSERT_UNUSED(next, newSize == next->outOfLineCapacity() * sizeof(JSValue)); |
| 3803 |
|
| 3804 |
if (previous->couldHaveIndexingHeader()) { |
| 3805 |
LValue newAllocSize = m_out.constInt64(newSize / sizeof(JSValue)); |
| 3806 |
return vmCall(m_out.operation(operationReallocateButterflyToGrowPropertyStorage), m_callFrame, object, newAllocSize); |
| 3807 |
} |
| 3808 |
|
| 3809 |
LBasicBlock slowPath = FTL_NEW_BLOCK(m_out, ("reallocatePropertyStorage slow path")); |
| 3810 |
LBasicBlock continuation = FTL_NEW_BLOCK(m_out, ("reallocatePropertyStorage continuation")); |
| 3811 |
LBasicBlock lastNext = m_out.insertNewBlocksBefore(slowPath); |
| 3812 |
|
| 3813 |
LValue endOfStorage = |
| 3814 |
allocateBasicStorageAndGetEnd(m_out.constIntPtr(newSize), slowPath); |
| 3815 |
|
| 3816 |
ValueFromBlock fastButterfly = m_out.anchor(m_out.add(m_out.constIntPtr(sizeof(IndexingHeader)), endOfStorage)); |
| 3817 |
|
| 3818 |
m_out.jump(continuation); |
| 3819 |
|
| 3820 |
m_out.appendTo(slowPath, continuation); |
| 3821 |
|
| 3822 |
LValue newAllocSize = m_out.constInt64(newSize / sizeof(JSValue)); |
| 3823 |
|
| 3824 |
LValue storageLocation = vmCall(m_out.operation(operationAllocatePropertyStorage), m_callFrame, newAllocSize); |
| 3825 |
|
| 3826 |
ValueFromBlock slowButterfly = m_out.anchor(storageLocation); |
| 3827 |
|
| 3828 |
m_out.jump(continuation); |
| 3829 |
|
| 3830 |
m_out.appendTo(continuation, lastNext); |
| 3831 |
|
| 3832 |
LValue result = m_out.phi(m_out.intPtr, fastButterfly, slowButterfly); |
| 3833 |
|
| 3834 |
ptrdiff_t headerSize = -sizeof(JSValue) - sizeof(void *); |
| 3835 |
ptrdiff_t endStorage = headerSize - static_cast<ptrdiff_t>(oldSize); |
| 3836 |
|
| 3837 |
for (ptrdiff_t offset = headerSize; offset > endStorage; offset -= sizeof(void*)) { |
| 3838 |
LValue loaded = |
| 3839 |
m_out.loadPtr(m_out.address(m_heaps.properties.atAnyNumber(), oldStorage, offset)); |
| 3840 |
m_out.storePtr(loaded, m_out.address(m_heaps.properties.atAnyNumber(), result, offset)); |
| 3841 |
} |
| 3842 |
|
| 3843 |
m_out.storePtr(result, m_out.address(object, m_heaps.JSObject_butterfly)); |
| 3844 |
|
| 3845 |
return result; |
| 3846 |
} |
| 3847 |
|
| 3751 |
LValue getById(LValue base) |
3848 |
LValue getById(LValue base) |
| 3752 |
{ |
3849 |
{ |
| 3753 |
StringImpl* uid = m_graph.identifiers()[m_node->identifierNumber()]; |
3850 |
StringImpl* uid = m_graph.identifiers()[m_node->identifierNumber()]; |
|
Lines 5185-5191
private:
Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp_sec8
|
| 5185 |
return m_out.load8(m_out.baseIndex(m_heaps.MarkedBlock_markBits, markedBlock, markByteIndex, ScaleOne, MarkedBlock::offsetOfMarks())); |
5282 |
return m_out.load8(m_out.baseIndex(m_heaps.MarkedBlock_markBits, markedBlock, markByteIndex, ScaleOne, MarkedBlock::offsetOfMarks())); |
| 5186 |
} |
5283 |
} |
| 5187 |
|
5284 |
|
| 5188 |
void emitStoreBarrier(LValue base, LValue value, Edge& valueEdge) |
5285 |
void emitStoreBarrier(LValue base, LValue value, Edge valueEdge) |
| 5189 |
{ |
5286 |
{ |
| 5190 |
#if ENABLE(GGC) |
5287 |
#if ENABLE(GGC) |
| 5191 |
LBasicBlock continuation = FTL_NEW_BLOCK(m_out, ("Store barrier continuation")); |
5288 |
LBasicBlock continuation = FTL_NEW_BLOCK(m_out, ("Store barrier continuation")); |