[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC v2 12/34] include/exec: Move tb hash functions out
From: |
Paolo Bonzini |
Subject: |
Re: [Qemu-devel] [RFC v2 12/34] include/exec: Move tb hash functions out |
Date: |
Mon, 01 Jun 2015 09:56:48 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 |
On 31/05/2015 08:11, Peter Crosthwaite wrote:
> This is one of very few things in exec-all with a genuine CPU
> architecture dependency. Move these hashing helpers to a new
> header to trim exec-all.h down to a near architecture-agnostic
> header.
>
> The defs are only used by cpu-exec and translate-all which are both
> arch-obj's so the new tb-hash.h has no core code usage.
>
> Signed-off-by: Peter Crosthwaite <address@hidden>
Oh, here you are. :D
Paolo
> ---
> cpu-exec.c | 2 ++
> include/exec/exec-all.h | 20 --------------------
> include/exec/tb-hash.h | 43 +++++++++++++++++++++++++++++++++++++++++++
> target-multi/helper.h | 1 +
> translate-all.c | 1 +
> 5 files changed, 47 insertions(+), 20 deletions(-)
> create mode 100644 include/exec/tb-hash.h
> create mode 100644 target-multi/helper.h
>
> diff --git a/cpu-exec.c b/cpu-exec.c
> index dbea47c..f255ea9 100644
> --- a/cpu-exec.c
> +++ b/cpu-exec.c
> @@ -27,6 +27,8 @@
> #include "exec/address-spaces.h"
> #include "qemu/rcu.h"
>
> +#include "exec/tb-hash.h"
> +
> /* -icount align implementation. */
>
> typedef struct SyncClocks {
> diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h
> index d52885e..745cb4a 100644
> --- a/include/exec/exec-all.h
> +++ b/include/exec/exec-all.h
> @@ -195,26 +195,6 @@ struct TBContext {
> int tb_invalidated_flag;
> };
>
> -static inline unsigned int tb_jmp_cache_hash_page(target_ulong pc)
> -{
> - target_ulong tmp;
> - tmp = pc ^ (pc >> (TARGET_PAGE_BITS - TB_JMP_PAGE_BITS));
> - return (tmp >> (TARGET_PAGE_BITS - TB_JMP_PAGE_BITS)) & TB_JMP_PAGE_MASK;
> -}
> -
> -static inline unsigned int tb_jmp_cache_hash_func(target_ulong pc)
> -{
> - target_ulong tmp;
> - tmp = pc ^ (pc >> (TARGET_PAGE_BITS - TB_JMP_PAGE_BITS));
> - return (((tmp >> (TARGET_PAGE_BITS - TB_JMP_PAGE_BITS)) &
> TB_JMP_PAGE_MASK)
> - | (tmp & TB_JMP_ADDR_MASK));
> -}
> -
> -static inline unsigned int tb_phys_hash_func(tb_page_addr_t pc)
> -{
> - return (pc >> 2) & (CODE_GEN_PHYS_HASH_SIZE - 1);
> -}
> -
> void tb_free(TranslationBlock *tb);
> void tb_flush(CPUState *cpu);
> void tb_phys_invalidate(TranslationBlock *tb, tb_page_addr_t page_addr);
> diff --git a/include/exec/tb-hash.h b/include/exec/tb-hash.h
> new file mode 100644
> index 0000000..e0bd786
> --- /dev/null
> +++ b/include/exec/tb-hash.h
> @@ -0,0 +1,43 @@
> +/*
> + * internal execution defines for qemu
> + *
> + * Copyright (c) 2003 Fabrice Bellard
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, see
> <http://www.gnu.org/licenses/>.
> + */
> +
> +#ifndef EXEC_TB_HASH
> +#define EXEC_TB_HASH
> +
> +static inline unsigned int tb_jmp_cache_hash_page(target_ulong pc)
> +{
> + target_ulong tmp;
> + tmp = pc ^ (pc >> (TARGET_PAGE_BITS - TB_JMP_PAGE_BITS));
> + return (tmp >> (TARGET_PAGE_BITS - TB_JMP_PAGE_BITS)) & TB_JMP_PAGE_MASK;
> +}
> +
> +static inline unsigned int tb_jmp_cache_hash_func(target_ulong pc)
> +{
> + target_ulong tmp;
> + tmp = pc ^ (pc >> (TARGET_PAGE_BITS - TB_JMP_PAGE_BITS));
> + return (((tmp >> (TARGET_PAGE_BITS - TB_JMP_PAGE_BITS)) &
> TB_JMP_PAGE_MASK)
> + | (tmp & TB_JMP_ADDR_MASK));
> +}
> +
> +static inline unsigned int tb_phys_hash_func(tb_page_addr_t pc)
> +{
> + return (pc >> 2) & (CODE_GEN_PHYS_HASH_SIZE - 1);
> +}
> +
> +#endif
> diff --git a/target-multi/helper.h b/target-multi/helper.h
> new file mode 100644
> index 0000000..6b9ee59
> --- /dev/null
> +++ b/target-multi/helper.h
> @@ -0,0 +1 @@
> +/* Multi arch has no helpers, but core code expects this file anyway */
> diff --git a/translate-all.c b/translate-all.c
> index 7d27c5d..bf0d689 100644
> --- a/translate-all.c
> +++ b/translate-all.c
> @@ -58,6 +58,7 @@
> #endif
>
> #include "exec/cputlb.h"
> +#include "exec/tb-hash.h"
> #include "translate-all.h"
> #include "qemu/bitmap.h"
> #include "qemu/timer.h"
>
- Re: [Qemu-devel] [RFC v2 12/34] include/exec: Move tb hash functions out,
Paolo Bonzini <=