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

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

Issue 145773008: A64: Synchronize with r17104. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/a64
Patch Set: Created 6 years, 10 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/a64/lithium-a64.h ('k') | src/a64/lithium-codegen-a64.h » ('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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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 553 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 operand->set_virtual_register(vreg); 564 operand->set_virtual_register(vreg);
565 return operand; 565 return operand;
566 } 566 }
567 567
568 568
569 int LPlatformChunk::GetNextSpillIndex() { 569 int LPlatformChunk::GetNextSpillIndex() {
570 return spill_slot_count_++; 570 return spill_slot_count_++;
571 } 571 }
572 572
573 573
574 LOperand* LPlatformChunk::GetNextSpillSlot(bool is_double) { 574 LOperand* LPlatformChunk::GetNextSpillSlot(RegisterKind kind) {
575 int index = GetNextSpillIndex(); 575 int index = GetNextSpillIndex();
576 if (is_double) { 576 if (kind == DOUBLE_REGISTERS) {
577 return LDoubleStackSlot::Create(index, zone()); 577 return LDoubleStackSlot::Create(index, zone());
578 } else { 578 } else {
579 ASSERT(kind == GENERAL_REGISTERS);
579 return LStackSlot::Create(index, zone()); 580 return LStackSlot::Create(index, zone());
580 } 581 }
581 } 582 }
582 583
583 584
584 LOperand* LChunkBuilder::FixedTemp(DoubleRegister reg) { 585 LOperand* LChunkBuilder::FixedTemp(DoubleRegister reg) {
585 LUnallocated* operand = ToUnallocated(reg); 586 LUnallocated* operand = ToUnallocated(reg);
586 ASSERT(operand->HasFixedPolicy()); 587 ASSERT(operand->HasFixedPolicy());
587 return operand; 588 return operand;
588 } 589 }
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
680 } 681 }
681 block->set_argument_count(argument_count_); 682 block->set_argument_count(argument_count_);
682 current_block_ = NULL; 683 current_block_ = NULL;
683 } 684 }
684 685
685 686
686 void LChunkBuilder::VisitInstruction(HInstruction* current) { 687 void LChunkBuilder::VisitInstruction(HInstruction* current) {
687 HInstruction* old_current = current_instruction_; 688 HInstruction* old_current = current_instruction_;
688 current_instruction_ = current; 689 current_instruction_ = current;
689 if (current->has_position()) position_ = current->position(); 690 if (current->has_position()) position_ = current->position();
690 LInstruction* instr = current->CompileToLithium(this); 691
692 LInstruction* instr = NULL;
693 if (current->CanReplaceWithDummyUses()) {
694 HValue* first_operand = current->OperandCount() == 0
695 ? graph()->GetConstant1()
696 : current->OperandAt(0);
697 instr = DefineAsRegister(new(zone()) LDummyUse(UseAny(first_operand)));
698 for (int i = 1; i < current->OperandCount(); ++i) {
699 LInstruction* dummy =
700 new(zone()) LDummyUse(UseAny(current->OperandAt(i)));
701 dummy->set_hydrogen_value(current);
702 chunk_->AddInstruction(dummy, current_block_);
703 }
704 } else {
705 instr = current->CompileToLithium(this);
706 }
707
708 argument_count_ += current->argument_delta();
709 ASSERT(argument_count_ >= 0);
691 710
692 if (instr != NULL) { 711 if (instr != NULL) {
712 // Associate the hydrogen instruction first, since we may need it for
713 // the ClobbersRegisters() or ClobbersDoubleRegisters() calls below.
714 instr->set_hydrogen_value(current);
715
693 #if DEBUG 716 #if DEBUG
694 // Make sure that the lithium instruction has either no fixed register 717 // Make sure that the lithium instruction has either no fixed register
695 // constraints in temps or the result OR no uses that are only used at 718 // constraints in temps or the result OR no uses that are only used at
696 // start. If this invariant doesn't hold, the register allocator can decide 719 // start. If this invariant doesn't hold, the register allocator can decide
697 // to insert a split of a range immediately before the instruction due to an 720 // to insert a split of a range immediately before the instruction due to an
698 // already allocated register needing to be used for the instruction's fixed 721 // already allocated register needing to be used for the instruction's fixed
699 // register constraint. In this case, the register allocator won't see an 722 // register constraint. In this case, the register allocator won't see an
700 // interference between the split child and the use-at-start (it would if 723 // interference between the split child and the use-at-start (it would if
701 // the it was just a plain use), so it is free to move the split child into 724 // the it was just a plain use), so it is free to move the split child into
702 // the same register that is used for the use-at-start. 725 // the same register that is used for the use-at-start.
(...skipping 16 matching lines...) Expand all
719 } 742 }
720 #endif 743 #endif
721 744
722 instr->set_position(position_); 745 instr->set_position(position_);
723 if (FLAG_stress_pointer_maps && !instr->HasPointerMap()) { 746 if (FLAG_stress_pointer_maps && !instr->HasPointerMap()) {
724 instr = AssignPointerMap(instr); 747 instr = AssignPointerMap(instr);
725 } 748 }
726 if (FLAG_stress_environments && !instr->HasEnvironment()) { 749 if (FLAG_stress_environments && !instr->HasEnvironment()) {
727 instr = AssignEnvironment(instr); 750 instr = AssignEnvironment(instr);
728 } 751 }
729 instr->set_hydrogen_value(current);
730 chunk_->AddInstruction(instr, current_block_); 752 chunk_->AddInstruction(instr, current_block_);
731 } 753 }
732 current_instruction_ = old_current; 754 current_instruction_ = old_current;
733 } 755 }
734 756
735 757
736 LInstruction* LChunkBuilder::AssignEnvironment(LInstruction* instr) { 758 LInstruction* LChunkBuilder::AssignEnvironment(LInstruction* instr) {
737 HEnvironment* hydrogen_env = current_block_->last_environment(); 759 HEnvironment* hydrogen_env = current_block_->last_environment();
738 int argument_index_accumulator = 0; 760 int argument_index_accumulator = 0;
739 ZoneList<HValue*> objects_to_materialize(0, zone()); 761 ZoneList<HValue*> objects_to_materialize(0, zone());
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
1006 1028
1007 1029
1008 LInstruction* LChunkBuilder::DoBoundsCheck(HBoundsCheck* instr) { 1030 LInstruction* LChunkBuilder::DoBoundsCheck(HBoundsCheck* instr) {
1009 LOperand* value = UseRegisterOrConstantAtStart(instr->index()); 1031 LOperand* value = UseRegisterOrConstantAtStart(instr->index());
1010 LOperand* length = UseRegister(instr->length()); 1032 LOperand* length = UseRegister(instr->length());
1011 return AssignEnvironment(new(zone()) LBoundsCheck(value, length)); 1033 return AssignEnvironment(new(zone()) LBoundsCheck(value, length));
1012 } 1034 }
1013 1035
1014 1036
1015 LInstruction* LChunkBuilder::DoBranch(HBranch* instr) { 1037 LInstruction* LChunkBuilder::DoBranch(HBranch* instr) {
1038 LInstruction* goto_instr = CheckElideControlInstruction(instr);
1039 if (goto_instr != NULL) return goto_instr;
1040
1016 HValue* value = instr->value(); 1041 HValue* value = instr->value();
1017
1018 if (value->EmitAtUses()) {
1019 // TODO(all): Handle this case with CheckElideControlInstruction once
1020 // we've done the rebase.
1021 HBasicBlock* successor = HConstant::cast(value)->BooleanValue()
1022 ? instr->FirstSuccessor()
1023 : instr->SecondSuccessor();
1024 return new(zone()) LGoto(successor->block_id());
1025 }
1026
1027 Representation r = value->representation(); 1042 Representation r = value->representation();
1028 HType type = value->type(); 1043 HType type = value->type();
1029 1044
1030 if (r.IsInteger32() || r.IsSmi() || r.IsDouble()) { 1045 if (r.IsInteger32() || r.IsSmi() || r.IsDouble()) {
1031 // These representations have simple checks that cannot deoptimize. 1046 // These representations have simple checks that cannot deoptimize.
1032 return new(zone()) LBranch(UseRegister(value), NULL, NULL); 1047 return new(zone()) LBranch(UseRegister(value), NULL, NULL);
1033 } else { 1048 } else {
1034 ASSERT(r.IsTagged()); 1049 ASSERT(r.IsTagged());
1035 if (type.IsBoolean() || type.IsSmi() || type.IsJSArray() || 1050 if (type.IsBoolean() || type.IsSmi() || type.IsJSArray() ||
1036 type.IsHeapNumber()) { 1051 type.IsHeapNumber()) {
(...skipping 19 matching lines...) Expand all
1056 } else { 1071 } else {
1057 return AssignEnvironment( 1072 return AssignEnvironment(
1058 new(zone()) LBranch(UseRegister(value), temp1, temp2)); 1073 new(zone()) LBranch(UseRegister(value), temp1, temp2));
1059 } 1074 }
1060 } 1075 }
1061 } 1076 }
1062 1077
1063 1078
1064 LInstruction* LChunkBuilder::DoCallConstantFunction( 1079 LInstruction* LChunkBuilder::DoCallConstantFunction(
1065 HCallConstantFunction* instr) { 1080 HCallConstantFunction* instr) {
1066 argument_count_ -= instr->argument_count();
1067 return MarkAsCall(DefineFixed(new(zone()) LCallConstantFunction, x0), instr); 1081 return MarkAsCall(DefineFixed(new(zone()) LCallConstantFunction, x0), instr);
1068 } 1082 }
1069 1083
1070 1084
1071 LInstruction* LChunkBuilder::DoCallFunction(HCallFunction* instr) { 1085 LInstruction* LChunkBuilder::DoCallFunction(HCallFunction* instr) {
1072 LOperand* function = UseFixed(instr->function(), x1); 1086 LOperand* function = UseFixed(instr->function(), x1);
1073 argument_count_ -= instr->argument_count();
1074 LInstruction* result = DefineFixed(new(zone()) LCallFunction(function), x0); 1087 LInstruction* result = DefineFixed(new(zone()) LCallFunction(function), x0);
1075 // TODO(all): Uncomment the following line during the rebase. 1088 // TODO(all): Uncomment the following line during the rebase.
1076 // if (instr->IsTailCall()) return result; 1089 // if (instr->IsTailCall()) return result;
1077 return MarkAsCall(result, instr); 1090 return MarkAsCall(result, instr);
1078 } 1091 }
1079 1092
1080 1093
1081 LInstruction* LChunkBuilder::DoCallGlobal(HCallGlobal* instr) { 1094 LInstruction* LChunkBuilder::DoCallGlobal(HCallGlobal* instr) {
1082 argument_count_ -= instr->argument_count();
1083 return MarkAsCall(DefineFixed(new(zone()) LCallGlobal, x0), instr); 1095 return MarkAsCall(DefineFixed(new(zone()) LCallGlobal, x0), instr);
1084 } 1096 }
1085 1097
1086 1098
1087 LInstruction* LChunkBuilder::DoCallKeyed(HCallKeyed* instr) { 1099 LInstruction* LChunkBuilder::DoCallKeyed(HCallKeyed* instr) {
1088 ASSERT(instr->key()->representation().IsTagged()); 1100 ASSERT(instr->key()->representation().IsTagged());
1089 argument_count_ -= instr->argument_count();
1090 LOperand* key = UseFixed(instr->key(), x2); 1101 LOperand* key = UseFixed(instr->key(), x2);
1091 return MarkAsCall(DefineFixed(new(zone()) LCallKeyed(key), x0), instr); 1102 return MarkAsCall(DefineFixed(new(zone()) LCallKeyed(key), x0), instr);
1092 } 1103 }
1093 1104
1094 1105
1095 LInstruction* LChunkBuilder::DoCallKnownGlobal(HCallKnownGlobal* instr) { 1106 LInstruction* LChunkBuilder::DoCallKnownGlobal(HCallKnownGlobal* instr) {
1096 argument_count_ -= instr->argument_count();
1097 return MarkAsCall(DefineFixed(new(zone()) LCallKnownGlobal, x0), instr); 1107 return MarkAsCall(DefineFixed(new(zone()) LCallKnownGlobal, x0), instr);
1098 } 1108 }
1099 1109
1100 1110
1101 LInstruction* LChunkBuilder::DoCallNamed(HCallNamed* instr) { 1111 LInstruction* LChunkBuilder::DoCallNamed(HCallNamed* instr) {
1102 argument_count_ -= instr->argument_count();
1103 return MarkAsCall(DefineFixed(new(zone()) LCallNamed, x0), instr); 1112 return MarkAsCall(DefineFixed(new(zone()) LCallNamed, x0), instr);
1104 } 1113 }
1105 1114
1106 1115
1107 LInstruction* LChunkBuilder::DoCallNew(HCallNew* instr) { 1116 LInstruction* LChunkBuilder::DoCallNew(HCallNew* instr) {
1108 // The call to CallConstructStub will expect the constructor to be in x1. 1117 // The call to CallConstructStub will expect the constructor to be in x1.
1109 LOperand* constructor = UseFixed(instr->constructor(), x1); 1118 LOperand* constructor = UseFixed(instr->constructor(), x1);
1110 argument_count_ -= instr->argument_count();
1111 LCallNew* result = new(zone()) LCallNew(constructor); 1119 LCallNew* result = new(zone()) LCallNew(constructor);
1112 return MarkAsCall(DefineFixed(result, x0), instr); 1120 return MarkAsCall(DefineFixed(result, x0), instr);
1113 } 1121 }
1114 1122
1115 1123
1116 LInstruction* LChunkBuilder::DoCallNewArray(HCallNewArray* instr) { 1124 LInstruction* LChunkBuilder::DoCallNewArray(HCallNewArray* instr) {
1117 // The call to ArrayConstructCode will expect the constructor to be in x1. 1125 // The call to ArrayConstructCode will expect the constructor to be in x1.
1118 LOperand* constructor = UseFixed(instr->constructor(), x1); 1126 LOperand* constructor = UseFixed(instr->constructor(), x1);
1119 argument_count_ -= instr->argument_count();
1120 LCallNewArray* result = new(zone()) LCallNewArray(constructor); 1127 LCallNewArray* result = new(zone()) LCallNewArray(constructor);
1121 return MarkAsCall(DefineFixed(result, x0), instr); 1128 return MarkAsCall(DefineFixed(result, x0), instr);
1122 } 1129 }
1123 1130
1124 1131
1125 LInstruction* LChunkBuilder::DoCallRuntime(HCallRuntime* instr) { 1132 LInstruction* LChunkBuilder::DoCallRuntime(HCallRuntime* instr) {
1126 argument_count_ -= instr->argument_count();
1127 return MarkAsCall(DefineFixed(new(zone()) LCallRuntime, x0), instr); 1133 return MarkAsCall(DefineFixed(new(zone()) LCallRuntime, x0), instr);
1128 } 1134 }
1129 1135
1130 1136
1131 LInstruction* LChunkBuilder::DoCallStub(HCallStub* instr) { 1137 LInstruction* LChunkBuilder::DoCallStub(HCallStub* instr) {
1132 argument_count_ -= instr->argument_count();
1133 return MarkAsCall(DefineFixed(new(zone()) LCallStub, x0), instr); 1138 return MarkAsCall(DefineFixed(new(zone()) LCallStub, x0), instr);
1134 } 1139 }
1135 1140
1136 1141
1137 LInstruction* LChunkBuilder::DoCapturedObject(HCapturedObject* instr) { 1142 LInstruction* LChunkBuilder::DoCapturedObject(HCapturedObject* instr) {
1138 instr->ReplayEnvironment(current_block_->last_environment()); 1143 instr->ReplayEnvironment(current_block_->last_environment());
1139 1144
1140 // There are no real uses of a captured object. 1145 // There are no real uses of a captured object.
1141 return NULL; 1146 return NULL;
1142 } 1147 }
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
1382 return new(zone()) LCmpHoleAndBranchT(value); 1387 return new(zone()) LCmpHoleAndBranchT(value);
1383 } else { 1388 } else {
1384 LOperand* temp = TempRegister(); 1389 LOperand* temp = TempRegister();
1385 return new(zone()) LCmpHoleAndBranchD(value, temp); 1390 return new(zone()) LCmpHoleAndBranchD(value, temp);
1386 } 1391 }
1387 } 1392 }
1388 1393
1389 1394
1390 LInstruction* LChunkBuilder::DoCompareObjectEqAndBranch( 1395 LInstruction* LChunkBuilder::DoCompareObjectEqAndBranch(
1391 HCompareObjectEqAndBranch* instr) { 1396 HCompareObjectEqAndBranch* instr) {
1397 LInstruction* goto_instr = CheckElideControlInstruction(instr);
1398 if (goto_instr != NULL) return goto_instr;
1399
1392 LOperand* left = UseRegisterAtStart(instr->left()); 1400 LOperand* left = UseRegisterAtStart(instr->left());
1393 LOperand* right = UseRegisterAtStart(instr->right()); 1401 LOperand* right = UseRegisterAtStart(instr->right());
1394 return new(zone()) LCmpObjectEqAndBranch(left, right); 1402 return new(zone()) LCmpObjectEqAndBranch(left, right);
1395 } 1403 }
1396 1404
1397 1405
1398 LInstruction* LChunkBuilder::DoCompareMap(HCompareMap* instr) { 1406 LInstruction* LChunkBuilder::DoCompareMap(HCompareMap* instr) {
1399 ASSERT(instr->value()->representation().IsTagged()); 1407 ASSERT(instr->value()->representation().IsTagged());
1400 LOperand* value = UseRegisterAtStart(instr->value()); 1408 LOperand* value = UseRegisterAtStart(instr->value());
1401 LOperand* temp = TempRegister(); 1409 LOperand* temp = TempRegister();
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
1547 } 1555 }
1548 1556
1549 1557
1550 LInstruction* LChunkBuilder::DoGlobalReceiver(HGlobalReceiver* instr) { 1558 LInstruction* LChunkBuilder::DoGlobalReceiver(HGlobalReceiver* instr) {
1551 LOperand* global_object = UseRegisterAtStart(instr->value()); 1559 LOperand* global_object = UseRegisterAtStart(instr->value());
1552 return DefineAsRegister(new(zone()) LGlobalReceiver(global_object)); 1560 return DefineAsRegister(new(zone()) LGlobalReceiver(global_object));
1553 } 1561 }
1554 1562
1555 1563
1556 LInstruction* LChunkBuilder::DoGoto(HGoto* instr) { 1564 LInstruction* LChunkBuilder::DoGoto(HGoto* instr) {
1557 return new(zone()) LGoto(instr->FirstSuccessor()->block_id()); 1565 return new(zone()) LGoto(instr->FirstSuccessor());
1558 } 1566 }
1559 1567
1560 1568
1561 LInstruction* LChunkBuilder::DoHasCachedArrayIndexAndBranch( 1569 LInstruction* LChunkBuilder::DoHasCachedArrayIndexAndBranch(
1562 HHasCachedArrayIndexAndBranch* instr) { 1570 HHasCachedArrayIndexAndBranch* instr) {
1563 ASSERT(instr->value()->representation().IsTagged()); 1571 ASSERT(instr->value()->representation().IsTagged());
1564 return new(zone()) LHasCachedArrayIndexAndBranch( 1572 return new(zone()) LHasCachedArrayIndexAndBranch(
1565 UseRegisterAtStart(instr->value()), TempRegister()); 1573 UseRegisterAtStart(instr->value()), TempRegister());
1566 } 1574 }
1567 1575
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1599 1607
1600 LInstruction* LChunkBuilder::DoInstanceSize(HInstanceSize* instr) { 1608 LInstruction* LChunkBuilder::DoInstanceSize(HInstanceSize* instr) {
1601 LOperand* object = UseRegisterAtStart(instr->object()); 1609 LOperand* object = UseRegisterAtStart(instr->object());
1602 return DefineAsRegister(new(zone()) LInstanceSize(object)); 1610 return DefineAsRegister(new(zone()) LInstanceSize(object));
1603 } 1611 }
1604 1612
1605 1613
1606 LInstruction* LChunkBuilder::DoInvokeFunction(HInvokeFunction* instr) { 1614 LInstruction* LChunkBuilder::DoInvokeFunction(HInvokeFunction* instr) {
1607 // The function is required (by MacroAssembler::InvokeFunction) to be in x1. 1615 // The function is required (by MacroAssembler::InvokeFunction) to be in x1.
1608 LOperand* function = UseFixed(instr->function(), x1); 1616 LOperand* function = UseFixed(instr->function(), x1);
1609 argument_count_ -= instr->argument_count();
1610 LInvokeFunction* result = new(zone()) LInvokeFunction(function); 1617 LInvokeFunction* result = new(zone()) LInvokeFunction(function);
1611 return MarkAsCall(DefineFixed(result, x0), instr, CANNOT_DEOPTIMIZE_EAGERLY); 1618 return MarkAsCall(DefineFixed(result, x0), instr, CANNOT_DEOPTIMIZE_EAGERLY);
1612 } 1619 }
1613 1620
1614 1621
1615 LInstruction* LChunkBuilder::DoIsConstructCallAndBranch( 1622 LInstruction* LChunkBuilder::DoIsConstructCallAndBranch(
1616 HIsConstructCallAndBranch* instr) { 1623 HIsConstructCallAndBranch* instr) {
1617 return new(zone()) LIsConstructCallAndBranch(TempRegister(), TempRegister()); 1624 return new(zone()) LIsConstructCallAndBranch(TempRegister(), TempRegister());
1618 } 1625 }
1619 1626
(...skipping 29 matching lines...) Expand all
1649 } 1656 }
1650 1657
1651 1658
1652 LInstruction* LChunkBuilder::DoLeaveInlined(HLeaveInlined* instr) { 1659 LInstruction* LChunkBuilder::DoLeaveInlined(HLeaveInlined* instr) {
1653 LInstruction* pop = NULL; 1660 LInstruction* pop = NULL;
1654 HEnvironment* env = current_block_->last_environment(); 1661 HEnvironment* env = current_block_->last_environment();
1655 1662
1656 if (env->entry()->arguments_pushed()) { 1663 if (env->entry()->arguments_pushed()) {
1657 int argument_count = env->arguments_environment()->parameter_count(); 1664 int argument_count = env->arguments_environment()->parameter_count();
1658 pop = new(zone()) LDrop(argument_count); 1665 pop = new(zone()) LDrop(argument_count);
1659 argument_count_ -= argument_count; 1666 ASSERT(instr->argument_delta() == -argument_count);
1660 } 1667 }
1661 1668
1662 HEnvironment* outer = 1669 HEnvironment* outer =
1663 current_block_->last_environment()->DiscardInlined(false); 1670 current_block_->last_environment()->DiscardInlined(false);
1664 current_block_->UpdateEnvironment(outer); 1671 current_block_->UpdateEnvironment(outer);
1665 1672
1666 return pop; 1673 return pop;
1667 } 1674 }
1668 1675
1669 1676
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
1971 ? UseFixedDouble(instr->right(), d1) 1978 ? UseFixedDouble(instr->right(), d1)
1972 : UseFixed(instr->right(), x11); 1979 : UseFixed(instr->right(), x11);
1973 LPower* result = new(zone()) LPower(left, right); 1980 LPower* result = new(zone()) LPower(left, right);
1974 return MarkAsCall(DefineFixedDouble(result, d0), 1981 return MarkAsCall(DefineFixedDouble(result, d0),
1975 instr, 1982 instr,
1976 CAN_DEOPTIMIZE_EAGERLY); 1983 CAN_DEOPTIMIZE_EAGERLY);
1977 } 1984 }
1978 1985
1979 1986
1980 LInstruction* LChunkBuilder::DoPushArgument(HPushArgument* instr) { 1987 LInstruction* LChunkBuilder::DoPushArgument(HPushArgument* instr) {
1981 ++argument_count_;
1982 LOperand* argument = UseRegister(instr->argument()); 1988 LOperand* argument = UseRegister(instr->argument());
1983 return new(zone()) LPushArgument(argument); 1989 return new(zone()) LPushArgument(argument);
1984 } 1990 }
1985 1991
1986 1992
1987 LInstruction* LChunkBuilder::DoRegExpLiteral(HRegExpLiteral* instr) { 1993 LInstruction* LChunkBuilder::DoRegExpLiteral(HRegExpLiteral* instr) {
1988 return MarkAsCall(DefineFixed(new(zone()) LRegExpLiteral, x0), instr); 1994 return MarkAsCall(DefineFixed(new(zone()) LRegExpLiteral, x0), instr);
1989 } 1995 }
1990 1996
1991 1997
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after
2544 LInstruction* LChunkBuilder::DoWrapReceiver(HWrapReceiver* instr) { 2550 LInstruction* LChunkBuilder::DoWrapReceiver(HWrapReceiver* instr) {
2545 LOperand* receiver = UseRegister(instr->receiver()); 2551 LOperand* receiver = UseRegister(instr->receiver());
2546 LOperand* function = UseRegisterAtStart(instr->function()); 2552 LOperand* function = UseRegisterAtStart(instr->function());
2547 LOperand* temp = TempRegister(); 2553 LOperand* temp = TempRegister();
2548 LWrapReceiver* result = new(zone()) LWrapReceiver(receiver, function, temp); 2554 LWrapReceiver* result = new(zone()) LWrapReceiver(receiver, function, temp);
2549 return AssignEnvironment(DefineAsRegister(result)); 2555 return AssignEnvironment(DefineAsRegister(result));
2550 } 2556 }
2551 2557
2552 2558
2553 } } // namespace v8::internal 2559 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/a64/lithium-a64.h ('k') | src/a64/lithium-codegen-a64.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698