[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v3 07/20] exec: Cache TARGET_PAGE_MASK for TARGET_PAGE_BITS_V
From: |
David Hildenbrand |
Subject: |
Re: [PATCH v3 07/20] exec: Cache TARGET_PAGE_MASK for TARGET_PAGE_BITS_VARY |
Date: |
Mon, 23 Sep 2019 10:31:58 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.8.0 |
On 22.09.19 05:54, Richard Henderson wrote:
> This eliminates a set of runtime shifts. It turns out that we
> require TARGET_PAGE_MASK more often than TARGET_PAGE_SIZE, so
> redefine TARGET_PAGE_SIZE based on TARGET_PAGE_MASK instead of
> the other way around.
>
> Reviewed-by: Paolo Bonzini <address@hidden>
> Signed-off-by: Richard Henderson <address@hidden>
> ---
> include/exec/cpu-all.h | 8 ++++++--
> exec-vary.c | 1 +
> 2 files changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h
> index 5246770271..2db73c7a27 100644
> --- a/include/exec/cpu-all.h
> +++ b/include/exec/cpu-all.h
> @@ -213,19 +213,23 @@ static inline void stl_phys_notdirty(AddressSpace *as,
> hwaddr addr, uint32_t val
> typedef struct {
> bool decided;
> int bits;
> + target_long mask;
> } TargetPageBits;
> extern const TargetPageBits target_page;
> # ifdef CONFIG_DEBUG_TCG
> # define TARGET_PAGE_BITS (assert(target_page.decided), target_page.bits)
> +# define TARGET_PAGE_MASK (assert(target_page.decided), target_page.mask)
> # else
> # define TARGET_PAGE_BITS target_page.bits
> +# define TARGET_PAGE_MASK target_page.mask
> # endif
> +# define TARGET_PAGE_SIZE ((int)-TARGET_PAGE_MASK)
> #else
> #define TARGET_PAGE_BITS_MIN TARGET_PAGE_BITS
> +#define TARGET_PAGE_SIZE (1 << TARGET_PAGE_BITS)
> +#define TARGET_PAGE_MASK ((target_long)-1 << TARGET_PAGE_BITS)
> #endif
>
> -#define TARGET_PAGE_SIZE (1 << TARGET_PAGE_BITS)
> -#define TARGET_PAGE_MASK ((target_long)-1 << TARGET_PAGE_BITS)
> #define TARGET_PAGE_ALIGN(addr) \
> (((addr) + ~TARGET_PAGE_MASK) & TARGET_PAGE_MASK)
>
> diff --git a/exec-vary.c b/exec-vary.c
> index 67cdf57a9c..26daf281f2 100644
> --- a/exec-vary.c
> +++ b/exec-vary.c
> @@ -83,5 +83,6 @@ void finalize_target_page_bits(void)
> init_target_page.bits = TARGET_PAGE_BITS_MIN;
> }
> init_target_page.decided = true;
> + init_target_page.mask = (target_long)-1 << init_target_page.bits;
> #endif
> }
>
Reviewed-by: David Hildenbrand <address@hidden>
--
Thanks,
David / dhildenb
- [PATCH v3 02/20] exec: Split out variable page size support to exec-vary.c, (continued)
- [PATCH v3 02/20] exec: Split out variable page size support to exec-vary.c, Richard Henderson, 2019/09/21
- [PATCH v3 04/20] exec: Restrict TARGET_PAGE_BITS_VARY assert to CONFIG_DEBUG_TCG, Richard Henderson, 2019/09/21
- [PATCH v3 03/20] exec: Use const alias for TARGET_PAGE_BITS_VARY, Richard Henderson, 2019/09/21
- [PATCH v3 05/20] exec: Promote TARGET_PAGE_MASK to target_long, Richard Henderson, 2019/09/21
- [PATCH v3 06/20] exec: Tidy TARGET_PAGE_ALIGN, Richard Henderson, 2019/09/21
- [PATCH v3 07/20] exec: Cache TARGET_PAGE_MASK for TARGET_PAGE_BITS_VARY, Richard Henderson, 2019/09/21
- Re: [PATCH v3 07/20] exec: Cache TARGET_PAGE_MASK for TARGET_PAGE_BITS_VARY,
David Hildenbrand <=
- [PATCH v3 08/20] cputlb: Disable __always_inline__ without optimization, Richard Henderson, 2019/09/21
[PATCH v3 09/20] cputlb: Replace switches in load/store_helper with callback, Richard Henderson, 2019/09/21