< prev index next >

src/share/vm/jvmci/jvmciCompilerToVM.cpp

Print this page
rev 12906 : [mq]: gc_interface


  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 #include "precompiled.hpp"
  25 #include "classfile/javaClasses.inline.hpp"
  26 #include "code/codeCache.hpp"
  27 #include "code/scopeDesc.hpp"
  28 #include "interpreter/linkResolver.hpp"
  29 #include "memory/oopFactory.hpp"
  30 #include "memory/resourceArea.hpp"
  31 #include "oops/generateOopMap.hpp"
  32 #include "oops/fieldStreams.hpp"
  33 #include "oops/oop.inline.hpp"
  34 #include "oops/objArrayOop.inline.hpp"

  35 #include "runtime/fieldDescriptor.hpp"
  36 #include "runtime/javaCalls.hpp"
  37 #include "jvmci/jvmciRuntime.hpp"
  38 #include "compiler/abstractCompiler.hpp"
  39 #include "compiler/compileBroker.hpp"
  40 #include "compiler/compilerOracle.hpp"
  41 #include "compiler/disassembler.hpp"
  42 #include "compiler/oopMap.hpp"
  43 #include "jvmci/jvmciCompilerToVM.hpp"
  44 #include "jvmci/jvmciCompiler.hpp"
  45 #include "jvmci/jvmciEnv.hpp"
  46 #include "jvmci/jvmciJavaClasses.hpp"
  47 #include "jvmci/jvmciCodeInstaller.hpp"
  48 #include "jvmci/vmStructs_jvmci.hpp"
  49 #include "gc/g1/heapRegion.hpp"

  50 #include "runtime/javaCalls.hpp"
  51 #include "runtime/deoptimization.hpp"
  52 #include "runtime/timerTrace.hpp"
  53 #include "runtime/vframe.hpp"
  54 #include "runtime/vframe_hp.hpp"
  55 #include "runtime/vmStructs.hpp"
  56 #include "utilities/resourceHash.hpp"
  57 
  58 
  59 void JNIHandleMark::push_jni_handle_block() {
  60   JavaThread* thread = JavaThread::current();
  61   if (thread != NULL) {
  62     // Allocate a new block for JNI handles.
  63     // Inlined code from jni_PushLocalFrame()
  64     JNIHandleBlock* java_handles = ((JavaThread*)thread)->active_handles();
  65     JNIHandleBlock* compile_handles = JNIHandleBlock::allocate_block(thread);
  66     assert(compile_handles != NULL && java_handles != NULL, "should not be NULL");
  67     compile_handles->set_pop_frame_link(java_handles);
  68     thread->set_active_handles(compile_handles);
  69   }


 186   Universe_narrow_oop_shift = Universe::narrow_oop_shift();
 187   Universe_narrow_klass_base = Universe::narrow_klass_base();
 188   Universe_narrow_klass_shift = Universe::narrow_klass_shift();
 189   Universe_non_oop_bits = Universe::non_oop_word();
 190   Universe_verify_oop_mask = Universe::verify_oop_mask();
 191   Universe_verify_oop_bits = Universe::verify_oop_bits();
 192 
 193   _supports_inline_contig_alloc = Universe::heap()->supports_inline_contig_alloc();
 194   _heap_end_addr = _supports_inline_contig_alloc ? Universe::heap()->end_addr() : (HeapWord**) -1;
 195   _heap_top_addr = _supports_inline_contig_alloc ? Universe::heap()->top_addr() : (HeapWord* volatile*) -1;
 196 
 197   _max_oop_map_stack_offset = (OopMapValue::register_mask - VMRegImpl::stack2reg(0)->value()) * VMRegImpl::stack_slot_size;
 198   int max_oop_map_stack_index = _max_oop_map_stack_offset / VMRegImpl::stack_slot_size;
 199   assert(OopMapValue::legal_vm_reg_name(VMRegImpl::stack2reg(max_oop_map_stack_index)), "should be valid");
 200   assert(!OopMapValue::legal_vm_reg_name(VMRegImpl::stack2reg(max_oop_map_stack_index + 1)), "should be invalid");
 201 
 202   symbol_init = (address) vmSymbols::object_initializer_name();
 203   symbol_clinit = (address) vmSymbols::class_initializer_name();
 204 
 205   BarrierSet* bs = Universe::heap()->barrier_set();
 206   switch (bs->kind()) {
 207   case BarrierSet::CardTableModRef:
 208   case BarrierSet::CardTableForRS:
 209   case BarrierSet::CardTableExtension:
 210   case BarrierSet::G1SATBCT:
 211   case BarrierSet::G1SATBCTLogging: {
 212     jbyte* base = barrier_set_cast<CardTableModRefBS>(bs)->byte_map_base;
 213     assert(base != 0, "unexpected byte_map_base");
 214     cardtable_start_address = base;
 215     cardtable_shift = CardTableModRefBS::card_shift;
 216     break;
 217   }
 218   case BarrierSet::ModRef:
 219     cardtable_start_address = 0;
 220     cardtable_shift = 0;
 221     // No post barriers
 222     break;
 223   default:
 224     JVMCI_ERROR("Unsupported BarrierSet kind %d", bs->kind());
 225     break;
 226   }
 227 
 228   vm_page_size = os::vm_page_size();
 229 
 230 #define SET_TRIGFUNC(name)                                      \
 231   if (StubRoutines::name() != NULL) {                           \
 232     name = StubRoutines::name();                                \
 233   } else {                                                      \
 234     name = CAST_FROM_FN_PTR(address, SharedRuntime::name);      \
 235   }
 236 
 237   SET_TRIGFUNC(dsin);
 238   SET_TRIGFUNC(dcos);
 239   SET_TRIGFUNC(dtan);
 240   SET_TRIGFUNC(dexp);
 241   SET_TRIGFUNC(dlog10);
 242   SET_TRIGFUNC(dlog);
 243   SET_TRIGFUNC(dpow);
 244 
 245 #undef SET_TRIGFUNC




  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  */
  23 
  24 #include "precompiled.hpp"
  25 #include "classfile/javaClasses.inline.hpp"
  26 #include "code/codeCache.hpp"
  27 #include "code/scopeDesc.hpp"
  28 #include "interpreter/linkResolver.hpp"
  29 #include "memory/oopFactory.hpp"
  30 #include "memory/resourceArea.hpp"
  31 #include "oops/generateOopMap.hpp"
  32 #include "oops/fieldStreams.hpp"
  33 #include "oops/oop.inline.hpp"
  34 #include "oops/objArrayOop.inline.hpp"
  35 #include "oops/typeArrayOop.inline.hpp"
  36 #include "runtime/fieldDescriptor.hpp"
  37 #include "runtime/javaCalls.hpp"
  38 #include "jvmci/jvmciRuntime.hpp"
  39 #include "compiler/abstractCompiler.hpp"
  40 #include "compiler/compileBroker.hpp"
  41 #include "compiler/compilerOracle.hpp"
  42 #include "compiler/disassembler.hpp"
  43 #include "compiler/oopMap.hpp"
  44 #include "jvmci/jvmciCompilerToVM.hpp"
  45 #include "jvmci/jvmciCompiler.hpp"
  46 #include "jvmci/jvmciEnv.hpp"
  47 #include "jvmci/jvmciJavaClasses.hpp"
  48 #include "jvmci/jvmciCodeInstaller.hpp"
  49 #include "jvmci/vmStructs_jvmci.hpp"
  50 #include "gc/g1/heapRegion.hpp"
  51 #include "gc/shared/cardTable.hpp"
  52 #include "runtime/javaCalls.hpp"
  53 #include "runtime/deoptimization.hpp"
  54 #include "runtime/timerTrace.hpp"
  55 #include "runtime/vframe.hpp"
  56 #include "runtime/vframe_hp.hpp"
  57 #include "runtime/vmStructs.hpp"
  58 #include "utilities/resourceHash.hpp"
  59 
  60 
  61 void JNIHandleMark::push_jni_handle_block() {
  62   JavaThread* thread = JavaThread::current();
  63   if (thread != NULL) {
  64     // Allocate a new block for JNI handles.
  65     // Inlined code from jni_PushLocalFrame()
  66     JNIHandleBlock* java_handles = ((JavaThread*)thread)->active_handles();
  67     JNIHandleBlock* compile_handles = JNIHandleBlock::allocate_block(thread);
  68     assert(compile_handles != NULL && java_handles != NULL, "should not be NULL");
  69     compile_handles->set_pop_frame_link(java_handles);
  70     thread->set_active_handles(compile_handles);
  71   }


 188   Universe_narrow_oop_shift = Universe::narrow_oop_shift();
 189   Universe_narrow_klass_base = Universe::narrow_klass_base();
 190   Universe_narrow_klass_shift = Universe::narrow_klass_shift();
 191   Universe_non_oop_bits = Universe::non_oop_word();
 192   Universe_verify_oop_mask = Universe::verify_oop_mask();
 193   Universe_verify_oop_bits = Universe::verify_oop_bits();
 194 
 195   _supports_inline_contig_alloc = Universe::heap()->supports_inline_contig_alloc();
 196   _heap_end_addr = _supports_inline_contig_alloc ? Universe::heap()->end_addr() : (HeapWord**) -1;
 197   _heap_top_addr = _supports_inline_contig_alloc ? Universe::heap()->top_addr() : (HeapWord* volatile*) -1;
 198 
 199   _max_oop_map_stack_offset = (OopMapValue::register_mask - VMRegImpl::stack2reg(0)->value()) * VMRegImpl::stack_slot_size;
 200   int max_oop_map_stack_index = _max_oop_map_stack_offset / VMRegImpl::stack_slot_size;
 201   assert(OopMapValue::legal_vm_reg_name(VMRegImpl::stack2reg(max_oop_map_stack_index)), "should be valid");
 202   assert(!OopMapValue::legal_vm_reg_name(VMRegImpl::stack2reg(max_oop_map_stack_index + 1)), "should be invalid");
 203 
 204   symbol_init = (address) vmSymbols::object_initializer_name();
 205   symbol_clinit = (address) vmSymbols::class_initializer_name();
 206 
 207   BarrierSet* bs = Universe::heap()->barrier_set();
 208   if (bs->is_a(BarrierSet::CardTableModRef)) {
 209     jbyte* base = barrier_set_cast<CardTableModRefBS>(bs)->card_table()->byte_map_base();





 210     assert(base != 0, "unexpected byte_map_base");
 211     cardtable_start_address = base;
 212     cardtable_shift = CardTable::card_shift;
 213   } else {
 214     // No card mark barriers

 215     cardtable_start_address = 0;
 216     cardtable_shift = 0;





 217   }
 218 
 219   vm_page_size = os::vm_page_size();
 220 
 221 #define SET_TRIGFUNC(name)                                      \
 222   if (StubRoutines::name() != NULL) {                           \
 223     name = StubRoutines::name();                                \
 224   } else {                                                      \
 225     name = CAST_FROM_FN_PTR(address, SharedRuntime::name);      \
 226   }
 227 
 228   SET_TRIGFUNC(dsin);
 229   SET_TRIGFUNC(dcos);
 230   SET_TRIGFUNC(dtan);
 231   SET_TRIGFUNC(dexp);
 232   SET_TRIGFUNC(dlog10);
 233   SET_TRIGFUNC(dlog);
 234   SET_TRIGFUNC(dpow);
 235 
 236 #undef SET_TRIGFUNC


< prev index next >