< prev index next >

src/hotspot/share/opto/library_call.cpp

Print this page

        

*** 306,315 **** --- 306,317 ---- 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,848 **** --- 841,855 ---- 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,5389 **** --- 5387,5429 ---- 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 >