OLD | NEW |
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 794 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
805 | 805 |
806 | 806 |
807 LInstruction* LChunkBuilder::DoBoundsCheckBaseIndexInformation( | 807 LInstruction* LChunkBuilder::DoBoundsCheckBaseIndexInformation( |
808 HBoundsCheckBaseIndexInformation* instr) { | 808 HBoundsCheckBaseIndexInformation* instr) { |
809 UNREACHABLE(); | 809 UNREACHABLE(); |
810 return NULL; | 810 return NULL; |
811 } | 811 } |
812 | 812 |
813 | 813 |
814 LInstruction* LChunkBuilder::DoAccessArgumentsAt(HAccessArgumentsAt* instr) { | 814 LInstruction* LChunkBuilder::DoAccessArgumentsAt(HAccessArgumentsAt* instr) { |
815 // TODO(all): Try to improve this, like ARM r17925. | |
816 info()->MarkAsRequiresFrame(); | 815 info()->MarkAsRequiresFrame(); |
817 LOperand* args = NULL; | 816 LOperand* args = NULL; |
818 LOperand* length = NULL; | 817 LOperand* length = NULL; |
819 LOperand* index = NULL; | 818 LOperand* index = NULL; |
820 LOperand* temp = NULL; | |
821 | 819 |
822 if (instr->length()->IsConstant() && instr->index()->IsConstant()) { | 820 if (instr->length()->IsConstant() && instr->index()->IsConstant()) { |
823 args = UseRegisterAtStart(instr->arguments()); | 821 args = UseRegisterAtStart(instr->arguments()); |
824 length = UseConstant(instr->length()); | 822 length = UseConstant(instr->length()); |
825 index = UseConstant(instr->index()); | 823 index = UseConstant(instr->index()); |
826 } else { | 824 } else { |
827 args = UseRegister(instr->arguments()); | 825 args = UseRegister(instr->arguments()); |
828 length = UseRegisterAtStart(instr->length()); | 826 length = UseRegisterAtStart(instr->length()); |
829 index = UseRegisterOrConstantAtStart(instr->index()); | 827 index = UseRegisterOrConstantAtStart(instr->index()); |
830 temp = TempRegister(); | |
831 } | 828 } |
832 | 829 |
833 return DefineAsRegister( | 830 return DefineAsRegister(new(zone()) LAccessArgumentsAt(args, length, index)); |
834 new(zone()) LAccessArgumentsAt(args, length, index, temp)); | |
835 } | 831 } |
836 | 832 |
837 | 833 |
838 LInstruction* LChunkBuilder::DoAdd(HAdd* instr) { | 834 LInstruction* LChunkBuilder::DoAdd(HAdd* instr) { |
839 if (instr->representation().IsSmiOrInteger32()) { | 835 if (instr->representation().IsSmiOrInteger32()) { |
840 ASSERT(instr->left()->representation().Equals(instr->representation())); | 836 ASSERT(instr->left()->representation().Equals(instr->representation())); |
841 ASSERT(instr->right()->representation().Equals(instr->representation())); | 837 ASSERT(instr->right()->representation().Equals(instr->representation())); |
842 LOperand* left = UseRegisterAtStart(instr->BetterLeftOperand()); | 838 LOperand* left = UseRegisterAtStart(instr->BetterLeftOperand()); |
843 LOperand* right = | 839 LOperand* right = |
844 UseRegisterOrConstantAtStart(instr->BetterRightOperand()); | 840 UseRegisterOrConstantAtStart(instr->BetterRightOperand()); |
(...skipping 1601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2446 | 2442 |
2447 LInstruction* LChunkBuilder::DoWrapReceiver(HWrapReceiver* instr) { | 2443 LInstruction* LChunkBuilder::DoWrapReceiver(HWrapReceiver* instr) { |
2448 LOperand* receiver = UseRegister(instr->receiver()); | 2444 LOperand* receiver = UseRegister(instr->receiver()); |
2449 LOperand* function = UseRegister(instr->function()); | 2445 LOperand* function = UseRegister(instr->function()); |
2450 LWrapReceiver* result = new(zone()) LWrapReceiver(receiver, function); | 2446 LWrapReceiver* result = new(zone()) LWrapReceiver(receiver, function); |
2451 return AssignEnvironment(DefineAsRegister(result)); | 2447 return AssignEnvironment(DefineAsRegister(result)); |
2452 } | 2448 } |
2453 | 2449 |
2454 | 2450 |
2455 } } // namespace v8::internal | 2451 } } // namespace v8::internal |
OLD | NEW |