< prev index next >

src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp

Print this page




4843   BIND(NOMATCH);
4844     mov(result, -1);
4845     b(DONE);
4846   BIND(MATCH);
4847     add(result, result_tmp, cnt2_neg, ASR, str2_chr_shift);
4848   BIND(DONE);
4849 }
4850 
4851 typedef void (MacroAssembler::* chr_insn)(Register Rt, const Address &adr);
4852 typedef void (MacroAssembler::* uxt_insn)(Register Rd, Register Rn);
4853 
4854 void MacroAssembler::string_indexof_char(Register str1, Register cnt1,
4855                                          Register ch, Register result,
4856                                          Register tmp1, Register tmp2, Register tmp3)
4857 {
4858   Label CH1_LOOP, HAS_ZERO, DO1_SHORT, DO1_LOOP, MATCH, NOMATCH, DONE;
4859   Register cnt1_neg = cnt1;
4860   Register ch1 = rscratch1;
4861   Register result_tmp = rscratch2;
4862 


4863   cmp(cnt1, (u1)4);
4864   br(LT, DO1_SHORT);
4865 
4866   orr(ch, ch, ch, LSL, 16);
4867   orr(ch, ch, ch, LSL, 32);
4868 
4869   sub(cnt1, cnt1, 4);
4870   mov(result_tmp, cnt1);
4871   lea(str1, Address(str1, cnt1, Address::uxtw(1)));
4872   sub(cnt1_neg, zr, cnt1, LSL, 1);
4873 
4874   mov(tmp3, 0x0001000100010001);
4875 
4876   BIND(CH1_LOOP);
4877     ldr(ch1, Address(str1, cnt1_neg));
4878     eor(ch1, ch, ch1);
4879     sub(tmp1, ch1, tmp3);
4880     orr(tmp2, ch1, 0x7fff7fff7fff7fff);
4881     bics(tmp1, tmp1, tmp2);
4882     br(NE, HAS_ZERO);




4843   BIND(NOMATCH);
4844     mov(result, -1);
4845     b(DONE);
4846   BIND(MATCH);
4847     add(result, result_tmp, cnt2_neg, ASR, str2_chr_shift);
4848   BIND(DONE);
4849 }
4850 
4851 typedef void (MacroAssembler::* chr_insn)(Register Rt, const Address &adr);
4852 typedef void (MacroAssembler::* uxt_insn)(Register Rd, Register Rn);
4853 
4854 void MacroAssembler::string_indexof_char(Register str1, Register cnt1,
4855                                          Register ch, Register result,
4856                                          Register tmp1, Register tmp2, Register tmp3)
4857 {
4858   Label CH1_LOOP, HAS_ZERO, DO1_SHORT, DO1_LOOP, MATCH, NOMATCH, DONE;
4859   Register cnt1_neg = cnt1;
4860   Register ch1 = rscratch1;
4861   Register result_tmp = rscratch2;
4862 
4863   cbz(cnt1, NOMATCH);
4864 
4865   cmp(cnt1, (u1)4);
4866   br(LT, DO1_SHORT);
4867 
4868   orr(ch, ch, ch, LSL, 16);
4869   orr(ch, ch, ch, LSL, 32);
4870 
4871   sub(cnt1, cnt1, 4);
4872   mov(result_tmp, cnt1);
4873   lea(str1, Address(str1, cnt1, Address::uxtw(1)));
4874   sub(cnt1_neg, zr, cnt1, LSL, 1);
4875 
4876   mov(tmp3, 0x0001000100010001);
4877 
4878   BIND(CH1_LOOP);
4879     ldr(ch1, Address(str1, cnt1_neg));
4880     eor(ch1, ch, ch1);
4881     sub(tmp1, ch1, tmp3);
4882     orr(tmp2, ch1, 0x7fff7fff7fff7fff);
4883     bics(tmp1, tmp1, tmp2);
4884     br(NE, HAS_ZERO);


< prev index next >