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

Side by Side Diff: src/arm64/builtins-arm64.cc

Issue 1453113002: Handle StepIn for constructors through PrepareStep just like for regular calls (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add ports Created 5 years, 1 month 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
« no previous file with comments | « src/arm/builtins-arm.cc ('k') | src/assembler.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 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #if V8_TARGET_ARCH_ARM64 5 #if V8_TARGET_ARCH_ARM64
6 6
7 #include "src/arm64/frames-arm64.h" 7 #include "src/arm64/frames-arm64.h"
8 #include "src/codegen.h" 8 #include "src/codegen.h"
9 #include "src/debug/debug.h" 9 #include "src/debug/debug.h"
10 #include "src/deoptimizer.h" 10 #include "src/deoptimizer.h"
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
364 __ Push(allocation_site, argc, constructor, new_target); 364 __ Push(allocation_site, argc, constructor, new_target);
365 // sp[0]: new.target 365 // sp[0]: new.target
366 // sp[1]: Constructor function. 366 // sp[1]: Constructor function.
367 // sp[2]: number of arguments (smi-tagged) 367 // sp[2]: number of arguments (smi-tagged)
368 // sp[3]: allocation site 368 // sp[3]: allocation site
369 369
370 // Try to allocate the object without transitioning into C code. If any of 370 // Try to allocate the object without transitioning into C code. If any of
371 // the preconditions is not met, the code bails out to the runtime call. 371 // the preconditions is not met, the code bails out to the runtime call.
372 Label rt_call, allocated; 372 Label rt_call, allocated;
373 if (FLAG_inline_new) { 373 if (FLAG_inline_new) {
374 ExternalReference debug_step_in_fp =
375 ExternalReference::debug_step_in_fp_address(isolate);
376 __ Mov(x2, Operand(debug_step_in_fp));
377 __ Ldr(x2, MemOperand(x2));
378 __ Cbnz(x2, &rt_call);
379
380 // Verify that the new target is a JSFunction. 374 // Verify that the new target is a JSFunction.
381 __ JumpIfNotObjectType(new_target, x10, x11, JS_FUNCTION_TYPE, &rt_call); 375 __ JumpIfNotObjectType(new_target, x10, x11, JS_FUNCTION_TYPE, &rt_call);
382 376
383 // Load the initial map and verify that it is in fact a map. 377 // Load the initial map and verify that it is in fact a map.
384 Register init_map = x2; 378 Register init_map = x2;
385 __ Ldr(init_map, 379 __ Ldr(init_map,
386 FieldMemOperand(new_target, 380 FieldMemOperand(new_target,
387 JSFunction::kPrototypeOrInitialMapOffset)); 381 JSFunction::kPrototypeOrInitialMapOffset));
388 __ JumpIfSmi(init_map, &rt_call); 382 __ JumpIfSmi(init_map, &rt_call);
389 __ JumpIfNotObjectType(init_map, x10, x11, MAP_TYPE, &rt_call); 383 __ JumpIfNotObjectType(init_map, x10, x11, MAP_TYPE, &rt_call);
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 __ Push(x11, x10); 684 __ Push(x11, x10);
691 __ Bind(&entry); 685 __ Bind(&entry);
692 __ Cmp(x4, x2); 686 __ Cmp(x4, x2);
693 __ B(gt, &loop); 687 __ B(gt, &loop);
694 // Because we copied values 2 by 2 we may have copied one extra value. 688 // Because we copied values 2 by 2 we may have copied one extra value.
695 // Drop it if that is the case. 689 // Drop it if that is the case.
696 __ B(eq, &done_copying_arguments); 690 __ B(eq, &done_copying_arguments);
697 __ Drop(1); 691 __ Drop(1);
698 __ Bind(&done_copying_arguments); 692 __ Bind(&done_copying_arguments);
699 693
700 // Handle step in.
701 Label skip_step_in;
702 ExternalReference debug_step_in_fp =
703 ExternalReference::debug_step_in_fp_address(masm->isolate());
704 __ Mov(x2, Operand(debug_step_in_fp));
705 __ Ldr(x2, MemOperand(x2));
706 __ Cbz(x2, &skip_step_in);
707
708 __ Push(x0, x1, x1);
709 __ CallRuntime(Runtime::kHandleStepInForDerivedConstructors, 1);
710 __ Pop(x1, x0);
711
712 __ bind(&skip_step_in);
713
714 // Call the function. 694 // Call the function.
715 // x0: number of arguments 695 // x0: number of arguments
716 // x1: constructor function 696 // x1: constructor function
717 ParameterCount actual(x0); 697 ParameterCount actual(x0);
718 __ InvokeFunction(x1, actual, CALL_FUNCTION, NullCallWrapper()); 698 __ InvokeFunction(x1, actual, CALL_FUNCTION, NullCallWrapper());
719 699
720 // Restore the context from the frame. 700 // Restore the context from the frame.
721 // x0: result 701 // x0: result
722 // jssp[0]: number of arguments (smi-tagged) 702 // jssp[0]: number of arguments (smi-tagged)
723 __ Ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset)); 703 __ Ldr(cp, MemOperand(fp, StandardFrameConstants::kContextOffset));
(...skipping 1294 matching lines...) Expand 10 before | Expand all | Expand 10 after
2018 } 1998 }
2019 } 1999 }
2020 2000
2021 2001
2022 #undef __ 2002 #undef __
2023 2003
2024 } // namespace internal 2004 } // namespace internal
2025 } // namespace v8 2005 } // namespace v8
2026 2006
2027 #endif // V8_TARGET_ARCH_ARM 2007 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/builtins-arm.cc ('k') | src/assembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698