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