• Home
  • Raw
  • Download

Lines Matching refs:__

62 #define __ down_cast<ArmAssembler*>(codegen->GetAssembler())->  macro
71 __ Bind(GetEntryLabel()); in EmitNativeCode()
95 __ Bind(GetEntryLabel()); in EmitNativeCode()
120 __ Bind(GetEntryLabel()); in EmitNativeCode()
127 __ b(GetReturnLabel()); in EmitNativeCode()
129 __ b(arm_codegen->GetLabelOf(successor_)); in EmitNativeCode()
163 __ Bind(GetEntryLabel()); in EmitNativeCode()
205 __ Bind(GetEntryLabel()); in EmitNativeCode()
209 __ LoadImmediate(calling_convention.GetRegisterAt(0), cls_->GetTypeIndex()); in EmitNativeCode()
227 __ b(GetExitLabel()); in EmitNativeCode()
258 __ Bind(GetEntryLabel()); in EmitNativeCode()
263 __ LoadImmediate(calling_convention.GetRegisterAt(0), string_index); in EmitNativeCode()
270 __ b(GetExitLabel()); in EmitNativeCode()
292 __ Bind(GetEntryLabel()); in EmitNativeCode()
328 __ b(GetExitLabel()); in EmitNativeCode()
349 __ Bind(GetEntryLabel()); in EmitNativeCode()
370 __ Bind(GetEntryLabel()); in EmitNativeCode()
399 __ b(GetExitLabel()); in EmitNativeCode()
433 __ Bind(GetEntryLabel()); in EmitNativeCode()
447 __ b(GetExitLabel()); in EmitNativeCode()
498 __ Bind(GetEntryLabel()); in EmitNativeCode()
535 __ Mov(free_reg, index_reg); in EmitNativeCode()
548 __ Lsl(index_reg, index_reg, TIMES_4); in EmitNativeCode()
552 __ AddConstant(index_reg, index_reg, offset_); in EmitNativeCode()
587 __ LoadImmediate(calling_convention.GetRegisterAt(2), offset_); in EmitNativeCode()
598 __ b(GetExitLabel()); in EmitNativeCode()
650 __ Bind(GetEntryLabel()); in EmitNativeCode()
664 __ b(GetExitLabel()); in EmitNativeCode()
676 #undef __
677 #define __ down_cast<ArmAssembler*>(GetAssembler())-> macro
743 __ StoreToOffset(kStoreWord, static_cast<Register>(reg_id), SP, stack_index); in SaveCoreRegister()
748 __ LoadFromOffset(kLoadWord, static_cast<Register>(reg_id), SP, stack_index); in RestoreCoreRegister()
753 __ StoreSToOffset(static_cast<SRegister>(reg_id), SP, stack_index); in SaveFloatingPointRegister()
758 __ LoadSFromOffset(static_cast<SRegister>(reg_id), SP, stack_index); in RestoreFloatingPointRegister()
801 __ FinalizeCode(); in Finalize()
806 uint32_t new_position = __ GetAdjustedPosition(old_position); in Finalize()
812 frame_entry_interval->start = __ GetAdjustedPosition(frame_entry_interval->start); in Finalize()
813 frame_entry_interval->end = __ GetAdjustedPosition(frame_entry_interval->end); in Finalize()
815 it.second.start = __ GetAdjustedPosition(it.second.start); in Finalize()
816 it.second.end = __ GetAdjustedPosition(it.second.end); in Finalize()
819 it.code_interval.start = __ GetAdjustedPosition(it.code_interval.start); in Finalize()
820 it.code_interval.end = __ GetAdjustedPosition(it.code_interval.end); in Finalize()
902 __ Bind(&frame_entry_label_); in GenerateFrameEntry()
909 __ AddConstant(IP, SP, -static_cast<int32_t>(GetStackOverflowReservedBytes(kArm))); in GenerateFrameEntry()
910 __ LoadFromOffset(kLoadWord, IP, IP, 0); in GenerateFrameEntry()
914 __ PushList(core_spill_mask_); in GenerateFrameEntry()
915 __ cfi().AdjustCFAOffset(kArmWordSize * POPCOUNT(core_spill_mask_)); in GenerateFrameEntry()
916 __ cfi().RelOffsetForMany(DWARFReg(kMethodRegisterArgument), 0, core_spill_mask_, kArmWordSize); in GenerateFrameEntry()
919 __ vpushs(start_register, POPCOUNT(fpu_spill_mask_)); in GenerateFrameEntry()
920 __ cfi().AdjustCFAOffset(kArmWordSize * POPCOUNT(fpu_spill_mask_)); in GenerateFrameEntry()
921 __ cfi().RelOffsetForMany(DWARFReg(S0), 0, fpu_spill_mask_, kArmWordSize); in GenerateFrameEntry()
924 __ AddConstant(SP, -adjust); in GenerateFrameEntry()
925 __ cfi().AdjustCFAOffset(adjust); in GenerateFrameEntry()
926 __ StoreToOffset(kStoreWord, kMethodRegisterArgument, SP, 0); in GenerateFrameEntry()
931 __ bx(LR); in GenerateFrameExit()
934 __ cfi().RememberState(); in GenerateFrameExit()
936 __ AddConstant(SP, adjust); in GenerateFrameExit()
937 __ cfi().AdjustCFAOffset(-adjust); in GenerateFrameExit()
940 __ vpops(start_register, POPCOUNT(fpu_spill_mask_)); in GenerateFrameExit()
941 __ cfi().AdjustCFAOffset(-kArmPointerSize * POPCOUNT(fpu_spill_mask_)); in GenerateFrameExit()
942 __ cfi().RestoreMany(DWARFReg(SRegister(0)), fpu_spill_mask_); in GenerateFrameExit()
947 __ PopList(pop_mask); in GenerateFrameExit()
948 __ cfi().RestoreState(); in GenerateFrameExit()
949 __ cfi().DefCFAOffset(GetFrameSize()); in GenerateFrameExit()
954 __ BindTrackedLabel(label); in Bind()
1073 __ Mov(destination.AsRegister<Register>(), source.AsRegister<Register>()); in Move32()
1075 __ vmovrs(destination.AsRegister<Register>(), source.AsFpuRegister<SRegister>()); in Move32()
1077 __ LoadFromOffset(kLoadWord, destination.AsRegister<Register>(), SP, source.GetStackIndex()); in Move32()
1081 __ vmovsr(destination.AsFpuRegister<SRegister>(), source.AsRegister<Register>()); in Move32()
1083 __ vmovs(destination.AsFpuRegister<SRegister>(), source.AsFpuRegister<SRegister>()); in Move32()
1085 __ LoadSFromOffset(destination.AsFpuRegister<SRegister>(), SP, source.GetStackIndex()); in Move32()
1090 __ StoreToOffset(kStoreWord, source.AsRegister<Register>(), SP, destination.GetStackIndex()); in Move32()
1092 __ StoreSToOffset(source.AsFpuRegister<SRegister>(), SP, destination.GetStackIndex()); in Move32()
1095 __ LoadFromOffset(kLoadWord, IP, SP, source.GetStackIndex()); in Move32()
1096 __ StoreToOffset(kStoreWord, IP, SP, destination.GetStackIndex()); in Move32()
1117 __ vmovrrd(destination.AsRegisterPairLow<Register>(), in Move64()
1123 __ LoadFromOffset(kLoadWordPair, destination.AsRegisterPairLow<Register>(), in Move64()
1128 __ LoadDFromOffset(FromLowSToD(destination.AsFpuRegisterPairLow<SRegister>()), in Move64()
1132 __ vmovdrr(FromLowSToD(destination.AsFpuRegisterPairLow<SRegister>()), in Move64()
1144 __ StoreToOffset(kStoreWord, R1, SP, destination.GetStackIndex()); in Move64()
1145 __ StoreToOffset(kStoreWord, R2, SP, destination.GetHighStackIndex(kArmWordSize)); in Move64()
1147 __ StoreToOffset(kStoreWordPair, source.AsRegisterPairLow<Register>(), in Move64()
1151 __ StoreDToOffset(FromLowSToD(source.AsFpuRegisterPairLow<SRegister>()), in Move64()
1169 __ LoadImmediate(location.AsRegister<Register>(), value); in MoveConstant()
1204 __ LoadFromOffset(kLoadWord, LR, TR, entry_point_offset); in InvokeRuntime()
1205 __ blx(LR); in InvokeRuntime()
1226 __ b(codegen_->GetLabelOf(successor)); in HandleGoto()
1259 __ vmstat(); // transfer FP status register to ARM APSR. in GenerateFPJumps()
1260 __ b(true_label, ARMFPCondition(cond->GetCondition(), cond->IsGtBias())); in GenerateFPJumps()
1315 __ CmpConstant(left_high, val_high); in GenerateLongComparesAndJumps()
1317 __ b(true_label, ARMCondition(true_high_cond)); in GenerateLongComparesAndJumps()
1319 __ b(false_label, ARMCondition(false_high_cond)); in GenerateLongComparesAndJumps()
1321 __ b(true_label, ARMCondition(true_high_cond)); in GenerateLongComparesAndJumps()
1322 __ b(false_label, ARMCondition(false_high_cond)); in GenerateLongComparesAndJumps()
1325 __ CmpConstant(left_low, val_low); in GenerateLongComparesAndJumps()
1330 __ cmp(left_high, ShifterOperand(right_high)); in GenerateLongComparesAndJumps()
1332 __ b(true_label, ARMCondition(true_high_cond)); in GenerateLongComparesAndJumps()
1334 __ b(false_label, ARMCondition(false_high_cond)); in GenerateLongComparesAndJumps()
1336 __ b(true_label, ARMCondition(true_high_cond)); in GenerateLongComparesAndJumps()
1337 __ b(false_label, ARMCondition(false_high_cond)); in GenerateLongComparesAndJumps()
1340 __ cmp(left_low, ShifterOperand(right_low)); in GenerateLongComparesAndJumps()
1344 __ b(true_label, final_condition); in GenerateLongComparesAndJumps()
1366 __ vcmps(left.AsFpuRegister<SRegister>(), right.AsFpuRegister<SRegister>()); in GenerateCompareTestAndBranch()
1370 __ vcmpd(FromLowSToD(left.AsFpuRegisterPairLow<SRegister>()), in GenerateCompareTestAndBranch()
1379 __ b(false_target); in GenerateCompareTestAndBranch()
1383 __ Bind(&fallthrough_target); in GenerateCompareTestAndBranch()
1400 __ b(true_target); in GenerateTestAndBranch()
1405 __ b(false_target); in GenerateTestAndBranch()
1424 __ CompareAndBranchIfZero(cond_val.AsRegister<Register>(), false_target); in GenerateTestAndBranch()
1426 __ CompareAndBranchIfNonZero(cond_val.AsRegister<Register>(), true_target); in GenerateTestAndBranch()
1446 __ cmp(left, ShifterOperand(right.AsRegister<Register>())); in GenerateTestAndBranch()
1449 __ CmpConstant(left, CodeGenerator::GetInt32ValueOf(right.GetConstant())); in GenerateTestAndBranch()
1452 __ b(false_target, ARMCondition(condition->GetOppositeCondition())); in GenerateTestAndBranch()
1454 __ b(true_target, ARMCondition(condition->GetCondition())); in GenerateTestAndBranch()
1461 __ b(false_target); in GenerateTestAndBranch()
1521 __ Bind(&false_target); in VisitSelect()
1533 __ nop(); in GenerateNop()
1582 __ cmp(left.AsRegister<Register>(), ShifterOperand(right.AsRegister<Register>())); in HandleCondition()
1585 __ CmpConstant(left.AsRegister<Register>(), in HandleCondition()
1588 __ it(ARMCondition(cond->GetCondition()), kItElse); in HandleCondition()
1589 __ mov(locations->Out().AsRegister<Register>(), ShifterOperand(1), in HandleCondition()
1591 __ mov(locations->Out().AsRegister<Register>(), ShifterOperand(0), in HandleCondition()
1599 __ vcmps(left.AsFpuRegister<SRegister>(), right.AsFpuRegister<SRegister>()); in HandleCondition()
1603 __ vcmpd(FromLowSToD(left.AsFpuRegisterPairLow<SRegister>()), in HandleCondition()
1613 __ Bind(&false_label); in HandleCondition()
1614 __ LoadImmediate(out, 0); in HandleCondition()
1615 __ b(&done_label); in HandleCondition()
1618 __ Bind(&true_label); in HandleCondition()
1619 __ LoadImmediate(out, 1); in HandleCondition()
1620 __ Bind(&done_label); in HandleCondition()
1882 __ LoadImmediate(hidden_reg, invoke->GetDexMethodIndex()); in VisitInvokeInterface()
1885 __ LoadFromOffset(kLoadWord, temp, SP, receiver.GetStackIndex()); in VisitInvokeInterface()
1887 __ LoadFromOffset(kLoadWord, temp, temp, class_offset); in VisitInvokeInterface()
1890 __ LoadFromOffset(kLoadWord, temp, receiver.AsRegister<Register>(), class_offset); in VisitInvokeInterface()
1900 __ MaybeUnpoisonHeapReference(temp); in VisitInvokeInterface()
1904 __ LoadFromOffset(kLoadWord, temp, temp, method_offset); in VisitInvokeInterface()
1906 __ LoadFromOffset(kLoadWord, LR, temp, entry_point); in VisitInvokeInterface()
1908 __ blx(LR); in VisitInvokeInterface()
1946 __ rsb(out.AsRegister<Register>(), in.AsRegister<Register>(), ShifterOperand(0)); in VisitNeg()
1952 __ rsbs(out.AsRegisterPairLow<Register>(), in VisitNeg()
1961 __ sbc(out.AsRegisterPairHigh<Register>(), in VisitNeg()
1965 __ sub(out.AsRegisterPairHigh<Register>(), in VisitNeg()
1972 __ vnegs(out.AsFpuRegister<SRegister>(), in.AsFpuRegister<SRegister>()); in VisitNeg()
1977 __ vnegd(FromLowSToD(out.AsFpuRegisterPairLow<SRegister>()), in VisitNeg()
2217 __ sbfx(out.AsRegister<Register>(), in.AsRegisterPairLow<Register>(), 0, 8); in VisitTypeConversion()
2225 __ sbfx(out.AsRegister<Register>(), in.AsRegister<Register>(), 0, 8); in VisitTypeConversion()
2238 __ sbfx(out.AsRegister<Register>(), in.AsRegisterPairLow<Register>(), 0, 16); in VisitTypeConversion()
2246 __ sbfx(out.AsRegister<Register>(), in.AsRegister<Register>(), 0, 16); in VisitTypeConversion()
2261 __ Mov(out.AsRegister<Register>(), in.AsRegisterPairLow<Register>()); in VisitTypeConversion()
2263 __ LoadFromOffset(kLoadWord, out.AsRegister<Register>(), SP, in.GetStackIndex()); in VisitTypeConversion()
2268 __ LoadImmediate(out.AsRegister<Register>(), static_cast<int32_t>(value)); in VisitTypeConversion()
2275 __ vmovs(temp, in.AsFpuRegister<SRegister>()); in VisitTypeConversion()
2276 __ vcvtis(temp, temp); in VisitTypeConversion()
2277 __ vmovrs(out.AsRegister<Register>(), temp); in VisitTypeConversion()
2285 __ vmovd(temp_d, FromLowSToD(in.AsFpuRegisterPairLow<SRegister>())); in VisitTypeConversion()
2286 __ vcvtid(temp_s, temp_d); in VisitTypeConversion()
2287 __ vmovrs(out.AsRegister<Register>(), temp_s); in VisitTypeConversion()
2308 __ Mov(out.AsRegisterPairLow<Register>(), in.AsRegister<Register>()); in VisitTypeConversion()
2310 __ Asr(out.AsRegisterPairHigh<Register>(), in VisitTypeConversion()
2343 __ ubfx(out.AsRegister<Register>(), in.AsRegisterPairLow<Register>(), 0, 16); in VisitTypeConversion()
2351 __ ubfx(out.AsRegister<Register>(), in.AsRegister<Register>(), 0, 16); in VisitTypeConversion()
2369 __ vmovsr(out.AsFpuRegister<SRegister>(), in.AsRegister<Register>()); in VisitTypeConversion()
2370 __ vcvtsi(out.AsFpuRegister<SRegister>(), out.AsFpuRegister<SRegister>()); in VisitTypeConversion()
2385 __ vcvtsd(out.AsFpuRegister<SRegister>(), in VisitTypeConversion()
2404 __ vmovsr(out.AsFpuRegisterPairLow<SRegister>(), in.AsRegister<Register>()); in VisitTypeConversion()
2405 __ vcvtdi(FromLowSToD(out.AsFpuRegisterPairLow<SRegister>()), in VisitTypeConversion()
2422 __ vmovsr(temp_s, high); in VisitTypeConversion()
2423 __ vcvtdi(temp_d, temp_s); in VisitTypeConversion()
2425 __ LoadDImmediate(constant_d, bit_cast<double, int64_t>(k2Pow32EncodingForDouble)); in VisitTypeConversion()
2427 __ vmovsr(out_s, low); in VisitTypeConversion()
2428 __ vcvtdu(out_d, out_s); in VisitTypeConversion()
2430 __ vmlad(out_d, temp_d, constant_d); in VisitTypeConversion()
2436 __ vcvtds(FromLowSToD(out.AsFpuRegisterPairLow<SRegister>()), in VisitTypeConversion()
2491 __ add(out.AsRegister<Register>(), in VisitAdd()
2495 __ AddConstant(out.AsRegister<Register>(), in VisitAdd()
2503 __ adds(out.AsRegisterPairLow<Register>(), in VisitAdd()
2506 __ adc(out.AsRegisterPairHigh<Register>(), in VisitAdd()
2513 __ vadds(out.AsFpuRegister<SRegister>(), in VisitAdd()
2519 __ vaddd(FromLowSToD(out.AsFpuRegisterPairLow<SRegister>()), in VisitAdd()
2566 __ sub(out.AsRegister<Register>(), in VisitSub()
2570 __ AddConstant(out.AsRegister<Register>(), in VisitSub()
2579 __ subs(out.AsRegisterPairLow<Register>(), in VisitSub()
2582 __ sbc(out.AsRegisterPairHigh<Register>(), in VisitSub()
2589 __ vsubs(out.AsFpuRegister<SRegister>(), in VisitSub()
2596 __ vsubd(FromLowSToD(out.AsFpuRegisterPairLow<SRegister>()), in VisitSub()
2640 __ mul(out.AsRegister<Register>(), in VisitMul()
2666 __ mul(IP, in1_lo, in2_hi); in VisitMul()
2668 __ mla(out_hi, in1_hi, in2_lo, IP); in VisitMul()
2670 __ umull(out_lo, IP, in1_lo, in2_lo); in VisitMul()
2672 __ add(out_hi, out_hi, ShifterOperand(IP)); in VisitMul()
2677 __ vmuls(out.AsFpuRegister<SRegister>(), in VisitMul()
2684 __ vmuld(FromLowSToD(out.AsFpuRegisterPairLow<SRegister>()), in VisitMul()
2709 __ LoadImmediate(out, 0); in DivRemOneOrMinusOne()
2712 __ Mov(out, dividend); in DivRemOneOrMinusOne()
2714 __ rsb(out, dividend, ShifterOperand(0)); in DivRemOneOrMinusOne()
2735 __ Lsr(temp, dividend, 32 - ctz_imm); in DivRemByPowerOfTwo()
2737 __ Asr(temp, dividend, 31); in DivRemByPowerOfTwo()
2738 __ Lsr(temp, temp, 32 - ctz_imm); in DivRemByPowerOfTwo()
2740 __ add(out, temp, ShifterOperand(dividend)); in DivRemByPowerOfTwo()
2743 __ Asr(out, out, ctz_imm); in DivRemByPowerOfTwo()
2745 __ rsb(out, out, ShifterOperand(0)); in DivRemByPowerOfTwo()
2748 __ ubfx(out, out, 0, ctz_imm); in DivRemByPowerOfTwo()
2749 __ sub(out, out, ShifterOperand(temp)); in DivRemByPowerOfTwo()
2771 __ LoadImmediate(temp1, magic); in GenerateDivRemWithAnyConstant()
2772 __ smull(temp2, temp1, dividend, temp1); in GenerateDivRemWithAnyConstant()
2775 __ add(temp1, temp1, ShifterOperand(dividend)); in GenerateDivRemWithAnyConstant()
2777 __ sub(temp1, temp1, ShifterOperand(dividend)); in GenerateDivRemWithAnyConstant()
2781 __ Asr(temp1, temp1, shift); in GenerateDivRemWithAnyConstant()
2785 __ sub(out, temp1, ShifterOperand(temp1, ASR, 31)); in GenerateDivRemWithAnyConstant()
2787 __ sub(temp1, temp1, ShifterOperand(temp1, ASR, 31)); in GenerateDivRemWithAnyConstant()
2789 __ LoadImmediate(temp2, imm); in GenerateDivRemWithAnyConstant()
2790 __ mls(out, temp1, temp2, dividend); in GenerateDivRemWithAnyConstant()
2892 __ sdiv(out.AsRegister<Register>(), in VisitDiv()
2922 __ vdivs(out.AsFpuRegister<SRegister>(), in VisitDiv()
2929 __ vdivd(FromLowSToD(out.AsFpuRegisterPairLow<SRegister>()), in VisitDiv()
3037 __ sdiv(temp, reg1, reg2); in VisitRem()
3038 __ mls(out.AsRegister<Register>(), temp, reg2, reg1); in VisitRem()
3099 __ CompareAndBranchIfZero(value.AsRegister<Register>(), slow_path->GetEntryLabel()); in VisitDivZeroCheck()
3103 __ b(slow_path->GetEntryLabel()); in VisitDivZeroCheck()
3110 __ orrs(IP, in VisitDivZeroCheck()
3113 __ b(slow_path->GetEntryLabel(), EQ); in VisitDivZeroCheck()
3117 __ b(slow_path->GetEntryLabel()); in VisitDivZeroCheck()
3140 __ Ror(out, in, rot); in HandleIntegerRotate()
3142 __ Mov(out, in); in HandleIntegerRotate()
3145 __ Ror(out, in, rhs.AsRegister<Register>()); in HandleIntegerRotate()
3173 __ Lsr(out_reg_hi, in_reg_hi, rot); in HandleLongRotate()
3174 __ orr(out_reg_hi, out_reg_hi, ShifterOperand(in_reg_lo, arm::LSL, kArmBitsPerWord - rot)); in HandleLongRotate()
3175 __ Lsr(out_reg_lo, in_reg_lo, rot); in HandleLongRotate()
3176 __ orr(out_reg_lo, out_reg_lo, ShifterOperand(in_reg_hi, arm::LSL, kArmBitsPerWord - rot)); in HandleLongRotate()
3178 __ Mov(out_reg_lo, in_reg_lo); in HandleLongRotate()
3179 __ Mov(out_reg_hi, in_reg_hi); in HandleLongRotate()
3187 __ and_(shift_right, rhs.AsRegister<Register>(), ShifterOperand(0x1F)); in HandleLongRotate()
3188 __ Lsrs(shift_left, rhs.AsRegister<Register>(), 6); in HandleLongRotate()
3189 __ rsb(shift_left, shift_right, ShifterOperand(kArmBitsPerWord), AL, kCcKeep); in HandleLongRotate()
3190 __ b(&shift_by_32_plus_shift_right, CC); in HandleLongRotate()
3194 __ Lsl(out_reg_hi, in_reg_hi, shift_left); in HandleLongRotate()
3195 __ Lsr(out_reg_lo, in_reg_lo, shift_right); in HandleLongRotate()
3196 __ add(out_reg_hi, out_reg_hi, ShifterOperand(out_reg_lo)); in HandleLongRotate()
3197 __ Lsl(out_reg_lo, in_reg_lo, shift_left); in HandleLongRotate()
3198 __ Lsr(shift_left, in_reg_hi, shift_right); in HandleLongRotate()
3199 __ add(out_reg_lo, out_reg_lo, ShifterOperand(shift_left)); in HandleLongRotate()
3200 __ b(&end); in HandleLongRotate()
3202 __ Bind(&shift_by_32_plus_shift_right); // Shift by 32+shift_right. in HandleLongRotate()
3205 __ Lsr(out_reg_hi, in_reg_hi, shift_right); in HandleLongRotate()
3206 __ Lsl(out_reg_lo, in_reg_lo, shift_left); in HandleLongRotate()
3207 __ add(out_reg_hi, out_reg_hi, ShifterOperand(out_reg_lo)); in HandleLongRotate()
3208 __ Lsr(out_reg_lo, in_reg_lo, shift_right); in HandleLongRotate()
3209 __ Lsl(shift_right, in_reg_hi, shift_left); in HandleLongRotate()
3210 __ add(out_reg_lo, out_reg_lo, ShifterOperand(shift_right)); in HandleLongRotate()
3212 __ Bind(&end); in HandleLongRotate()
3316 __ and_(out_reg, second_reg, ShifterOperand(kMaxIntShiftDistance)); in HandleShift()
3318 __ Lsl(out_reg, first_reg, out_reg); in HandleShift()
3320 __ Asr(out_reg, first_reg, out_reg); in HandleShift()
3322 __ Lsr(out_reg, first_reg, out_reg); in HandleShift()
3328 __ Mov(out_reg, first_reg); in HandleShift()
3330 __ Lsl(out_reg, first_reg, shift_value); in HandleShift()
3332 __ Asr(out_reg, first_reg, shift_value); in HandleShift()
3334 __ Lsr(out_reg, first_reg, shift_value); in HandleShift()
3352 __ and_(o_l, second_reg, ShifterOperand(kMaxLongShiftDistance)); in HandleShift()
3354 __ Lsl(o_h, high, o_l); in HandleShift()
3356 __ rsb(temp, o_l, ShifterOperand(kArmBitsPerWord)); in HandleShift()
3357 __ Lsr(temp, low, temp); in HandleShift()
3358 __ orr(o_h, o_h, ShifterOperand(temp)); in HandleShift()
3360 __ subs(temp, o_l, ShifterOperand(kArmBitsPerWord)); in HandleShift()
3361 __ it(PL); in HandleShift()
3362 __ Lsl(o_h, low, temp, PL); in HandleShift()
3364 __ Lsl(o_l, low, o_l); in HandleShift()
3366 __ and_(o_h, second_reg, ShifterOperand(kMaxLongShiftDistance)); in HandleShift()
3368 __ Lsr(o_l, low, o_h); in HandleShift()
3370 __ rsb(temp, o_h, ShifterOperand(kArmBitsPerWord)); in HandleShift()
3371 __ Lsl(temp, high, temp); in HandleShift()
3372 __ orr(o_l, o_l, ShifterOperand(temp)); in HandleShift()
3374 __ subs(temp, o_h, ShifterOperand(kArmBitsPerWord)); in HandleShift()
3375 __ it(PL); in HandleShift()
3376 __ Asr(o_l, high, temp, PL); in HandleShift()
3378 __ Asr(o_h, high, o_h); in HandleShift()
3380 __ and_(o_h, second_reg, ShifterOperand(kMaxLongShiftDistance)); in HandleShift()
3382 __ Lsr(o_l, low, o_h); in HandleShift()
3383 __ rsb(temp, o_h, ShifterOperand(kArmBitsPerWord)); in HandleShift()
3384 __ Lsl(temp, high, temp); in HandleShift()
3385 __ orr(o_l, o_l, ShifterOperand(temp)); in HandleShift()
3386 __ subs(temp, o_h, ShifterOperand(kArmBitsPerWord)); in HandleShift()
3387 __ it(PL); in HandleShift()
3388 __ Lsr(o_l, high, temp, PL); in HandleShift()
3389 __ Lsr(o_h, high, o_h); in HandleShift()
3399 __ Lsl(o_h, low, shift_value - 32); in HandleShift()
3400 __ LoadImmediate(o_l, 0); in HandleShift()
3402 __ Asr(o_l, high, shift_value - 32); in HandleShift()
3403 __ Asr(o_h, high, 31); in HandleShift()
3405 __ Lsr(o_l, high, shift_value - 32); in HandleShift()
3406 __ LoadImmediate(o_h, 0); in HandleShift()
3410 __ mov(o_h, ShifterOperand(low)); in HandleShift()
3411 __ LoadImmediate(o_l, 0); in HandleShift()
3413 __ mov(o_l, ShifterOperand(high)); in HandleShift()
3414 __ Asr(o_h, high, 31); in HandleShift()
3416 __ mov(o_l, ShifterOperand(high)); in HandleShift()
3417 __ LoadImmediate(o_h, 0); in HandleShift()
3421 __ Lsls(o_l, low, 1); in HandleShift()
3422 __ adc(o_h, high, ShifterOperand(high)); in HandleShift()
3424 __ Asrs(o_h, high, 1); in HandleShift()
3425 __ Rrx(o_l, low); in HandleShift()
3427 __ Lsrs(o_h, high, 1); in HandleShift()
3428 __ Rrx(o_l, low); in HandleShift()
3433 __ Lsl(o_h, high, shift_value); in HandleShift()
3434 __ orr(o_h, o_h, ShifterOperand(low, LSR, 32 - shift_value)); in HandleShift()
3435 __ Lsl(o_l, low, shift_value); in HandleShift()
3437 __ Lsr(o_l, low, shift_value); in HandleShift()
3438 __ orr(o_l, o_l, ShifterOperand(high, LSL, 32 - shift_value)); in HandleShift()
3439 __ Asr(o_h, high, shift_value); in HandleShift()
3441 __ Lsr(o_l, low, shift_value); in HandleShift()
3442 __ orr(o_l, o_l, ShifterOperand(high, LSL, 32 - shift_value)); in HandleShift()
3443 __ Lsr(o_h, high, shift_value); in HandleShift()
3499 __ LoadFromOffset(kLoadWord, temp, TR, QUICK_ENTRY_POINT(pNewEmptyString)); in VisitNewInstance()
3500 __ LoadFromOffset(kLoadWord, LR, temp, code_offset.Int32Value()); in VisitNewInstance()
3501 __ blx(LR); in VisitNewInstance()
3524 __ LoadImmediate(calling_convention.GetRegisterAt(0), instruction->GetTypeIndex()); in VisitNewArray()
3574 __ mvn(out.AsRegister<Register>(), ShifterOperand(in.AsRegister<Register>())); in VisitNot()
3578 __ mvn(out.AsRegisterPairLow<Register>(), in VisitNot()
3580 __ mvn(out.AsRegisterPairHigh<Register>(), in VisitNot()
3600 __ eor(out.AsRegister<Register>(), in.AsRegister<Register>(), ShifterOperand(1)); in VisitBooleanNot()
3646 __ LoadImmediate(out, 0); in VisitCompare()
3647 __ cmp(left.AsRegister<Register>(), in VisitCompare()
3653 __ cmp(left.AsRegisterPairHigh<Register>(), in VisitCompare()
3655 __ b(&less, LT); in VisitCompare()
3656 __ b(&greater, GT); in VisitCompare()
3658 __ LoadImmediate(out, 0); in VisitCompare()
3659 __ cmp(left.AsRegisterPairLow<Register>(), in VisitCompare()
3666 __ LoadImmediate(out, 0); in VisitCompare()
3668 __ vcmps(left.AsFpuRegister<SRegister>(), right.AsFpuRegister<SRegister>()); in VisitCompare()
3670 __ vcmpd(FromLowSToD(left.AsFpuRegisterPairLow<SRegister>()), in VisitCompare()
3673 __ vmstat(); // transfer FP status register to ARM APSR. in VisitCompare()
3682 __ b(&done, EQ); in VisitCompare()
3683 __ b(&less, less_cond); in VisitCompare()
3685 __ Bind(&greater); in VisitCompare()
3686 __ LoadImmediate(out, 1); in VisitCompare()
3687 __ b(&done); in VisitCompare()
3689 __ Bind(&less); in VisitCompare()
3690 __ LoadImmediate(out, -1); in VisitCompare()
3692 __ Bind(&done); in VisitCompare()
3725 __ dmb(flavor); in GenerateMemoryBarrier()
3736 __ LoadImmediate(out_lo, offset); in GenerateWideAtomicLoad()
3737 __ add(IP, addr, ShifterOperand(out_lo)); in GenerateWideAtomicLoad()
3740 __ ldrexd(out_lo, out_hi, addr); in GenerateWideAtomicLoad()
3752 __ LoadImmediate(temp1, offset); in GenerateWideAtomicStore()
3753 __ add(IP, addr, ShifterOperand(temp1)); in GenerateWideAtomicStore()
3756 __ Bind(&fail); in GenerateWideAtomicStore()
3759 __ ldrexd(temp1, temp2, addr); in GenerateWideAtomicStore()
3761 __ strexd(temp1, value_lo, value_hi, addr); in GenerateWideAtomicStore()
3762 __ CompareAndBranchIfNonZero(temp1, &fail); in GenerateWideAtomicStore()
3831 __ StoreToOffset(kStoreByte, value.AsRegister<Register>(), base, offset); in HandleFieldSet()
3837 __ StoreToOffset(kStoreHalfword, value.AsRegister<Register>(), base, offset); in HandleFieldSet()
3849 __ Mov(temp, value.AsRegister<Register>()); in HandleFieldSet()
3850 __ PoisonHeapReference(temp); in HandleFieldSet()
3851 __ StoreToOffset(kStoreWord, temp, base, offset); in HandleFieldSet()
3853 __ StoreToOffset(kStoreWord, value.AsRegister<Register>(), base, offset); in HandleFieldSet()
3867 __ StoreToOffset(kStoreWordPair, value.AsRegisterPairLow<Register>(), base, offset); in HandleFieldSet()
3874 __ StoreSToOffset(value.AsFpuRegister<SRegister>(), base, offset); in HandleFieldSet()
3884 __ vmovrrd(value_reg_lo, value_reg_hi, value_reg); in HandleFieldSet()
3893 __ StoreDToOffset(value_reg, base, offset); in HandleFieldSet()
4022 __ LoadFromOffset(kLoadUnsignedByte, out.AsRegister<Register>(), base, offset); in HandleFieldGet()
4026 __ LoadFromOffset(kLoadSignedByte, out.AsRegister<Register>(), base, offset); in HandleFieldGet()
4030 __ LoadFromOffset(kLoadSignedHalfword, out.AsRegister<Register>(), base, offset); in HandleFieldGet()
4034 __ LoadFromOffset(kLoadUnsignedHalfword, out.AsRegister<Register>(), base, offset); in HandleFieldGet()
4038 __ LoadFromOffset(kLoadWord, out.AsRegister<Register>(), base, offset); in HandleFieldGet()
4053 __ LoadFromOffset(kLoadWord, out.AsRegister<Register>(), base, offset); in HandleFieldGet()
4072 __ LoadFromOffset(kLoadWordPair, out.AsRegisterPairLow<Register>(), base, offset); in HandleFieldGet()
4077 __ LoadSFromOffset(out.AsFpuRegister<SRegister>(), base, offset); in HandleFieldGet()
4087 __ vmovdrr(out_reg, lo, hi); in HandleFieldGet()
4089 __ LoadDFromOffset(out_reg, base, offset); in HandleFieldGet()
4234 __ LoadFromOffset(kLoadWord, IP, obj.AsRegister<Register>(), 0); in GenerateImplicitNullCheck()
4245 __ CompareAndBranchIfZero(obj.AsRegister<Register>(), slow_path->GetEntryLabel()); in GenerateExplicitNullCheck()
4294 __ LoadFromOffset(kLoadUnsignedByte, out, obj, offset); in VisitArrayGet()
4296 __ add(IP, obj, ShifterOperand(index.AsRegister<Register>())); in VisitArrayGet()
4297 __ LoadFromOffset(kLoadUnsignedByte, out, IP, data_offset); in VisitArrayGet()
4308 __ LoadFromOffset(kLoadSignedByte, out, obj, offset); in VisitArrayGet()
4310 __ add(IP, obj, ShifterOperand(index.AsRegister<Register>())); in VisitArrayGet()
4311 __ LoadFromOffset(kLoadSignedByte, out, IP, data_offset); in VisitArrayGet()
4322 __ LoadFromOffset(kLoadSignedHalfword, out, obj, offset); in VisitArrayGet()
4324 __ add(IP, obj, ShifterOperand(index.AsRegister<Register>(), LSL, TIMES_2)); in VisitArrayGet()
4325 __ LoadFromOffset(kLoadSignedHalfword, out, IP, data_offset); in VisitArrayGet()
4336 __ LoadFromOffset(kLoadUnsignedHalfword, out, obj, offset); in VisitArrayGet()
4338 __ add(IP, obj, ShifterOperand(index.AsRegister<Register>(), LSL, TIMES_2)); in VisitArrayGet()
4339 __ LoadFromOffset(kLoadUnsignedHalfword, out, IP, data_offset); in VisitArrayGet()
4350 __ LoadFromOffset(kLoadWord, out, obj, offset); in VisitArrayGet()
4352 __ add(IP, obj, ShifterOperand(index.AsRegister<Register>(), LSL, TIMES_4)); in VisitArrayGet()
4353 __ LoadFromOffset(kLoadWord, out, IP, data_offset); in VisitArrayGet()
4376 __ LoadFromOffset(kLoadWord, out, obj, offset); in VisitArrayGet()
4383 __ add(IP, obj, ShifterOperand(index.AsRegister<Register>(), LSL, TIMES_4)); in VisitArrayGet()
4384 __ LoadFromOffset(kLoadWord, out, IP, data_offset); in VisitArrayGet()
4401 __ LoadFromOffset(kLoadWordPair, out_loc.AsRegisterPairLow<Register>(), obj, offset); in VisitArrayGet()
4403 __ add(IP, obj, ShifterOperand(index.AsRegister<Register>(), LSL, TIMES_8)); in VisitArrayGet()
4404 __ LoadFromOffset(kLoadWordPair, out_loc.AsRegisterPairLow<Register>(), IP, data_offset); in VisitArrayGet()
4414 __ LoadSFromOffset(out, obj, offset); in VisitArrayGet()
4416 __ add(IP, obj, ShifterOperand(index.AsRegister<Register>(), LSL, TIMES_4)); in VisitArrayGet()
4417 __ LoadSFromOffset(out, IP, data_offset); in VisitArrayGet()
4427 __ LoadDFromOffset(FromLowSToD(out), obj, offset); in VisitArrayGet()
4429 __ add(IP, obj, ShifterOperand(index.AsRegister<Register>(), LSL, TIMES_8)); in VisitArrayGet()
4430 __ LoadDFromOffset(FromLowSToD(out), IP, data_offset); in VisitArrayGet()
4495 __ StoreToOffset(kStoreByte, value, array, offset); in VisitArraySet()
4497 __ add(IP, array, ShifterOperand(index.AsRegister<Register>())); in VisitArraySet()
4498 __ StoreToOffset(kStoreByte, value, IP, data_offset); in VisitArraySet()
4510 __ StoreToOffset(kStoreHalfword, value, array, offset); in VisitArraySet()
4512 __ add(IP, array, ShifterOperand(index.AsRegister<Register>(), LSL, TIMES_2)); in VisitArraySet()
4513 __ StoreToOffset(kStoreHalfword, value, IP, data_offset); in VisitArraySet()
4529 __ StoreToOffset(kStoreWord, source, array, offset); in VisitArraySet()
4532 __ add(IP, array, ShifterOperand(index.AsRegister<Register>(), LSL, TIMES_4)); in VisitArraySet()
4533 __ StoreToOffset(kStoreWord, source, IP, data_offset); in VisitArraySet()
4555 __ CompareAndBranchIfNonZero(value, &non_zero); in VisitArraySet()
4559 __ StoreToOffset(kStoreWord, value, array, offset); in VisitArraySet()
4562 __ add(IP, array, ShifterOperand(index.AsRegister<Register>(), LSL, TIMES_4)); in VisitArraySet()
4563 __ StoreToOffset(kStoreWord, value, IP, data_offset); in VisitArraySet()
4566 __ b(&done); in VisitArraySet()
4567 __ Bind(&non_zero); in VisitArraySet()
4596 __ b(slow_path->GetEntryLabel()); in VisitArraySet()
4599 __ LoadFromOffset(kLoadWord, temp1, array, class_offset); in VisitArraySet()
4601 __ MaybeUnpoisonHeapReference(temp1); in VisitArraySet()
4604 __ LoadFromOffset(kLoadWord, temp1, temp1, component_offset); in VisitArraySet()
4606 __ LoadFromOffset(kLoadWord, temp2, value, class_offset); in VisitArraySet()
4609 __ cmp(temp1, ShifterOperand(temp2)); in VisitArraySet()
4613 __ b(&do_put, EQ); in VisitArraySet()
4616 __ MaybeUnpoisonHeapReference(temp1); in VisitArraySet()
4619 __ LoadFromOffset(kLoadWord, temp1, temp1, super_offset); in VisitArraySet()
4622 __ CompareAndBranchIfNonZero(temp1, slow_path->GetEntryLabel()); in VisitArraySet()
4623 __ Bind(&do_put); in VisitArraySet()
4625 __ b(slow_path->GetEntryLabel(), NE); in VisitArraySet()
4635 __ Mov(temp1, value); in VisitArraySet()
4636 __ PoisonHeapReference(temp1); in VisitArraySet()
4643 __ StoreToOffset(kStoreWord, source, array, offset); in VisitArraySet()
4646 __ add(IP, array, ShifterOperand(index.AsRegister<Register>(), LSL, TIMES_4)); in VisitArraySet()
4647 __ StoreToOffset(kStoreWord, source, IP, data_offset); in VisitArraySet()
4657 __ Bind(&done); in VisitArraySet()
4661 __ Bind(slow_path->GetExitLabel()); in VisitArraySet()
4673 __ StoreToOffset(kStoreWord, value, array, offset); in VisitArraySet()
4676 __ add(IP, array, ShifterOperand(index.AsRegister<Register>(), LSL, TIMES_4)); in VisitArraySet()
4677 __ StoreToOffset(kStoreWord, value, IP, data_offset); in VisitArraySet()
4688 __ StoreToOffset(kStoreWordPair, value.AsRegisterPairLow<Register>(), array, offset); in VisitArraySet()
4690 __ add(IP, array, ShifterOperand(index.AsRegister<Register>(), LSL, TIMES_8)); in VisitArraySet()
4691 __ StoreToOffset(kStoreWordPair, value.AsRegisterPairLow<Register>(), IP, data_offset); in VisitArraySet()
4702 __ StoreSToOffset(value.AsFpuRegister<SRegister>(), array, offset); in VisitArraySet()
4704 __ add(IP, array, ShifterOperand(index.AsRegister<Register>(), LSL, TIMES_4)); in VisitArraySet()
4705 __ StoreSToOffset(value.AsFpuRegister<SRegister>(), IP, data_offset); in VisitArraySet()
4716 __ StoreDToOffset(FromLowSToD(value.AsFpuRegisterPairLow<SRegister>()), array, offset); in VisitArraySet()
4718 __ add(IP, array, ShifterOperand(index.AsRegister<Register>(), LSL, TIMES_8)); in VisitArraySet()
4719 __ StoreDToOffset(FromLowSToD(value.AsFpuRegisterPairLow<SRegister>()), IP, data_offset); in VisitArraySet()
4748 __ LoadFromOffset(kLoadWord, out, obj, offset); in VisitArrayLength()
4773 __ cmp(index, ShifterOperand(length)); in VisitBoundsCheck()
4774 __ b(slow_path->GetEntryLabel(), HS); in VisitBoundsCheck()
4784 __ CompareAndBranchIfZero(value, &is_null); in MarkGCCard()
4786 __ LoadFromOffset(kLoadWord, card, TR, Thread::CardTableOffset<kArmWordSize>().Int32Value()); in MarkGCCard()
4787 __ Lsr(temp, object, gc::accounting::CardTable::kCardShift); in MarkGCCard()
4788 __ strb(card, Address(card, temp)); in MarkGCCard()
4790 __ Bind(&is_null); in MarkGCCard()
4836 __ LoadFromOffset( in GenerateSuspendCheck()
4839 __ CompareAndBranchIfNonZero(IP, slow_path->GetEntryLabel()); in GenerateSuspendCheck()
4840 __ Bind(slow_path->GetReturnLabel()); in GenerateSuspendCheck()
4842 __ CompareAndBranchIfZero(IP, codegen_->GetLabelOf(successor)); in GenerateSuspendCheck()
4843 __ b(slow_path->GetEntryLabel()); in GenerateSuspendCheck()
4858 __ Mov(destination.AsRegister<Register>(), source.AsRegister<Register>()); in EmitMove()
4860 __ vmovsr(destination.AsFpuRegister<SRegister>(), source.AsRegister<Register>()); in EmitMove()
4863 __ StoreToOffset(kStoreWord, source.AsRegister<Register>(), in EmitMove()
4868 __ LoadFromOffset(kLoadWord, destination.AsRegister<Register>(), in EmitMove()
4871 __ LoadSFromOffset(destination.AsFpuRegister<SRegister>(), SP, source.GetStackIndex()); in EmitMove()
4874 __ LoadFromOffset(kLoadWord, IP, SP, source.GetStackIndex()); in EmitMove()
4875 __ StoreToOffset(kStoreWord, IP, SP, destination.GetStackIndex()); in EmitMove()
4879 __ vmovrs(destination.AsRegister<Register>(), source.AsFpuRegister<SRegister>()); in EmitMove()
4881 __ vmovs(destination.AsFpuRegister<SRegister>(), source.AsFpuRegister<SRegister>()); in EmitMove()
4884 __ StoreSToOffset(source.AsFpuRegister<SRegister>(), SP, destination.GetStackIndex()); in EmitMove()
4888 __ LoadDFromOffset(DTMP, SP, source.GetStackIndex()); in EmitMove()
4889 __ StoreDToOffset(DTMP, SP, destination.GetStackIndex()); in EmitMove()
4892 __ LoadFromOffset( in EmitMove()
4896 __ LoadDFromOffset(FromLowSToD(destination.AsFpuRegisterPairLow<SRegister>()), in EmitMove()
4902 __ Mov(destination.AsRegisterPairLow<Register>(), source.AsRegisterPairLow<Register>()); in EmitMove()
4903 __ Mov(destination.AsRegisterPairHigh<Register>(), source.AsRegisterPairHigh<Register>()); in EmitMove()
4905 __ vmovdrr(FromLowSToD(destination.AsFpuRegisterPairLow<SRegister>()), in EmitMove()
4911 __ StoreToOffset( in EmitMove()
4916 __ vmovrrd(destination.AsRegisterPairLow<Register>(), in EmitMove()
4920 __ vmovd(FromLowSToD(destination.AsFpuRegisterPairLow<SRegister>()), in EmitMove()
4924 __ StoreDToOffset(FromLowSToD(source.AsFpuRegisterPairLow<SRegister>()), in EmitMove()
4934 __ LoadImmediate(destination.AsRegister<Register>(), value); in EmitMove()
4937 __ LoadImmediate(IP, value); in EmitMove()
4938 __ StoreToOffset(kStoreWord, IP, SP, destination.GetStackIndex()); in EmitMove()
4943 __ LoadImmediate(destination.AsRegisterPairLow<Register>(), Low32Bits(value)); in EmitMove()
4944 __ LoadImmediate(destination.AsRegisterPairHigh<Register>(), High32Bits(value)); in EmitMove()
4947 __ LoadImmediate(IP, Low32Bits(value)); in EmitMove()
4948 __ StoreToOffset(kStoreWord, IP, SP, destination.GetStackIndex()); in EmitMove()
4949 __ LoadImmediate(IP, High32Bits(value)); in EmitMove()
4950 __ StoreToOffset(kStoreWord, IP, SP, destination.GetHighStackIndex(kArmWordSize)); in EmitMove()
4955 __ LoadDImmediate(FromLowSToD(destination.AsFpuRegisterPairLow<SRegister>()), value); in EmitMove()
4959 __ LoadImmediate(IP, Low32Bits(int_value)); in EmitMove()
4960 __ StoreToOffset(kStoreWord, IP, SP, destination.GetStackIndex()); in EmitMove()
4961 __ LoadImmediate(IP, High32Bits(int_value)); in EmitMove()
4962 __ StoreToOffset(kStoreWord, IP, SP, destination.GetHighStackIndex(kArmWordSize)); in EmitMove()
4968 __ LoadSImmediate(destination.AsFpuRegister<SRegister>(), value); in EmitMove()
4971 __ LoadImmediate(IP, bit_cast<int32_t, float>(value)); in EmitMove()
4972 __ StoreToOffset(kStoreWord, IP, SP, destination.GetStackIndex()); in EmitMove()
4979 __ Mov(IP, reg); in Exchange()
4980 __ LoadFromOffset(kLoadWord, reg, SP, mem); in Exchange()
4981 __ StoreToOffset(kStoreWord, IP, SP, mem); in Exchange()
4987 __ LoadFromOffset(kLoadWord, static_cast<Register>(ensure_scratch.GetRegister()), in Exchange()
4989 __ LoadFromOffset(kLoadWord, IP, SP, mem2 + stack_offset); in Exchange()
4990 __ StoreToOffset(kStoreWord, static_cast<Register>(ensure_scratch.GetRegister()), in Exchange()
4992 __ StoreToOffset(kStoreWord, IP, SP, mem1 + stack_offset); in Exchange()
5003 __ Mov(IP, source.AsRegister<Register>()); in EmitSwap()
5004 __ Mov(source.AsRegister<Register>(), destination.AsRegister<Register>()); in EmitSwap()
5005 __ Mov(destination.AsRegister<Register>(), IP); in EmitSwap()
5013 __ vmovrs(IP, source.AsFpuRegister<SRegister>()); in EmitSwap()
5014 __ vmovs(source.AsFpuRegister<SRegister>(), destination.AsFpuRegister<SRegister>()); in EmitSwap()
5015 __ vmovsr(destination.AsFpuRegister<SRegister>(), IP); in EmitSwap()
5017 __ vmovdrr(DTMP, source.AsRegisterPairLow<Register>(), source.AsRegisterPairHigh<Register>()); in EmitSwap()
5018 __ Mov(source.AsRegisterPairLow<Register>(), destination.AsRegisterPairLow<Register>()); in EmitSwap()
5019 __ Mov(source.AsRegisterPairHigh<Register>(), destination.AsRegisterPairHigh<Register>()); in EmitSwap()
5020 __ vmovrrd(destination.AsRegisterPairLow<Register>(), in EmitSwap()
5031 __ vmovdrr(DTMP, low_reg, static_cast<Register>(low_reg + 1)); in EmitSwap()
5032 __ LoadFromOffset(kLoadWordPair, low_reg, SP, mem); in EmitSwap()
5033 __ StoreDToOffset(DTMP, SP, mem); in EmitSwap()
5037 __ vmovd(DTMP, first); in EmitSwap()
5038 __ vmovd(first, second); in EmitSwap()
5039 __ vmovd(second, DTMP); in EmitSwap()
5047 __ vmovd(DTMP, reg); in EmitSwap()
5048 __ LoadDFromOffset(reg, SP, mem); in EmitSwap()
5049 __ StoreDToOffset(DTMP, SP, mem); in EmitSwap()
5057 __ vmovrs(IP, reg); in EmitSwap()
5058 __ LoadSFromOffset(reg, SP, mem); in EmitSwap()
5059 __ StoreToOffset(kStoreWord, IP, SP, mem); in EmitSwap()
5069 __ Push(static_cast<Register>(reg)); in SpillScratch()
5073 __ Pop(static_cast<Register>(reg)); in RestoreScratch()
5110 __ LoadFromOffset(kLoadWord, in VisitLoadClass()
5123 __ CompareAndBranchIfZero(out, slow_path->GetEntryLabel()); in VisitLoadClass()
5128 __ Bind(slow_path->GetExitLabel()); in VisitLoadClass()
5154 __ LoadFromOffset(kLoadWord, IP, class_reg, mirror::Class::StatusOffset().Int32Value()); in GenerateClassInitializationCheck()
5155 __ cmp(IP, ShifterOperand(mirror::Class::kStatusInitialized)); in GenerateClassInitializationCheck()
5156 __ b(slow_path->GetEntryLabel(), LT); in GenerateClassInitializationCheck()
5159 __ dmb(ISH); in GenerateClassInitializationCheck()
5160 __ Bind(slow_path->GetExitLabel()); in GenerateClassInitializationCheck()
5225 __ LoadLiteral(out, codegen_->DeduplicateBootImageStringLiteral(load->GetDexFile(), in VisitLoadString()
5233 __ BindTrackedLabel(&labels->movw_label); in VisitLoadString()
5234 __ movw(out, /* placeholder */ 0u); in VisitLoadString()
5235 __ BindTrackedLabel(&labels->movt_label); in VisitLoadString()
5236 __ movt(out, /* placeholder */ 0u); in VisitLoadString()
5237 __ BindTrackedLabel(&labels->add_pc_label); in VisitLoadString()
5238 __ add(out, out, ShifterOperand(PC)); in VisitLoadString()
5245 __ LoadLiteral(out, codegen_->DeduplicateBootImageAddressLiteral(address)); in VisitLoadString()
5260 __ LoadLiteral(out, codegen_->DeduplicateDexCacheAddressLiteral(base_address)); in VisitLoadString()
5278 __ LoadFromOffset(kLoadWord, out, out, mirror::Class::DexCacheStringsOffset().Int32Value()); in VisitLoadString()
5292 __ CompareAndBranchIfZero(out, slow_path->GetEntryLabel()); in VisitLoadString()
5293 __ Bind(slow_path->GetExitLabel()); in VisitLoadString()
5309 __ LoadFromOffset(kLoadWord, out, TR, GetExceptionTlsOffset()); in VisitLoadException()
5317 __ LoadImmediate(IP, 0); in VisitClearException()
5318 __ StoreToOffset(kStoreWord, IP, TR, GetExceptionTlsOffset()); in VisitClearException()
5394 __ CompareAndBranchIfZero(obj, &zero); in VisitInstanceOf()
5402 __ cmp(out, ShifterOperand(cls)); in VisitInstanceOf()
5404 __ b(&zero, NE); in VisitInstanceOf()
5405 __ LoadImmediate(out, 1); in VisitInstanceOf()
5406 __ b(&done); in VisitInstanceOf()
5414 __ Bind(&loop); in VisitInstanceOf()
5418 __ CompareAndBranchIfZero(out, &done); in VisitInstanceOf()
5419 __ cmp(out, ShifterOperand(cls)); in VisitInstanceOf()
5420 __ b(&loop, NE); in VisitInstanceOf()
5421 __ LoadImmediate(out, 1); in VisitInstanceOf()
5423 __ b(&done); in VisitInstanceOf()
5431 __ Bind(&loop); in VisitInstanceOf()
5432 __ cmp(out, ShifterOperand(cls)); in VisitInstanceOf()
5433 __ b(&success, EQ); in VisitInstanceOf()
5436 __ CompareAndBranchIfNonZero(out, &loop); in VisitInstanceOf()
5438 __ b(&done); in VisitInstanceOf()
5439 __ Bind(&success); in VisitInstanceOf()
5440 __ LoadImmediate(out, 1); in VisitInstanceOf()
5442 __ b(&done); in VisitInstanceOf()
5450 __ cmp(out, ShifterOperand(cls)); in VisitInstanceOf()
5451 __ b(&exact_check, EQ); in VisitInstanceOf()
5456 __ CompareAndBranchIfZero(out, &done); in VisitInstanceOf()
5457 __ LoadFromOffset(kLoadUnsignedHalfword, out, out, primitive_offset); in VisitInstanceOf()
5459 __ CompareAndBranchIfNonZero(out, &zero); in VisitInstanceOf()
5460 __ Bind(&exact_check); in VisitInstanceOf()
5461 __ LoadImmediate(out, 1); in VisitInstanceOf()
5462 __ b(&done); in VisitInstanceOf()
5467 __ cmp(out, ShifterOperand(cls)); in VisitInstanceOf()
5472 __ b(slow_path->GetEntryLabel(), NE); in VisitInstanceOf()
5473 __ LoadImmediate(out, 1); in VisitInstanceOf()
5475 __ b(&done); in VisitInstanceOf()
5504 __ b(slow_path->GetEntryLabel()); in VisitInstanceOf()
5506 __ b(&done); in VisitInstanceOf()
5513 __ Bind(&zero); in VisitInstanceOf()
5514 __ LoadImmediate(out, 0); in VisitInstanceOf()
5518 __ Bind(&done); in VisitInstanceOf()
5522 __ Bind(slow_path->GetExitLabel()); in VisitInstanceOf()
5589 __ CompareAndBranchIfZero(obj, &done); in VisitCheckCast()
5598 __ cmp(temp, ShifterOperand(cls)); in VisitCheckCast()
5601 __ b(type_check_slow_path->GetEntryLabel(), NE); in VisitCheckCast()
5609 __ Bind(&loop); in VisitCheckCast()
5616 __ CompareAndBranchIfNonZero(temp, &compare_classes); in VisitCheckCast()
5625 __ b(type_check_slow_path->GetEntryLabel()); in VisitCheckCast()
5627 __ Bind(&compare_classes); in VisitCheckCast()
5628 __ cmp(temp, ShifterOperand(cls)); in VisitCheckCast()
5629 __ b(&loop, NE); in VisitCheckCast()
5636 __ Bind(&loop); in VisitCheckCast()
5637 __ cmp(temp, ShifterOperand(cls)); in VisitCheckCast()
5638 __ b(&done, EQ); in VisitCheckCast()
5645 __ CompareAndBranchIfNonZero(temp, &loop); in VisitCheckCast()
5654 __ b(type_check_slow_path->GetEntryLabel()); in VisitCheckCast()
5661 __ cmp(temp, ShifterOperand(cls)); in VisitCheckCast()
5662 __ b(&done, EQ); in VisitCheckCast()
5672 __ CompareAndBranchIfNonZero(temp, &check_non_primitive_component_type); in VisitCheckCast()
5681 __ b(type_check_slow_path->GetEntryLabel()); in VisitCheckCast()
5683 __ Bind(&check_non_primitive_component_type); in VisitCheckCast()
5684 __ LoadFromOffset(kLoadUnsignedHalfword, temp, temp, primitive_offset); in VisitCheckCast()
5686 __ CompareAndBranchIfZero(temp, &done); in VisitCheckCast()
5691 __ b(type_check_slow_path->GetEntryLabel()); in VisitCheckCast()
5714 __ b(type_check_slow_path->GetEntryLabel()); in VisitCheckCast()
5717 __ Bind(&done); in VisitCheckCast()
5719 __ Bind(type_check_slow_path->GetExitLabel()); in VisitCheckCast()
5794 __ bic(out_reg, first_reg, second_reg); in VisitBitwiseNegatedRight()
5797 __ orn(out_reg, first_reg, second_reg); in VisitBitwiseNegatedRight()
5818 __ bic(out_low, first_low, second_low); in VisitBitwiseNegatedRight()
5819 __ bic(out_high, first_high, second_high); in VisitBitwiseNegatedRight()
5822 __ orn(out_low, first_low, second_low); in VisitBitwiseNegatedRight()
5823 __ orn(out_high, first_high, second_high); in VisitBitwiseNegatedRight()
5838 __ mov(out, ShifterOperand(first)); in GenerateAndConst()
5843 __ mov(out, ShifterOperand(0)); in GenerateAndConst()
5847 if (__ ShifterOperandCanHold(kNoRegister, kNoRegister, AND, value, &so)) { in GenerateAndConst()
5848 __ and_(out, first, so); in GenerateAndConst()
5850 DCHECK(__ ShifterOperandCanHold(kNoRegister, kNoRegister, BIC, ~value, &so)); in GenerateAndConst()
5851 __ bic(out, first, ShifterOperand(~value)); in GenerateAndConst()
5859 __ mov(out, ShifterOperand(first)); in GenerateOrrConst()
5864 __ mvn(out, ShifterOperand(0)); in GenerateOrrConst()
5868 if (__ ShifterOperandCanHold(kNoRegister, kNoRegister, ORR, value, &so)) { in GenerateOrrConst()
5869 __ orr(out, first, so); in GenerateOrrConst()
5871 DCHECK(__ ShifterOperandCanHold(kNoRegister, kNoRegister, ORN, ~value, &so)); in GenerateOrrConst()
5872 __ orn(out, first, ShifterOperand(~value)); in GenerateOrrConst()
5880 __ mov(out, ShifterOperand(first)); in GenerateEorConst()
5884 __ eor(out, first, ShifterOperand(value)); in GenerateEorConst()
5934 __ and_(out_reg, first_reg, second_reg); in HandleBitwiseOperation()
5936 __ orr(out_reg, first_reg, second_reg); in HandleBitwiseOperation()
5939 __ eor(out_reg, first_reg, second_reg); in HandleBitwiseOperation()
5950 __ and_(out_low, first_low, second_low); in HandleBitwiseOperation()
5951 __ and_(out_high, first_high, second_high); in HandleBitwiseOperation()
5953 __ orr(out_low, first_low, second_low); in HandleBitwiseOperation()
5954 __ orr(out_high, first_high, second_high); in HandleBitwiseOperation()
5957 __ eor(out_low, first_low, second_low); in HandleBitwiseOperation()
5958 __ eor(out_high, first_high, second_high); in HandleBitwiseOperation()
5980 __ Mov(maybe_temp.AsRegister<Register>(), out_reg); in GenerateReferenceLoadOneRegister()
5982 __ LoadFromOffset(kLoadWord, out_reg, out_reg, offset); in GenerateReferenceLoadOneRegister()
5988 __ LoadFromOffset(kLoadWord, out_reg, out_reg, offset); in GenerateReferenceLoadOneRegister()
5989 __ MaybeUnpoisonHeapReference(out_reg); in GenerateReferenceLoadOneRegister()
6010 __ LoadFromOffset(kLoadWord, out_reg, obj_reg, offset); in GenerateReferenceLoadTwoRegisters()
6016 __ LoadFromOffset(kLoadWord, out_reg, obj_reg, offset); in GenerateReferenceLoadTwoRegisters()
6017 __ MaybeUnpoisonHeapReference(out_reg); in GenerateReferenceLoadTwoRegisters()
6037 __ LoadFromOffset(kLoadWord, root_reg, obj, offset); in GenerateGcRootFieldLoad()
6052 __ LoadFromOffset( in GenerateGcRootFieldLoad()
6054 __ CompareAndBranchIfNonZero(IP, slow_path->GetEntryLabel()); in GenerateGcRootFieldLoad()
6055 __ Bind(slow_path->GetExitLabel()); in GenerateGcRootFieldLoad()
6060 __ AddConstant(root_reg, obj, offset); in GenerateGcRootFieldLoad()
6067 __ LoadFromOffset(kLoadWord, root_reg, obj, offset); in GenerateGcRootFieldLoad()
6138 __ LoadFromOffset(kLoadWord, temp_reg, obj, monitor_offset); in GenerateReferenceLoadWithBakerReadBarrier()
6146 __ Lsr(temp_reg, temp_reg, LockWord::kReadBarrierStateShift); in GenerateReferenceLoadWithBakerReadBarrier()
6147 __ and_(temp_reg, temp_reg, ShifterOperand(LockWord::kReadBarrierStateMask)); in GenerateReferenceLoadWithBakerReadBarrier()
6156 __ bic(IP, temp_reg, ShifterOperand(LockWord::kReadBarrierStateMask)); in GenerateReferenceLoadWithBakerReadBarrier()
6159 __ add(obj, obj, ShifterOperand(IP)); in GenerateReferenceLoadWithBakerReadBarrier()
6171 __ LoadFromOffset(kLoadWord, ref_reg, obj, computed_offset); in GenerateReferenceLoadWithBakerReadBarrier()
6173 __ add(IP, obj, ShifterOperand(index.AsRegister<Register>(), LSL, TIMES_4)); in GenerateReferenceLoadWithBakerReadBarrier()
6174 __ LoadFromOffset(kLoadWord, ref_reg, IP, offset); in GenerateReferenceLoadWithBakerReadBarrier()
6178 __ LoadFromOffset(kLoadWord, ref_reg, obj, offset); in GenerateReferenceLoadWithBakerReadBarrier()
6182 __ MaybeUnpoisonHeapReference(ref_reg); in GenerateReferenceLoadWithBakerReadBarrier()
6191 __ cmp(temp_reg, ShifterOperand(ReadBarrier::gray_ptr_)); in GenerateReferenceLoadWithBakerReadBarrier()
6192 __ b(slow_path->GetEntryLabel(), EQ); in GenerateReferenceLoadWithBakerReadBarrier()
6193 __ Bind(slow_path->GetExitLabel()); in GenerateReferenceLoadWithBakerReadBarrier()
6219 __ b(slow_path->GetEntryLabel()); in GenerateReadBarrierSlow()
6220 __ Bind(slow_path->GetExitLabel()); in GenerateReadBarrierSlow()
6237 __ UnpoisonHeapReference(out.AsRegister<Register>()); in MaybeGenerateReadBarrierSlow()
6254 __ b(slow_path->GetEntryLabel()); in GenerateReadBarrierForRootSlow()
6255 __ Bind(slow_path->GetExitLabel()); in GenerateReadBarrierForRootSlow()
6302 __ LoadFromOffset(kLoadWord, temp, SP, location.GetStackIndex()); in GetInvokeStaticOrDirectExtraParameter()
6313 __ LoadFromOffset(kLoadWord, temp, SP, stack_offset); in GetInvokeStaticOrDirectExtraParameter()
6324 __ LoadLiteral(LR, DeduplicateMethodCodeLiteral(invoke->GetTargetMethod())); in GenerateStaticOrDirectCall()
6328 __ LoadImmediate(LR, invoke->GetDirectCodePtr()); in GenerateStaticOrDirectCall()
6338 __ LoadFromOffset(kLoadWord, temp.AsRegister<Register>(), TR, invoke->GetStringInitOffset()); in GenerateStaticOrDirectCall()
6344 __ LoadImmediate(temp.AsRegister<Register>(), invoke->GetMethodAddress()); in GenerateStaticOrDirectCall()
6347 __ LoadLiteral(temp.AsRegister<Register>(), in GenerateStaticOrDirectCall()
6356 __ LoadFromOffset(kLoadWord, temp.AsRegister<Register>(), base_reg, offset); in GenerateStaticOrDirectCall()
6369 __ LoadFromOffset(kLoadWord, reg, SP, kCurrentMethodStackOffset); in GenerateStaticOrDirectCall()
6372 __ LoadFromOffset(kLoadWord, in GenerateStaticOrDirectCall()
6379 __ LoadFromOffset(kLoadWord, reg, reg, CodeGenerator::GetCachePointerOffset(index_in_cache)); in GenerateStaticOrDirectCall()
6386 __ bl(GetFrameEntryLabel()); in GenerateStaticOrDirectCall()
6390 __ BindTrackedLabel(&relative_call_patches_.back().label); in GenerateStaticOrDirectCall()
6392 __ bl(&relative_call_patches_.back().label); in GenerateStaticOrDirectCall()
6398 __ blx(LR); in GenerateStaticOrDirectCall()
6402 __ LoadFromOffset( in GenerateStaticOrDirectCall()
6406 __ blx(LR); in GenerateStaticOrDirectCall()
6426 __ LoadFromOffset(kLoadWord, temp, receiver, class_offset); in GenerateVirtualCall()
6435 __ MaybeUnpoisonHeapReference(temp); in GenerateVirtualCall()
6439 __ LoadFromOffset(kLoadWord, temp, temp, method_offset); in GenerateVirtualCall()
6441 __ LoadFromOffset(kLoadWord, LR, temp, entry_point); in GenerateVirtualCall()
6443 __ blx(LR); in GenerateVirtualCall()
6466 [this]() { return __ NewLiteral<uint32_t>(/* placeholder */ 0u); }); in DeduplicateBootImageStringLiteral()
6575 [this, value]() { return __ NewLiteral<uint32_t>(value); }); in DeduplicateUint32Literal()
6582 [this]() { return __ NewLiteral<uint32_t>(/* placeholder */ 0u); }); in DeduplicateMethodLiteral()
6614 __ mla(res, mul_left, mul_right, accumulator); in VisitMultiplyAccumulate()
6616 __ mls(res, mul_left, mul_right, accumulator); in VisitMultiplyAccumulate()
6658 __ AddConstantSetFlags(temp_reg, value_reg, -lower_bound); in VisitPackedSwitch()
6662 __ b(codegen_->GetLabelOf(successors[0]), EQ); in VisitPackedSwitch()
6665 __ AddConstantSetFlags(temp_reg, temp_reg, -2); in VisitPackedSwitch()
6667 __ b(codegen_->GetLabelOf(successors[last_index + 1]), LO); in VisitPackedSwitch()
6669 __ b(codegen_->GetLabelOf(successors[last_index + 2]), EQ); in VisitPackedSwitch()
6673 __ CmpConstant(temp_reg, 1); in VisitPackedSwitch()
6674 __ b(codegen_->GetLabelOf(successors[last_index + 1]), EQ); in VisitPackedSwitch()
6679 __ b(codegen_->GetLabelOf(default_block)); in VisitPackedSwitch()
6691 JumpTable* table = __ CreateJumpTable(std::move(labels), temp_reg); in VisitPackedSwitch()
6697 __ AddConstant(key_reg, value_reg, -lower_bound); in VisitPackedSwitch()
6703 __ CmpConstant(key_reg, num_entries - 1); in VisitPackedSwitch()
6704 __ b(codegen_->GetLabelOf(default_block), Condition::HI); in VisitPackedSwitch()
6707 __ ldr(temp_reg, Address(temp_reg, key_reg, Shift::LSL, 2)); in VisitPackedSwitch()
6710 __ EmitJumpTableDispatch(table, temp_reg); in VisitPackedSwitch()
6723 __ BindTrackedLabel(&labels->movw_label); in VisitArmDexCacheArraysBase()
6724 __ movw(base_reg, /* placeholder */ 0u); in VisitArmDexCacheArraysBase()
6725 __ BindTrackedLabel(&labels->movt_label); in VisitArmDexCacheArraysBase()
6726 __ movt(base_reg, /* placeholder */ 0u); in VisitArmDexCacheArraysBase()
6727 __ BindTrackedLabel(&labels->add_pc_label); in VisitArmDexCacheArraysBase()
6728 __ add(base_reg, base_reg, ShifterOperand(PC)); in VisitArmDexCacheArraysBase()
6781 __ LoadFromOffset(kLoadWord, in VisitClassTableGet()
6787 #undef __