src/hotspot/share/opto/library_call.cpp

Print this page

        

*** 322,331 **** --- 322,332 ---- bool inline_mulAdd(); bool inline_montgomeryMultiply(); bool inline_montgomerySquare(); bool inline_vectorizedMismatch(); bool inline_fma(vmIntrinsics::ID id); + bool inline_character_compare(vmIntrinsics::ID id); bool inline_profileBoolean(); bool inline_isCompileConstant(); void clear_upper_avx() { #ifdef X86
*** 865,874 **** --- 866,881 ---- case vmIntrinsics::_fmaD: case vmIntrinsics::_fmaF: return inline_fma(intrinsic_id()); + case vmIntrinsics::_isDigit: + case vmIntrinsics::_isLowerCase: + case vmIntrinsics::_isUpperCase: + case vmIntrinsics::_isWhitespace: + return inline_character_compare(intrinsic_id()); + default: // If you get here, it may be that someone has added a new intrinsic // to the list in vmSymbols.hpp without implementing it here. #ifndef PRODUCT if ((PrintMiscellaneous && (Verbose || WizardMode)) || PrintOpto) {
*** 6553,6562 **** --- 6560,6595 ---- } set_result(result); return true; } + bool LibraryCallKit::inline_character_compare(vmIntrinsics::ID id) { + // argument(0) is receiver + Node* codePoint = argument(1); + Node* n = NULL; + + switch (id) { + case vmIntrinsics::_isDigit : + n = new DigitNode(control(), codePoint); + break; + case vmIntrinsics::_isLowerCase : + n = new LowerCaseNode(control(), codePoint); + break; + case vmIntrinsics::_isUpperCase : + n = new UpperCaseNode(control(), codePoint); + break; + case vmIntrinsics::_isWhitespace : + n = new WhitespaceNode(control(), codePoint); + break; + default: + fatal_unexpected_iid(id); + } + + set_result(_gvn.transform(n)); + return true; + } + bool LibraryCallKit::inline_profileBoolean() { Node* counts = argument(1); const TypeAryPtr* ary = NULL; ciArray* aobj = NULL; if (counts->is_Con()