Skip to content

Commit 99a9dbc

Browse files
author
Quan Anh Mai
committed
8305783: x86_64: Optimize AbsI and AbsL
Reviewed-by: jkarthikeyan, thartmann
1 parent d8af7a6 commit 99a9dbc

File tree

1 file changed

+16
-26
lines changed

1 file changed

+16
-26
lines changed

src/hotspot/cpu/x86/x86_64.ad

+16-26
Original file line numberDiff line numberDiff line change
@@ -8462,44 +8462,34 @@ instruct xchgN( memory mem, rRegN newval) %{
84628462
//----------Abs Instructions-------------------------------------------
84638463

84648464
// Integer Absolute Instructions
8465-
instruct absI_rReg(rRegI dst, rRegI src, rRegI tmp, rFlagsReg cr)
8465+
instruct absI_rReg(rRegI dst, rRegI src, rFlagsReg cr)
84668466
%{
84678467
match(Set dst (AbsI src));
8468-
effect(TEMP dst, TEMP tmp, KILL cr);
8469-
format %{ "movl $tmp, $src\n\t"
8470-
"sarl $tmp, 31\n\t"
8471-
"movl $dst, $src\n\t"
8472-
"xorl $dst, $tmp\n\t"
8473-
"subl $dst, $tmp\n"
8474-
%}
8468+
effect(TEMP dst, KILL cr);
8469+
format %{ "xorl $dst, $dst\t# abs int\n\t"
8470+
"subl $dst, $src\n\t"
8471+
"cmovll $dst, $src" %}
84758472
ins_encode %{
8476-
__ movl($tmp$$Register, $src$$Register);
8477-
__ sarl($tmp$$Register, 31);
8478-
__ movl($dst$$Register, $src$$Register);
8479-
__ xorl($dst$$Register, $tmp$$Register);
8480-
__ subl($dst$$Register, $tmp$$Register);
8473+
__ xorl($dst$$Register, $dst$$Register);
8474+
__ subl($dst$$Register, $src$$Register);
8475+
__ cmovl(Assembler::less, $dst$$Register, $src$$Register);
84818476
%}
84828477

84838478
ins_pipe(ialu_reg_reg);
84848479
%}
84858480

84868481
// Long Absolute Instructions
8487-
instruct absL_rReg(rRegL dst, rRegL src, rRegL tmp, rFlagsReg cr)
8482+
instruct absL_rReg(rRegL dst, rRegL src, rFlagsReg cr)
84888483
%{
84898484
match(Set dst (AbsL src));
8490-
effect(TEMP dst, TEMP tmp, KILL cr);
8491-
format %{ "movq $tmp, $src\n\t"
8492-
"sarq $tmp, 63\n\t"
8493-
"movq $dst, $src\n\t"
8494-
"xorq $dst, $tmp\n\t"
8495-
"subq $dst, $tmp\n"
8496-
%}
8485+
effect(TEMP dst, KILL cr);
8486+
format %{ "xorl $dst, $dst\t# abs long\n\t"
8487+
"subq $dst, $src\n\t"
8488+
"cmovlq $dst, $src" %}
84978489
ins_encode %{
8498-
__ movq($tmp$$Register, $src$$Register);
8499-
__ sarq($tmp$$Register, 63);
8500-
__ movq($dst$$Register, $src$$Register);
8501-
__ xorq($dst$$Register, $tmp$$Register);
8502-
__ subq($dst$$Register, $tmp$$Register);
8490+
__ xorl($dst$$Register, $dst$$Register);
8491+
__ subq($dst$$Register, $src$$Register);
8492+
__ cmovq(Assembler::less, $dst$$Register, $src$$Register);
85038493
%}
85048494

85058495
ins_pipe(ialu_reg_reg);

0 commit comments

Comments
 (0)