Lines Matching refs:info
45 void Mir2Lir::AddIntrinsicSlowPath(CallInfo* info, LIR* branch, LIR* resume) {
48 IntrinsicSlowPathPath(Mir2Lir* m2l, CallInfo* info, LIR* branch, LIR* resume = nullptr)
49 : LIRSlowPath(m2l, info->offset, branch, resume), info_(info) {
67 AddSlowPath(new (arena_) IntrinsicSlowPathPath(this, info, branch, resume));
462 static void CommonCallCodeLoadThisIntoArg1(const CallInfo* info, Mir2Lir* cg) {
463 RegLocation rl_arg = info->args[0];
467 static void CommonCallCodeLoadClassIntoArg0(const CallInfo* info, Mir2Lir* cg) {
468 cg->GenNullCheck(cg->TargetReg(kArg1, kRef), info->opt_flags);
473 cg->MarkPossibleNullPointerException(info->opt_flags);
476 static bool CommonCallCodeLoadCodePointerIntoInvokeTgt(const CallInfo* info,
494 static int NextSDCallInsn(CompilationUnit* cu, CallInfo* info,
550 if (CommonCallCodeLoadCodePointerIntoInvokeTgt(info, &arg0_ref, cu, cg)) {
571 static int NextVCallInsn(CompilationUnit* cu, CallInfo* info,
582 CommonCallCodeLoadThisIntoArg1(info, cg); // kArg1 := this
585 CommonCallCodeLoadClassIntoArg0(info, cg); // kArg0 := kArg1->class
597 if (CommonCallCodeLoadCodePointerIntoInvokeTgt(info, nullptr, cu, cg)) {
613 static int NextInterfaceCallInsn(CompilationUnit* cu, CallInfo* info, int state,
628 CommonCallCodeLoadThisIntoArg1(info, cg); // kArg1 := this
631 CommonCallCodeLoadClassIntoArg0(info, cg); // kArg0 := kArg1->class
642 if (CommonCallCodeLoadCodePointerIntoInvokeTgt(info, nullptr, cu, cg)) {
652 static int NextInvokeInsnSP(CompilationUnit* cu, CallInfo* info,
681 static int NextStaticCallInsnSP(CompilationUnit* cu, CallInfo* info,
686 return NextInvokeInsnSP(cu, info, kQuickInvokeStaticTrampolineWithAccessCheck, state,
690 static int NextDirectCallInsnSP(CompilationUnit* cu, CallInfo* info, int state,
694 return NextInvokeInsnSP(cu, info, kQuickInvokeDirectTrampolineWithAccessCheck, state,
698 static int NextSuperCallInsnSP(CompilationUnit* cu, CallInfo* info, int state,
702 return NextInvokeInsnSP(cu, info, kQuickInvokeSuperTrampolineWithAccessCheck, state,
706 static int NextVCallInsnSP(CompilationUnit* cu, CallInfo* info, int state,
710 return NextInvokeInsnSP(cu, info, kQuickInvokeVirtualTrampolineWithAccessCheck, state,
715 CallInfo* info, int state,
719 return NextInvokeInsnSP(cu, info, kQuickInvokeInterfaceTrampolineWithAccessCheck, state,
723 int Mir2Lir::LoadArgRegs(CallInfo* info, int call_state,
738 for (; (next_reg <= last_arg_reg) && (next_arg < info->num_arg_words); next_reg++) {
739 RegLocation rl_arg = info->args[next_arg++];
753 call_state = next_call_insn(cu_, info, call_state, target_method, vtable_idx,
766 int Mir2Lir::GenDalvikArgsNoRange(CallInfo* info,
774 if (info->num_arg_words == 0)
777 call_state = next_call_insn(cu_, info, call_state, target_method, vtable_idx,
780 DCHECK_LE(info->num_arg_words, 5);
781 if (info->num_arg_words > 3) {
784 RegLocation rl_use0 = info->args[0];
785 RegLocation rl_use1 = info->args[1];
786 RegLocation rl_use2 = info->args[2];
795 RegisterInfo* info = GetRegInfo(rl_arg.reg);
796 info = info->FindMatchingView(RegisterInfo::kHighSingleStorageMask);
797 if (info == nullptr) {
801 reg = info->GetReg();
810 call_state = next_call_insn(cu_, info, call_state, target_method,
817 call_state = next_call_insn(cu_, info, call_state, target_method, vtable_idx,
822 while (next_use < info->num_arg_words) {
824 rl_arg = info->args[next_use];
835 call_state = next_call_insn(cu_, info, call_state, target_method,
849 call_state = next_call_insn(cu_, info, call_state, target_method, vtable_idx,
854 call_state = LoadArgRegs(info, call_state, next_call_insn,
860 *pcrLabel = GenExplicitNullCheck(TargetReg(kArg1, kRef), info->opt_flags);
864 (info->opt_flags & MIR_IGNORE_NULL_CHECK)) {
869 GenImplicitNullCheck(TargetReg(kArg1, kRef), info->opt_flags);
903 int Mir2Lir::GenDalvikArgsRange(CallInfo* info, int call_state,
909 if (info->num_arg_words <= 5)
910 return GenDalvikArgsNoRange(info, call_state, pcrLabel,
920 for (int next_arg = 0; next_arg < info->num_arg_words;) {
921 RegLocation loc = info->args[next_arg];
946 int start_offset = SRegOffset(info->args[3].s_reg_low);
947 int regs_left_to_pass_via_stack = info->num_arg_words - 3;
952 call_state = next_call_insn(cu_, info, call_state, target_method, vtable_idx,
962 call_state = next_call_insn(cu_, info, call_state, target_method, vtable_idx,
965 call_state = next_call_insn(cu_, info, call_state, target_method, vtable_idx,
973 call_state = next_call_insn(cu_, info, call_state, target_method, vtable_idx,
1087 (info->num_arg_words - 3) * 4, false);
1090 call_state = LoadArgRegs(info, call_state, next_call_insn,
1094 call_state = next_call_insn(cu_, info, call_state, target_method, vtable_idx,
1098 *pcrLabel = GenExplicitNullCheck(TargetReg(kArg1, kRef), info->opt_flags);
1102 (info->opt_flags & MIR_IGNORE_NULL_CHECK)) {
1107 GenImplicitNullCheck(TargetReg(kArg1, kRef), info->opt_flags);
1113 RegLocation Mir2Lir::InlineTarget(CallInfo* info) {
1115 if (info->result.location == kLocInvalid) {
1116 res = GetReturn(LocToRegClass(info->result));
1118 res = info->result;
1123 RegLocation Mir2Lir::InlineTargetWide(CallInfo* info) {
1125 if (info->result.location == kLocInvalid) {
1128 res = info->result;
1133 bool Mir2Lir::GenInlinedReferenceGetReferent(CallInfo* info) {
1194 RegLocation rl_obj = info->args[0];
1217 RegLocation rl_dest = InlineTarget(info);
1219 GenNullCheck(rl_obj.reg, info->opt_flags);
1222 MarkPossibleNullPointerException(info->opt_flags);
1226 AddIntrinsicSlowPath(info, slow_path_branch, intrinsic_finish);
1231 bool Mir2Lir::GenInlinedCharAt(CallInfo* info) {
1245 RegLocation rl_obj = info->args[0];
1246 RegLocation rl_idx = info->args[1];
1250 GenNullCheck(rl_obj.reg, info->opt_flags);
1251 bool range_check = (!(info->opt_flags & MIR_IGNORE_RANGE_CHECK));
1260 MarkPossibleNullPointerException(info->opt_flags);
1263 MarkPossibleNullPointerException(info->opt_flags);
1281 RegLocation rl_dest = InlineTarget(info);
1289 info->opt_flags |= MIR_IGNORE_NULL_CHECK; // Record that we've already null checked.
1290 AddIntrinsicSlowPath(info, range_check_branch);
1296 bool Mir2Lir::GenInlinedStringIsEmptyOrLength(CallInfo* info, bool is_empty) {
1302 RegLocation rl_obj = info->args[0];
1304 RegLocation rl_dest = InlineTarget(info);
1306 GenNullCheck(rl_obj.reg, info->opt_flags);
1308 MarkPossibleNullPointerException(info->opt_flags);
1328 bool Mir2Lir::GenInlinedReverseBytes(CallInfo* info, OpSize size) {
1333 RegLocation rl_src_i = info->args[0];
1335 RegLocation rl_dest = (size == k64) ? InlineTargetWide(info) : InlineTarget(info); // result reg
1364 bool Mir2Lir::GenInlinedAbsInt(CallInfo* info) {
1369 RegLocation rl_src = info->args[0];
1371 RegLocation rl_dest = InlineTarget(info);
1382 bool Mir2Lir::GenInlinedAbsLong(CallInfo* info) {
1387 RegLocation rl_src = info->args[0];
1389 RegLocation rl_dest = InlineTargetWide(info);
1427 bool Mir2Lir::GenInlinedReverseBits(CallInfo* info, OpSize size) {
1432 bool Mir2Lir::GenInlinedMinMaxFP(CallInfo* info, bool is_min, bool is_double) {
1437 bool Mir2Lir::GenInlinedCeil(CallInfo* info) {
1441 bool Mir2Lir::GenInlinedFloor(CallInfo* info) {
1445 bool Mir2Lir::GenInlinedRint(CallInfo* info) {
1449 bool Mir2Lir::GenInlinedRound(CallInfo* info, bool is_double) {
1453 bool Mir2Lir::GenInlinedFloatCvt(CallInfo* info) {
1458 RegLocation rl_src = info->args[0];
1459 RegLocation rl_dest = InlineTarget(info);
1464 bool Mir2Lir::GenInlinedDoubleCvt(CallInfo* info) {
1469 RegLocation rl_src = info->args[0];
1470 RegLocation rl_dest = InlineTargetWide(info);
1475 bool Mir2Lir::GenInlinedArrayCopyCharArray(CallInfo* info) {
1484 bool Mir2Lir::GenInlinedIndexOf(CallInfo* info, bool zero_based) {
1493 RegLocation rl_obj = info->args[0];
1494 RegLocation rl_char = info->args[1];
1511 RegLocation rl_start = info->args[2]; // 3rd arg only present in III flavor of IndexOf.
1515 GenExplicitNullCheck(reg_ptr, info->opt_flags);
1524 info->opt_flags |= MIR_IGNORE_NULL_CHECK; // Record that we've null checked.
1525 AddIntrinsicSlowPath(info, high_code_point_branch, resume_tgt);
1532 RegLocation rl_dest = InlineTarget(info);
1538 bool Mir2Lir::GenInlinedStringCompareTo(CallInfo* info) {
1548 RegLocation rl_this = info->args[0];
1549 RegLocation rl_cmp = info->args[1];
1558 GenExplicitNullCheck(reg_this, info->opt_flags);
1559 info->opt_flags |= MIR_IGNORE_NULL_CHECK; // Record that we've null checked.
1562 AddIntrinsicSlowPath(info, cmp_null_check_branch);
1566 RegLocation rl_dest = InlineTarget(info);
1571 bool Mir2Lir::GenInlinedCurrentThread(CallInfo* info) {
1572 RegLocation rl_dest = InlineTarget(info);
1602 bool Mir2Lir::GenInlinedUnsafeGet(CallInfo* info,
1608 // Unused - RegLocation rl_src_unsafe = info->args[0];
1609 RegLocation rl_src_obj = info->args[1]; // Object
1610 RegLocation rl_src_offset = info->args[2]; // long low
1611 rl_src_offset = NarrowRegLoc(rl_src_offset); // ignore high half in info->args[3]
1612 RegLocation rl_dest = is_long ? InlineTargetWide(info) : InlineTarget(info); // result reg
1647 bool Mir2Lir::GenInlinedUnsafePut(CallInfo* info, bool is_long,
1653 // Unused - RegLocation rl_src_unsafe = info->args[0];
1654 RegLocation rl_src_obj = info->args[1]; // Object
1655 RegLocation rl_src_offset = info->args[2]; // long low
1656 info->args[3]
1657 RegLocation rl_src_value = info->args[4]; // value to store
1698 void Mir2Lir::GenInvoke(CallInfo* info) {
1699 if ((info->opt_flags & MIR_INLINED) != 0) {
1701 if (info->type != kStatic &&
1703 (info->opt_flags & MIR_IGNORE_NULL_CHECK) == 0)) {
1704 RegLocation rl_obj = LoadValue(info->args[0], kRefReg);
1711 ->GenIntrinsic(this, info)) {
1714 GenInvokeNoInline(info);
1742 void Mir2Lir::GenInvokeNoInline(CallInfo* info) {
1751 const MirMethodLoweringInfo& method_info = mir_graph_->GetMethodLoweringInfo(info->mir);
1753 BeginInvoke(info);
1755 info->type = static_cast<InvokeType>(method_info.GetSharpType());
1758 if (info->type == kInterface) {
1761 } else if (info->type == kDirect) {
1767 } else if (info->type == kStatic) {
1770 } else if (info->type == kSuper) {
1775 DCHECK_EQ(info->type, kVirtual);
1780 if (!info->is_range) {
1781 call_state = GenDalvikArgsNoRange(info, call_state, p_null_ck,
1786 call_state = GenDalvikArgsRange(info, call_state, p_null_ck,
1793 call_state = next_call_insn(cu_, info, call_state, target_method, method_info.VTableIndex(),
1804 reinterpret_cast<X86Mir2Lir*>(this)->CallWithLinkerFixup(target_method, info->type);
1811 call_inst = GenInvokeNoInlineCall(this, info->type);
1814 EndInvoke(info);
1818 if (info->result.location != kLocInvalid) {
1820 if (info->result.wide) {
1821 RegLocation ret_loc = GetReturnWide(LocToRegClass(info->result));
1822 StoreValueWide(info->result, ret_loc);
1824 RegLocation ret_loc = GetReturn(LocToRegClass(info->result));
1825 StoreValue(info->result, ret_loc);