< prev index next >

src/share/vm/opto/c2compiler.cpp

Print this page




 163 
 164   if (id < vmIntrinsics::FIRST_ID || id > vmIntrinsics::LAST_COMPILER_INLINE) {
 165     return false;
 166   }
 167 
 168   // Only Object.hashCode and Object.clone intrinsics implement also a virtual
 169   // dispatch because calling both methods is expensive but both methods are
 170   // frequently overridden. All other intrinsics implement only a non-virtual
 171   // dispatch.
 172   if (is_virtual) {
 173     switch (id) {
 174     case vmIntrinsics::_hashCode:
 175     case vmIntrinsics::_clone:
 176       break;
 177     default:
 178       return false;
 179     }
 180   }
 181 
 182   switch (id) {
 183   case vmIntrinsics::_compareTo:











 184     if (!Matcher::match_rule_supported(Op_StrComp)) return false;
 185     break;
 186   case vmIntrinsics::_equals:

 187     if (!Matcher::match_rule_supported(Op_StrEquals)) return false;
 188     break;

 189   case vmIntrinsics::_equalsC:
 190     if (!Matcher::match_rule_supported(Op_AryEq)) return false;
 191     break;
 192   case vmIntrinsics::_copyMemory:
 193     if (StubRoutines::unsafe_arraycopy() == NULL) return false;
 194     break;
 195   case vmIntrinsics::_encodeISOArray:

 196     if (!Matcher::match_rule_supported(Op_EncodeISOArray)) return false;
 197     break;



 198   case vmIntrinsics::_bitCount_i:
 199     if (!Matcher::match_rule_supported(Op_PopCountI)) return false;
 200     break;
 201   case vmIntrinsics::_bitCount_l:
 202     if (!Matcher::match_rule_supported(Op_PopCountL)) return false;
 203     break;
 204   case vmIntrinsics::_numberOfLeadingZeros_i:
 205     if (!Matcher::match_rule_supported(Op_CountLeadingZerosI)) return false;
 206     break;
 207   case vmIntrinsics::_numberOfLeadingZeros_l:
 208     if (!Matcher::match_rule_supported(Op_CountLeadingZerosL)) return false;
 209     break;
 210   case vmIntrinsics::_numberOfTrailingZeros_i:
 211     if (!Matcher::match_rule_supported(Op_CountTrailingZerosI)) return false;
 212     break;
 213   case vmIntrinsics::_numberOfTrailingZeros_l:
 214     if (!Matcher::match_rule_supported(Op_CountTrailingZerosL)) return false;
 215     break;
 216   case vmIntrinsics::_reverseBytes_c:
 217     if (!Matcher::match_rule_supported(Op_ReverseBytesUS)) return false;


 284     break;
 285   case vmIntrinsics::_getCallerClass:
 286     if (SystemDictionary::reflect_CallerSensitive_klass() == NULL) return false;
 287     break;
 288   case vmIntrinsics::_hashCode:
 289   case vmIntrinsics::_identityHashCode:
 290   case vmIntrinsics::_getClass:
 291   case vmIntrinsics::_dsin:
 292   case vmIntrinsics::_dcos:
 293   case vmIntrinsics::_dtan:
 294   case vmIntrinsics::_dabs:
 295   case vmIntrinsics::_datan2:
 296   case vmIntrinsics::_dsqrt:
 297   case vmIntrinsics::_dexp:
 298   case vmIntrinsics::_dlog:
 299   case vmIntrinsics::_dlog10:
 300   case vmIntrinsics::_dpow:
 301   case vmIntrinsics::_min:
 302   case vmIntrinsics::_max:
 303   case vmIntrinsics::_arraycopy:
 304   case vmIntrinsics::_indexOf:










 305   case vmIntrinsics::_getObject:
 306   case vmIntrinsics::_getBoolean:
 307   case vmIntrinsics::_getByte:
 308   case vmIntrinsics::_getShort:
 309   case vmIntrinsics::_getChar:
 310   case vmIntrinsics::_getInt:
 311   case vmIntrinsics::_getLong:
 312   case vmIntrinsics::_getFloat:
 313   case vmIntrinsics::_getDouble:
 314   case vmIntrinsics::_putObject:
 315   case vmIntrinsics::_putBoolean:
 316   case vmIntrinsics::_putByte:
 317   case vmIntrinsics::_putShort:
 318   case vmIntrinsics::_putChar:
 319   case vmIntrinsics::_putInt:
 320   case vmIntrinsics::_putLong:
 321   case vmIntrinsics::_putFloat:
 322   case vmIntrinsics::_putDouble:
 323   case vmIntrinsics::_getByte_raw:
 324   case vmIntrinsics::_getShort_raw:




 163 
 164   if (id < vmIntrinsics::FIRST_ID || id > vmIntrinsics::LAST_COMPILER_INLINE) {
 165     return false;
 166   }
 167 
 168   // Only Object.hashCode and Object.clone intrinsics implement also a virtual
 169   // dispatch because calling both methods is expensive but both methods are
 170   // frequently overridden. All other intrinsics implement only a non-virtual
 171   // dispatch.
 172   if (is_virtual) {
 173     switch (id) {
 174     case vmIntrinsics::_hashCode:
 175     case vmIntrinsics::_clone:
 176       break;
 177     default:
 178       return false;
 179     }
 180   }
 181 
 182   switch (id) {
 183   case vmIntrinsics::_compressStringC:
 184   case vmIntrinsics::_compressStringB:
 185     if (!Matcher::has_match_rule(Op_StrCompressedCopy)) return false;
 186     break;
 187   case vmIntrinsics::_inflateStringC:
 188   case vmIntrinsics::_inflateStringB:
 189     if (!Matcher::has_match_rule(Op_StrInflatedCopy)) return false;
 190     break;
 191   case vmIntrinsics::_compareToL:
 192   case vmIntrinsics::_compareToU:
 193   case vmIntrinsics::_compareToLU:
 194   case vmIntrinsics::_compareToUL:
 195     if (!Matcher::match_rule_supported(Op_StrComp)) return false;
 196     break;
 197   case vmIntrinsics::_equalsL:
 198   case vmIntrinsics::_equalsU:
 199     if (!Matcher::match_rule_supported(Op_StrEquals)) return false;
 200     break;
 201   case vmIntrinsics::_equalsB:
 202   case vmIntrinsics::_equalsC:
 203     if (!Matcher::match_rule_supported(Op_AryEq)) return false;
 204     break;
 205   case vmIntrinsics::_copyMemory:
 206     if (StubRoutines::unsafe_arraycopy() == NULL) return false;
 207     break;
 208   case vmIntrinsics::_encodeISOArray:
 209   case vmIntrinsics::_encodeByteISOArray:
 210     if (!Matcher::match_rule_supported(Op_EncodeISOArray)) return false;
 211     break;
 212   case vmIntrinsics::_hasNegatives:
 213     if (!Matcher::match_rule_supported(Op_HasNegatives))  return false;
 214     break;
 215   case vmIntrinsics::_bitCount_i:
 216     if (!Matcher::match_rule_supported(Op_PopCountI)) return false;
 217     break;
 218   case vmIntrinsics::_bitCount_l:
 219     if (!Matcher::match_rule_supported(Op_PopCountL)) return false;
 220     break;
 221   case vmIntrinsics::_numberOfLeadingZeros_i:
 222     if (!Matcher::match_rule_supported(Op_CountLeadingZerosI)) return false;
 223     break;
 224   case vmIntrinsics::_numberOfLeadingZeros_l:
 225     if (!Matcher::match_rule_supported(Op_CountLeadingZerosL)) return false;
 226     break;
 227   case vmIntrinsics::_numberOfTrailingZeros_i:
 228     if (!Matcher::match_rule_supported(Op_CountTrailingZerosI)) return false;
 229     break;
 230   case vmIntrinsics::_numberOfTrailingZeros_l:
 231     if (!Matcher::match_rule_supported(Op_CountTrailingZerosL)) return false;
 232     break;
 233   case vmIntrinsics::_reverseBytes_c:
 234     if (!Matcher::match_rule_supported(Op_ReverseBytesUS)) return false;


 301     break;
 302   case vmIntrinsics::_getCallerClass:
 303     if (SystemDictionary::reflect_CallerSensitive_klass() == NULL) return false;
 304     break;
 305   case vmIntrinsics::_hashCode:
 306   case vmIntrinsics::_identityHashCode:
 307   case vmIntrinsics::_getClass:
 308   case vmIntrinsics::_dsin:
 309   case vmIntrinsics::_dcos:
 310   case vmIntrinsics::_dtan:
 311   case vmIntrinsics::_dabs:
 312   case vmIntrinsics::_datan2:
 313   case vmIntrinsics::_dsqrt:
 314   case vmIntrinsics::_dexp:
 315   case vmIntrinsics::_dlog:
 316   case vmIntrinsics::_dlog10:
 317   case vmIntrinsics::_dpow:
 318   case vmIntrinsics::_min:
 319   case vmIntrinsics::_max:
 320   case vmIntrinsics::_arraycopy:
 321   case vmIntrinsics::_indexOfL:
 322   case vmIntrinsics::_indexOfU:
 323   case vmIntrinsics::_indexOfUL:
 324   case vmIntrinsics::_indexOfIL:
 325   case vmIntrinsics::_indexOfIU:
 326   case vmIntrinsics::_indexOfIUL:
 327   case vmIntrinsics::_indexOfU_char:
 328   case vmIntrinsics::_toBytesStringU:
 329   case vmIntrinsics::_getCharsStringU:
 330   case vmIntrinsics::_getCharStringU:
 331   case vmIntrinsics::_putCharStringU:
 332   case vmIntrinsics::_getObject:
 333   case vmIntrinsics::_getBoolean:
 334   case vmIntrinsics::_getByte:
 335   case vmIntrinsics::_getShort:
 336   case vmIntrinsics::_getChar:
 337   case vmIntrinsics::_getInt:
 338   case vmIntrinsics::_getLong:
 339   case vmIntrinsics::_getFloat:
 340   case vmIntrinsics::_getDouble:
 341   case vmIntrinsics::_putObject:
 342   case vmIntrinsics::_putBoolean:
 343   case vmIntrinsics::_putByte:
 344   case vmIntrinsics::_putShort:
 345   case vmIntrinsics::_putChar:
 346   case vmIntrinsics::_putInt:
 347   case vmIntrinsics::_putLong:
 348   case vmIntrinsics::_putFloat:
 349   case vmIntrinsics::_putDouble:
 350   case vmIntrinsics::_getByte_raw:
 351   case vmIntrinsics::_getShort_raw:


< prev index next >