comparison src/cpu/x86/vm/c1_LIRAssembler_x86.cpp @ 1369:0a43776437b6

6942223: c1 64 bit fixes Summary: This fixes lir_cmp_l2i on x64 and sparc 64bit, and the debug info generation. Reviewed-by: never
author iveresov
date Thu, 08 Apr 2010 12:13:07 -0700
parents fc2c71045ada
children 9f5b60a14736
comparison
equal deleted inserted replaced
1368:93767e6a2dfd 1369:0a43776437b6
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());