Changeset 160347 in webkit for trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp
- Timestamp:
- Dec 9, 2013, 7:24:31 PM (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp
r160295 r160347 356 356 compileGetArrayLength(); 357 357 break; 358 case CheckInBounds: 359 compileCheckInBounds(); 360 break; 358 361 case GetByVal: 359 362 compileGetByVal(); … … 1476 1479 } 1477 1480 1481 void compileCheckInBounds() 1482 { 1483 speculate( 1484 OutOfBounds, noValue(), 0, 1485 m_out.aboveOrEqual(lowInt32(m_node->child1()), lowInt32(m_node->child2()))); 1486 } 1487 1478 1488 void compileGetByVal() 1479 1489 { … … 1488 1498 1489 1499 if (m_node->arrayMode().isInBounds()) { 1490 speculate(1491 OutOfBounds, noValue(), 0,1492 m_out.aboveOrEqual(1493 index, m_out.load32(storage, m_heaps.Butterfly_publicLength)));1494 1495 1500 LValue result = m_out.load64(baseIndex(heap, storage, index, m_node->child2())); 1496 1501 speculate(LoadFromHole, noValue(), 0, m_out.isZero64(result)); … … 1533 1538 1534 1539 if (m_node->arrayMode().isInBounds()) { 1535 speculate(1536 OutOfBounds, noValue(), 0,1537 m_out.aboveOrEqual(1538 index, m_out.load32(storage, m_heaps.Butterfly_publicLength)));1539 1540 1540 LValue result = m_out.loadDouble( 1541 1541 baseIndex(heap, storage, index, m_node->child2())); … … 1601 1601 1602 1602 if (isTypedView(type)) { 1603 speculate(1604 OutOfBounds, noValue(), 0,1605 m_out.aboveOrEqual(1606 index, typedArrayLength(m_node->child1(), m_node->arrayMode())));1607 1608 1603 TypedPointer pointer = TypedPointer( 1609 1604 m_heaps.typedArrayProperties, … … 1793 1788 1794 1789 if (isTypedView(type)) { 1795 if (m_node->op() != PutByValAlias) {1796 speculate(1797 OutOfBounds, noValue(), 0,1798 m_out.aboveOrEqual(1799 index,1800 typedArrayLength(child1, m_node->arrayMode(), base)));1801 }1802 1803 1790 TypedPointer pointer = TypedPointer( 1804 1791 m_heaps.typedArrayProperties, … … 3086 3073 template<typename FunctionType> 3087 3074 void contiguousPutByValOutOfBounds( 3088 FunctionType slowPathFunction, 3089 LValue base, LValue storage, LValue index, LValue value, 3075 FunctionType slowPathFunction, LValue base, LValue storage, LValue index, LValue value, 3090 3076 LBasicBlock continuation) 3091 3077 { 3092 3078 LValue isNotInBounds = m_out.aboveOrEqual( 3093 3079 index, m_out.load32(storage, m_heaps.Butterfly_publicLength)); 3094 if (m_node->arrayMode().isInBounds()) 3095 speculate(StoreToHoleOrOutOfBounds, noValue(), 0, isNotInBounds); 3096 else { 3080 if (!m_node->arrayMode().isInBounds()) { 3097 3081 LBasicBlock notInBoundsCase = 3098 3082 FTL_NEW_BLOCK(m_out, ("PutByVal not in bounds"));
Note:
See TracChangeset
for help on using the changeset viewer.