756 sll(tmp, exact_log2(in_words(ConstantPoolCacheEntry::size()) * BytesPerWord), tmp); |
756 sll(tmp, exact_log2(in_words(ConstantPoolCacheEntry::size()) * BytesPerWord), tmp); |
757 add(LcpoolCache, tmp, cache); |
757 add(LcpoolCache, tmp, cache); |
758 } |
758 } |
759 |
759 |
760 |
760 |
|
761 void InterpreterMacroAssembler::get_cache_and_index_and_bytecode_at_bcp(Register cache, |
|
762 Register temp, |
|
763 Register bytecode, |
|
764 int byte_no, |
|
765 int bcp_offset, |
|
766 size_t index_size) { |
|
767 get_cache_and_index_at_bcp(cache, temp, bcp_offset, index_size); |
|
768 ld_ptr(cache, constantPoolCacheOopDesc::base_offset() + ConstantPoolCacheEntry::indices_offset(), bytecode); |
|
769 const int shift_count = (1 + byte_no) * BitsPerByte; |
|
770 srl( bytecode, shift_count, bytecode); |
|
771 and3(bytecode, 0xFF, bytecode); |
|
772 } |
|
773 |
|
774 |
761 void InterpreterMacroAssembler::get_cache_entry_pointer_at_bcp(Register cache, Register tmp, |
775 void InterpreterMacroAssembler::get_cache_entry_pointer_at_bcp(Register cache, Register tmp, |
762 int bcp_offset, size_t index_size) { |
776 int bcp_offset, size_t index_size) { |
763 assert(bcp_offset > 0, "bcp is still pointing to start of bytecode"); |
777 assert(bcp_offset > 0, "bcp is still pointing to start of bytecode"); |
764 assert_different_registers(cache, tmp); |
778 assert_different_registers(cache, tmp); |
765 assert_not_delayed(); |
779 assert_not_delayed(); |