exec: extract exec/tb-context.h
TCG backends do not need most of exec-all.h; extract what they actually need to a separate file or move it directly to tcg.h. The next patch will stop including exec-all.h from everywhere. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
		
							parent
							
								
									03dd024ff5
								
							
						
					
					
						commit
						00f6da6a1a
					
				| 
						 | 
				
			
			@ -21,6 +21,7 @@
 | 
			
		|||
#define _EXEC_ALL_H_
 | 
			
		||||
 | 
			
		||||
#include "qemu-common.h"
 | 
			
		||||
#include "exec/tb-context.h"
 | 
			
		||||
 | 
			
		||||
/* allow to see translation results - the slowdown should be negligible, so we leave it */
 | 
			
		||||
#define DEBUG_DISAS
 | 
			
		||||
| 
						 | 
				
			
			@ -40,30 +41,6 @@ typedef ram_addr_t tb_page_addr_t;
 | 
			
		|||
#define DISAS_UPDATE  2 /* cpu state was modified dynamically */
 | 
			
		||||
#define DISAS_TB_JUMP 3 /* only pc was modified statically */
 | 
			
		||||
 | 
			
		||||
struct TranslationBlock;
 | 
			
		||||
typedef struct TranslationBlock TranslationBlock;
 | 
			
		||||
 | 
			
		||||
/* XXX: make safe guess about sizes */
 | 
			
		||||
#define MAX_OP_PER_INSTR 266
 | 
			
		||||
 | 
			
		||||
#if HOST_LONG_BITS == 32
 | 
			
		||||
#define MAX_OPC_PARAM_PER_ARG 2
 | 
			
		||||
#else
 | 
			
		||||
#define MAX_OPC_PARAM_PER_ARG 1
 | 
			
		||||
#endif
 | 
			
		||||
#define MAX_OPC_PARAM_IARGS 5
 | 
			
		||||
#define MAX_OPC_PARAM_OARGS 1
 | 
			
		||||
#define MAX_OPC_PARAM_ARGS (MAX_OPC_PARAM_IARGS + MAX_OPC_PARAM_OARGS)
 | 
			
		||||
 | 
			
		||||
/* A Call op needs up to 4 + 2N parameters on 32-bit archs,
 | 
			
		||||
 * and up to 4 + N parameters on 64-bit archs
 | 
			
		||||
 * (N = number of input arguments + output arguments).  */
 | 
			
		||||
#define MAX_OPC_PARAM (4 + (MAX_OPC_PARAM_PER_ARG * MAX_OPC_PARAM_ARGS))
 | 
			
		||||
#define OPC_BUF_SIZE 640
 | 
			
		||||
#define OPC_MAX_SIZE (OPC_BUF_SIZE - MAX_OP_PER_INSTR)
 | 
			
		||||
 | 
			
		||||
#define OPPARAM_BUF_SIZE (OPC_BUF_SIZE * MAX_OPC_PARAM)
 | 
			
		||||
 | 
			
		||||
#include "qemu/log.h"
 | 
			
		||||
 | 
			
		||||
void gen_intermediate_code(CPUArchState *env, struct TranslationBlock *tb);
 | 
			
		||||
| 
						 | 
				
			
			@ -212,9 +189,6 @@ static inline void tlb_flush_by_mmuidx(CPUState *cpu, ...)
 | 
			
		|||
 | 
			
		||||
#define CODE_GEN_ALIGN           16 /* must be >= of the size of a icache line */
 | 
			
		||||
 | 
			
		||||
#define CODE_GEN_PHYS_HASH_BITS     15
 | 
			
		||||
#define CODE_GEN_PHYS_HASH_SIZE     (1 << CODE_GEN_PHYS_HASH_BITS)
 | 
			
		||||
 | 
			
		||||
/* Estimated block size for TB allocation.  */
 | 
			
		||||
/* ??? The following is based on a 2015 survey of x86_64 host output.
 | 
			
		||||
   Better would seem to be some sort of dynamically sized TB array,
 | 
			
		||||
| 
						 | 
				
			
			@ -289,23 +263,6 @@ struct TranslationBlock {
 | 
			
		|||
    uintptr_t jmp_list_first;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#include "qemu/thread.h"
 | 
			
		||||
 | 
			
		||||
typedef struct TBContext TBContext;
 | 
			
		||||
 | 
			
		||||
struct TBContext {
 | 
			
		||||
 | 
			
		||||
    TranslationBlock *tbs;
 | 
			
		||||
    TranslationBlock *tb_phys_hash[CODE_GEN_PHYS_HASH_SIZE];
 | 
			
		||||
    int nb_tbs;
 | 
			
		||||
    /* any access to the tbs or the page table must use this lock */
 | 
			
		||||
    QemuMutex tb_lock;
 | 
			
		||||
 | 
			
		||||
    /* statistics */
 | 
			
		||||
    int tb_flush_count;
 | 
			
		||||
    int tb_phys_invalidate_count;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void tb_free(TranslationBlock *tb);
 | 
			
		||||
