741 op->result_opr());
742 break;
743
744 case lir_throw:
745 throw_op(op->in_opr1(), op->in_opr2(), op->info());
746 break;
747
748 case lir_xadd:
749 case lir_xchg:
750 atomic_op(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op->tmp1_opr());
751 break;
752
753 default:
754 Unimplemented();
755 break;
756 }
757 }
758
759
760 void LIR_Assembler::build_frame() {
761 _masm->build_frame(initial_frame_size_in_bytes(), bang_size_in_bytes());
762 }
763
764
765 void LIR_Assembler::roundfp_op(LIR_Opr src, LIR_Opr tmp, LIR_Opr dest, bool pop_fpu_stack) {
766 assert(strict_fp_requires_explicit_rounding, "not required");
767 assert((src->is_single_fpu() && dest->is_single_stack()) ||
768 (src->is_double_fpu() && dest->is_double_stack()),
769 "round_fp: rounds register -> stack location");
770
771 reg2stack (src, dest, src->type(), pop_fpu_stack);
772 }
773
774
775 void LIR_Assembler::move_op(LIR_Opr src, LIR_Opr dest, BasicType type, LIR_PatchCode patch_code, CodeEmitInfo* info, bool pop_fpu_stack, bool unaligned, bool wide) {
776 if (src->is_register()) {
777 if (dest->is_register()) {
778 assert(patch_code == lir_patch_none && info == NULL, "no patching and info allowed here");
779 reg2reg(src, dest);
780 } else if (dest->is_stack()) {
781 assert(patch_code == lir_patch_none && info == NULL, "no patching and info allowed here");
|
741 op->result_opr());
742 break;
743
744 case lir_throw:
745 throw_op(op->in_opr1(), op->in_opr2(), op->info());
746 break;
747
748 case lir_xadd:
749 case lir_xchg:
750 atomic_op(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op->tmp1_opr());
751 break;
752
753 default:
754 Unimplemented();
755 break;
756 }
757 }
758
759
760 void LIR_Assembler::build_frame() {
761 _masm->build_frame(initial_frame_size_in_bytes(), bang_size_in_bytes(), compilation()->max_monitors());
762 }
763
764
765 void LIR_Assembler::roundfp_op(LIR_Opr src, LIR_Opr tmp, LIR_Opr dest, bool pop_fpu_stack) {
766 assert(strict_fp_requires_explicit_rounding, "not required");
767 assert((src->is_single_fpu() && dest->is_single_stack()) ||
768 (src->is_double_fpu() && dest->is_double_stack()),
769 "round_fp: rounds register -> stack location");
770
771 reg2stack (src, dest, src->type(), pop_fpu_stack);
772 }
773
774
775 void LIR_Assembler::move_op(LIR_Opr src, LIR_Opr dest, BasicType type, LIR_PatchCode patch_code, CodeEmitInfo* info, bool pop_fpu_stack, bool unaligned, bool wide) {
776 if (src->is_register()) {
777 if (dest->is_register()) {
778 assert(patch_code == lir_patch_none && info == NULL, "no patching and info allowed here");
779 reg2reg(src, dest);
780 } else if (dest->is_stack()) {
781 assert(patch_code == lir_patch_none && info == NULL, "no patching and info allowed here");
|