src/share/vm/utilities/globalDefinitions.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File warning2 Sdiff src/share/vm/utilities

src/share/vm/utilities/globalDefinitions.cpp

Print this page
rev 3821 : [mq]: unused


 338 // least common multiple
 339 size_t lcm(size_t a, size_t b) {
 340     size_t cur, div, next;
 341 
 342     cur = MAX2(a, b);
 343     div = MIN2(a, b);
 344 
 345     assert(div != 0, "lcm requires positive arguments");
 346 
 347 
 348     while ((next = cur % div) != 0) {
 349         cur = div; div = next;
 350     }
 351 
 352 
 353     julong result = julong(a) * b / div;
 354     assert(result <= (size_t)max_uintx, "Integer overflow in lcm");
 355 
 356     return size_t(result);
 357 }
















































 338 // least common multiple
 339 size_t lcm(size_t a, size_t b) {
 340     size_t cur, div, next;
 341 
 342     cur = MAX2(a, b);
 343     div = MIN2(a, b);
 344 
 345     assert(div != 0, "lcm requires positive arguments");
 346 
 347 
 348     while ((next = cur % div) != 0) {
 349         cur = div; div = next;
 350     }
 351 
 352 
 353     julong result = julong(a) * b / div;
 354     assert(result <= (size_t)max_uintx, "Integer overflow in lcm");
 355 
 356     return size_t(result);
 357 }
 358 
 359 // Clamp an address to be within a specific page
 360 // 1. If the address is on the page it is returned as is
 361 // 2. If the address is above the page_address the start of the *next* page will be returned
 362 // 3. If the address is below the page_address the start of the page will be returned
 363 static address clamp_address_in_page(address addr, address page_address, intptr_t page_size) {
 364   if (align_size_down(intptr_t(addr), page_size) == align_size_down(intptr_t(page_address), page_size)) {
 365     // address is in the specified page, just return it as is
 366     return addr;
 367   } else if (addr > page_address) {
 368     // address is on above specified page, return start of next page
 369     return (address)align_size_down(intptr_t(page_address), page_size) + page_size;
 370   } else {
 371     // address is below specified page, return start of page
 372     return (address)align_size_down(intptr_t(page_address), page_size);
 373   }
 374 }
 375 
 376 address clamp_address_in_page(address addr, address page_address) {
 377   intptr_t page_size = os::vm_page_size();
 378   return clamp_address_in_page(addr, page_address, page_size);
 379 }
 380 
 381 #ifndef PRODUCT
 382 
 383 void GlobalDefinitions::test_globals() {
 384   intptr_t page_size = 4096;
 385   address a_page = (address)(10*page_size);
 386 
 387   // Check that address within page is returned as is
 388   assert(clamp_address_in_page(a_page, a_page, 4096) == a_page, "incorrect");
 389   assert(clamp_address_in_page(a_page + 128, a_page, 4096) == a_page + 128, "incorrect");
 390   assert(clamp_address_in_page(a_page + page_size - 1, a_page, 4096) == a_page + page_size - 1, "incorrect");
 391 
 392   // Check that address above page returns start of next page
 393   assert(clamp_address_in_page(a_page + page_size, a_page, 4096) == a_page + page_size, "incorrect");
 394   assert(clamp_address_in_page(a_page + page_size + 1, a_page, 4096) == a_page + page_size, "incorrect");
 395   assert(clamp_address_in_page(a_page + page_size*5 + 1, a_page, 4096) == a_page + page_size, "incorrect");
 396 
 397   // Check that address below page returns start of page
 398   assert(clamp_address_in_page(a_page - 1, a_page, 4096) == a_page, "incorrect");
 399   assert(clamp_address_in_page(a_page - 2*page_size - 1, a_page, 4096) == a_page, "incorrect");
 400   assert(clamp_address_in_page(a_page - 5*page_size - 1, a_page, 4096) == a_page, "incorrect");
 401 }
 402 
 403 #endif // PRODUCT
src/share/vm/utilities/globalDefinitions.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File