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

Side by Side Diff: src/mips64/builtins-mips64.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 | « src/mips/builtins-mips.cc ('k') | src/objects.h » ('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_MIPS64 5 #if V8_TARGET_ARCH_MIPS64
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 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 __ Push(a0); 217 __ Push(a0);
218 __ TailCallRuntime(Runtime::kSymbolDescriptiveString, 1, 1); 218 __ TailCallRuntime(Runtime::kSymbolDescriptiveString, 1, 1);
219 } 219 }
220 } 220 }
221 221
222 222
223 void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) { 223 void Builtins::Generate_StringConstructor_ConstructStub(MacroAssembler* masm) {
224 // ----------- S t a t e ------------- 224 // ----------- S t a t e -------------
225 // -- a0 : number of arguments 225 // -- a0 : number of arguments
226 // -- a1 : constructor function 226 // -- a1 : constructor function
227 // -- a3 : original constructor
228 // -- ra : return address 227 // -- ra : return address
229 // -- sp[(argc - n - 1) * 8] : arg[n] (zero based) 228 // -- sp[(argc - n - 1) * 8] : arg[n] (zero based)
230 // -- sp[argc * 8] : receiver 229 // -- sp[argc * 8] : receiver
231 // ----------------------------------- 230 // -----------------------------------
232 231
233 // 1. Load the first argument into a0 and get rid of the rest (including the 232 // 1. Load the first argument into a0 and get rid of the rest (including the
234 // receiver). 233 // receiver).
235 { 234 {
236 Label no_arguments, done; 235 Label no_arguments, done;
237 __ Branch(USE_DELAY_SLOT, &no_arguments, eq, a0, Operand(zero_reg)); 236 __ Branch(USE_DELAY_SLOT, &no_arguments, eq, a0, Operand(zero_reg));
(...skipping 13 matching lines...) Expand all
251 { 250 {
252 Label convert, done_convert; 251 Label convert, done_convert;
253 __ JumpIfSmi(a0, &convert); 252 __ JumpIfSmi(a0, &convert);
254 __ GetObjectType(a0, a2, a2); 253 __ GetObjectType(a0, a2, a2);
255 __ And(t0, a2, Operand(kIsNotStringMask)); 254 __ And(t0, a2, Operand(kIsNotStringMask));
256 __ Branch(&done_convert, eq, t0, Operand(zero_reg)); 255 __ Branch(&done_convert, eq, t0, Operand(zero_reg));
257 __ bind(&convert); 256 __ bind(&convert);
258 { 257 {
259 FrameScope scope(masm, StackFrame::INTERNAL); 258 FrameScope scope(masm, StackFrame::INTERNAL);
260 ToStringStub stub(masm->isolate()); 259 ToStringStub stub(masm->isolate());
261 __ Push(a1, a3); 260 __ Push(a1);
262 __ CallStub(&stub); 261 __ CallStub(&stub);
263 __ Move(a0, v0); 262 __ Move(a0, v0);
264 __ Pop(a1, a3); 263 __ Pop(a1);
265 } 264 }
266 __ bind(&done_convert); 265 __ bind(&done_convert);
267 } 266 }
268 267
269 // 3. Allocate a JSValue wrapper for the string. 268 // 3. Allocate a JSValue wrapper for the string.
270 { 269 {
271 // ----------- S t a t e ------------- 270 // ----------- S t a t e -------------
272 // -- a0 : the first argument 271 // -- a0 : the first argument
273 // -- a1 : constructor function 272 // -- a1 : constructor function
274 // -- a3 : original constructor
275 // -- ra : return address 273 // -- ra : return address
276 // ----------------------------------- 274 // -----------------------------------
277 275
278 Label allocate, done_allocate, rt_call; 276 Label allocate, done_allocate;
279
280 // Fall back to runtime if the original constructor and function differ.
281 __ Branch(&rt_call, ne, a1, Operand(a3));
282
283 __ Allocate(JSValue::kSize, v0, a2, a3, &allocate, TAG_OBJECT); 277 __ Allocate(JSValue::kSize, v0, a2, a3, &allocate, TAG_OBJECT);
284 __ bind(&done_allocate); 278 __ bind(&done_allocate);
285 279
286 // Initialize the JSValue in eax. 280 // Initialize the JSValue in eax.
287 __ LoadGlobalFunctionInitialMap(a1, a2, a3); 281 __ LoadGlobalFunctionInitialMap(a1, a2, a3);
288 __ sd(a2, FieldMemOperand(v0, HeapObject::kMapOffset)); 282 __ sd(a2, FieldMemOperand(v0, HeapObject::kMapOffset));
289 __ LoadRoot(a3, Heap::kEmptyFixedArrayRootIndex); 283 __ LoadRoot(a3, Heap::kEmptyFixedArrayRootIndex);
290 __ sd(a3, FieldMemOperand(v0, JSObject::kPropertiesOffset)); 284 __ sd(a3, FieldMemOperand(v0, JSObject::kPropertiesOffset));
291 __ sd(a3, FieldMemOperand(v0, JSObject::kElementsOffset)); 285 __ sd(a3, FieldMemOperand(v0, JSObject::kElementsOffset));
292 __ sd(a0, FieldMemOperand(v0, JSValue::kValueOffset)); 286 __ sd(a0, FieldMemOperand(v0, JSValue::kValueOffset));
293 STATIC_ASSERT(JSValue::kSize == 4 * kPointerSize); 287 STATIC_ASSERT(JSValue::kSize == 4 * kPointerSize);
294 __ Ret(); 288 __ Ret();
295 289
296 // Fallback to the runtime to allocate in new space. 290 // Fallback to the runtime to allocate in new space.
297 __ bind(&allocate); 291 __ bind(&allocate);
298 { 292 {
299 FrameScope scope(masm, StackFrame::INTERNAL); 293 FrameScope scope(masm, StackFrame::INTERNAL);
300 __ Move(a2, Smi::FromInt(JSValue::kSize)); 294 __ Move(a2, Smi::FromInt(JSValue::kSize));
301 __ Push(a0, a1, a2); 295 __ Push(a0, a1, a2);
302 __ CallRuntime(Runtime::kAllocateInNewSpace, 1); 296 __ CallRuntime(Runtime::kAllocateInNewSpace, 1);
303 __ Pop(a0, a1); 297 __ Pop(a0, a1);
304 } 298 }
305 __ jmp(&done_allocate); 299 __ jmp(&done_allocate);
306
307 // Fallback to the runtime to create new object.
308 __ bind(&rt_call);
309 {
310 FrameScope scope(masm, StackFrame::INTERNAL);
311 __ Push(a0, a1, a1, a3); // constructor function, original constructor
312 __ CallRuntime(Runtime::kNewObject, 2);
313 __ Pop(a0, a1);
314 }
315 __ sd(a0, FieldMemOperand(v0, JSValue::kValueOffset));
316 __ Ret();
317 } 300 }
318 } 301 }
319 302
320 303
321 static void CallRuntimePassFunction( 304 static void CallRuntimePassFunction(
322 MacroAssembler* masm, Runtime::FunctionId function_id) { 305 MacroAssembler* masm, Runtime::FunctionId function_id) {
323 FrameScope scope(masm, StackFrame::INTERNAL); 306 FrameScope scope(masm, StackFrame::INTERNAL);
324 // Push a copy of the function onto the stack. 307 // Push a copy of the function onto the stack.
325 // Push call kind information and function as parameter to the runtime call. 308 // Push call kind information and function as parameter to the runtime call.
326 __ Push(a1, a1); 309 __ Push(a1, a1);
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
518 // Reload the original constructor and fall-through. 501 // Reload the original constructor and fall-through.
519 __ bind(&rt_call_reload_new_target); 502 __ bind(&rt_call_reload_new_target);
520 __ ld(a3, MemOperand(sp, 0 * kPointerSize)); 503 __ ld(a3, MemOperand(sp, 0 * kPointerSize));
521 } 504 }
522 505
523 // Allocate the new receiver object using the runtime call. 506 // Allocate the new receiver object using the runtime call.
524 // a1: constructor function 507 // a1: constructor function
525 // a3: original constructor 508 // a3: original constructor
526 __ bind(&rt_call); 509 __ bind(&rt_call);
527 510
528 __ Push(a1, a3); // constructor function, original constructor 511 __ Push(a1, a3); // arguments 2-3 / 1-2
529 __ CallRuntime(Runtime::kNewObject, 2); 512 __ CallRuntime(Runtime::kNewObject, 2);
530 __ mov(t0, v0); 513 __ mov(t0, v0);
531 514
532 // Receiver for constructor call allocated. 515 // Receiver for constructor call allocated.
533 // t0: JSObject 516 // t0: JSObject
534 __ bind(&allocated); 517 __ bind(&allocated);
535 518
536 // Restore the parameters. 519 // Restore the parameters.
537 __ Pop(a3); // new.target 520 __ Pop(a3); // new.target
538 __ Pop(a1); 521 __ Pop(a1);
(...skipping 1400 matching lines...) Expand 10 before | Expand all | Expand 10 after
1939 } 1922 }
1940 } 1923 }
1941 1924
1942 1925
1943 #undef __ 1926 #undef __
1944 1927
1945 } // namespace internal 1928 } // namespace internal
1946 } // namespace v8 1929 } // namespace v8
1947 1930
1948 #endif // V8_TARGET_ARCH_MIPS64 1931 #endif // V8_TARGET_ARCH_MIPS64
OLDNEW
« no previous file with comments | « src/mips/builtins-mips.cc ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698