< prev index next >

src/hotspot/share/opto/runtime.hpp

BarrierSetC2

123 };                                                                                                                                   
124 
125 typedef const TypeFunc*(*TypeFunc_generator)();                                                                                      
126 
127 class OptoRuntime : public AllStatic {                                                                                               
128   friend class Matcher;  // allow access to stub names                                                                               
129 
130  private:                                                                                                                            
131   // define stubs                                                                                                                    
132   static address generate_stub(ciEnv* ci_env, TypeFunc_generator gen, address C_function, const char *name, int is_fancy_jump, bool p
133 
134   // References to generated stubs                                                                                                   
135   static address _new_instance_Java;                                                                                                 
136   static address _new_array_Java;                                                                                                    
137   static address _new_array_nozero_Java;                                                                                             
138   static address _multianewarray2_Java;                                                                                              
139   static address _multianewarray3_Java;                                                                                              
140   static address _multianewarray4_Java;                                                                                              
141   static address _multianewarray5_Java;                                                                                              
142   static address _multianewarrayN_Java;                                                                                              
143   static address _g1_wb_pre_Java;                                                                                                    
144   static address _g1_wb_post_Java;                                                                                                   
145   static address _vtable_must_compile_Java;                                                                                          
146   static address _complete_monitor_locking_Java;                                                                                     
147   static address _rethrow_Java;                                                                                                      
148   static address _monitor_notify_Java;                                                                                               
149   static address _monitor_notifyAll_Java;                                                                                            
150 
151   static address _slow_arraycopy_Java;                                                                                               
152   static address _register_finalizer_Java;                                                                                           
153 
154   //                                                                                                                                 
155   // Implementation of runtime methods                                                                                               
156   // =================================                                                                                               
157 
158   // Allocate storage for a Java instance.                                                                                           
159   static void new_instance_C(Klass* instance_klass, JavaThread *thread);                                                             
160 
161   // Allocate storage for a objArray or typeArray                                                                                    
162   static void new_array_C(Klass* array_klass, int len, JavaThread *thread);                                                          
163   static void new_array_nozero_C(Klass* array_klass, int len, JavaThread *thread);                                                   
164 
165   // Allocate storage for a multi-dimensional arrays                                                                                 
166   // Note: needs to be fixed for arbitrary number of dimensions                                                                      
167   static void multianewarray2_C(Klass* klass, int len1, int len2, JavaThread *thread);                                               
168   static void multianewarray3_C(Klass* klass, int len1, int len2, int len3, JavaThread *thread);                                     
169   static void multianewarray4_C(Klass* klass, int len1, int len2, int len3, int len4, JavaThread *thread);                           
170   static void multianewarray5_C(Klass* klass, int len1, int len2, int len3, int len4, int len5, JavaThread *thread);                 
171   static void multianewarrayN_C(Klass* klass, arrayOopDesc* dims, JavaThread *thread);                                               
172   static void g1_wb_pre_C(oopDesc* orig, JavaThread* thread);                                                                        
173   static void g1_wb_post_C(void* card_addr, JavaThread* thread);                                                                     
174 
175 public:                                                                                                                              
176   // Slow-path Locking and Unlocking                                                                                                 
177   static void complete_monitor_locking_C(oopDesc* obj, BasicLock* lock, JavaThread* thread);                                         
178   static void complete_monitor_unlocking_C(oopDesc* obj, BasicLock* lock, JavaThread* thread);                                       
179 
180   static void monitor_notify_C(oopDesc* obj, JavaThread* thread);                                                                    
181   static void monitor_notifyAll_C(oopDesc* obj, JavaThread* thread);                                                                 
182 
183 private:                                                                                                                             
184 
185   // Implicit exception support                                                                                                      
186   static void throw_null_exception_C(JavaThread* thread);                                                                            
187 
188   // Exception handling                                                                                                              
189   static address handle_exception_C       (JavaThread* thread);                                                                      
190   static address handle_exception_C_helper(JavaThread* thread, nmethod*& nm);                                                        
191   static address rethrow_C                (oopDesc* exception, JavaThread *thread, address return_pc );                              
192   static void deoptimize_caller_frame     (JavaThread *thread);                                                                      

123 };
124 
125 typedef const TypeFunc*(*TypeFunc_generator)();
126 
127 class OptoRuntime : public AllStatic {
128   friend class Matcher;  // allow access to stub names
129 
130  private:
131   // define stubs
132   static address generate_stub(ciEnv* ci_env, TypeFunc_generator gen, address C_function, const char *name, int is_fancy_jump, bool p
133 
134   // References to generated stubs
135   static address _new_instance_Java;
136   static address _new_array_Java;
137   static address _new_array_nozero_Java;
138   static address _multianewarray2_Java;
139   static address _multianewarray3_Java;
140   static address _multianewarray4_Java;
141   static address _multianewarray5_Java;
142   static address _multianewarrayN_Java;


143   static address _vtable_must_compile_Java;
144   static address _complete_monitor_locking_Java;
145   static address _rethrow_Java;
146   static address _monitor_notify_Java;
147   static address _monitor_notifyAll_Java;
148 
149   static address _slow_arraycopy_Java;
150   static address _register_finalizer_Java;
151 
152   //
153   // Implementation of runtime methods
154   // =================================
155 
156   // Allocate storage for a Java instance.
157   static void new_instance_C(Klass* instance_klass, JavaThread *thread);
158 
159   // Allocate storage for a objArray or typeArray
160   static void new_array_C(Klass* array_klass, int len, JavaThread *thread);
161   static void new_array_nozero_C(Klass* array_klass, int len, JavaThread *thread);
162 
163   // Allocate storage for a multi-dimensional arrays
164   // Note: needs to be fixed for arbitrary number of dimensions
165   static void multianewarray2_C(Klass* klass, int len1, int len2, JavaThread *thread);
166   static void multianewarray3_C(Klass* klass, int len1, int len2, int len3, JavaThread *thread);
167   static void multianewarray4_C(Klass* klass, int len1, int len2, int len3, int len4, JavaThread *thread);
168   static void multianewarray5_C(Klass* klass, int len1, int len2, int len3, int len4, int len5, JavaThread *thread);
169   static void multianewarrayN_C(Klass* klass, arrayOopDesc* dims, JavaThread *thread);


170 
171 public:
172   // Slow-path Locking and Unlocking
173   static void complete_monitor_locking_C(oopDesc* obj, BasicLock* lock, JavaThread* thread);
174   static void complete_monitor_unlocking_C(oopDesc* obj, BasicLock* lock, JavaThread* thread);
175 
176   static void monitor_notify_C(oopDesc* obj, JavaThread* thread);
177   static void monitor_notifyAll_C(oopDesc* obj, JavaThread* thread);
178 
179 private:
180 
181   // Implicit exception support
182   static void throw_null_exception_C(JavaThread* thread);
183 
184   // Exception handling
185   static address handle_exception_C       (JavaThread* thread);
186   static address handle_exception_C_helper(JavaThread* thread, nmethod*& nm);
187   static address rethrow_C                (oopDesc* exception, JavaThread *thread, address return_pc );
188   static void deoptimize_caller_frame     (JavaThread *thread);

205 
206   static bool is_callee_saved_register(MachRegisterNumbers reg);                                                                     
207 
208   // One time only generate runtime code stubs. Returns true                                                                         
209   // when runtime stubs have been generated successfully and                                                                         
210   // false otherwise.                                                                                                                
211   static bool generate(ciEnv* env);                                                                                                  
212 
213   // Returns the name of a stub                                                                                                      
214   static const char* stub_name(address entry);                                                                                       
215 
216   // access to runtime stubs entry points for java code                                                                              
217   static address new_instance_Java()                     { return _new_instance_Java; }                                              
218   static address new_array_Java()                        { return _new_array_Java; }                                                 
219   static address new_array_nozero_Java()                 { return _new_array_nozero_Java; }                                          
220   static address multianewarray2_Java()                  { return _multianewarray2_Java; }                                           
221   static address multianewarray3_Java()                  { return _multianewarray3_Java; }                                           
222   static address multianewarray4_Java()                  { return _multianewarray4_Java; }                                           
223   static address multianewarray5_Java()                  { return _multianewarray5_Java; }                                           
224   static address multianewarrayN_Java()                  { return _multianewarrayN_Java; }                                           
225   static address g1_wb_pre_Java()                        { return _g1_wb_pre_Java; }                                                 
226   static address g1_wb_post_Java()                       { return _g1_wb_post_Java; }                                                
227   static address vtable_must_compile_stub()              { return _vtable_must_compile_Java; }                                       
228   static address complete_monitor_locking_Java()         { return _complete_monitor_locking_Java; }                                  
229   static address monitor_notify_Java()                   { return _monitor_notify_Java; }                                            
230   static address monitor_notifyAll_Java()                { return _monitor_notifyAll_Java; }                                         
231 
232   static address slow_arraycopy_Java()                   { return _slow_arraycopy_Java; }                                            
233   static address register_finalizer_Java()               { return _register_finalizer_Java; }                                        
234 
235   static ExceptionBlob*    exception_blob()                      { return _exception_blob; }                                         
236 
237   // Leaf routines helping with method data update                                                                                   
238   static void profile_receiver_type_C(DataLayout* data, oopDesc* receiver);                                                          
239 
240   // Implicit exception support                                                                                                      
241   static void throw_div0_exception_C      (JavaThread* thread);                                                                      
242   static void throw_stack_overflow_error_C(JavaThread* thread);                                                                      
243 
244   // Exception handling                                                                                                              
245   static address rethrow_stub()             { return _rethrow_Java; }                                                                
246 
247 
248   // Type functions                                                                                                                  
249   // ======================================================                                                                          
250 
251   static const TypeFunc* new_instance_Type(); // object allocation (slow case)                                                       
252   static const TypeFunc* new_array_Type ();   // [a]newarray (slow case)                                                             
253   static const TypeFunc* multianewarray_Type(int ndim); // multianewarray                                                            
254   static const TypeFunc* multianewarray2_Type(); // multianewarray                                                                   
255   static const TypeFunc* multianewarray3_Type(); // multianewarray                                                                   
256   static const TypeFunc* multianewarray4_Type(); // multianewarray                                                                   
257   static const TypeFunc* multianewarray5_Type(); // multianewarray                                                                   
258   static const TypeFunc* multianewarrayN_Type(); // multianewarray                                                                   
259   static const TypeFunc* g1_wb_pre_Type();                                                                                           
260   static const TypeFunc* g1_wb_post_Type();                                                                                          
261   static const TypeFunc* complete_monitor_enter_Type();                                                                              
262   static const TypeFunc* complete_monitor_exit_Type();                                                                               
263   static const TypeFunc* monitor_notify_Type();                                                                                      
264   static const TypeFunc* uncommon_trap_Type();                                                                                       
265   static const TypeFunc* athrow_Type();                                                                                              
266   static const TypeFunc* rethrow_Type();                                                                                             
267   static const TypeFunc* Math_D_D_Type();  // sin,cos & friends                                                                      
268   static const TypeFunc* Math_DD_D_Type(); // mod,pow & friends                                                                      
269   static const TypeFunc* modf_Type();                                                                                                
270   static const TypeFunc* l2f_Type();                                                                                                 
271   static const TypeFunc* void_long_Type();                                                                                           
272 
273   static const TypeFunc* flush_windows_Type();                                                                                       
274 
275   // arraycopy routine types                                                                                                         
276   static const TypeFunc* fast_arraycopy_Type(); // bit-blasters                                                                      
277   static const TypeFunc* checkcast_arraycopy_Type();                                                                                 
278   static const TypeFunc* generic_arraycopy_Type();                                                                                   
279   static const TypeFunc* slow_arraycopy_Type();   // the full routine                                                                

201 
202   static bool is_callee_saved_register(MachRegisterNumbers reg);
203 
204   // One time only generate runtime code stubs. Returns true
205   // when runtime stubs have been generated successfully and
206   // false otherwise.
207   static bool generate(ciEnv* env);
208 
209   // Returns the name of a stub
210   static const char* stub_name(address entry);
211 
212   // access to runtime stubs entry points for java code
213   static address new_instance_Java()                     { return _new_instance_Java; }
214   static address new_array_Java()                        { return _new_array_Java; }
215   static address new_array_nozero_Java()                 { return _new_array_nozero_Java; }
216   static address multianewarray2_Java()                  { return _multianewarray2_Java; }
217   static address multianewarray3_Java()                  { return _multianewarray3_Java; }
218   static address multianewarray4_Java()                  { return _multianewarray4_Java; }
219   static address multianewarray5_Java()                  { return _multianewarray5_Java; }
220   static address multianewarrayN_Java()                  { return _multianewarrayN_Java; }


221   static address vtable_must_compile_stub()              { return _vtable_must_compile_Java; }
222   static address complete_monitor_locking_Java()         { return _complete_monitor_locking_Java; }
223   static address monitor_notify_Java()                   { return _monitor_notify_Java; }
224   static address monitor_notifyAll_Java()                { return _monitor_notifyAll_Java; }
225 
226   static address slow_arraycopy_Java()                   { return _slow_arraycopy_Java; }
227   static address register_finalizer_Java()               { return _register_finalizer_Java; }
228 
229   static ExceptionBlob*    exception_blob()                      { return _exception_blob; }
230 
231   // Leaf routines helping with method data update
232   static void profile_receiver_type_C(DataLayout* data, oopDesc* receiver);
233 
234   // Implicit exception support
235   static void throw_div0_exception_C      (JavaThread* thread);
236   static void throw_stack_overflow_error_C(JavaThread* thread);
237 
238   // Exception handling
239   static address rethrow_stub()             { return _rethrow_Java; }
240 
241 
242   // Type functions
243   // ======================================================
244 
245   static const TypeFunc* new_instance_Type(); // object allocation (slow case)
246   static const TypeFunc* new_array_Type ();   // [a]newarray (slow case)
247   static const TypeFunc* multianewarray_Type(int ndim); // multianewarray
248   static const TypeFunc* multianewarray2_Type(); // multianewarray
249   static const TypeFunc* multianewarray3_Type(); // multianewarray
250   static const TypeFunc* multianewarray4_Type(); // multianewarray
251   static const TypeFunc* multianewarray5_Type(); // multianewarray
252   static const TypeFunc* multianewarrayN_Type(); // multianewarray


253   static const TypeFunc* complete_monitor_enter_Type();
254   static const TypeFunc* complete_monitor_exit_Type();
255   static const TypeFunc* monitor_notify_Type();
256   static const TypeFunc* uncommon_trap_Type();
257   static const TypeFunc* athrow_Type();
258   static const TypeFunc* rethrow_Type();
259   static const TypeFunc* Math_D_D_Type();  // sin,cos & friends
260   static const TypeFunc* Math_DD_D_Type(); // mod,pow & friends
261   static const TypeFunc* modf_Type();
262   static const TypeFunc* l2f_Type();
263   static const TypeFunc* void_long_Type();
264 
265   static const TypeFunc* flush_windows_Type();
266 
267   // arraycopy routine types
268   static const TypeFunc* fast_arraycopy_Type(); // bit-blasters
269   static const TypeFunc* checkcast_arraycopy_Type();
270   static const TypeFunc* generic_arraycopy_Type();
271   static const TypeFunc* slow_arraycopy_Type();   // the full routine
< prev index next >