X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d47e21d93998034c0f8fa4a9a6c750002f7642fa..717c4b31876300acbf14a58196b5b57538d8ce46:/src/mc/mc_mmu.h diff --git a/src/mc/mc_mmu.h b/src/mc/mc_mmu.h index dd6f2da6cf..6740829b8c 100644 --- a/src/mc/mc_mmu.h +++ b/src/mc/mc_mmu.h @@ -10,14 +10,20 @@ #include #include -#include "mc_private.h" +#include + +SG_BEGIN_DECL() + +extern int xbt_pagesize; +extern int xbt_pagebits; /** @brief How many memory pages are necessary to store size bytes? * * @param size Byte size * @return Number of memory pages */ -static inline size_t mc_page_count(size_t size) +static inline __attribute__ ((always_inline)) +size_t mc_page_count(size_t size) { size_t page_count = size >> xbt_pagebits; if (size & (xbt_pagesize-1)) { @@ -31,8 +37,10 @@ static inline size_t mc_page_count(size_t size) * @param address Address * @return Virtual memory page number of the given address */ -static inline size_t mc_page_number(void* base, void* address) +static inline __attribute__ ((always_inline)) +size_t mc_page_number(void* base, void* address) { + xbt_assert(address>=base, "The address is not in the range"); return ((uintptr_t) address - (uintptr_t) base) >> xbt_pagebits; } @@ -41,7 +49,8 @@ static inline size_t mc_page_number(void* base, void* address) * @param address Address * @return Offset within the memory page */ -static inline size_t mc_page_offset(void* address) +static inline __attribute__ ((always_inline)) +size_t mc_page_offset(void* address) { return ((uintptr_t) address) & (xbt_pagesize-1); } @@ -51,14 +60,18 @@ static inline size_t mc_page_offset(void* address) * @param base Address of the first page * @param page Index of the page */ -static inline void* mc_page_from_number(void* base, size_t page) +static inline __attribute__ ((always_inline)) +void* mc_page_from_number(void* base, size_t page) { return (void*) ((char*)base + (page << xbt_pagebits)); } -static inline bool mc_same_page(void* a, void* b) +static inline __attribute__ ((always_inline)) +bool mc_same_page(void* a, void* b) { - return mc_page_number(NULL, a) == mc_page_number(NULL, b); + return ((uintptr_t) a >> xbt_pagebits) == ((uintptr_t) b >> xbt_pagebits); } +SG_END_DECL() + #endif