3753 } else { |
3753 } else { |
3754 ShouldNotReachHere(); |
3754 ShouldNotReachHere(); |
3755 } |
3755 } |
3756 } |
3756 } |
3757 |
3757 |
|
3758 #ifdef ASSERT |
|
3759 // emit run-time assertion |
|
3760 void LIR_Assembler::emit_assert(LIR_OpAssert* op) { |
|
3761 assert(op->code() == lir_assert, "must be"); |
|
3762 |
|
3763 if (op->in_opr1()->is_valid()) { |
|
3764 assert(op->in_opr2()->is_valid(), "both operands must be valid"); |
|
3765 comp_op(op->condition(), op->in_opr1(), op->in_opr2(), op); |
|
3766 } else { |
|
3767 assert(op->in_opr2()->is_illegal(), "both operands must be illegal"); |
|
3768 assert(op->condition() == lir_cond_always, "no other conditions allowed"); |
|
3769 } |
|
3770 |
|
3771 Label ok; |
|
3772 if (op->condition() != lir_cond_always) { |
|
3773 Assembler::Condition acond = Assembler::zero; |
|
3774 switch (op->condition()) { |
|
3775 case lir_cond_equal: acond = Assembler::equal; break; |
|
3776 case lir_cond_notEqual: acond = Assembler::notEqual; break; |
|
3777 case lir_cond_less: acond = Assembler::less; break; |
|
3778 case lir_cond_lessEqual: acond = Assembler::lessEqual; break; |
|
3779 case lir_cond_greaterEqual: acond = Assembler::greaterEqual;break; |
|
3780 case lir_cond_greater: acond = Assembler::greater; break; |
|
3781 case lir_cond_belowEqual: acond = Assembler::belowEqual; break; |
|
3782 case lir_cond_aboveEqual: acond = Assembler::aboveEqual; break; |
|
3783 default: ShouldNotReachHere(); |
|
3784 } |
|
3785 __ jcc(acond, ok); |
|
3786 } |
|
3787 if (op->halt()) { |
|
3788 const char* str = __ code_string(op->msg()); |
|
3789 __ stop(str); |
|
3790 } else { |
|
3791 breakpoint(); |
|
3792 } |
|
3793 __ bind(ok); |
|
3794 } |
|
3795 #endif |
3758 |
3796 |
3759 void LIR_Assembler::membar() { |
3797 void LIR_Assembler::membar() { |
3760 // QQQ sparc TSO uses this, |
3798 // QQQ sparc TSO uses this, |
3761 __ membar( Assembler::Membar_mask_bits(Assembler::StoreLoad)); |
3799 __ membar( Assembler::Membar_mask_bits(Assembler::StoreLoad)); |
3762 } |
3800 } |