< prev index next >
src/hotspot/cpu/x86/x86_64.ad
Print this page
*** 8179,8188 ****
--- 8179,8234 ----
__ xchgl($newval$$Register, $mem$$Address);
%}
ins_pipe( pipe_cmpxchg );
%}
+ //----------Abs Instructions-------------------------------------------
+
+ // Integer Absolute Instructions
+ instruct absI_rReg(rRegI dst, rRegI src, rRegI tmp, 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"
+ %}
+ 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);
+ %}
+
+ ins_pipe(ialu_reg_reg);
+ %}
+
+ // Long Absolute Instructions
+ instruct absL_rReg(rRegL dst, rRegL src, rRegL tmp, 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"
+ %}
+ 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);
+ %}
+
+ ins_pipe(ialu_reg_reg);
+ %}
+
//----------Subtraction Instructions-------------------------------------------
// Integer Subtraction Instructions
instruct subI_rReg(rRegI dst, rRegI src, rFlagsReg cr)
%{
< prev index next >