736 runtime_entry = CAST_FROM_FN_PTR(address, SharedRuntime::dexp); 737 break; 738 default: 739 ShouldNotReachHere(); 740 } 741 742 LIR_Opr result = call_runtime(x->argument_at(0), runtime_entry, x->type(), NULL); 743 set_result(x, result); 744 break; 745 } 746 case vmIntrinsics::_dpow: { 747 assert(x->number_of_arguments() == 2, "wrong type"); 748 address runtime_entry = CAST_FROM_FN_PTR(address, SharedRuntime::dpow); 749 LIR_Opr result = call_runtime(x->argument_at(0), x->argument_at(1), runtime_entry, x->type(), NULL); 750 set_result(x, result); 751 break; 752 } 753 } 754 } 755 756 757 void LIRGenerator::do_ArrayCopy(Intrinsic* x) { 758 assert(x->number_of_arguments() == 5, "wrong type"); 759 760 // Make all state_for calls early since they can emit code 761 CodeEmitInfo* info = state_for(x, x->state()); 762 763 // Note: spill caller save before setting the item 764 LIRItem src (x->argument_at(0), this); 765 LIRItem src_pos (x->argument_at(1), this); 766 LIRItem dst (x->argument_at(2), this); 767 LIRItem dst_pos (x->argument_at(3), this); 768 LIRItem length (x->argument_at(4), this); 769 // load all values in callee_save_registers, as this makes the 770 // parameter passing to the fast case simpler 771 src.load_item_force (rlock_callee_saved(T_OBJECT)); 772 src_pos.load_item_force (rlock_callee_saved(T_INT)); 773 dst.load_item_force (rlock_callee_saved(T_OBJECT)); 774 dst_pos.load_item_force (rlock_callee_saved(T_INT)); 775 length.load_item_force (rlock_callee_saved(T_INT)); | 736 runtime_entry = CAST_FROM_FN_PTR(address, SharedRuntime::dexp); 737 break; 738 default: 739 ShouldNotReachHere(); 740 } 741 742 LIR_Opr result = call_runtime(x->argument_at(0), runtime_entry, x->type(), NULL); 743 set_result(x, result); 744 break; 745 } 746 case vmIntrinsics::_dpow: { 747 assert(x->number_of_arguments() == 2, "wrong type"); 748 address runtime_entry = CAST_FROM_FN_PTR(address, SharedRuntime::dpow); 749 LIR_Opr result = call_runtime(x->argument_at(0), x->argument_at(1), runtime_entry, x->type(), NULL); 750 set_result(x, result); 751 break; 752 } 753 } 754 } 755 756 void LIRGenerator::do_CryptoIntrinsic(Intrinsic* x) { 757 ShouldNotReachHere(); 758 } 759 760 void LIRGenerator::do_ArrayCopy(Intrinsic* x) { 761 assert(x->number_of_arguments() == 5, "wrong type"); 762 763 // Make all state_for calls early since they can emit code 764 CodeEmitInfo* info = state_for(x, x->state()); 765 766 // Note: spill caller save before setting the item 767 LIRItem src (x->argument_at(0), this); 768 LIRItem src_pos (x->argument_at(1), this); 769 LIRItem dst (x->argument_at(2), this); 770 LIRItem dst_pos (x->argument_at(3), this); 771 LIRItem length (x->argument_at(4), this); 772 // load all values in callee_save_registers, as this makes the 773 // parameter passing to the fast case simpler 774 src.load_item_force (rlock_callee_saved(T_OBJECT)); 775 src_pos.load_item_force (rlock_callee_saved(T_INT)); 776 dst.load_item_force (rlock_callee_saved(T_OBJECT)); 777 dst_pos.load_item_force (rlock_callee_saved(T_INT)); 778 length.load_item_force (rlock_callee_saved(T_INT)); |