1225 #define DECLARE_GETPUTNATIVE(Byte, B) \ |
1225 #define DECLARE_GETPUTNATIVE(Byte, B) \ |
1226 {CC "get" #Byte, CC "(" ADR ")" #B, FN_PTR(Unsafe_GetNative##Byte)}, \ |
1226 {CC "get" #Byte, CC "(" ADR ")" #B, FN_PTR(Unsafe_GetNative##Byte)}, \ |
1227 {CC "put" #Byte, CC "(" ADR#B ")V", FN_PTR(Unsafe_SetNative##Byte)} |
1227 {CC "put" #Byte, CC "(" ADR#B ")V", FN_PTR(Unsafe_SetNative##Byte)} |
1228 |
1228 |
1229 |
1229 |
1230 |
1230 static JNINativeMethod sun_misc_Unsafe_methods[] = { |
1231 static JNINativeMethod methods[] = { |
|
1232 {CC "getObject", CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObject)}, |
1231 {CC "getObject", CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObject)}, |
1233 {CC "putObject", CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetObject)}, |
1232 {CC "putObject", CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetObject)}, |
1234 {CC "getObjectVolatile",CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObjectVolatile)}, |
1233 {CC "getObjectVolatile",CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObjectVolatile)}, |
1235 {CC "putObjectVolatile",CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetObjectVolatile)}, |
1234 {CC "putObjectVolatile",CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetObjectVolatile)}, |
1236 |
1235 |
1293 {CC "shouldBeInitialized",CC "(" CLS ")Z", FN_PTR(Unsafe_ShouldBeInitialized)}, |
1292 {CC "shouldBeInitialized",CC "(" CLS ")Z", FN_PTR(Unsafe_ShouldBeInitialized)}, |
1294 |
1293 |
1295 {CC "loadFence", CC "()V", FN_PTR(Unsafe_LoadFence)}, |
1294 {CC "loadFence", CC "()V", FN_PTR(Unsafe_LoadFence)}, |
1296 {CC "storeFence", CC "()V", FN_PTR(Unsafe_StoreFence)}, |
1295 {CC "storeFence", CC "()V", FN_PTR(Unsafe_StoreFence)}, |
1297 {CC "fullFence", CC "()V", FN_PTR(Unsafe_FullFence)}, |
1296 {CC "fullFence", CC "()V", FN_PTR(Unsafe_FullFence)}, |
|
1297 }; |
|
1298 |
|
1299 static JNINativeMethod jdk_internal_misc_Unsafe_methods[] = { |
|
1300 {CC "getObject", CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObject)}, |
|
1301 {CC "putObject", CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetObject)}, |
|
1302 {CC "getObjectVolatile",CC "(" OBJ "J)" OBJ "", FN_PTR(Unsafe_GetObjectVolatile)}, |
|
1303 {CC "putObjectVolatile",CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetObjectVolatile)}, |
|
1304 |
|
1305 {CC "getUncompressedObject", CC "(" ADR ")" OBJ, FN_PTR(Unsafe_GetUncompressedObject)}, |
|
1306 {CC "getJavaMirror", CC "(" ADR ")" CLS, FN_PTR(Unsafe_GetJavaMirror)}, |
|
1307 {CC "getKlassPointer", CC "(" OBJ ")" ADR, FN_PTR(Unsafe_GetKlassPointer)}, |
|
1308 |
|
1309 DECLARE_GETPUTOOP(Boolean, Z), |
|
1310 DECLARE_GETPUTOOP(Byte, B), |
|
1311 DECLARE_GETPUTOOP(Short, S), |
|
1312 DECLARE_GETPUTOOP(Char, C), |
|
1313 DECLARE_GETPUTOOP(Int, I), |
|
1314 DECLARE_GETPUTOOP(Long, J), |
|
1315 DECLARE_GETPUTOOP(Float, F), |
|
1316 DECLARE_GETPUTOOP(Double, D), |
|
1317 |
|
1318 DECLARE_GETPUTNATIVE(Byte, B), |
|
1319 DECLARE_GETPUTNATIVE(Short, S), |
|
1320 DECLARE_GETPUTNATIVE(Char, C), |
|
1321 DECLARE_GETPUTNATIVE(Int, I), |
|
1322 DECLARE_GETPUTNATIVE(Long, J), |
|
1323 DECLARE_GETPUTNATIVE(Float, F), |
|
1324 DECLARE_GETPUTNATIVE(Double, D), |
|
1325 |
|
1326 {CC "getAddress", CC "(" ADR ")" ADR, FN_PTR(Unsafe_GetNativeAddress)}, |
|
1327 {CC "putAddress", CC "(" ADR "" ADR ")V", FN_PTR(Unsafe_SetNativeAddress)}, |
|
1328 |
|
1329 {CC "allocateMemory", CC "(J)" ADR, FN_PTR(Unsafe_AllocateMemory)}, |
|
1330 {CC "reallocateMemory", CC "(" ADR "J)" ADR, FN_PTR(Unsafe_ReallocateMemory)}, |
|
1331 {CC "freeMemory", CC "(" ADR ")V", FN_PTR(Unsafe_FreeMemory)}, |
|
1332 |
|
1333 {CC "objectFieldOffset", CC "(" FLD ")J", FN_PTR(Unsafe_ObjectFieldOffset)}, |
|
1334 {CC "staticFieldOffset", CC "(" FLD ")J", FN_PTR(Unsafe_StaticFieldOffset)}, |
|
1335 {CC "staticFieldBase", CC "(" FLD ")" OBJ, FN_PTR(Unsafe_StaticFieldBaseFromField)}, |
|
1336 {CC "ensureClassInitialized",CC "(" CLS ")V", FN_PTR(Unsafe_EnsureClassInitialized)}, |
|
1337 {CC "arrayBaseOffset", CC "(" CLS ")I", FN_PTR(Unsafe_ArrayBaseOffset)}, |
|
1338 {CC "arrayIndexScale", CC "(" CLS ")I", FN_PTR(Unsafe_ArrayIndexScale)}, |
|
1339 {CC "addressSize", CC "()I", FN_PTR(Unsafe_AddressSize)}, |
|
1340 {CC "pageSize", CC "()I", FN_PTR(Unsafe_PageSize)}, |
|
1341 |
|
1342 {CC "defineClass", CC "(" DC_Args ")" CLS, FN_PTR(Unsafe_DefineClass)}, |
|
1343 {CC "allocateInstance", CC "(" CLS ")" OBJ, FN_PTR(Unsafe_AllocateInstance)}, |
|
1344 {CC "throwException", CC "(" THR ")V", FN_PTR(Unsafe_ThrowException)}, |
|
1345 {CC "compareAndSwapObject", CC "(" OBJ "J" OBJ "" OBJ ")Z", FN_PTR(Unsafe_CompareAndSwapObject)}, |
|
1346 {CC "compareAndSwapInt", CC "(" OBJ "J""I""I"")Z", FN_PTR(Unsafe_CompareAndSwapInt)}, |
|
1347 {CC "compareAndSwapLong", CC "(" OBJ "J""J""J"")Z", FN_PTR(Unsafe_CompareAndSwapLong)}, |
|
1348 {CC "putOrderedObject", CC "(" OBJ "J" OBJ ")V", FN_PTR(Unsafe_SetOrderedObject)}, |
|
1349 {CC "putOrderedInt", CC "(" OBJ "JI)V", FN_PTR(Unsafe_SetOrderedInt)}, |
|
1350 {CC "putOrderedLong", CC "(" OBJ "JJ)V", FN_PTR(Unsafe_SetOrderedLong)}, |
|
1351 {CC "park", CC "(ZJ)V", FN_PTR(Unsafe_Park)}, |
|
1352 {CC "unpark", CC "(" OBJ ")V", FN_PTR(Unsafe_Unpark)}, |
|
1353 |
|
1354 {CC "getLoadAverage", CC "([DI)I", FN_PTR(Unsafe_Loadavg)}, |
|
1355 |
|
1356 {CC "copyMemory", CC "(" OBJ "J" OBJ "JJ)V", FN_PTR(Unsafe_CopyMemory)}, |
|
1357 {CC "setMemory", CC "(" OBJ "JJB)V", FN_PTR(Unsafe_SetMemory)}, |
|
1358 |
|
1359 {CC "defineAnonymousClass", CC "(" DAC_Args ")" CLS, FN_PTR(Unsafe_DefineAnonymousClass)}, |
|
1360 |
|
1361 {CC "shouldBeInitialized",CC "(" CLS ")Z", FN_PTR(Unsafe_ShouldBeInitialized)}, |
|
1362 |
|
1363 {CC "loadFence", CC "()V", FN_PTR(Unsafe_LoadFence)}, |
|
1364 {CC "storeFence", CC "()V", FN_PTR(Unsafe_StoreFence)}, |
|
1365 {CC "fullFence", CC "()V", FN_PTR(Unsafe_FullFence)}, |
1298 |
1366 |
1299 {CC "isBigEndian0", CC "()Z", FN_PTR(Unsafe_isBigEndian0)}, |
1367 {CC "isBigEndian0", CC "()Z", FN_PTR(Unsafe_isBigEndian0)}, |
1300 {CC "unalignedAccess0", CC "()Z", FN_PTR(Unsafe_unalignedAccess0)} |
1368 {CC "unalignedAccess0", CC "()Z", FN_PTR(Unsafe_unalignedAccess0)} |
1301 }; |
1369 }; |
1302 |
1370 |
1314 |
1382 |
1315 #undef DECLARE_GETPUTOOP |
1383 #undef DECLARE_GETPUTOOP |
1316 #undef DECLARE_GETPUTNATIVE |
1384 #undef DECLARE_GETPUTNATIVE |
1317 |
1385 |
1318 |
1386 |
1319 // This one function is exported, used by NativeLookup. |
1387 // These two functions are exported, used by NativeLookup. |
1320 // The Unsafe_xxx functions above are called only from the interpreter. |
1388 // The Unsafe_xxx functions above are called only from the interpreter. |
1321 // The optimizer looks at names and signatures to recognize |
1389 // The optimizer looks at names and signatures to recognize |
1322 // individual functions. |
1390 // individual functions. |
1323 |
1391 |
1324 JVM_ENTRY(void, JVM_RegisterUnsafeMethods(JNIEnv *env, jclass unsafeclass)) |
1392 JVM_ENTRY(void, JVM_RegisterSunMiscUnsafeMethods(JNIEnv *env, jclass unsafeclass)) |
1325 UnsafeWrapper("JVM_RegisterUnsafeMethods"); |
1393 UnsafeWrapper("JVM_RegisterSunMiscUnsafeMethods"); |
1326 { |
1394 { |
1327 ThreadToNativeFromVM ttnfv(thread); |
1395 ThreadToNativeFromVM ttnfv(thread); |
1328 |
1396 |
1329 int ok = env->RegisterNatives(unsafeclass, methods, sizeof(methods)/sizeof(JNINativeMethod)); |
1397 int ok = env->RegisterNatives(unsafeclass, sun_misc_Unsafe_methods, sizeof(sun_misc_Unsafe_methods)/sizeof(JNINativeMethod)); |
1330 guarantee(ok == 0, "register unsafe natives"); |
1398 guarantee(ok == 0, "register sun.misc.Unsafe natives"); |
1331 } |
1399 } |
1332 JVM_END |
1400 JVM_END |
|
1401 |
|
1402 JVM_ENTRY(void, JVM_RegisterJDKInternalMiscUnsafeMethods(JNIEnv *env, jclass unsafeclass)) |
|
1403 UnsafeWrapper("JVM_RegisterJDKInternalMiscUnsafeMethods"); |
|
1404 { |
|
1405 ThreadToNativeFromVM ttnfv(thread); |
|
1406 |
|
1407 int ok = env->RegisterNatives(unsafeclass, jdk_internal_misc_Unsafe_methods, sizeof(jdk_internal_misc_Unsafe_methods)/sizeof(JNINativeMethod)); |
|
1408 guarantee(ok == 0, "register jdk.internal.misc.Unsafe natives"); |
|
1409 } |
|
1410 JVM_END |