mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2025-12-06 09:29:38 +01:00
8305783: x86_64: Optimize AbsI and AbsL
Reviewed-by: jkarthikeyan, thartmann
This commit is contained in:
@@ -8462,44 +8462,34 @@ instruct xchgN( memory mem, rRegN newval) %{
|
||||
//----------Abs Instructions-------------------------------------------
|
||||
|
||||
// Integer Absolute Instructions
|
||||
instruct absI_rReg(rRegI dst, rRegI src, rRegI tmp, rFlagsReg cr)
|
||||
instruct absI_rReg(rRegI dst, rRegI src, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst (AbsI src));
|
||||
effect(TEMP dst, TEMP tmp, KILL cr);
|
||||
format %{ "movl $tmp, $src\n\t"
|
||||
"sarl $tmp, 31\n\t"
|
||||
"movl $dst, $src\n\t"
|
||||
"xorl $dst, $tmp\n\t"
|
||||
"subl $dst, $tmp\n"
|
||||
%}
|
||||
effect(TEMP dst, KILL cr);
|
||||
format %{ "xorl $dst, $dst\t# abs int\n\t"
|
||||
"subl $dst, $src\n\t"
|
||||
"cmovll $dst, $src" %}
|
||||
ins_encode %{
|
||||
__ movl($tmp$$Register, $src$$Register);
|
||||
__ sarl($tmp$$Register, 31);
|
||||
__ movl($dst$$Register, $src$$Register);
|
||||
__ xorl($dst$$Register, $tmp$$Register);
|
||||
__ subl($dst$$Register, $tmp$$Register);
|
||||
__ xorl($dst$$Register, $dst$$Register);
|
||||
__ subl($dst$$Register, $src$$Register);
|
||||
__ cmovl(Assembler::less, $dst$$Register, $src$$Register);
|
||||
%}
|
||||
|
||||
ins_pipe(ialu_reg_reg);
|
||||
%}
|
||||
|
||||
// Long Absolute Instructions
|
||||
instruct absL_rReg(rRegL dst, rRegL src, rRegL tmp, rFlagsReg cr)
|
||||
instruct absL_rReg(rRegL dst, rRegL src, rFlagsReg cr)
|
||||
%{
|
||||
match(Set dst (AbsL src));
|
||||
effect(TEMP dst, TEMP tmp, KILL cr);
|
||||
format %{ "movq $tmp, $src\n\t"
|
||||
"sarq $tmp, 63\n\t"
|
||||
"movq $dst, $src\n\t"
|
||||
"xorq $dst, $tmp\n\t"
|
||||
"subq $dst, $tmp\n"
|
||||
%}
|
||||
effect(TEMP dst, KILL cr);
|
||||
format %{ "xorl $dst, $dst\t# abs long\n\t"
|
||||
"subq $dst, $src\n\t"
|
||||
"cmovlq $dst, $src" %}
|
||||
ins_encode %{
|
||||
__ movq($tmp$$Register, $src$$Register);
|
||||
__ sarq($tmp$$Register, 63);
|
||||
__ movq($dst$$Register, $src$$Register);
|
||||
__ xorq($dst$$Register, $tmp$$Register);
|
||||
__ subq($dst$$Register, $tmp$$Register);
|
||||
__ xorl($dst$$Register, $dst$$Register);
|
||||
__ subq($dst$$Register, $src$$Register);
|
||||
__ cmovq(Assembler::less, $dst$$Register, $src$$Register);
|
||||
%}
|
||||
|
||||
ins_pipe(ialu_reg_reg);
|
||||
|
||||
Reference in New Issue
Block a user