src/cpu/x86/vm/c1_LIRGenerator_x86.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6855215 Sdiff src/cpu/x86/vm

src/cpu/x86/vm/c1_LIRGenerator_x86.cpp

Print this page




 810   // sin and cos need two free fpu stack slots, so register two temporary operands
 811   LIR_Opr tmp1 = FrameMap::caller_save_fpu_reg_at(0);
 812   LIR_Opr tmp2 = FrameMap::caller_save_fpu_reg_at(1);
 813 
 814   if (use_fpu) {
 815     LIR_Opr tmp = FrameMap::fpu0_double_opr;
 816     __ move(calc_input, tmp);
 817 
 818     calc_input = tmp;
 819     calc_result = tmp;
 820     tmp1 = FrameMap::caller_save_fpu_reg_at(1);
 821     tmp2 = FrameMap::caller_save_fpu_reg_at(2);
 822   }
 823 
 824   switch(x->id()) {
 825     case vmIntrinsics::_dabs:   __ abs  (calc_input, calc_result, LIR_OprFact::illegalOpr); break;
 826     case vmIntrinsics::_dsqrt:  __ sqrt (calc_input, calc_result, LIR_OprFact::illegalOpr); break;
 827     case vmIntrinsics::_dsin:   __ sin  (calc_input, calc_result, tmp1, tmp2);              break;
 828     case vmIntrinsics::_dcos:   __ cos  (calc_input, calc_result, tmp1, tmp2);              break;
 829     case vmIntrinsics::_dtan:   __ tan  (calc_input, calc_result, tmp1, tmp2);              break;
 830     case vmIntrinsics::_dlog:   __ log  (calc_input, calc_result, LIR_OprFact::illegalOpr); break;
 831     case vmIntrinsics::_dlog10: __ log10(calc_input, calc_result, LIR_OprFact::illegalOpr); break;
 832     default:                    ShouldNotReachHere();
 833   }
 834 
 835   if (use_fpu) {
 836     __ move(calc_result, x->operand());
 837   }
 838 }
 839 
 840 
 841 void LIRGenerator::do_ArrayCopy(Intrinsic* x) {
 842   assert(x->number_of_arguments() == 5, "wrong type");
 843   LIRItem src(x->argument_at(0), this);
 844   LIRItem src_pos(x->argument_at(1), this);
 845   LIRItem dst(x->argument_at(2), this);
 846   LIRItem dst_pos(x->argument_at(3), this);
 847   LIRItem length(x->argument_at(4), this);
 848 
 849   // operands for arraycopy must use fixed registers, otherwise
 850   // LinearScan will fail allocation (because arraycopy always needs a
 851   // call)




 810   // sin and cos need two free fpu stack slots, so register two temporary operands
 811   LIR_Opr tmp1 = FrameMap::caller_save_fpu_reg_at(0);
 812   LIR_Opr tmp2 = FrameMap::caller_save_fpu_reg_at(1);
 813 
 814   if (use_fpu) {
 815     LIR_Opr tmp = FrameMap::fpu0_double_opr;
 816     __ move(calc_input, tmp);
 817 
 818     calc_input = tmp;
 819     calc_result = tmp;
 820     tmp1 = FrameMap::caller_save_fpu_reg_at(1);
 821     tmp2 = FrameMap::caller_save_fpu_reg_at(2);
 822   }
 823 
 824   switch(x->id()) {
 825     case vmIntrinsics::_dabs:   __ abs  (calc_input, calc_result, LIR_OprFact::illegalOpr); break;
 826     case vmIntrinsics::_dsqrt:  __ sqrt (calc_input, calc_result, LIR_OprFact::illegalOpr); break;
 827     case vmIntrinsics::_dsin:   __ sin  (calc_input, calc_result, tmp1, tmp2);              break;
 828     case vmIntrinsics::_dcos:   __ cos  (calc_input, calc_result, tmp1, tmp2);              break;
 829     case vmIntrinsics::_dtan:   __ tan  (calc_input, calc_result, tmp1, tmp2);              break;
 830     case vmIntrinsics::_dlog:   __ log  (calc_input, calc_result, tmp1);                    break;
 831     case vmIntrinsics::_dlog10: __ log10(calc_input, calc_result, tmp1);                    break;
 832     default:                    ShouldNotReachHere();
 833   }
 834 
 835   if (use_fpu) {
 836     __ move(calc_result, x->operand());
 837   }
 838 }
 839 
 840 
 841 void LIRGenerator::do_ArrayCopy(Intrinsic* x) {
 842   assert(x->number_of_arguments() == 5, "wrong type");
 843   LIRItem src(x->argument_at(0), this);
 844   LIRItem src_pos(x->argument_at(1), this);
 845   LIRItem dst(x->argument_at(2), this);
 846   LIRItem dst_pos(x->argument_at(3), this);
 847   LIRItem length(x->argument_at(4), this);
 848 
 849   // operands for arraycopy must use fixed registers, otherwise
 850   // LinearScan will fail allocation (because arraycopy always needs a
 851   // call)


src/cpu/x86/vm/c1_LIRGenerator_x86.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File