Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(469)

Side by Side Diff: src/ia32/lithium-ia32.cc

Issue 20070005: Adding Smi support to Add, Sub, Mul, and Bitwise (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Addressed nit Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/ia32/lithium-gap-resolver-ia32.cc ('k') | src/type-info.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « src/ia32/lithium-gap-resolver-ia32.cc ('k') | src/type-info.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698