6666#include " runtime/deoptimization.hpp"
6767#include " runtime/fieldDescriptor.inline.hpp"
6868#include " runtime/flags/jvmFlag.hpp"
69+ #include " runtime/flags/jvmFlagAccess.hpp"
6970#include " runtime/frame.inline.hpp"
7071#include " runtime/handles.inline.hpp"
7172#include " runtime/handshake.hpp"
@@ -1205,30 +1206,30 @@ WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method))
12051206 }
12061207WB_END
12071208
1208- template <typename T>
1209- static bool GetVMFlag (JavaThread* thread, JNIEnv* env, jstring name, T* value, JVMFlag::Error (*TAt)( const JVMFlag*, T*) ) {
1209+ template <typename T, int type_enum >
1210+ static bool GetVMFlag (JavaThread* thread, JNIEnv* env, jstring name, T* value) {
12101211 if (name == NULL ) {
12111212 return false ;
12121213 }
12131214 ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
12141215 const char * flag_name = env->GetStringUTFChars (name, NULL );
12151216 CHECK_JNI_EXCEPTION_ (env, false );
12161217 const JVMFlag* flag = JVMFlag::find_declared_flag (flag_name);
1217- JVMFlag::Error result = (*TAt) (flag, value);
1218+ JVMFlag::Error result = JVMFlagAccess::get<T, type_enum> (flag, value);
12181219 env->ReleaseStringUTFChars (name, flag_name);
12191220 return (result == JVMFlag::SUCCESS);
12201221}
12211222
1222- template <typename T>
1223- static bool SetVMFlag (JavaThread* thread, JNIEnv* env, jstring name, T* value, JVMFlag::Error (*TAtPut)(JVMFlag* flag, T*, JVMFlag::Flags) ) {
1223+ template <typename T, int type_enum >
1224+ static bool SetVMFlag (JavaThread* thread, JNIEnv* env, jstring name, T* value) {
12241225 if (name == NULL ) {
12251226 return false ;
12261227 }
12271228 ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
12281229 const char * flag_name = env->GetStringUTFChars (name, NULL );
12291230 CHECK_JNI_EXCEPTION_ (env, false );
12301231 JVMFlag* flag = JVMFlag::find_flag (flag_name);
1231- JVMFlag::Error result = (*TAtPut) (flag, value, JVMFlag::INTERNAL);
1232+ JVMFlag::Error result = JVMFlagAccess::set<T, type_enum> (flag, value, JVMFlag::INTERNAL);
12321233 env->ReleaseStringUTFChars (name, flag_name);
12331234 return (result == JVMFlag::SUCCESS);
12341235}
@@ -1284,7 +1285,7 @@ WB_END
12841285
12851286WB_ENTRY (jobject, WB_GetBooleanVMFlag(JNIEnv* env, jobject o, jstring name))
12861287 bool result;
1287- if (GetVMFlag <bool > (thread, env, name, &result, &JVMFlag::boolAt )) {
1288+ if (GetVMFlag <JVM_FLAG_TYPE( bool ) > (thread, env, name, &result)) {
12881289 ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
12891290 return booleanBox (thread, env, result);
12901291 }
@@ -1293,7 +1294,7 @@ WB_END
12931294
12941295WB_ENTRY (jobject, WB_GetIntVMFlag(JNIEnv* env, jobject o, jstring name))
12951296 int result;
1296- if (GetVMFlag <int > (thread, env, name, &result, &JVMFlag::intAt )) {
1297+ if (GetVMFlag <JVM_FLAG_TYPE( int ) > (thread, env, name, &result)) {
12971298 ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
12981299 return longBox (thread, env, result);
12991300 }
@@ -1302,7 +1303,7 @@ WB_END
13021303
13031304WB_ENTRY (jobject, WB_GetUintVMFlag(JNIEnv* env, jobject o, jstring name))
13041305 uint result;
1305- if (GetVMFlag <uint> (thread, env, name, &result, &JVMFlag::uintAt )) {
1306+ if (GetVMFlag <JVM_FLAG_TYPE( uint) > (thread, env, name, &result)) {
13061307 ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
13071308 return longBox (thread, env, result);
13081309 }
@@ -1311,7 +1312,7 @@ WB_END
13111312
13121313WB_ENTRY (jobject, WB_GetIntxVMFlag(JNIEnv* env, jobject o, jstring name))
13131314 intx result;
1314- if (GetVMFlag <intx> (thread, env, name, &result, &JVMFlag::intxAt )) {
1315+ if (GetVMFlag <JVM_FLAG_TYPE( intx) > (thread, env, name, &result)) {
13151316 ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
13161317 return longBox (thread, env, result);
13171318 }
@@ -1320,7 +1321,7 @@ WB_END
13201321
13211322WB_ENTRY (jobject, WB_GetUintxVMFlag(JNIEnv* env, jobject o, jstring name))
13221323 uintx result;
1323- if (GetVMFlag <uintx> (thread, env, name, &result, &JVMFlag::uintxAt )) {
1324+ if (GetVMFlag <JVM_FLAG_TYPE( uintx) > (thread, env, name, &result)) {
13241325 ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
13251326 return longBox (thread, env, result);
13261327 }
@@ -1329,7 +1330,7 @@ WB_END
13291330
13301331WB_ENTRY (jobject, WB_GetUint64VMFlag(JNIEnv* env, jobject o, jstring name))
13311332 uint64_t result;
1332- if (GetVMFlag <uint64_t > (thread, env, name, &result, &JVMFlag::uint64_tAt )) {
1333+ if (GetVMFlag <JVM_FLAG_TYPE( uint64_t ) > (thread, env, name, &result)) {
13331334 ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
13341335 return longBox (thread, env, result);
13351336 }
@@ -1338,7 +1339,7 @@ WB_END
13381339
13391340WB_ENTRY (jobject, WB_GetSizeTVMFlag(JNIEnv* env, jobject o, jstring name))
13401341 size_t result;
1341- if (GetVMFlag <size_t > (thread, env, name, &result, &JVMFlag::size_tAt )) {
1342+ if (GetVMFlag <JVM_FLAG_TYPE( size_t ) > (thread, env, name, &result)) {
13421343 ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
13431344 return longBox (thread, env, result);
13441345 }
@@ -1347,7 +1348,7 @@ WB_END
13471348
13481349WB_ENTRY (jobject, WB_GetDoubleVMFlag(JNIEnv* env, jobject o, jstring name))
13491350 double result;
1350- if (GetVMFlag <double > (thread, env, name, &result, &JVMFlag::doubleAt )) {
1351+ if (GetVMFlag <JVM_FLAG_TYPE( double ) > (thread, env, name, &result)) {
13511352 ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
13521353 return doubleBox (thread, env, result);
13531354 }
@@ -1356,7 +1357,7 @@ WB_END
13561357
13571358WB_ENTRY (jstring, WB_GetStringVMFlag(JNIEnv* env, jobject o, jstring name))
13581359 ccstr ccstrResult;
1359- if (GetVMFlag <ccstr> (thread, env, name, &ccstrResult, &JVMFlag::ccstrAt )) {
1360+ if (GetVMFlag <JVM_FLAG_TYPE( ccstr) > (thread, env, name, &ccstrResult)) {
13601361 ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
13611362 jstring result = env->NewStringUTF (ccstrResult);
13621363 CHECK_JNI_EXCEPTION_ (env, NULL );
@@ -1367,42 +1368,42 @@ WB_END
13671368
13681369WB_ENTRY (void , WB_SetBooleanVMFlag(JNIEnv* env, jobject o, jstring name, jboolean value))
13691370 bool result = value == JNI_TRUE ? true : false;
1370- SetVMFlag <bool > (thread, env, name, &result, &JVMFlag::boolAtPut );
1371+ SetVMFlag <JVM_FLAG_TYPE( bool ) > (thread, env, name, &result);
13711372WB_END
13721373
13731374WB_ENTRY (void , WB_SetIntVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
13741375 int result = value;
1375- SetVMFlag <int > (thread, env, name, &result, &JVMFlag::intAtPut );
1376+ SetVMFlag <JVM_FLAG_TYPE( int ) > (thread, env, name, &result);
13761377WB_END
13771378
13781379WB_ENTRY (void , WB_SetUintVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
13791380 uint result = value;
1380- SetVMFlag <uint> (thread, env, name, &result, &JVMFlag::uintAtPut );
1381+ SetVMFlag <JVM_FLAG_TYPE( uint) > (thread, env, name, &result);
13811382WB_END
13821383
13831384WB_ENTRY (void , WB_SetIntxVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
13841385 intx result = value;
1385- SetVMFlag <intx> (thread, env, name, &result, &JVMFlag::intxAtPut );
1386+ SetVMFlag <JVM_FLAG_TYPE( intx) > (thread, env, name, &result);
13861387WB_END
13871388
13881389WB_ENTRY (void , WB_SetUintxVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
13891390 uintx result = value;
1390- SetVMFlag <uintx> (thread, env, name, &result, &JVMFlag::uintxAtPut );
1391+ SetVMFlag <JVM_FLAG_TYPE( uintx) > (thread, env, name, &result);
13911392WB_END
13921393
13931394WB_ENTRY (void , WB_SetUint64VMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
13941395 uint64_t result = value;
1395- SetVMFlag <uint64_t > (thread, env, name, &result, &JVMFlag::uint64_tAtPut );
1396+ SetVMFlag <JVM_FLAG_TYPE( uint64_t ) > (thread, env, name, &result);
13961397WB_END
13971398
13981399WB_ENTRY (void , WB_SetSizeTVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
13991400 size_t result = value;
1400- SetVMFlag <size_t > (thread, env, name, &result, &JVMFlag::size_tAtPut );
1401+ SetVMFlag <JVM_FLAG_TYPE( size_t ) > (thread, env, name, &result);
14011402WB_END
14021403
14031404WB_ENTRY (void , WB_SetDoubleVMFlag(JNIEnv* env, jobject o, jstring name, jdouble value))
14041405 double result = value;
1405- SetVMFlag <double > (thread, env, name, &result, &JVMFlag::doubleAtPut );
1406+ SetVMFlag <JVM_FLAG_TYPE( double ) > (thread, env, name, &result);
14061407WB_END
14071408
14081409WB_ENTRY (void , WB_SetStringVMFlag(JNIEnv* env, jobject o, jstring name, jstring value))
@@ -1419,7 +1420,7 @@ WB_ENTRY(void, WB_SetStringVMFlag(JNIEnv* env, jobject o, jstring name, jstring
14191420 bool needFree;
14201421 {
14211422 ThreadInVMfromNative ttvfn (thread); // back to VM
1422- needFree = SetVMFlag <ccstr> (thread, env, name, &ccstrResult, &JVMFlag::ccstrAtPut );
1423+ needFree = SetVMFlag <JVM_FLAG_TYPE ( ccstr) > (thread, env, name, &ccstrResult);
14231424 }
14241425 if (value != NULL ) {
14251426 env->ReleaseStringUTFChars (value, ccstrValue);
0 commit comments