66
66
#include " runtime/deoptimization.hpp"
67
67
#include " runtime/fieldDescriptor.inline.hpp"
68
68
#include " runtime/flags/jvmFlag.hpp"
69
+ #include " runtime/flags/jvmFlagAccess.hpp"
69
70
#include " runtime/frame.inline.hpp"
70
71
#include " runtime/handles.inline.hpp"
71
72
#include " runtime/handshake.hpp"
@@ -1205,30 +1206,30 @@ WB_ENTRY(void, WB_ClearMethodState(JNIEnv* env, jobject o, jobject method))
1205
1206
}
1206
1207
WB_END
1207
1208
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) {
1210
1211
if (name == NULL ) {
1211
1212
return false ;
1212
1213
}
1213
1214
ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
1214
1215
const char * flag_name = env->GetStringUTFChars (name, NULL );
1215
1216
CHECK_JNI_EXCEPTION_ (env, false );
1216
1217
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);
1218
1219
env->ReleaseStringUTFChars (name, flag_name);
1219
1220
return (result == JVMFlag::SUCCESS);
1220
1221
}
1221
1222
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) {
1224
1225
if (name == NULL ) {
1225
1226
return false ;
1226
1227
}
1227
1228
ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
1228
1229
const char * flag_name = env->GetStringUTFChars (name, NULL );
1229
1230
CHECK_JNI_EXCEPTION_ (env, false );
1230
1231
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);
1232
1233
env->ReleaseStringUTFChars (name, flag_name);
1233
1234
return (result == JVMFlag::SUCCESS);
1234
1235
}
@@ -1284,7 +1285,7 @@ WB_END
1284
1285
1285
1286
WB_ENTRY (jobject, WB_GetBooleanVMFlag(JNIEnv* env, jobject o, jstring name))
1286
1287
bool result;
1287
- if (GetVMFlag <bool > (thread, env, name, &result, &JVMFlag::boolAt )) {
1288
+ if (GetVMFlag <JVM_FLAG_TYPE( bool ) > (thread, env, name, &result)) {
1288
1289
ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
1289
1290
return booleanBox (thread, env, result);
1290
1291
}
@@ -1293,7 +1294,7 @@ WB_END
1293
1294
1294
1295
WB_ENTRY (jobject, WB_GetIntVMFlag(JNIEnv* env, jobject o, jstring name))
1295
1296
int result;
1296
- if (GetVMFlag <int > (thread, env, name, &result, &JVMFlag::intAt )) {
1297
+ if (GetVMFlag <JVM_FLAG_TYPE( int ) > (thread, env, name, &result)) {
1297
1298
ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
1298
1299
return longBox (thread, env, result);
1299
1300
}
@@ -1302,7 +1303,7 @@ WB_END
1302
1303
1303
1304
WB_ENTRY (jobject, WB_GetUintVMFlag(JNIEnv* env, jobject o, jstring name))
1304
1305
uint result;
1305
- if (GetVMFlag <uint > (thread, env, name, &result, &JVMFlag::uintAt )) {
1306
+ if (GetVMFlag <JVM_FLAG_TYPE( uint ) > (thread, env, name, &result)) {
1306
1307
ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
1307
1308
return longBox (thread, env, result);
1308
1309
}
@@ -1311,7 +1312,7 @@ WB_END
1311
1312
1312
1313
WB_ENTRY (jobject, WB_GetIntxVMFlag(JNIEnv* env, jobject o, jstring name))
1313
1314
intx result;
1314
- if (GetVMFlag <intx> (thread, env, name, &result, &JVMFlag::intxAt )) {
1315
+ if (GetVMFlag <JVM_FLAG_TYPE( intx) > (thread, env, name, &result)) {
1315
1316
ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
1316
1317
return longBox (thread, env, result);
1317
1318
}
@@ -1320,7 +1321,7 @@ WB_END
1320
1321
1321
1322
WB_ENTRY (jobject, WB_GetUintxVMFlag(JNIEnv* env, jobject o, jstring name))
1322
1323
uintx result;
1323
- if (GetVMFlag <uintx> (thread, env, name, &result, &JVMFlag::uintxAt )) {
1324
+ if (GetVMFlag <JVM_FLAG_TYPE( uintx) > (thread, env, name, &result)) {
1324
1325
ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
1325
1326
return longBox (thread, env, result);
1326
1327
}
@@ -1329,7 +1330,7 @@ WB_END
1329
1330
1330
1331
WB_ENTRY (jobject, WB_GetUint64VMFlag(JNIEnv* env, jobject o, jstring name))
1331
1332
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)) {
1333
1334
ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
1334
1335
return longBox (thread, env, result);
1335
1336
}
@@ -1338,7 +1339,7 @@ WB_END
1338
1339
1339
1340
WB_ENTRY (jobject, WB_GetSizeTVMFlag(JNIEnv* env, jobject o, jstring name))
1340
1341
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)) {
1342
1343
ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
1343
1344
return longBox (thread, env, result);
1344
1345
}
@@ -1347,7 +1348,7 @@ WB_END
1347
1348
1348
1349
WB_ENTRY (jobject, WB_GetDoubleVMFlag(JNIEnv* env, jobject o, jstring name))
1349
1350
double result;
1350
- if (GetVMFlag <double > (thread, env, name, &result, &JVMFlag::doubleAt )) {
1351
+ if (GetVMFlag <JVM_FLAG_TYPE( double ) > (thread, env, name, &result)) {
1351
1352
ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
1352
1353
return doubleBox (thread, env, result);
1353
1354
}
@@ -1356,7 +1357,7 @@ WB_END
1356
1357
1357
1358
WB_ENTRY (jstring, WB_GetStringVMFlag(JNIEnv* env, jobject o, jstring name))
1358
1359
ccstr ccstrResult;
1359
- if (GetVMFlag <ccstr> (thread, env, name, &ccstrResult, &JVMFlag::ccstrAt )) {
1360
+ if (GetVMFlag <JVM_FLAG_TYPE( ccstr) > (thread, env, name, &ccstrResult)) {
1360
1361
ThreadToNativeFromVM ttnfv (thread); // can't be in VM when we call JNI
1361
1362
jstring result = env->NewStringUTF (ccstrResult);
1362
1363
CHECK_JNI_EXCEPTION_ (env, NULL );
@@ -1367,42 +1368,42 @@ WB_END
1367
1368
1368
1369
WB_ENTRY (void , WB_SetBooleanVMFlag(JNIEnv* env, jobject o, jstring name, jboolean value))
1369
1370
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);
1371
1372
WB_END
1372
1373
1373
1374
WB_ENTRY (void , WB_SetIntVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1374
1375
int result = value;
1375
- SetVMFlag <int > (thread, env, name, &result, &JVMFlag::intAtPut );
1376
+ SetVMFlag <JVM_FLAG_TYPE( int ) > (thread, env, name, &result);
1376
1377
WB_END
1377
1378
1378
1379
WB_ENTRY (void , WB_SetUintVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1379
1380
uint result = value;
1380
- SetVMFlag <uint > (thread, env, name, &result, &JVMFlag::uintAtPut );
1381
+ SetVMFlag <JVM_FLAG_TYPE( uint ) > (thread, env, name, &result);
1381
1382
WB_END
1382
1383
1383
1384
WB_ENTRY (void , WB_SetIntxVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1384
1385
intx result = value;
1385
- SetVMFlag <intx> (thread, env, name, &result, &JVMFlag::intxAtPut );
1386
+ SetVMFlag <JVM_FLAG_TYPE( intx) > (thread, env, name, &result);
1386
1387
WB_END
1387
1388
1388
1389
WB_ENTRY (void , WB_SetUintxVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1389
1390
uintx result = value;
1390
- SetVMFlag <uintx> (thread, env, name, &result, &JVMFlag::uintxAtPut );
1391
+ SetVMFlag <JVM_FLAG_TYPE( uintx) > (thread, env, name, &result);
1391
1392
WB_END
1392
1393
1393
1394
WB_ENTRY (void , WB_SetUint64VMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1394
1395
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);
1396
1397
WB_END
1397
1398
1398
1399
WB_ENTRY (void , WB_SetSizeTVMFlag(JNIEnv* env, jobject o, jstring name, jlong value))
1399
1400
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);
1401
1402
WB_END
1402
1403
1403
1404
WB_ENTRY (void , WB_SetDoubleVMFlag(JNIEnv* env, jobject o, jstring name, jdouble value))
1404
1405
double result = value;
1405
- SetVMFlag <double > (thread, env, name, &result, &JVMFlag::doubleAtPut );
1406
+ SetVMFlag <JVM_FLAG_TYPE( double ) > (thread, env, name, &result);
1406
1407
WB_END
1407
1408
1408
1409
WB_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
1419
1420
bool needFree;
1420
1421
{
1421
1422
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);
1423
1424
}
1424
1425
if (value != NULL ) {
1425
1426
env->ReleaseStringUTFChars (value, ccstrValue);
0 commit comments