478
479 constexpr static int features_bitmap_element_shift_count() {
480 return LogBitsPerLong;
481 }
482
483 constexpr static uint64_t features_bitmap_element_mask() {
484 return (1ULL << features_bitmap_element_shift_count()) - 1;
485 }
486
487 static int index(Feature_Flag feature) {
488 int idx = feature >> features_bitmap_element_shift_count();
489 assert(idx < features_bitmap_element_count(), "Features array index out of bounds");
490 return idx;
491 }
492
493 static uint64_t bit_mask(Feature_Flag feature) {
494 return (1ULL << (feature & features_bitmap_element_mask()));
495 }
496
497 static int _features_bitmap_size; // for JVMCI purposes
498 public:
499 VM_Features() {
500 for (int i = 0; i < features_bitmap_element_count(); i++) {
501 _features_bitmap[i] = 0;
502 }
503 }
504
505 void set_feature(Feature_Flag feature) {
506 int idx = index(feature);
507 _features_bitmap[idx] |= bit_mask(feature);
508 }
509
510 void clear_feature(VM_Version::Feature_Flag feature) {
511 int idx = index(feature);
512 _features_bitmap[idx] &= ~bit_mask(feature);
513 }
514
515 bool supports_feature(VM_Version::Feature_Flag feature) {
516 int idx = index(feature);
517 return (_features_bitmap[idx] & bit_mask(feature)) != 0;
|
478
479 constexpr static int features_bitmap_element_shift_count() {
480 return LogBitsPerLong;
481 }
482
483 constexpr static uint64_t features_bitmap_element_mask() {
484 return (1ULL << features_bitmap_element_shift_count()) - 1;
485 }
486
487 static int index(Feature_Flag feature) {
488 int idx = feature >> features_bitmap_element_shift_count();
489 assert(idx < features_bitmap_element_count(), "Features array index out of bounds");
490 return idx;
491 }
492
493 static uint64_t bit_mask(Feature_Flag feature) {
494 return (1ULL << (feature & features_bitmap_element_mask()));
495 }
496
497 static int _features_bitmap_size; // for JVMCI purposes
498
499 public:
500 VM_Features() {
501 for (int i = 0; i < features_bitmap_element_count(); i++) {
502 _features_bitmap[i] = 0;
503 }
504 }
505
506 void set_feature(Feature_Flag feature) {
507 int idx = index(feature);
508 _features_bitmap[idx] |= bit_mask(feature);
509 }
510
511 void clear_feature(VM_Version::Feature_Flag feature) {
512 int idx = index(feature);
513 _features_bitmap[idx] &= ~bit_mask(feature);
514 }
515
516 bool supports_feature(VM_Version::Feature_Flag feature) {
517 int idx = index(feature);
518 return (_features_bitmap[idx] & bit_mask(feature)) != 0;
|