< prev index next >

src/hotspot/share/runtime/stubDeclarations.hpp

Print this page

  75 // C1 stubs are always generated in a generic CodeBlob
  76 
  77 #ifdef COMPILER1
  78 // client macro to operate on c1 stubs
  79 //
  80 // do_blob(name)
  81 #define C1_STUBS_DO(do_blob)                                           \
  82   do_blob(dtrace_object_alloc)                                         \
  83   do_blob(unwind_exception)                                            \
  84   do_blob(forward_exception)                                           \
  85   do_blob(throw_range_check_failed)       /* throws ArrayIndexOutOfBoundsException */ \
  86   do_blob(throw_index_exception)          /* throws IndexOutOfBoundsException */ \
  87   do_blob(throw_div0_exception)                                        \
  88   do_blob(throw_null_pointer_exception)                                \
  89   do_blob(register_finalizer)                                          \
  90   do_blob(new_instance)                                                \
  91   do_blob(fast_new_instance)                                           \
  92   do_blob(fast_new_instance_init_check)                                \
  93   do_blob(new_type_array)                                              \
  94   do_blob(new_object_array)                                            \

  95   do_blob(new_multi_array)                                             \





  96   do_blob(handle_exception_nofpu)         /* optimized version that does not preserve fpu registers */ \
  97   do_blob(handle_exception)                                            \
  98   do_blob(handle_exception_from_callee)                                \
  99   do_blob(throw_array_store_exception)                                 \
 100   do_blob(throw_class_cast_exception)                                  \
 101   do_blob(throw_incompatible_class_change_error)                       \


 102   do_blob(slow_subtype_check)                                          \
 103   do_blob(is_instance_of)                                              \
 104   do_blob(monitorenter)                                                \
 105   do_blob(monitorenter_nofpu)             /* optimized version that does not preserve fpu registers */ \
 106   do_blob(monitorexit)                                                 \
 107   do_blob(monitorexit_nofpu)              /* optimized version that does not preserve fpu registers */ \
 108   do_blob(deoptimize)                                                  \
 109   do_blob(access_field_patching)                                       \
 110   do_blob(load_klass_patching)                                         \
 111   do_blob(load_mirror_patching)                                        \
 112   do_blob(load_appendix_patching)                                      \
 113   do_blob(fpu2long_stub)                                               \
 114   do_blob(counter_overflow)                                            \
 115   do_blob(predicate_failed_trap)                                       \
 116 
 117 #else
 118 #define C1_STUBS_DO(do_blob)
 119 #endif
 120 
 121 // Opto stubs can be stored as entries with just an address or as

 150 // and require access to TLS and the return pc. jvmti stubs always
 151 // employ jump 0, and require no special access
 152 #define C2_STUBS_DO(do_blob, do_stub, do_jvmti_stub)                   \
 153   do_blob(uncommon_trap, UncommonTrapBlob*)                            \
 154   do_blob(exception, ExceptionBlob*)                                   \
 155   do_stub(new_instance, 0, true, false)                                \
 156   do_stub(new_array, 0, true, false)                                   \
 157   do_stub(new_array_nozero, 0, true, false)                            \
 158   do_stub(multianewarray2, 0, true, false)                             \
 159   do_stub(multianewarray3, 0, true, false)                             \
 160   do_stub(multianewarray4, 0, true, false)                             \
 161   do_stub(multianewarray5, 0, true, false)                             \
 162   do_stub(multianewarrayN, 0, true, false)                             \
 163   C2_JVMTI_STUBS_DO(do_jvmti_stub)                                     \
 164   do_stub(complete_monitor_locking, 0, false, false)                   \
 165   do_stub(monitor_notify, 0, false, false)                             \
 166   do_stub(monitor_notifyAll, 0, false, false)                          \
 167   do_stub(rethrow, 2, true, true)                                      \
 168   do_stub(slow_arraycopy, 0, false, false)                             \
 169   do_stub(register_finalizer, 0, false, false)                         \


 170 
 171 #else
 172 #define C2_STUBS_DO(do_blob, do_stub, do_jvmti_stub)
 173 #endif
 174 
 175 // Stub Generator Blobs and Stubs Overview
 176 //
 177 // StubGenerator stubs do not require their own individual blob. They
 178 // are generated in batches into one of four distinct BufferBlobs:
 179 //
 180 // 1) Initial stubs
 181 // 2) Continuation stubs
 182 // 3) Compiler stubs
 183 // 4) Final stubs
 184 //
 185 // Creation of each successive BufferBlobs is staged to ensure that
 186 // specific VM subsystems required by those stubs are suitably
 187 // initialized before generated code attempt to reference data or
 188 // addresses exported by those subsystems. The sequencing of
 189 // initialization must be taken into account when adding a new stub

  75 // C1 stubs are always generated in a generic CodeBlob
  76 
  77 #ifdef COMPILER1
  78 // client macro to operate on c1 stubs
  79 //
  80 // do_blob(name)
  81 #define C1_STUBS_DO(do_blob)                                           \
  82   do_blob(dtrace_object_alloc)                                         \
  83   do_blob(unwind_exception)                                            \
  84   do_blob(forward_exception)                                           \
  85   do_blob(throw_range_check_failed)       /* throws ArrayIndexOutOfBoundsException */ \
  86   do_blob(throw_index_exception)          /* throws IndexOutOfBoundsException */ \
  87   do_blob(throw_div0_exception)                                        \
  88   do_blob(throw_null_pointer_exception)                                \
  89   do_blob(register_finalizer)                                          \
  90   do_blob(new_instance)                                                \
  91   do_blob(fast_new_instance)                                           \
  92   do_blob(fast_new_instance_init_check)                                \
  93   do_blob(new_type_array)                                              \
  94   do_blob(new_object_array)                                            \
  95   do_blob(new_null_free_array)                                         \
  96   do_blob(new_multi_array)                                             \
  97   do_blob(load_flat_array)                                             \
  98   do_blob(store_flat_array)                                            \
  99   do_blob(substitutability_check)                                      \
 100   do_blob(buffer_inline_args)                                          \
 101   do_blob(buffer_inline_args_no_receiver)                              \
 102   do_blob(handle_exception_nofpu)         /* optimized version that does not preserve fpu registers */ \
 103   do_blob(handle_exception)                                            \
 104   do_blob(handle_exception_from_callee)                                \
 105   do_blob(throw_array_store_exception)                                 \
 106   do_blob(throw_class_cast_exception)                                  \
 107   do_blob(throw_incompatible_class_change_error)                       \
 108   do_blob(throw_illegal_monitor_state_exception)                       \
 109   do_blob(throw_identity_exception)                                    \
 110   do_blob(slow_subtype_check)                                          \
 111   do_blob(is_instance_of)                                              \
 112   do_blob(monitorenter)                                                \
 113   do_blob(monitorenter_nofpu)             /* optimized version that does not preserve fpu registers */ \
 114   do_blob(monitorexit)                                                 \
 115   do_blob(monitorexit_nofpu)              /* optimized version that does not preserve fpu registers */ \
 116   do_blob(deoptimize)                                                  \
 117   do_blob(access_field_patching)                                       \
 118   do_blob(load_klass_patching)                                         \
 119   do_blob(load_mirror_patching)                                        \
 120   do_blob(load_appendix_patching)                                      \
 121   do_blob(fpu2long_stub)                                               \
 122   do_blob(counter_overflow)                                            \
 123   do_blob(predicate_failed_trap)                                       \
 124 
 125 #else
 126 #define C1_STUBS_DO(do_blob)
 127 #endif
 128 
 129 // Opto stubs can be stored as entries with just an address or as

 158 // and require access to TLS and the return pc. jvmti stubs always
 159 // employ jump 0, and require no special access
 160 #define C2_STUBS_DO(do_blob, do_stub, do_jvmti_stub)                   \
 161   do_blob(uncommon_trap, UncommonTrapBlob*)                            \
 162   do_blob(exception, ExceptionBlob*)                                   \
 163   do_stub(new_instance, 0, true, false)                                \
 164   do_stub(new_array, 0, true, false)                                   \
 165   do_stub(new_array_nozero, 0, true, false)                            \
 166   do_stub(multianewarray2, 0, true, false)                             \
 167   do_stub(multianewarray3, 0, true, false)                             \
 168   do_stub(multianewarray4, 0, true, false)                             \
 169   do_stub(multianewarray5, 0, true, false)                             \
 170   do_stub(multianewarrayN, 0, true, false)                             \
 171   C2_JVMTI_STUBS_DO(do_jvmti_stub)                                     \
 172   do_stub(complete_monitor_locking, 0, false, false)                   \
 173   do_stub(monitor_notify, 0, false, false)                             \
 174   do_stub(monitor_notifyAll, 0, false, false)                          \
 175   do_stub(rethrow, 2, true, true)                                      \
 176   do_stub(slow_arraycopy, 0, false, false)                             \
 177   do_stub(register_finalizer, 0, false, false)                         \
 178   do_stub(load_unknown_inline, 0, true, false)                         \
 179   do_stub(store_unknown_inline, 0, true, false)                        \
 180 
 181 #else
 182 #define C2_STUBS_DO(do_blob, do_stub, do_jvmti_stub)
 183 #endif
 184 
 185 // Stub Generator Blobs and Stubs Overview
 186 //
 187 // StubGenerator stubs do not require their own individual blob. They
 188 // are generated in batches into one of four distinct BufferBlobs:
 189 //
 190 // 1) Initial stubs
 191 // 2) Continuation stubs
 192 // 3) Compiler stubs
 193 // 4) Final stubs
 194 //
 195 // Creation of each successive BufferBlobs is staged to ensure that
 196 // specific VM subsystems required by those stubs are suitably
 197 // initialized before generated code attempt to reference data or
 198 // addresses exported by those subsystems. The sequencing of
 199 // initialization must be taken into account when adding a new stub
< prev index next >