2047 case Op_CountTrailingZerosL: 2048 if (!UseCountLeadingZerosInstructionsPPC64) 2049 return false; 2050 break; 2051 2052 case Op_PopCountI: 2053 case Op_PopCountL: 2054 return (UsePopCountInstruction && VM_Version::has_popcntw()); 2055 2056 case Op_StrComp: 2057 return SpecialStringCompareTo; 2058 case Op_StrEquals: 2059 return SpecialStringEquals; 2060 case Op_StrIndexOf: 2061 return SpecialStringIndexOf; 2062 } 2063 2064 return true; // Per default match rules are supported. 2065 } 2066 2067 const int Matcher::float_pressure(int default_pressure_threshold) { 2068 return default_pressure_threshold; 2069 } 2070 2071 int Matcher::regnum_to_fpu_offset(int regnum) { 2072 // No user for this method? 2073 Unimplemented(); 2074 return 999; 2075 } 2076 2077 const bool Matcher::convL2FSupported(void) { 2078 // fcfids can do the conversion (>= Power7). 2079 // fcfid + frsp showed rounding problem when result should be 0x3f800001. 2080 return VM_Version::has_fcfids(); // False means that conversion is done by runtime call. 2081 } 2082 2083 // Vector width in bytes. 2084 const int Matcher::vector_width_in_bytes(BasicType bt) { 2085 assert(MaxVectorSize == 8, ""); 2086 return 8; | 2047 case Op_CountTrailingZerosL: 2048 if (!UseCountLeadingZerosInstructionsPPC64) 2049 return false; 2050 break; 2051 2052 case Op_PopCountI: 2053 case Op_PopCountL: 2054 return (UsePopCountInstruction && VM_Version::has_popcntw()); 2055 2056 case Op_StrComp: 2057 return SpecialStringCompareTo; 2058 case Op_StrEquals: 2059 return SpecialStringEquals; 2060 case Op_StrIndexOf: 2061 return SpecialStringIndexOf; 2062 } 2063 2064 return true; // Per default match rules are supported. 2065 } 2066 2067 const bool Matcher::match_rule_supported_vector(int opcode, int vlen) { 2068 2069 // TODO 2070 // identify extra cases that we might want to provide match rules for 2071 // e.g. Op_ vector nodes and other intrinsics while guarding with vlen 2072 if (!has_match_rule(opcode)) { 2073 return false; 2074 } 2075 2076 bool ret_value = match_rule_supported(opcode); 2077 // Add rules here. 2078 2079 return ret_value; // Per default match rules are supported. 2080 } 2081 2082 const int Matcher::float_pressure(int default_pressure_threshold) { 2083 return default_pressure_threshold; 2084 } 2085 2086 int Matcher::regnum_to_fpu_offset(int regnum) { 2087 // No user for this method? 2088 Unimplemented(); 2089 return 999; 2090 } 2091 2092 const bool Matcher::convL2FSupported(void) { 2093 // fcfids can do the conversion (>= Power7). 2094 // fcfid + frsp showed rounding problem when result should be 0x3f800001. 2095 return VM_Version::has_fcfids(); // False means that conversion is done by runtime call. 2096 } 2097 2098 // Vector width in bytes. 2099 const int Matcher::vector_width_in_bytes(BasicType bt) { 2100 assert(MaxVectorSize == 8, ""); 2101 return 8; |