| OLD | NEW | 
|---|
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 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 #include "src/builtins/builtins-utils.h" | 5 #include "src/builtins/builtins-utils.h" | 
| 6 #include "src/builtins/builtins.h" | 6 #include "src/builtins/builtins.h" | 
| 7 #include "src/code-factory.h" | 7 #include "src/code-factory.h" | 
| 8 #include "src/code-stub-assembler.h" | 8 #include "src/code-stub-assembler.h" | 
| 9 #include "src/compiler.h" | 9 #include "src/compiler.h" | 
| 10 #include "src/string-builder.h" | 10 #include "src/string-builder.h" | 
| (...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 360       assembler.LoadMapPrototype(bound_function_map.value()); | 360       assembler.LoadMapPrototype(bound_function_map.value()); | 
| 361   assembler.GotoIf(assembler.WordNotEqual(prototype, expected_prototype), | 361   assembler.GotoIf(assembler.WordNotEqual(prototype, expected_prototype), | 
| 362                    &slow); | 362                    &slow); | 
| 363 | 363 | 
| 364   // Allocate the arguments array. | 364   // Allocate the arguments array. | 
| 365   assembler.Comment("Allocate the arguments array"); | 365   assembler.Comment("Allocate the arguments array"); | 
| 366   Variable argument_array(&assembler, MachineRepresentation::kTagged); | 366   Variable argument_array(&assembler, MachineRepresentation::kTagged); | 
| 367   Label empty_arguments(&assembler); | 367   Label empty_arguments(&assembler); | 
| 368   Label arguments_done(&assembler, &argument_array); | 368   Label arguments_done(&assembler, &argument_array); | 
| 369   assembler.GotoIf( | 369   assembler.GotoIf( | 
| 370       assembler.UintPtrLessThanOrEqual(argc, assembler.IntPtrConstant(1)), | 370       assembler.Uint32LessThanOrEqual(argc, assembler.Int32Constant(1)), | 
| 371       &empty_arguments); | 371       &empty_arguments); | 
| 372   Node* elements_length = | 372   Node* elements_length = assembler.ChangeUint32ToWord( | 
| 373       assembler.IntPtrSub(argc, assembler.IntPtrConstant(1)); | 373       assembler.Int32Sub(argc, assembler.Int32Constant(1))); | 
| 374   Node* elements = assembler.AllocateFixedArray( | 374   Node* elements = assembler.AllocateFixedArray( | 
| 375       FAST_ELEMENTS, elements_length, CodeStubAssembler::INTPTR_PARAMETERS); | 375       FAST_ELEMENTS, elements_length, CodeStubAssembler::INTPTR_PARAMETERS); | 
| 376   Variable index(&assembler, MachineType::PointerRepresentation()); | 376   Variable index(&assembler, MachineType::PointerRepresentation()); | 
| 377   index.Bind(assembler.IntPtrConstant(0)); | 377   index.Bind(assembler.IntPtrConstant(0)); | 
| 378   CodeStubAssembler::VariableList foreach_vars({&index}, assembler.zone()); | 378   CodeStubAssembler::VariableList foreach_vars({&index}, assembler.zone()); | 
| 379   args.ForEach(foreach_vars, | 379   args.ForEach(foreach_vars, | 
| 380                [&assembler, elements, &index](compiler::Node* arg) { | 380                [&assembler, elements, &index](compiler::Node* arg) { | 
| 381                  assembler.StoreFixedArrayElement( | 381                  assembler.StoreFixedArrayElement( | 
| 382                      elements, index.value(), arg, UPDATE_WRITE_BARRIER, 0, | 382                      elements, index.value(), arg, UPDATE_WRITE_BARRIER, 0, | 
| 383                      CodeStubAssembler::INTPTR_PARAMETERS); | 383                      CodeStubAssembler::INTPTR_PARAMETERS); | 
| 384                  assembler.Increment(index); | 384                  assembler.Increment(index); | 
| 385                }, | 385                }, | 
| 386                assembler.IntPtrConstant(1)); | 386                assembler.IntPtrConstant(1)); | 
| 387   argument_array.Bind(elements); | 387   argument_array.Bind(elements); | 
| 388   assembler.Goto(&arguments_done); | 388   assembler.Goto(&arguments_done); | 
| 389 | 389 | 
| 390   assembler.Bind(&empty_arguments); | 390   assembler.Bind(&empty_arguments); | 
| 391   argument_array.Bind(assembler.EmptyFixedArrayConstant()); | 391   argument_array.Bind(assembler.EmptyFixedArrayConstant()); | 
| 392   assembler.Goto(&arguments_done); | 392   assembler.Goto(&arguments_done); | 
| 393 | 393 | 
| 394   assembler.Bind(&arguments_done); | 394   assembler.Bind(&arguments_done); | 
| 395 | 395 | 
| 396   // Determine bound receiver. | 396   // Determine bound receiver. | 
| 397   assembler.Comment("Determine bound receiver"); | 397   assembler.Comment("Determine bound receiver"); | 
| 398   Variable bound_receiver(&assembler, MachineRepresentation::kTagged); | 398   Variable bound_receiver(&assembler, MachineRepresentation::kTagged); | 
| 399   Label has_receiver(&assembler); | 399   Label has_receiver(&assembler); | 
| 400   Label receiver_done(&assembler, &bound_receiver); | 400   Label receiver_done(&assembler, &bound_receiver); | 
| 401   assembler.GotoIf(assembler.WordNotEqual(argc, assembler.IntPtrConstant(0)), | 401   assembler.GotoIf(assembler.Word32NotEqual(argc, assembler.Int32Constant(0)), | 
| 402                    &has_receiver); | 402                    &has_receiver); | 
| 403   bound_receiver.Bind(assembler.UndefinedConstant()); | 403   bound_receiver.Bind(assembler.UndefinedConstant()); | 
| 404   assembler.Goto(&receiver_done); | 404   assembler.Goto(&receiver_done); | 
| 405 | 405 | 
| 406   assembler.Bind(&has_receiver); | 406   assembler.Bind(&has_receiver); | 
| 407   bound_receiver.Bind(args.AtIndex(0)); | 407   bound_receiver.Bind(args.AtIndex(0)); | 
| 408   assembler.Goto(&receiver_done); | 408   assembler.Goto(&receiver_done); | 
| 409 | 409 | 
| 410   assembler.Bind(&receiver_done); | 410   assembler.Bind(&receiver_done); | 
| 411 | 411 | 
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 471 | 471 | 
| 472   Node* f = assembler.Parameter(0); | 472   Node* f = assembler.Parameter(0); | 
| 473   Node* v = assembler.Parameter(1); | 473   Node* v = assembler.Parameter(1); | 
| 474   Node* context = assembler.Parameter(4); | 474   Node* context = assembler.Parameter(4); | 
| 475   Node* result = assembler.OrdinaryHasInstance(context, f, v); | 475   Node* result = assembler.OrdinaryHasInstance(context, f, v); | 
| 476   assembler.Return(result); | 476   assembler.Return(result); | 
| 477 } | 477 } | 
| 478 | 478 | 
| 479 }  // namespace internal | 479 }  // namespace internal | 
| 480 }  // namespace v8 | 480 }  // namespace v8 | 
| OLD | NEW | 
|---|