823
824 // Copy the register names over into the shared world
825 for( i=OptoReg::Name(0); i<OptoReg::Name(_last_Mach_Reg); i = OptoReg::add(i,1) ) {
826 // SharedInfo::regName[i] = regName[i];
827 // Handy RegMasks per machine register
828 mreg2regmask[i].Insert(i);
829 }
830
831 // Grab the Frame Pointer
832 Node *fp = ret->in(TypeFunc::FramePtr);
833 Node *mem = ret->in(TypeFunc::Memory);
834 const TypePtr* atp = TypePtr::BOTTOM;
835 // Share frame pointer while making spill ops
836 set_shared(fp);
837
838 // Compute generic short-offset Loads
839 #ifdef _LP64
840 MachNode *spillCP = match_tree(new (C) LoadNNode(NULL,mem,fp,atp,TypeInstPtr::BOTTOM,MemNode::unordered));
841 #endif
842 MachNode *spillI = match_tree(new (C) LoadINode(NULL,mem,fp,atp,TypeInt::INT,MemNode::unordered));
843 MachNode *spillL = match_tree(new (C) LoadLNode(NULL,mem,fp,atp,TypeLong::LONG,MemNode::unordered,false));
844 MachNode *spillF = match_tree(new (C) LoadFNode(NULL,mem,fp,atp,Type::FLOAT,MemNode::unordered));
845 MachNode *spillD = match_tree(new (C) LoadDNode(NULL,mem,fp,atp,Type::DOUBLE,MemNode::unordered));
846 MachNode *spillP = match_tree(new (C) LoadPNode(NULL,mem,fp,atp,TypeInstPtr::BOTTOM,MemNode::unordered));
847 assert(spillI != NULL && spillL != NULL && spillF != NULL &&
848 spillD != NULL && spillP != NULL, "");
849 // Get the ADLC notion of the right regmask, for each basic type.
850 #ifdef _LP64
851 idealreg2regmask[Op_RegN] = &spillCP->out_RegMask();
852 #endif
853 idealreg2regmask[Op_RegI] = &spillI->out_RegMask();
854 idealreg2regmask[Op_RegL] = &spillL->out_RegMask();
855 idealreg2regmask[Op_RegF] = &spillF->out_RegMask();
856 idealreg2regmask[Op_RegD] = &spillD->out_RegMask();
857 idealreg2regmask[Op_RegP] = &spillP->out_RegMask();
858
859 // Vector regmasks.
860 if (Matcher::vector_size_supported(T_BYTE,4)) {
861 TypeVect::VECTS = TypeVect::make(T_BYTE, 4);
862 MachNode *spillVectS = match_tree(new (C) LoadVectorNode(NULL,mem,fp,atp,TypeVect::VECTS));
863 idealreg2regmask[Op_VecS] = &spillVectS->out_RegMask();
|
823
824 // Copy the register names over into the shared world
825 for( i=OptoReg::Name(0); i<OptoReg::Name(_last_Mach_Reg); i = OptoReg::add(i,1) ) {
826 // SharedInfo::regName[i] = regName[i];
827 // Handy RegMasks per machine register
828 mreg2regmask[i].Insert(i);
829 }
830
831 // Grab the Frame Pointer
832 Node *fp = ret->in(TypeFunc::FramePtr);
833 Node *mem = ret->in(TypeFunc::Memory);
834 const TypePtr* atp = TypePtr::BOTTOM;
835 // Share frame pointer while making spill ops
836 set_shared(fp);
837
838 // Compute generic short-offset Loads
839 #ifdef _LP64
840 MachNode *spillCP = match_tree(new (C) LoadNNode(NULL,mem,fp,atp,TypeInstPtr::BOTTOM,MemNode::unordered));
841 #endif
842 MachNode *spillI = match_tree(new (C) LoadINode(NULL,mem,fp,atp,TypeInt::INT,MemNode::unordered));
843 MachNode *spillL = match_tree(new (C) LoadLNode(NULL,mem,fp,atp,TypeLong::LONG,MemNode::unordered, LoadNode::DependsOnlyOnTest,false));
844 MachNode *spillF = match_tree(new (C) LoadFNode(NULL,mem,fp,atp,Type::FLOAT,MemNode::unordered));
845 MachNode *spillD = match_tree(new (C) LoadDNode(NULL,mem,fp,atp,Type::DOUBLE,MemNode::unordered));
846 MachNode *spillP = match_tree(new (C) LoadPNode(NULL,mem,fp,atp,TypeInstPtr::BOTTOM,MemNode::unordered));
847 assert(spillI != NULL && spillL != NULL && spillF != NULL &&
848 spillD != NULL && spillP != NULL, "");
849 // Get the ADLC notion of the right regmask, for each basic type.
850 #ifdef _LP64
851 idealreg2regmask[Op_RegN] = &spillCP->out_RegMask();
852 #endif
853 idealreg2regmask[Op_RegI] = &spillI->out_RegMask();
854 idealreg2regmask[Op_RegL] = &spillL->out_RegMask();
855 idealreg2regmask[Op_RegF] = &spillF->out_RegMask();
856 idealreg2regmask[Op_RegD] = &spillD->out_RegMask();
857 idealreg2regmask[Op_RegP] = &spillP->out_RegMask();
858
859 // Vector regmasks.
860 if (Matcher::vector_size_supported(T_BYTE,4)) {
861 TypeVect::VECTS = TypeVect::make(T_BYTE, 4);
862 MachNode *spillVectS = match_tree(new (C) LoadVectorNode(NULL,mem,fp,atp,TypeVect::VECTS));
863 idealreg2regmask[Op_VecS] = &spillVectS->out_RegMask();
|