src/cpu/sparc/vm/interp_masm_sparc.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 7071653 Sdiff src/cpu/sparc/vm

src/cpu/sparc/vm/interp_masm_sparc.cpp

Print this page




 741     ldub(Lbcp, bcp_offset, tmp);
 742   } else {
 743     ShouldNotReachHere();
 744   }
 745 }
 746 
 747 
 748 void InterpreterMacroAssembler::get_cache_and_index_at_bcp(Register cache, Register tmp,
 749                                                            int bcp_offset, size_t index_size) {
 750   assert(bcp_offset > 0, "bcp is still pointing to start of bytecode");
 751   assert_different_registers(cache, tmp);
 752   assert_not_delayed();
 753   get_cache_index_at_bcp(cache, tmp, bcp_offset, index_size);
 754   // convert from field index to ConstantPoolCacheEntry index and from
 755   // word index to byte offset
 756   sll(tmp, exact_log2(in_words(ConstantPoolCacheEntry::size()) * BytesPerWord), tmp);
 757   add(LcpoolCache, tmp, cache);
 758 }
 759 
 760 














 761 void InterpreterMacroAssembler::get_cache_entry_pointer_at_bcp(Register cache, Register tmp,
 762                                                                int bcp_offset, size_t index_size) {
 763   assert(bcp_offset > 0, "bcp is still pointing to start of bytecode");
 764   assert_different_registers(cache, tmp);
 765   assert_not_delayed();
 766   if (index_size == sizeof(u2)) {
 767     get_2_byte_integer_at_bcp(bcp_offset, cache, tmp, Unsigned);
 768   } else {
 769     ShouldNotReachHere();  // other sizes not supported here
 770   }
 771               // convert from field index to ConstantPoolCacheEntry index
 772               // and from word index to byte offset
 773   sll(tmp, exact_log2(in_words(ConstantPoolCacheEntry::size()) * BytesPerWord), tmp);
 774               // skip past the header
 775   add(tmp, in_bytes(constantPoolCacheOopDesc::base_offset()), tmp);
 776               // construct pointer to cache entry
 777   add(LcpoolCache, tmp, cache);
 778 }
 779 
 780 




 741     ldub(Lbcp, bcp_offset, tmp);
 742   } else {
 743     ShouldNotReachHere();
 744   }
 745 }
 746 
 747 
 748 void InterpreterMacroAssembler::get_cache_and_index_at_bcp(Register cache, Register tmp,
 749                                                            int bcp_offset, size_t index_size) {
 750   assert(bcp_offset > 0, "bcp is still pointing to start of bytecode");
 751   assert_different_registers(cache, tmp);
 752   assert_not_delayed();
 753   get_cache_index_at_bcp(cache, tmp, bcp_offset, index_size);
 754   // convert from field index to ConstantPoolCacheEntry index and from
 755   // word index to byte offset
 756   sll(tmp, exact_log2(in_words(ConstantPoolCacheEntry::size()) * BytesPerWord), tmp);
 757   add(LcpoolCache, tmp, cache);
 758 }
 759 
 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 
 775 void InterpreterMacroAssembler::get_cache_entry_pointer_at_bcp(Register cache, Register tmp,
 776                                                                int bcp_offset, size_t index_size) {
 777   assert(bcp_offset > 0, "bcp is still pointing to start of bytecode");
 778   assert_different_registers(cache, tmp);
 779   assert_not_delayed();
 780   if (index_size == sizeof(u2)) {
 781     get_2_byte_integer_at_bcp(bcp_offset, cache, tmp, Unsigned);
 782   } else {
 783     ShouldNotReachHere();  // other sizes not supported here
 784   }
 785               // convert from field index to ConstantPoolCacheEntry index
 786               // and from word index to byte offset
 787   sll(tmp, exact_log2(in_words(ConstantPoolCacheEntry::size()) * BytesPerWord), tmp);
 788               // skip past the header
 789   add(tmp, in_bytes(constantPoolCacheOopDesc::base_offset()), tmp);
 790               // construct pointer to cache entry
 791   add(LcpoolCache, tmp, cache);
 792 }
 793 
 794 


src/cpu/sparc/vm/interp_masm_sparc.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File