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); | ||||
|  | ||||
							
								
								
									
										44
									
								
								include/exec/tb-context.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								include/exec/tb-context.h
									
									
									
									
									
										Normal file
									
								
							| @ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Paolo Bonzini
						Paolo Bonzini