2690 } else if (t == T_DOUBLE) { |
2690 } else if (t == T_DOUBLE) { |
2691 store_value = new (C) MoveD2LNode(store_value); |
2691 store_value = new (C) MoveD2LNode(store_value); |
2692 _igvn.register_new_node_with_optimizer(store_value); |
2692 _igvn.register_new_node_with_optimizer(store_value); |
2693 } |
2693 } |
2694 |
2694 |
|
2695 if (CCallingConventionRequiresIntsAsLongs && |
|
2696 // See StubRoutines::select_fill_function for types. FLOAT has been converted to INT. |
|
2697 (t == T_FLOAT || t == T_INT || is_subword_type(t))) { |
|
2698 store_value = new (C) ConvI2LNode(store_value); |
|
2699 _igvn.register_new_node_with_optimizer(store_value); |
|
2700 } |
|
2701 |
2695 Node* mem_phi = store->in(MemNode::Memory); |
2702 Node* mem_phi = store->in(MemNode::Memory); |
2696 Node* result_ctrl; |
2703 Node* result_ctrl; |
2697 Node* result_mem; |
2704 Node* result_mem; |
2698 const TypeFunc* call_type = OptoRuntime::array_fill_Type(); |
2705 const TypeFunc* call_type = OptoRuntime::array_fill_Type(); |
2699 CallLeafNode *call = new (C) CallLeafNoFPNode(call_type, fill, |
2706 CallLeafNode *call = new (C) CallLeafNoFPNode(call_type, fill, |
2700 fill_name, TypeAryPtr::get_array_body_type(t)); |
2707 fill_name, TypeAryPtr::get_array_body_type(t)); |
2701 call->init_req(TypeFunc::Parms+0, from); |
2708 uint cnt = 0; |
2702 call->init_req(TypeFunc::Parms+1, store_value); |
2709 call->init_req(TypeFunc::Parms + cnt++, from); |
|
2710 call->init_req(TypeFunc::Parms + cnt++, store_value); |
|
2711 if (CCallingConventionRequiresIntsAsLongs) { |
|
2712 call->init_req(TypeFunc::Parms + cnt++, C->top()); |
|
2713 } |
2703 #ifdef _LP64 |
2714 #ifdef _LP64 |
2704 len = new (C) ConvI2LNode(len); |
2715 len = new (C) ConvI2LNode(len); |
2705 _igvn.register_new_node_with_optimizer(len); |
2716 _igvn.register_new_node_with_optimizer(len); |
2706 #endif |
2717 #endif |
2707 call->init_req(TypeFunc::Parms+2, len); |
2718 call->init_req(TypeFunc::Parms + cnt++, len); |
2708 #ifdef _LP64 |
2719 #ifdef _LP64 |
2709 call->init_req(TypeFunc::Parms+3, C->top()); |
2720 call->init_req(TypeFunc::Parms + cnt++, C->top()); |
2710 #endif |
2721 #endif |
2711 call->init_req( TypeFunc::Control, head->init_control()); |
2722 call->init_req(TypeFunc::Control, head->init_control()); |
2712 call->init_req( TypeFunc::I_O , C->top() ) ; // does no i/o |
2723 call->init_req(TypeFunc::I_O, C->top()); // Does no I/O. |
2713 call->init_req( TypeFunc::Memory , mem_phi->in(LoopNode::EntryControl) ); |
2724 call->init_req(TypeFunc::Memory, mem_phi->in(LoopNode::EntryControl)); |
2714 call->init_req( TypeFunc::ReturnAdr, C->start()->proj_out(TypeFunc::ReturnAdr) ); |
2725 call->init_req(TypeFunc::ReturnAdr, C->start()->proj_out(TypeFunc::ReturnAdr)); |
2715 call->init_req( TypeFunc::FramePtr, C->start()->proj_out(TypeFunc::FramePtr) ); |
2726 call->init_req(TypeFunc::FramePtr, C->start()->proj_out(TypeFunc::FramePtr)); |
2716 _igvn.register_new_node_with_optimizer(call); |
2727 _igvn.register_new_node_with_optimizer(call); |
2717 result_ctrl = new (C) ProjNode(call,TypeFunc::Control); |
2728 result_ctrl = new (C) ProjNode(call,TypeFunc::Control); |
2718 _igvn.register_new_node_with_optimizer(result_ctrl); |
2729 _igvn.register_new_node_with_optimizer(result_ctrl); |
2719 result_mem = new (C) ProjNode(call,TypeFunc::Memory); |
2730 result_mem = new (C) ProjNode(call,TypeFunc::Memory); |
2720 _igvn.register_new_node_with_optimizer(result_mem); |
2731 _igvn.register_new_node_with_optimizer(result_mem); |