Lines Matching refs:node

32   InstructionOperand UseOperand(Node* node, ImmediateMode mode) {  in UseOperand()  argument
33 if (CanBeImmediate(node, mode)) { in UseOperand()
34 return UseImmediate(node); in UseOperand()
36 return UseRegister(node); in UseOperand()
39 bool CanBeImmediate(Node* node, ImmediateMode mode) { in CanBeImmediate() argument
41 if (node->opcode() == IrOpcode::kInt32Constant) in CanBeImmediate()
42 value = OpParameter<int32_t>(node); in CanBeImmediate()
43 else if (node->opcode() == IrOpcode::kInt64Constant) in CanBeImmediate()
44 value = OpParameter<int64_t>(node); in CanBeImmediate()
74 void VisitRR(InstructionSelector* selector, ArchOpcode opcode, Node* node) { in VisitRR() argument
76 selector->Emit(opcode, g.DefineAsRegister(node), in VisitRR()
77 g.UseRegister(node->InputAt(0))); in VisitRR()
81 void VisitRRR(InstructionSelector* selector, ArchOpcode opcode, Node* node) { in VisitRRR() argument
83 selector->Emit(opcode, g.DefineAsRegister(node), in VisitRRR()
84 g.UseRegister(node->InputAt(0)), in VisitRRR()
85 g.UseRegister(node->InputAt(1))); in VisitRRR()
89 void VisitRRO(InstructionSelector* selector, ArchOpcode opcode, Node* node, in VisitRRO() argument
92 selector->Emit(opcode, g.DefineAsRegister(node), in VisitRRO()
93 g.UseRegister(node->InputAt(0)), in VisitRRO()
94 g.UseOperand(node->InputAt(1), operand_mode)); in VisitRRO()
100 Node* node) { in VisitTryTruncateDouble() argument
102 InstructionOperand inputs[] = {g.UseRegister(node->InputAt(0))}; in VisitTryTruncateDouble()
105 outputs[output_count++] = g.DefineAsRegister(node); in VisitTryTruncateDouble()
107 Node* success_output = NodeProperties::FindProjection(node, 1); in VisitTryTruncateDouble()
119 void VisitBinop(InstructionSelector* selector, Node* node, in VisitBinop() argument
123 Matcher m(node); in VisitBinop()
129 inputs[input_count++] = g.UseRegister(m.left().node()); in VisitBinop()
130 inputs[input_count++] = g.UseOperand(m.right().node(), operand_mode); in VisitBinop()
137 outputs[output_count++] = g.DefineAsRegister(node); in VisitBinop()
154 void VisitBinop(InstructionSelector* selector, Node* node, ArchOpcode opcode, in VisitBinop() argument
157 VisitBinop<Matcher>(selector, node, opcode, operand_mode, &cont); in VisitBinop()
163 void InstructionSelector::VisitLoad(Node* node) { in VisitLoad() argument
164 LoadRepresentation load_rep = LoadRepresentationOf(node->op()); in VisitLoad()
166 Node* base = node->InputAt(0); in VisitLoad()
167 Node* offset = node->InputAt(1); in VisitLoad()
209 g.DefineAsRegister(node), g.UseRegister(base), g.UseImmediate(offset)); in VisitLoad()
212 g.DefineAsRegister(node), g.UseRegister(offset), g.UseImmediate(base)); in VisitLoad()
215 g.DefineAsRegister(node), g.UseRegister(base), g.UseRegister(offset)); in VisitLoad()
220 void InstructionSelector::VisitStore(Node* node) { in VisitStore() argument
222 Node* base = node->InputAt(0); in VisitStore()
223 Node* offset = node->InputAt(1); in VisitStore()
224 Node* value = node->InputAt(2); in VisitStore()
226 StoreRepresentation store_rep = StoreRepresentationOf(node->op()); in VisitStore()
310 void InstructionSelector::VisitCheckedLoad(Node* node) { in VisitCheckedLoad() argument
311 CheckedLoadRepresentation load_rep = CheckedLoadRepresentationOf(node->op()); in VisitCheckedLoad()
313 Node* const base = node->InputAt(0); in VisitCheckedLoad()
314 Node* const offset = node->InputAt(1); in VisitCheckedLoad()
315 Node* const length = node->InputAt(2); in VisitCheckedLoad()
349 g.DefineAsRegister(node), g.UseRegister(base), g.UseRegister(offset), in VisitCheckedLoad()
354 void InstructionSelector::VisitCheckedStore(Node* node) { in VisitCheckedStore() argument
355 MachineRepresentation rep = CheckedStoreRepresentationOf(node->op()); in VisitCheckedStore()
357 Node* const base = node->InputAt(0); in VisitCheckedStore()
358 Node* const offset = node->InputAt(1); in VisitCheckedStore()
359 Node* const length = node->InputAt(2); in VisitCheckedStore()
360 Node* const value = node->InputAt(3); in VisitCheckedStore()
400 static void VisitLogical(InstructionSelector* selector, Node* node, Matcher* m, in VisitLogical() argument
420 Matcher mleft(m->left().node()); in VisitLogical()
422 selector->Emit(inv_opcode, g.DefineAsRegister(node), in VisitLogical()
423 g.UseRegister(m->right().node()), in VisitLogical()
424 g.UseRegister(mleft.left().node())); in VisitLogical()
432 Matcher mright(m->right().node()); in VisitLogical()
435 selector->Emit(inv_opcode, g.DefineAsRegister(node), in VisitLogical()
436 g.UseRegister(m->left().node()), in VisitLogical()
437 g.UseRegister(mright.left().node())); in VisitLogical()
442 VisitBinop<Matcher>(selector, node, opcode, imm_mode); in VisitLogical()
473 void InstructionSelector::VisitWord32And(Node* node) { in VisitWord32And() argument
475 Int32BinopMatcher m(node); in VisitWord32And()
480 Node* left = m.left().node(); in VisitWord32And()
482 CanCover(node, left)) { in VisitWord32And()
484 Int32BinopMatcher mleft(m.left().node()); in VisitWord32And()
486 left = mleft.left().node(); in VisitWord32And()
499 Emit(kPPC_RotLeftAndMask32, g.DefineAsRegister(node), g.UseRegister(left), in VisitWord32And()
505 this, node, &m, kPPC_And, CanCover(node, m.left().node()), in VisitWord32And()
506 CanCover(node, m.right().node()), kInt16Imm_Unsigned); in VisitWord32And()
512 void InstructionSelector::VisitWord64And(Node* node) { in VisitWord64And() argument
514 Int64BinopMatcher m(node); in VisitWord64And()
519 Node* left = m.left().node(); in VisitWord64And()
521 CanCover(node, left)) { in VisitWord64And()
523 Int64BinopMatcher mleft(m.left().node()); in VisitWord64And()
525 left = mleft.left().node(); in VisitWord64And()
555 Emit(opcode, g.DefineAsRegister(node), g.UseRegister(left), in VisitWord64And()
562 this, node, &m, kPPC_And, CanCover(node, m.left().node()), in VisitWord64And()
563 CanCover(node, m.right().node()), kInt16Imm_Unsigned); in VisitWord64And()
568 void InstructionSelector::VisitWord32Or(Node* node) { in VisitWord32Or() argument
569 Int32BinopMatcher m(node); in VisitWord32Or()
571 this, node, &m, kPPC_Or, CanCover(node, m.left().node()), in VisitWord32Or()
572 CanCover(node, m.right().node()), kInt16Imm_Unsigned); in VisitWord32Or()
577 void InstructionSelector::VisitWord64Or(Node* node) { in VisitWord64Or() argument
578 Int64BinopMatcher m(node); in VisitWord64Or()
580 this, node, &m, kPPC_Or, CanCover(node, m.left().node()), in VisitWord64Or()
581 CanCover(node, m.right().node()), kInt16Imm_Unsigned); in VisitWord64Or()
586 void InstructionSelector::VisitWord32Xor(Node* node) { in VisitWord32Xor() argument
588 Int32BinopMatcher m(node); in VisitWord32Xor()
590 Emit(kPPC_Not, g.DefineAsRegister(node), g.UseRegister(m.left().node())); in VisitWord32Xor()
592 VisitBinop<Int32BinopMatcher>(this, node, kPPC_Xor, kInt16Imm_Unsigned); in VisitWord32Xor()
598 void InstructionSelector::VisitWord64Xor(Node* node) { in VisitWord64Xor() argument
600 Int64BinopMatcher m(node); in VisitWord64Xor()
602 Emit(kPPC_Not, g.DefineAsRegister(node), g.UseRegister(m.left().node())); in VisitWord64Xor()
604 VisitBinop<Int64BinopMatcher>(this, node, kPPC_Xor, kInt16Imm_Unsigned); in VisitWord64Xor()
610 void InstructionSelector::VisitWord32Shl(Node* node) { in VisitWord32Shl() argument
612 Int32BinopMatcher m(node); in VisitWord32Shl()
615 Int32BinopMatcher mleft(m.left().node()); in VisitWord32Shl()
624 Emit(kPPC_RotLeftAndMask32, g.DefineAsRegister(node), in VisitWord32Shl()
625 g.UseRegister(mleft.left().node()), g.TempImmediate(sh), in VisitWord32Shl()
631 VisitRRO(this, kPPC_ShiftLeft32, node, kShift32Imm); in VisitWord32Shl()
636 void InstructionSelector::VisitWord64Shl(Node* node) { in VisitWord64Shl() argument
638 Int64BinopMatcher m(node); in VisitWord64Shl()
642 Int64BinopMatcher mleft(m.left().node()); in VisitWord64Shl()
668 Emit(opcode, g.DefineAsRegister(node), in VisitWord64Shl()
669 g.UseRegister(mleft.left().node()), g.TempImmediate(sh), in VisitWord64Shl()
676 VisitRRO(this, kPPC_ShiftLeft64, node, kShift64Imm); in VisitWord64Shl()
681 void InstructionSelector::VisitWord32Shr(Node* node) { in VisitWord32Shr() argument
683 Int32BinopMatcher m(node); in VisitWord32Shr()
686 Int32BinopMatcher mleft(m.left().node()); in VisitWord32Shr()
696 Emit(kPPC_RotLeftAndMask32, g.DefineAsRegister(node), in VisitWord32Shr()
697 g.UseRegister(mleft.left().node()), g.TempImmediate(sh), in VisitWord32Shr()
703 VisitRRO(this, kPPC_ShiftRight32, node, kShift32Imm); in VisitWord32Shr()
708 void InstructionSelector::VisitWord64Shr(Node* node) { in VisitWord64Shr() argument
710 Int64BinopMatcher m(node); in VisitWord64Shr()
713 Int64BinopMatcher mleft(m.left().node()); in VisitWord64Shr()
736 Emit(opcode, g.DefineAsRegister(node), in VisitWord64Shr()
737 g.UseRegister(mleft.left().node()), g.TempImmediate(sh), in VisitWord64Shr()
744 VisitRRO(this, kPPC_ShiftRight64, node, kShift64Imm); in VisitWord64Shr()
749 void InstructionSelector::VisitWord32Sar(Node* node) { in VisitWord32Sar() argument
751 Int32BinopMatcher m(node); in VisitWord32Sar()
753 if (CanCover(node, m.left().node()) && m.left().IsWord32Shl()) { in VisitWord32Sar()
754 Int32BinopMatcher mleft(m.left().node()); in VisitWord32Sar()
756 Emit(kPPC_ExtendSignWord16, g.DefineAsRegister(node), in VisitWord32Sar()
757 g.UseRegister(mleft.left().node())); in VisitWord32Sar()
760 Emit(kPPC_ExtendSignWord8, g.DefineAsRegister(node), in VisitWord32Sar()
761 g.UseRegister(mleft.left().node())); in VisitWord32Sar()
765 VisitRRO(this, kPPC_ShiftRightAlg32, node, kShift32Imm); in VisitWord32Sar()
770 void InstructionSelector::VisitWord64Sar(Node* node) { in VisitWord64Sar() argument
771 VisitRRO(this, kPPC_ShiftRightAlg64, node, kShift64Imm); in VisitWord64Sar()
777 void InstructionSelector::VisitWord32Ror(Node* node) { in VisitWord32Ror() argument
778 VisitRRO(this, kPPC_RotRight32, node, kShift32Imm); in VisitWord32Ror()
784 void InstructionSelector::VisitWord64Ror(Node* node) { in VisitWord64Ror() argument
785 VisitRRO(this, kPPC_RotRight64, node, kShift64Imm); in VisitWord64Ror()
790 void InstructionSelector::VisitWord32Clz(Node* node) { in VisitWord32Clz() argument
792 Emit(kPPC_Cntlz32, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0))); in VisitWord32Clz()
797 void InstructionSelector::VisitWord64Clz(Node* node) { in VisitWord64Clz() argument
799 Emit(kPPC_Cntlz64, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0))); in VisitWord64Clz()
804 void InstructionSelector::VisitWord32Popcnt(Node* node) { in VisitWord32Popcnt() argument
806 Emit(kPPC_Popcnt32, g.DefineAsRegister(node), in VisitWord32Popcnt()
807 g.UseRegister(node->InputAt(0))); in VisitWord32Popcnt()
812 void InstructionSelector::VisitWord64Popcnt(Node* node) { in VisitWord64Popcnt() argument
814 Emit(kPPC_Popcnt64, g.DefineAsRegister(node), in VisitWord64Popcnt()
815 g.UseRegister(node->InputAt(0))); in VisitWord64Popcnt()
820 void InstructionSelector::VisitWord32Ctz(Node* node) { UNREACHABLE(); } in VisitWord32Ctz() argument
824 void InstructionSelector::VisitWord64Ctz(Node* node) { UNREACHABLE(); } in VisitWord64Ctz() argument
828 void InstructionSelector::VisitInt32Add(Node* node) { in VisitInt32Add() argument
829 VisitBinop<Int32BinopMatcher>(this, node, kPPC_Add, kInt16Imm); in VisitInt32Add()
834 void InstructionSelector::VisitInt64Add(Node* node) { in VisitInt64Add() argument
835 VisitBinop<Int64BinopMatcher>(this, node, kPPC_Add, kInt16Imm); in VisitInt64Add()
840 void InstructionSelector::VisitInt32Sub(Node* node) { in VisitInt32Sub() argument
842 Int32BinopMatcher m(node); in VisitInt32Sub()
844 Emit(kPPC_Neg, g.DefineAsRegister(node), g.UseRegister(m.right().node())); in VisitInt32Sub()
846 VisitBinop<Int32BinopMatcher>(this, node, kPPC_Sub, kInt16Imm_Negate); in VisitInt32Sub()
852 void InstructionSelector::VisitInt64Sub(Node* node) { in VisitInt64Sub() argument
854 Int64BinopMatcher m(node); in VisitInt64Sub()
856 Emit(kPPC_Neg, g.DefineAsRegister(node), g.UseRegister(m.right().node())); in VisitInt64Sub()
858 VisitBinop<Int64BinopMatcher>(this, node, kPPC_Sub, kInt16Imm_Negate); in VisitInt64Sub()
864 void InstructionSelector::VisitInt32Mul(Node* node) { in VisitInt32Mul() argument
865 VisitRRR(this, kPPC_Mul32, node); in VisitInt32Mul()
870 void InstructionSelector::VisitInt64Mul(Node* node) { in VisitInt64Mul() argument
871 VisitRRR(this, kPPC_Mul64, node); in VisitInt64Mul()
876 void InstructionSelector::VisitInt32MulHigh(Node* node) { in VisitInt32MulHigh() argument
878 Emit(kPPC_MulHigh32, g.DefineAsRegister(node), in VisitInt32MulHigh()
879 g.UseRegister(node->InputAt(0)), g.UseRegister(node->InputAt(1))); in VisitInt32MulHigh()
883 void InstructionSelector::VisitUint32MulHigh(Node* node) { in VisitUint32MulHigh() argument
885 Emit(kPPC_MulHighU32, g.DefineAsRegister(node), in VisitUint32MulHigh()
886 g.UseRegister(node->InputAt(0)), g.UseRegister(node->InputAt(1))); in VisitUint32MulHigh()
890 void InstructionSelector::VisitInt32Div(Node* node) { in VisitInt32Div() argument
891 VisitRRR(this, kPPC_Div32, node); in VisitInt32Div()
896 void InstructionSelector::VisitInt64Div(Node* node) { in VisitInt64Div() argument
897 VisitRRR(this, kPPC_Div64, node); in VisitInt64Div()
902 void InstructionSelector::VisitUint32Div(Node* node) { in VisitUint32Div() argument
903 VisitRRR(this, kPPC_DivU32, node); in VisitUint32Div()
908 void InstructionSelector::VisitUint64Div(Node* node) { in VisitUint64Div() argument
909 VisitRRR(this, kPPC_DivU64, node); in VisitUint64Div()
914 void InstructionSelector::VisitInt32Mod(Node* node) { in VisitInt32Mod() argument
915 VisitRRR(this, kPPC_Mod32, node); in VisitInt32Mod()
920 void InstructionSelector::VisitInt64Mod(Node* node) { in VisitInt64Mod() argument
921 VisitRRR(this, kPPC_Mod64, node); in VisitInt64Mod()
926 void InstructionSelector::VisitUint32Mod(Node* node) { in VisitUint32Mod() argument
927 VisitRRR(this, kPPC_ModU32, node); in VisitUint32Mod()
932 void InstructionSelector::VisitUint64Mod(Node* node) { in VisitUint64Mod() argument
933 VisitRRR(this, kPPC_ModU64, node); in VisitUint64Mod()
938 void InstructionSelector::VisitChangeFloat32ToFloat64(Node* node) { in VisitChangeFloat32ToFloat64() argument
939 VisitRR(this, kPPC_Float32ToDouble, node); in VisitChangeFloat32ToFloat64()
943 void InstructionSelector::VisitChangeInt32ToFloat64(Node* node) { in VisitChangeInt32ToFloat64() argument
944 VisitRR(this, kPPC_Int32ToDouble, node); in VisitChangeInt32ToFloat64()
948 void InstructionSelector::VisitChangeUint32ToFloat64(Node* node) { in VisitChangeUint32ToFloat64() argument
949 VisitRR(this, kPPC_Uint32ToDouble, node); in VisitChangeUint32ToFloat64()
953 void InstructionSelector::VisitChangeFloat64ToInt32(Node* node) { in VisitChangeFloat64ToInt32() argument
954 VisitRR(this, kPPC_DoubleToInt32, node); in VisitChangeFloat64ToInt32()
958 void InstructionSelector::VisitChangeFloat64ToUint32(Node* node) { in VisitChangeFloat64ToUint32() argument
959 VisitRR(this, kPPC_DoubleToUint32, node); in VisitChangeFloat64ToUint32()
964 void InstructionSelector::VisitTryTruncateFloat32ToInt64(Node* node) { in VisitTryTruncateFloat32ToInt64() argument
965 VisitTryTruncateDouble(this, kPPC_DoubleToInt64, node); in VisitTryTruncateFloat32ToInt64()
969 void InstructionSelector::VisitTryTruncateFloat64ToInt64(Node* node) { in VisitTryTruncateFloat64ToInt64() argument
970 VisitTryTruncateDouble(this, kPPC_DoubleToInt64, node); in VisitTryTruncateFloat64ToInt64()
974 void InstructionSelector::VisitTryTruncateFloat32ToUint64(Node* node) { in VisitTryTruncateFloat32ToUint64() argument
975 VisitTryTruncateDouble(this, kPPC_DoubleToUint64, node); in VisitTryTruncateFloat32ToUint64()
979 void InstructionSelector::VisitTryTruncateFloat64ToUint64(Node* node) { in VisitTryTruncateFloat64ToUint64() argument
980 VisitTryTruncateDouble(this, kPPC_DoubleToUint64, node); in VisitTryTruncateFloat64ToUint64()
984 void InstructionSelector::VisitChangeInt32ToInt64(Node* node) { in VisitChangeInt32ToInt64() argument
986 VisitRR(this, kPPC_ExtendSignWord32, node); in VisitChangeInt32ToInt64()
990 void InstructionSelector::VisitChangeUint32ToUint64(Node* node) { in VisitChangeUint32ToUint64() argument
992 VisitRR(this, kPPC_Uint32ToUint64, node); in VisitChangeUint32ToUint64()
997 void InstructionSelector::VisitTruncateFloat64ToFloat32(Node* node) { in VisitTruncateFloat64ToFloat32() argument
998 VisitRR(this, kPPC_DoubleToFloat32, node); in VisitTruncateFloat64ToFloat32()
1002 void InstructionSelector::VisitTruncateFloat64ToInt32(Node* node) { in VisitTruncateFloat64ToInt32() argument
1003 switch (TruncationModeOf(node->op())) { in VisitTruncateFloat64ToInt32()
1005 return VisitRR(this, kArchTruncateDoubleToI, node); in VisitTruncateFloat64ToInt32()
1007 return VisitRR(this, kPPC_DoubleToInt32, node); in VisitTruncateFloat64ToInt32()
1014 void InstructionSelector::VisitTruncateInt64ToInt32(Node* node) { in VisitTruncateInt64ToInt32() argument
1016 VisitRR(this, kPPC_Int64ToInt32, node); in VisitTruncateInt64ToInt32()
1020 void InstructionSelector::VisitRoundInt64ToFloat32(Node* node) { in VisitRoundInt64ToFloat32() argument
1021 VisitRR(this, kPPC_Int64ToFloat32, node); in VisitRoundInt64ToFloat32()
1025 void InstructionSelector::VisitRoundInt64ToFloat64(Node* node) { in VisitRoundInt64ToFloat64() argument
1026 VisitRR(this, kPPC_Int64ToDouble, node); in VisitRoundInt64ToFloat64()
1030 void InstructionSelector::VisitRoundUint64ToFloat32(Node* node) { in VisitRoundUint64ToFloat32() argument
1031 VisitRR(this, kPPC_Uint64ToFloat32, node); in VisitRoundUint64ToFloat32()
1035 void InstructionSelector::VisitRoundUint64ToFloat64(Node* node) { in VisitRoundUint64ToFloat64() argument
1036 VisitRR(this, kPPC_Uint64ToDouble, node); in VisitRoundUint64ToFloat64()
1041 void InstructionSelector::VisitBitcastFloat32ToInt32(Node* node) { in VisitBitcastFloat32ToInt32() argument
1042 VisitRR(this, kPPC_BitcastFloat32ToInt32, node); in VisitBitcastFloat32ToInt32()
1047 void InstructionSelector::VisitBitcastFloat64ToInt64(Node* node) { in VisitBitcastFloat64ToInt64() argument
1048 VisitRR(this, kPPC_BitcastDoubleToInt64, node); in VisitBitcastFloat64ToInt64()
1053 void InstructionSelector::VisitBitcastInt32ToFloat32(Node* node) { in VisitBitcastInt32ToFloat32() argument
1054 VisitRR(this, kPPC_BitcastInt32ToFloat32, node); in VisitBitcastInt32ToFloat32()
1059 void InstructionSelector::VisitBitcastInt64ToFloat64(Node* node) { in VisitBitcastInt64ToFloat64() argument
1060 VisitRR(this, kPPC_BitcastInt64ToDouble, node); in VisitBitcastInt64ToFloat64()
1065 void InstructionSelector::VisitFloat32Add(Node* node) { in VisitFloat32Add() argument
1066 VisitRRR(this, kPPC_AddDouble, node); in VisitFloat32Add()
1070 void InstructionSelector::VisitFloat64Add(Node* node) { in VisitFloat64Add() argument
1072 VisitRRR(this, kPPC_AddDouble, node); in VisitFloat64Add()
1076 void InstructionSelector::VisitFloat32Sub(Node* node) { in VisitFloat32Sub() argument
1078 Float32BinopMatcher m(node); in VisitFloat32Sub()
1080 Emit(kPPC_NegDouble, g.DefineAsRegister(node), in VisitFloat32Sub()
1081 g.UseRegister(m.right().node())); in VisitFloat32Sub()
1084 VisitRRR(this, kPPC_SubDouble, node); in VisitFloat32Sub()
1088 void InstructionSelector::VisitFloat64Sub(Node* node) { in VisitFloat64Sub() argument
1091 Float64BinopMatcher m(node); in VisitFloat64Sub()
1094 CanCover(m.node(), m.right().node())) { in VisitFloat64Sub()
1096 CanCover(m.right().node(), m.right().InputAt(0))) { in VisitFloat64Sub()
1100 Emit(kPPC_CeilDouble, g.DefineAsRegister(node), in VisitFloat64Sub()
1101 g.UseRegister(mright0.right().node())); in VisitFloat64Sub()
1106 Emit(kPPC_NegDouble, g.DefineAsRegister(node), in VisitFloat64Sub()
1107 g.UseRegister(m.right().node())); in VisitFloat64Sub()
1110 VisitRRR(this, kPPC_SubDouble, node); in VisitFloat64Sub()
1114 void InstructionSelector::VisitFloat32Mul(Node* node) { in VisitFloat32Mul() argument
1115 VisitRRR(this, kPPC_MulDouble, node); in VisitFloat32Mul()
1119 void InstructionSelector::VisitFloat64Mul(Node* node) { in VisitFloat64Mul() argument
1121 VisitRRR(this, kPPC_MulDouble, node); in VisitFloat64Mul()
1125 void InstructionSelector::VisitFloat32Div(Node* node) { in VisitFloat32Div() argument
1126 VisitRRR(this, kPPC_DivDouble, node); in VisitFloat32Div()
1130 void InstructionSelector::VisitFloat64Div(Node* node) { in VisitFloat64Div() argument
1131 VisitRRR(this, kPPC_DivDouble, node); in VisitFloat64Div()
1135 void InstructionSelector::VisitFloat64Mod(Node* node) { in VisitFloat64Mod() argument
1137 Emit(kPPC_ModDouble, g.DefineAsFixed(node, d1), in VisitFloat64Mod()
1138 g.UseFixed(node->InputAt(0), d1), in VisitFloat64Mod()
1139 g.UseFixed(node->InputAt(1), d2))->MarkAsCall(); in VisitFloat64Mod()
1143 void InstructionSelector::VisitFloat32Max(Node* node) { UNREACHABLE(); } in VisitFloat32Max() argument
1146 void InstructionSelector::VisitFloat64Max(Node* node) { UNREACHABLE(); } in VisitFloat64Max() argument
1149 void InstructionSelector::VisitFloat32Min(Node* node) { UNREACHABLE(); } in VisitFloat32Min() argument
1152 void InstructionSelector::VisitFloat64Min(Node* node) { UNREACHABLE(); } in VisitFloat64Min() argument
1155 void InstructionSelector::VisitFloat32Abs(Node* node) { in VisitFloat32Abs() argument
1156 VisitRR(this, kPPC_AbsDouble, node); in VisitFloat32Abs()
1160 void InstructionSelector::VisitFloat64Abs(Node* node) { in VisitFloat64Abs() argument
1161 VisitRR(this, kPPC_AbsDouble, node); in VisitFloat64Abs()
1165 void InstructionSelector::VisitFloat32Sqrt(Node* node) { in VisitFloat32Sqrt() argument
1166 VisitRR(this, kPPC_SqrtDouble, node); in VisitFloat32Sqrt()
1170 void InstructionSelector::VisitFloat64Sqrt(Node* node) { in VisitFloat64Sqrt() argument
1171 VisitRR(this, kPPC_SqrtDouble, node); in VisitFloat64Sqrt()
1175 void InstructionSelector::VisitFloat32RoundDown(Node* node) { in VisitFloat32RoundDown() argument
1176 VisitRR(this, kPPC_FloorDouble, node); in VisitFloat32RoundDown()
1180 void InstructionSelector::VisitFloat64RoundDown(Node* node) { in VisitFloat64RoundDown() argument
1181 VisitRR(this, kPPC_FloorDouble, node); in VisitFloat64RoundDown()
1185 void InstructionSelector::VisitFloat32RoundUp(Node* node) { in VisitFloat32RoundUp() argument
1186 VisitRR(this, kPPC_CeilDouble, node); in VisitFloat32RoundUp()
1190 void InstructionSelector::VisitFloat64RoundUp(Node* node) { in VisitFloat64RoundUp() argument
1191 VisitRR(this, kPPC_CeilDouble, node); in VisitFloat64RoundUp()
1195 void InstructionSelector::VisitFloat32RoundTruncate(Node* node) { in VisitFloat32RoundTruncate() argument
1196 VisitRR(this, kPPC_TruncateDouble, node); in VisitFloat32RoundTruncate()
1200 void InstructionSelector::VisitFloat64RoundTruncate(Node* node) { in VisitFloat64RoundTruncate() argument
1201 VisitRR(this, kPPC_TruncateDouble, node); in VisitFloat64RoundTruncate()
1205 void InstructionSelector::VisitFloat64RoundTiesAway(Node* node) { in VisitFloat64RoundTiesAway() argument
1206 VisitRR(this, kPPC_RoundDouble, node); in VisitFloat64RoundTiesAway()
1210 void InstructionSelector::VisitFloat32RoundTiesEven(Node* node) { in VisitFloat32RoundTiesEven() argument
1215 void InstructionSelector::VisitFloat64RoundTiesEven(Node* node) { in VisitFloat64RoundTiesEven() argument
1220 void InstructionSelector::VisitInt32AddWithOverflow(Node* node) { in VisitInt32AddWithOverflow() argument
1221 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { in VisitInt32AddWithOverflow()
1223 return VisitBinop<Int32BinopMatcher>(this, node, kPPC_AddWithOverflow32, in VisitInt32AddWithOverflow()
1227 VisitBinop<Int32BinopMatcher>(this, node, kPPC_AddWithOverflow32, kInt16Imm, in VisitInt32AddWithOverflow()
1232 void InstructionSelector::VisitInt32SubWithOverflow(Node* node) { in VisitInt32SubWithOverflow() argument
1233 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { in VisitInt32SubWithOverflow()
1235 return VisitBinop<Int32BinopMatcher>(this, node, kPPC_SubWithOverflow32, in VisitInt32SubWithOverflow()
1239 VisitBinop<Int32BinopMatcher>(this, node, kPPC_SubWithOverflow32, in VisitInt32SubWithOverflow()
1245 void InstructionSelector::VisitInt64AddWithOverflow(Node* node) { in VisitInt64AddWithOverflow() argument
1246 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { in VisitInt64AddWithOverflow()
1248 return VisitBinop<Int64BinopMatcher>(this, node, kPPC_Add, kInt16Imm, in VisitInt64AddWithOverflow()
1252 VisitBinop<Int64BinopMatcher>(this, node, kPPC_Add, kInt16Imm, &cont); in VisitInt64AddWithOverflow()
1256 void InstructionSelector::VisitInt64SubWithOverflow(Node* node) { in VisitInt64SubWithOverflow() argument
1257 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { in VisitInt64SubWithOverflow()
1259 return VisitBinop<Int64BinopMatcher>(this, node, kPPC_Sub, kInt16Imm_Negate, in VisitInt64SubWithOverflow()
1263 VisitBinop<Int64BinopMatcher>(this, node, kPPC_Sub, kInt16Imm_Negate, &cont); in VisitInt64SubWithOverflow()
1302 void VisitWordCompare(InstructionSelector* selector, Node* node, in VisitWordCompare() argument
1306 Node* left = node->InputAt(0); in VisitWordCompare()
1307 Node* right = node->InputAt(1); in VisitWordCompare()
1324 void VisitWord32Compare(InstructionSelector* selector, Node* node, in VisitWord32Compare() argument
1327 VisitWordCompare(selector, node, kPPC_Cmp32, cont, false, mode); in VisitWord32Compare()
1332 void VisitWord64Compare(InstructionSelector* selector, Node* node, in VisitWord64Compare() argument
1335 VisitWordCompare(selector, node, kPPC_Cmp64, cont, false, mode); in VisitWord64Compare()
1341 void VisitFloat32Compare(InstructionSelector* selector, Node* node, in VisitFloat32Compare() argument
1344 Node* left = node->InputAt(0); in VisitFloat32Compare()
1345 Node* right = node->InputAt(1); in VisitFloat32Compare()
1352 void VisitFloat64Compare(InstructionSelector* selector, Node* node, in VisitFloat64Compare() argument
1355 Node* left = node->InputAt(0); in VisitFloat64Compare()
1356 Node* right = node->InputAt(1); in VisitFloat64Compare()
1374 value = m.left().node(); in VisitWordCompareZero()
1437 Node* const node = value->InputAt(0); in VisitWordCompareZero() local
1438 Node* const result = NodeProperties::FindProjection(node, 0); in VisitWordCompareZero()
1440 switch (node->opcode()) { in VisitWordCompareZero()
1444 selector, node, kPPC_AddWithOverflow32, kInt16Imm, cont); in VisitWordCompareZero()
1447 return VisitBinop<Int32BinopMatcher>(selector, node, in VisitWordCompareZero()
1453 return VisitBinop<Int64BinopMatcher>(selector, node, kPPC_Add, in VisitWordCompareZero()
1457 return VisitBinop<Int64BinopMatcher>(selector, node, kPPC_Sub, in VisitWordCompareZero()
1532 void InstructionSelector::VisitSwitch(Node* node, const SwitchInfo& sw) { in VisitSwitch() argument
1534 InstructionOperand value_operand = g.UseRegister(node->InputAt(0)); in VisitSwitch()
1560 void InstructionSelector::VisitWord32Equal(Node* const node) { in VisitWord32Equal() argument
1561 FlagsContinuation cont(kEqual, node); in VisitWord32Equal()
1562 Int32BinopMatcher m(node); in VisitWord32Equal()
1564 return VisitWord32CompareZero(this, m.node(), m.left().node(), &cont); in VisitWord32Equal()
1566 VisitWord32Compare(this, node, &cont); in VisitWord32Equal()
1570 void InstructionSelector::VisitInt32LessThan(Node* node) { in VisitInt32LessThan() argument
1571 FlagsContinuation cont(kSignedLessThan, node); in VisitInt32LessThan()
1572 VisitWord32Compare(this, node, &cont); in VisitInt32LessThan()
1576 void InstructionSelector::VisitInt32LessThanOrEqual(Node* node) { in VisitInt32LessThanOrEqual() argument
1577 FlagsContinuation cont(kSignedLessThanOrEqual, node); in VisitInt32LessThanOrEqual()
1578 VisitWord32Compare(this, node, &cont); in VisitInt32LessThanOrEqual()
1582 void InstructionSelector::VisitUint32LessThan(Node* node) { in VisitUint32LessThan() argument
1583 FlagsContinuation cont(kUnsignedLessThan, node); in VisitUint32LessThan()
1584 VisitWord32Compare(this, node, &cont); in VisitUint32LessThan()
1588 void InstructionSelector::VisitUint32LessThanOrEqual(Node* node) { in VisitUint32LessThanOrEqual() argument
1589 FlagsContinuation cont(kUnsignedLessThanOrEqual, node); in VisitUint32LessThanOrEqual()
1590 VisitWord32Compare(this, node, &cont); in VisitUint32LessThanOrEqual()
1595 void InstructionSelector::VisitWord64Equal(Node* const node) { in VisitWord64Equal() argument
1596 FlagsContinuation cont(kEqual, node); in VisitWord64Equal()
1597 Int64BinopMatcher m(node); in VisitWord64Equal()
1599 return VisitWord64CompareZero(this, m.node(), m.left().node(), &cont); in VisitWord64Equal()
1601 VisitWord64Compare(this, node, &cont); in VisitWord64Equal()
1605 void InstructionSelector::VisitInt64LessThan(Node* node) { in VisitInt64LessThan() argument
1606 FlagsContinuation cont(kSignedLessThan, node); in VisitInt64LessThan()
1607 VisitWord64Compare(this, node, &cont); in VisitInt64LessThan()
1611 void InstructionSelector::VisitInt64LessThanOrEqual(Node* node) { in VisitInt64LessThanOrEqual() argument
1612 FlagsContinuation cont(kSignedLessThanOrEqual, node); in VisitInt64LessThanOrEqual()
1613 VisitWord64Compare(this, node, &cont); in VisitInt64LessThanOrEqual()
1617 void InstructionSelector::VisitUint64LessThan(Node* node) { in VisitUint64LessThan() argument
1618 FlagsContinuation cont(kUnsignedLessThan, node); in VisitUint64LessThan()
1619 VisitWord64Compare(this, node, &cont); in VisitUint64LessThan()
1623 void InstructionSelector::VisitUint64LessThanOrEqual(Node* node) { in VisitUint64LessThanOrEqual() argument
1624 FlagsContinuation cont(kUnsignedLessThanOrEqual, node); in VisitUint64LessThanOrEqual()
1625 VisitWord64Compare(this, node, &cont); in VisitUint64LessThanOrEqual()
1630 void InstructionSelector::VisitFloat32Equal(Node* node) { in VisitFloat32Equal() argument
1631 FlagsContinuation cont(kEqual, node); in VisitFloat32Equal()
1632 VisitFloat32Compare(this, node, &cont); in VisitFloat32Equal()
1636 void InstructionSelector::VisitFloat32LessThan(Node* node) { in VisitFloat32LessThan() argument
1637 FlagsContinuation cont(kUnsignedLessThan, node); in VisitFloat32LessThan()
1638 VisitFloat32Compare(this, node, &cont); in VisitFloat32LessThan()
1642 void InstructionSelector::VisitFloat32LessThanOrEqual(Node* node) { in VisitFloat32LessThanOrEqual() argument
1643 FlagsContinuation cont(kUnsignedLessThanOrEqual, node); in VisitFloat32LessThanOrEqual()
1644 VisitFloat32Compare(this, node, &cont); in VisitFloat32LessThanOrEqual()
1648 void InstructionSelector::VisitFloat64Equal(Node* node) { in VisitFloat64Equal() argument
1649 FlagsContinuation cont(kEqual, node); in VisitFloat64Equal()
1650 VisitFloat64Compare(this, node, &cont); in VisitFloat64Equal()
1654 void InstructionSelector::VisitFloat64LessThan(Node* node) { in VisitFloat64LessThan() argument
1655 FlagsContinuation cont(kUnsignedLessThan, node); in VisitFloat64LessThan()
1656 VisitFloat64Compare(this, node, &cont); in VisitFloat64LessThan()
1660 void InstructionSelector::VisitFloat64LessThanOrEqual(Node* node) { in VisitFloat64LessThanOrEqual() argument
1661 FlagsContinuation cont(kUnsignedLessThanOrEqual, node); in VisitFloat64LessThanOrEqual()
1662 VisitFloat64Compare(this, node, &cont); in VisitFloat64LessThanOrEqual()
1668 Node* node) { in EmitPrepareArguments() argument
1680 Emit(kPPC_StoreToStackSlot, g.NoOutput(), g.UseRegister(input.node()), in EmitPrepareArguments()
1690 DCHECK(input.node()); in EmitPrepareArguments()
1691 Emit(kPPC_PushFrame, g.NoOutput(), g.UseRegister(input.node()), in EmitPrepareArguments()
1695 if (input.node()) { in EmitPrepareArguments()
1696 Emit(kPPC_StoreToStackSlot, g.NoOutput(), g.UseRegister(input.node()), in EmitPrepareArguments()
1709 void InstructionSelector::VisitFloat64ExtractLowWord32(Node* node) { in VisitFloat64ExtractLowWord32() argument
1711 Emit(kPPC_DoubleExtractLowWord32, g.DefineAsRegister(node), in VisitFloat64ExtractLowWord32()
1712 g.UseRegister(node->InputAt(0))); in VisitFloat64ExtractLowWord32()
1716 void InstructionSelector::VisitFloat64ExtractHighWord32(Node* node) { in VisitFloat64ExtractHighWord32() argument
1718 Emit(kPPC_DoubleExtractHighWord32, g.DefineAsRegister(node), in VisitFloat64ExtractHighWord32()
1719 g.UseRegister(node->InputAt(0))); in VisitFloat64ExtractHighWord32()
1723 void InstructionSelector::VisitFloat64InsertLowWord32(Node* node) { in VisitFloat64InsertLowWord32() argument
1725 Node* left = node->InputAt(0); in VisitFloat64InsertLowWord32()
1726 Node* right = node->InputAt(1); in VisitFloat64InsertLowWord32()
1728 CanCover(node, left)) { in VisitFloat64InsertLowWord32()
1730 Emit(kPPC_DoubleConstruct, g.DefineAsRegister(node), g.UseRegister(left), in VisitFloat64InsertLowWord32()
1734 Emit(kPPC_DoubleInsertLowWord32, g.DefineSameAsFirst(node), in VisitFloat64InsertLowWord32()
1739 void InstructionSelector::VisitFloat64InsertHighWord32(Node* node) { in VisitFloat64InsertHighWord32() argument
1741 Node* left = node->InputAt(0); in VisitFloat64InsertHighWord32()
1742 Node* right = node->InputAt(1); in VisitFloat64InsertHighWord32()
1744 CanCover(node, left)) { in VisitFloat64InsertHighWord32()
1746 Emit(kPPC_DoubleConstruct, g.DefineAsRegister(node), g.UseRegister(right), in VisitFloat64InsertHighWord32()
1750 Emit(kPPC_DoubleInsertHighWord32, g.DefineSameAsFirst(node), in VisitFloat64InsertHighWord32()