97
98 public:
99 BiasedLockingNamedCounter(const char *n) :
100 NamedCounter(n, BiasedLockingCounter), _counters() {}
101
102 BiasedLockingCounters* counters() { return &_counters; }
103 };
104
105 typedef const TypeFunc*(*TypeFunc_generator)();
106
107 class OptoRuntime : public AllStatic {
108 friend class Matcher; // allow access to stub names
109
110 private:
111 // define stubs
112 static address generate_stub(ciEnv* ci_env, TypeFunc_generator gen, address C_function, const char *name, int is_fancy_jump, bool pass_tls, bool save_arguments, bool return_pc);
113
114 // References to generated stubs
115 static address _new_instance_Java;
116 static address _new_array_Java;
117 static address _multianewarray2_Java;
118 static address _multianewarray3_Java;
119 static address _multianewarray4_Java;
120 static address _multianewarray5_Java;
121 static address _multianewarrayN_Java;
122 static address _g1_wb_pre_Java;
123 static address _g1_wb_post_Java;
124 static address _vtable_must_compile_Java;
125 static address _complete_monitor_locking_Java;
126 static address _rethrow_Java;
127
128 static address _slow_arraycopy_Java;
129 static address _register_finalizer_Java;
130
131 # ifdef ENABLE_ZAP_DEAD_LOCALS
132 static address _zap_dead_Java_locals_Java;
133 static address _zap_dead_native_locals_Java;
134 # endif
135
136
137 //
138 // Implementation of runtime methods
139 // =================================
140
141 // Allocate storage for a Java instance.
142 static void new_instance_C(klassOopDesc* instance_klass, JavaThread *thread);
143
144 // Allocate storage for a objArray or typeArray
145 static void new_array_C(klassOopDesc* array_klass, int len, JavaThread *thread);
146
147 // Post-slow-path-allocation, pre-initializing-stores step for
148 // implementing ReduceInitialCardMarks
149 static void new_store_pre_barrier(JavaThread* thread);
150
151 // Allocate storage for a multi-dimensional arrays
152 // Note: needs to be fixed for arbitrary number of dimensions
153 static void multianewarray2_C(klassOopDesc* klass, int len1, int len2, JavaThread *thread);
154 static void multianewarray3_C(klassOopDesc* klass, int len1, int len2, int len3, JavaThread *thread);
155 static void multianewarray4_C(klassOopDesc* klass, int len1, int len2, int len3, int len4, JavaThread *thread);
156 static void multianewarray5_C(klassOopDesc* klass, int len1, int len2, int len3, int len4, int len5, JavaThread *thread);
157 static void multianewarrayN_C(klassOopDesc* klass, arrayOopDesc* dims, JavaThread *thread);
158 static void g1_wb_pre_C(oopDesc* orig, JavaThread* thread);
159 static void g1_wb_post_C(void* card_addr, JavaThread* thread);
160
161 public:
162 // Slow-path Locking and Unlocking
163 static void complete_monitor_locking_C(oopDesc* obj, BasicLock* lock, JavaThread* thread);
164 static void complete_monitor_unlocking_C(oopDesc* obj, BasicLock* lock);
165
191
192 public:
193 static int ZapDeadCompiledLocals_count;
194
195 # endif
196
197
198 public:
199
200 static bool is_callee_saved_register(MachRegisterNumbers reg);
201
202 // One time only generate runtime code stubs
203 static void generate(ciEnv* env);
204
205 // Returns the name of a stub
206 static const char* stub_name(address entry);
207
208 // access to runtime stubs entry points for java code
209 static address new_instance_Java() { return _new_instance_Java; }
210 static address new_array_Java() { return _new_array_Java; }
211 static address multianewarray2_Java() { return _multianewarray2_Java; }
212 static address multianewarray3_Java() { return _multianewarray3_Java; }
213 static address multianewarray4_Java() { return _multianewarray4_Java; }
214 static address multianewarray5_Java() { return _multianewarray5_Java; }
215 static address multianewarrayN_Java() { return _multianewarrayN_Java; }
216 static address g1_wb_pre_Java() { return _g1_wb_pre_Java; }
217 static address g1_wb_post_Java() { return _g1_wb_post_Java; }
218 static address vtable_must_compile_stub() { return _vtable_must_compile_Java; }
219 static address complete_monitor_locking_Java() { return _complete_monitor_locking_Java; }
220
221 static address slow_arraycopy_Java() { return _slow_arraycopy_Java; }
222 static address register_finalizer_Java() { return _register_finalizer_Java; }
223
224
225 # ifdef ENABLE_ZAP_DEAD_LOCALS
226 static address zap_dead_locals_stub(bool is_native) { return is_native
227 ? _zap_dead_native_locals_Java
228 : _zap_dead_Java_locals_Java; }
229 static MachNode* node_to_call_zap_dead_locals(Node* n, int block_num, bool is_native);
230 # endif
|
97
98 public:
99 BiasedLockingNamedCounter(const char *n) :
100 NamedCounter(n, BiasedLockingCounter), _counters() {}
101
102 BiasedLockingCounters* counters() { return &_counters; }
103 };
104
105 typedef const TypeFunc*(*TypeFunc_generator)();
106
107 class OptoRuntime : public AllStatic {
108 friend class Matcher; // allow access to stub names
109
110 private:
111 // define stubs
112 static address generate_stub(ciEnv* ci_env, TypeFunc_generator gen, address C_function, const char *name, int is_fancy_jump, bool pass_tls, bool save_arguments, bool return_pc);
113
114 // References to generated stubs
115 static address _new_instance_Java;
116 static address _new_array_Java;
117 static address _new_array_nozero_Java;
118 static address _multianewarray2_Java;
119 static address _multianewarray3_Java;
120 static address _multianewarray4_Java;
121 static address _multianewarray5_Java;
122 static address _multianewarrayN_Java;
123 static address _g1_wb_pre_Java;
124 static address _g1_wb_post_Java;
125 static address _vtable_must_compile_Java;
126 static address _complete_monitor_locking_Java;
127 static address _rethrow_Java;
128
129 static address _slow_arraycopy_Java;
130 static address _register_finalizer_Java;
131
132 # ifdef ENABLE_ZAP_DEAD_LOCALS
133 static address _zap_dead_Java_locals_Java;
134 static address _zap_dead_native_locals_Java;
135 # endif
136
137
138 //
139 // Implementation of runtime methods
140 // =================================
141
142 // Allocate storage for a Java instance.
143 static void new_instance_C(klassOopDesc* instance_klass, JavaThread *thread);
144
145 // Allocate storage for a objArray or typeArray
146 static void new_array_C(klassOopDesc* array_klass, int len, JavaThread *thread);
147 static void new_array_nozero_C(klassOopDesc* array_klass, int len, JavaThread *thread);
148
149 // Post-slow-path-allocation, pre-initializing-stores step for
150 // implementing ReduceInitialCardMarks
151 static void new_store_pre_barrier(JavaThread* thread);
152
153 // Allocate storage for a multi-dimensional arrays
154 // Note: needs to be fixed for arbitrary number of dimensions
155 static void multianewarray2_C(klassOopDesc* klass, int len1, int len2, JavaThread *thread);
156 static void multianewarray3_C(klassOopDesc* klass, int len1, int len2, int len3, JavaThread *thread);
157 static void multianewarray4_C(klassOopDesc* klass, int len1, int len2, int len3, int len4, JavaThread *thread);
158 static void multianewarray5_C(klassOopDesc* klass, int len1, int len2, int len3, int len4, int len5, JavaThread *thread);
159 static void multianewarrayN_C(klassOopDesc* klass, arrayOopDesc* dims, JavaThread *thread);
160 static void g1_wb_pre_C(oopDesc* orig, JavaThread* thread);
161 static void g1_wb_post_C(void* card_addr, JavaThread* thread);
162
163 public:
164 // Slow-path Locking and Unlocking
165 static void complete_monitor_locking_C(oopDesc* obj, BasicLock* lock, JavaThread* thread);
166 static void complete_monitor_unlocking_C(oopDesc* obj, BasicLock* lock);
167
193
194 public:
195 static int ZapDeadCompiledLocals_count;
196
197 # endif
198
199
200 public:
201
202 static bool is_callee_saved_register(MachRegisterNumbers reg);
203
204 // One time only generate runtime code stubs
205 static void generate(ciEnv* env);
206
207 // Returns the name of a stub
208 static const char* stub_name(address entry);
209
210 // access to runtime stubs entry points for java code
211 static address new_instance_Java() { return _new_instance_Java; }
212 static address new_array_Java() { return _new_array_Java; }
213 static address new_array_nozero_Java() { return _new_array_nozero_Java; }
214 static address multianewarray2_Java() { return _multianewarray2_Java; }
215 static address multianewarray3_Java() { return _multianewarray3_Java; }
216 static address multianewarray4_Java() { return _multianewarray4_Java; }
217 static address multianewarray5_Java() { return _multianewarray5_Java; }
218 static address multianewarrayN_Java() { return _multianewarrayN_Java; }
219 static address g1_wb_pre_Java() { return _g1_wb_pre_Java; }
220 static address g1_wb_post_Java() { return _g1_wb_post_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
224 static address slow_arraycopy_Java() { return _slow_arraycopy_Java; }
225 static address register_finalizer_Java() { return _register_finalizer_Java; }
226
227
228 # ifdef ENABLE_ZAP_DEAD_LOCALS
229 static address zap_dead_locals_stub(bool is_native) { return is_native
230 ? _zap_dead_native_locals_Java
231 : _zap_dead_Java_locals_Java; }
232 static MachNode* node_to_call_zap_dead_locals(Node* n, int block_num, bool is_native);
233 # endif
|