| OLD | NEW |
| 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 297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 308 __ B(ne, &new_object); | 308 __ B(ne, &new_object); |
| 309 | 309 |
| 310 // 5. Allocate a JSValue wrapper for the number. | 310 // 5. Allocate a JSValue wrapper for the number. |
| 311 __ AllocateJSValue(x0, x1, x2, x4, x5, &new_object); | 311 __ AllocateJSValue(x0, x1, x2, x4, x5, &new_object); |
| 312 __ B(&drop_frame_and_ret); | 312 __ B(&drop_frame_and_ret); |
| 313 | 313 |
| 314 // 6. Fallback to the runtime to create new object. | 314 // 6. Fallback to the runtime to create new object. |
| 315 __ bind(&new_object); | 315 __ bind(&new_object); |
| 316 { | 316 { |
| 317 FrameScope scope(masm, StackFrame::MANUAL); | 317 FrameScope scope(masm, StackFrame::MANUAL); |
| 318 FastNewObjectStub stub(masm->isolate()); | |
| 319 __ SmiTag(x6); | 318 __ SmiTag(x6); |
| 320 __ EnterBuiltinFrame(cp, x1, x6); | 319 __ EnterBuiltinFrame(cp, x1, x6); |
| 321 __ Push(x2); // first argument | 320 __ Push(x2); // first argument |
| 322 __ CallStub(&stub); | 321 __ Call(CodeFactory::FastNewObject(masm->isolate()).code(), |
| 322 RelocInfo::CODE_TARGET); |
| 323 __ Pop(x2); | 323 __ Pop(x2); |
| 324 __ LeaveBuiltinFrame(cp, x1, x6); | 324 __ LeaveBuiltinFrame(cp, x1, x6); |
| 325 __ SmiUntag(x6); | 325 __ SmiUntag(x6); |
| 326 } | 326 } |
| 327 __ Str(x2, FieldMemOperand(x0, JSValue::kValueOffset)); | 327 __ Str(x2, FieldMemOperand(x0, JSValue::kValueOffset)); |
| 328 | 328 |
| 329 __ bind(&drop_frame_and_ret); | 329 __ bind(&drop_frame_and_ret); |
| 330 { | 330 { |
| 331 __ Drop(x6); | 331 __ Drop(x6); |
| 332 __ Drop(1); | 332 __ Drop(1); |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 460 __ B(ne, &new_object); | 460 __ B(ne, &new_object); |
| 461 | 461 |
| 462 // 5. Allocate a JSValue wrapper for the string. | 462 // 5. Allocate a JSValue wrapper for the string. |
| 463 __ AllocateJSValue(x0, x1, x2, x4, x5, &new_object); | 463 __ AllocateJSValue(x0, x1, x2, x4, x5, &new_object); |
| 464 __ B(&drop_frame_and_ret); | 464 __ B(&drop_frame_and_ret); |
| 465 | 465 |
| 466 // 6. Fallback to the runtime to create new object. | 466 // 6. Fallback to the runtime to create new object. |
| 467 __ bind(&new_object); | 467 __ bind(&new_object); |
| 468 { | 468 { |
| 469 FrameScope scope(masm, StackFrame::MANUAL); | 469 FrameScope scope(masm, StackFrame::MANUAL); |
| 470 FastNewObjectStub stub(masm->isolate()); | |
| 471 __ SmiTag(x6); | 470 __ SmiTag(x6); |
| 472 __ EnterBuiltinFrame(cp, x1, x6); | 471 __ EnterBuiltinFrame(cp, x1, x6); |
| 473 __ Push(x2); // first argument | 472 __ Push(x2); // first argument |
| 474 __ CallStub(&stub); | 473 __ Call(CodeFactory::FastNewObject(masm->isolate()).code(), |
| 474 RelocInfo::CODE_TARGET); |
| 475 __ Pop(x2); | 475 __ Pop(x2); |
| 476 __ LeaveBuiltinFrame(cp, x1, x6); | 476 __ LeaveBuiltinFrame(cp, x1, x6); |
| 477 __ SmiUntag(x6); | 477 __ SmiUntag(x6); |
| 478 } | 478 } |
| 479 __ Str(x2, FieldMemOperand(x0, JSValue::kValueOffset)); | 479 __ Str(x2, FieldMemOperand(x0, JSValue::kValueOffset)); |
| 480 | 480 |
| 481 __ bind(&drop_frame_and_ret); | 481 __ bind(&drop_frame_and_ret); |
| 482 { | 482 { |
| 483 __ Drop(x6); | 483 __ Drop(x6); |
| 484 __ Drop(1); | 484 __ Drop(1); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 562 Register constructor = x1; | 562 Register constructor = x1; |
| 563 Register new_target = x3; | 563 Register new_target = x3; |
| 564 | 564 |
| 565 // Preserve the incoming parameters on the stack. | 565 // Preserve the incoming parameters on the stack. |
| 566 __ SmiTag(argc); | 566 __ SmiTag(argc); |
| 567 __ Push(cp, argc); | 567 __ Push(cp, argc); |
| 568 | 568 |
| 569 if (create_implicit_receiver) { | 569 if (create_implicit_receiver) { |
| 570 // Allocate the new receiver object. | 570 // Allocate the new receiver object. |
| 571 __ Push(constructor, new_target); | 571 __ Push(constructor, new_target); |
| 572 FastNewObjectStub stub(masm->isolate()); | 572 __ Call(CodeFactory::FastNewObject(masm->isolate()).code(), |
| 573 __ CallStub(&stub); | 573 RelocInfo::CODE_TARGET); |
| 574 __ Mov(x4, x0); | 574 __ Mov(x4, x0); |
| 575 __ Pop(new_target, constructor); | 575 __ Pop(new_target, constructor); |
| 576 | 576 |
| 577 // ----------- S t a t e ------------- | 577 // ----------- S t a t e ------------- |
| 578 // -- x1: constructor function | 578 // -- x1: constructor function |
| 579 // -- x3: new target | 579 // -- x3: new target |
| 580 // -- x4: newly allocated object | 580 // -- x4: newly allocated object |
| 581 // ----------------------------------- | 581 // ----------------------------------- |
| 582 | 582 |
| 583 // Reload the number of arguments from the stack. | 583 // Reload the number of arguments from the stack. |
| (...skipping 2414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2998 __ Unreachable(); | 2998 __ Unreachable(); |
| 2999 } | 2999 } |
| 3000 } | 3000 } |
| 3001 | 3001 |
| 3002 #undef __ | 3002 #undef __ |
| 3003 | 3003 |
| 3004 } // namespace internal | 3004 } // namespace internal |
| 3005 } // namespace v8 | 3005 } // namespace v8 |
| 3006 | 3006 |
| 3007 #endif // V8_TARGET_ARCH_ARM | 3007 #endif // V8_TARGET_ARCH_ARM |
| OLD | NEW |