src/share/vm/opto/library_call.cpp
Print this page
*** 634,643 ****
--- 634,645 ----
case vmIntrinsics::_bitCount_l:
return inline_bitCount(intrinsic_id());
case vmIntrinsics::_reverseBytes_i:
case vmIntrinsics::_reverseBytes_l:
+ case vmIntrinsics::_reverseBytes_s:
+ case vmIntrinsics::_reverseBytes_c:
return inline_reverseBytes((vmIntrinsics::ID) intrinsic_id());
case vmIntrinsics::_get_AtomicLong:
return inline_native_AtomicLong_get();
case vmIntrinsics::_attemptUpdate:
*** 2008,2032 ****
ShouldNotReachHere();
}
return true;
}
! //----------------------------inline_reverseBytes_int/long-------------------
// inline Integer.reverseBytes(int)
// inline Long.reverseBytes(long)
bool LibraryCallKit::inline_reverseBytes(vmIntrinsics::ID id) {
! assert(id == vmIntrinsics::_reverseBytes_i || id == vmIntrinsics::_reverseBytes_l, "not reverse Bytes");
if (id == vmIntrinsics::_reverseBytes_i && !Matcher::has_match_rule(Op_ReverseBytesI)) return false;
if (id == vmIntrinsics::_reverseBytes_l && !Matcher::has_match_rule(Op_ReverseBytesL)) return false;
_sp += arg_size(); // restore stack pointer
switch (id) {
case vmIntrinsics::_reverseBytes_i:
push(_gvn.transform(new (C, 2) ReverseBytesINode(0, pop())));
break;
case vmIntrinsics::_reverseBytes_l:
push_pair(_gvn.transform(new (C, 2) ReverseBytesLNode(0, pop_pair())));
break;
default:
;
}
return true;
}
--- 2010,2046 ----
ShouldNotReachHere();
}
return true;
}
! //----------------------------inline_reverseBytes_int/long/char/short-------------------
// inline Integer.reverseBytes(int)
// inline Long.reverseBytes(long)
+ // inline Character.reverseBytes(char)
+ // inline Short.reverseBytes(short)
bool LibraryCallKit::inline_reverseBytes(vmIntrinsics::ID id) {
! assert(id == vmIntrinsics::_reverseBytes_i || id == vmIntrinsics::_reverseBytes_l ||
! id == vmIntrinsics::_reverseBytes_c || id == vmIntrinsics::_reverseBytes_s,
! "not reverse Bytes");
if (id == vmIntrinsics::_reverseBytes_i && !Matcher::has_match_rule(Op_ReverseBytesI)) return false;
if (id == vmIntrinsics::_reverseBytes_l && !Matcher::has_match_rule(Op_ReverseBytesL)) return false;
+ if (id == vmIntrinsics::_reverseBytes_c && !Matcher::has_match_rule(Op_ReverseBytesUS)) return false;
+ if (id == vmIntrinsics::_reverseBytes_s && !Matcher::has_match_rule(Op_ReverseBytesS)) return false;
_sp += arg_size(); // restore stack pointer
switch (id) {
case vmIntrinsics::_reverseBytes_i:
push(_gvn.transform(new (C, 2) ReverseBytesINode(0, pop())));
break;
case vmIntrinsics::_reverseBytes_l:
push_pair(_gvn.transform(new (C, 2) ReverseBytesLNode(0, pop_pair())));
break;
+ case vmIntrinsics::_reverseBytes_c:
+ push(_gvn.transform(new (C, 2) ReverseBytesUSNode(0, pop())));
+ break;
+ case vmIntrinsics::_reverseBytes_s:
+ push(_gvn.transform(new (C, 2) ReverseBytesSNode(0, pop())));
+ break;
default:
;
}
return true;
}