15730 %} 15731 ins_pipe(pipe_class_memory); 15732 %} 15733 15734 instruct array_equalsC(iRegP_R1 ary1, iRegP_R2 ary2, iRegI_R0 result, 15735 iRegP_R10 tmp, rFlagsReg cr) 15736 %{ 15737 predicate(((AryEqNode*)n)->encoding() == StrIntrinsicNode::UU); 15738 match(Set result (AryEq ary1 ary2)); 15739 effect(KILL tmp, USE_KILL ary1, USE_KILL ary2, KILL cr); 15740 15741 format %{ "Array Equals $ary1,ary2 -> $result // KILL $tmp" %} 15742 ins_encode %{ 15743 __ arrays_equals($ary1$$Register, $ary2$$Register, 15744 $result$$Register, $tmp$$Register, 15745 2, /*is_string*/false); 15746 %} 15747 ins_pipe(pipe_class_memory); 15748 %} 15749 15750 15751 // fast char[] to byte[] compression 15752 instruct string_compress(iRegP_R2 src, iRegP_R1 dst, iRegI_R3 len, 15753 vRegD_V0 tmp1, vRegD_V1 tmp2, 15754 vRegD_V2 tmp3, vRegD_V3 tmp4, 15755 iRegI_R0 result, rFlagsReg cr) 15756 %{ 15757 match(Set result (StrCompressedCopy src (Binary dst len))); 15758 effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, USE_KILL src, USE_KILL dst, USE_KILL len, KILL cr); 15759 15760 format %{ "String Compress $src,$dst -> $result // KILL R1, R2, R3, R4" %} 15761 ins_encode %{ 15762 __ char_array_compress($src$$Register, $dst$$Register, $len$$Register, 15763 $tmp1$$FloatRegister, $tmp2$$FloatRegister, 15764 $tmp3$$FloatRegister, $tmp4$$FloatRegister, 15765 $result$$Register); 15766 %} 15767 ins_pipe( pipe_slow ); 15768 %} 15769 | 15730 %} 15731 ins_pipe(pipe_class_memory); 15732 %} 15733 15734 instruct array_equalsC(iRegP_R1 ary1, iRegP_R2 ary2, iRegI_R0 result, 15735 iRegP_R10 tmp, rFlagsReg cr) 15736 %{ 15737 predicate(((AryEqNode*)n)->encoding() == StrIntrinsicNode::UU); 15738 match(Set result (AryEq ary1 ary2)); 15739 effect(KILL tmp, USE_KILL ary1, USE_KILL ary2, KILL cr); 15740 15741 format %{ "Array Equals $ary1,ary2 -> $result // KILL $tmp" %} 15742 ins_encode %{ 15743 __ arrays_equals($ary1$$Register, $ary2$$Register, 15744 $result$$Register, $tmp$$Register, 15745 2, /*is_string*/false); 15746 %} 15747 ins_pipe(pipe_class_memory); 15748 %} 15749 15750 instruct has_negatives(iRegP_R1 ary1, iRegI_R2 len, iRegI_R0 result, rFlagsReg cr) 15751 %{ 15752 match(Set result (HasNegatives ary1 len)); 15753 effect(USE_KILL ary1, USE_KILL len, KILL cr); 15754 format %{ "has negatives byte[] $ary1,$len -> $result" %} 15755 ins_encode %{ 15756 __ has_negatives($ary1$$Register, $len$$Register, $result$$Register); 15757 %} 15758 ins_pipe( pipe_slow ); 15759 %} 15760 15761 // fast char[] to byte[] compression 15762 instruct string_compress(iRegP_R2 src, iRegP_R1 dst, iRegI_R3 len, 15763 vRegD_V0 tmp1, vRegD_V1 tmp2, 15764 vRegD_V2 tmp3, vRegD_V3 tmp4, 15765 iRegI_R0 result, rFlagsReg cr) 15766 %{ 15767 match(Set result (StrCompressedCopy src (Binary dst len))); 15768 effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, USE_KILL src, USE_KILL dst, USE_KILL len, KILL cr); 15769 15770 format %{ "String Compress $src,$dst -> $result // KILL R1, R2, R3, R4" %} 15771 ins_encode %{ 15772 __ char_array_compress($src$$Register, $dst$$Register, $len$$Register, 15773 $tmp1$$FloatRegister, $tmp2$$FloatRegister, 15774 $tmp3$$FloatRegister, $tmp4$$FloatRegister, 15775 $result$$Register); 15776 %} 15777 ins_pipe( pipe_slow ); 15778 %} 15779 |