399 break; 400 default: 401 return false; 402 } 403 } 404 405 int vmIntrinsics::predicates_needed(vmIntrinsics::ID id) { 406 assert(id != vmIntrinsics::_none, "must be a VM intrinsic"); 407 switch (id) { 408 case vmIntrinsics::_cipherBlockChaining_encryptAESCrypt: 409 case vmIntrinsics::_cipherBlockChaining_decryptAESCrypt: 410 case vmIntrinsics::_counterMode_AESCrypt: 411 return 1; 412 case vmIntrinsics::_digestBase_implCompressMB: 413 return 3; 414 default: 415 return 0; 416 } 417 } 418 419 bool vmIntrinsics::is_disabled_by_flags(const methodHandle& method) { 420 vmIntrinsics::ID id = method->intrinsic_id(); 421 assert(id != vmIntrinsics::_none, "must be a VM intrinsic"); 422 423 // -XX:-InlineNatives disables nearly all intrinsics except the ones listed in 424 // the following switch statement. 425 if (!InlineNatives) { 426 switch (id) { 427 case vmIntrinsics::_indexOfL: 428 case vmIntrinsics::_indexOfU: 429 case vmIntrinsics::_indexOfUL: 430 case vmIntrinsics::_indexOfIL: 431 case vmIntrinsics::_indexOfIU: 432 case vmIntrinsics::_indexOfIUL: 433 case vmIntrinsics::_indexOfU_char: 434 case vmIntrinsics::_compareToL: 435 case vmIntrinsics::_compareToU: 436 case vmIntrinsics::_compareToLU: 437 case vmIntrinsics::_compareToUL: 438 case vmIntrinsics::_equalsL: 439 case vmIntrinsics::_equalsU: 440 case vmIntrinsics::_equalsC: | 399 break; 400 default: 401 return false; 402 } 403 } 404 405 int vmIntrinsics::predicates_needed(vmIntrinsics::ID id) { 406 assert(id != vmIntrinsics::_none, "must be a VM intrinsic"); 407 switch (id) { 408 case vmIntrinsics::_cipherBlockChaining_encryptAESCrypt: 409 case vmIntrinsics::_cipherBlockChaining_decryptAESCrypt: 410 case vmIntrinsics::_counterMode_AESCrypt: 411 return 1; 412 case vmIntrinsics::_digestBase_implCompressMB: 413 return 3; 414 default: 415 return 0; 416 } 417 } 418 419 bool vmIntrinsics::is_intrinsic_available(vmIntrinsics::ID id) { 420 return !vmIntrinsics::is_intrinsic_disabled(id) && 421 !vmIntrinsics::is_disabled_by_flags(id); 422 } 423 424 bool vmIntrinsics::is_intrinsic_disabled(vmIntrinsics::ID id) { 425 assert(id != vmIntrinsics::_none, "must be a VM intrinsic"); 426 427 ResourceMark rm; 428 ccstr DisableIntrinsicString = DirectiveSet::canonicalize_disableintrinsic(DisableIntrinsic); 429 // Create a copy of the string that contains the list of disabled 430 // intrinsics. The copy is created because the string 431 // will be modified by strtok(). Then, the list is tokenized with 432 // ',' as a separator. 433 size_t length = strlen(DisableIntrinsicString); 434 char* local_list = NEW_RESOURCE_ARRAY(char, length + 1); 435 strncpy(local_list, DisableIntrinsicString, length + 1); 436 437 char* token = strtok(local_list, ","); 438 while (token != NULL) { 439 if (strcmp(token, vmIntrinsics::name_at(id)) == 0) { 440 return true; 441 } 442 else { 443 token = strtok(NULL, ","); 444 } 445 } 446 447 return false; 448 } 449 450 451 bool vmIntrinsics::is_disabled_by_flags(const methodHandle& method) { 452 vmIntrinsics::ID id = method->intrinsic_id(); 453 assert(id != vmIntrinsics::_none, "must be a VM intrinsic"); 454 return is_disabled_by_flags(id); 455 } 456 457 bool vmIntrinsics::is_disabled_by_flags(vmIntrinsics::ID id) { 458 assert(id != vmIntrinsics::_none, "must be a VM intrinsic"); 459 460 // -XX:-InlineNatives disables nearly all intrinsics except the ones listed in 461 // the following switch statement. 462 if (!InlineNatives) { 463 switch (id) { 464 case vmIntrinsics::_indexOfL: 465 case vmIntrinsics::_indexOfU: 466 case vmIntrinsics::_indexOfUL: 467 case vmIntrinsics::_indexOfIL: 468 case vmIntrinsics::_indexOfIU: 469 case vmIntrinsics::_indexOfIUL: 470 case vmIntrinsics::_indexOfU_char: 471 case vmIntrinsics::_compareToL: 472 case vmIntrinsics::_compareToU: 473 case vmIntrinsics::_compareToLU: 474 case vmIntrinsics::_compareToUL: 475 case vmIntrinsics::_equalsL: 476 case vmIntrinsics::_equalsU: 477 case vmIntrinsics::_equalsC: |