@@ -657,8 +657,7 @@ static void emit_cmpfp3(MacroAssembler* masm, Register dst) {
657
657
__ movl(dst, -1);
658
658
__ jcc(Assembler::parity, done);
659
659
__ jcc(Assembler::below, done);
660
- __ setb(Assembler::notEqual, dst);
661
- __ movzbl(dst, dst);
660
+ __ setcc(Assembler::notEqual, dst);
662
661
__ bind(done);
663
662
}
664
663
@@ -7070,13 +7069,11 @@ instruct compareAndSwapP(rRegI res,
7070
7069
7071
7070
format %{ "cmpxchgq $mem_ptr,$newval\t# "
7072
7071
"If rax == $mem_ptr then store $newval into $mem_ptr\n\t"
7073
- "sete $res\n\t"
7074
- "movzbl $res, $res" %}
7072
+ "setcc $res \t# emits sete + movzbl or setzue for APX" %}
7075
7073
ins_encode %{
7076
7074
__ lock();
7077
7075
__ cmpxchgq($newval$$Register, $mem_ptr$$Address);
7078
- __ setb(Assembler::equal, $res$$Register);
7079
- __ movzbl($res$$Register, $res$$Register);
7076
+ __ setcc(Assembler::equal, $res$$Register);
7080
7077
%}
7081
7078
ins_pipe( pipe_cmpxchg );
7082
7079
%}
@@ -7092,13 +7089,11 @@ instruct compareAndSwapL(rRegI res,
7092
7089
7093
7090
format %{ "cmpxchgq $mem_ptr,$newval\t# "
7094
7091
"If rax == $mem_ptr then store $newval into $mem_ptr\n\t"
7095
- "sete $res\n\t"
7096
- "movzbl $res, $res" %}
7092
+ "setcc $res \t# emits sete + movzbl or setzue for APX" %}
7097
7093
ins_encode %{
7098
7094
__ lock();
7099
7095
__ cmpxchgq($newval$$Register, $mem_ptr$$Address);
7100
- __ setb(Assembler::equal, $res$$Register);
7101
- __ movzbl($res$$Register, $res$$Register);
7096
+ __ setcc(Assembler::equal, $res$$Register);
7102
7097
%}
7103
7098
ins_pipe( pipe_cmpxchg );
7104
7099
%}
@@ -7114,13 +7109,11 @@ instruct compareAndSwapI(rRegI res,
7114
7109
7115
7110
format %{ "cmpxchgl $mem_ptr,$newval\t# "
7116
7111
"If rax == $mem_ptr then store $newval into $mem_ptr\n\t"
7117
- "sete $res\n\t"
7118
- "movzbl $res, $res" %}
7112
+ "setcc $res \t# emits sete + movzbl or setzue for APX" %}
7119
7113
ins_encode %{
7120
7114
__ lock();
7121
7115
__ cmpxchgl($newval$$Register, $mem_ptr$$Address);
7122
- __ setb(Assembler::equal, $res$$Register);
7123
- __ movzbl($res$$Register, $res$$Register);
7116
+ __ setcc(Assembler::equal, $res$$Register);
7124
7117
%}
7125
7118
ins_pipe( pipe_cmpxchg );
7126
7119
%}
@@ -7136,13 +7129,11 @@ instruct compareAndSwapB(rRegI res,
7136
7129
7137
7130
format %{ "cmpxchgb $mem_ptr,$newval\t# "
7138
7131
"If rax == $mem_ptr then store $newval into $mem_ptr\n\t"
7139
- "sete $res\n\t"
7140
- "movzbl $res, $res" %}
7132
+ "setcc $res \t# emits sete + movzbl or setzue for APX" %}
7141
7133
ins_encode %{
7142
7134
__ lock();
7143
7135
__ cmpxchgb($newval$$Register, $mem_ptr$$Address);
7144
- __ setb(Assembler::equal, $res$$Register);
7145
- __ movzbl($res$$Register, $res$$Register);
7136
+ __ setcc(Assembler::equal, $res$$Register);
7146
7137
%}
7147
7138
ins_pipe( pipe_cmpxchg );
7148
7139
%}
@@ -7158,13 +7149,11 @@ instruct compareAndSwapS(rRegI res,
7158
7149
7159
7150
format %{ "cmpxchgw $mem_ptr,$newval\t# "
7160
7151
"If rax == $mem_ptr then store $newval into $mem_ptr\n\t"
7161
- "sete $res\n\t"
7162
- "movzbl $res, $res" %}
7152
+ "setcc $res \t# emits sete + movzbl or setzue for APX" %}
7163
7153
ins_encode %{
7164
7154
__ lock();
7165
7155
__ cmpxchgw($newval$$Register, $mem_ptr$$Address);
7166
- __ setb(Assembler::equal, $res$$Register);
7167
- __ movzbl($res$$Register, $res$$Register);
7156
+ __ setcc(Assembler::equal, $res$$Register);
7168
7157
%}
7169
7158
ins_pipe( pipe_cmpxchg );
7170
7159
%}
@@ -7179,13 +7168,11 @@ instruct compareAndSwapN(rRegI res,
7179
7168
7180
7169
format %{ "cmpxchgl $mem_ptr,$newval\t# "
7181
7170
"If rax == $mem_ptr then store $newval into $mem_ptr\n\t"
7182
- "sete $res\n\t"
7183
- "movzbl $res, $res" %}
7171
+ "setcc $res \t# emits sete + movzbl or setzue for APX" %}
7184
7172
ins_encode %{
7185
7173
__ lock();
7186
7174
__ cmpxchgl($newval$$Register, $mem_ptr$$Address);
7187
- __ setb(Assembler::equal, $res$$Register);
7188
- __ movzbl($res$$Register, $res$$Register);
7175
+ __ setcc(Assembler::equal, $res$$Register);
7189
7176
%}
7190
7177
ins_pipe( pipe_cmpxchg );
7191
7178
%}
@@ -9729,13 +9716,11 @@ instruct cmpLTMask(rRegI dst, rRegI p, rRegI q, rFlagsReg cr)
9729
9716
9730
9717
ins_cost(400);
9731
9718
format %{ "cmpl $p, $q\t# cmpLTMask\n\t"
9732
- "setlt $dst\n\t"
9733
- "movzbl $dst, $dst\n\t"
9719
+ "setcc $dst \t# emits setlt + movzbl or setzul for APX"
9734
9720
"negl $dst" %}
9735
9721
ins_encode %{
9736
9722
__ cmpl($p$$Register, $q$$Register);
9737
- __ setb(Assembler::less, $dst$$Register);
9738
- __ movzbl($dst$$Register, $dst$$Register);
9723
+ __ setcc(Assembler::less, $dst$$Register);
9739
9724
__ negl($dst$$Register);
9740
9725
%}
9741
9726
ins_pipe(pipe_slow);
@@ -11860,16 +11845,14 @@ instruct cmpU3_reg_reg(rRegI dst, rRegI src1, rRegI src2, rFlagsReg flags)
11860
11845
format %{ "cmpl $src1, $src2\t# CmpL3\n\t"
11861
11846
"movl $dst, -1\n\t"
11862
11847
"jb,u done\n\t"
11863
- "setne $dst\n\t"
11864
- "movzbl $dst, $dst\n\t"
11848
+ "setcc $dst \t# emits setne + movzbl or setzune for APX"
11865
11849
"done:" %}
11866
11850
ins_encode %{
11867
11851
Label done;
11868
11852
__ cmpl($src1$$Register, $src2$$Register);
11869
11853
__ movl($dst$$Register, -1);
11870
11854
__ jccb(Assembler::below, done);
11871
- __ setb(Assembler::notZero, $dst$$Register);
11872
- __ movzbl($dst$$Register, $dst$$Register);
11855
+ __ setcc(Assembler::notZero, $dst$$Register);
11873
11856
__ bind(done);
11874
11857
%}
11875
11858
ins_pipe(pipe_slow);
@@ -11886,16 +11869,14 @@ instruct cmpL3_reg_reg(rRegI dst, rRegL src1, rRegL src2, rFlagsReg flags)
11886
11869
format %{ "cmpq $src1, $src2\t# CmpL3\n\t"
11887
11870
"movl $dst, -1\n\t"
11888
11871
"jl,s done\n\t"
11889
- "setne $dst\n\t"
11890
- "movzbl $dst, $dst\n\t"
11872
+ "setcc $dst \t# emits setne + movzbl or setzune for APX"
11891
11873
"done:" %}
11892
11874
ins_encode %{
11893
11875
Label done;
11894
11876
__ cmpq($src1$$Register, $src2$$Register);
11895
11877
__ movl($dst$$Register, -1);
11896
11878
__ jccb(Assembler::less, done);
11897
- __ setb(Assembler::notZero, $dst$$Register);
11898
- __ movzbl($dst$$Register, $dst$$Register);
11879
+ __ setcc(Assembler::notZero, $dst$$Register);
11899
11880
__ bind(done);
11900
11881
%}
11901
11882
ins_pipe(pipe_slow);
@@ -11912,16 +11893,14 @@ instruct cmpUL3_reg_reg(rRegI dst, rRegL src1, rRegL src2, rFlagsReg flags)
11912
11893
format %{ "cmpq $src1, $src2\t# CmpL3\n\t"
11913
11894
"movl $dst, -1\n\t"
11914
11895
"jb,u done\n\t"
11915
- "setne $dst\n\t"
11916
- "movzbl $dst, $dst\n\t"
11896
+ "setcc $dst \t# emits setne + movzbl or setzune for APX"
11917
11897
"done:" %}
11918
11898
ins_encode %{
11919
11899
Label done;
11920
11900
__ cmpq($src1$$Register, $src2$$Register);
11921
11901
__ movl($dst$$Register, -1);
11922
11902
__ jccb(Assembler::below, done);
11923
- __ setb(Assembler::notZero, $dst$$Register);
11924
- __ movzbl($dst$$Register, $dst$$Register);
11903
+ __ setcc(Assembler::notZero, $dst$$Register);
11925
11904
__ bind(done);
11926
11905
%}
11927
11906
ins_pipe(pipe_slow);
0 commit comments