src/share/vm/opto/library_call.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
6823354 Cdiff src/share/vm/opto/library_call.cpp
src/share/vm/opto/library_call.cpp
Print this page
rev 722 : [mq]: 6823354
*** 220,229 ****
--- 220,231 ----
Node* dest, Node* dest_offset,
Node* copy_length);
bool inline_unsafe_CAS(BasicType type);
bool inline_unsafe_ordered_store(BasicType type);
bool inline_fp_conversions(vmIntrinsics::ID id);
+ bool inline_numberOfLeadingZeros(vmIntrinsics::ID id);
+ bool inline_numberOfTrailingZeros(vmIntrinsics::ID id);
bool inline_bitCount(vmIntrinsics::ID id);
bool inline_reverseBytes(vmIntrinsics::ID id);
};
*** 628,637 ****
--- 630,647 ----
case vmIntrinsics::_doubleToRawLongBits:
case vmIntrinsics::_doubleToLongBits:
case vmIntrinsics::_longBitsToDouble:
return inline_fp_conversions(intrinsic_id());
+ case vmIntrinsics::_numberOfLeadingZeros_i:
+ case vmIntrinsics::_numberOfLeadingZeros_l:
+ return inline_numberOfLeadingZeros(intrinsic_id());
+
+ case vmIntrinsics::_numberOfTrailingZeros_i:
+ case vmIntrinsics::_numberOfTrailingZeros_l:
+ return inline_numberOfTrailingZeros(intrinsic_id());
+
case vmIntrinsics::_bitCount_i:
case vmIntrinsics::_bitCount_l:
return inline_bitCount(intrinsic_id());
case vmIntrinsics::_reverseBytes_i:
*** 1842,1851 ****
--- 1852,1903 ----
} else {
return basic_plus_adr(base, offset);
}
}
+ //-------------------inline_numberOfLeadingZeros_int/long-----------------------
+ // inline int Integer.numberOfLeadingZeros(int)
+ // inline int Long.numberOfLeadingZeros(long)
+ bool LibraryCallKit::inline_numberOfLeadingZeros(vmIntrinsics::ID id) {
+ assert(id == vmIntrinsics::_numberOfLeadingZeros_i || id == vmIntrinsics::_numberOfLeadingZeros_l, "not numberOfLeadingZeros");
+ if (id == vmIntrinsics::_numberOfLeadingZeros_i && !Matcher::match_rule_supported(Op_CountLeadingZerosI)) return false;
+ if (id == vmIntrinsics::_numberOfLeadingZeros_l && !Matcher::match_rule_supported(Op_CountLeadingZerosL)) return false;
+ _sp += arg_size(); // restore stack pointer
+ switch (id) {
+ case vmIntrinsics::_numberOfLeadingZeros_i:
+ push(_gvn.transform(new (C, 2) CountLeadingZerosINode(pop())));
+ break;
+ case vmIntrinsics::_numberOfLeadingZeros_l:
+ push(_gvn.transform(new (C, 2) CountLeadingZerosLNode(pop_pair())));
+ break;
+ default:
+ ShouldNotReachHere();
+ }
+ return true;
+ }
+
+ //-------------------inline_numberOfTrailingZeros_int/long----------------------
+ // inline int Integer.numberOfTrailingZeros(int)
+ // inline int Long.numberOfTrailingZeros(long)
+ bool LibraryCallKit::inline_numberOfTrailingZeros(vmIntrinsics::ID id) {
+ assert(id == vmIntrinsics::_numberOfTrailingZeros_i || id == vmIntrinsics::_numberOfTrailingZeros_l, "not numberOfTrailingZeros");
+ if (id == vmIntrinsics::_numberOfTrailingZeros_i && !Matcher::match_rule_supported(Op_CountTrailingZerosI)) return false;
+ if (id == vmIntrinsics::_numberOfTrailingZeros_l && !Matcher::match_rule_supported(Op_CountTrailingZerosL)) return false;
+ _sp += arg_size(); // restore stack pointer
+ switch (id) {
+ case vmIntrinsics::_numberOfTrailingZeros_i:
+ push(_gvn.transform(new (C, 2) CountTrailingZerosINode(pop())));
+ break;
+ case vmIntrinsics::_numberOfTrailingZeros_l:
+ push(_gvn.transform(new (C, 2) CountTrailingZerosLNode(pop_pair())));
+ break;
+ default:
+ ShouldNotReachHere();
+ }
+ return true;
+ }
+
//----------------------------inline_bitCount_int/long-----------------------
// inline int Integer.bitCount(int)
// inline int Long.bitCount(long)
bool LibraryCallKit::inline_bitCount(vmIntrinsics::ID id) {
assert(id == vmIntrinsics::_bitCount_i || id == vmIntrinsics::_bitCount_l, "not bitCount");
src/share/vm/opto/library_call.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File