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 937 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
948 // Compute the target address = code_obj + header_size + osr_offset | 948 // Compute the target address = code_obj + header_size + osr_offset |
949 // <entry_addr> = <code_obj> + #header_size + <osr_offset> | 949 // <entry_addr> = <code_obj> + #header_size + <osr_offset> |
950 __ add(r0, r0, Operand::SmiUntag(r1)); | 950 __ add(r0, r0, Operand::SmiUntag(r1)); |
951 __ add(lr, r0, Operand(Code::kHeaderSize - kHeapObjectTag)); | 951 __ add(lr, r0, Operand(Code::kHeaderSize - kHeapObjectTag)); |
952 | 952 |
953 // And "return" to the OSR entry point of the function. | 953 // And "return" to the OSR entry point of the function. |
954 __ Ret(); | 954 __ Ret(); |
955 } | 955 } |
956 | 956 |
957 | 957 |
| 958 void Builtins::Generate_OsrAfterStackCheck(MacroAssembler* masm) { |
| 959 // We check the stack limit as indicator that recompilation might be done. |
| 960 Label ok; |
| 961 __ LoadRoot(ip, Heap::kStackLimitRootIndex); |
| 962 __ cmp(sp, Operand(ip)); |
| 963 __ b(hs, &ok); |
| 964 { |
| 965 FrameScope scope(masm, StackFrame::INTERNAL); |
| 966 __ CallRuntime(Runtime::kStackGuard, 0); |
| 967 } |
| 968 __ Jump(masm->isolate()->builtins()->OnStackReplacement(), |
| 969 RelocInfo::CODE_TARGET); |
| 970 |
| 971 __ bind(&ok); |
| 972 __ Ret(); |
| 973 } |
| 974 |
| 975 |
958 void Builtins::Generate_FunctionCall(MacroAssembler* masm) { | 976 void Builtins::Generate_FunctionCall(MacroAssembler* masm) { |
959 // 1. Make sure we have at least one argument. | 977 // 1. Make sure we have at least one argument. |
960 // r0: actual number of arguments | 978 // r0: actual number of arguments |
961 { Label done; | 979 { Label done; |
962 __ cmp(r0, Operand::Zero()); | 980 __ cmp(r0, Operand::Zero()); |
963 __ b(ne, &done); | 981 __ b(ne, &done); |
964 __ LoadRoot(r2, Heap::kUndefinedValueRootIndex); | 982 __ LoadRoot(r2, Heap::kUndefinedValueRootIndex); |
965 __ push(r2); | 983 __ push(r2); |
966 __ add(r0, r0, Operand(1)); | 984 __ add(r0, r0, Operand(1)); |
967 __ bind(&done); | 985 __ bind(&done); |
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1436 __ bind(&dont_adapt_arguments); | 1454 __ bind(&dont_adapt_arguments); |
1437 __ Jump(r3); | 1455 __ Jump(r3); |
1438 } | 1456 } |
1439 | 1457 |
1440 | 1458 |
1441 #undef __ | 1459 #undef __ |
1442 | 1460 |
1443 } } // namespace v8::internal | 1461 } } // namespace v8::internal |
1444 | 1462 |
1445 #endif // V8_TARGET_ARCH_ARM | 1463 #endif // V8_TARGET_ARCH_ARM |
OLD | NEW |