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

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

Issue 1416943005: Revert of [es6] Better support for built-ins subclassing. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: 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 | « no previous file | src/arm64/builtins-arm64.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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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_ARM 5 #if V8_TARGET_ARCH_ARM
6 6
7 #include "src/codegen.h" 7 #include "src/codegen.h"
8 #include "src/debug/debug.h" 8 #include "src/debug/debug.h"
9 #include "src/deoptimizer.h" 9 #include "src/deoptimizer.h"
10 #include "src/full-codegen/full-codegen.h" 10 #include "src/full-codegen/full-codegen.h"
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 __ TailCallRuntime(Runtime::kSymbolDescriptiveString, 1, 1); 206 __ TailCallRuntime(Runtime::kSymbolDescriptiveString, 1, 1);
207 } 207 }
208 } 208 }
209 209
210 210
211 // static 211 // static
212 void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) { 212 void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) {
213 // ----------- S t a t e ------------- 213 // ----------- S t a t e -------------
214 // -- r0 : number of arguments 214 // -- r0 : number of arguments
215 // -- r1 : constructor function 215 // -- r1 : constructor function
216 // -- r3 : original constructor
217 // -- lr : return address 216 // -- lr : return address
218 // -- sp[(argc - n - 1) * 4] : arg[n] (zero based) 217 // -- sp[(argc - n - 1) * 4] : arg[n] (zero based)
219 // -- sp[argc * 4] : receiver 218 // -- sp[argc * 4] : receiver
220 // ----------------------------------- 219 // -----------------------------------
221 220
222 // 1. Load the first argument into r2 and get rid of the rest (including the 221 // 1. Load the first argument into r0 and get rid of the rest (including the
223 // receiver). 222 // receiver).
224 { 223 {
225 Label no_arguments, done; 224 Label no_arguments, done;
226 __ sub(r0, r0, Operand(1), SetCC); 225 __ sub(r0, r0, Operand(1), SetCC);
227 __ b(lo, &no_arguments); 226 __ b(lo, &no_arguments);
228 __ ldr(r2, MemOperand(sp, r0, LSL, kPointerSizeLog2, PreIndex)); 227 __ ldr(r0, MemOperand(sp, r0, LSL, kPointerSizeLog2, PreIndex));
229 __ Drop(2); 228 __ Drop(2);
230 __ b(&done); 229 __ b(&done);
231 __ bind(&no_arguments); 230 __ bind(&no_arguments);
232 __ LoadRoot(r2, Heap::kempty_stringRootIndex); 231 __ LoadRoot(r0, Heap::kempty_stringRootIndex);
233 __ Drop(1); 232 __ Drop(1);
234 __ bind(&done); 233 __ bind(&done);
235 } 234 }
236 235
237 // 2. Make sure r2 is a string. 236 // 2. Make sure r0 is a string.
238 { 237 {
239 Label convert, done_convert; 238 Label convert, done_convert;
240 __ JumpIfSmi(r2, &convert); 239 __ JumpIfSmi(r0, &convert);
241 __ CompareObjectType(r2, r4, r4, FIRST_NONSTRING_TYPE); 240 __ CompareObjectType(r0, r2, r2, FIRST_NONSTRING_TYPE);
242 __ b(lo, &done_convert); 241 __ b(lo, &done_convert);
243 __ bind(&convert); 242 __ bind(&convert);
244 { 243 {
245 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); 244 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
246 ToStringStub stub(masm->isolate()); 245 ToStringStub stub(masm->isolate());
247 __ Push(r1, r3); 246 __ Push(r1);
248 __ Move(r0, r2);
249 __ CallStub(&stub); 247 __ CallStub(&stub);
250 __ Move(r2, r0); 248 __ Pop(r1);
251 __ Pop(r1, r3);
252 } 249 }
253 __ bind(&done_convert); 250 __ bind(&done_convert);
254 } 251 }
255 252
256 // 3. Allocate a JSValue wrapper for the string. 253 // 3. Allocate a JSValue wrapper for the string.
257 { 254 {
258 // ----------- S t a t e ------------- 255 // ----------- S t a t e -------------
259 // -- r2 : the first argument 256 // -- r0 : the first argument
260 // -- r1 : constructor function 257 // -- r1 : constructor function
261 // -- r3 : original constructor
262 // -- lr : return address 258 // -- lr : return address
263 // ----------------------------------- 259 // -----------------------------------
264 260
265 Label allocate, done_allocate, rt_call; 261 Label allocate, done_allocate;
266 262 __ Move(r2, r0);
267 // Fall back to runtime if the original constructor and function differ.
268 __ cmp(r1, r3);
269 __ b(ne, &rt_call);
270
271 __ Allocate(JSValue::kSize, r0, r3, r4, &allocate, TAG_OBJECT); 263 __ Allocate(JSValue::kSize, r0, r3, r4, &allocate, TAG_OBJECT);
272 __ bind(&done_allocate); 264 __ bind(&done_allocate);
273 265
274 // Initialize the JSValue in r0. 266 // Initialize the JSValue in r0.
275 __ LoadGlobalFunctionInitialMap(r1, r3, r4); 267 __ LoadGlobalFunctionInitialMap(r1, r3, r4);
276 __ str(r3, FieldMemOperand(r0, HeapObject::kMapOffset)); 268 __ str(r3, FieldMemOperand(r0, HeapObject::kMapOffset));
277 __ LoadRoot(r3, Heap::kEmptyFixedArrayRootIndex); 269 __ LoadRoot(r3, Heap::kEmptyFixedArrayRootIndex);
278 __ str(r3, FieldMemOperand(r0, JSObject::kPropertiesOffset)); 270 __ str(r3, FieldMemOperand(r0, JSObject::kPropertiesOffset));
279 __ str(r3, FieldMemOperand(r0, JSObject::kElementsOffset)); 271 __ str(r3, FieldMemOperand(r0, JSObject::kElementsOffset));
280 __ str(r2, FieldMemOperand(r0, JSValue::kValueOffset)); 272 __ str(r2, FieldMemOperand(r0, JSValue::kValueOffset));
281 STATIC_ASSERT(JSValue::kSize == 4 * kPointerSize); 273 STATIC_ASSERT(JSValue::kSize == 4 * kPointerSize);
282 __ Ret(); 274 __ Ret();
283 275
284 // Fallback to the runtime to allocate in new space. 276 // Fallback to the runtime to allocate in new space.
285 __ bind(&allocate); 277 __ bind(&allocate);
286 { 278 {
287 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); 279 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
288 __ Move(r3, Smi::FromInt(JSValue::kSize)); 280 __ Move(r3, Smi::FromInt(JSValue::kSize));
289 __ Push(r1, r2, r3); 281 __ Push(r1, r2, r3);
290 __ CallRuntime(Runtime::kAllocateInNewSpace, 1); 282 __ CallRuntime(Runtime::kAllocateInNewSpace, 1);
291 __ Pop(r1, r2); 283 __ Pop(r1, r2);
292 } 284 }
293 __ b(&done_allocate); 285 __ b(&done_allocate);
294
295 // Fallback to the runtime to create new object.
296 __ bind(&rt_call);
297 {
298 FrameScope scope(masm, StackFrame::INTERNAL);
299 __ Push(r1, r2);
300 __ Push(r1, r3); // constructor function, original constructor
301 __ CallRuntime(Runtime::kNewObject, 2);
302 __ Pop(r1, r2);
303 }
304 __ str(r2, FieldMemOperand(r0, JSValue::kValueOffset));
305 __ Ret();
306 } 286 }
307 } 287 }
308 288
309 289
310 static void CallRuntimePassFunction( 290 static void CallRuntimePassFunction(
311 MacroAssembler* masm, Runtime::FunctionId function_id) { 291 MacroAssembler* masm, Runtime::FunctionId function_id) {
312 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); 292 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
313 // Push a copy of the function onto the stack. 293 // Push a copy of the function onto the stack.
314 __ push(r1); 294 __ push(r1);
315 // Push function as parameter to the runtime call. 295 // Push function as parameter to the runtime call.
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 // Reload the original constructor and fall-through. 493 // Reload the original constructor and fall-through.
514 __ bind(&rt_call_reload_new_target); 494 __ bind(&rt_call_reload_new_target);
515 __ ldr(r3, MemOperand(sp, 0 * kPointerSize)); 495 __ ldr(r3, MemOperand(sp, 0 * kPointerSize));
516 } 496 }
517 497
518 // Allocate the new receiver object using the runtime call. 498 // Allocate the new receiver object using the runtime call.
519 // r1: constructor function 499 // r1: constructor function
520 // r3: original constructor 500 // r3: original constructor
521 __ bind(&rt_call); 501 __ bind(&rt_call);
522 502
523 __ push(r1); // constructor function 503 __ push(r1); // argument 2/1: constructor function
524 __ push(r3); // original constructor 504 __ push(r3); // argument 3/2: original constructor
525 __ CallRuntime(Runtime::kNewObject, 2); 505 __ CallRuntime(Runtime::kNewObject, 2);
526 __ mov(r4, r0); 506 __ mov(r4, r0);
527 507
528 // Receiver for constructor call allocated. 508 // Receiver for constructor call allocated.
529 // r4: JSObject 509 // r4: JSObject
530 __ bind(&allocated); 510 __ bind(&allocated);
531 511
532 // Restore the parameters. 512 // Restore the parameters.
533 __ pop(r3); 513 __ pop(r3);
534 __ pop(r1); 514 __ pop(r1);
(...skipping 1383 matching lines...) Expand 10 before | Expand all | Expand 10 after
1918 } 1898 }
1919 } 1899 }
1920 1900
1921 1901
1922 #undef __ 1902 #undef __
1923 1903
1924 } // namespace internal 1904 } // namespace internal
1925 } // namespace v8 1905 } // namespace v8
1926 1906
1927 #endif // V8_TARGET_ARCH_ARM 1907 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « no previous file | src/arm64/builtins-arm64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698