| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_MIPS. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_MIPS. |
| 6 #if defined(TARGET_ARCH_MIPS) | 6 #if defined(TARGET_ARCH_MIPS) |
| 7 | 7 |
| 8 #include "vm/flow_graph_compiler.h" | 8 #include "vm/flow_graph_compiler.h" |
| 9 | 9 |
| 10 #include "lib/error.h" | 10 #include "lib/error.h" |
| (...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 778 // S4 : arguments descriptor array. | 778 // S4 : arguments descriptor array. |
| 779 __ BranchLink(&StubCode::CallNoSuchMethodFunctionLabel()); | 779 __ BranchLink(&StubCode::CallNoSuchMethodFunctionLabel()); |
| 780 // Emit descriptors in order to provide correct postion in stacktrace. | 780 // Emit descriptors in order to provide correct postion in stacktrace. |
| 781 AddCurrentDescriptor(PcDescriptors::kOther, -1, function.token_pos()); | 781 AddCurrentDescriptor(PcDescriptors::kOther, -1, function.token_pos()); |
| 782 if (is_optimizing()) { | 782 if (is_optimizing()) { |
| 783 stackmap_table_builder_->AddEntry(assembler()->CodeSize(), | 783 stackmap_table_builder_->AddEntry(assembler()->CodeSize(), |
| 784 empty_stack_bitmap, | 784 empty_stack_bitmap, |
| 785 0); // No registers. | 785 0); // No registers. |
| 786 } | 786 } |
| 787 // The noSuchMethod call may return. | 787 // The noSuchMethod call may return. |
| 788 __ LeaveDartFrame(); | 788 __ LeaveDartFrameAndReturn(); |
| 789 __ Ret(); | |
| 790 | 789 |
| 791 __ Bind(&all_arguments_processed); | 790 __ Bind(&all_arguments_processed); |
| 792 // Nullify originally passed arguments only after they have been copied and | 791 // Nullify originally passed arguments only after they have been copied and |
| 793 // checked, otherwise noSuchMethod would not see their original values. | 792 // checked, otherwise noSuchMethod would not see their original values. |
| 794 // This step can be skipped in case we decide that formal parameters are | 793 // This step can be skipped in case we decide that formal parameters are |
| 795 // implicitly final, since garbage collecting the unmodified value is not | 794 // implicitly final, since garbage collecting the unmodified value is not |
| 796 // an issue anymore. | 795 // an issue anymore. |
| 797 | 796 |
| 798 __ LoadImmediate(T0, reinterpret_cast<intptr_t>(Object::null())); | 797 __ LoadImmediate(T0, reinterpret_cast<intptr_t>(Object::null())); |
| 799 | 798 |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 992 // S4 : arguments descriptor array. | 991 // S4 : arguments descriptor array. |
| 993 __ BranchLink(&StubCode::CallNoSuchMethodFunctionLabel()); | 992 __ BranchLink(&StubCode::CallNoSuchMethodFunctionLabel()); |
| 994 // Emit descriptors in order to provide correct postion in stacktrace. | 993 // Emit descriptors in order to provide correct postion in stacktrace. |
| 995 AddCurrentDescriptor(PcDescriptors::kOther, -1, function.token_pos()); | 994 AddCurrentDescriptor(PcDescriptors::kOther, -1, function.token_pos()); |
| 996 if (is_optimizing()) { | 995 if (is_optimizing()) { |
| 997 stackmap_table_builder_->AddEntry(assembler()->CodeSize(), | 996 stackmap_table_builder_->AddEntry(assembler()->CodeSize(), |
| 998 empty_stack_bitmap, | 997 empty_stack_bitmap, |
| 999 0); // No registers. | 998 0); // No registers. |
| 1000 } | 999 } |
| 1001 // The noSuchMethod call may return. | 1000 // The noSuchMethod call may return. |
| 1002 __ LeaveDartFrame(); | 1001 __ LeaveDartFrameAndReturn(); |
| 1003 __ Ret(); | |
| 1004 } else { | 1002 } else { |
| 1005 __ Stop("Wrong number of arguments"); | 1003 __ Stop("Wrong number of arguments"); |
| 1006 } | 1004 } |
| 1007 __ Bind(&correct_num_arguments); | 1005 __ Bind(&correct_num_arguments); |
| 1008 } | 1006 } |
| 1009 // The arguments descriptor is never saved in the absence of optional | 1007 // The arguments descriptor is never saved in the absence of optional |
| 1010 // parameters, since any argument definition test would always yield true. | 1008 // parameters, since any argument definition test would always yield true. |
| 1011 ASSERT(saved_args_desc_var == NULL); | 1009 ASSERT(saved_args_desc_var == NULL); |
| 1012 } else { | 1010 } else { |
| 1013 if (saved_args_desc_var != NULL) { | 1011 if (saved_args_desc_var != NULL) { |
| (...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1570 __ AddImmediate(SP, kDoubleSize); | 1568 __ AddImmediate(SP, kDoubleSize); |
| 1571 } | 1569 } |
| 1572 | 1570 |
| 1573 | 1571 |
| 1574 #undef __ | 1572 #undef __ |
| 1575 | 1573 |
| 1576 | 1574 |
| 1577 } // namespace dart | 1575 } // namespace dart |
| 1578 | 1576 |
| 1579 #endif // defined TARGET_ARCH_MIPS | 1577 #endif // defined TARGET_ARCH_MIPS |
| OLD | NEW |