155 SET_TRIGFUNC(dpow); |
152 SET_TRIGFUNC(dpow); |
156 |
153 |
157 #undef SET_TRIGFUNC |
154 #undef SET_TRIGFUNC |
158 } |
155 } |
159 |
156 |
160 objArrayHandle CompilerToVM::initialize_intrinsics(TRAPS) { |
157 JVMCIObjectArray CompilerToVM::initialize_intrinsics(JVMCI_TRAPS) { |
161 objArrayHandle vmIntrinsics = oopFactory::new_objArray_handle(VMIntrinsicMethod::klass(), (vmIntrinsics::ID_LIMIT - 1), CHECK_(objArrayHandle())); |
158 JVMCIObjectArray vmIntrinsics = JVMCIENV->new_VMIntrinsicMethod_array(vmIntrinsics::ID_LIMIT - 1, JVMCI_CHECK_NULL); |
162 int index = 0; |
159 int index = 0; |
163 // The intrinsics for a class are usually adjacent to each other. |
|
164 // When they are, the string for the class name can be reused. |
|
165 vmSymbols::SID kls_sid = vmSymbols::NO_SID; |
160 vmSymbols::SID kls_sid = vmSymbols::NO_SID; |
166 Handle kls_str; |
161 JVMCIObject kls_str; |
167 #define VM_SYMBOL_TO_STRING(s) \ |
162 #define VM_SYMBOL_TO_STRING(s) \ |
168 java_lang_String::create_from_symbol(vmSymbols::symbol_at(vmSymbols::VM_SYMBOL_ENUM_NAME(s)), CHECK_(objArrayHandle())) |
163 JVMCIENV->create_string(vmSymbols::symbol_at(vmSymbols::VM_SYMBOL_ENUM_NAME(s)), JVMCI_CHECK_NULL) |
169 #define VM_INTRINSIC_INFO(id, kls, name, sig, ignore_fcode) { \ |
164 #define VM_INTRINSIC_INFO(id, kls, name, sig, ignore_fcode) { \ |
170 instanceHandle vmIntrinsicMethod = InstanceKlass::cast(VMIntrinsicMethod::klass())->allocate_instance_handle(CHECK_(objArrayHandle())); \ |
|
171 vmSymbols::SID sid = vmSymbols::VM_SYMBOL_ENUM_NAME(kls); \ |
165 vmSymbols::SID sid = vmSymbols::VM_SYMBOL_ENUM_NAME(kls); \ |
172 if (kls_sid != sid) { \ |
166 if (kls_sid != sid) { \ |
173 kls_str = VM_SYMBOL_TO_STRING(kls); \ |
167 kls_str = VM_SYMBOL_TO_STRING(kls); \ |
174 kls_sid = sid; \ |
168 kls_sid = sid; \ |
175 } \ |
169 } \ |
176 Handle name_str = VM_SYMBOL_TO_STRING(name); \ |
170 JVMCIObject name_str = VM_SYMBOL_TO_STRING(name); \ |
177 Handle sig_str = VM_SYMBOL_TO_STRING(sig); \ |
171 JVMCIObject sig_str = VM_SYMBOL_TO_STRING(sig); \ |
178 VMIntrinsicMethod::set_declaringClass(vmIntrinsicMethod, kls_str()); \ |
172 JVMCIObject vmIntrinsicMethod = JVMCIENV->new_VMIntrinsicMethod(kls_str, name_str, sig_str, (jint) vmIntrinsics::id, JVMCI_CHECK_NULL); \ |
179 VMIntrinsicMethod::set_name(vmIntrinsicMethod, name_str()); \ |
173 JVMCIENV->put_object_at(vmIntrinsics, index++, vmIntrinsicMethod); \ |
180 VMIntrinsicMethod::set_descriptor(vmIntrinsicMethod, sig_str()); \ |
|
181 VMIntrinsicMethod::set_id(vmIntrinsicMethod, vmIntrinsics::id); \ |
|
182 vmIntrinsics->obj_at_put(index++, vmIntrinsicMethod()); \ |
|
183 } |
174 } |
184 |
175 |
185 VM_INTRINSICS_DO(VM_INTRINSIC_INFO, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE) |
176 VM_INTRINSICS_DO(VM_INTRINSIC_INFO, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_SYMBOL_IGNORE, VM_ALIAS_IGNORE) |
186 #undef VM_SYMBOL_TO_STRING |
177 #undef VM_SYMBOL_TO_STRING |
187 #undef VM_INTRINSIC_INFO |
178 #undef VM_INTRINSIC_INFO |
188 assert(index == vmIntrinsics::ID_LIMIT - 1, "must be"); |
179 assert(index == vmIntrinsics::ID_LIMIT - 1, "must be"); |
189 |
180 |
190 return vmIntrinsics; |
181 return vmIntrinsics; |
191 } |
182 } |
192 |
183 |
193 /** |
|
194 * The set of VM flags known to be used. |
|
195 */ |
|
196 #define PREDEFINED_CONFIG_FLAGS(do_bool_flag, do_intx_flag, do_uintx_flag) \ |
184 #define PREDEFINED_CONFIG_FLAGS(do_bool_flag, do_intx_flag, do_uintx_flag) \ |
197 do_intx_flag(AllocateInstancePrefetchLines) \ |
185 do_intx_flag(AllocateInstancePrefetchLines) \ |
198 do_intx_flag(AllocatePrefetchDistance) \ |
186 do_intx_flag(AllocatePrefetchDistance) \ |
199 do_intx_flag(AllocatePrefetchInstr) \ |
187 do_intx_flag(AllocatePrefetchInstr) \ |
200 do_intx_flag(AllocatePrefetchLines) \ |
188 do_intx_flag(AllocatePrefetchLines) \ |
256 COMPILER2_PRESENT(do_bool_flag(UseSquareToLenIntrinsic)) \ |
244 COMPILER2_PRESENT(do_bool_flag(UseSquareToLenIntrinsic)) \ |
257 do_bool_flag(UseStackBanging) \ |
245 do_bool_flag(UseStackBanging) \ |
258 do_bool_flag(UseTLAB) \ |
246 do_bool_flag(UseTLAB) \ |
259 do_bool_flag(VerifyOops) \ |
247 do_bool_flag(VerifyOops) \ |
260 |
248 |
261 #define BOXED_BOOLEAN(name, value) oop name = ((jboolean)(value) ? boxedTrue() : boxedFalse()) |
249 #define BOXED_BOOLEAN(name, value) name = ((jboolean)(value) ? boxedTrue : boxedFalse) |
262 #define BOXED_DOUBLE(name, value) oop name; do { jvalue p; p.d = (jdouble) (value); name = java_lang_boxing_object::create(T_DOUBLE, &p, CHECK_NULL);} while(0) |
250 #define BOXED_DOUBLE(name, value) do { jvalue p; p.d = (jdouble) (value); name = JVMCIENV->create_box(T_DOUBLE, &p, JVMCI_CHECK_NULL);} while(0) |
263 #define BOXED_LONG(name, value) \ |
251 #define BOXED_LONG(name, value) \ |
264 oop name; \ |
|
265 do { \ |
252 do { \ |
266 jvalue p; p.j = (jlong) (value); \ |
253 jvalue p; p.j = (jlong) (value); \ |
267 Handle* e = longs.get(p.j); \ |
254 JVMCIObject* e = longs.get(p.j); \ |
268 if (e == NULL) { \ |
255 if (e == NULL) { \ |
269 oop o = java_lang_boxing_object::create(T_LONG, &p, CHECK_NULL); \ |
256 JVMCIObject h = JVMCIENV->create_box(T_LONG, &p, JVMCI_CHECK_NULL); \ |
270 Handle h(THREAD, o); \ |
|
271 longs.put(p.j, h); \ |
257 longs.put(p.j, h); \ |
272 name = h(); \ |
258 name = h; \ |
273 } else { \ |
259 } else { \ |
274 name = (*e)(); \ |
260 name = (*e); \ |
275 } \ |
261 } \ |
276 } while (0) |
262 } while (0) |
277 |
263 |
278 #define CSTRING_TO_JSTRING(name, value) \ |
264 #define CSTRING_TO_JSTRING(name, value) \ |
279 Handle name; \ |
265 JVMCIObject name; \ |
280 do { \ |
266 do { \ |
281 if (value != NULL) { \ |
267 if (value != NULL) { \ |
282 Handle* e = strings.get(value); \ |
268 JVMCIObject* e = strings.get(value); \ |
283 if (e == NULL) { \ |
269 if (e == NULL) { \ |
284 Handle h = java_lang_String::create_from_str(value, CHECK_NULL); \ |
270 JVMCIObject h = JVMCIENV->create_string(value, JVMCI_CHECK_NULL); \ |
285 strings.put(value, h); \ |
271 strings.put(value, h); \ |
286 name = h; \ |
272 name = h; \ |
287 } else { \ |
273 } else { \ |
288 name = (*e); \ |
274 name = (*e); \ |
289 } \ |
275 } \ |
290 } \ |
276 } \ |
291 } while (0) |
277 } while (0) |
292 |
278 |
293 jobjectArray readConfiguration0(JNIEnv *env, TRAPS) { |
279 jobjectArray readConfiguration0(JNIEnv *env, JVMCI_TRAPS) { |
294 ResourceMark rm; |
280 Thread* THREAD = Thread::current(); |
295 HandleMark hm; |
281 ResourceHashtable<jlong, JVMCIObject> longs; |
296 |
282 ResourceHashtable<const char*, JVMCIObject, &CompilerToVM::cstring_hash, &CompilerToVM::cstring_equals> strings; |
297 // Used to canonicalize Long and String values. |
|
298 ResourceHashtable<jlong, Handle> longs; |
|
299 ResourceHashtable<const char*, Handle, &CompilerToVM::cstring_hash, &CompilerToVM::cstring_equals> strings; |
|
300 |
283 |
301 jvalue prim; |
284 jvalue prim; |
302 prim.z = true; oop boxedTrueOop = java_lang_boxing_object::create(T_BOOLEAN, &prim, CHECK_NULL); |
285 prim.z = true; JVMCIObject boxedTrue = JVMCIENV->create_box(T_BOOLEAN, &prim, JVMCI_CHECK_NULL); |
303 Handle boxedTrue(THREAD, boxedTrueOop); |
286 prim.z = false; JVMCIObject boxedFalse = JVMCIENV->create_box(T_BOOLEAN, &prim, JVMCI_CHECK_NULL); |
304 prim.z = false; oop boxedFalseOop = java_lang_boxing_object::create(T_BOOLEAN, &prim, CHECK_NULL); |
287 |
305 Handle boxedFalse(THREAD, boxedFalseOop); |
288 CompilerToVM::Data::initialize(JVMCI_CHECK_NULL); |
306 |
289 |
307 CompilerToVM::Data::initialize(CHECK_NULL); |
290 JVMCIENV->VMField_initialize(JVMCI_CHECK_NULL); |
308 |
291 JVMCIENV->VMFlag_initialize(JVMCI_CHECK_NULL); |
309 VMField::klass()->initialize(CHECK_NULL); |
292 JVMCIENV->VMIntrinsicMethod_initialize(JVMCI_CHECK_NULL); |
310 VMFlag::klass()->initialize(CHECK_NULL); |
|
311 VMIntrinsicMethod::klass()->initialize(CHECK_NULL); |
|
312 |
293 |
313 int len = JVMCIVMStructs::localHotSpotVMStructs_count(); |
294 int len = JVMCIVMStructs::localHotSpotVMStructs_count(); |
314 objArrayHandle vmFields = oopFactory::new_objArray_handle(VMField::klass(), len, CHECK_NULL); |
295 JVMCIObjectArray vmFields = JVMCIENV->new_VMField_array(len, JVMCI_CHECK_NULL); |
315 for (int i = 0; i < len ; i++) { |
296 for (int i = 0; i < len ; i++) { |
316 VMStructEntry vmField = JVMCIVMStructs::localHotSpotVMStructs[i]; |
297 VMStructEntry vmField = JVMCIVMStructs::localHotSpotVMStructs[i]; |
317 instanceHandle vmFieldObj = InstanceKlass::cast(VMField::klass())->allocate_instance_handle(CHECK_NULL); |
|
318 size_t name_buf_len = strlen(vmField.typeName) + strlen(vmField.fieldName) + 2 /* "::" */; |
298 size_t name_buf_len = strlen(vmField.typeName) + strlen(vmField.fieldName) + 2 /* "::" */; |
319 char* name_buf = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, name_buf_len + 1); |
299 char* name_buf = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, name_buf_len + 1); |
320 sprintf(name_buf, "%s::%s", vmField.typeName, vmField.fieldName); |
300 sprintf(name_buf, "%s::%s", vmField.typeName, vmField.fieldName); |
321 CSTRING_TO_JSTRING(name, name_buf); |
301 CSTRING_TO_JSTRING(name, name_buf); |
322 CSTRING_TO_JSTRING(type, vmField.typeString); |
302 CSTRING_TO_JSTRING(type, vmField.typeString); |
323 VMField::set_name(vmFieldObj, name()); |
303 JVMCIObject box; |
324 VMField::set_type(vmFieldObj, type()); |
|
325 VMField::set_offset(vmFieldObj, vmField.offset); |
|
326 VMField::set_address(vmFieldObj, (jlong) vmField.address); |
|
327 if (vmField.isStatic && vmField.typeString != NULL) { |
304 if (vmField.isStatic && vmField.typeString != NULL) { |
328 if (strcmp(vmField.typeString, "bool") == 0) { |
305 if (strcmp(vmField.typeString, "bool") == 0) { |
329 BOXED_BOOLEAN(box, *(jbyte*) vmField.address); |
306 BOXED_BOOLEAN(box, *(jbyte*) vmField.address); |
330 VMField::set_value(vmFieldObj, box); |
307 assert(box.is_non_null(), "must have a box"); |
331 } else if (strcmp(vmField.typeString, "int") == 0 || |
308 } else if (strcmp(vmField.typeString, "int") == 0 || |
332 strcmp(vmField.typeString, "jint") == 0) { |
309 strcmp(vmField.typeString, "jint") == 0) { |
333 BOXED_LONG(box, *(jint*) vmField.address); |
310 BOXED_LONG(box, *(jint*) vmField.address); |
334 VMField::set_value(vmFieldObj, box); |
311 assert(box.is_non_null(), "must have a box"); |
335 } else if (strcmp(vmField.typeString, "uint64_t") == 0) { |
312 } else if (strcmp(vmField.typeString, "uint64_t") == 0) { |
336 BOXED_LONG(box, *(uint64_t*) vmField.address); |
313 BOXED_LONG(box, *(uint64_t*) vmField.address); |
337 VMField::set_value(vmFieldObj, box); |
314 assert(box.is_non_null(), "must have a box"); |
338 } else if (strcmp(vmField.typeString, "address") == 0 || |
315 } else if (strcmp(vmField.typeString, "address") == 0 || |
339 strcmp(vmField.typeString, "intptr_t") == 0 || |
316 strcmp(vmField.typeString, "intptr_t") == 0 || |
340 strcmp(vmField.typeString, "uintptr_t") == 0 || |
317 strcmp(vmField.typeString, "uintptr_t") == 0 || |
341 strcmp(vmField.typeString, "OopHandle") == 0 || |
318 strcmp(vmField.typeString, "OopHandle") == 0 || |
342 strcmp(vmField.typeString, "size_t") == 0 || |
319 strcmp(vmField.typeString, "size_t") == 0 || |
343 // All foo* types are addresses. |
320 // All foo* types are addresses. |
344 vmField.typeString[strlen(vmField.typeString) - 1] == '*') { |
321 vmField.typeString[strlen(vmField.typeString) - 1] == '*') { |
345 BOXED_LONG(box, *((address*) vmField.address)); |
322 BOXED_LONG(box, *((address*) vmField.address)); |
346 VMField::set_value(vmFieldObj, box); |
323 assert(box.is_non_null(), "must have a box"); |
347 } else { |
324 } else { |
348 JVMCI_ERROR_NULL("VM field %s has unsupported type %s", name_buf, vmField.typeString); |
325 JVMCI_ERROR_NULL("VM field %s has unsupported type %s", name_buf, vmField.typeString); |
349 } |
326 } |
350 } |
327 } |
351 vmFields->obj_at_put(i, vmFieldObj()); |
328 JVMCIObject vmFieldObj = JVMCIENV->new_VMField(name, type, vmField.offset, (jlong) vmField.address, box, JVMCI_CHECK_NULL); |
|
329 JVMCIENV->put_object_at(vmFields, i, vmFieldObj); |
352 } |
330 } |
353 |
331 |
354 int ints_len = JVMCIVMStructs::localHotSpotVMIntConstants_count(); |
332 int ints_len = JVMCIVMStructs::localHotSpotVMIntConstants_count(); |
355 int longs_len = JVMCIVMStructs::localHotSpotVMLongConstants_count(); |
333 int longs_len = JVMCIVMStructs::localHotSpotVMLongConstants_count(); |
356 len = ints_len + longs_len; |
334 len = ints_len + longs_len; |
357 objArrayHandle vmConstants = oopFactory::new_objArray_handle(SystemDictionary::Object_klass(), len * 2, CHECK_NULL); |
335 JVMCIObjectArray vmConstants = JVMCIENV->new_Object_array(len * 2, JVMCI_CHECK_NULL); |
358 int insert = 0; |
336 int insert = 0; |
359 for (int i = 0; i < ints_len ; i++) { |
337 for (int i = 0; i < ints_len ; i++) { |
360 VMIntConstantEntry c = JVMCIVMStructs::localHotSpotVMIntConstants[i]; |
338 VMIntConstantEntry c = JVMCIVMStructs::localHotSpotVMIntConstants[i]; |
361 CSTRING_TO_JSTRING(name, c.name); |
339 CSTRING_TO_JSTRING(name, c.name); |
|
340 JVMCIObject value; |
362 BOXED_LONG(value, c.value); |
341 BOXED_LONG(value, c.value); |
363 vmConstants->obj_at_put(insert++, name()); |
342 JVMCIENV->put_object_at(vmConstants, insert++, name); |
364 vmConstants->obj_at_put(insert++, value); |
343 JVMCIENV->put_object_at(vmConstants, insert++, value); |
365 } |
344 } |
366 for (int i = 0; i < longs_len ; i++) { |
345 for (int i = 0; i < longs_len ; i++) { |
367 VMLongConstantEntry c = JVMCIVMStructs::localHotSpotVMLongConstants[i]; |
346 VMLongConstantEntry c = JVMCIVMStructs::localHotSpotVMLongConstants[i]; |
368 CSTRING_TO_JSTRING(name, c.name); |
347 CSTRING_TO_JSTRING(name, c.name); |
|
348 JVMCIObject value; |
369 BOXED_LONG(value, c.value); |
349 BOXED_LONG(value, c.value); |
370 vmConstants->obj_at_put(insert++, name()); |
350 JVMCIENV->put_object_at(vmConstants, insert++, name); |
371 vmConstants->obj_at_put(insert++, value); |
351 JVMCIENV->put_object_at(vmConstants, insert++, value); |
372 } |
352 } |
373 assert(insert == len * 2, "must be"); |
353 assert(insert == len * 2, "must be"); |
374 |
354 |
375 len = JVMCIVMStructs::localHotSpotVMAddresses_count(); |
355 len = JVMCIVMStructs::localHotSpotVMAddresses_count(); |
376 objArrayHandle vmAddresses = oopFactory::new_objArray_handle(SystemDictionary::Object_klass(), len * 2, CHECK_NULL); |
356 JVMCIObjectArray vmAddresses = JVMCIENV->new_Object_array(len * 2, JVMCI_CHECK_NULL); |
377 for (int i = 0; i < len ; i++) { |
357 for (int i = 0; i < len ; i++) { |
378 VMAddressEntry a = JVMCIVMStructs::localHotSpotVMAddresses[i]; |
358 VMAddressEntry a = JVMCIVMStructs::localHotSpotVMAddresses[i]; |
379 CSTRING_TO_JSTRING(name, a.name); |
359 CSTRING_TO_JSTRING(name, a.name); |
|
360 JVMCIObject value; |
380 BOXED_LONG(value, a.value); |
361 BOXED_LONG(value, a.value); |
381 vmAddresses->obj_at_put(i * 2, name()); |
362 JVMCIENV->put_object_at(vmAddresses, i * 2, name); |
382 vmAddresses->obj_at_put(i * 2 + 1, value); |
363 JVMCIENV->put_object_at(vmAddresses, i * 2 + 1, value); |
383 } |
364 } |
384 |
365 |
385 #define COUNT_FLAG(ignore) +1 |
366 #define COUNT_FLAG(ignore) +1 |
386 #ifdef ASSERT |
367 #ifdef ASSERT |
387 #define CHECK_FLAG(type, name) { \ |
368 #define CHECK_FLAG(type, name) { \ |
391 } |
372 } |
392 #else |
373 #else |
393 #define CHECK_FLAG(type, name) |
374 #define CHECK_FLAG(type, name) |
394 #endif |
375 #endif |
395 |
376 |
396 #define ADD_FLAG(type, name, convert) { \ |
377 #define ADD_FLAG(type, name, convert) { \ |
397 CHECK_FLAG(type, name) \ |
378 CHECK_FLAG(type, name) \ |
398 instanceHandle vmFlagObj = InstanceKlass::cast(VMFlag::klass())->allocate_instance_handle(CHECK_NULL); \ |
379 CSTRING_TO_JSTRING(fname, #name); \ |
399 CSTRING_TO_JSTRING(fname, #name); \ |
380 CSTRING_TO_JSTRING(ftype, #type); \ |
400 CSTRING_TO_JSTRING(ftype, #type); \ |
381 convert(value, name); \ |
401 VMFlag::set_name(vmFlagObj, fname()); \ |
382 JVMCIObject vmFlagObj = JVMCIENV->new_VMFlag(fname, ftype, value, JVMCI_CHECK_NULL); \ |
402 VMFlag::set_type(vmFlagObj, ftype()); \ |
383 JVMCIENV->put_object_at(vmFlags, i++, vmFlagObj); \ |
403 convert(value, name); \ |
|
404 VMFlag::set_value(vmFlagObj, value); \ |
|
405 vmFlags->obj_at_put(i++, vmFlagObj()); \ |
|
406 } |
384 } |
407 #define ADD_BOOL_FLAG(name) ADD_FLAG(bool, name, BOXED_BOOLEAN) |
385 #define ADD_BOOL_FLAG(name) ADD_FLAG(bool, name, BOXED_BOOLEAN) |
408 #define ADD_INTX_FLAG(name) ADD_FLAG(intx, name, BOXED_LONG) |
386 #define ADD_INTX_FLAG(name) ADD_FLAG(intx, name, BOXED_LONG) |
409 #define ADD_UINTX_FLAG(name) ADD_FLAG(uintx, name, BOXED_LONG) |
387 #define ADD_UINTX_FLAG(name) ADD_FLAG(uintx, name, BOXED_LONG) |
410 |
388 |
411 len = 0 + PREDEFINED_CONFIG_FLAGS(COUNT_FLAG, COUNT_FLAG, COUNT_FLAG); |
389 len = 0 + PREDEFINED_CONFIG_FLAGS(COUNT_FLAG, COUNT_FLAG, COUNT_FLAG); |
412 objArrayHandle vmFlags = oopFactory::new_objArray_handle(VMFlag::klass(), len, CHECK_NULL); |
390 JVMCIObjectArray vmFlags = JVMCIENV->new_VMFlag_array(len, JVMCI_CHECK_NULL); |
413 int i = 0; |
391 int i = 0; |
|
392 JVMCIObject value; |
414 PREDEFINED_CONFIG_FLAGS(ADD_BOOL_FLAG, ADD_INTX_FLAG, ADD_UINTX_FLAG) |
393 PREDEFINED_CONFIG_FLAGS(ADD_BOOL_FLAG, ADD_INTX_FLAG, ADD_UINTX_FLAG) |
415 |
394 |
416 objArrayHandle vmIntrinsics = CompilerToVM::initialize_intrinsics(CHECK_NULL); |
395 JVMCIObjectArray vmIntrinsics = CompilerToVM::initialize_intrinsics(JVMCI_CHECK_NULL); |
417 |
396 |
418 objArrayOop data = oopFactory::new_objArray(SystemDictionary::Object_klass(), 5, CHECK_NULL); |
397 JVMCIObjectArray data = JVMCIENV->new_Object_array(5, JVMCI_CHECK_NULL); |
419 data->obj_at_put(0, vmFields()); |
398 JVMCIENV->put_object_at(data, 0, vmFields); |
420 data->obj_at_put(1, vmConstants()); |
399 JVMCIENV->put_object_at(data, 1, vmConstants); |
421 data->obj_at_put(2, vmAddresses()); |
400 JVMCIENV->put_object_at(data, 2, vmAddresses); |
422 data->obj_at_put(3, vmFlags()); |
401 JVMCIENV->put_object_at(data, 3, vmFlags); |
423 data->obj_at_put(4, vmIntrinsics()); |
402 JVMCIENV->put_object_at(data, 4, vmIntrinsics); |
424 |
403 |
425 return (jobjectArray) JNIHandles::make_local(THREAD, data); |
404 return JVMCIENV->get_jobjectArray(data); |
426 #undef COUNT_FLAG |
|
427 #undef ADD_FLAG |
|
428 #undef ADD_BOOL_FLAG |
|
429 #undef ADD_INTX_FLAG |
|
430 #undef ADD_UINTX_FLAG |
|
431 #undef CHECK_FLAG |
|
432 } |
405 } |