src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp

Print this page




1711     if ( type == T_OBJECT ) __ ld_ptr(as_Address(addr), O7);
1712     else                    __ ld(as_Address(addr), O7);
1713     __ cmp(O7, opr2->as_constant_ptr()->as_jint());
1714   } else {
1715     ShouldNotReachHere();
1716   }
1717 }
1718 
1719 
1720 void LIR_Assembler::comp_fl2i(LIR_Code code, LIR_Opr left, LIR_Opr right, LIR_Opr dst, LIR_Op2* op){
1721   if (code == lir_cmp_fd2i || code == lir_ucmp_fd2i) {
1722     bool is_unordered_less = (code == lir_ucmp_fd2i);
1723     if (left->is_single_fpu()) {
1724       __ float_cmp(true, is_unordered_less ? -1 : 1, left->as_float_reg(), right->as_float_reg(), dst->as_register());
1725     } else if (left->is_double_fpu()) {
1726       __ float_cmp(false, is_unordered_less ? -1 : 1, left->as_double_reg(), right->as_double_reg(), dst->as_register());
1727     } else {
1728       ShouldNotReachHere();
1729     }
1730   } else if (code == lir_cmp_l2i) {



1731     __ lcmp(left->as_register_hi(),  left->as_register_lo(),
1732             right->as_register_hi(), right->as_register_lo(),
1733             dst->as_register());

1734   } else {
1735     ShouldNotReachHere();
1736   }
1737 }
1738 
1739 
1740 void LIR_Assembler::cmove(LIR_Condition condition, LIR_Opr opr1, LIR_Opr opr2, LIR_Opr result) {
1741 
1742   Assembler::Condition acond;
1743   switch (condition) {
1744     case lir_cond_equal:        acond = Assembler::equal;        break;
1745     case lir_cond_notEqual:     acond = Assembler::notEqual;     break;
1746     case lir_cond_less:         acond = Assembler::less;         break;
1747     case lir_cond_lessEqual:    acond = Assembler::lessEqual;    break;
1748     case lir_cond_greaterEqual: acond = Assembler::greaterEqual; break;
1749     case lir_cond_greater:      acond = Assembler::greater;      break;
1750     case lir_cond_aboveEqual:   acond = Assembler::greaterEqualUnsigned;      break;
1751     case lir_cond_belowEqual:   acond = Assembler::lessEqualUnsigned;      break;
1752     default:                         ShouldNotReachHere();
1753   };




1711     if ( type == T_OBJECT ) __ ld_ptr(as_Address(addr), O7);
1712     else                    __ ld(as_Address(addr), O7);
1713     __ cmp(O7, opr2->as_constant_ptr()->as_jint());
1714   } else {
1715     ShouldNotReachHere();
1716   }
1717 }
1718 
1719 
1720 void LIR_Assembler::comp_fl2i(LIR_Code code, LIR_Opr left, LIR_Opr right, LIR_Opr dst, LIR_Op2* op){
1721   if (code == lir_cmp_fd2i || code == lir_ucmp_fd2i) {
1722     bool is_unordered_less = (code == lir_ucmp_fd2i);
1723     if (left->is_single_fpu()) {
1724       __ float_cmp(true, is_unordered_less ? -1 : 1, left->as_float_reg(), right->as_float_reg(), dst->as_register());
1725     } else if (left->is_double_fpu()) {
1726       __ float_cmp(false, is_unordered_less ? -1 : 1, left->as_double_reg(), right->as_double_reg(), dst->as_register());
1727     } else {
1728       ShouldNotReachHere();
1729     }
1730   } else if (code == lir_cmp_l2i) {
1731 #ifdef _LP64
1732     __ lcmp(left->as_register_lo(), right->as_register_lo(), dst->as_register());
1733 #else
1734     __ lcmp(left->as_register_hi(),  left->as_register_lo(),
1735             right->as_register_hi(), right->as_register_lo(),
1736             dst->as_register());
1737 #endif
1738   } else {
1739     ShouldNotReachHere();
1740   }
1741 }
1742 
1743 
1744 void LIR_Assembler::cmove(LIR_Condition condition, LIR_Opr opr1, LIR_Opr opr2, LIR_Opr result) {
1745 
1746   Assembler::Condition acond;
1747   switch (condition) {
1748     case lir_cond_equal:        acond = Assembler::equal;        break;
1749     case lir_cond_notEqual:     acond = Assembler::notEqual;     break;
1750     case lir_cond_less:         acond = Assembler::less;         break;
1751     case lir_cond_lessEqual:    acond = Assembler::lessEqual;    break;
1752     case lir_cond_greaterEqual: acond = Assembler::greaterEqual; break;
1753     case lir_cond_greater:      acond = Assembler::greater;      break;
1754     case lir_cond_aboveEqual:   acond = Assembler::greaterEqualUnsigned;      break;
1755     case lir_cond_belowEqual:   acond = Assembler::lessEqualUnsigned;      break;
1756     default:                         ShouldNotReachHere();
1757   };