198 oop oop_for_data(address data) const;
199
200 // Query if h/w provides atomic load/store
201 bool is_atomic();
202
203 bool flatten_array();
204
205 bool contains_oops() const { return nonstatic_oop_map_count() > 0; }
206 int nonstatic_oop_count();
207
208 // General store methods
209 //
210 // Normally loads and store methods would be found in *Oops classes, but since values can be
211 // "in-lined" (flattened) into containing oops, these methods reside here in ValueKlass.
212 //
213 // "value_copy_*_to_new_*" assume new memory (i.e. IS_DEST_UNINITIALIZED for write barriers)
214
215 void value_copy_payload_to_new_oop(void* src, oop dst);
216 void value_copy_oop_to_new_oop(oop src, oop dst);
217 void value_copy_oop_to_new_payload(oop src, void* dst);
218
219 void value_copy_oop_to_payload(oop src, void* dst);
220
221 // oop iterate raw value type data pointer (where oop_addr may not be an oop, but backing/array-element)
222 template <typename T, class OopClosureType>
223 inline void oop_iterate_specialized(const address oop_addr, OopClosureType* closure);
224
225 template <typename T, class OopClosureType>
226 inline void oop_iterate_specialized_bounded(const address oop_addr, OopClosureType* closure, void* lo, void* hi);
227
228 // calling convention support
229 void initialize_calling_convention(TRAPS);
230 Array<SigEntry>* extended_sig() const {
231 return *((Array<SigEntry>**)adr_extended_sig());
232 }
233 Array<VMRegPair>* return_regs() const {
234 return *((Array<VMRegPair>**)adr_return_regs());
235 }
236 bool is_scalarizable() const;
237 bool can_be_returned_as_fields() const;
238 void save_oop_fields(const RegisterMap& map, GrowableArray<Handle>& handles) const;
239 void restore_oop_results(RegisterMap& map, GrowableArray<Handle>& handles) const;
240 oop realloc_result(const RegisterMap& reg_map, const GrowableArray<Handle>& handles, TRAPS);
|
198 oop oop_for_data(address data) const;
199
200 // Query if h/w provides atomic load/store
201 bool is_atomic();
202
203 bool flatten_array();
204
205 bool contains_oops() const { return nonstatic_oop_map_count() > 0; }
206 int nonstatic_oop_count();
207
208 // General store methods
209 //
210 // Normally loads and store methods would be found in *Oops classes, but since values can be
211 // "in-lined" (flattened) into containing oops, these methods reside here in ValueKlass.
212 //
213 // "value_copy_*_to_new_*" assume new memory (i.e. IS_DEST_UNINITIALIZED for write barriers)
214
215 void value_copy_payload_to_new_oop(void* src, oop dst);
216 void value_copy_oop_to_new_oop(oop src, oop dst);
217 void value_copy_oop_to_new_payload(oop src, void* dst);
218 void value_copy_oop_to_payload(oop src, void* dst);
219
220 oop read_flattened_field(oop obj, int offset, TRAPS);
221 void write_flattened_field(oop obj, int offset, oop value, TRAPS);
222
223 // oop iterate raw value type data pointer (where oop_addr may not be an oop, but backing/array-element)
224 template <typename T, class OopClosureType>
225 inline void oop_iterate_specialized(const address oop_addr, OopClosureType* closure);
226
227 template <typename T, class OopClosureType>
228 inline void oop_iterate_specialized_bounded(const address oop_addr, OopClosureType* closure, void* lo, void* hi);
229
230 // calling convention support
231 void initialize_calling_convention(TRAPS);
232 Array<SigEntry>* extended_sig() const {
233 return *((Array<SigEntry>**)adr_extended_sig());
234 }
235 Array<VMRegPair>* return_regs() const {
236 return *((Array<VMRegPair>**)adr_return_regs());
237 }
238 bool is_scalarizable() const;
239 bool can_be_returned_as_fields() const;
240 void save_oop_fields(const RegisterMap& map, GrowableArray<Handle>& handles) const;
241 void restore_oop_results(RegisterMap& map, GrowableArray<Handle>& handles) const;
242 oop realloc_result(const RegisterMap& reg_map, const GrowableArray<Handle>& handles, TRAPS);
|