diff mbox

[RFC,v2,12/34] include/exec: Move tb hash functions out

Message ID 9d048b96f7cfa64a4d9c0b88e0dd2877fac51d41.1433052532.git.crosthwaite.peter@gmail.com
State New
Headers show

Commit Message

Peter Crosthwaite May 31, 2015, 6:11 a.m. UTC
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 <crosthwaite.peter@gmail.com>
---
 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

Comments

Paolo Bonzini June 1, 2015, 7:56 a.m. UTC | #1
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 <crosthwaite.peter@gmail.com>

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"
>
Richard Henderson June 1, 2015, 7:25 p.m. UTC | #2
On 05/30/2015 11:11 PM, 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 <crosthwaite.peter@gmail.com>
> ---
>  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

Reviewed-by: Richard Henderson <rth@twiddle.net>


r~
Paolo Bonzini June 24, 2015, 9:05 a.m. UTC | #3
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 <crosthwaite.peter@gmail.com>
> ---
>  cpu-exec.c              |  2 ++
>  include/exec/exec-all.h | 20 --------------------
>  include/exec/tb-hash.h  | 43 +++++++++++++++++++++++++++++++++++++++++++
>  target-multi/helper.h   |  1 +

Too early for this file to appear, dropping it.

Paolo

>  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"
>
diff mbox

Patch

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"