Lines Matching refs:__
36 #define __ assembler->GetVIXLAssembler()-> macro
93 __ Bind(GetEntryLabel()); in EmitNativeCode()
115 __ B(GetExitLabel()); in EmitNativeCode()
143 __ Add(base, array, element_size * constant + data_offset); in GenSystemArrayCopyBaseAddress()
145 __ Add(base, array, Operand(RegisterFrom(pos), vixl32::LSL, element_size_shift)); in GenSystemArrayCopyBaseAddress()
146 __ Add(base, base, data_offset); in GenSystemArrayCopyBaseAddress()
165 __ Add(end, base, element_size * constant); in GenSystemArrayCopyEndAddress()
167 __ Add(end, base, Operand(RegisterFrom(copy_length), vixl32::LSL, element_size_shift)); in GenSystemArrayCopyEndAddress()
201 __ Bind(GetEntryLabel()); in EmitNativeCode()
206 __ Bind(&loop); in EmitNativeCode()
207 __ Ldr(tmp, MemOperand(src_curr_addr, element_size, PostIndex)); in EmitNativeCode()
234 __ Str(tmp, MemOperand(dst_curr_addr, element_size, PostIndex)); in EmitNativeCode()
235 __ Cmp(src_curr_addr, src_stop_addr); in EmitNativeCode()
236 __ B(ne, &loop, /* far_target */ false); in EmitNativeCode()
237 __ B(GetExitLabel()); in EmitNativeCode()
283 __ Vmov(LowRegisterFrom(output), HighRegisterFrom(output), DRegisterFrom(input)); in MoveFPToInt()
285 __ Vmov(RegisterFrom(output), SRegisterFrom(input)); in MoveFPToInt()
293 __ Vmov(DRegisterFrom(output), LowRegisterFrom(input), HighRegisterFrom(input)); in MoveIntToFP()
295 __ Vmov(SRegisterFrom(output), RegisterFrom(input)); in MoveIntToFP()
358 __ Clz(out, in_reg_hi); in GenNumberOfLeadingZeros()
359 __ CompareAndBranchIfNonZero(in_reg_hi, final_label, /* far_target */ false); in GenNumberOfLeadingZeros()
360 __ Clz(out, in_reg_lo); in GenNumberOfLeadingZeros()
361 __ Add(out, out, 32); in GenNumberOfLeadingZeros()
363 __ Bind(&end); in GenNumberOfLeadingZeros()
366 __ Clz(out, RegisterFrom(in)); in GenNumberOfLeadingZeros()
404 __ Rbit(out, in_reg_lo); in GenNumberOfTrailingZeros()
405 __ Clz(out, out); in GenNumberOfTrailingZeros()
406 __ CompareAndBranchIfNonZero(in_reg_lo, final_label, /* far_target */ false); in GenNumberOfTrailingZeros()
407 __ Rbit(out, in_reg_hi); in GenNumberOfTrailingZeros()
408 __ Clz(out, out); in GenNumberOfTrailingZeros()
409 __ Add(out, out, 32); in GenNumberOfTrailingZeros()
411 __ Bind(&end); in GenNumberOfTrailingZeros()
415 __ Rbit(out, in); in GenNumberOfTrailingZeros()
416 __ Clz(out, out); in GenNumberOfTrailingZeros()
445 __ Vabs(OutputVRegister(invoke), InputVRegisterAt(invoke, 0)); in MathAbsFP()
490 __ Asr(mask, in_reg_hi, 31); in GenAbsInteger()
491 __ Adds(out_reg_lo, in_reg_lo, mask); in GenAbsInteger()
492 __ Adc(out_reg_hi, in_reg_hi, mask); in GenAbsInteger()
493 __ Eor(out_reg_lo, mask, out_reg_lo); in GenAbsInteger()
494 __ Eor(out_reg_hi, mask, out_reg_hi); in GenAbsInteger()
499 __ Asr(mask, in_reg, 31); in GenAbsInteger()
500 __ Add(out_reg, in_reg, mask); in GenAbsInteger()
501 __ Eor(out_reg, mask, out_reg); in GenAbsInteger()
545 __ Vcmp(op1, op2); in GenMinMaxFloat()
546 __ Vmrs(RegisterOrAPSR_nzcv(kPcCode), FPSCR); in GenMinMaxFloat()
547 __ B(vs, &nan, /* far_target */ false); // if un-ordered, go to NaN handling. in GenMinMaxFloat()
555 __ it(cond); in GenMinMaxFloat()
556 __ vmov(cond, F32, out, op2); in GenMinMaxFloat()
559 __ B(ne, final_label, /* far_target */ false); in GenMinMaxFloat()
562 __ Vmov(temp1, op1); in GenMinMaxFloat()
563 __ Vmov(temp2, op2); in GenMinMaxFloat()
565 __ Orr(temp1, temp1, temp2); in GenMinMaxFloat()
567 __ And(temp1, temp1, temp2); in GenMinMaxFloat()
569 __ Vmov(out, temp1); in GenMinMaxFloat()
570 __ B(final_label); in GenMinMaxFloat()
573 __ Bind(&nan); in GenMinMaxFloat()
574 __ Movt(temp1, High16Bits(kNanFloat)); // 0x7FC0xxxx is a NaN. in GenMinMaxFloat()
575 __ Vmov(out, temp1); in GenMinMaxFloat()
578 __ Bind(&done); in GenMinMaxFloat()
629 __ Vcmp(op1, op2); in GenMinMaxDouble()
630 __ Vmrs(RegisterOrAPSR_nzcv(kPcCode), FPSCR); in GenMinMaxDouble()
631 __ B(vs, &handle_nan_eq, /* far_target */ false); // if un-ordered, go to NaN handling. in GenMinMaxDouble()
639 __ it(cond); in GenMinMaxDouble()
640 __ vmov(cond, F64, out, op2); in GenMinMaxDouble()
643 __ B(ne, final_label, /* far_target */ false); in GenMinMaxDouble()
647 __ Vand(F64, out, op1, op2); in GenMinMaxDouble()
648 __ B(final_label); in GenMinMaxDouble()
652 __ Bind(&handle_nan_eq); in GenMinMaxDouble()
653 __ Vorr(F64, out, op1, op2); // assemble op1/-0.0/NaN. in GenMinMaxDouble()
656 __ Bind(&done); in GenMinMaxDouble()
700 __ Cmp(out_lo, op2_lo); in GenMinMaxLong()
701 __ Sbcs(temp, out_hi, op2_hi); in GenMinMaxLong()
709 __ itt(cond); in GenMinMaxLong()
710 __ mov(cond, out_lo, op2_lo); in GenMinMaxLong()
711 __ mov(cond, out_hi, op2_hi); in GenMinMaxLong()
745 __ Cmp(op1, op2); in GenMinMax()
752 __ ite(is_min ? lt : gt); in GenMinMax()
753 __ mov(is_min ? lt : gt, out, op1); in GenMinMax()
754 __ mov(is_min ? ge : le, out, op2); in GenMinMax()
789 __ Vsqrt(OutputDRegister(invoke), InputDRegisterAt(invoke, 0)); in VisitMathSqrt()
801 __ Vrintn(F64, F64, OutputDRegister(invoke), InputDRegisterAt(invoke, 0)); in VisitMathRint()
827 __ Vcvta(S32, F32, temp1, in_reg); in VisitMathRoundFloat()
828 __ Vmov(out_reg, temp1); in VisitMathRoundFloat()
831 __ Cmp(out_reg, 0); in VisitMathRoundFloat()
832 __ B(ge, final_label, /* far_target */ false); in VisitMathRoundFloat()
837 __ Vrinta(F32, F32, temp1, in_reg); in VisitMathRoundFloat()
838 __ Vmov(temp2, 0.5); in VisitMathRoundFloat()
839 __ Vsub(F32, temp1, in_reg, temp1); in VisitMathRoundFloat()
840 __ Vcmp(F32, temp1, temp2); in VisitMathRoundFloat()
841 __ Vmrs(RegisterOrAPSR_nzcv(kPcCode), FPSCR); in VisitMathRoundFloat()
847 __ it(eq); in VisitMathRoundFloat()
848 __ add(eq, out_reg, out_reg, 1); in VisitMathRoundFloat()
852 __ Bind(&done); in VisitMathRoundFloat()
863 __ Ldrsb(OutputRegister(invoke), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPeekByte()
873 __ Ldr(OutputRegister(invoke), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPeekIntNative()
889 __ Ldr(hi, MemOperand(addr, 4)); in VisitMemoryPeekLongNative()
890 __ Ldr(lo, MemOperand(addr)); in VisitMemoryPeekLongNative()
892 __ Ldr(lo, MemOperand(addr)); in VisitMemoryPeekLongNative()
893 __ Ldr(hi, MemOperand(addr, 4)); in VisitMemoryPeekLongNative()
904 __ Ldrsh(OutputRegister(invoke), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPeekShortNative()
921 __ Strb(InputRegisterAt(invoke, 1), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPokeByte()
930 __ Str(InputRegisterAt(invoke, 1), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPokeIntNative()
943 __ Str(LowRegisterFrom(invoke->GetLocations()->InAt(1)), MemOperand(addr)); in VisitMemoryPokeLongNative()
944 __ Str(HighRegisterFrom(invoke->GetLocations()->InAt(1)), MemOperand(addr, 4)); in VisitMemoryPokeLongNative()
953 __ Strh(InputRegisterAt(invoke, 1), MemOperand(LowRegisterFrom(invoke->GetLocations()->InAt(0)))); in VisitMemoryPokeShortNative()
965 __ Ldr(OutputRegister(invoke), in VisitThreadCurrentThread()
984 __ Ldr(trg, MemOperand(base, offset)); in GenUnsafeGet()
986 __ Dmb(vixl32::ISH); in GenUnsafeGet()
999 __ Dmb(vixl32::ISH); in GenUnsafeGet()
1002 __ Ldr(trg, MemOperand(base, offset)); in GenUnsafeGet()
1004 __ Dmb(vixl32::ISH); in GenUnsafeGet()
1009 __ Ldr(trg, MemOperand(base, offset)); in GenUnsafeGet()
1011 __ Dmb(vixl32::ISH); in GenUnsafeGet()
1024 __ Add(temp_reg, base, offset); in GenUnsafeGet()
1025 __ Ldrexd(trg_lo, trg_hi, MemOperand(temp_reg)); in GenUnsafeGet()
1027 __ Ldrd(trg_lo, trg_hi, MemOperand(base, offset)); in GenUnsafeGet()
1030 __ Dmb(vixl32::ISH); in GenUnsafeGet()
1174 __ Dmb(vixl32::ISH); in GenUnsafePut()
1187 __ Add(temp_reg, base, offset); in GenUnsafePut()
1189 __ Bind(&loop_head); in GenUnsafePut()
1190 __ Ldrexd(temp_lo, temp_hi, MemOperand(temp_reg)); in GenUnsafePut()
1191 __ Strexd(temp_lo, value_lo, value_hi, MemOperand(temp_reg)); in GenUnsafePut()
1192 __ Cmp(temp_lo, 0); in GenUnsafePut()
1193 __ B(ne, &loop_head, /* far_target */ false); in GenUnsafePut()
1195 __ Strd(value_lo, value_hi, MemOperand(base, offset)); in GenUnsafePut()
1202 __ Mov(temp, value); in GenUnsafePut()
1206 __ Str(source, MemOperand(base, offset)); in GenUnsafePut()
1210 __ Dmb(vixl32::ISH); in GenUnsafePut()
1368 __ Dmb(vixl32::ISH); in GenCas()
1370 __ Add(tmp_ptr, base, offset); in GenCas()
1388 __ Bind(&loop_head); in GenCas()
1390 __ Ldrex(tmp, MemOperand(tmp_ptr)); in GenCas()
1392 __ Subs(tmp, tmp, expected); in GenCas()
1399 __ itt(eq); in GenCas()
1400 __ strex(eq, tmp, value, MemOperand(tmp_ptr)); in GenCas()
1401 __ cmp(eq, tmp, 1); in GenCas()
1404 __ B(eq, &loop_head, /* far_target */ false); in GenCas()
1406 __ Dmb(vixl32::ISH); in GenCas()
1408 __ Rsbs(out, tmp, 1); in GenCas()
1415 __ it(cc); in GenCas()
1416 __ mov(cc, out, 0); in GenCas()
1506 __ CompareAndBranchIfZero(arg, slow_path->GetEntryLabel()); in VisitStringCompareTo()
1510 __ Subs(out, str, arg); in VisitStringCompareTo()
1511 __ B(eq, &end); in VisitStringCompareTo()
1515 __ Ldr(temp3, MemOperand(str, count_offset)); in VisitStringCompareTo()
1516 __ Ldr(temp2, MemOperand(arg, count_offset)); in VisitStringCompareTo()
1518 __ Lsr(temp0, temp3, 1u); in VisitStringCompareTo()
1519 __ Lsr(temp1, temp2, 1u); in VisitStringCompareTo()
1522 __ Ldr(temp0, MemOperand(str, count_offset)); in VisitStringCompareTo()
1523 __ Ldr(temp1, MemOperand(arg, count_offset)); in VisitStringCompareTo()
1526 __ Subs(out, temp0, temp1); in VisitStringCompareTo()
1534 __ it(gt); in VisitStringCompareTo()
1535 __ mov(gt, temp0, temp1); in VisitStringCompareTo()
1541 __ CompareAndBranchIfZero(temp0, &end, mirror::kUseStringCompression); in VisitStringCompareTo()
1545 __ Eors(temp2, temp2, temp3); in VisitStringCompareTo()
1546 __ Lsrs(temp2, temp2, 1u); in VisitStringCompareTo()
1547 __ B(cs, &different_compression); in VisitStringCompareTo()
1550 __ Lsls(temp3, temp3, 31u); // Extract purely the compression flag. in VisitStringCompareTo()
1556 __ it(ne); in VisitStringCompareTo()
1557 __ add(ne, temp0, temp0, temp0); in VisitStringCompareTo()
1561 __ Mov(temp1, value_offset); in VisitStringCompareTo()
1575 __ Bind(&loop); in VisitStringCompareTo()
1577 __ Ldr(temp_reg, MemOperand(str, temp1)); in VisitStringCompareTo()
1578 __ Ldr(temp2, MemOperand(arg, temp1)); in VisitStringCompareTo()
1579 __ Cmp(temp_reg, temp2); in VisitStringCompareTo()
1580 __ B(ne, &find_char_diff, /* far_target */ false); in VisitStringCompareTo()
1581 __ Add(temp1, temp1, char_size * 2); in VisitStringCompareTo()
1583 __ Ldr(temp_reg, MemOperand(str, temp1)); in VisitStringCompareTo()
1584 __ Ldr(temp2, MemOperand(arg, temp1)); in VisitStringCompareTo()
1585 __ Cmp(temp_reg, temp2); in VisitStringCompareTo()
1586 __ B(ne, &find_char_diff_2nd_cmp, /* far_target */ false); in VisitStringCompareTo()
1587 __ Add(temp1, temp1, char_size * 2); in VisitStringCompareTo()
1589 __ Subs(temp0, temp0, (mirror::kUseStringCompression ? 8 : 4)); in VisitStringCompareTo()
1590 __ B(hi, &loop, /* far_target */ false); in VisitStringCompareTo()
1591 __ B(&end); in VisitStringCompareTo()
1593 __ Bind(&find_char_diff_2nd_cmp); in VisitStringCompareTo()
1595 __ Subs(temp0, temp0, 4); // 4 bytes previously compared. in VisitStringCompareTo()
1596 __ B(ls, &end, /* far_target */ false); // Was the second comparison fully beyond the end? in VisitStringCompareTo()
1600 __ Sub(temp0, temp0, 2); in VisitStringCompareTo()
1604 __ Bind(&find_char_diff); in VisitStringCompareTo()
1606 __ Eor(temp1, temp2, temp_reg); in VisitStringCompareTo()
1607 __ Rbit(temp1, temp1); in VisitStringCompareTo()
1608 __ Clz(temp1, temp1); in VisitStringCompareTo()
1623 __ Cmp(temp0, Operand(temp1, vixl32::LSR, (mirror::kUseStringCompression ? 3 : 4))); in VisitStringCompareTo()
1624 __ B((mirror::kUseStringCompression ? ls : le), &end, /* far_target */ false); in VisitStringCompareTo()
1631 __ Orr(temp3, temp3, 0xffu << 23); // uncompressed ? 0xff800000u : 0x7ff80000u in VisitStringCompareTo()
1632 __ Bic(temp1, temp1, Operand(temp3, vixl32::LSR, 31 - 3)); // &= ~(uncompressed ? 0xfu : 0x7u) in VisitStringCompareTo()
1633 __ Asr(temp3, temp3, 7u); // uncompressed ? 0xffff0000u : 0xff0000u. in VisitStringCompareTo()
1634 __ Lsr(temp2, temp2, temp1); // Extract second character. in VisitStringCompareTo()
1635 __ Lsr(temp3, temp3, 16u); // uncompressed ? 0xffffu : 0xffu in VisitStringCompareTo()
1636 __ Lsr(out, temp_reg, temp1); // Extract first character. in VisitStringCompareTo()
1637 __ And(temp2, temp2, temp3); in VisitStringCompareTo()
1638 __ And(out, out, temp3); in VisitStringCompareTo()
1640 __ Bic(temp1, temp1, 0xf); in VisitStringCompareTo()
1641 __ Lsr(temp2, temp2, temp1); in VisitStringCompareTo()
1642 __ Lsr(out, temp_reg, temp1); in VisitStringCompareTo()
1643 __ Movt(temp2, 0); in VisitStringCompareTo()
1644 __ Movt(out, 0); in VisitStringCompareTo()
1647 __ Sub(out, out, temp2); in VisitStringCompareTo()
1651 __ B(&end); in VisitStringCompareTo()
1652 __ Bind(&different_compression); in VisitStringCompareTo()
1663 __ Add(temp0, temp0, temp0); // Unlike LSL, this ADD is always 16-bit. in VisitStringCompareTo()
1665 __ Mov(temp1, str); in VisitStringCompareTo()
1666 __ Mov(temp2, arg); in VisitStringCompareTo()
1667 __ Lsrs(temp3, temp3, 1u); // Continue the move of the compression flag. in VisitStringCompareTo()
1672 __ itt(cs); // Interleave with selection of temp1 and temp2. in VisitStringCompareTo()
1673 __ mov(cs, temp1, arg); // Preserves flags. in VisitStringCompareTo()
1674 __ mov(cs, temp2, str); // Preserves flags. in VisitStringCompareTo()
1676 __ Sbc(temp0, temp0, 0); // Complete the move of the compression flag. in VisitStringCompareTo()
1679 __ Add(temp1, temp1, value_offset); in VisitStringCompareTo()
1680 __ Add(temp2, temp2, value_offset); in VisitStringCompareTo()
1687 __ Bind(&different_compression_loop); in VisitStringCompareTo()
1688 __ Ldrb(temp_reg, MemOperand(temp1, c_char_size, PostIndex)); in VisitStringCompareTo()
1689 __ Ldrh(temp3, MemOperand(temp2, char_size, PostIndex)); in VisitStringCompareTo()
1690 __ Cmp(temp_reg, temp3); in VisitStringCompareTo()
1691 __ B(ne, &different_compression_diff, /* far_target */ false); in VisitStringCompareTo()
1692 __ Subs(temp0, temp0, 2); in VisitStringCompareTo()
1693 __ B(hi, &different_compression_loop, /* far_target */ false); in VisitStringCompareTo()
1694 __ B(&end); in VisitStringCompareTo()
1697 __ Bind(&different_compression_diff); in VisitStringCompareTo()
1698 __ Sub(out, temp_reg, temp3); in VisitStringCompareTo()
1702 __ Lsrs(temp0, temp0, 1u); in VisitStringCompareTo()
1709 __ it(cc); in VisitStringCompareTo()
1710 __ rsb(cc, out, out, 0); in VisitStringCompareTo()
1713 __ Bind(&end); in VisitStringCompareTo()
1716 __ Bind(slow_path->GetExitLabel()); in VisitStringCompareTo()
1765 __ CompareAndBranchIfZero(arg, &return_false, /* far_target */ false); in VisitStringEquals()
1769 __ Cmp(str, arg); in VisitStringEquals()
1770 __ B(eq, &return_true, /* far_target */ false); in VisitStringEquals()
1777 __ Ldr(temp, MemOperand(str, class_offset)); in VisitStringEquals()
1778 __ Ldr(temp1, MemOperand(arg, class_offset)); in VisitStringEquals()
1779 __ Cmp(temp, temp1); in VisitStringEquals()
1780 __ B(ne, &return_false, /* far_target */ false); in VisitStringEquals()
1784 __ Ldr(temp, MemOperand(str, count_offset)); in VisitStringEquals()
1785 __ Ldr(temp1, MemOperand(arg, count_offset)); in VisitStringEquals()
1788 __ Cmp(temp, temp1); in VisitStringEquals()
1789 __ B(ne, &return_false, /* far_target */ false); in VisitStringEquals()
1793 __ CompareAndBranchIfZero(temp, &return_true, /* far_target */ false); in VisitStringEquals()
1802 __ Lsrs(temp, temp, 1u); // Extract length and check compression flag. in VisitStringEquals()
1806 __ it(cs); // If uncompressed, in VisitStringEquals()
1807 __ add(cs, temp, temp, temp); // double the byte count. in VisitStringEquals()
1811 __ Mov(temp1, value_offset); in VisitStringEquals()
1815 __ Bind(&loop); in VisitStringEquals()
1816 __ Ldr(out, MemOperand(str, temp1)); in VisitStringEquals()
1817 __ Ldr(temp2, MemOperand(arg, temp1)); in VisitStringEquals()
1818 __ Add(temp1, temp1, Operand::From(sizeof(uint32_t))); in VisitStringEquals()
1819 __ Cmp(out, temp2); in VisitStringEquals()
1820 __ B(ne, &return_false, /* far_target */ false); in VisitStringEquals()
1822 __ Subs(temp, temp, mirror::kUseStringCompression ? 4 : 2); in VisitStringEquals()
1823 __ B(hi, &loop, /* far_target */ false); in VisitStringEquals()
1827 __ Bind(&return_true); in VisitStringEquals()
1828 __ Mov(out, 1); in VisitStringEquals()
1829 __ B(final_label); in VisitStringEquals()
1832 __ Bind(&return_false); in VisitStringEquals()
1833 __ Mov(out, 0); in VisitStringEquals()
1836 __ Bind(&end); in VisitStringEquals()
1861 __ B(slow_path->GetEntryLabel()); in GenerateVisitStringIndexOf()
1862 __ Bind(slow_path->GetExitLabel()); in GenerateVisitStringIndexOf()
1868 __ Cmp(char_reg, static_cast<uint32_t>(std::numeric_limits<uint16_t>::max()) + 1); in GenerateVisitStringIndexOf()
1871 __ B(hs, slow_path->GetEntryLabel()); in GenerateVisitStringIndexOf()
1878 __ Mov(tmp_reg, 0); in GenerateVisitStringIndexOf()
1885 __ Bind(slow_path->GetExitLabel()); in GenerateVisitStringIndexOf()
1942 __ Cmp(byte_array, 0); in VisitStringNewStringFromBytes()
1945 __ B(eq, slow_path->GetEntryLabel()); in VisitStringNewStringFromBytes()
1949 __ Bind(slow_path->GetExitLabel()); in VisitStringNewStringFromBytes()
1986 __ Cmp(string_to_copy, 0); in VisitStringNewStringFromString()
1989 __ B(eq, slow_path->GetEntryLabel()); in VisitStringNewStringFromString()
1994 __ Bind(slow_path->GetExitLabel()); in VisitStringNewStringFromString()
2047 __ Ldr(temp, MemOperand(input, length_offset)); in CheckPosition()
2049 __ Cmp(temp, Int32ConstantFrom(length)); in CheckPosition()
2051 __ Cmp(temp, RegisterFrom(length)); in CheckPosition()
2053 __ B(lt, slow_path->GetEntryLabel()); in CheckPosition()
2057 __ Ldr(temp, MemOperand(input, length_offset)); in CheckPosition()
2058 __ Subs(temp, temp, pos_const); in CheckPosition()
2059 __ B(lt, slow_path->GetEntryLabel()); in CheckPosition()
2063 __ Cmp(temp, Int32ConstantFrom(length)); in CheckPosition()
2065 __ Cmp(temp, RegisterFrom(length)); in CheckPosition()
2067 __ B(lt, slow_path->GetEntryLabel()); in CheckPosition()
2072 __ CompareAndBranchIfNonZero(pos_reg, slow_path->GetEntryLabel()); in CheckPosition()
2076 __ Cmp(pos_reg, 0); in CheckPosition()
2077 __ B(lt, slow_path->GetEntryLabel()); in CheckPosition()
2080 __ Ldr(temp, MemOperand(input, length_offset)); in CheckPosition()
2081 __ Subs(temp, temp, pos_reg); in CheckPosition()
2082 __ B(lt, slow_path->GetEntryLabel()); in CheckPosition()
2086 __ Cmp(temp, Int32ConstantFrom(length)); in CheckPosition()
2088 __ Cmp(temp, RegisterFrom(length)); in CheckPosition()
2090 __ B(lt, slow_path->GetEntryLabel()); in CheckPosition()
2136 __ Cmp(src, dest); in VisitSystemArrayCopy()
2137 __ B(eq, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2145 __ Cmp(src, dest); in VisitSystemArrayCopy()
2146 __ B(ne, &conditions_on_positions_validated, /* far_target */ false); in VisitSystemArrayCopy()
2148 __ Cmp(RegisterFrom(dest_pos), src_pos_constant); in VisitSystemArrayCopy()
2149 __ B(gt, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2153 __ Cmp(src, dest); in VisitSystemArrayCopy()
2154 __ B(ne, &conditions_on_positions_validated, /* far_target */ false); in VisitSystemArrayCopy()
2158 __ Cmp(RegisterFrom(src_pos), dest_pos_constant); in VisitSystemArrayCopy()
2160 __ Cmp(RegisterFrom(src_pos), RegisterFrom(dest_pos)); in VisitSystemArrayCopy()
2162 __ B(lt, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2165 __ Bind(&conditions_on_positions_validated); in VisitSystemArrayCopy()
2169 __ CompareAndBranchIfZero(src, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2174 __ CompareAndBranchIfZero(dest, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2182 __ Cmp(RegisterFrom(length), 0); in VisitSystemArrayCopy()
2183 __ B(lt, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2219 __ CompareAndBranchIfZero(temp1, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2223 __ Ldrh(temp1, MemOperand(temp1, primitive_offset)); in VisitSystemArrayCopy()
2225 __ CompareAndBranchIfNonZero(temp1, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2243 __ CompareAndBranchIfZero(temp2, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2247 __ Ldrh(temp2, MemOperand(temp2, primitive_offset)); in VisitSystemArrayCopy()
2249 __ CompareAndBranchIfNonZero(temp2, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2258 __ Cmp(temp1, temp2); in VisitSystemArrayCopy()
2262 __ B(eq, &do_copy, /* far_target */ false); in VisitSystemArrayCopy()
2271 __ Ldr(temp1, MemOperand(temp1, super_offset)); in VisitSystemArrayCopy()
2272 __ CompareAndBranchIfNonZero(temp1, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2273 __ Bind(&do_copy); in VisitSystemArrayCopy()
2275 __ B(ne, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2281 __ Ldr(temp1, MemOperand(dest, class_offset)); in VisitSystemArrayCopy()
2283 __ Ldr(temp2, MemOperand(src, class_offset)); in VisitSystemArrayCopy()
2297 __ Ldr(temp3, MemOperand(temp1, component_offset)); in VisitSystemArrayCopy()
2298 __ CompareAndBranchIfZero(temp3, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2301 __ Ldrh(temp3, MemOperand(temp3, primitive_offset)); in VisitSystemArrayCopy()
2303 __ CompareAndBranchIfNonZero(temp3, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2309 __ Ldr(temp3, MemOperand(temp2, component_offset)); in VisitSystemArrayCopy()
2310 __ CompareAndBranchIfZero(temp3, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2313 __ Ldrh(temp3, MemOperand(temp3, primitive_offset)); in VisitSystemArrayCopy()
2315 __ CompareAndBranchIfNonZero(temp3, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2318 __ Cmp(temp1, temp2); in VisitSystemArrayCopy()
2322 __ B(eq, &do_copy, /* far_target */ false); in VisitSystemArrayCopy()
2327 __ Ldr(temp1, MemOperand(temp1, component_offset)); in VisitSystemArrayCopy()
2330 __ Ldr(temp1, MemOperand(temp1, super_offset)); in VisitSystemArrayCopy()
2332 __ CompareAndBranchIfNonZero(temp1, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2333 __ Bind(&do_copy); in VisitSystemArrayCopy()
2335 __ B(ne, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2348 __ CompareAndBranchIfZero(temp3, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2353 __ Ldr(temp1, MemOperand(src, class_offset)); in VisitSystemArrayCopy()
2356 __ Ldr(temp3, MemOperand(temp1, component_offset)); in VisitSystemArrayCopy()
2357 __ CompareAndBranchIfZero(temp3, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2361 __ Ldrh(temp3, MemOperand(temp3, primitive_offset)); in VisitSystemArrayCopy()
2363 __ CompareAndBranchIfNonZero(temp3, intrinsic_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2375 __ CompareAndBranchIfZero(RegisterFrom(length), &done, /* is_far_target */ false); in VisitSystemArrayCopy()
2400 __ Ldr(temp2, MemOperand(src, monitor_offset)); in VisitSystemArrayCopy()
2410 __ Add(src, src, Operand(temp2, vixl32::LSR, 32)); in VisitSystemArrayCopy()
2434 __ Lsrs(temp2, temp2, LockWord::kReadBarrierStateShift + 1); in VisitSystemArrayCopy()
2436 __ B(cs, read_barrier_slow_path->GetEntryLabel()); in VisitSystemArrayCopy()
2444 __ Bind(&loop); in VisitSystemArrayCopy()
2448 __ Ldr(temp_reg, MemOperand(temp1, element_size, PostIndex)); in VisitSystemArrayCopy()
2449 __ Str(temp_reg, MemOperand(temp2, element_size, PostIndex)); in VisitSystemArrayCopy()
2451 __ Cmp(temp1, temp3); in VisitSystemArrayCopy()
2452 __ B(ne, &loop, /* far_target */ false); in VisitSystemArrayCopy()
2454 __ Bind(read_barrier_slow_path->GetExitLabel()); in VisitSystemArrayCopy()
2466 __ Bind(&loop); in VisitSystemArrayCopy()
2470 __ Ldr(temp_reg, MemOperand(temp1, element_size, PostIndex)); in VisitSystemArrayCopy()
2471 __ Str(temp_reg, MemOperand(temp2, element_size, PostIndex)); in VisitSystemArrayCopy()
2473 __ Cmp(temp1, temp3); in VisitSystemArrayCopy()
2474 __ B(ne, &loop, /* far_target */ false); in VisitSystemArrayCopy()
2476 __ Bind(&done); in VisitSystemArrayCopy()
2482 __ Bind(intrinsic_slow_path->GetExitLabel()); in VisitSystemArrayCopy()
2551 __ Vmov(RegisterFrom(locations->GetTemp(0)), in GenFPToFPCall()
2555 __ Vmov(OutputDRegister(invoke), in GenFPToFPCall()
2570 __ Vmov(RegisterFrom(locations->GetTemp(0)), in GenFPFPToFPCall()
2573 __ Vmov(RegisterFrom(locations->GetTemp(2)), in GenFPFPToFPCall()
2577 __ Vmov(OutputDRegister(invoke), in GenFPFPToFPCall()
2724 __ Rbit(OutputRegister(invoke), InputRegisterAt(invoke, 0)); in VisitIntegerReverse()
2744 __ Rbit(out_reg_lo, in_reg_hi); in VisitLongReverse()
2745 __ Rbit(out_reg_hi, in_reg_lo); in VisitLongReverse()
2754 __ Rev(OutputRegister(invoke), InputRegisterAt(invoke, 0)); in VisitIntegerReverseBytes()
2774 __ Rev(out_reg_lo, in_reg_hi); in VisitLongReverseBytes()
2775 __ Rev(out_reg_hi, in_reg_lo); in VisitLongReverseBytes()
2784 __ Revsh(OutputRegister(invoke), InputRegisterAt(invoke, 0)); in VisitShortReverseBytes()
2805 __ Vmov(tmp_d, src_1, src_0); // Temp DReg |--src_1|--src_0| in GenBitCount()
2806 __ Vcnt(Untyped8, tmp_d, tmp_d); // Temp DReg |c|c|c|c|c|c|c|c| in GenBitCount()
2807 __ Vpaddl(U8, tmp_d, tmp_d); // Temp DReg |--c|--c|--c|--c| in GenBitCount()
2808 __ Vpaddl(U16, tmp_d, tmp_d); // Temp DReg |------c|------c| in GenBitCount()
2810 __ Vpaddl(U32, tmp_d, tmp_d); // Temp DReg |--------------c| in GenBitCount()
2812 __ Vmov(out_r, tmp_s); in GenBitCount()
2877 __ Add(dst_ptr, dstObj, data_offset); in VisitStringGetCharsNoCheck()
2878 __ Add(dst_ptr, dst_ptr, Operand(dstBegin, vixl32::LSL, 1)); in VisitStringGetCharsNoCheck()
2880 __ Subs(num_chr, srcEnd, srcBegin); in VisitStringGetCharsNoCheck()
2882 __ B(eq, final_label, /* far_target */ false); in VisitStringGetCharsNoCheck()
2885 __ Add(src_ptr, srcObj, value_offset); in VisitStringGetCharsNoCheck()
2895 __ Ldr(temp, MemOperand(srcObj, count_offset)); in VisitStringGetCharsNoCheck()
2896 __ Tst(temp, 1); in VisitStringGetCharsNoCheck()
2898 __ B(eq, &compressed_string_preloop, /* far_target */ false); in VisitStringGetCharsNoCheck()
2900 __ Add(src_ptr, src_ptr, Operand(srcBegin, vixl32::LSL, 1)); in VisitStringGetCharsNoCheck()
2907 __ Subs(temp, num_chr, 4); in VisitStringGetCharsNoCheck()
2908 __ B(lt, &remainder, /* far_target */ false); in VisitStringGetCharsNoCheck()
2911 __ Mov(num_chr, temp); in VisitStringGetCharsNoCheck()
2916 __ Bind(&loop); in VisitStringGetCharsNoCheck()
2917 __ Ldr(temp, MemOperand(src_ptr, char_size * 2)); in VisitStringGetCharsNoCheck()
2918 __ Subs(num_chr, num_chr, 4); in VisitStringGetCharsNoCheck()
2919 __ Str(temp, MemOperand(dst_ptr, char_size * 2)); in VisitStringGetCharsNoCheck()
2920 __ Ldr(temp, MemOperand(src_ptr, char_size * 4, PostIndex)); in VisitStringGetCharsNoCheck()
2921 __ Str(temp, MemOperand(dst_ptr, char_size * 4, PostIndex)); in VisitStringGetCharsNoCheck()
2923 __ B(ge, &loop, /* far_target */ false); in VisitStringGetCharsNoCheck()
2925 __ Adds(num_chr, num_chr, 4); in VisitStringGetCharsNoCheck()
2926 __ B(eq, final_label, /* far_target */ false); in VisitStringGetCharsNoCheck()
2930 __ Bind(&remainder); in VisitStringGetCharsNoCheck()
2932 __ Ldrh(temp, MemOperand(src_ptr, char_size, PostIndex)); in VisitStringGetCharsNoCheck()
2933 __ Subs(num_chr, num_chr, 1); in VisitStringGetCharsNoCheck()
2934 __ Strh(temp, MemOperand(dst_ptr, char_size, PostIndex)); in VisitStringGetCharsNoCheck()
2936 __ B(gt, &remainder, /* far_target */ false); in VisitStringGetCharsNoCheck()
2939 __ B(final_label); in VisitStringGetCharsNoCheck()
2944 __ Bind(&compressed_string_preloop); in VisitStringGetCharsNoCheck()
2945 __ Add(src_ptr, src_ptr, srcBegin); in VisitStringGetCharsNoCheck()
2946 __ Bind(&compressed_string_loop); in VisitStringGetCharsNoCheck()
2948 __ Ldrb(temp, MemOperand(src_ptr, c_char_size, PostIndex)); in VisitStringGetCharsNoCheck()
2949 __ Strh(temp, MemOperand(dst_ptr, char_size, PostIndex)); in VisitStringGetCharsNoCheck()
2951 __ Subs(num_chr, num_chr, 1); in VisitStringGetCharsNoCheck()
2952 __ B(gt, &compressed_string_loop, /* far_target */ false); in VisitStringGetCharsNoCheck()
2956 __ Bind(&done); in VisitStringGetCharsNoCheck()
2971 __ Vmov(out, InputSRegisterAt(invoke, 0)); in VisitFloatIsInfinite()
2973 __ Lsl(out, out, 1); in VisitFloatIsInfinite()
2974 __ Eor(out, out, infinity); in VisitFloatIsInfinite()
2976 __ Clz(out, out); in VisitFloatIsInfinite()
2979 __ Lsr(out, out, 5); in VisitFloatIsInfinite()
3000 __ Vmov(temp, out, InputDRegisterAt(invoke, 0)); in VisitDoubleIsInfinite()
3001 __ Eor(out, out, infinity_high); in VisitDoubleIsInfinite()
3002 __ Eor(out, out, infinity_high2); in VisitDoubleIsInfinite()
3004 __ Orr(out, temp, Operand(out, vixl32::LSL, 1)); in VisitDoubleIsInfinite()
3006 __ Clz(out, out); in VisitDoubleIsInfinite()
3009 __ Lsr(out, out, 5); in VisitDoubleIsInfinite()
3043 __ Ldr(temp0, MemOperand(temp0, ArtMethod::DeclaringClassOffset().Int32Value())); in VisitReferenceGetReferent()
3054 __ Ldr(temp1, MemOperand(temp0, disable_flag_offset)); in VisitReferenceGetReferent()
3055 __ Ldr(temp0, MemOperand(temp0, slow_path_flag_offset)); in VisitReferenceGetReferent()
3056 __ Orr(temp0, temp1, temp0); in VisitReferenceGetReferent()
3057 __ CompareAndBranchIfNonZero(temp0, slow_path->GetEntryLabel()); in VisitReferenceGetReferent()
3060 __ Ldr(out, MemOperand(obj, mirror::Reference::ReferentOffset().Int32Value())); in VisitReferenceGetReferent()
3063 __ Bind(slow_path->GetExitLabel()); in VisitReferenceGetReferent()
3075 __ Vrintp(F64, F64, OutputDRegister(invoke), InputDRegisterAt(invoke, 0)); in VisitMathCeil()
3087 __ Vrintm(F64, F64, OutputDRegister(invoke), InputDRegisterAt(invoke, 0)); in VisitMathFloor()
3117 __ Ldr(out, codegen_->DeduplicateBootImageAddressLiteral(address)); in VisitIntegerValueOf()
3124 __ Ldr(argument, codegen_->DeduplicateBootImageAddressLiteral(address)); in VisitIntegerValueOf()
3127 __ Mov(temp, value); in VisitIntegerValueOf()
3136 __ Add(out, in, -info.low); in VisitIntegerValueOf()
3137 __ Cmp(out, info.high - info.low + 1); in VisitIntegerValueOf()
3139 __ B(hs, &allocate); in VisitIntegerValueOf()
3143 __ Ldr(temp, codegen_->DeduplicateBootImageAddressLiteral(data_offset + address)); in VisitIntegerValueOf()
3146 __ B(&done); in VisitIntegerValueOf()
3147 __ Bind(&allocate); in VisitIntegerValueOf()
3150 __ Ldr(argument, codegen_->DeduplicateBootImageAddressLiteral(address)); in VisitIntegerValueOf()
3157 __ Bind(&done); in VisitIntegerValueOf()
3187 #undef __