< prev index next >

src/hotspot/cpu/x86/x86_64.ad

Print this page

        

*** 3654,3699 **** format %{ %} interface(REG_INTER); %} // Double register operands operand regD() %{ constraint(ALLOC_IN_RC(double_reg)); match(RegD); format %{ %} interface(REG_INTER); %} // Vectors operand vecS() %{ ! constraint(ALLOC_IN_RC(vectors_reg)); match(VecS); format %{ %} interface(REG_INTER); %} operand vecD() %{ ! constraint(ALLOC_IN_RC(vectord_reg)); match(VecD); format %{ %} interface(REG_INTER); %} operand vecX() %{ ! constraint(ALLOC_IN_RC(vectorx_reg)); match(VecX); format %{ %} interface(REG_INTER); %} operand vecY() %{ ! constraint(ALLOC_IN_RC(vectory_reg)); match(VecY); format %{ %} interface(REG_INTER); %} --- 3654,3750 ---- format %{ %} interface(REG_INTER); %} + // Float register operands + operand vlRegF() %{ + constraint(ALLOC_IN_RC(float_reg_vl)); + match(RegF); + + format %{ %} + interface(REG_INTER); + %} + // Double register operands operand regD() %{ constraint(ALLOC_IN_RC(double_reg)); match(RegD); format %{ %} interface(REG_INTER); %} + // Double register operands + operand vlRegD() %{ + constraint(ALLOC_IN_RC(double_reg_vl)); + match(RegD); + + format %{ %} + interface(REG_INTER); + %} + // Vectors operand vecS() %{ ! constraint(ALLOC_IN_RC(vectors_reg_vlbwdq)); ! match(VecS); ! ! format %{ %} ! interface(REG_INTER); ! %} ! ! // Vectors ! operand legVecS() %{ ! constraint(ALLOC_IN_RC(vectors_reg_legacy)); match(VecS); format %{ %} interface(REG_INTER); %} operand vecD() %{ ! constraint(ALLOC_IN_RC(vectord_reg_vlbwdq)); ! match(VecD); ! ! format %{ %} ! interface(REG_INTER); ! %} ! ! operand legVecD() %{ ! constraint(ALLOC_IN_RC(vectord_reg_legacy)); match(VecD); format %{ %} interface(REG_INTER); %} operand vecX() %{ ! constraint(ALLOC_IN_RC(vectorx_reg_vlbwdq)); ! match(VecX); ! ! format %{ %} ! interface(REG_INTER); ! %} ! ! operand legVecX() %{ ! constraint(ALLOC_IN_RC(vectorx_reg_legacy)); match(VecX); format %{ %} interface(REG_INTER); %} operand vecY() %{ ! constraint(ALLOC_IN_RC(vectory_reg_vlbwdq)); ! match(VecY); ! ! format %{ %} ! interface(REG_INTER); ! %} ! ! operand legVecY() %{ ! constraint(ALLOC_IN_RC(vectory_reg_legacy)); match(VecY); format %{ %} interface(REG_INTER); %}
*** 5285,5294 **** --- 5336,5365 ---- __ movflt($dst$$XMMRegister, $mem$$Address); %} ins_pipe(pipe_slow); // XXX %} + // Load Float + instruct MoveF2VL(vlRegF dst, regF src) %{ + match(Set dst src); + format %{ "movss $dst,$src\t! load float (4 bytes)" %} + ins_encode %{ + __ movflt($dst$$XMMRegister, $src$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); + %} + + // Load Float + instruct MoveVL2F(regF dst, vlRegF src) %{ + match(Set dst src); + format %{ "movss $dst,$src\t! load float (4 bytes)" %} + ins_encode %{ + __ movflt($dst$$XMMRegister, $src$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); + %} + // Load Double instruct loadD_partial(regD dst, memory mem) %{ predicate(!UseXmmLoadAndClearUpper); match(Set dst (LoadD mem));
*** 5312,5321 **** --- 5383,5412 ---- __ movdbl($dst$$XMMRegister, $mem$$Address); %} ins_pipe(pipe_slow); // XXX %} + // Load Double + instruct MoveD2VL(vlRegD dst, regD src) %{ + match(Set dst src); + format %{ "movsd $dst,$src\t! load double (8 bytes)" %} + ins_encode %{ + __ movdbl($dst$$XMMRegister, $src$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); + %} + + // Load Double + instruct MoveVL2D(regD dst, vlRegD src) %{ + match(Set dst src); + format %{ "movsd $dst,$src\t! load double (8 bytes)" %} + ins_encode %{ + __ movdbl($dst$$XMMRegister, $src$$XMMRegister); + %} + ins_pipe( fpu_reg_reg ); + %} + // Load Effective Address instruct leaP8(rRegP dst, indOffset8 mem) %{ match(Set dst mem);
*** 10856,10866 **** %} ins_pipe(pipe_slow); %} instruct string_compareL(rdi_RegP str1, rcx_RegI cnt1, rsi_RegP str2, rdx_RegI cnt2, ! rax_RegI result, regD tmp1, rFlagsReg cr) %{ predicate(((StrCompNode*)n)->encoding() == StrIntrinsicNode::LL); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); --- 10947,10957 ---- %} ins_pipe(pipe_slow); %} instruct string_compareL(rdi_RegP str1, rcx_RegI cnt1, rsi_RegP str2, rdx_RegI cnt2, ! rax_RegI result, legVecD tmp1, rFlagsReg cr) %{ predicate(((StrCompNode*)n)->encoding() == StrIntrinsicNode::LL); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr);
*** 10872,10882 **** %} ins_pipe( pipe_slow ); %} instruct string_compareU(rdi_RegP str1, rcx_RegI cnt1, rsi_RegP str2, rdx_RegI cnt2, ! rax_RegI result, regD tmp1, rFlagsReg cr) %{ predicate(((StrCompNode*)n)->encoding() == StrIntrinsicNode::UU); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); --- 10963,10973 ---- %} ins_pipe( pipe_slow ); %} instruct string_compareU(rdi_RegP str1, rcx_RegI cnt1, rsi_RegP str2, rdx_RegI cnt2, ! rax_RegI result, legVecD tmp1, rFlagsReg cr) %{ predicate(((StrCompNode*)n)->encoding() == StrIntrinsicNode::UU); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr);
*** 10888,10898 **** %} ins_pipe( pipe_slow ); %} instruct string_compareLU(rdi_RegP str1, rcx_RegI cnt1, rsi_RegP str2, rdx_RegI cnt2, ! rax_RegI result, regD tmp1, rFlagsReg cr) %{ predicate(((StrCompNode*)n)->encoding() == StrIntrinsicNode::LU); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); --- 10979,10989 ---- %} ins_pipe( pipe_slow ); %} instruct string_compareLU(rdi_RegP str1, rcx_RegI cnt1, rsi_RegP str2, rdx_RegI cnt2, ! rax_RegI result, legVecD tmp1, rFlagsReg cr) %{ predicate(((StrCompNode*)n)->encoding() == StrIntrinsicNode::LU); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr);
*** 10904,10914 **** %} ins_pipe( pipe_slow ); %} instruct string_compareUL(rsi_RegP str1, rdx_RegI cnt1, rdi_RegP str2, rcx_RegI cnt2, ! rax_RegI result, regD tmp1, rFlagsReg cr) %{ predicate(((StrCompNode*)n)->encoding() == StrIntrinsicNode::UL); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr); --- 10995,11005 ---- %} ins_pipe( pipe_slow ); %} instruct string_compareUL(rsi_RegP str1, rdx_RegI cnt1, rdi_RegP str2, rcx_RegI cnt2, ! rax_RegI result, legVecD tmp1, rFlagsReg cr) %{ predicate(((StrCompNode*)n)->encoding() == StrIntrinsicNode::UL); match(Set result (StrComp (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP tmp1, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL cr);
*** 10921,10931 **** ins_pipe( pipe_slow ); %} // fast search of substring with known size. instruct string_indexof_conL(rdi_RegP str1, rdx_RegI cnt1, rsi_RegP str2, immI int_cnt2, ! rbx_RegI result, regD vec, rax_RegI cnt2, rcx_RegI tmp, rFlagsReg cr) %{ predicate(UseSSE42Intrinsics && (((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::LL)); match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2))); effect(TEMP vec, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, KILL cnt2, KILL tmp, KILL cr); --- 11012,11022 ---- ins_pipe( pipe_slow ); %} // fast search of substring with known size. instruct string_indexof_conL(rdi_RegP str1, rdx_RegI cnt1, rsi_RegP str2, immI int_cnt2, ! rbx_RegI result, legVecD vec, rax_RegI cnt2, rcx_RegI tmp, rFlagsReg cr) %{ predicate(UseSSE42Intrinsics && (((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::LL)); match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2))); effect(TEMP vec, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, KILL cnt2, KILL tmp, KILL cr);
*** 10950,10960 **** ins_pipe( pipe_slow ); %} // fast search of substring with known size. instruct string_indexof_conU(rdi_RegP str1, rdx_RegI cnt1, rsi_RegP str2, immI int_cnt2, ! rbx_RegI result, regD vec, rax_RegI cnt2, rcx_RegI tmp, rFlagsReg cr) %{ predicate(UseSSE42Intrinsics && (((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UU)); match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2))); effect(TEMP vec, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, KILL cnt2, KILL tmp, KILL cr); --- 11041,11051 ---- ins_pipe( pipe_slow ); %} // fast search of substring with known size. instruct string_indexof_conU(rdi_RegP str1, rdx_RegI cnt1, rsi_RegP str2, immI int_cnt2, ! rbx_RegI result, legVecD vec, rax_RegI cnt2, rcx_RegI tmp, rFlagsReg cr) %{ predicate(UseSSE42Intrinsics && (((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UU)); match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2))); effect(TEMP vec, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, KILL cnt2, KILL tmp, KILL cr);
*** 10979,10989 **** ins_pipe( pipe_slow ); %} // fast search of substring with known size. instruct string_indexof_conUL(rdi_RegP str1, rdx_RegI cnt1, rsi_RegP str2, immI int_cnt2, ! rbx_RegI result, regD vec, rax_RegI cnt2, rcx_RegI tmp, rFlagsReg cr) %{ predicate(UseSSE42Intrinsics && (((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UL)); match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2))); effect(TEMP vec, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, KILL cnt2, KILL tmp, KILL cr); --- 11070,11080 ---- ins_pipe( pipe_slow ); %} // fast search of substring with known size. instruct string_indexof_conUL(rdi_RegP str1, rdx_RegI cnt1, rsi_RegP str2, immI int_cnt2, ! rbx_RegI result, legVecD vec, rax_RegI cnt2, rcx_RegI tmp, rFlagsReg cr) %{ predicate(UseSSE42Intrinsics && (((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UL)); match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 int_cnt2))); effect(TEMP vec, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, KILL cnt2, KILL tmp, KILL cr);
*** 11007,11017 **** %} ins_pipe( pipe_slow ); %} instruct string_indexofL(rdi_RegP str1, rdx_RegI cnt1, rsi_RegP str2, rax_RegI cnt2, ! rbx_RegI result, regD vec, rcx_RegI tmp, rFlagsReg cr) %{ predicate(UseSSE42Intrinsics && (((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::LL)); match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP vec, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL tmp, KILL cr); --- 11098,11108 ---- %} ins_pipe( pipe_slow ); %} instruct string_indexofL(rdi_RegP str1, rdx_RegI cnt1, rsi_RegP str2, rax_RegI cnt2, ! rbx_RegI result, legVecD vec, rcx_RegI tmp, rFlagsReg cr) %{ predicate(UseSSE42Intrinsics && (((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::LL)); match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP vec, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL tmp, KILL cr);
*** 11024,11034 **** %} ins_pipe( pipe_slow ); %} instruct string_indexofU(rdi_RegP str1, rdx_RegI cnt1, rsi_RegP str2, rax_RegI cnt2, ! rbx_RegI result, regD vec, rcx_RegI tmp, rFlagsReg cr) %{ predicate(UseSSE42Intrinsics && (((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UU)); match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP vec, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL tmp, KILL cr); --- 11115,11125 ---- %} ins_pipe( pipe_slow ); %} instruct string_indexofU(rdi_RegP str1, rdx_RegI cnt1, rsi_RegP str2, rax_RegI cnt2, ! rbx_RegI result, legVecD vec, rcx_RegI tmp, rFlagsReg cr) %{ predicate(UseSSE42Intrinsics && (((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UU)); match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP vec, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL tmp, KILL cr);
*** 11041,11051 **** %} ins_pipe( pipe_slow ); %} instruct string_indexofUL(rdi_RegP str1, rdx_RegI cnt1, rsi_RegP str2, rax_RegI cnt2, ! rbx_RegI result, regD vec, rcx_RegI tmp, rFlagsReg cr) %{ predicate(UseSSE42Intrinsics && (((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UL)); match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP vec, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL tmp, KILL cr); --- 11132,11142 ---- %} ins_pipe( pipe_slow ); %} instruct string_indexofUL(rdi_RegP str1, rdx_RegI cnt1, rsi_RegP str2, rax_RegI cnt2, ! rbx_RegI result, legVecD vec, rcx_RegI tmp, rFlagsReg cr) %{ predicate(UseSSE42Intrinsics && (((StrIndexOfNode*)n)->encoding() == StrIntrinsicNode::UL)); match(Set result (StrIndexOf (Binary str1 cnt1) (Binary str2 cnt2))); effect(TEMP vec, USE_KILL str1, USE_KILL str2, USE_KILL cnt1, USE_KILL cnt2, KILL tmp, KILL cr);
*** 11058,11068 **** %} ins_pipe( pipe_slow ); %} instruct string_indexofU_char(rdi_RegP str1, rdx_RegI cnt1, rax_RegI ch, ! rbx_RegI result, regD vec1, regD vec2, regD vec3, rcx_RegI tmp, rFlagsReg cr) %{ predicate(UseSSE42Intrinsics); match(Set result (StrIndexOfChar (Binary str1 cnt1) ch)); effect(TEMP vec1, TEMP vec2, TEMP vec3, USE_KILL str1, USE_KILL cnt1, USE_KILL ch, TEMP tmp, KILL cr); format %{ "String IndexOf char[] $str1,$cnt1,$ch -> $result // KILL all" %} --- 11149,11159 ---- %} ins_pipe( pipe_slow ); %} instruct string_indexofU_char(rdi_RegP str1, rdx_RegI cnt1, rax_RegI ch, ! rbx_RegI result, legVecD vec1, legVecD vec2, legVecD vec3, rcx_RegI tmp, rFlagsReg cr) %{ predicate(UseSSE42Intrinsics); match(Set result (StrIndexOfChar (Binary str1 cnt1) ch)); effect(TEMP vec1, TEMP vec2, TEMP vec3, USE_KILL str1, USE_KILL cnt1, USE_KILL ch, TEMP tmp, KILL cr); format %{ "String IndexOf char[] $str1,$cnt1,$ch -> $result // KILL all" %}
*** 11073,11083 **** ins_pipe( pipe_slow ); %} // fast string equals instruct string_equals(rdi_RegP str1, rsi_RegP str2, rcx_RegI cnt, rax_RegI result, ! regD tmp1, regD tmp2, rbx_RegI tmp3, rFlagsReg cr) %{ match(Set result (StrEquals (Binary str1 str2) cnt)); effect(TEMP tmp1, TEMP tmp2, USE_KILL str1, USE_KILL str2, USE_KILL cnt, KILL tmp3, KILL cr); format %{ "String Equals $str1,$str2,$cnt -> $result // KILL $tmp1, $tmp2, $tmp3" %} --- 11164,11174 ---- ins_pipe( pipe_slow ); %} // fast string equals instruct string_equals(rdi_RegP str1, rsi_RegP str2, rcx_RegI cnt, rax_RegI result, ! legVecD tmp1, legVecD tmp2, rbx_RegI tmp3, rFlagsReg cr) %{ match(Set result (StrEquals (Binary str1 str2) cnt)); effect(TEMP tmp1, TEMP tmp2, USE_KILL str1, USE_KILL str2, USE_KILL cnt, KILL tmp3, KILL cr); format %{ "String Equals $str1,$str2,$cnt -> $result // KILL $tmp1, $tmp2, $tmp3" %}
*** 11089,11099 **** ins_pipe( pipe_slow ); %} // fast array equals instruct array_equalsB(rdi_RegP ary1, rsi_RegP ary2, rax_RegI result, ! regD tmp1, regD tmp2, rcx_RegI tmp3, rbx_RegI tmp4, rFlagsReg cr) %{ predicate(((AryEqNode*)n)->encoding() == StrIntrinsicNode::LL); match(Set result (AryEq ary1 ary2)); effect(TEMP tmp1, TEMP tmp2, USE_KILL ary1, USE_KILL ary2, KILL tmp3, KILL tmp4, KILL cr); --- 11180,11190 ---- ins_pipe( pipe_slow ); %} // fast array equals instruct array_equalsB(rdi_RegP ary1, rsi_RegP ary2, rax_RegI result, ! legVecD tmp1, legVecD tmp2, rcx_RegI tmp3, rbx_RegI tmp4, rFlagsReg cr) %{ predicate(((AryEqNode*)n)->encoding() == StrIntrinsicNode::LL); match(Set result (AryEq ary1 ary2)); effect(TEMP tmp1, TEMP tmp2, USE_KILL ary1, USE_KILL ary2, KILL tmp3, KILL tmp4, KILL cr);
*** 11105,11115 **** %} ins_pipe( pipe_slow ); %} instruct array_equalsC(rdi_RegP ary1, rsi_RegP ary2, rax_RegI result, ! regD tmp1, regD tmp2, rcx_RegI tmp3, rbx_RegI tmp4, rFlagsReg cr) %{ predicate(((AryEqNode*)n)->encoding() == StrIntrinsicNode::UU); match(Set result (AryEq ary1 ary2)); effect(TEMP tmp1, TEMP tmp2, USE_KILL ary1, USE_KILL ary2, KILL tmp3, KILL tmp4, KILL cr); --- 11196,11206 ---- %} ins_pipe( pipe_slow ); %} instruct array_equalsC(rdi_RegP ary1, rsi_RegP ary2, rax_RegI result, ! legVecD tmp1, legVecD tmp2, rcx_RegI tmp3, rbx_RegI tmp4, rFlagsReg cr) %{ predicate(((AryEqNode*)n)->encoding() == StrIntrinsicNode::UU); match(Set result (AryEq ary1 ary2)); effect(TEMP tmp1, TEMP tmp2, USE_KILL ary1, USE_KILL ary2, KILL tmp3, KILL tmp4, KILL cr);
*** 11121,11131 **** %} ins_pipe( pipe_slow ); %} instruct has_negatives(rsi_RegP ary1, rcx_RegI len, rax_RegI result, ! regD tmp1, regD tmp2, rbx_RegI tmp3, rFlagsReg cr) %{ match(Set result (HasNegatives ary1 len)); effect(TEMP tmp1, TEMP tmp2, USE_KILL ary1, USE_KILL len, KILL tmp3, KILL cr); format %{ "has negatives byte[] $ary1,$len -> $result // KILL $tmp1, $tmp2, $tmp3" %} --- 11212,11222 ---- %} ins_pipe( pipe_slow ); %} instruct has_negatives(rsi_RegP ary1, rcx_RegI len, rax_RegI result, ! legVecD tmp1, legVecD tmp2, rbx_RegI tmp3, rFlagsReg cr) %{ match(Set result (HasNegatives ary1 len)); effect(TEMP tmp1, TEMP tmp2, USE_KILL ary1, USE_KILL len, KILL tmp3, KILL cr); format %{ "has negatives byte[] $ary1,$len -> $result // KILL $tmp1, $tmp2, $tmp3" %}
*** 11136,11146 **** %} ins_pipe( pipe_slow ); %} // fast char[] to byte[] compression ! instruct string_compress(rsi_RegP src, rdi_RegP dst, rdx_RegI len, regD tmp1, regD tmp2, regD tmp3, regD tmp4, rcx_RegI tmp5, rax_RegI result, rFlagsReg cr) %{ match(Set result (StrCompressedCopy src (Binary dst len))); effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, USE_KILL src, USE_KILL dst, USE_KILL len, KILL tmp5, KILL cr); format %{ "String Compress $src,$dst -> $result // KILL RAX, RCX, RDX" %} --- 11227,11237 ---- %} ins_pipe( pipe_slow ); %} // fast char[] to byte[] compression ! instruct string_compress(rsi_RegP src, rdi_RegP dst, rdx_RegI len, legVecD tmp1, legVecD tmp2, legVecD tmp3, legVecD tmp4, rcx_RegI tmp5, rax_RegI result, rFlagsReg cr) %{ match(Set result (StrCompressedCopy src (Binary dst len))); effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, USE_KILL src, USE_KILL dst, USE_KILL len, KILL tmp5, KILL cr); format %{ "String Compress $src,$dst -> $result // KILL RAX, RCX, RDX" %}
*** 11152,11162 **** ins_pipe( pipe_slow ); %} // fast byte[] to char[] inflation instruct string_inflate(Universe dummy, rsi_RegP src, rdi_RegP dst, rdx_RegI len, ! regD tmp1, rcx_RegI tmp2, rFlagsReg cr) %{ match(Set dummy (StrInflatedCopy src (Binary dst len))); effect(TEMP tmp1, TEMP tmp2, USE_KILL src, USE_KILL dst, USE_KILL len, KILL cr); format %{ "String Inflate $src,$dst // KILL $tmp1, $tmp2" %} ins_encode %{ --- 11243,11253 ---- ins_pipe( pipe_slow ); %} // fast byte[] to char[] inflation instruct string_inflate(Universe dummy, rsi_RegP src, rdi_RegP dst, rdx_RegI len, ! legVecD tmp1, rcx_RegI tmp2, rFlagsReg cr) %{ match(Set dummy (StrInflatedCopy src (Binary dst len))); effect(TEMP tmp1, TEMP tmp2, USE_KILL src, USE_KILL dst, USE_KILL len, KILL cr); format %{ "String Inflate $src,$dst // KILL $tmp1, $tmp2" %} ins_encode %{
*** 11166,11176 **** ins_pipe( pipe_slow ); %} // encode char[] to byte[] in ISO_8859_1 instruct encode_iso_array(rsi_RegP src, rdi_RegP dst, rdx_RegI len, ! regD tmp1, regD tmp2, regD tmp3, regD tmp4, rcx_RegI tmp5, rax_RegI result, rFlagsReg cr) %{ match(Set result (EncodeISOArray src (Binary dst len))); effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, USE_KILL src, USE_KILL dst, USE_KILL len, KILL tmp5, KILL cr); format %{ "Encode array $src,$dst,$len -> $result // KILL RCX, RDX, $tmp1, $tmp2, $tmp3, $tmp4, RSI, RDI " %} --- 11257,11267 ---- ins_pipe( pipe_slow ); %} // encode char[] to byte[] in ISO_8859_1 instruct encode_iso_array(rsi_RegP src, rdi_RegP dst, rdx_RegI len, ! legVecD tmp1, legVecD tmp2, legVecD tmp3, legVecD tmp4, rcx_RegI tmp5, rax_RegI result, rFlagsReg cr) %{ match(Set result (EncodeISOArray src (Binary dst len))); effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, TEMP tmp4, USE_KILL src, USE_KILL dst, USE_KILL len, KILL tmp5, KILL cr); format %{ "Encode array $src,$dst,$len -> $result // KILL RCX, RDX, $tmp1, $tmp2, $tmp3, $tmp4, RSI, RDI " %}
< prev index next >