src/share/vm/c1/c1_LIRAssembler.cpp

Print this page
rev 3227 : 7133857: exp() and pow() should use the x87 ISA on x86
Summary: use x87 instructions to implement exp() and pow() in interpreter/c1/c2.
Reviewed-by:


 701       }
 702       comp_op(op->condition(), op->in_opr1(), op->in_opr2(), op);
 703       break;
 704 
 705     case lir_cmp_l2i:
 706     case lir_cmp_fd2i:
 707     case lir_ucmp_fd2i:
 708       comp_fl2i(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op);
 709       break;
 710 
 711     case lir_cmove:
 712       cmove(op->condition(), op->in_opr1(), op->in_opr2(), op->result_opr(), op->type());
 713       break;
 714 
 715     case lir_shl:
 716     case lir_shr:
 717     case lir_ushr:
 718       if (op->in_opr2()->is_constant()) {
 719         shift_op(op->code(), op->in_opr1(), op->in_opr2()->as_constant_ptr()->as_jint(), op->result_opr());
 720       } else {
 721         shift_op(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op->tmp_opr());
 722       }
 723       break;
 724 
 725     case lir_add:
 726     case lir_sub:
 727     case lir_mul:
 728     case lir_mul_strictfp:
 729     case lir_div:
 730     case lir_div_strictfp:
 731     case lir_rem:
 732       assert(op->fpu_pop_count() < 2, "");
 733       arith_op(
 734         op->code(),
 735         op->in_opr1(),
 736         op->in_opr2(),
 737         op->result_opr(),
 738         op->info(),
 739         op->fpu_pop_count() == 1);
 740       break;
 741 
 742     case lir_abs:
 743     case lir_sqrt:
 744     case lir_sin:
 745     case lir_tan:
 746     case lir_cos:
 747     case lir_log:
 748     case lir_log10:


 749       intrinsic_op(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op);
 750       break;
 751 
 752     case lir_logic_and:
 753     case lir_logic_or:
 754     case lir_logic_xor:
 755       logic_op(
 756         op->code(),
 757         op->in_opr1(),
 758         op->in_opr2(),
 759         op->result_opr());
 760       break;
 761 
 762     case lir_throw:
 763       throw_op(op->in_opr1(), op->in_opr2(), op->info());
 764       break;
 765 
 766     default:
 767       Unimplemented();
 768       break;




 701       }
 702       comp_op(op->condition(), op->in_opr1(), op->in_opr2(), op);
 703       break;
 704 
 705     case lir_cmp_l2i:
 706     case lir_cmp_fd2i:
 707     case lir_ucmp_fd2i:
 708       comp_fl2i(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op);
 709       break;
 710 
 711     case lir_cmove:
 712       cmove(op->condition(), op->in_opr1(), op->in_opr2(), op->result_opr(), op->type());
 713       break;
 714 
 715     case lir_shl:
 716     case lir_shr:
 717     case lir_ushr:
 718       if (op->in_opr2()->is_constant()) {
 719         shift_op(op->code(), op->in_opr1(), op->in_opr2()->as_constant_ptr()->as_jint(), op->result_opr());
 720       } else {
 721         shift_op(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op->tmp1_opr());
 722       }
 723       break;
 724 
 725     case lir_add:
 726     case lir_sub:
 727     case lir_mul:
 728     case lir_mul_strictfp:
 729     case lir_div:
 730     case lir_div_strictfp:
 731     case lir_rem:
 732       assert(op->fpu_pop_count() < 2, "");
 733       arith_op(
 734         op->code(),
 735         op->in_opr1(),
 736         op->in_opr2(),
 737         op->result_opr(),
 738         op->info(),
 739         op->fpu_pop_count() == 1);
 740       break;
 741 
 742     case lir_abs:
 743     case lir_sqrt:
 744     case lir_sin:
 745     case lir_tan:
 746     case lir_cos:
 747     case lir_log:
 748     case lir_log10:
 749     case lir_exp:
 750     case lir_pow:
 751       intrinsic_op(op->code(), op->in_opr1(), op->in_opr2(), op->result_opr(), op);
 752       break;
 753 
 754     case lir_logic_and:
 755     case lir_logic_or:
 756     case lir_logic_xor:
 757       logic_op(
 758         op->code(),
 759         op->in_opr1(),
 760         op->in_opr2(),
 761         op->result_opr());
 762       break;
 763 
 764     case lir_throw:
 765       throw_op(op->in_opr1(), op->in_opr2(), op->info());
 766       break;
 767 
 768     default:
 769       Unimplemented();
 770       break;