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

Side by Side Diff: src/x64/code-stubs-x64.cc

Issue 358363003: Only create arguments-maps in the bootstrapper, remove now obsolete ValueType flag. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 5 months 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 | Annotate | Revision Log
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 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #if V8_TARGET_ARCH_X64 7 #if V8_TARGET_ARCH_X64
8 8
9 #include "src/bootstrapper.h" 9 #include "src/bootstrapper.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 904 matching lines...) Expand 10 before | Expand all | Expand 10 after
915 __ leap(r8, Operand(r8, rcx, times_pointer_size, FixedArray::kHeaderSize)); 915 __ leap(r8, Operand(r8, rcx, times_pointer_size, FixedArray::kHeaderSize));
916 916
917 // 3. Arguments object. 917 // 3. Arguments object.
918 __ addp(r8, Immediate(Heap::kSloppyArgumentsObjectSize)); 918 __ addp(r8, Immediate(Heap::kSloppyArgumentsObjectSize));
919 919
920 // Do the allocation of all three objects in one go. 920 // Do the allocation of all three objects in one go.
921 __ Allocate(r8, rax, rdx, rdi, &runtime, TAG_OBJECT); 921 __ Allocate(r8, rax, rdx, rdi, &runtime, TAG_OBJECT);
922 922
923 // rax = address of new object(s) (tagged) 923 // rax = address of new object(s) (tagged)
924 // rcx = argument count (untagged) 924 // rcx = argument count (untagged)
925 // Get the arguments boilerplate from the current native context into rdi. 925 // Get the arguments boilerplate from the current native context into rdi.
Igor Sheludko 2014/07/02 14:17:15 Outdated comment.
926 Label has_mapped_parameters, copy; 926 Label has_mapped_parameters, instantiate;
927 __ movp(rdi, Operand(rsi, Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX))); 927 __ movp(rdi, Operand(rsi, Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX)));
928 __ movp(rdi, FieldOperand(rdi, GlobalObject::kNativeContextOffset)); 928 __ movp(rdi, FieldOperand(rdi, GlobalObject::kNativeContextOffset));
929 __ testp(rbx, rbx); 929 __ testp(rbx, rbx);
930 __ j(not_zero, &has_mapped_parameters, Label::kNear); 930 __ j(not_zero, &has_mapped_parameters, Label::kNear);
931 931
932 const int kIndex = Context::SLOPPY_ARGUMENTS_BOILERPLATE_INDEX; 932 const int kIndex = Context::SLOPPY_ARGUMENTS_MAP_INDEX;
933 __ movp(rdi, Operand(rdi, Context::SlotOffset(kIndex))); 933 __ movp(rdi, Operand(rdi, Context::SlotOffset(kIndex)));
934 __ jmp(&copy, Label::kNear); 934 __ jmp(&instantiate, Label::kNear);
935 935
936 const int kAliasedIndex = Context::ALIASED_ARGUMENTS_BOILERPLATE_INDEX; 936 const int kAliasedIndex = Context::ALIASED_ARGUMENTS_MAP_INDEX;
937 __ bind(&has_mapped_parameters); 937 __ bind(&has_mapped_parameters);
938 __ movp(rdi, Operand(rdi, Context::SlotOffset(kAliasedIndex))); 938 __ movp(rdi, Operand(rdi, Context::SlotOffset(kAliasedIndex)));
939 __ bind(&copy); 939 __ bind(&instantiate);
940 940
941 // rax = address of new object (tagged) 941 // rax = address of new object (tagged)
942 // rbx = mapped parameter count (untagged) 942 // rbx = mapped parameter count (untagged)
943 // rcx = argument count (untagged) 943 // rcx = argument count (untagged)
944 // rdi = address of boilerplate object (tagged) 944 // rdi = address of boilerplate object (tagged)
Igor Sheludko 2014/07/02 14:17:14 Same here.
945 // Copy the JS object part. 945 __ movp(FieldOperand(rax, JSObject::kMapOffset), rdi);
946 for (int i = 0; i < JSObject::kHeaderSize; i += kPointerSize) { 946 __ LoadRoot(kScratchRegister, Heap::kEmptyFixedArrayRootIndex);
947 __ movp(rdx, FieldOperand(rdi, i)); 947 __ movp(FieldOperand(rax, JSObject::kPropertiesOffset), kScratchRegister);
948 __ movp(FieldOperand(rax, i), rdx); 948 __ movp(FieldOperand(rax, JSObject::kElementsOffset), kScratchRegister);
949 }
950 949
951 // Set up the callee in-object property. 950 // Set up the callee in-object property.
952 STATIC_ASSERT(Heap::kArgumentsCalleeIndex == 1); 951 STATIC_ASSERT(Heap::kArgumentsCalleeIndex == 1);
953 __ movp(rdx, args.GetArgumentOperand(0)); 952 __ movp(rdx, args.GetArgumentOperand(0));
953 __ AssertNotSmi(rdx);
954 __ movp(FieldOperand(rax, JSObject::kHeaderSize + 954 __ movp(FieldOperand(rax, JSObject::kHeaderSize +
955 Heap::kArgumentsCalleeIndex * kPointerSize), 955 Heap::kArgumentsCalleeIndex * kPointerSize),
956 rdx); 956 rdx);
957 957
958 // Use the length (smi tagged) and set that as an in-object property too. 958 // Use the length (smi tagged) and set that as an in-object property too.
959 // Note: rcx is tagged from here on. 959 // Note: rcx is tagged from here on.
960 STATIC_ASSERT(Heap::kArgumentsLengthIndex == 0); 960 STATIC_ASSERT(Heap::kArgumentsLengthIndex == 0);
961 __ Integer32ToSmi(rcx, rcx); 961 __ Integer32ToSmi(rcx, rcx);
962 __ movp(FieldOperand(rax, JSObject::kHeaderSize + 962 __ movp(FieldOperand(rax, JSObject::kHeaderSize +
963 Heap::kArgumentsLengthIndex * kPointerSize), 963 Heap::kArgumentsLengthIndex * kPointerSize),
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
1133 __ bind(&try_allocate); 1133 __ bind(&try_allocate);
1134 __ testp(rcx, rcx); 1134 __ testp(rcx, rcx);
1135 __ j(zero, &add_arguments_object, Label::kNear); 1135 __ j(zero, &add_arguments_object, Label::kNear);
1136 __ leap(rcx, Operand(rcx, times_pointer_size, FixedArray::kHeaderSize)); 1136 __ leap(rcx, Operand(rcx, times_pointer_size, FixedArray::kHeaderSize));
1137 __ bind(&add_arguments_object); 1137 __ bind(&add_arguments_object);
1138 __ addp(rcx, Immediate(Heap::kStrictArgumentsObjectSize)); 1138 __ addp(rcx, Immediate(Heap::kStrictArgumentsObjectSize));
1139 1139
1140 // Do the allocation of both objects in one go. 1140 // Do the allocation of both objects in one go.
1141 __ Allocate(rcx, rax, rdx, rbx, &runtime, TAG_OBJECT); 1141 __ Allocate(rcx, rax, rdx, rbx, &runtime, TAG_OBJECT);
1142 1142
1143 // Get the arguments boilerplate from the current native context. 1143 // Get the arguments boilerplate from the current native context.
Igor Sheludko 2014/07/02 14:17:14 Same here.
1144 __ movp(rdi, Operand(rsi, Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX))); 1144 __ movp(rdi, Operand(rsi, Context::SlotOffset(Context::GLOBAL_OBJECT_INDEX)));
1145 __ movp(rdi, FieldOperand(rdi, GlobalObject::kNativeContextOffset)); 1145 __ movp(rdi, FieldOperand(rdi, GlobalObject::kNativeContextOffset));
1146 const int offset = 1146 const int offset =
1147 Context::SlotOffset(Context::STRICT_ARGUMENTS_BOILERPLATE_INDEX); 1147 Context::SlotOffset(Context::STRICT_ARGUMENTS_MAP_INDEX);
1148 __ movp(rdi, Operand(rdi, offset)); 1148 __ movp(rdi, Operand(rdi, offset));
1149 1149
1150 // Copy the JS object part. 1150 __ movp(FieldOperand(rax, JSObject::kMapOffset), rdi);
1151 for (int i = 0; i < JSObject::kHeaderSize; i += kPointerSize) { 1151 __ LoadRoot(kScratchRegister, Heap::kEmptyFixedArrayRootIndex);
1152 __ movp(rbx, FieldOperand(rdi, i)); 1152 __ movp(FieldOperand(rax, JSObject::kPropertiesOffset), kScratchRegister);
1153 __ movp(FieldOperand(rax, i), rbx); 1153 __ movp(FieldOperand(rax, JSObject::kElementsOffset), kScratchRegister);
1154 }
1155 1154
1156 // Get the length (smi tagged) and set that as an in-object property too. 1155 // Get the length (smi tagged) and set that as an in-object property too.
1157 STATIC_ASSERT(Heap::kArgumentsLengthIndex == 0); 1156 STATIC_ASSERT(Heap::kArgumentsLengthIndex == 0);
1158 __ movp(rcx, args.GetArgumentOperand(2)); 1157 __ movp(rcx, args.GetArgumentOperand(2));
1159 __ movp(FieldOperand(rax, JSObject::kHeaderSize + 1158 __ movp(FieldOperand(rax, JSObject::kHeaderSize +
1160 Heap::kArgumentsLengthIndex * kPointerSize), 1159 Heap::kArgumentsLengthIndex * kPointerSize),
1161 rcx); 1160 rcx);
1162 1161
1163 // If there are no actual arguments, we're done. 1162 // If there are no actual arguments, we're done.
1164 Label done; 1163 Label done;
(...skipping 3776 matching lines...) Expand 10 before | Expand all | Expand 10 after
4941 return_value_operand, 4940 return_value_operand,
4942 NULL); 4941 NULL);
4943 } 4942 }
4944 4943
4945 4944
4946 #undef __ 4945 #undef __
4947 4946
4948 } } // namespace v8::internal 4947 } } // namespace v8::internal
4949 4948
4950 #endif // V8_TARGET_ARCH_X64 4949 #endif // V8_TARGET_ARCH_X64
OLDNEW
« src/objects.cc ('K') | « src/runtime.cc ('k') | test/cctest/cctest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698