void tb_flush(CPUState *cpu);
 | 
			
		||||
void tb_phys_invalidate(TranslationBlock *tb, tb_page_addr_t page_addr);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,44 @@
 | 
			
		|||
/*
 | 
			
		||||
 * Internal structs that QEMU exports to TCG
 | 
			
		||||
 *
 | 
			
		||||
 *  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 QEMU_TB_CONTEXT_H_
 | 
			
		||||
#define QEMU_TB_CONTEXT_H_
 | 
			
		||||
 | 
			
		||||
#include "qemu/thread.h"
 | 
			
		||||
 | 
			
		||||
#define CODE_GEN_PHYS_HASH_BITS     15
 | 
			
		||||
#define CODE_GEN_PHYS_HASH_SIZE     (1 << CODE_GEN_PHYS_HASH_BITS)
 | 
			
		||||
 | 
			
		||||
typedef struct TranslationBlock TranslationBlock;
 | 
			
		||||
typedef struct TBContext TBContext;
 | 
			
		||||
 | 
			
		||||
struct TBContext {
 | 
			
		||||
 | 
			
		||||
    TranslationBlock *tbs;
 | 
			
		||||
    TranslationBlock *tb_phys_hash[CODE_GEN_PHYS_HASH_SIZE];
 | 
			
		||||
    int nb_tbs;
 | 
			
		||||
    /* any access to the tbs or the page table must use this lock */
 | 
			
		||||
    QemuMutex tb_lock;
 | 
			
		||||
 | 
			
		||||
    /* statistics */
 | 
			
		||||
    int tb_flush_count;
 | 
			
		||||
    int tb_phys_invalidate_count;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -25,7 +25,7 @@
 | 
			
		|||
 | 
			
		||||
#include "qemu/osdep.h"
 | 
			
		||||
#include "qemu-common.h"
 | 
			
		||||
#include "cpu.h"
 | 
			
		||||
#include "exec/cpu-common.h"
 | 
			
		||||
#include "tcg-op.h"
 | 
			
		||||
 | 
			
		||||
#define CASE_OP_32_64(x)                        \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,6 +23,8 @@
 | 
			
		|||
 */
 | 
			
		||||
 | 
			
		||||
#include "qemu/osdep.h"
 | 
			
		||||
#include "qemu-common.h"
 | 
			
		||||
#include "exec/cpu-common.h"
 | 
			
		||||
#include "tcg/tcg.h"
 | 
			
		||||
 | 
			
		||||
#if defined(CONFIG_TCG_INTERPRETER)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										22
									
								
								tcg/tcg.h
								
								
								
								
							
							
						
						
									
										22
									
								
								tcg/tcg.h
								
								
								
								
							| 
						 | 
				
			
			@ -27,9 +27,31 @@
 | 
			
		|||
 | 
			
		||||
#include "qemu-common.h"
 | 
			
		||||
#include "cpu.h"
 | 
			
		||||
#include "exec/tb-context.h"
 | 
			
		||||
#include "qemu/bitops.h"
 | 
			
		||||
#include "tcg-target.h"
 | 
			
		||||
 | 
			
		||||
/* XXX: make safe guess about sizes */
 | 
			
		||||
#define MAX_OP_PER_INSTR 266
 | 
			
		||||
 | 
			
		||||
#if HOST_LONG_BITS == 32
 | 
			
		||||
#define MAX_OPC_PARAM_PER_ARG 2
 | 
			
		||||
#else
 | 
			
		||||
#define MAX_OPC_PARAM_PER_ARG 1
 | 
			
		||||
#endif
 | 
			
		||||
#define MAX_OPC_PARAM_IARGS 5
 | 
			
		||||
#define MAX_OPC_PARAM_OARGS 1
 | 
			
		||||
#define MAX_OPC_PARAM_ARGS (MAX_OPC_PARAM_IARGS + MAX_OPC_PARAM_OARGS)
 | 
			
		||||
 | 
			
		||||
/* A Call op needs up to 4 + 2N parameters on 32-bit archs,
 | 
			
		||||
 * and up to 4 + N parameters on 64-bit archs
 | 
			
		||||
 * (N = number of input arguments + output arguments).  */
 | 
			
		||||
#define MAX_OPC_PARAM (4 + (MAX_OPC_PARAM_PER_ARG * MAX_OPC_PARAM_ARGS))
 | 
			
		||||
#define OPC_BUF_SIZE 640
 | 
			
		||||
#define OPC_MAX_SIZE (OPC_BUF_SIZE - MAX_OP_PER_INSTR)
 | 
			
		||||
 | 
			
		||||
#define OPPARAM_BUF_SIZE (OPC_BUF_SIZE * MAX_OPC_PARAM)
 | 
			
		||||
 | 
			
		||||
#define CPU_TEMP_BUF_NLONGS 128
 | 
			
		||||
 | 
			
		||||
/* Default target word size to pointer size.  */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue