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

Side by Side Diff: src/arm64/code-stubs-arm64.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_ARM64 7 #if V8_TARGET_ARCH_ARM64
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 2105 matching lines...) Expand 10 before | Expand all | Expand 10 after
2116 Register global_object = x10; 2116 Register global_object = x10;
2117 Register global_ctx = x10; 2117 Register global_ctx = x10;
2118 Register args_offset = x11; 2118 Register args_offset = x11;
2119 Register aliased_args_offset = x10; 2119 Register aliased_args_offset = x10;
2120 __ Ldr(global_object, GlobalObjectMemOperand()); 2120 __ Ldr(global_object, GlobalObjectMemOperand());
2121 __ Ldr(global_ctx, FieldMemOperand(global_object, 2121 __ Ldr(global_ctx, FieldMemOperand(global_object,
2122 GlobalObject::kNativeContextOffset)); 2122 GlobalObject::kNativeContextOffset));
2123 2123
2124 __ Ldr(args_offset, 2124 __ Ldr(args_offset,
2125 ContextMemOperand(global_ctx, 2125 ContextMemOperand(global_ctx,
2126 Context::SLOPPY_ARGUMENTS_BOILERPLATE_INDEX)); 2126 Context::SLOPPY_ARGUMENTS_MAP_INDEX));
2127 __ Ldr(aliased_args_offset, 2127 __ Ldr(aliased_args_offset,
2128 ContextMemOperand(global_ctx, 2128 ContextMemOperand(global_ctx,
2129 Context::ALIASED_ARGUMENTS_BOILERPLATE_INDEX)); 2129 Context::ALIASED_ARGUMENTS_MAP_INDEX));
2130 __ Cmp(mapped_params, 0); 2130 __ Cmp(mapped_params, 0);
2131 __ CmovX(args_offset, aliased_args_offset, ne); 2131 __ CmovX(args_offset, aliased_args_offset, ne);
2132 2132
2133 // Copy the JS object part. 2133 // Copy the JS object part.
2134 __ CopyFields(alloc_obj, args_offset, CPURegList(x10, x12, x13), 2134 __ Str(args_offset, FieldMemOperand(alloc_obj, JSObject::kMapOffset));
Igor Sheludko 2014/07/02 14:17:14 While you are here: args_offset and aliased_args_o
2135 JSObject::kHeaderSize / kPointerSize); 2135 __ LoadRoot(x10, Heap::kEmptyFixedArrayRootIndex);
2136 __ Str(x10, FieldMemOperand(alloc_obj, JSObject::kPropertiesOffset));
2137 __ Str(x10, FieldMemOperand(alloc_obj, JSObject::kElementsOffset));
2136 2138
2137 // Set up the callee in-object property. 2139 // Set up the callee in-object property.
2138 STATIC_ASSERT(Heap::kArgumentsCalleeIndex == 1); 2140 STATIC_ASSERT(Heap::kArgumentsCalleeIndex == 1);
2139 const int kCalleeOffset = JSObject::kHeaderSize + 2141 const int kCalleeOffset = JSObject::kHeaderSize +
2140 Heap::kArgumentsCalleeIndex * kPointerSize; 2142 Heap::kArgumentsCalleeIndex * kPointerSize;
2143 __ AssertNotSmi(function);
2141 __ Str(function, FieldMemOperand(alloc_obj, kCalleeOffset)); 2144 __ Str(function, FieldMemOperand(alloc_obj, kCalleeOffset));
2142 2145
2143 // Use the length and set that as an in-object property. 2146 // Use the length and set that as an in-object property.
2144 STATIC_ASSERT(Heap::kArgumentsLengthIndex == 0); 2147 STATIC_ASSERT(Heap::kArgumentsLengthIndex == 0);
2145 const int kLengthOffset = JSObject::kHeaderSize + 2148 const int kLengthOffset = JSObject::kHeaderSize +
2146 Heap::kArgumentsLengthIndex * kPointerSize; 2149 Heap::kArgumentsLengthIndex * kPointerSize;
2147 __ Str(arg_count_smi, FieldMemOperand(alloc_obj, kLengthOffset)); 2150 __ Str(arg_count_smi, FieldMemOperand(alloc_obj, kLengthOffset));
2148 2151
2149 // Set up the elements pointer in the allocated arguments object. 2152 // Set up the elements pointer in the allocated arguments object.
2150 // If we allocated a parameter map, "elements" will point there, otherwise 2153 // If we allocated a parameter map, "elements" will point there, otherwise
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
2337 2340
2338 // Get the arguments boilerplate from the current (native) context. 2341 // Get the arguments boilerplate from the current (native) context.
2339 Register global_object = x10; 2342 Register global_object = x10;
2340 Register global_ctx = x10; 2343 Register global_ctx = x10;
2341 Register args_offset = x4; 2344 Register args_offset = x4;
2342 __ Ldr(global_object, GlobalObjectMemOperand()); 2345 __ Ldr(global_object, GlobalObjectMemOperand());
2343 __ Ldr(global_ctx, FieldMemOperand(global_object, 2346 __ Ldr(global_ctx, FieldMemOperand(global_object,
2344 GlobalObject::kNativeContextOffset)); 2347 GlobalObject::kNativeContextOffset));
2345 __ Ldr(args_offset, 2348 __ Ldr(args_offset,
2346 ContextMemOperand(global_ctx, 2349 ContextMemOperand(global_ctx,
2347 Context::STRICT_ARGUMENTS_BOILERPLATE_INDEX)); 2350 Context::STRICT_ARGUMENTS_MAP_INDEX));
2348 2351
2349 // x0 alloc_obj pointer to allocated objects: parameter array and 2352 // x0 alloc_obj pointer to allocated objects: parameter array and
2350 // arguments object 2353 // arguments object
2351 // x1 param_count_smi number of parameters passed to function (smi) 2354 // x1 param_count_smi number of parameters passed to function (smi)
2352 // x2 params pointer to parameters 2355 // x2 params pointer to parameters
2353 // x3 function function pointer 2356 // x3 function function pointer
2354 // x4 args_offset offset to arguments boilerplate 2357 // x4 args_offset offset to arguments boilerplate
2355 // x13 param_count number of parameters passed to function 2358 // x13 param_count number of parameters passed to function
2356 2359 __ Str(args_offset, FieldMemOperand(alloc_obj, JSObject::kMapOffset));
Igor Sheludko 2014/07/02 14:17:14 Same here: strict_args_map + outdated comment abou
2357 // Copy the JS object part. 2360 __ LoadRoot(x5, Heap::kEmptyFixedArrayRootIndex);
2358 __ CopyFields(alloc_obj, args_offset, CPURegList(x5, x6, x7), 2361 __ Str(x5, FieldMemOperand(alloc_obj, JSObject::kPropertiesOffset));
2359 JSObject::kHeaderSize / kPointerSize); 2362 __ Str(x5, FieldMemOperand(alloc_obj, JSObject::kElementsOffset));
2360 2363
2361 // Set the smi-tagged length as an in-object property. 2364 // Set the smi-tagged length as an in-object property.
2362 STATIC_ASSERT(Heap::kArgumentsLengthIndex == 0); 2365 STATIC_ASSERT(Heap::kArgumentsLengthIndex == 0);
2363 const int kLengthOffset = JSObject::kHeaderSize + 2366 const int kLengthOffset = JSObject::kHeaderSize +
2364 Heap::kArgumentsLengthIndex * kPointerSize; 2367 Heap::kArgumentsLengthIndex * kPointerSize;
2365 __ Str(param_count_smi, FieldMemOperand(alloc_obj, kLengthOffset)); 2368 __ Str(param_count_smi, FieldMemOperand(alloc_obj, kLengthOffset));
2366 2369
2367 // If there are no actual arguments, we're done. 2370 // If there are no actual arguments, we're done.
2368 Label done; 2371 Label done;
2369 __ Cbz(param_count, &done); 2372 __ Cbz(param_count, &done);
(...skipping 3058 matching lines...) Expand 10 before | Expand all | Expand 10 after
5428 MemOperand(fp, 6 * kPointerSize), 5431 MemOperand(fp, 6 * kPointerSize),
5429 NULL); 5432 NULL);
5430 } 5433 }
5431 5434
5432 5435
5433 #undef __ 5436 #undef __
5434 5437
5435 } } // namespace v8::internal 5438 } } // namespace v8::internal
5436 5439
5437 #endif // V8_TARGET_ARCH_ARM64 5440 #endif // V8_TARGET_ARCH_ARM64
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698