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 |