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

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

Issue 1540953004: [runtime] Rewrite Function.prototype.toString in C++. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix typos. Created 5 years 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
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 #if V8_TARGET_ARCH_ARM64 5 #if V8_TARGET_ARCH_ARM64
6 6
7 #include "src/arm64/frames-arm64.h" 7 #include "src/arm64/frames-arm64.h"
8 #include "src/codegen.h" 8 #include "src/codegen.h"
9 #include "src/debug/debug.h" 9 #include "src/debug/debug.h"
10 #include "src/deoptimizer.h" 10 #include "src/deoptimizer.h"
(...skipping 1335 matching lines...) Expand 10 before | Expand all | Expand 10 after
1346 __ CallRuntime(Runtime::kStackGuard, 0); 1346 __ CallRuntime(Runtime::kStackGuard, 0);
1347 } 1347 }
1348 __ Jump(masm->isolate()->builtins()->OnStackReplacement(), 1348 __ Jump(masm->isolate()->builtins()->OnStackReplacement(),
1349 RelocInfo::CODE_TARGET); 1349 RelocInfo::CODE_TARGET);
1350 1350
1351 __ Bind(&ok); 1351 __ Bind(&ok);
1352 __ Ret(); 1352 __ Ret();
1353 } 1353 }
1354 1354
1355 1355
1356 void Builtins::Generate_FunctionCall(MacroAssembler* masm) { 1356 // static
1357 Register argc = x0; 1357 void Builtins::Generate_FunctionPrototypeApply(MacroAssembler* masm) {
1358 Register function = x1;
1359 Register scratch1 = x10;
1360 Register scratch2 = x11;
1361
1362 ASM_LOCATION("Builtins::Generate_FunctionCall");
1363 // 1. Make sure we have at least one argument.
1364 {
1365 Label done;
1366 __ Cbnz(argc, &done);
1367 __ LoadRoot(scratch1, Heap::kUndefinedValueRootIndex);
1368 __ Push(scratch1);
1369 __ Mov(argc, 1);
1370 __ Bind(&done);
1371 }
1372
1373 // 2. Get the callable to call (passed as receiver) from the stack.
1374 __ Peek(function, Operand(argc, LSL, kXRegSizeLog2));
1375
1376 // 3. Shift arguments and return address one slot down on the stack
1377 // (overwriting the original receiver). Adjust argument count to make
1378 // the original first argument the new receiver.
1379 {
1380 Label loop;
1381 // Calculate the copy start address (destination). Copy end address is jssp.
1382 __ Add(scratch2, jssp, Operand(argc, LSL, kPointerSizeLog2));
1383 __ Sub(scratch1, scratch2, kPointerSize);
1384
1385 __ Bind(&loop);
1386 __ Ldr(x12, MemOperand(scratch1, -kPointerSize, PostIndex));
1387 __ Str(x12, MemOperand(scratch2, -kPointerSize, PostIndex));
1388 __ Cmp(scratch1, jssp);
1389 __ B(ge, &loop);
1390 // Adjust the actual number of arguments and remove the top element
1391 // (which is a copy of the last argument).
1392 __ Sub(argc, argc, 1);
1393 __ Drop(1);
1394 }
1395
1396 // 4. Call the callable.
1397 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
1398 }
1399
1400
1401 void Builtins::Generate_FunctionApply(MacroAssembler* masm) {
1402 // ----------- S t a t e ------------- 1358 // ----------- S t a t e -------------
1403 // -- r0 : argc 1359 // -- r0 : argc
1404 // -- sp[0] : argArray 1360 // -- sp[0] : argArray
1405 // -- sp[8] : thisArg 1361 // -- sp[8] : thisArg
1406 // -- sp[16] : receiver 1362 // -- sp[16] : receiver
1407 // ----------------------------------- 1363 // -----------------------------------
1408 ASM_LOCATION("Builtins::Generate_FunctionApply"); 1364 ASM_LOCATION("Builtins::Generate_FunctionPrototypeApply");
1409 1365
1410 // 1. Load receiver into x1, argArray into x0 (if present), remove all 1366 // 1. Load receiver into x1, argArray into x0 (if present), remove all
1411 // arguments from the stack (including the receiver), and push thisArg (if 1367 // arguments from the stack (including the receiver), and push thisArg (if
1412 // present) instead. 1368 // present) instead.
1413 { 1369 {
1414 Label done; 1370 Label done;
1415 __ LoadRoot(x2, Heap::kUndefinedValueRootIndex); 1371 __ LoadRoot(x2, Heap::kUndefinedValueRootIndex);
1416 __ Mov(x3, x2); 1372 __ Mov(x3, x2);
1417 __ Peek(x1, Operand(x0, LSL, kPointerSizeLog2)); // receiver 1373 __ Peek(x1, Operand(x0, LSL, kPointerSizeLog2)); // receiver
1418 __ Subs(x4, x0, 1); 1374 __ Subs(x4, x0, 1);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1460 1416
1461 // 4c. The receiver is not callable, throw an appropriate TypeError. 1417 // 4c. The receiver is not callable, throw an appropriate TypeError.
1462 __ Bind(&receiver_not_callable); 1418 __ Bind(&receiver_not_callable);
1463 { 1419 {
1464 __ Poke(x1, 0); 1420 __ Poke(x1, 0);
1465 __ TailCallRuntime(Runtime::kThrowApplyNonFunction, 1, 1); 1421 __ TailCallRuntime(Runtime::kThrowApplyNonFunction, 1, 1);
1466 } 1422 }
1467 } 1423 }
1468 1424
1469 1425
1426 // static
1427 void Builtins::Generate_FunctionPrototypeCall(MacroAssembler* masm) {
1428 Register argc = x0;
1429 Register function = x1;
1430 Register scratch1 = x10;
1431 Register scratch2 = x11;
1432
1433 ASM_LOCATION("Builtins::Generate_FunctionPrototypeCall");
1434
1435 // 1. Make sure we have at least one argument.
1436 {
1437 Label done;
1438 __ Cbnz(argc, &done);
1439 __ LoadRoot(scratch1, Heap::kUndefinedValueRootIndex);
1440 __ Push(scratch1);
1441 __ Mov(argc, 1);
1442 __ Bind(&done);
1443 }
1444
1445 // 2. Get the callable to call (passed as receiver) from the stack.
1446 __ Peek(function, Operand(argc, LSL, kXRegSizeLog2));
1447
1448 // 3. Shift arguments and return address one slot down on the stack
1449 // (overwriting the original receiver). Adjust argument count to make
1450 // the original first argument the new receiver.
1451 {
1452 Label loop;
1453 // Calculate the copy start address (destination). Copy end address is jssp.
1454 __ Add(scratch2, jssp, Operand(argc, LSL, kPointerSizeLog2));
1455 __ Sub(scratch1, scratch2, kPointerSize);
1456
1457 __ Bind(&loop);
1458 __ Ldr(x12, MemOperand(scratch1, -kPointerSize, PostIndex));
1459 __ Str(x12, MemOperand(scratch2, -kPointerSize, PostIndex));
1460 __ Cmp(scratch1, jssp);
1461 __ B(ge, &loop);
1462 // Adjust the actual number of arguments and remove the top element
1463 // (which is a copy of the last argument).
1464 __ Sub(argc, argc, 1);
1465 __ Drop(1);
1466 }
1467
1468 // 4. Call the callable.
1469 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
1470 }
1471
1472
1470 void Builtins::Generate_ReflectApply(MacroAssembler* masm) { 1473 void Builtins::Generate_ReflectApply(MacroAssembler* masm) {
1471 // ----------- S t a t e ------------- 1474 // ----------- S t a t e -------------
1472 // -- x0 : argc 1475 // -- x0 : argc
1473 // -- sp[0] : argumentsList 1476 // -- sp[0] : argumentsList
1474 // -- sp[8] : thisArgument 1477 // -- sp[8] : thisArgument
1475 // -- sp[16] : target 1478 // -- sp[16] : target
1476 // -- sp[24] : receiver 1479 // -- sp[24] : receiver
1477 // ----------------------------------- 1480 // -----------------------------------
1478 ASM_LOCATION("Builtins::Generate_ReflectApply"); 1481 ASM_LOCATION("Builtins::Generate_ReflectApply");
1479 1482
(...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after
2253 } 2256 }
2254 } 2257 }
2255 2258
2256 2259
2257 #undef __ 2260 #undef __
2258 2261
2259 } // namespace internal 2262 } // namespace internal
2260 } // namespace v8 2263 } // namespace v8
2261 2264
2262 #endif // V8_TARGET_ARCH_ARM 2265 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/builtins-arm.cc ('k') | src/bootstrapper.cc » ('j') | src/debug/mirrors.js » ('J')

Powered by Google App Engine
This is Rietveld 408576698