X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f734ec7475682eb90323e804cbcfddd7e4523992..debe4e5871c0c3d1c714bbb1bd28ba7147454aa5:/src/mc/mc_mmu.hpp diff --git a/src/mc/mc_mmu.hpp b/src/mc/mc_mmu.hpp index a6de7acebb..dae7a092b5 100644 --- a/src/mc/mc_mmu.hpp +++ b/src/mc/mc_mmu.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2014-2017. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2014-2019. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -6,7 +6,17 @@ #ifndef SIMGRID_MC_MMU_HPP #define SIMGRID_MC_MMU_HPP -#include "xbt/misc.h" // xbt_pagesize... +#include +#include + +#ifndef XBT_ALWAYS_INLINE +#define XBT_ALWAYS_INLINE inline __attribute__((always_inline)) +#endif + +/** Cache the size of a memory page for the current system. */ +extern "C" int xbt_pagesize; +/** Cache the number of bits of addresses inside a given page, log2(xbt_pagesize). */ +extern "C" int xbt_pagebits; namespace simgrid { namespace mc { @@ -26,24 +36,21 @@ static int chunkSize() static XBT_ALWAYS_INLINE std::size_t chunkCount(std::size_t size) { size_t page_count = size >> xbt_pagebits; - if (size & (xbt_pagesize-1)) - page_count ++; + if (size & (xbt_pagesize - 1)) + page_count++; return page_count; } /** @brief Split into chunk number and remaining offset */ static XBT_ALWAYS_INLINE std::pair split(std::uintptr_t offset) { - return { - offset >> xbt_pagebits, - offset & (xbt_pagesize-1) - }; + return {offset >> xbt_pagebits, offset & (xbt_pagesize - 1)}; } /** Merge chunk number and remaining offset info a global offset */ static XBT_ALWAYS_INLINE std::uintptr_t join(std::size_t page, std::uintptr_t offset) { - return ((std::uintptr_t) page << xbt_pagebits) + offset; + return ((std::uintptr_t)page << xbt_pagebits) + offset; } static XBT_ALWAYS_INLINE std::uintptr_t join(std::pair value) @@ -55,7 +62,6 @@ static XBT_ALWAYS_INLINE bool sameChunk(std::uintptr_t a, std::uintptr_t b) { return (a >> xbt_pagebits) == (b >> xbt_pagebits); } - } } }