OLD | NEW |
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 #include "src/compiler/code-generator.h" | 5 #include "src/compiler/code-generator.h" |
6 | 6 |
7 #include "src/compiler/code-generator-impl.h" | 7 #include "src/compiler/code-generator-impl.h" |
8 #include "src/compiler/gap-resolver.h" | 8 #include "src/compiler/gap-resolver.h" |
9 #include "src/compiler/node-matchers.h" | 9 #include "src/compiler/node-matchers.h" |
10 #include "src/ppc/macro-assembler-ppc.h" | 10 #include "src/ppc/macro-assembler-ppc.h" |
(...skipping 639 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
650 FieldMemOperand(func, JSFunction::kContextOffset)); | 650 FieldMemOperand(func, JSFunction::kContextOffset)); |
651 __ cmp(cp, kScratchReg); | 651 __ cmp(cp, kScratchReg); |
652 __ Assert(eq, kWrongFunctionContext); | 652 __ Assert(eq, kWrongFunctionContext); |
653 } | 653 } |
654 AssembleDeconstructActivationRecord(); | 654 AssembleDeconstructActivationRecord(); |
655 __ LoadP(ip, FieldMemOperand(func, JSFunction::kCodeEntryOffset)); | 655 __ LoadP(ip, FieldMemOperand(func, JSFunction::kCodeEntryOffset)); |
656 __ Jump(ip); | 656 __ Jump(ip); |
657 DCHECK_EQ(LeaveRC, i.OutputRCBit()); | 657 DCHECK_EQ(LeaveRC, i.OutputRCBit()); |
658 break; | 658 break; |
659 } | 659 } |
| 660 case kArchPrepareCallCFunction: { |
| 661 int const num_parameters = MiscField::decode(instr->opcode()); |
| 662 __ PrepareCallCFunction(num_parameters, kScratchReg); |
| 663 break; |
| 664 } |
| 665 case kArchCallCFunction: { |
| 666 int const num_parameters = MiscField::decode(instr->opcode()); |
| 667 if (instr->InputAt(0)->IsImmediate()) { |
| 668 ExternalReference ref = i.InputExternalReference(0); |
| 669 __ CallCFunction(ref, num_parameters); |
| 670 } else { |
| 671 Register func = i.InputRegister(0); |
| 672 __ CallCFunction(func, num_parameters); |
| 673 } |
| 674 break; |
| 675 } |
660 case kArchJmp: | 676 case kArchJmp: |
661 AssembleArchJump(i.InputRpo(0)); | 677 AssembleArchJump(i.InputRpo(0)); |
662 DCHECK_EQ(LeaveRC, i.OutputRCBit()); | 678 DCHECK_EQ(LeaveRC, i.OutputRCBit()); |
663 break; | 679 break; |
664 case kArchLookupSwitch: | 680 case kArchLookupSwitch: |
665 AssembleArchLookupSwitch(instr); | 681 AssembleArchLookupSwitch(instr); |
666 DCHECK_EQ(LeaveRC, i.OutputRCBit()); | 682 DCHECK_EQ(LeaveRC, i.OutputRCBit()); |
667 break; | 683 break; |
668 case kArchTableSwitch: | 684 case kArchTableSwitch: |
669 AssembleArchTableSwitch(instr); | 685 AssembleArchTableSwitch(instr); |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
955 } else { | 971 } else { |
956 __ andi(r0, i.InputRegister(0), i.InputImmediate(1)); | 972 __ andi(r0, i.InputRegister(0), i.InputImmediate(1)); |
957 } | 973 } |
958 DCHECK_EQ(SetRC, i.OutputRCBit()); | 974 DCHECK_EQ(SetRC, i.OutputRCBit()); |
959 break; | 975 break; |
960 #endif | 976 #endif |
961 case kPPC_Push: | 977 case kPPC_Push: |
962 __ Push(i.InputRegister(0)); | 978 __ Push(i.InputRegister(0)); |
963 DCHECK_EQ(LeaveRC, i.OutputRCBit()); | 979 DCHECK_EQ(LeaveRC, i.OutputRCBit()); |
964 break; | 980 break; |
| 981 case kPPC_PushFrame: { |
| 982 int num_slots = i.InputInt32(1); |
| 983 __ StorePU(i.InputRegister(0), MemOperand(sp, -num_slots * kPointerSize)); |
| 984 break; |
| 985 } |
| 986 case kPPC_StoreToStackSlot: { |
| 987 int slot = i.InputInt32(1); |
| 988 __ StoreP(i.InputRegister(0), MemOperand(sp, slot * kPointerSize)); |
| 989 break; |
| 990 } |
965 case kPPC_ExtendSignWord8: | 991 case kPPC_ExtendSignWord8: |
966 __ extsb(i.OutputRegister(), i.InputRegister(0)); | 992 __ extsb(i.OutputRegister(), i.InputRegister(0)); |
967 DCHECK_EQ(LeaveRC, i.OutputRCBit()); | 993 DCHECK_EQ(LeaveRC, i.OutputRCBit()); |
968 break; | 994 break; |
969 case kPPC_ExtendSignWord16: | 995 case kPPC_ExtendSignWord16: |
970 __ extsh(i.OutputRegister(), i.InputRegister(0)); | 996 __ extsh(i.OutputRegister(), i.InputRegister(0)); |
971 DCHECK_EQ(LeaveRC, i.OutputRCBit()); | 997 DCHECK_EQ(LeaveRC, i.OutputRCBit()); |
972 break; | 998 break; |
973 #if V8_TARGET_ARCH_PPC64 | 999 #if V8_TARGET_ARCH_PPC64 |
974 case kPPC_ExtendSignWord32: | 1000 case kPPC_ExtendSignWord32: |
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1555 } | 1581 } |
1556 } | 1582 } |
1557 } | 1583 } |
1558 } | 1584 } |
1559 | 1585 |
1560 #undef __ | 1586 #undef __ |
1561 | 1587 |
1562 } // namespace compiler | 1588 } // namespace compiler |
1563 } // namespace internal | 1589 } // namespace internal |
1564 } // namespace v8 | 1590 } // namespace v8 |
OLD | NEW |