OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 814 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
825 | 825 |
826 LInstruction* LChunkBuilder::DoArithmeticT(Token::Value op, | 826 LInstruction* LChunkBuilder::DoArithmeticT(Token::Value op, |
827 HArithmeticBinaryOperation* instr) { | 827 HArithmeticBinaryOperation* instr) { |
828 ASSERT(op == Token::ADD || | 828 ASSERT(op == Token::ADD || |
829 op == Token::DIV || | 829 op == Token::DIV || |
830 op == Token::MOD || | 830 op == Token::MOD || |
831 op == Token::MUL || | 831 op == Token::MUL || |
832 op == Token::SUB); | 832 op == Token::SUB); |
833 HValue* left = instr->left(); | 833 HValue* left = instr->left(); |
834 HValue* right = instr->right(); | 834 HValue* right = instr->right(); |
835 ASSERT(left->representation().IsSmiOrTagged()); | 835 ASSERT(left->representation().IsTagged()); |
836 ASSERT(right->representation().IsSmiOrTagged()); | 836 ASSERT(right->representation().IsTagged()); |
837 LOperand* context = UseFixed(instr->context(), esi); | 837 LOperand* context = UseFixed(instr->context(), esi); |
838 LOperand* left_operand = UseFixed(left, edx); | 838 LOperand* left_operand = UseFixed(left, edx); |
839 LOperand* right_operand = UseFixed(right, eax); | 839 LOperand* right_operand = UseFixed(right, eax); |
840 LArithmeticT* result = | 840 LArithmeticT* result = |
841 new(zone()) LArithmeticT(op, context, left_operand, right_operand); | 841 new(zone()) LArithmeticT(op, context, left_operand, right_operand); |
842 return MarkAsCall(DefineFixed(result, eax), instr); | 842 return MarkAsCall(DefineFixed(result, eax), instr); |
843 } | 843 } |
844 | 844 |
845 | 845 |
846 void LChunkBuilder::DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block) { | 846 void LChunkBuilder::DoBasicBlock(HBasicBlock* block, HBasicBlock* next_block) { |
(...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1392 return DoShift(Token::SAR, instr); | 1392 return DoShift(Token::SAR, instr); |
1393 } | 1393 } |
1394 | 1394 |
1395 | 1395 |
1396 LInstruction* LChunkBuilder::DoShl(HShl* instr) { | 1396 LInstruction* LChunkBuilder::DoShl(HShl* instr) { |
1397 return DoShift(Token::SHL, instr); | 1397 return DoShift(Token::SHL, instr); |
1398 } | 1398 } |
1399 | 1399 |
1400 | 1400 |
1401 LInstruction* LChunkBuilder::DoBitwise(HBitwise* instr) { | 1401 LInstruction* LChunkBuilder::DoBitwise(HBitwise* instr) { |
1402 if (instr->representation().IsInteger32()) { | 1402 if (instr->representation().IsSmiOrInteger32()) { |
1403 ASSERT(instr->left()->representation().IsInteger32()); | 1403 ASSERT(instr->left()->representation().IsSmiOrInteger32()); |
1404 ASSERT(instr->right()->representation().IsInteger32()); | 1404 ASSERT(instr->right()->representation().Equals( |
| 1405 instr->left()->representation())); |
1405 | 1406 |
1406 LOperand* left = UseRegisterAtStart(instr->BetterLeftOperand()); | 1407 LOperand* left = UseRegisterAtStart(instr->BetterLeftOperand()); |
1407 LOperand* right = UseOrConstantAtStart(instr->BetterRightOperand()); | 1408 LOperand* right = UseOrConstantAtStart(instr->BetterRightOperand()); |
1408 return DefineSameAsFirst(new(zone()) LBitI(left, right)); | 1409 return DefineSameAsFirst(new(zone()) LBitI(left, right)); |
1409 } else { | 1410 } else { |
1410 ASSERT(instr->representation().IsSmiOrTagged()); | 1411 ASSERT(instr->representation().IsSmiOrTagged()); |
1411 ASSERT(instr->left()->representation().IsSmiOrTagged()); | 1412 ASSERT(instr->left()->representation().IsSmiOrTagged()); |
1412 ASSERT(instr->right()->representation().IsSmiOrTagged()); | 1413 ASSERT(instr->right()->representation().IsSmiOrTagged()); |
1413 | 1414 |
1414 LOperand* context = UseFixed(instr->context(), esi); | 1415 LOperand* context = UseFixed(instr->context(), esi); |
(...skipping 12 matching lines...) Expand all Loading... |
1427 if (instr->HasNoUses()) return NULL; | 1428 if (instr->HasNoUses()) return NULL; |
1428 LOperand* input = UseRegisterAtStart(instr->value()); | 1429 LOperand* input = UseRegisterAtStart(instr->value()); |
1429 LBitNotI* result = new(zone()) LBitNotI(input); | 1430 LBitNotI* result = new(zone()) LBitNotI(input); |
1430 return DefineSameAsFirst(result); | 1431 return DefineSameAsFirst(result); |
1431 } | 1432 } |
1432 | 1433 |
1433 | 1434 |
1434 LInstruction* LChunkBuilder::DoDiv(HDiv* instr) { | 1435 LInstruction* LChunkBuilder::DoDiv(HDiv* instr) { |
1435 if (instr->representation().IsDouble()) { | 1436 if (instr->representation().IsDouble()) { |
1436 return DoArithmeticD(Token::DIV, instr); | 1437 return DoArithmeticD(Token::DIV, instr); |
1437 } else if (instr->representation().IsInteger32()) { | 1438 } else if (instr->representation().IsSmiOrInteger32()) { |
| 1439 ASSERT(instr->left()->representation().Equals(instr->representation())); |
| 1440 ASSERT(instr->right()->representation().Equals(instr->representation())); |
1438 if (instr->HasPowerOf2Divisor()) { | 1441 if (instr->HasPowerOf2Divisor()) { |
1439 ASSERT(!instr->CheckFlag(HValue::kCanBeDivByZero)); | 1442 ASSERT(!instr->CheckFlag(HValue::kCanBeDivByZero)); |
1440 LOperand* value = UseRegisterAtStart(instr->left()); | 1443 LOperand* value = UseRegisterAtStart(instr->left()); |
1441 LDivI* div = | 1444 LDivI* div = |
1442 new(zone()) LDivI(value, UseOrConstant(instr->right()), NULL); | 1445 new(zone()) LDivI(value, UseOrConstant(instr->right()), NULL); |
1443 return AssignEnvironment(DefineSameAsFirst(div)); | 1446 return AssignEnvironment(DefineSameAsFirst(div)); |
1444 } | 1447 } |
1445 // The temporary operand is necessary to ensure that right is not allocated | 1448 // The temporary operand is necessary to ensure that right is not allocated |
1446 // into edx. | 1449 // into edx. |
1447 LOperand* temp = FixedTemp(edx); | 1450 LOperand* temp = FixedTemp(edx); |
1448 LOperand* dividend = UseFixed(instr->left(), eax); | 1451 LOperand* dividend = UseFixed(instr->left(), eax); |
1449 LOperand* divisor = UseRegister(instr->right()); | 1452 LOperand* divisor = UseRegister(instr->right()); |
1450 LDivI* result = new(zone()) LDivI(dividend, divisor, temp); | 1453 LDivI* result = new(zone()) LDivI(dividend, divisor, temp); |
1451 return AssignEnvironment(DefineFixed(result, eax)); | 1454 return AssignEnvironment(DefineFixed(result, eax)); |
1452 } else { | 1455 } else { |
1453 ASSERT(instr->representation().IsSmiOrTagged()); | 1456 ASSERT(instr->representation().IsTagged()); |
1454 return DoArithmeticT(Token::DIV, instr); | 1457 return DoArithmeticT(Token::DIV, instr); |
1455 } | 1458 } |
1456 } | 1459 } |
1457 | 1460 |
1458 | 1461 |
1459 HValue* LChunkBuilder::SimplifiedDivisorForMathFloorOfDiv(HValue* divisor) { | 1462 HValue* LChunkBuilder::SimplifiedDivisorForMathFloorOfDiv(HValue* divisor) { |
1460 if (divisor->IsConstant() && | 1463 if (divisor->IsConstant() && |
1461 HConstant::cast(divisor)->HasInteger32Value()) { | 1464 HConstant::cast(divisor)->HasInteger32Value()) { |
1462 HConstant* constant_val = HConstant::cast(divisor); | 1465 HConstant* constant_val = HConstant::cast(divisor); |
1463 return constant_val->CopyToRepresentation(Representation::Integer32(), | 1466 return constant_val->CopyToRepresentation(Representation::Integer32(), |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1509 LInstruction* result = DefineFixed( | 1512 LInstruction* result = DefineFixed( |
1510 new(zone()) LMathFloorOfDiv(dividend, divisor, temp), edx); | 1513 new(zone()) LMathFloorOfDiv(dividend, divisor, temp), edx); |
1511 return divisor_si < 0 ? AssignEnvironment(result) : result; | 1514 return divisor_si < 0 ? AssignEnvironment(result) : result; |
1512 } | 1515 } |
1513 } | 1516 } |
1514 | 1517 |
1515 | 1518 |
1516 LInstruction* LChunkBuilder::DoMod(HMod* instr) { | 1519 LInstruction* LChunkBuilder::DoMod(HMod* instr) { |
1517 HValue* left = instr->left(); | 1520 HValue* left = instr->left(); |
1518 HValue* right = instr->right(); | 1521 HValue* right = instr->right(); |
1519 if (instr->representation().IsInteger32()) { | 1522 if (instr->representation().IsSmiOrInteger32()) { |
1520 ASSERT(left->representation().IsInteger32()); | 1523 ASSERT(left->representation().IsSmiOrInteger32()); |
1521 ASSERT(right->representation().IsInteger32()); | 1524 ASSERT(right->representation().Equals(left->representation())); |
| 1525 |
1522 if (instr->HasPowerOf2Divisor()) { | 1526 if (instr->HasPowerOf2Divisor()) { |
1523 ASSERT(!right->CanBeZero()); | 1527 ASSERT(!right->CanBeZero()); |
1524 LModI* mod = new(zone()) LModI(UseRegisterAtStart(left), | 1528 LModI* mod = new(zone()) LModI(UseRegisterAtStart(left), |
1525 UseOrConstant(right), | 1529 UseOrConstant(right), |
1526 NULL); | 1530 NULL); |
1527 LInstruction* result = DefineSameAsFirst(mod); | 1531 LInstruction* result = DefineSameAsFirst(mod); |
1528 return (left->CanBeNegative() && | 1532 return (left->CanBeNegative() && |
1529 instr->CheckFlag(HValue::kBailoutOnMinusZero)) | 1533 instr->CheckFlag(HValue::kBailoutOnMinusZero)) |
1530 ? AssignEnvironment(result) | 1534 ? AssignEnvironment(result) |
1531 : result; | 1535 : result; |
(...skipping 28 matching lines...) Expand all Loading... |
1560 // TODO(fschneider): Allow any register as input registers. | 1564 // TODO(fschneider): Allow any register as input registers. |
1561 LArithmeticD* mod = new(zone()) LArithmeticD(Token::MOD, | 1565 LArithmeticD* mod = new(zone()) LArithmeticD(Token::MOD, |
1562 UseFixedDouble(left, xmm2), | 1566 UseFixedDouble(left, xmm2), |
1563 UseFixedDouble(right, xmm1)); | 1567 UseFixedDouble(right, xmm1)); |
1564 return MarkAsCall(DefineFixedDouble(mod, xmm1), instr); | 1568 return MarkAsCall(DefineFixedDouble(mod, xmm1), instr); |
1565 } | 1569 } |
1566 } | 1570 } |
1567 | 1571 |
1568 | 1572 |
1569 LInstruction* LChunkBuilder::DoMul(HMul* instr) { | 1573 LInstruction* LChunkBuilder::DoMul(HMul* instr) { |
1570 if (instr->representation().IsInteger32()) { | 1574 if (instr->representation().IsSmiOrInteger32()) { |
1571 ASSERT(instr->left()->representation().IsInteger32()); | 1575 ASSERT(instr->left()->representation().Equals(instr->representation())); |
1572 ASSERT(instr->right()->representation().IsInteger32()); | 1576 ASSERT(instr->right()->representation().Equals(instr->representation())); |
1573 LOperand* left = UseRegisterAtStart(instr->BetterLeftOperand()); | 1577 LOperand* left = UseRegisterAtStart(instr->BetterLeftOperand()); |
1574 LOperand* right = UseOrConstant(instr->BetterRightOperand()); | 1578 LOperand* right = UseOrConstant(instr->BetterRightOperand()); |
1575 LOperand* temp = NULL; | 1579 LOperand* temp = NULL; |
1576 if (instr->CheckFlag(HValue::kBailoutOnMinusZero)) { | 1580 if (instr->CheckFlag(HValue::kBailoutOnMinusZero)) { |
1577 temp = TempRegister(); | 1581 temp = TempRegister(); |
1578 } | 1582 } |
1579 LMulI* mul = new(zone()) LMulI(left, right, temp); | 1583 LMulI* mul = new(zone()) LMulI(left, right, temp); |
1580 if (instr->CheckFlag(HValue::kCanOverflow) || | 1584 if (instr->CheckFlag(HValue::kCanOverflow) || |
1581 instr->CheckFlag(HValue::kBailoutOnMinusZero)) { | 1585 instr->CheckFlag(HValue::kBailoutOnMinusZero)) { |
1582 AssignEnvironment(mul); | 1586 AssignEnvironment(mul); |
1583 } | 1587 } |
1584 return DefineSameAsFirst(mul); | 1588 return DefineSameAsFirst(mul); |
1585 } else if (instr->representation().IsDouble()) { | 1589 } else if (instr->representation().IsDouble()) { |
1586 return DoArithmeticD(Token::MUL, instr); | 1590 return DoArithmeticD(Token::MUL, instr); |
1587 } else { | 1591 } else { |
1588 ASSERT(instr->representation().IsSmiOrTagged()); | 1592 ASSERT(instr->representation().IsTagged()); |
1589 return DoArithmeticT(Token::MUL, instr); | 1593 return DoArithmeticT(Token::MUL, instr); |
1590 } | 1594 } |
1591 } | 1595 } |
1592 | 1596 |
1593 | 1597 |
1594 LInstruction* LChunkBuilder::DoSub(HSub* instr) { | 1598 LInstruction* LChunkBuilder::DoSub(HSub* instr) { |
1595 if (instr->representation().IsInteger32()) { | 1599 if (instr->representation().IsSmiOrInteger32()) { |
1596 ASSERT(instr->left()->representation().IsInteger32()); | 1600 ASSERT(instr->left()->representation().IsSmiOrInteger32()); |
1597 ASSERT(instr->right()->representation().IsInteger32()); | 1601 ASSERT(instr->right()->representation().Equals( |
| 1602 instr->left()->representation())); |
1598 LOperand* left = UseRegisterAtStart(instr->left()); | 1603 LOperand* left = UseRegisterAtStart(instr->left()); |
1599 LOperand* right = UseOrConstantAtStart(instr->right()); | 1604 LOperand* right = UseOrConstantAtStart(instr->right()); |
1600 LSubI* sub = new(zone()) LSubI(left, right); | 1605 LSubI* sub = new(zone()) LSubI(left, right); |
1601 LInstruction* result = DefineSameAsFirst(sub); | 1606 LInstruction* result = DefineSameAsFirst(sub); |
1602 if (instr->CheckFlag(HValue::kCanOverflow)) { | 1607 if (instr->CheckFlag(HValue::kCanOverflow)) { |
1603 result = AssignEnvironment(result); | 1608 result = AssignEnvironment(result); |
1604 } | 1609 } |
1605 return result; | 1610 return result; |
1606 } else if (instr->representation().IsDouble()) { | 1611 } else if (instr->representation().IsDouble()) { |
1607 return DoArithmeticD(Token::SUB, instr); | 1612 return DoArithmeticD(Token::SUB, instr); |
1608 } else { | 1613 } else { |
1609 ASSERT(instr->representation().IsSmiOrTagged()); | 1614 ASSERT(instr->representation().IsSmiOrTagged()); |
1610 return DoArithmeticT(Token::SUB, instr); | 1615 return DoArithmeticT(Token::SUB, instr); |
1611 } | 1616 } |
1612 } | 1617 } |
1613 | 1618 |
1614 | 1619 |
1615 LInstruction* LChunkBuilder::DoAdd(HAdd* instr) { | 1620 LInstruction* LChunkBuilder::DoAdd(HAdd* instr) { |
1616 if (instr->representation().IsInteger32()) { | 1621 if (instr->representation().IsSmiOrInteger32()) { |
| 1622 ASSERT(instr->left()->representation().IsSmiOrInteger32()); |
| 1623 ASSERT(instr->right()->representation().Equals( |
| 1624 instr->left()->representation())); |
1617 // Check to see if it would be advantageous to use an lea instruction rather | 1625 // Check to see if it would be advantageous to use an lea instruction rather |
1618 // than an add. This is the case when no overflow check is needed and there | 1626 // than an add. This is the case when no overflow check is needed and there |
1619 // are multiple uses of the add's inputs, so using a 3-register add will | 1627 // are multiple uses of the add's inputs, so using a 3-register add will |
1620 // preserve all input values for later uses. | 1628 // preserve all input values for later uses. |
1621 bool use_lea = LAddI::UseLea(instr); | 1629 bool use_lea = LAddI::UseLea(instr); |
1622 ASSERT(instr->left()->representation().IsInteger32()); | |
1623 ASSERT(instr->right()->representation().IsInteger32()); | |
1624 LOperand* left = UseRegisterAtStart(instr->BetterLeftOperand()); | 1630 LOperand* left = UseRegisterAtStart(instr->BetterLeftOperand()); |
1625 HValue* right_candidate = instr->BetterRightOperand(); | 1631 HValue* right_candidate = instr->BetterRightOperand(); |
1626 LOperand* right = use_lea | 1632 LOperand* right = use_lea |
1627 ? UseRegisterOrConstantAtStart(right_candidate) | 1633 ? UseRegisterOrConstantAtStart(right_candidate) |
1628 : UseOrConstantAtStart(right_candidate); | 1634 : UseOrConstantAtStart(right_candidate); |
1629 LAddI* add = new(zone()) LAddI(left, right); | 1635 LAddI* add = new(zone()) LAddI(left, right); |
1630 bool can_overflow = instr->CheckFlag(HValue::kCanOverflow); | 1636 bool can_overflow = instr->CheckFlag(HValue::kCanOverflow); |
1631 LInstruction* result = use_lea | 1637 LInstruction* result = use_lea |
1632 ? DefineAsRegister(add) | 1638 ? DefineAsRegister(add) |
1633 : DefineSameAsFirst(add); | 1639 : DefineSameAsFirst(add); |
1634 if (can_overflow) { | 1640 if (can_overflow) { |
1635 result = AssignEnvironment(result); | 1641 result = AssignEnvironment(result); |
1636 } | 1642 } |
1637 return result; | 1643 return result; |
1638 } else if (instr->representation().IsDouble()) { | 1644 } else if (instr->representation().IsDouble()) { |
1639 return DoArithmeticD(Token::ADD, instr); | 1645 return DoArithmeticD(Token::ADD, instr); |
1640 } else { | 1646 } else { |
1641 ASSERT(instr->representation().IsSmiOrTagged()); | 1647 ASSERT(instr->representation().IsSmiOrTagged()); |
1642 return DoArithmeticT(Token::ADD, instr); | 1648 return DoArithmeticT(Token::ADD, instr); |
1643 } | 1649 } |
1644 } | 1650 } |
1645 | 1651 |
1646 | 1652 |
1647 LInstruction* LChunkBuilder::DoMathMinMax(HMathMinMax* instr) { | 1653 LInstruction* LChunkBuilder::DoMathMinMax(HMathMinMax* instr) { |
1648 LOperand* left = NULL; | 1654 LOperand* left = NULL; |
1649 LOperand* right = NULL; | 1655 LOperand* right = NULL; |
1650 if (instr->representation().IsInteger32()) { | 1656 if (instr->representation().IsSmiOrInteger32()) { |
1651 ASSERT(instr->left()->representation().IsInteger32()); | 1657 ASSERT(instr->left()->representation().IsSmiOrInteger32()); |
1652 ASSERT(instr->right()->representation().IsInteger32()); | 1658 ASSERT(instr->right()->representation().Equals( |
| 1659 instr->left()->representation())); |
1653 left = UseRegisterAtStart(instr->BetterLeftOperand()); | 1660 left = UseRegisterAtStart(instr->BetterLeftOperand()); |
1654 right = UseOrConstantAtStart(instr->BetterRightOperand()); | 1661 right = UseOrConstantAtStart(instr->BetterRightOperand()); |
1655 } else { | 1662 } else { |
1656 ASSERT(instr->representation().IsDouble()); | 1663 ASSERT(instr->representation().IsDouble()); |
1657 ASSERT(instr->left()->representation().IsDouble()); | 1664 ASSERT(instr->left()->representation().IsDouble()); |
1658 ASSERT(instr->right()->representation().IsDouble()); | 1665 ASSERT(instr->right()->representation().IsDouble()); |
1659 left = UseRegisterAtStart(instr->left()); | 1666 left = UseRegisterAtStart(instr->left()); |
1660 right = UseRegisterAtStart(instr->right()); | 1667 right = UseRegisterAtStart(instr->right()); |
1661 } | 1668 } |
1662 LMathMinMax* minmax = new(zone()) LMathMinMax(left, right); | 1669 LMathMinMax* minmax = new(zone()) LMathMinMax(left, right); |
(...skipping 590 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2253 | 2260 |
2254 | 2261 |
2255 LInstruction* LChunkBuilder::DoLoadExternalArrayPointer( | 2262 LInstruction* LChunkBuilder::DoLoadExternalArrayPointer( |
2256 HLoadExternalArrayPointer* instr) { | 2263 HLoadExternalArrayPointer* instr) { |
2257 LOperand* input = UseRegisterAtStart(instr->value()); | 2264 LOperand* input = UseRegisterAtStart(instr->value()); |
2258 return DefineAsRegister(new(zone()) LLoadExternalArrayPointer(input)); | 2265 return DefineAsRegister(new(zone()) LLoadExternalArrayPointer(input)); |
2259 } | 2266 } |
2260 | 2267 |
2261 | 2268 |
2262 LInstruction* LChunkBuilder::DoLoadKeyed(HLoadKeyed* instr) { | 2269 LInstruction* LChunkBuilder::DoLoadKeyed(HLoadKeyed* instr) { |
2263 ASSERT(instr->key()->representation().IsInteger32() || | 2270 ASSERT(instr->key()->representation().IsSmiOrInteger32()); |
2264 instr->key()->representation().IsSmi()); | |
2265 ElementsKind elements_kind = instr->elements_kind(); | 2271 ElementsKind elements_kind = instr->elements_kind(); |
2266 bool clobbers_key = ExternalArrayOpRequiresTemp( | 2272 bool clobbers_key = ExternalArrayOpRequiresTemp( |
2267 instr->key()->representation(), elements_kind); | 2273 instr->key()->representation(), elements_kind); |
2268 LOperand* key = clobbers_key | 2274 LOperand* key = clobbers_key |
2269 ? UseTempRegister(instr->key()) | 2275 ? UseTempRegister(instr->key()) |
2270 : UseRegisterOrConstantAtStart(instr->key()); | 2276 : UseRegisterOrConstantAtStart(instr->key()); |
2271 LLoadKeyed* result = NULL; | 2277 LLoadKeyed* result = NULL; |
2272 | 2278 |
2273 if (!instr->is_external()) { | 2279 if (!instr->is_external()) { |
2274 LOperand* obj = UseRegisterAtStart(instr->elements()); | 2280 LOperand* obj = UseRegisterAtStart(instr->elements()); |
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2766 LInstruction* LChunkBuilder::DoLoadFieldByIndex(HLoadFieldByIndex* instr) { | 2772 LInstruction* LChunkBuilder::DoLoadFieldByIndex(HLoadFieldByIndex* instr) { |
2767 LOperand* object = UseRegister(instr->object()); | 2773 LOperand* object = UseRegister(instr->object()); |
2768 LOperand* index = UseTempRegister(instr->index()); | 2774 LOperand* index = UseTempRegister(instr->index()); |
2769 return DefineSameAsFirst(new(zone()) LLoadFieldByIndex(object, index)); | 2775 return DefineSameAsFirst(new(zone()) LLoadFieldByIndex(object, index)); |
2770 } | 2776 } |
2771 | 2777 |
2772 | 2778 |
2773 } } // namespace v8::internal | 2779 } } // namespace v8::internal |
2774 | 2780 |
2775 #endif // V8_TARGET_ARCH_IA32 | 2781 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |