2688 op->fpu_pop_count() > 0, op->fpu_pop_count() > 1); |
2688 op->fpu_pop_count() > 0, op->fpu_pop_count() > 1); |
2689 } |
2689 } |
2690 } else { |
2690 } else { |
2691 assert(code == lir_cmp_l2i, "check"); |
2691 assert(code == lir_cmp_l2i, "check"); |
2692 #ifdef _LP64 |
2692 #ifdef _LP64 |
2693 Register dest = dst->as_register(); |
2693 Label done; |
2694 __ xorptr(dest, dest); |
2694 Register dest = dst->as_register(); |
2695 Label high, done; |
2695 __ cmpptr(left->as_register_lo(), right->as_register_lo()); |
2696 __ cmpptr(left->as_register_lo(), right->as_register_lo()); |
2696 __ movl(dest, -1); |
2697 __ jcc(Assembler::equal, done); |
2697 __ jccb(Assembler::less, done); |
2698 __ jcc(Assembler::greater, high); |
2698 __ set_byte_if_not_zero(dest); |
2699 __ decrement(dest); |
2699 __ movzbl(dest, dest); |
2700 __ jmp(done); |
2700 __ bind(done); |
2701 __ bind(high); |
|
2702 __ increment(dest); |
|
2703 |
|
2704 __ bind(done); |
|
2705 |
|
2706 #else |
2701 #else |
2707 __ lcmp2int(left->as_register_hi(), |
2702 __ lcmp2int(left->as_register_hi(), |
2708 left->as_register_lo(), |
2703 left->as_register_lo(), |
2709 right->as_register_hi(), |
2704 right->as_register_hi(), |
2710 right->as_register_lo()); |
2705 right->as_register_lo()); |