qemu-devel
[Top][All Lists]
Advanced

[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"
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]