--- old/src/cpu/x86/vm/x86_64.ad Wed May 25 19:36:50 2011 +++ new/src/cpu/x86/vm/x86_64.ad Wed May 25 19:36:50 2011 @@ -3179,51 +3179,7 @@ emit_rm(cbuf, 0x3, 0x0, dstenc); %} - enc_class enc_cmpLTP(no_rcx_RegI p, no_rcx_RegI q, no_rcx_RegI y, - rcx_RegI tmp) - %{ - // cadd_cmpLT - int tmpReg = $tmp$$reg; - - int penc = $p$$reg; - int qenc = $q$$reg; - int yenc = $y$$reg; - - // subl $p,$q - if (penc < 8) { - if (qenc >= 8) { - emit_opcode(cbuf, Assembler::REX_B); - } - } else { - if (qenc < 8) { - emit_opcode(cbuf, Assembler::REX_R); - } else { - emit_opcode(cbuf, Assembler::REX_RB); - } - } - emit_opcode(cbuf, 0x2B); - emit_rm(cbuf, 0x3, penc & 7, qenc & 7); - - // sbbl $tmp, $tmp - emit_opcode(cbuf, 0x1B); - emit_rm(cbuf, 0x3, tmpReg, tmpReg); - - // andl $tmp, $y - if (yenc >= 8) { - emit_opcode(cbuf, Assembler::REX_B); - } - emit_opcode(cbuf, 0x23); - emit_rm(cbuf, 0x3, tmpReg, yenc & 7); - - // addl $p,$tmp - if (penc >= 8) { - emit_opcode(cbuf, Assembler::REX_R); - } - emit_opcode(cbuf, 0x03); - emit_rm(cbuf, 0x3, penc & 7, tmpReg); - %} - // Compare the lonogs and set -1, 0, or 1 into dst enc_class cmpl3_flag(rRegL src1, rRegL src2, rRegI dst) %{ @@ -10206,9 +10162,7 @@ %} -instruct cadd_cmpLTMask(rRegI p, rRegI q, rRegI y, - rRegI tmp, - rFlagsReg cr) +instruct cadd_cmpLTMask(rRegI p, rRegI q, rRegI y, rRegI tmp, rFlagsReg cr) %{ match(Set p (AddI (AndI (CmpLTMask p q) y) (SubI p q))); effect(TEMP tmp, KILL cr); @@ -10218,25 +10172,19 @@ "sbbl $tmp, $tmp\n\t" "andl $tmp, $y\n\t" "addl $p, $tmp" %} - ins_encode(enc_cmpLTP(p, q, y, tmp)); + ins_encode %{ + Register Rp = $p$$Register; + Register Rq = $q$$Register; + Register Ry = $y$$Register; + Register Rt = $tmp$$Register; + __ subl(Rp, Rq); + __ sbbl(Rt, Rt); + __ andl(Rt, Ry); + __ addl(Rp, Rt); + %} ins_pipe(pipe_cmplt); %} -/* If I enable this, I encourage spilling in the inner loop of compress. -instruct cadd_cmpLTMask_mem( rRegI p, rRegI q, memory y, rRegI tmp, rFlagsReg cr ) -%{ - match(Set p (AddI (AndI (CmpLTMask p q) (LoadI y)) (SubI p q))); - effect( TEMP tmp, KILL cr ); - ins_cost(400); - - format %{ "SUB $p,$q\n\t" - "SBB RCX,RCX\n\t" - "AND RCX,$y\n\t" - "ADD $p,RCX" %} - ins_encode( enc_cmpLTP_mem(p,q,y,tmp) ); -%} -*/ - //---------- FP Instructions------------------------------------------------ instruct cmpF_cc_reg(rFlagsRegU cr, regF src1, regF src2)