void LIR_Assembler::roundfp_op(LIR_Opr src, LIR_Opr tmp, LIR_Opr dest, bool pop_fpu_stack) { assert((src->is_single_fpu() && dest->is_single_stack()) || (src->is_double_fpu() && dest->is_double_stack()), "round_fp: rounds register -> stack location"); reg2stack (src, dest, src->type(), pop_fpu_stack); }
LIR_Opr FpuStackAllocator::to_fpu_stack(LIR_Opr opr) { assert(opr->is_fpu_register() && !opr->is_xmm_register(), "shouldn't call this otherwise"); int stack_offset = tos_offset(opr); if (opr->is_single_fpu()) { return LIR_OprFact::single_fpu(stack_offset)->make_fpu_stack_offset(); } else { assert(opr->is_double_fpu(), "shouldn't call this otherwise"); return LIR_OprFact::double_fpu(stack_offset)->make_fpu_stack_offset(); } }
LIR_Opr FpuStackAllocator::to_fpu_stack_top(LIR_Opr opr, bool dont_check_offset) { assert(opr->is_fpu_register() && !opr->is_xmm_register(), "shouldn't call this otherwise"); assert(dont_check_offset || tos_offset(opr) == 0, "operand is not on stack top"); int stack_offset = 0; if (opr->is_single_fpu()) { return LIR_OprFact::single_fpu(stack_offset)->make_fpu_stack_offset(); } else { assert(opr->is_double_fpu(), "shouldn't call this otherwise"); return LIR_OprFact::double_fpu(stack_offset)->make_fpu_stack_offset(); } }