Changeset 155564 in webkit for trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
- Timestamp:
- Sep 11, 2013, 2:24:34 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
r155497 r155564 1590 1590 m_jit.graph().m_argumentPositions[argumentPositionStart + i]; 1591 1591 ValueSource valueSource; 1592 if (!argumentPosition.shouldUnboxIfPossible()) 1592 switch (argumentPosition.flushFormat()) { 1593 case DeadFlush: 1594 case FlushedJSValue: 1593 1595 valueSource = ValueSource(ValueInJSStack); 1594 else if (argumentPosition.shouldUseDoubleFormat()) 1596 break; 1597 case FlushedDouble: 1595 1598 valueSource = ValueSource(DoubleInJSStack); 1596 else if (isInt32Speculation(argumentPosition.prediction())) 1599 break; 1600 case FlushedInt32: 1597 1601 valueSource = ValueSource(Int32InJSStack); 1598 else if (isCellSpeculation(argumentPosition.prediction())) 1602 break; 1603 case FlushedCell: 1599 1604 valueSource = ValueSource(CellInJSStack); 1600 else if (isBooleanSpeculation(argumentPosition.prediction())) 1605 break; 1606 case FlushedBoolean: 1601 1607 valueSource = ValueSource(BooleanInJSStack); 1602 else1603 valueSource = ValueSource(ValueInJSStack);1608 break; 1609 } 1604 1610 recovery = computeValueRecoveryFor(valueSource); 1605 1611 } … … 1674 1680 else if (!node->refCount()) 1675 1681 valueSource = ValueSource(SourceIsDead); 1676 else if (!node->variableAccessData()->shouldUnboxIfPossible())1677 valueSource = ValueSource(ValueInJSStack);1678 else if (node->variableAccessData()->shouldUseDoubleFormat())1679 valueSource = ValueSource(DoubleInJSStack);1680 1682 else 1681 valueSource = ValueSource::for Speculation(node->variableAccessData()->argumentAwarePrediction());1683 valueSource = ValueSource::forFlushFormat(node->variableAccessData()->flushFormat()); 1682 1684 m_variables[i] = valueSource; 1683 1685 // FIXME: Don't emit SetLocal(Dead). https://bugs.webkit.org/show_bug.cgi?id=108019 … … 1841 1843 1842 1844 VariableAccessData* variableAccessData = node->variableAccessData(); 1843 if (!variableAccessData->shouldUnboxIfPossible()) 1845 FlushFormat format = variableAccessData->flushFormat(); 1846 1847 if (format == FlushedJSValue) 1844 1848 continue; 1845 1849 1846 1850 VirtualRegister virtualRegister = variableAccessData->local(); 1847 SpeculatedType predictedType = variableAccessData->argumentAwarePrediction();1848 1851 1849 1852 JSValueSource valueSource = JSValueSource(JITCompiler::addressFor(virtualRegister)); 1850 1853 1851 1854 #if USE(JSVALUE64) 1852 if (isInt32Speculation(predictedType)) 1855 switch (format) { 1856 case FlushedInt32: { 1853 1857 speculationCheck(BadType, valueSource, node, m_jit.branch64(MacroAssembler::Below, JITCompiler::addressFor(virtualRegister), GPRInfo::tagTypeNumberRegister)); 1854 else if (isBooleanSpeculation(predictedType)) { 1858 break; 1859 } 1860 case FlushedBoolean: { 1855 1861 GPRTemporary temp(this); 1856 1862 m_jit.load64(JITCompiler::addressFor(virtualRegister), temp.gpr()); 1857 1863 m_jit.xor64(TrustedImm32(static_cast<int32_t>(ValueFalse)), temp.gpr()); 1858 1864 speculationCheck(BadType, valueSource, node, m_jit.branchTest64(MacroAssembler::NonZero, temp.gpr(), TrustedImm32(static_cast<int32_t>(~1)))); 1859 } else if (isCellSpeculation(predictedType)) 1865 break; 1866 } 1867 case FlushedCell: { 1860 1868 speculationCheck(BadType, valueSource, node, m_jit.branchTest64(MacroAssembler::NonZero, JITCompiler::addressFor(virtualRegister), GPRInfo::tagMaskRegister)); 1869 break; 1870 } 1871 default: 1872 RELEASE_ASSERT_NOT_REACHED(); 1873 break; 1874 } 1861 1875 #else 1862 if (isInt32Speculation(predictedType)) 1876 switch (format) { 1877 case FlushedInt32: { 1863 1878 speculationCheck(BadType, valueSource, node, m_jit.branch32(MacroAssembler::NotEqual, JITCompiler::tagFor(virtualRegister), TrustedImm32(JSValue::Int32Tag))); 1864 else if (isBooleanSpeculation(predictedType)) 1879 break; 1880 } 1881 case FlushedBoolean: { 1865 1882 speculationCheck(BadType, valueSource, node, m_jit.branch32(MacroAssembler::NotEqual, JITCompiler::tagFor(virtualRegister), TrustedImm32(JSValue::BooleanTag))); 1866 else if (isCellSpeculation(predictedType)) 1883 break; 1884 } 1885 case FlushedCell: { 1867 1886 speculationCheck(BadType, valueSource, node, m_jit.branch32(MacroAssembler::NotEqual, JITCompiler::tagFor(virtualRegister), TrustedImm32(JSValue::CellTag))); 1887 break; 1888 } 1889 default: 1890 RELEASE_ASSERT_NOT_REACHED(); 1891 break; 1892 } 1868 1893 #endif 1869 1894 }
Note:
See TracChangeset
for help on using the changeset viewer.