Lines Matching refs:node

33   InstructionOperand UseOperand(Node* node, ImmediateMode mode) {  in UseOperand()  argument
34 if (CanBeImmediate(node, mode)) { in UseOperand()
35 return UseImmediate(node); in UseOperand()
37 return UseRegister(node); in UseOperand()
42 InstructionOperand UseRegisterOrImmediateZero(Node* node) { in UseRegisterOrImmediateZero() argument
43 if (IsIntegerConstant(node) && (GetIntegerConstantValue(node) == 0)) { in UseRegisterOrImmediateZero()
44 return UseImmediate(node); in UseRegisterOrImmediateZero()
46 return UseRegister(node); in UseRegisterOrImmediateZero()
51 InstructionOperand UseImmediateOrTemp(Node* node, int32_t value) { in UseImmediateOrTemp() argument
52 if (GetIntegerConstantValue(node) == value) { in UseImmediateOrTemp()
53 return UseImmediate(node); in UseImmediateOrTemp()
58 bool IsIntegerConstant(Node* node) { in IsIntegerConstant() argument
59 return (node->opcode() == IrOpcode::kInt32Constant) || in IsIntegerConstant()
60 (node->opcode() == IrOpcode::kInt64Constant); in IsIntegerConstant()
63 int64_t GetIntegerConstantValue(Node* node) { in GetIntegerConstantValue() argument
64 if (node->opcode() == IrOpcode::kInt32Constant) { in GetIntegerConstantValue()
65 return OpParameter<int32_t>(node); in GetIntegerConstantValue()
67 DCHECK(node->opcode() == IrOpcode::kInt64Constant); in GetIntegerConstantValue()
68 return OpParameter<int64_t>(node); in GetIntegerConstantValue()
71 bool CanBeImmediate(Node* node, ImmediateMode mode) { in CanBeImmediate() argument
72 return IsIntegerConstant(node) && in CanBeImmediate()
73 CanBeImmediate(GetIntegerConstantValue(node), mode); in CanBeImmediate()
119 void VisitRR(InstructionSelector* selector, ArchOpcode opcode, Node* node) { in VisitRR() argument
121 selector->Emit(opcode, g.DefineAsRegister(node), in VisitRR()
122 g.UseRegister(node->InputAt(0))); in VisitRR()
126 void VisitRRR(InstructionSelector* selector, ArchOpcode opcode, Node* node) { in VisitRRR() argument
128 selector->Emit(opcode, g.DefineAsRegister(node), in VisitRRR()
129 g.UseRegister(node->InputAt(0)), in VisitRRR()
130 g.UseRegister(node->InputAt(1))); in VisitRRR()
134 void VisitRRO(InstructionSelector* selector, ArchOpcode opcode, Node* node, in VisitRRO() argument
137 selector->Emit(opcode, g.DefineAsRegister(node), in VisitRRO()
138 g.UseRegister(node->InputAt(0)), in VisitRRO()
139 g.UseOperand(node->InputAt(1), operand_mode)); in VisitRRO()
143 bool TryMatchAnyShift(InstructionSelector* selector, Node* node, in TryMatchAnyShift() argument
147 if (!selector->CanCover(node, input_node)) return false; in TryMatchAnyShift()
178 Node* node, Node* left_node, Node* right_node, in TryMatchAnyExtend() argument
181 if (!selector->CanCover(node, right_node)) return false; in TryMatchAnyExtend()
190 *right_op = g->UseRegister(mright.left().node()); in TryMatchAnyExtend()
197 if (selector->CanCover(mright.node(), mright.left().node()) && in TryMatchAnyExtend()
199 Int32BinopMatcher mleft_of_right(mright.left().node()); in TryMatchAnyExtend()
204 *right_op = g->UseRegister(mleft_of_right.left().node()); in TryMatchAnyExtend()
217 void VisitBinop(InstructionSelector* selector, Node* node, in VisitBinop() argument
221 Matcher m(node); in VisitBinop()
237 Node* left_node = m.left().node(); in VisitBinop()
238 Node* right_node = m.right().node(); in VisitBinop()
248 TryMatchAnyExtend(&g, selector, node, left_node, right_node, in VisitBinop()
252 TryMatchAnyExtend(&g, selector, node, right_node, left_node, in VisitBinop()
256 } else if (TryMatchAnyShift(selector, node, right_node, &opcode, in VisitBinop()
260 inputs[input_count++] = g.UseRegister(m_shift.left().node()); in VisitBinop()
261 inputs[input_count++] = g.UseImmediate(m_shift.right().node()); in VisitBinop()
262 } else if (can_commute && TryMatchAnyShift(selector, node, left_node, &opcode, in VisitBinop()
267 inputs[input_count++] = g.UseRegister(m_shift.left().node()); in VisitBinop()
268 inputs[input_count++] = g.UseImmediate(m_shift.right().node()); in VisitBinop()
280 outputs[output_count++] = g.DefineAsRegister(node); in VisitBinop()
299 void VisitBinop(InstructionSelector* selector, Node* node, ArchOpcode opcode, in VisitBinop() argument
302 VisitBinop<Matcher>(selector, node, opcode, operand_mode, &cont); in VisitBinop()
307 void VisitAddSub(InstructionSelector* selector, Node* node, ArchOpcode opcode, in VisitAddSub() argument
310 Matcher m(node); in VisitAddSub()
313 selector->Emit(negate_opcode, g.DefineAsRegister(node), in VisitAddSub()
314 g.UseRegister(m.left().node()), in VisitAddSub()
317 VisitBinop<Matcher>(selector, node, opcode, kArithmeticImm); in VisitAddSub()
340 void InstructionSelector::VisitLoad(Node* node) { in VisitLoad() argument
341 LoadRepresentation load_rep = LoadRepresentationOf(node->op()); in VisitLoad()
343 Node* base = node->InputAt(0); in VisitLoad()
344 Node* index = node->InputAt(1); in VisitLoad()
380 g.DefineAsRegister(node), g.UseRegister(base), g.UseImmediate(index)); in VisitLoad()
383 g.DefineAsRegister(node), g.UseRegister(base), g.UseRegister(index)); in VisitLoad()
388 void InstructionSelector::VisitStore(Node* node) { in VisitStore() argument
390 Node* base = node->InputAt(0); in VisitStore()
391 Node* index = node->InputAt(1); in VisitStore()
392 Node* value = node->InputAt(2); in VisitStore()
394 StoreRepresentation store_rep = StoreRepresentationOf(node->op()); in VisitStore()
473 void InstructionSelector::VisitCheckedLoad(Node* node) { in VisitCheckedLoad() argument
474 CheckedLoadRepresentation load_rep = CheckedLoadRepresentationOf(node->op()); in VisitCheckedLoad()
476 Node* const buffer = node->InputAt(0); in VisitCheckedLoad()
477 Node* const offset = node->InputAt(1); in VisitCheckedLoad()
478 Node* const length = node->InputAt(2); in VisitCheckedLoad()
505 Emit(opcode, g.DefineAsRegister(node), g.UseRegister(buffer), in VisitCheckedLoad()
510 void InstructionSelector::VisitCheckedStore(Node* node) { in VisitCheckedStore() argument
511 MachineRepresentation rep = CheckedStoreRepresentationOf(node->op()); in VisitCheckedStore()
513 Node* const buffer = node->InputAt(0); in VisitCheckedStore()
514 Node* const offset = node->InputAt(1); in VisitCheckedStore()
515 Node* const length = node->InputAt(2); in VisitCheckedStore()
516 Node* const value = node->InputAt(3); in VisitCheckedStore()
549 static void VisitLogical(InstructionSelector* selector, Node* node, Matcher* m, in VisitLogical() argument
581 Matcher mleft(m->left().node()); in VisitLogical()
584 selector->Emit(inv_opcode, g.DefineAsRegister(node), in VisitLogical()
585 g.UseRegister(m->right().node()), in VisitLogical()
586 g.UseRegister(mleft.left().node())); in VisitLogical()
594 Matcher mright(m->right().node()); in VisitLogical()
597 selector->Emit(inv_opcode, g.DefineAsRegister(node), in VisitLogical()
598 g.UseRegister(m->left().node()), in VisitLogical()
599 g.UseRegister(mright.left().node())); in VisitLogical()
605 selector->Emit(kArm64Not32, g.DefineAsRegister(node), in VisitLogical()
606 g.UseRegister(m->left().node())); in VisitLogical()
608 selector->Emit(kArm64Not, g.DefineAsRegister(node), in VisitLogical()
609 g.UseRegister(m->left().node())); in VisitLogical()
611 VisitBinop<Matcher>(selector, node, opcode, imm_mode); in VisitLogical()
616 void InstructionSelector::VisitWord32And(Node* node) { in VisitWord32And() argument
618 Int32BinopMatcher m(node); in VisitWord32And()
619 if (m.left().IsWord32Shr() && CanCover(node, m.left().node()) && in VisitWord32And()
630 Int32BinopMatcher mleft(m.left().node()); in VisitWord32And()
641 Emit(kArm64Ubfx32, g.DefineAsRegister(node), in VisitWord32And()
642 g.UseRegister(mleft.left().node()), in VisitWord32And()
643 g.UseImmediateOrTemp(mleft.right().node(), lsb), in VisitWord32And()
651 this, node, &m, kArm64And32, CanCover(node, m.left().node()), in VisitWord32And()
652 CanCover(node, m.right().node()), kLogical32Imm); in VisitWord32And()
656 void InstructionSelector::VisitWord64And(Node* node) { in VisitWord64And() argument
658 Int64BinopMatcher m(node); in VisitWord64And()
659 if (m.left().IsWord64Shr() && CanCover(node, m.left().node()) && in VisitWord64And()
670 Int64BinopMatcher mleft(m.left().node()); in VisitWord64And()
681 Emit(kArm64Ubfx, g.DefineAsRegister(node), in VisitWord64And()
682 g.UseRegister(mleft.left().node()), in VisitWord64And()
683 g.UseImmediateOrTemp(mleft.right().node(), lsb), in VisitWord64And()
691 this, node, &m, kArm64And, CanCover(node, m.left().node()), in VisitWord64And()
692 CanCover(node, m.right().node()), kLogical64Imm); in VisitWord64And()
696 void InstructionSelector::VisitWord32Or(Node* node) { in VisitWord32Or() argument
697 Int32BinopMatcher m(node); in VisitWord32Or()
699 this, node, &m, kArm64Or32, CanCover(node, m.left().node()), in VisitWord32Or()
700 CanCover(node, m.right().node()), kLogical32Imm); in VisitWord32Or()
704 void InstructionSelector::VisitWord64Or(Node* node) { in VisitWord64Or() argument
705 Int64BinopMatcher m(node); in VisitWord64Or()
707 this, node, &m, kArm64Or, CanCover(node, m.left().node()), in VisitWord64Or()
708 CanCover(node, m.right().node()), kLogical64Imm); in VisitWord64Or()
712 void InstructionSelector::VisitWord32Xor(Node* node) { in VisitWord32Xor() argument
713 Int32BinopMatcher m(node); in VisitWord32Xor()
715 this, node, &m, kArm64Eor32, CanCover(node, m.left().node()), in VisitWord32Xor()
716 CanCover(node, m.right().node()), kLogical32Imm); in VisitWord32Xor()
720 void InstructionSelector::VisitWord64Xor(Node* node) { in VisitWord64Xor() argument
721 Int64BinopMatcher m(node); in VisitWord64Xor()
723 this, node, &m, kArm64Eor, CanCover(node, m.left().node()), in VisitWord64Xor()
724 CanCover(node, m.right().node()), kLogical64Imm); in VisitWord64Xor()
728 void InstructionSelector::VisitWord32Shl(Node* node) { in VisitWord32Shl() argument
729 Int32BinopMatcher m(node); in VisitWord32Shl()
730 if (m.left().IsWord32And() && CanCover(node, m.left().node()) && in VisitWord32Shl()
733 Int32BinopMatcher mleft(m.left().node()); in VisitWord32Shl()
746 Emit(kArm64Lsl32, g.DefineAsRegister(node), in VisitWord32Shl()
747 g.UseRegister(mleft.left().node()), in VisitWord32Shl()
748 g.UseImmediate(m.right().node())); in VisitWord32Shl()
753 Emit(kArm64Ubfiz32, g.DefineAsRegister(node), in VisitWord32Shl()
754 g.UseRegister(mleft.left().node()), in VisitWord32Shl()
755 g.UseImmediate(m.right().node()), g.TempImmediate(mask_width)); in VisitWord32Shl()
761 VisitRRO(this, kArm64Lsl32, node, kShift32Imm); in VisitWord32Shl()
765 void InstructionSelector::VisitWord64Shl(Node* node) { in VisitWord64Shl() argument
767 Int64BinopMatcher m(node); in VisitWord64Shl()
772 Emit(kArm64Lsl, g.DefineAsRegister(node), in VisitWord64Shl()
773 g.UseRegister(m.left().node()->InputAt(0)), in VisitWord64Shl()
774 g.UseImmediate(m.right().node())); in VisitWord64Shl()
777 VisitRRO(this, kArm64Lsl, node, kShift64Imm); in VisitWord64Shl()
783 bool TryEmitBitfieldExtract32(InstructionSelector* selector, Node* node) { in TryEmitBitfieldExtract32() argument
785 Int32BinopMatcher m(node); in TryEmitBitfieldExtract32()
786 if (selector->CanCover(node, m.left().node()) && m.left().IsWord32Shl()) { in TryEmitBitfieldExtract32()
789 Int32BinopMatcher mleft(m.left().node()); in TryEmitBitfieldExtract32()
798 selector->Emit(opcode, g.DefineAsRegister(node), in TryEmitBitfieldExtract32()
799 g.UseRegister(mleft.left().node()), g.TempImmediate(0), in TryEmitBitfieldExtract32()
810 void InstructionSelector::VisitWord32Shr(Node* node) { in VisitWord32Shr() argument
811 Int32BinopMatcher m(node); in VisitWord32Shr()
814 Int32BinopMatcher mleft(m.left().node()); in VisitWord32Shr()
824 Emit(kArm64Ubfx32, g.DefineAsRegister(node), in VisitWord32Shr()
825 g.UseRegister(mleft.left().node()), in VisitWord32Shr()
826 g.UseImmediateOrTemp(m.right().node(), lsb), in VisitWord32Shr()
831 } else if (TryEmitBitfieldExtract32(this, node)) { in VisitWord32Shr()
836 CanCover(node, node->InputAt(0))) { in VisitWord32Shr()
840 Node* left = m.left().node(); in VisitWord32Shr()
845 Emit(kArm64Lsr, g.DefineAsRegister(node), smull_operand, in VisitWord32Shr()
850 VisitRRO(this, kArm64Lsr32, node, kShift32Imm); in VisitWord32Shr()
854 void InstructionSelector::VisitWord64Shr(Node* node) { in VisitWord64Shr() argument
855 Int64BinopMatcher m(node); in VisitWord64Shr()
858 Int64BinopMatcher mleft(m.left().node()); in VisitWord64Shr()
868 Emit(kArm64Ubfx, g.DefineAsRegister(node), in VisitWord64Shr()
869 g.UseRegister(mleft.left().node()), in VisitWord64Shr()
870 g.UseImmediateOrTemp(m.right().node(), lsb), in VisitWord64Shr()
876 VisitRRO(this, kArm64Lsr, node, kShift64Imm); in VisitWord64Shr()
880 void InstructionSelector::VisitWord32Sar(Node* node) { in VisitWord32Sar() argument
881 if (TryEmitBitfieldExtract32(this, node)) { in VisitWord32Sar()
885 Int32BinopMatcher m(node); in VisitWord32Sar()
887 CanCover(node, node->InputAt(0))) { in VisitWord32Sar()
891 Node* left = m.left().node(); in VisitWord32Sar()
896 Emit(kArm64Asr, g.DefineAsRegister(node), smull_operand, in VisitWord32Sar()
902 CanCover(node, node->InputAt(0))) { in VisitWord32Sar()
903 Node* add_node = m.left().node(); in VisitWord32Sar()
906 CanCover(add_node, madd_node.left().node())) { in VisitWord32Sar()
912 Node* mul_node = madd_node.left().node(); in VisitWord32Sar()
923 Emit(kArm64Asr32, g.DefineAsRegister(node), add_operand, in VisitWord32Sar()
924 g.UseImmediate(node->InputAt(1))); in VisitWord32Sar()
929 VisitRRO(this, kArm64Asr32, node, kShift32Imm); in VisitWord32Sar()
933 void InstructionSelector::VisitWord64Sar(Node* node) { in VisitWord64Sar() argument
934 VisitRRO(this, kArm64Asr, node, kShift64Imm); in VisitWord64Sar()
938 void InstructionSelector::VisitWord32Ror(Node* node) { in VisitWord32Ror() argument
939 VisitRRO(this, kArm64Ror32, node, kShift32Imm); in VisitWord32Ror()
943 void InstructionSelector::VisitWord64Ror(Node* node) { in VisitWord64Ror() argument
944 VisitRRO(this, kArm64Ror, node, kShift64Imm); in VisitWord64Ror()
948 void InstructionSelector::VisitWord64Clz(Node* node) { in VisitWord64Clz() argument
950 Emit(kArm64Clz, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0))); in VisitWord64Clz()
954 void InstructionSelector::VisitWord32Clz(Node* node) { in VisitWord32Clz() argument
956 Emit(kArm64Clz32, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0))); in VisitWord32Clz()
960 void InstructionSelector::VisitWord32Ctz(Node* node) { UNREACHABLE(); } in VisitWord32Ctz() argument
963 void InstructionSelector::VisitWord64Ctz(Node* node) { UNREACHABLE(); } in VisitWord64Ctz() argument
966 void InstructionSelector::VisitWord32Popcnt(Node* node) { UNREACHABLE(); } in VisitWord32Popcnt() argument
969 void InstructionSelector::VisitWord64Popcnt(Node* node) { UNREACHABLE(); } in VisitWord64Popcnt() argument
972 void InstructionSelector::VisitInt32Add(Node* node) { in VisitInt32Add() argument
974 Int32BinopMatcher m(node); in VisitInt32Add()
976 if (m.left().IsInt32Mul() && CanCover(node, m.left().node())) { in VisitInt32Add()
977 Int32BinopMatcher mleft(m.left().node()); in VisitInt32Add()
980 Emit(kArm64Madd32, g.DefineAsRegister(node), in VisitInt32Add()
981 g.UseRegister(mleft.left().node()), in VisitInt32Add()
982 g.UseRegister(mleft.right().node()), in VisitInt32Add()
983 g.UseRegister(m.right().node())); in VisitInt32Add()
988 if (m.right().IsInt32Mul() && CanCover(node, m.right().node())) { in VisitInt32Add()
989 Int32BinopMatcher mright(m.right().node()); in VisitInt32Add()
992 Emit(kArm64Madd32, g.DefineAsRegister(node), in VisitInt32Add()
993 g.UseRegister(mright.left().node()), in VisitInt32Add()
994 g.UseRegister(mright.right().node()), in VisitInt32Add()
995 g.UseRegister(m.left().node())); in VisitInt32Add()
999 VisitAddSub<Int32BinopMatcher>(this, node, kArm64Add32, kArm64Sub32); in VisitInt32Add()
1003 void InstructionSelector::VisitInt64Add(Node* node) { in VisitInt64Add() argument
1005 Int64BinopMatcher m(node); in VisitInt64Add()
1007 if (m.left().IsInt64Mul() && CanCover(node, m.left().node())) { in VisitInt64Add()
1008 Int64BinopMatcher mleft(m.left().node()); in VisitInt64Add()
1011 Emit(kArm64Madd, g.DefineAsRegister(node), in VisitInt64Add()
1012 g.UseRegister(mleft.left().node()), in VisitInt64Add()
1013 g.UseRegister(mleft.right().node()), in VisitInt64Add()
1014 g.UseRegister(m.right().node())); in VisitInt64Add()
1019 if (m.right().IsInt64Mul() && CanCover(node, m.right().node())) { in VisitInt64Add()
1020 Int64BinopMatcher mright(m.right().node()); in VisitInt64Add()
1023 Emit(kArm64Madd, g.DefineAsRegister(node), in VisitInt64Add()
1024 g.UseRegister(mright.left().node()), in VisitInt64Add()
1025 g.UseRegister(mright.right().node()), in VisitInt64Add()
1026 g.UseRegister(m.left().node())); in VisitInt64Add()
1030 VisitAddSub<Int64BinopMatcher>(this, node, kArm64Add, kArm64Sub); in VisitInt64Add()
1034 void InstructionSelector::VisitInt32Sub(Node* node) { in VisitInt32Sub() argument
1036 Int32BinopMatcher m(node); in VisitInt32Sub()
1039 if (m.right().IsInt32Mul() && CanCover(node, m.right().node())) { in VisitInt32Sub()
1040 Int32BinopMatcher mright(m.right().node()); in VisitInt32Sub()
1043 Emit(kArm64Msub32, g.DefineAsRegister(node), in VisitInt32Sub()
1044 g.UseRegister(mright.left().node()), in VisitInt32Sub()
1045 g.UseRegister(mright.right().node()), in VisitInt32Sub()
1046 g.UseRegister(m.left().node())); in VisitInt32Sub()
1051 VisitAddSub<Int32BinopMatcher>(this, node, kArm64Sub32, kArm64Add32); in VisitInt32Sub()
1055 void InstructionSelector::VisitInt64Sub(Node* node) { in VisitInt64Sub() argument
1057 Int64BinopMatcher m(node); in VisitInt64Sub()
1060 if (m.right().IsInt64Mul() && CanCover(node, m.right().node())) { in VisitInt64Sub()
1061 Int64BinopMatcher mright(m.right().node()); in VisitInt64Sub()
1064 Emit(kArm64Msub, g.DefineAsRegister(node), in VisitInt64Sub()
1065 g.UseRegister(mright.left().node()), in VisitInt64Sub()
1066 g.UseRegister(mright.right().node()), in VisitInt64Sub()
1067 g.UseRegister(m.left().node())); in VisitInt64Sub()
1072 VisitAddSub<Int64BinopMatcher>(this, node, kArm64Sub, kArm64Add); in VisitInt64Sub()
1076 void InstructionSelector::VisitInt32Mul(Node* node) { in VisitInt32Mul() argument
1078 Int32BinopMatcher m(node); in VisitInt32Mul()
1085 g.DefineAsRegister(node), g.UseRegister(m.left().node()), in VisitInt32Mul()
1086 g.UseRegister(m.left().node()), g.TempImmediate(shift)); in VisitInt32Mul()
1090 if (m.left().IsInt32Sub() && CanCover(node, m.left().node())) { in VisitInt32Mul()
1091 Int32BinopMatcher mleft(m.left().node()); in VisitInt32Mul()
1095 Emit(kArm64Mneg32, g.DefineAsRegister(node), in VisitInt32Mul()
1096 g.UseRegister(mleft.right().node()), in VisitInt32Mul()
1097 g.UseRegister(m.right().node())); in VisitInt32Mul()
1102 if (m.right().IsInt32Sub() && CanCover(node, m.right().node())) { in VisitInt32Mul()
1103 Int32BinopMatcher mright(m.right().node()); in VisitInt32Mul()
1107 Emit(kArm64Mneg32, g.DefineAsRegister(node), in VisitInt32Mul()
1108 g.UseRegister(m.left().node()), in VisitInt32Mul()
1109 g.UseRegister(mright.right().node())); in VisitInt32Mul()
1114 VisitRRR(this, kArm64Mul32, node); in VisitInt32Mul()
1118 void InstructionSelector::VisitInt64Mul(Node* node) { in VisitInt64Mul() argument
1120 Int64BinopMatcher m(node); in VisitInt64Mul()
1127 g.DefineAsRegister(node), g.UseRegister(m.left().node()), in VisitInt64Mul()
1128 g.UseRegister(m.left().node()), g.TempImmediate(shift)); in VisitInt64Mul()
1132 if (m.left().IsInt64Sub() && CanCover(node, m.left().node())) { in VisitInt64Mul()
1133 Int64BinopMatcher mleft(m.left().node()); in VisitInt64Mul()
1137 Emit(kArm64Mneg, g.DefineAsRegister(node), in VisitInt64Mul()
1138 g.UseRegister(mleft.right().node()), in VisitInt64Mul()
1139 g.UseRegister(m.right().node())); in VisitInt64Mul()
1144 if (m.right().IsInt64Sub() && CanCover(node, m.right().node())) { in VisitInt64Mul()
1145 Int64BinopMatcher mright(m.right().node()); in VisitInt64Mul()
1149 Emit(kArm64Mneg, g.DefineAsRegister(node), g.UseRegister(m.left().node()), in VisitInt64Mul()
1150 g.UseRegister(mright.right().node())); in VisitInt64Mul()
1155 VisitRRR(this, kArm64Mul, node); in VisitInt64Mul()
1159 void InstructionSelector::VisitInt32MulHigh(Node* node) { in VisitInt32MulHigh() argument
1162 Emit(kArm64Smull, smull_operand, g.UseRegister(node->InputAt(0)), in VisitInt32MulHigh()
1163 g.UseRegister(node->InputAt(1))); in VisitInt32MulHigh()
1164 Emit(kArm64Asr, g.DefineAsRegister(node), smull_operand, g.TempImmediate(32)); in VisitInt32MulHigh()
1168 void InstructionSelector::VisitUint32MulHigh(Node* node) { in VisitUint32MulHigh() argument
1171 Emit(kArm64Umull, smull_operand, g.UseRegister(node->InputAt(0)), in VisitUint32MulHigh()
1172 g.UseRegister(node->InputAt(1))); in VisitUint32MulHigh()
1173 Emit(kArm64Lsr, g.DefineAsRegister(node), smull_operand, g.TempImmediate(32)); in VisitUint32MulHigh()
1177 void InstructionSelector::VisitInt32Div(Node* node) { in VisitInt32Div() argument
1178 VisitRRR(this, kArm64Idiv32, node); in VisitInt32Div()
1182 void InstructionSelector::VisitInt64Div(Node* node) { in VisitInt64Div() argument
1183 VisitRRR(this, kArm64Idiv, node); in VisitInt64Div()
1187 void InstructionSelector::VisitUint32Div(Node* node) { in VisitUint32Div() argument
1188 VisitRRR(this, kArm64Udiv32, node); in VisitUint32Div()
1192 void InstructionSelector::VisitUint64Div(Node* node) { in VisitUint64Div() argument
1193 VisitRRR(this, kArm64Udiv, node); in VisitUint64Div()
1197 void InstructionSelector::VisitInt32Mod(Node* node) { in VisitInt32Mod() argument
1198 VisitRRR(this, kArm64Imod32, node); in VisitInt32Mod()
1202 void InstructionSelector::VisitInt64Mod(Node* node) { in VisitInt64Mod() argument
1203 VisitRRR(this, kArm64Imod, node); in VisitInt64Mod()
1207 void InstructionSelector::VisitUint32Mod(Node* node) { in VisitUint32Mod() argument
1208 VisitRRR(this, kArm64Umod32, node); in VisitUint32Mod()
1212 void InstructionSelector::VisitUint64Mod(Node* node) { in VisitUint64Mod() argument
1213 VisitRRR(this, kArm64Umod, node); in VisitUint64Mod()
1217 void InstructionSelector::VisitChangeFloat32ToFloat64(Node* node) { in VisitChangeFloat32ToFloat64() argument
1218 VisitRR(this, kArm64Float32ToFloat64, node); in VisitChangeFloat32ToFloat64()
1222 void InstructionSelector::VisitChangeInt32ToFloat64(Node* node) { in VisitChangeInt32ToFloat64() argument
1223 VisitRR(this, kArm64Int32ToFloat64, node); in VisitChangeInt32ToFloat64()
1227 void InstructionSelector::VisitChangeUint32ToFloat64(Node* node) { in VisitChangeUint32ToFloat64() argument
1228 VisitRR(this, kArm64Uint32ToFloat64, node); in VisitChangeUint32ToFloat64()
1232 void InstructionSelector::VisitChangeFloat64ToInt32(Node* node) { in VisitChangeFloat64ToInt32() argument
1233 VisitRR(this, kArm64Float64ToInt32, node); in VisitChangeFloat64ToInt32()
1237 void InstructionSelector::VisitChangeFloat64ToUint32(Node* node) { in VisitChangeFloat64ToUint32() argument
1238 VisitRR(this, kArm64Float64ToUint32, node); in VisitChangeFloat64ToUint32()
1242 void InstructionSelector::VisitTryTruncateFloat32ToInt64(Node* node) { in VisitTryTruncateFloat32ToInt64() argument
1245 InstructionOperand inputs[] = {g.UseRegister(node->InputAt(0))}; in VisitTryTruncateFloat32ToInt64()
1248 outputs[output_count++] = g.DefineAsRegister(node); in VisitTryTruncateFloat32ToInt64()
1250 Node* success_output = NodeProperties::FindProjection(node, 1); in VisitTryTruncateFloat32ToInt64()
1259 void InstructionSelector::VisitTryTruncateFloat64ToInt64(Node* node) { in VisitTryTruncateFloat64ToInt64() argument
1262 InstructionOperand inputs[] = {g.UseRegister(node->InputAt(0))}; in VisitTryTruncateFloat64ToInt64()
1265 outputs[output_count++] = g.DefineAsRegister(node); in VisitTryTruncateFloat64ToInt64()
1267 Node* success_output = NodeProperties::FindProjection(node, 1); in VisitTryTruncateFloat64ToInt64()
1276 void InstructionSelector::VisitTryTruncateFloat32ToUint64(Node* node) { in VisitTryTruncateFloat32ToUint64() argument
1279 InstructionOperand inputs[] = {g.UseRegister(node->InputAt(0))}; in VisitTryTruncateFloat32ToUint64()
1282 outputs[output_count++] = g.DefineAsRegister(node); in VisitTryTruncateFloat32ToUint64()
1284 Node* success_output = NodeProperties::FindProjection(node, 1); in VisitTryTruncateFloat32ToUint64()
1293 void InstructionSelector::VisitTryTruncateFloat64ToUint64(Node* node) { in VisitTryTruncateFloat64ToUint64() argument
1296 InstructionOperand inputs[] = {g.UseRegister(node->InputAt(0))}; in VisitTryTruncateFloat64ToUint64()
1299 outputs[output_count++] = g.DefineAsRegister(node); in VisitTryTruncateFloat64ToUint64()
1301 Node* success_output = NodeProperties::FindProjection(node, 1); in VisitTryTruncateFloat64ToUint64()
1310 void InstructionSelector::VisitChangeInt32ToInt64(Node* node) { in VisitChangeInt32ToInt64() argument
1311 VisitRR(this, kArm64Sxtw, node); in VisitChangeInt32ToInt64()
1315 void InstructionSelector::VisitChangeUint32ToUint64(Node* node) { in VisitChangeUint32ToUint64() argument
1317 Node* value = node->InputAt(0); in VisitChangeUint32ToUint64()
1345 Emit(kArchNop, g.DefineSameAsFirst(node), g.Use(value)); in VisitChangeUint32ToUint64()
1351 Emit(kArm64Mov32, g.DefineAsRegister(node), g.UseRegister(value)); in VisitChangeUint32ToUint64()
1355 void InstructionSelector::VisitTruncateFloat64ToFloat32(Node* node) { in VisitTruncateFloat64ToFloat32() argument
1356 VisitRR(this, kArm64Float64ToFloat32, node); in VisitTruncateFloat64ToFloat32()
1360 void InstructionSelector::VisitTruncateFloat64ToInt32(Node* node) { in VisitTruncateFloat64ToInt32() argument
1361 switch (TruncationModeOf(node->op())) { in VisitTruncateFloat64ToInt32()
1363 return VisitRR(this, kArchTruncateDoubleToI, node); in VisitTruncateFloat64ToInt32()
1365 return VisitRR(this, kArm64Float64ToInt32, node); in VisitTruncateFloat64ToInt32()
1371 void InstructionSelector::VisitTruncateInt64ToInt32(Node* node) { in VisitTruncateInt64ToInt32() argument
1373 Node* value = node->InputAt(0); in VisitTruncateInt64ToInt32()
1374 if (CanCover(node, value) && value->InputCount() >= 2) { in VisitTruncateInt64ToInt32()
1379 Emit(kArm64Lsr, g.DefineAsRegister(node), g.UseRegister(m.left().node()), in VisitTruncateInt64ToInt32()
1380 g.UseImmediate(m.right().node())); in VisitTruncateInt64ToInt32()
1385 Emit(kArm64Mov32, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0))); in VisitTruncateInt64ToInt32()
1389 void InstructionSelector::VisitRoundInt64ToFloat32(Node* node) { in VisitRoundInt64ToFloat32() argument
1390 VisitRR(this, kArm64Int64ToFloat32, node); in VisitRoundInt64ToFloat32()
1394 void InstructionSelector::VisitRoundInt64ToFloat64(Node* node) { in VisitRoundInt64ToFloat64() argument
1395 VisitRR(this, kArm64Int64ToFloat64, node); in VisitRoundInt64ToFloat64()
1399 void InstructionSelector::VisitRoundUint64ToFloat32(Node* node) { in VisitRoundUint64ToFloat32() argument
1400 VisitRR(this, kArm64Uint64ToFloat32, node); in VisitRoundUint64ToFloat32()
1404 void InstructionSelector::VisitRoundUint64ToFloat64(Node* node) { in VisitRoundUint64ToFloat64() argument
1405 VisitRR(this, kArm64Uint64ToFloat64, node); in VisitRoundUint64ToFloat64()
1409 void InstructionSelector::VisitBitcastFloat32ToInt32(Node* node) { in VisitBitcastFloat32ToInt32() argument
1410 VisitRR(this, kArm64Float64ExtractLowWord32, node); in VisitBitcastFloat32ToInt32()
1414 void InstructionSelector::VisitBitcastFloat64ToInt64(Node* node) { in VisitBitcastFloat64ToInt64() argument
1415 VisitRR(this, kArm64U64MoveFloat64, node); in VisitBitcastFloat64ToInt64()
1419 void InstructionSelector::VisitBitcastInt32ToFloat32(Node* node) { in VisitBitcastInt32ToFloat32() argument
1420 VisitRR(this, kArm64Float64MoveU64, node); in VisitBitcastInt32ToFloat32()
1424 void InstructionSelector::VisitBitcastInt64ToFloat64(Node* node) { in VisitBitcastInt64ToFloat64() argument
1425 VisitRR(this, kArm64Float64MoveU64, node); in VisitBitcastInt64ToFloat64()
1429 void InstructionSelector::VisitFloat32Add(Node* node) { in VisitFloat32Add() argument
1430 VisitRRR(this, kArm64Float32Add, node); in VisitFloat32Add()
1434 void InstructionSelector::VisitFloat64Add(Node* node) { in VisitFloat64Add() argument
1435 VisitRRR(this, kArm64Float64Add, node); in VisitFloat64Add()
1439 void InstructionSelector::VisitFloat32Sub(Node* node) { in VisitFloat32Sub() argument
1440 VisitRRR(this, kArm64Float32Sub, node); in VisitFloat32Sub()
1444 void InstructionSelector::VisitFloat64Sub(Node* node) { in VisitFloat64Sub() argument
1446 Float64BinopMatcher m(node); in VisitFloat64Sub()
1449 CanCover(m.node(), m.right().node())) { in VisitFloat64Sub()
1451 CanCover(m.right().node(), m.right().InputAt(0))) { in VisitFloat64Sub()
1454 Emit(kArm64Float64RoundUp, g.DefineAsRegister(node), in VisitFloat64Sub()
1455 g.UseRegister(mright0.right().node())); in VisitFloat64Sub()
1460 Emit(kArm64Float64Neg, g.DefineAsRegister(node), in VisitFloat64Sub()
1461 g.UseRegister(m.right().node())); in VisitFloat64Sub()
1464 VisitRRR(this, kArm64Float64Sub, node); in VisitFloat64Sub()
1468 void InstructionSelector::VisitFloat32Mul(Node* node) { in VisitFloat32Mul() argument
1469 VisitRRR(this, kArm64Float32Mul, node); in VisitFloat32Mul()
1473 void InstructionSelector::VisitFloat64Mul(Node* node) { in VisitFloat64Mul() argument
1474 VisitRRR(this, kArm64Float64Mul, node); in VisitFloat64Mul()
1478 void InstructionSelector::VisitFloat32Div(Node* node) { in VisitFloat32Div() argument
1479 VisitRRR(this, kArm64Float32Div, node); in VisitFloat32Div()
1483 void InstructionSelector::VisitFloat64Div(Node* node) { in VisitFloat64Div() argument
1484 VisitRRR(this, kArm64Float64Div, node); in VisitFloat64Div()
1488 void InstructionSelector::VisitFloat64Mod(Node* node) { in VisitFloat64Mod() argument
1490 Emit(kArm64Float64Mod, g.DefineAsFixed(node, d0), in VisitFloat64Mod()
1491 g.UseFixed(node->InputAt(0), d0), in VisitFloat64Mod()
1492 g.UseFixed(node->InputAt(1), d1))->MarkAsCall(); in VisitFloat64Mod()
1496 void InstructionSelector::VisitFloat32Max(Node* node) { in VisitFloat32Max() argument
1497 VisitRRR(this, kArm64Float32Max, node); in VisitFloat32Max()
1501 void InstructionSelector::VisitFloat64Max(Node* node) { in VisitFloat64Max() argument
1502 VisitRRR(this, kArm64Float64Max, node); in VisitFloat64Max()
1506 void InstructionSelector::VisitFloat32Min(Node* node) { in VisitFloat32Min() argument
1507 VisitRRR(this, kArm64Float32Min, node); in VisitFloat32Min()
1511 void InstructionSelector::VisitFloat64Min(Node* node) { in VisitFloat64Min() argument
1512 VisitRRR(this, kArm64Float64Min, node); in VisitFloat64Min()
1516 void InstructionSelector::VisitFloat32Abs(Node* node) { in VisitFloat32Abs() argument
1517 VisitRR(this, kArm64Float32Abs, node); in VisitFloat32Abs()
1521 void InstructionSelector::VisitFloat64Abs(Node* node) { in VisitFloat64Abs() argument
1522 VisitRR(this, kArm64Float64Abs, node); in VisitFloat64Abs()
1526 void InstructionSelector::VisitFloat32Sqrt(Node* node) { in VisitFloat32Sqrt() argument
1527 VisitRR(this, kArm64Float32Sqrt, node); in VisitFloat32Sqrt()
1531 void InstructionSelector::VisitFloat64Sqrt(Node* node) { in VisitFloat64Sqrt() argument
1532 VisitRR(this, kArm64Float64Sqrt, node); in VisitFloat64Sqrt()
1536 void InstructionSelector::VisitFloat32RoundDown(Node* node) { in VisitFloat32RoundDown() argument
1537 VisitRR(this, kArm64Float32RoundDown, node); in VisitFloat32RoundDown()
1541 void InstructionSelector::VisitFloat64RoundDown(Node* node) { in VisitFloat64RoundDown() argument
1542 VisitRR(this, kArm64Float64RoundDown, node); in VisitFloat64RoundDown()
1546 void InstructionSelector::VisitFloat32RoundUp(Node* node) { in VisitFloat32RoundUp() argument
1547 VisitRR(this, kArm64Float32RoundUp, node); in VisitFloat32RoundUp()
1551 void InstructionSelector::VisitFloat64RoundUp(Node* node) { in VisitFloat64RoundUp() argument
1552 VisitRR(this, kArm64Float64RoundUp, node); in VisitFloat64RoundUp()
1556 void InstructionSelector::VisitFloat32RoundTruncate(Node* node) { in VisitFloat32RoundTruncate() argument
1557 VisitRR(this, kArm64Float32RoundTruncate, node); in VisitFloat32RoundTruncate()
1561 void InstructionSelector::VisitFloat64RoundTruncate(Node* node) { in VisitFloat64RoundTruncate() argument
1562 VisitRR(this, kArm64Float64RoundTruncate, node); in VisitFloat64RoundTruncate()
1566 void InstructionSelector::VisitFloat64RoundTiesAway(Node* node) { in VisitFloat64RoundTiesAway() argument
1567 VisitRR(this, kArm64Float64RoundTiesAway, node); in VisitFloat64RoundTiesAway()
1571 void InstructionSelector::VisitFloat32RoundTiesEven(Node* node) { in VisitFloat32RoundTiesEven() argument
1572 VisitRR(this, kArm64Float32RoundTiesEven, node); in VisitFloat32RoundTiesEven()
1576 void InstructionSelector::VisitFloat64RoundTiesEven(Node* node) { in VisitFloat64RoundTiesEven() argument
1577 VisitRR(this, kArm64Float64RoundTiesEven, node); in VisitFloat64RoundTiesEven()
1583 Node* node) { in EmitPrepareArguments() argument
1609 Emit(kArm64Poke, g.NoOutput(), g.UseRegister((*arguments)[slot].node()), in EmitPrepareArguments()
1643 void VisitWordCompare(InstructionSelector* selector, Node* node, in VisitWordCompare() argument
1647 Node* left = node->InputAt(0); in VisitWordCompare()
1648 Node* right = node->InputAt(1); in VisitWordCompare()
1665 void VisitWord32Compare(InstructionSelector* selector, Node* node, in VisitWord32Compare() argument
1667 Int32BinopMatcher m(node); in VisitWord32Compare()
1672 Node* sub = m.right().node(); in VisitWord32Compare()
1675 bool can_cover = selector->CanCover(node, sub); in VisitWord32Compare()
1676 node->ReplaceInput(1, msub.right().node()); in VisitWord32Compare()
1685 if (can_cover) sub->ReplaceInput(1, msub.left().node()); in VisitWord32Compare()
1689 VisitBinop<Int32BinopMatcher>(selector, node, opcode, kArithmeticImm, cont); in VisitWord32Compare()
1693 void VisitWordTest(InstructionSelector* selector, Node* node, in VisitWordTest() argument
1696 VisitCompare(selector, opcode, g.UseRegister(node), g.UseRegister(node), in VisitWordTest()
1701 void VisitWord32Test(InstructionSelector* selector, Node* node, in VisitWord32Test() argument
1703 VisitWordTest(selector, node, kArm64Tst32, cont); in VisitWord32Test()
1707 void VisitWord64Test(InstructionSelector* selector, Node* node, in VisitWord64Test() argument
1709 VisitWordTest(selector, node, kArm64Tst, cont); in VisitWord64Test()
1714 void VisitFloat32Compare(InstructionSelector* selector, Node* node, in VisitFloat32Compare() argument
1717 Float32BinopMatcher m(node); in VisitFloat32Compare()
1719 VisitCompare(selector, kArm64Float32Cmp, g.UseRegister(m.left().node()), in VisitFloat32Compare()
1720 g.UseImmediate(m.right().node()), cont); in VisitFloat32Compare()
1723 VisitCompare(selector, kArm64Float32Cmp, g.UseRegister(m.right().node()), in VisitFloat32Compare()
1724 g.UseImmediate(m.left().node()), cont); in VisitFloat32Compare()
1726 VisitCompare(selector, kArm64Float32Cmp, g.UseRegister(m.left().node()), in VisitFloat32Compare()
1727 g.UseRegister(m.right().node()), cont); in VisitFloat32Compare()
1733 void VisitFloat64Compare(InstructionSelector* selector, Node* node, in VisitFloat64Compare() argument
1736 Float64BinopMatcher m(node); in VisitFloat64Compare()
1738 VisitCompare(selector, kArm64Float64Cmp, g.UseRegister(m.left().node()), in VisitFloat64Compare()
1739 g.UseImmediate(m.right().node()), cont); in VisitFloat64Compare()
1742 VisitCompare(selector, kArm64Float64Cmp, g.UseRegister(m.right().node()), in VisitFloat64Compare()
1743 g.UseImmediate(m.left().node()), cont); in VisitFloat64Compare()
1745 VisitCompare(selector, kArm64Float64Cmp, g.UseRegister(m.left().node()), in VisitFloat64Compare()
1746 g.UseRegister(m.right().node()), cont); in VisitFloat64Compare()
1766 value = m.left().node(); in VisitBranch()
1838 Node* const node = value->InputAt(0); in VisitBranch() local
1839 Node* const result = NodeProperties::FindProjection(node, 0); in VisitBranch()
1841 switch (node->opcode()) { in VisitBranch()
1844 return VisitBinop<Int32BinopMatcher>(this, node, kArm64Add32, in VisitBranch()
1848 return VisitBinop<Int32BinopMatcher>(this, node, kArm64Sub32, in VisitBranch()
1852 return VisitBinop<Int64BinopMatcher>(this, node, kArm64Add, in VisitBranch()
1856 return VisitBinop<Int64BinopMatcher>(this, node, kArm64Sub, in VisitBranch()
1877 g.UseRegister(m.left().node()), in VisitBranch()
1894 g.UseRegister(m.left().node()), in VisitBranch()
1915 void InstructionSelector::VisitSwitch(Node* node, const SwitchInfo& sw) { in VisitSwitch() argument
1917 InstructionOperand value_operand = g.UseRegister(node->InputAt(0)); in VisitSwitch()
1943 void InstructionSelector::VisitWord32Equal(Node* const node) { in VisitWord32Equal() argument
1944 Node* const user = node; in VisitWord32Equal()
1945 FlagsContinuation cont(kEqual, node); in VisitWord32Equal()
1948 Node* const value = m.left().node(); in VisitWord32Equal()
1963 node->ReplaceInput(0, mequal.left().node()); in VisitWord32Equal()
1964 node->ReplaceInput(1, mequal.right().node()); in VisitWord32Equal()
1966 return VisitWord32Compare(this, node, &cont); in VisitWord32Equal()
1974 VisitWord32Compare(this, node, &cont); in VisitWord32Equal()
1978 void InstructionSelector::VisitInt32LessThan(Node* node) { in VisitInt32LessThan() argument
1979 FlagsContinuation cont(kSignedLessThan, node); in VisitInt32LessThan()
1980 VisitWord32Compare(this, node, &cont); in VisitInt32LessThan()
1984 void InstructionSelector::VisitInt32LessThanOrEqual(Node* node) { in VisitInt32LessThanOrEqual() argument
1985 FlagsContinuation cont(kSignedLessThanOrEqual, node); in VisitInt32LessThanOrEqual()
1986 VisitWord32Compare(this, node, &cont); in VisitInt32LessThanOrEqual()
1990 void InstructionSelector::VisitUint32LessThan(Node* node) { in VisitUint32LessThan() argument
1991 FlagsContinuation cont(kUnsignedLessThan, node); in VisitUint32LessThan()
1992 VisitWord32Compare(this, node, &cont); in VisitUint32LessThan()
1996 void InstructionSelector::VisitUint32LessThanOrEqual(Node* node) { in VisitUint32LessThanOrEqual() argument
1997 FlagsContinuation cont(kUnsignedLessThanOrEqual, node); in VisitUint32LessThanOrEqual()
1998 VisitWord32Compare(this, node, &cont); in VisitUint32LessThanOrEqual()
2002 void InstructionSelector::VisitWord64Equal(Node* const node) { in VisitWord64Equal() argument
2003 Node* const user = node; in VisitWord64Equal()
2004 FlagsContinuation cont(kEqual, node); in VisitWord64Equal()
2007 Node* const value = m.left().node(); in VisitWord64Equal()
2019 VisitWordCompare(this, node, kArm64Cmp, &cont, false, kArithmeticImm); in VisitWord64Equal()
2023 void InstructionSelector::VisitInt32AddWithOverflow(Node* node) { in VisitInt32AddWithOverflow() argument
2024 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { in VisitInt32AddWithOverflow()
2026 return VisitBinop<Int32BinopMatcher>(this, node, kArm64Add32, in VisitInt32AddWithOverflow()
2030 VisitBinop<Int32BinopMatcher>(this, node, kArm64Add32, kArithmeticImm, &cont); in VisitInt32AddWithOverflow()
2034 void InstructionSelector::VisitInt32SubWithOverflow(Node* node) { in VisitInt32SubWithOverflow() argument
2035 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { in VisitInt32SubWithOverflow()
2037 return VisitBinop<Int32BinopMatcher>(this, node, kArm64Sub32, in VisitInt32SubWithOverflow()
2041 VisitBinop<Int32BinopMatcher>(this, node, kArm64Sub32, kArithmeticImm, &cont); in VisitInt32SubWithOverflow()
2045 void InstructionSelector::VisitInt64AddWithOverflow(Node* node) { in VisitInt64AddWithOverflow() argument
2046 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { in VisitInt64AddWithOverflow()
2048 return VisitBinop<Int64BinopMatcher>(this, node, kArm64Add, kArithmeticImm, in VisitInt64AddWithOverflow()
2052 VisitBinop<Int64BinopMatcher>(this, node, kArm64Add, kArithmeticImm, &cont); in VisitInt64AddWithOverflow()
2056 void InstructionSelector::VisitInt64SubWithOverflow(Node* node) { in VisitInt64SubWithOverflow() argument
2057 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { in VisitInt64SubWithOverflow()
2059 return VisitBinop<Int64BinopMatcher>(this, node, kArm64Sub, kArithmeticImm, in VisitInt64SubWithOverflow()
2063 VisitBinop<Int64BinopMatcher>(this, node, kArm64Sub, kArithmeticImm, &cont); in VisitInt64SubWithOverflow()
2067 void InstructionSelector::VisitInt64LessThan(Node* node) { in VisitInt64LessThan() argument
2068 FlagsContinuation cont(kSignedLessThan, node); in VisitInt64LessThan()
2069 VisitWordCompare(this, node, kArm64Cmp, &cont, false, kArithmeticImm); in VisitInt64LessThan()
2073 void InstructionSelector::VisitInt64LessThanOrEqual(Node* node) { in VisitInt64LessThanOrEqual() argument
2074 FlagsContinuation cont(kSignedLessThanOrEqual, node); in VisitInt64LessThanOrEqual()
2075 VisitWordCompare(this, node, kArm64Cmp, &cont, false, kArithmeticImm); in VisitInt64LessThanOrEqual()
2079 void InstructionSelector::VisitUint64LessThan(Node* node) { in VisitUint64LessThan() argument
2080 FlagsContinuation cont(kUnsignedLessThan, node); in VisitUint64LessThan()
2081 VisitWordCompare(this, node, kArm64Cmp, &cont, false, kArithmeticImm); in VisitUint64LessThan()
2085 void InstructionSelector::VisitUint64LessThanOrEqual(Node* node) { in VisitUint64LessThanOrEqual() argument
2086 FlagsContinuation cont(kUnsignedLessThanOrEqual, node); in VisitUint64LessThanOrEqual()
2087 VisitWordCompare(this, node, kArm64Cmp, &cont, false, kArithmeticImm); in VisitUint64LessThanOrEqual()
2091 void InstructionSelector::VisitFloat32Equal(Node* node) { in VisitFloat32Equal() argument
2092 FlagsContinuation cont(kEqual, node); in VisitFloat32Equal()
2093 VisitFloat32Compare(this, node, &cont); in VisitFloat32Equal()
2097 void InstructionSelector::VisitFloat32LessThan(Node* node) { in VisitFloat32LessThan() argument
2098 FlagsContinuation cont(kFloatLessThan, node); in VisitFloat32LessThan()
2099 VisitFloat32Compare(this, node, &cont); in VisitFloat32LessThan()
2103 void InstructionSelector::VisitFloat32LessThanOrEqual(Node* node) { in VisitFloat32LessThanOrEqual() argument
2104 FlagsContinuation cont(kFloatLessThanOrEqual, node); in VisitFloat32LessThanOrEqual()
2105 VisitFloat32Compare(this, node, &cont); in VisitFloat32LessThanOrEqual()
2109 void InstructionSelector::VisitFloat64Equal(Node* node) { in VisitFloat64Equal() argument
2110 FlagsContinuation cont(kEqual, node); in VisitFloat64Equal()
2111 VisitFloat64Compare(this, node, &cont); in VisitFloat64Equal()
2115 void InstructionSelector::VisitFloat64LessThan(Node* node) { in VisitFloat64LessThan() argument
2116 FlagsContinuation cont(kFloatLessThan, node); in VisitFloat64LessThan()
2117 VisitFloat64Compare(this, node, &cont); in VisitFloat64LessThan()
2121 void InstructionSelector::VisitFloat64LessThanOrEqual(Node* node) { in VisitFloat64LessThanOrEqual() argument
2122 FlagsContinuation cont(kFloatLessThanOrEqual, node); in VisitFloat64LessThanOrEqual()
2123 VisitFloat64Compare(this, node, &cont); in VisitFloat64LessThanOrEqual()
2127 void InstructionSelector::VisitFloat64ExtractLowWord32(Node* node) { in VisitFloat64ExtractLowWord32() argument
2129 Emit(kArm64Float64ExtractLowWord32, g.DefineAsRegister(node), in VisitFloat64ExtractLowWord32()
2130 g.UseRegister(node->InputAt(0))); in VisitFloat64ExtractLowWord32()
2134 void InstructionSelector::VisitFloat64ExtractHighWord32(Node* node) { in VisitFloat64ExtractHighWord32() argument
2136 Emit(kArm64Float64ExtractHighWord32, g.DefineAsRegister(node), in VisitFloat64ExtractHighWord32()
2137 g.UseRegister(node->InputAt(0))); in VisitFloat64ExtractHighWord32()
2141 void InstructionSelector::VisitFloat64InsertLowWord32(Node* node) { in VisitFloat64InsertLowWord32() argument
2143 Node* left = node->InputAt(0); in VisitFloat64InsertLowWord32()
2144 Node* right = node->InputAt(1); in VisitFloat64InsertLowWord32()
2146 CanCover(node, left)) { in VisitFloat64InsertLowWord32()
2151 Emit(kArm64Float64MoveU64, g.DefineAsRegister(node), g.UseRegister(right)); in VisitFloat64InsertLowWord32()
2154 Emit(kArm64Float64InsertLowWord32, g.DefineAsRegister(node), in VisitFloat64InsertLowWord32()
2159 void InstructionSelector::VisitFloat64InsertHighWord32(Node* node) { in VisitFloat64InsertHighWord32() argument
2161 Node* left = node->InputAt(0); in VisitFloat64InsertHighWord32()
2162 Node* right = node->InputAt(1); in VisitFloat64InsertHighWord32()
2164 CanCover(node, left)) { in VisitFloat64InsertHighWord32()
2168 Emit(kArm64Float64MoveU64, g.DefineAsRegister(node), g.UseRegister(left)); in VisitFloat64InsertHighWord32()
2171 Emit(kArm64Float64InsertHighWord32, g.DefineAsRegister(node), in VisitFloat64InsertHighWord32()