< prev index next >
src/hotspot/share/opto/library_call.cpp
Print this page
@@ -306,10 +306,12 @@
Node* src_start, Node* ofs, Node* limit);
Node* get_state_from_sha_object(Node *sha_object);
Node* get_state_from_sha5_object(Node *sha_object);
Node* inline_digestBase_implCompressMB_predicate(int predicate);
bool inline_encodeISOArray();
+ bool inline_setBit();
+ bool inline_clrBit();
bool inline_updateCRC32();
bool inline_updateBytesCRC32();
bool inline_updateByteBufferCRC32();
Node* get_table_from_crc32c_class(ciInstanceKlass *crc32c_class);
bool inline_updateBytesCRC32C();
@@ -839,10 +841,15 @@
case vmIntrinsics::_encodeISOArray:
case vmIntrinsics::_encodeByteISOArray:
return inline_encodeISOArray();
+ case vmIntrinsics::_setBit:
+ return inline_setBit();
+ case vmIntrinsics::_clrBit:
+ return inline_clrBit();
+
case vmIntrinsics::_updateCRC32:
return inline_updateCRC32();
case vmIntrinsics::_updateBytesCRC32:
return inline_updateBytesCRC32();
case vmIntrinsics::_updateByteBufferCRC32:
@@ -5380,10 +5387,43 @@
result = _gvn.transform(new XorINode(result, M1));
set_result(result);
return true;
}
+bool LibraryCallKit::inline_setBit() {
+ Node* bits = argument(0); // type: oop
+ Node* index = argument(1); // type: int
+
+ Node* hi = _gvn.transform(new RShiftINode(index, intcon(3)));
+ Node* bit = array_element_address(bits, hi, T_BYTE);
+
+ Node* lo = _gvn.transform(new AndINode(index, intcon(7)));
+ Node* value = _gvn.transform(new LShiftINode(intcon(1), lo));
+
+ store_to_memory(control(), bit, value, T_BYTE, TypeAryPtr::BYTES, MemNode::unordered,
+ false, false, false, 1);
+
+ return true;
+}
+
+bool LibraryCallKit::inline_clrBit() {
+ Node* bits = argument(0); // type: oop
+ Node* index = argument(1); // type: int
+
+ Node* hi = _gvn.transform(new RShiftINode(index, intcon(3)));
+ Node* bit = array_element_address(bits, hi, T_BYTE);
+
+ Node* lo = _gvn.transform(new AndINode(index, intcon(7)));
+ Node* value = _gvn.transform(new LShiftINode(intcon(1), lo));
+ value = _gvn.transform(new XorINode(value, intcon(-1)));
+
+ store_to_memory(control(), bit, value, T_BYTE, TypeAryPtr::BYTES, MemNode::unordered,
+ false, false, false, 0);
+
+ return true;
+}
+
/**
* Calculate CRC32 for byte[] array.
* int java.util.zip.CRC32.updateBytes(int crc, byte[] buf, int off, int len)
*/
bool LibraryCallKit::inline_updateBytesCRC32() {
< prev index next >