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