@@ -8462,44 +8462,34 @@ instruct xchgN( memory mem, rRegN newval) %{
8462
8462
//----------Abs Instructions-------------------------------------------
8463
8463
8464
8464
// 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)
8466
8466
%{
8467
8467
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" %}
8475
8472
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);
8481
8476
%}
8482
8477
8483
8478
ins_pipe(ialu_reg_reg);
8484
8479
%}
8485
8480
8486
8481
// 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)
8488
8483
%{
8489
8484
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" %}
8497
8489
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);
8503
8493
%}
8504
8494
8505
8495
ins_pipe(ialu_reg_reg);
0 commit comments