src/share/vm/utilities/globalDefinitions.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File
warning2 Cdiff src/share/vm/utilities/globalDefinitions.cpp
src/share/vm/utilities/globalDefinitions.cpp
Print this page
rev 3821 : [mq]: unused
*** 353,357 ****
--- 353,403 ----
julong result = julong(a) * b / div;
assert(result <= (size_t)max_uintx, "Integer overflow in lcm");
return size_t(result);
}
+
+ // Clamp an address to be within a specific page
+ // 1. If the address is on the page it is returned as is
+ // 2. If the address is above the page_address the start of the *next* page will be returned
+ // 3. If the address is below the page_address the start of the page will be returned
+ static address clamp_address_in_page(address addr, address page_address, intptr_t page_size) {
+ if (align_size_down(intptr_t(addr), page_size) == align_size_down(intptr_t(page_address), page_size)) {
+ // address is in the specified page, just return it as is
+ return addr;
+ } else if (addr > page_address) {
+ // address is on above specified page, return start of next page
+ return (address)align_size_down(intptr_t(page_address), page_size) + page_size;
+ } else {
+ // address is below specified page, return start of page
+ return (address)align_size_down(intptr_t(page_address), page_size);
+ }
+ }
+
+ address clamp_address_in_page(address addr, address page_address) {
+ intptr_t page_size = os::vm_page_size();
+ return clamp_address_in_page(addr, page_address, page_size);
+ }
+
+ #ifndef PRODUCT
+
+ void GlobalDefinitions::test_globals() {
+ intptr_t page_size = 4096;
+ address a_page = (address)(10*page_size);
+
+ // Check that address within page is returned as is
+ assert(clamp_address_in_page(a_page, a_page, 4096) == a_page, "incorrect");
+ assert(clamp_address_in_page(a_page + 128, a_page, 4096) == a_page + 128, "incorrect");
+ assert(clamp_address_in_page(a_page + page_size - 1, a_page, 4096) == a_page + page_size - 1, "incorrect");
+
+ // Check that address above page returns start of next page
+ assert(clamp_address_in_page(a_page + page_size, a_page, 4096) == a_page + page_size, "incorrect");
+ assert(clamp_address_in_page(a_page + page_size + 1, a_page, 4096) == a_page + page_size, "incorrect");
+ assert(clamp_address_in_page(a_page + page_size*5 + 1, a_page, 4096) == a_page + page_size, "incorrect");
+
+ // Check that address below page returns start of page
+ assert(clamp_address_in_page(a_page - 1, a_page, 4096) == a_page, "incorrect");
+ assert(clamp_address_in_page(a_page - 2*page_size - 1, a_page, 4096) == a_page, "incorrect");
+ assert(clamp_address_in_page(a_page - 5*page_size - 1, a_page, 4096) == a_page, "incorrect");
+ }
+
+ #endif // PRODUCT
src/share/vm/utilities/globalDefinitions.cpp
Index
Unified diffs
Context diffs
Sdiffs
Patch
New
Old
Previous File
Next File