[vmkit-commits] [vmkit] r198519 - Implements more unsafe functions

Gael Thomas gael.thomas at lip6.fr
Sat Jan 4 15:13:27 PST 2014


Author: gthomas
Date: Sat Jan  4 17:13:27 2014
New Revision: 198519

URL: http://llvm.org/viewvc/llvm-project?rev=198519&view=rev
Log:
Implements more unsafe functions

Modified:
    vmkit/branches/mcjit/lib/j3/openjdk/j3unsafe.cc

Modified: vmkit/branches/mcjit/lib/j3/openjdk/j3unsafe.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/openjdk/j3unsafe.cc?rev=198519&r1=198518&r2=198519&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/openjdk/j3unsafe.cc (original)
+++ vmkit/branches/mcjit/lib/j3/openjdk/j3unsafe.cc Sat Jan  4 17:13:27 2014
@@ -47,20 +47,48 @@ extern "C" {
 		return fields[slot].offset();
 	}
 
-	JNIEXPORT bool JNICALL Java_sun_misc_Unsafe_compareAndSwapObject(JNIEnv* env, jobject unsafe, 
-																																	 jobject handle, jlong offset, jobject orig, jobject value) {
-		return handle->rawCASObject(offset, orig, value) == orig;
+	JNIEXPORT jlong JNICALL Java_sun_misc_Unsafe_allocateMemory(JNIEnv* env, jobject unsafe, jlong bytes) {
+		return (jlong)(uintptr_t)malloc(bytes); 
 	}
 
-	JNIEXPORT bool JNICALL Java_sun_misc_Unsafe_compareAndSwapInt(JNIEnv* env, jobject unsafe, 
-																																jobject handle, jlong offset, jint orig, jint value) {
-		return handle->rawCASInteger(offset, orig, value) == orig;
+	JNIEXPORT void JNICALL Java_sun_misc_Unsafe_freeMemory(JNIEnv* env, jobject unsafe, jlong addr) {
+		free((void*)(uintptr_t)addr);
 	}
 
-	JNIEXPORT jint JNICALL Java_sun_misc_Unsafe_getIntVolatile(JNIEnv* env, jobject unsafe, 
-																														 jobject handle, jlong offset) {
-		return handle->rawGetInteger(offset);
+#define unsafeGetPut(jtype, id, j3id, sign)															\
+	JNIEXPORT void JNICALL Java_sun_misc_Unsafe_put##id##__J##sign(JNIEnv* env, jobject unsafe, jlong addr, jtype value) { \
+		*(jtype*)(uintptr_t)addr = value;																		\
+	}																																			\
+																																				\
+	JNIEXPORT jtype JNICALL Java_sun_misc_Unsafe_get##id##__J(JNIEnv* env, jobject unsafe, jlong addr) { \
+		return *(jtype*)(uintptr_t)addr;																		\
 	}
+
+#define unsafeCAS(jtype, id, j3id, sign)																\
+	JNIEXPORT bool JNICALL Java_sun_misc_Unsafe_compareAndSwap##id(JNIEnv* env, jobject unsafe, \
+																																 jobject handle, jlong offset, jtype orig, jtype value) { \
+		return handle->rawCAS##j3id(offset, orig, value) == orig;						\
+	}
+
+#define unsafeGetVolatile(jtype, id, j3id, sign)												\
+	JNIEXPORT jtype JNICALL Java_sun_misc_Unsafe_get##id##Volatile(JNIEnv* env, jobject unsafe, jobject handle, jlong offset) { \
+		return handle->rawGet##j3id(offset);																\
+	}
+
+#define defUnsafe(jtype, id, j3id, sign)								\
+	unsafeGetVolatile(jtype, id, j3id, sign)							\
+	unsafeCAS(jtype, id, j3id, sign)											\
+	unsafeGetPut(jtype, id, j3id, sign)
+
+	defUnsafe(jobject,  Object,  Object,   Ljava_lang_Object_2);
+	defUnsafe(jboolean, Boolean, Boolean,  Z);
+	defUnsafe(jbyte,    Byte,    Byte,     B);
+	defUnsafe(jchar,    Char,    Char,     C);
+	defUnsafe(jshort,   Short,   Short,    S);
+	defUnsafe(jint,     Int,     Integer,  I);
+	defUnsafe(jlong,    Long,    Long,     J);
+	defUnsafe(jfloat,   Float,   Float,    F);
+	defUnsafe(jdouble,  Double,  Double,   D);
 }
 
 





More information about the vmkit-commits mailing list