< prev index next >
src/hotspot/cpu/x86/x86_32.ad
Print this page
*** 8947,8956 ****
--- 8947,8978 ----
__ imull($tmp$$Register, $op1$$Register, $op2$$constant);
%}
ins_pipe(ialu_reg_reg_alu0);
%}
+ // Integer Absolute Instructions
+ instruct absI_rReg(rRegI dst, rRegI src, rRegI tmp, eFlagsReg 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 Instructions------------------------------------------------
// Add Long Register with Register
instruct addL_eReg(eRegL dst, eRegL src, eFlagsReg cr) %{
match(Set dst (AddL dst src));
effect(KILL cr);
< prev index next >