提交 00c6ab47 编写于 作者: T twisti

7063674: Wrong results from basic comparisons after calls to Long.bitCount(long)

Reviewed-by: kvn
上级 9e24ba9c
...@@ -5555,8 +5555,9 @@ instruct bytes_reverse_long(eRegL dst) %{ ...@@ -5555,8 +5555,9 @@ instruct bytes_reverse_long(eRegL dst) %{
ins_pipe( ialu_reg_reg); ins_pipe( ialu_reg_reg);
%} %}
instruct bytes_reverse_unsigned_short(eRegI dst) %{ instruct bytes_reverse_unsigned_short(eRegI dst, eFlagsReg cr) %{
match(Set dst (ReverseBytesUS dst)); match(Set dst (ReverseBytesUS dst));
effect(KILL cr);
format %{ "BSWAP $dst\n\t" format %{ "BSWAP $dst\n\t"
"SHR $dst,16\n\t" %} "SHR $dst,16\n\t" %}
...@@ -5567,8 +5568,9 @@ instruct bytes_reverse_unsigned_short(eRegI dst) %{ ...@@ -5567,8 +5568,9 @@ instruct bytes_reverse_unsigned_short(eRegI dst) %{
ins_pipe( ialu_reg ); ins_pipe( ialu_reg );
%} %}
instruct bytes_reverse_short(eRegI dst) %{ instruct bytes_reverse_short(eRegI dst, eFlagsReg cr) %{
match(Set dst (ReverseBytesS dst)); match(Set dst (ReverseBytesS dst));
effect(KILL cr);
format %{ "BSWAP $dst\n\t" format %{ "BSWAP $dst\n\t"
"SAR $dst,16\n\t" %} "SAR $dst,16\n\t" %}
...@@ -5729,9 +5731,10 @@ instruct countTrailingZerosL(eRegI dst, eRegL src, eFlagsReg cr) %{ ...@@ -5729,9 +5731,10 @@ instruct countTrailingZerosL(eRegI dst, eRegL src, eFlagsReg cr) %{
//---------- Population Count Instructions ------------------------------------- //---------- Population Count Instructions -------------------------------------
instruct popCountI(eRegI dst, eRegI src) %{ instruct popCountI(eRegI dst, eRegI src, eFlagsReg cr) %{
predicate(UsePopCountInstruction); predicate(UsePopCountInstruction);
match(Set dst (PopCountI src)); match(Set dst (PopCountI src));
effect(KILL cr);
format %{ "POPCNT $dst, $src" %} format %{ "POPCNT $dst, $src" %}
ins_encode %{ ins_encode %{
...@@ -5740,9 +5743,10 @@ instruct popCountI(eRegI dst, eRegI src) %{ ...@@ -5740,9 +5743,10 @@ instruct popCountI(eRegI dst, eRegI src) %{
ins_pipe(ialu_reg); ins_pipe(ialu_reg);
%} %}
instruct popCountI_mem(eRegI dst, memory mem) %{ instruct popCountI_mem(eRegI dst, memory mem, eFlagsReg cr) %{
predicate(UsePopCountInstruction); predicate(UsePopCountInstruction);
match(Set dst (PopCountI (LoadI mem))); match(Set dst (PopCountI (LoadI mem)));
effect(KILL cr);
format %{ "POPCNT $dst, $mem" %} format %{ "POPCNT $dst, $mem" %}
ins_encode %{ ins_encode %{
......
...@@ -6417,14 +6417,14 @@ instruct bytes_reverse_long(rRegL dst) %{ ...@@ -6417,14 +6417,14 @@ instruct bytes_reverse_long(rRegL dst) %{
match(Set dst (ReverseBytesL dst)); match(Set dst (ReverseBytesL dst));
format %{ "bswapq $dst" %} format %{ "bswapq $dst" %}
opcode(0x0F, 0xC8); /* Opcode 0F /C8 */ opcode(0x0F, 0xC8); /* Opcode 0F /C8 */
ins_encode( REX_reg_wide(dst), OpcP, opc2_reg(dst) ); ins_encode( REX_reg_wide(dst), OpcP, opc2_reg(dst) );
ins_pipe( ialu_reg); ins_pipe( ialu_reg);
%} %}
instruct bytes_reverse_unsigned_short(rRegI dst) %{ instruct bytes_reverse_unsigned_short(rRegI dst, rFlagsReg cr) %{
match(Set dst (ReverseBytesUS dst)); match(Set dst (ReverseBytesUS dst));
effect(KILL cr);
format %{ "bswapl $dst\n\t" format %{ "bswapl $dst\n\t"
"shrl $dst,16\n\t" %} "shrl $dst,16\n\t" %}
...@@ -6435,8 +6435,9 @@ instruct bytes_reverse_unsigned_short(rRegI dst) %{ ...@@ -6435,8 +6435,9 @@ instruct bytes_reverse_unsigned_short(rRegI dst) %{
ins_pipe( ialu_reg ); ins_pipe( ialu_reg );
%} %}
instruct bytes_reverse_short(rRegI dst) %{ instruct bytes_reverse_short(rRegI dst, rFlagsReg cr) %{
match(Set dst (ReverseBytesS dst)); match(Set dst (ReverseBytesS dst));
effect(KILL cr);
format %{ "bswapl $dst\n\t" format %{ "bswapl $dst\n\t"
"sar $dst,16\n\t" %} "sar $dst,16\n\t" %}
...@@ -6564,9 +6565,10 @@ instruct countTrailingZerosL(rRegI dst, rRegL src, rFlagsReg cr) %{ ...@@ -6564,9 +6565,10 @@ instruct countTrailingZerosL(rRegI dst, rRegL src, rFlagsReg cr) %{
//---------- Population Count Instructions ------------------------------------- //---------- Population Count Instructions -------------------------------------
instruct popCountI(rRegI dst, rRegI src) %{ instruct popCountI(rRegI dst, rRegI src, rFlagsReg cr) %{
predicate(UsePopCountInstruction); predicate(UsePopCountInstruction);
match(Set dst (PopCountI src)); match(Set dst (PopCountI src));
effect(KILL cr);
format %{ "popcnt $dst, $src" %} format %{ "popcnt $dst, $src" %}
ins_encode %{ ins_encode %{
...@@ -6575,9 +6577,10 @@ instruct popCountI(rRegI dst, rRegI src) %{ ...@@ -6575,9 +6577,10 @@ instruct popCountI(rRegI dst, rRegI src) %{
ins_pipe(ialu_reg); ins_pipe(ialu_reg);
%} %}
instruct popCountI_mem(rRegI dst, memory mem) %{ instruct popCountI_mem(rRegI dst, memory mem, rFlagsReg cr) %{
predicate(UsePopCountInstruction); predicate(UsePopCountInstruction);
match(Set dst (PopCountI (LoadI mem))); match(Set dst (PopCountI (LoadI mem)));
effect(KILL cr);
format %{ "popcnt $dst, $mem" %} format %{ "popcnt $dst, $mem" %}
ins_encode %{ ins_encode %{
...@@ -6587,9 +6590,10 @@ instruct popCountI_mem(rRegI dst, memory mem) %{ ...@@ -6587,9 +6590,10 @@ instruct popCountI_mem(rRegI dst, memory mem) %{
%} %}
// Note: Long.bitCount(long) returns an int. // Note: Long.bitCount(long) returns an int.
instruct popCountL(rRegI dst, rRegL src) %{ instruct popCountL(rRegI dst, rRegL src, rFlagsReg cr) %{
predicate(UsePopCountInstruction); predicate(UsePopCountInstruction);
match(Set dst (PopCountL src)); match(Set dst (PopCountL src));
effect(KILL cr);
format %{ "popcnt $dst, $src" %} format %{ "popcnt $dst, $src" %}
ins_encode %{ ins_encode %{
...@@ -6599,9 +6603,10 @@ instruct popCountL(rRegI dst, rRegL src) %{ ...@@ -6599,9 +6603,10 @@ instruct popCountL(rRegI dst, rRegL src) %{
%} %}
// Note: Long.bitCount(long) returns an int. // Note: Long.bitCount(long) returns an int.
instruct popCountL_mem(rRegI dst, memory mem) %{ instruct popCountL_mem(rRegI dst, memory mem, rFlagsReg cr) %{
predicate(UsePopCountInstruction); predicate(UsePopCountInstruction);
match(Set dst (PopCountL (LoadL mem))); match(Set dst (PopCountL (LoadL mem)));
effect(KILL cr);
format %{ "popcnt $dst, $mem" %} format %{ "popcnt $dst, $mem" %}
ins_encode %{ ins_encode %{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册