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

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

Issue 1374423003: Version 4.7.80.4 (cherry-pick) (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@4.7
Patch Set: Created 5 years, 2 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
« no previous file with comments | « src/full-codegen/ppc/full-codegen-ppc.cc ('k') | src/ppc/code-stubs-ppc.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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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_PPC 5 #if V8_TARGET_ARCH_PPC
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 678 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 __ add(sp, sp, r4); 689 __ add(sp, sp, r4);
690 __ addi(sp, sp, Operand(kPointerSize)); 690 __ addi(sp, sp, Operand(kPointerSize));
691 __ blr(); 691 __ blr();
692 } 692 }
693 693
694 694
695 enum IsTagged { kArgcIsSmiTagged, kArgcIsUntaggedInt }; 695 enum IsTagged { kArgcIsSmiTagged, kArgcIsUntaggedInt };
696 696
697 697
698 // Clobbers r5; preserves all other registers. 698 // Clobbers r5; preserves all other registers.
699 static void Generate_CheckStackOverflow(MacroAssembler* masm, 699 static void Generate_CheckStackOverflow(MacroAssembler* masm, Register argc,
700 const int calleeOffset, Register argc,
701 IsTagged argc_is_tagged) { 700 IsTagged argc_is_tagged) {
702 // Check the stack for overflow. We are not trying to catch 701 // Check the stack for overflow. We are not trying to catch
703 // interruptions (e.g. debug break and preemption) here, so the "real stack 702 // interruptions (e.g. debug break and preemption) here, so the "real stack
704 // limit" is checked. 703 // limit" is checked.
705 Label okay; 704 Label okay;
706 __ LoadRoot(r5, Heap::kRealStackLimitRootIndex); 705 __ LoadRoot(r5, Heap::kRealStackLimitRootIndex);
707 // Make r5 the space we have left. The stack might already be overflowed 706 // Make r5 the space we have left. The stack might already be overflowed
708 // here which will cause r5 to become negative. 707 // here which will cause r5 to become negative.
709 __ sub(r5, sp, r5); 708 __ sub(r5, sp, r5);
710 // Check if the arguments will overflow the stack. 709 // Check if the arguments will overflow the stack.
711 if (argc_is_tagged == kArgcIsSmiTagged) { 710 if (argc_is_tagged == kArgcIsSmiTagged) {
712 __ SmiToPtrArrayOffset(r0, argc); 711 __ SmiToPtrArrayOffset(r0, argc);
713 } else { 712 } else {
714 DCHECK(argc_is_tagged == kArgcIsUntaggedInt); 713 DCHECK(argc_is_tagged == kArgcIsUntaggedInt);
715 __ ShiftLeftImm(r0, argc, Operand(kPointerSizeLog2)); 714 __ ShiftLeftImm(r0, argc, Operand(kPointerSizeLog2));
716 } 715 }
717 __ cmp(r5, r0); 716 __ cmp(r5, r0);
718 __ bgt(&okay); // Signed comparison. 717 __ bgt(&okay); // Signed comparison.
719 718
720 // Out of stack space. 719 // Out of stack space.
721 __ LoadP(r4, MemOperand(fp, calleeOffset));
722 if (argc_is_tagged == kArgcIsUntaggedInt) {
723 __ SmiTag(argc);
724 }
725 __ Push(r4, argc);
726 __ CallRuntime(Runtime::kThrowStackOverflow, 0); 720 __ CallRuntime(Runtime::kThrowStackOverflow, 0);
727 721
728 __ bind(&okay); 722 __ bind(&okay);
729 } 723 }
730 724
731 725
732 static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm, 726 static void Generate_JSEntryTrampolineHelper(MacroAssembler* masm,
733 bool is_construct) { 727 bool is_construct) {
734 // Called from Generate_JS_Entry 728 // Called from Generate_JS_Entry
735 // r3: new.target 729 // r3: new.target
(...skipping 16 matching lines...) Expand all
752 masm->isolate()); 746 masm->isolate());
753 __ mov(cp, Operand(context_address)); 747 __ mov(cp, Operand(context_address));
754 __ LoadP(cp, MemOperand(cp)); 748 __ LoadP(cp, MemOperand(cp));
755 749
756 __ InitializeRootRegister(); 750 __ InitializeRootRegister();
757 751
758 // Push the function and the receiver onto the stack. 752 // Push the function and the receiver onto the stack.
759 __ Push(r4, r5); 753 __ Push(r4, r5);
760 754
761 // Check if we have enough stack space to push all arguments. 755 // Check if we have enough stack space to push all arguments.
762 // The function is the first thing that was pushed above after entering
763 // the internal frame.
764 const int kFunctionOffset =
765 InternalFrameConstants::kCodeOffset - kPointerSize;
766 // Clobbers r5. 756 // Clobbers r5.
767 Generate_CheckStackOverflow(masm, kFunctionOffset, r6, kArgcIsUntaggedInt); 757 Generate_CheckStackOverflow(masm, r6, kArgcIsUntaggedInt);
768 758
769 // Copy arguments to the stack in a loop. 759 // Copy arguments to the stack in a loop.
770 // r4: function 760 // r4: function
771 // r6: argc 761 // r6: argc
772 // r7: argv, i.e. points to first arg 762 // r7: argv, i.e. points to first arg
773 Label loop, entry; 763 Label loop, entry;
774 __ ShiftLeftImm(r0, r6, Operand(kPointerSizeLog2)); 764 __ ShiftLeftImm(r0, r6, Operand(kPointerSizeLog2));
775 __ add(r5, r7, r0); 765 __ add(r5, r7, r0);
776 // r5 points past last arg. 766 // r5 points past last arg.
777 __ b(&entry); 767 __ b(&entry);
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after
1342 __ LoadP(r3, MemOperand(fp, kFunctionOffset)); // get the function 1332 __ LoadP(r3, MemOperand(fp, kFunctionOffset)); // get the function
1343 __ LoadP(r4, MemOperand(fp, kArgumentsOffset)); // get the args array 1333 __ LoadP(r4, MemOperand(fp, kArgumentsOffset)); // get the args array
1344 __ Push(r3, r4); 1334 __ Push(r3, r4);
1345 if (targetIsArgument) { 1335 if (targetIsArgument) {
1346 __ InvokeBuiltin(Context::REFLECT_APPLY_PREPARE_BUILTIN_INDEX, 1336 __ InvokeBuiltin(Context::REFLECT_APPLY_PREPARE_BUILTIN_INDEX,
1347 CALL_FUNCTION); 1337 CALL_FUNCTION);
1348 } else { 1338 } else {
1349 __ InvokeBuiltin(Context::APPLY_PREPARE_BUILTIN_INDEX, CALL_FUNCTION); 1339 __ InvokeBuiltin(Context::APPLY_PREPARE_BUILTIN_INDEX, CALL_FUNCTION);
1350 } 1340 }
1351 1341
1352 Generate_CheckStackOverflow(masm, kFunctionOffset, r3, kArgcIsSmiTagged); 1342 Generate_CheckStackOverflow(masm, r3, kArgcIsSmiTagged);
1353 1343
1354 // Push current limit and index. 1344 // Push current limit and index.
1355 const int kIndexOffset = kVectorOffset - (2 * kPointerSize); 1345 const int kIndexOffset = kVectorOffset - (2 * kPointerSize);
1356 const int kLimitOffset = kVectorOffset - (1 * kPointerSize); 1346 const int kLimitOffset = kVectorOffset - (1 * kPointerSize);
1357 __ li(r4, Operand::Zero()); 1347 __ li(r4, Operand::Zero());
1358 __ LoadP(r5, MemOperand(fp, kReceiverOffset)); 1348 __ LoadP(r5, MemOperand(fp, kReceiverOffset));
1359 __ Push(r3, r4, r5); // limit, initial index and receiver. 1349 __ Push(r3, r4, r5); // limit, initial index and receiver.
1360 1350
1361 // Copy all arguments from the array to the stack. 1351 // Copy all arguments from the array to the stack.
1362 Generate_PushAppliedArguments(masm, kVectorOffset, kArgumentsOffset, 1352 Generate_PushAppliedArguments(masm, kVectorOffset, kArgumentsOffset,
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1404 __ bind(&validate_arguments); 1394 __ bind(&validate_arguments);
1405 __ LoadP(r3, MemOperand(fp, kFunctionOffset)); // get the function 1395 __ LoadP(r3, MemOperand(fp, kFunctionOffset)); // get the function
1406 __ push(r3); 1396 __ push(r3);
1407 __ LoadP(r3, MemOperand(fp, kArgumentsOffset)); // get the args array 1397 __ LoadP(r3, MemOperand(fp, kArgumentsOffset)); // get the args array
1408 __ push(r3); 1398 __ push(r3);
1409 __ LoadP(r3, MemOperand(fp, kNewTargetOffset)); // get the new.target 1399 __ LoadP(r3, MemOperand(fp, kNewTargetOffset)); // get the new.target
1410 __ push(r3); 1400 __ push(r3);
1411 __ InvokeBuiltin(Context::REFLECT_CONSTRUCT_PREPARE_BUILTIN_INDEX, 1401 __ InvokeBuiltin(Context::REFLECT_CONSTRUCT_PREPARE_BUILTIN_INDEX,
1412 CALL_FUNCTION); 1402 CALL_FUNCTION);
1413 1403
1414 Generate_CheckStackOverflow(masm, kFunctionOffset, r3, kArgcIsSmiTagged); 1404 Generate_CheckStackOverflow(masm, r3, kArgcIsSmiTagged);
1415 1405
1416 // Push current limit and index. 1406 // Push current limit and index.
1417 const int kIndexOffset = kVectorOffset - (2 * kPointerSize); 1407 const int kIndexOffset = kVectorOffset - (2 * kPointerSize);
1418 const int kLimitOffset = kVectorOffset - (1 * kPointerSize); 1408 const int kLimitOffset = kVectorOffset - (1 * kPointerSize);
1419 __ li(r4, Operand::Zero()); 1409 __ li(r4, Operand::Zero());
1420 __ Push(r3, r4); // limit and initial index. 1410 __ Push(r3, r4); // limit and initial index.
1421 // Push the constructor function as callee 1411 // Push the constructor function as callee
1422 __ LoadP(r3, MemOperand(fp, kFunctionOffset)); 1412 __ LoadP(r3, MemOperand(fp, kFunctionOffset));
1423 __ push(r3); 1413 __ push(r3);
1424 1414
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
1598 } 1588 }
1599 1589
1600 1590
1601 // static 1591 // static
1602 void Builtins::Generate_Call(MacroAssembler* masm) { 1592 void Builtins::Generate_Call(MacroAssembler* masm) {
1603 // ----------- S t a t e ------------- 1593 // ----------- S t a t e -------------
1604 // -- r3 : the number of arguments (not including the receiver) 1594 // -- r3 : the number of arguments (not including the receiver)
1605 // -- r4 : the target to call (can be any Object). 1595 // -- r4 : the target to call (can be any Object).
1606 // ----------------------------------- 1596 // -----------------------------------
1607 1597
1608 Label non_smi, non_function; 1598 Label non_callable, non_function, non_smi;
1609 __ JumpIfSmi(r4, &non_function); 1599 __ JumpIfSmi(r4, &non_callable);
1610 __ bind(&non_smi); 1600 __ bind(&non_smi);
1611 __ CompareObjectType(r4, r5, r5, JS_FUNCTION_TYPE); 1601 __ CompareObjectType(r4, r7, r8, JS_FUNCTION_TYPE);
1612 __ Jump(masm->isolate()->builtins()->CallFunction(), RelocInfo::CODE_TARGET, 1602 __ Jump(masm->isolate()->builtins()->CallFunction(), RelocInfo::CODE_TARGET,
1613 eq); 1603 eq);
1614 __ cmpi(r5, Operand(JS_FUNCTION_PROXY_TYPE)); 1604 __ cmpi(r8, Operand(JS_FUNCTION_PROXY_TYPE));
1615 __ bne(&non_function); 1605 __ bne(&non_function);
1616 1606
1617 // 1. Call to function proxy. 1607 // 1. Call to function proxy.
1618 // TODO(neis): This doesn't match the ES6 spec for [[Call]] on proxies. 1608 // TODO(neis): This doesn't match the ES6 spec for [[Call]] on proxies.
1619 __ LoadP(r4, FieldMemOperand(r4, JSFunctionProxy::kCallTrapOffset)); 1609 __ LoadP(r4, FieldMemOperand(r4, JSFunctionProxy::kCallTrapOffset));
1620 __ AssertNotSmi(r4); 1610 __ AssertNotSmi(r4);
1621 __ b(&non_smi); 1611 __ b(&non_smi);
1622 1612
1623 // 2. Call to something else, which might have a [[Call]] internal method (if 1613 // 2. Call to something else, which might have a [[Call]] internal method (if
1624 // not we raise an exception). 1614 // not we raise an exception).
1625 __ bind(&non_function); 1615 __ bind(&non_function);
1626 // TODO(bmeurer): I wonder why we prefer to have slow API calls? This could 1616 // Check if target has a [[Call]] internal method.
1627 // be awesome instead; i.e. a trivial improvement would be to call into the 1617 __ lbz(r7, FieldMemOperand(r7, Map::kBitFieldOffset));
1628 // runtime and just deal with the API function there instead of returning a 1618 __ TestBit(r7, Map::kIsCallable, r0);
1629 // delegate from a runtime call that just jumps back to the runtime once 1619 __ beq(&non_callable, cr0);
1630 // called. Or, bonus points, call directly into the C API function here, as 1620 // Overwrite the original receiver the (original) target.
1631 // we do in some Crankshaft fast cases. 1621 __ ShiftLeftImm(r8, r3, Operand(kPointerSizeLog2));
1632 // Overwrite the original receiver with the (original) target. 1622 __ StorePX(r4, MemOperand(sp, r8));
1633 __ ShiftLeftImm(r5, r3, Operand(kPointerSizeLog2)); 1623 // Let the "call_as_function_delegate" take care of the rest.
1634 __ StorePX(r4, MemOperand(sp, r5)); 1624 __ LoadGlobalFunction(Context::CALL_AS_FUNCTION_DELEGATE_INDEX, r4);
1625 __ Jump(masm->isolate()->builtins()->CallFunction(), RelocInfo::CODE_TARGET);
1626
1627 // 3. Call to something that is not callable.
1628 __ bind(&non_callable);
1635 { 1629 {
1636 // Determine the delegate for the target (if any).
1637 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); 1630 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
1638 __ SmiTag(r3); 1631 __ Push(r4);
1639 __ Push(r3, r4); 1632 __ CallRuntime(Runtime::kThrowCalledNonCallable, 1);
1640 __ CallRuntime(Runtime::kGetFunctionDelegate, 1);
1641 __ mr(r4, r3);
1642 __ Pop(r3);
1643 __ SmiUntag(r3);
1644 } 1633 }
1645 // The delegate is always a regular function.
1646 __ AssertFunction(r4);
1647 __ Jump(masm->isolate()->builtins()->CallFunction(), RelocInfo::CODE_TARGET);
1648 } 1634 }
1649 1635
1650 1636
1651 // static 1637 // static
1652 void Builtins::Generate_ConstructFunction(MacroAssembler* masm) { 1638 void Builtins::Generate_ConstructFunction(MacroAssembler* masm) {
1653 // ----------- S t a t e ------------- 1639 // ----------- S t a t e -------------
1654 // -- r3 : the number of arguments (not including the receiver) 1640 // -- r3 : the number of arguments (not including the receiver)
1655 // -- r4 : the constructor to call (checked to be a JSFunction) 1641 // -- r4 : the constructor to call (checked to be a JSFunction)
1656 // -- r6 : the original constructor (checked to be a JSFunction) 1642 // -- r6 : the original constructor (checked to be a JSFunction)
1657 // ----------------------------------- 1643 // -----------------------------------
1658 __ AssertFunction(r4); 1644 __ AssertFunction(r4);
1659 __ AssertFunction(r6); 1645 __ AssertFunction(r6);
1660 1646
1661 // Calling convention for function specific ConstructStubs require 1647 // Calling convention for function specific ConstructStubs require
1662 // r5 to contain either an AllocationSite or undefined. 1648 // r5 to contain either an AllocationSite or undefined.
1663 __ LoadRoot(r5, Heap::kUndefinedValueRootIndex); 1649 __ LoadRoot(r5, Heap::kUndefinedValueRootIndex);
1664 1650
1665 // Tail call to the function-specific construct stub (still in the caller 1651 // Tail call to the function-specific construct stub (still in the caller
1666 // context at this point). 1652 // context at this point).
1667 __ LoadP(r7, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset)); 1653 __ LoadP(r7, FieldMemOperand(r4, JSFunction::kSharedFunctionInfoOffset));
1668 __ LoadP(r7, FieldMemOperand(r7, SharedFunctionInfo::kConstructStubOffset)); 1654 __ LoadP(r7, FieldMemOperand(r7, SharedFunctionInfo::kConstructStubOffset));
1669 __ addi(ip, r7, Operand(Code::kHeaderSize - kHeapObjectTag)); 1655 __ addi(ip, r7, Operand(Code::kHeaderSize - kHeapObjectTag));
1670 __ JumpToJSEntry(ip); 1656 __ JumpToJSEntry(ip);
1671 } 1657 }
1672 1658
1673 1659
1674 // static 1660 // static
1661 void Builtins::Generate_ConstructProxy(MacroAssembler* masm) {
1662 // ----------- S t a t e -------------
1663 // -- r3 : the number of arguments (not including the receiver)
1664 // -- r4 : the constructor to call (checked to be a JSFunctionProxy)
1665 // -- r6 : the original constructor (either the same as the constructor or
1666 // the JSFunction on which new was invoked initially)
1667 // -----------------------------------
1668
1669 // TODO(neis): This doesn't match the ES6 spec for [[Construct]] on proxies.
1670 __ LoadP(r4, FieldMemOperand(r4, JSFunctionProxy::kConstructTrapOffset));
1671 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET);
1672 }
1673
1674
1675 // static
1675 void Builtins::Generate_Construct(MacroAssembler* masm) { 1676 void Builtins::Generate_Construct(MacroAssembler* masm) {
1676 // ----------- S t a t e ------------- 1677 // ----------- S t a t e -------------
1677 // -- r3 : the number of arguments (not including the receiver) 1678 // -- r3 : the number of arguments (not including the receiver)
1678 // -- r4 : the constructor to call (can be any Object) 1679 // -- r4 : the constructor to call (can be any Object)
1679 // -- r6 : the original constructor (either the same as the constructor or 1680 // -- r6 : the original constructor (either the same as the constructor or
1680 // the JSFunction on which new was invoked initially) 1681 // the JSFunction on which new was invoked initially)
1681 // ----------------------------------- 1682 // -----------------------------------
1682 1683
1683 Label slow; 1684 // Check if target has a [[Construct]] internal method.
1684 __ JumpIfSmi(r4, &slow); 1685 Label non_constructor;
1685 __ CompareObjectType(r4, r8, r8, JS_FUNCTION_TYPE); 1686 __ JumpIfSmi(r4, &non_constructor);
1687 __ LoadP(r7, FieldMemOperand(r4, HeapObject::kMapOffset));
1688 __ lbz(r5, FieldMemOperand(r7, Map::kBitFieldOffset));
1689 __ TestBit(r5, Map::kIsConstructor, r0);
1690 __ beq(&non_constructor, cr0);
1691
1692 // Dispatch based on instance type.
1693 __ CompareInstanceType(r7, r8, JS_FUNCTION_TYPE);
1686 __ Jump(masm->isolate()->builtins()->ConstructFunction(), 1694 __ Jump(masm->isolate()->builtins()->ConstructFunction(),
1687 RelocInfo::CODE_TARGET, eq); 1695 RelocInfo::CODE_TARGET, eq);
1688 __ cmpi(r8, Operand(JS_FUNCTION_PROXY_TYPE)); 1696 __ cmpi(r8, Operand(JS_FUNCTION_PROXY_TYPE));
1689 __ bne(&slow); 1697 __ Jump(masm->isolate()->builtins()->ConstructProxy(), RelocInfo::CODE_TARGET,
1698 eq);
1690 1699
1691 // TODO(neis): This doesn't match the ES6 spec for [[Construct]] on proxies. 1700 // Called Construct on an exotic Object with a [[Construct]] internal method.
1692 __ LoadP(r4, FieldMemOperand(r4, JSFunctionProxy::kConstructTrapOffset)); 1701 {
1693 __ Jump(masm->isolate()->builtins()->Call(), RelocInfo::CODE_TARGET); 1702 // Overwrite the original receiver with the (original) target.
1703 __ ShiftLeftImm(r8, r3, Operand(kPointerSizeLog2));
1704 __ StorePX(r4, MemOperand(sp, r8));
1705 // Let the "call_as_constructor_delegate" take care of the rest.
1706 __ LoadGlobalFunction(Context::CALL_AS_CONSTRUCTOR_DELEGATE_INDEX, r4);
1707 __ Jump(masm->isolate()->builtins()->CallFunction(),
1708 RelocInfo::CODE_TARGET);
1709 }
1694 1710
1695 __ bind(&slow); 1711 // Called Construct on an Object that doesn't have a [[Construct]] internal
1712 // method.
1713 __ bind(&non_constructor);
1696 { 1714 {
1697 // Determine the delegate for the target (if any).
1698 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL); 1715 FrameAndConstantPoolScope scope(masm, StackFrame::INTERNAL);
1699 __ SmiTag(r3); 1716 __ Push(r4);
1700 __ Push(r3, r4); 1717 __ CallRuntime(Runtime::kThrowCalledNonCallable, 1);
1701 __ CallRuntime(Runtime::kGetConstructorDelegate, 1);
1702 __ mr(r4, r3);
1703 __ Pop(r3);
1704 __ SmiUntag(r3);
1705 } 1718 }
1706 // The delegate is always a regular function.
1707 __ AssertFunction(r4);
1708 __ Jump(masm->isolate()->builtins()->CallFunction(), RelocInfo::CODE_TARGET);
1709 } 1719 }
1710 1720
1711 1721
1712 // static 1722 // static
1713 void Builtins::Generate_PushArgsAndCall(MacroAssembler* masm) { 1723 void Builtins::Generate_PushArgsAndCall(MacroAssembler* masm) {
1714 // ----------- S t a t e ------------- 1724 // ----------- S t a t e -------------
1715 // -- r3 : the number of arguments (not including the receiver) 1725 // -- r3 : the number of arguments (not including the receiver)
1716 // -- r5 : the address of the first argument to be pushed. Subsequent 1726 // -- r5 : the address of the first argument to be pushed. Subsequent
1717 // arguments should be consecutive above this, in the same order as 1727 // arguments should be consecutive above this, in the same order as
1718 // they are to be pushed onto the stack. 1728 // they are to be pushed onto the stack.
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
1892 __ bkpt(0); 1902 __ bkpt(0);
1893 } 1903 }
1894 } 1904 }
1895 1905
1896 1906
1897 #undef __ 1907 #undef __
1898 } // namespace internal 1908 } // namespace internal
1899 } // namespace v8 1909 } // namespace v8
1900 1910
1901 #endif // V8_TARGET_ARCH_PPC 1911 #endif // V8_TARGET_ARCH_PPC
OLDNEW
« no previous file with comments | « src/full-codegen/ppc/full-codegen-ppc.cc ('k') | src/ppc/code-stubs-ppc.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698