#define SET_FIELD(o,type,f,value) \
*((type *) (((intptr_t) (o)) + ((intptr_t) ((fieldinfo *) (f))->offset))) = (type) (value)
+#define GET_FIELDINFO(f) ((fieldinfo*) (f))
+
#define JNI_SET_FIELD(name, type, intern) \
void _Jv_JNI_Set##name##Field(JNIEnv *env, jobject obj, jfieldID fieldID, \
type value) \
SET_FIELD(LLNI_DIRECT((java_handle_t *) obj), intern, fieldID, value); \
\
LLNI_CRITICAL_END; \
+ \
+ if (GET_FIELDINFO(fieldID)->flags & ACC_VOLATILE) \
+ Atomic::memory_barrier(); \
}
JNI_SET_FIELD(Boolean, jboolean, s4)
SET_FIELD(obj, java_handle_t*, fieldID, LLNI_UNWRAP((java_handle_t*) value));
LLNI_CRITICAL_END;
+
+ if (GET_FIELDINFO(fieldID)->flags & ACC_VOLATILE)
+ Atomic::memory_barrier();
}
return; \
\
f->value->field = value; \
+ \
+ if (f->flags & ACC_VOLATILE) \
+ Atomic::memory_barrier(); \
}
JNI_SET_STATIC_FIELD(Boolean, jboolean, i)
return;
f->value->a = LLNI_UNWRAP((java_handle_t *) value);
+
+ if (f->flags & ACC_VOLATILE)
+ Atomic::memory_barrier();
}
}
JNI_RELEASE_ARRAY_ELEMENTS(Boolean, jboolean, boolean, u1)
-JNI_RELEASE_ARRAY_ELEMENTS(Byte, jbyte, byte, int8_t)
+JNI_RELEASE_ARRAY_ELEMENTS(Byte, jbyte, byte, s1)
JNI_RELEASE_ARRAY_ELEMENTS(Char, jchar, char, u2)
JNI_RELEASE_ARRAY_ELEMENTS(Short, jshort, short, s2)
JNI_RELEASE_ARRAY_ELEMENTS(Int, jint, int, s4)
}
JNI_GET_ARRAY_REGION(Boolean, jboolean, boolean, u1)
-JNI_GET_ARRAY_REGION(Byte, jbyte, byte, int8_t)
+JNI_GET_ARRAY_REGION(Byte, jbyte, byte, s1)
JNI_GET_ARRAY_REGION(Char, jchar, char, u2)
JNI_GET_ARRAY_REGION(Short, jshort, short, s2)
JNI_GET_ARRAY_REGION(Int, jint, int, s4)
}
JNI_SET_ARRAY_REGION(Boolean, jboolean, boolean, u1)
-JNI_SET_ARRAY_REGION(Byte, jbyte, byte, int8_t)
+JNI_SET_ARRAY_REGION(Byte, jbyte, byte, s1)
JNI_SET_ARRAY_REGION(Char, jchar, char, u2)
JNI_SET_ARRAY_REGION(Short, jshort, short, s2)
JNI_SET_ARRAY_REGION(Int, jint, int, s4)
classinfo* c = LLNI_classinfo_unwrap(clazz);
- /* XXX: if implemented this needs a call to jvmti_NativeMethodBind
- if (jvmti) jvmti_NativeMethodBind(method, address, new_address_ptr);
- */
-
NativeMethods& nm = VM::get_current()->get_nativemethods();
nm.register_methods(c->name, methods, nMethods);
- return 0;
+ return 0;
}