TCG op size estimation fix.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4154 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									663715fbe2
								
							
						
					
					
						commit
						a208e54a2f
					
				@ -36,6 +36,12 @@ struct TranslationBlock;
 | 
				
			|||||||
#define OPC_BUF_SIZE 512
 | 
					#define OPC_BUF_SIZE 512
 | 
				
			||||||
#define OPC_MAX_SIZE (OPC_BUF_SIZE - MAX_OP_PER_INSTR)
 | 
					#define OPC_MAX_SIZE (OPC_BUF_SIZE - MAX_OP_PER_INSTR)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Maximum size a TCG op can expand to.  This is complicated because a
 | 
				
			||||||
 | 
					   single op may require several host instructions and regirster reloads.
 | 
				
			||||||
 | 
					   For now take a wild guess at 128 bytes, which should allow at least
 | 
				
			||||||
 | 
					   a couple of fixup instructions per argument.  */
 | 
				
			||||||
 | 
					#define TCG_MAX_OP_SIZE 128
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define OPPARAM_BUF_SIZE (OPC_BUF_SIZE * MAX_OPC_PARAM)
 | 
					#define OPPARAM_BUF_SIZE (OPC_BUF_SIZE * MAX_OPC_PARAM)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern target_ulong gen_opc_pc[OPC_BUF_SIZE];
 | 
					extern target_ulong gen_opc_pc[OPC_BUF_SIZE];
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										3
									
								
								exec.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								exec.c
									
									
									
									
									
								
							@ -367,6 +367,9 @@ void tb_flush(CPUState *env1)
 | 
				
			|||||||
           nb_tbs, nb_tbs > 0 ?
 | 
					           nb_tbs, nb_tbs > 0 ?
 | 
				
			||||||
           ((unsigned long)(code_gen_ptr - code_gen_buffer)) / nb_tbs : 0);
 | 
					           ((unsigned long)(code_gen_ptr - code_gen_buffer)) / nb_tbs : 0);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					    if ((unsigned long)(code_gen_ptr - code_gen_buffer) > CODE_GEN_BUFFER_SIZE)
 | 
				
			||||||
 | 
					        cpu_abort(env1, "Internal error: code buffer overflow\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    nb_tbs = 0;
 | 
					    nb_tbs = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for(env = first_cpu; env != NULL; env = env->next_cpu) {
 | 
					    for(env = first_cpu; env != NULL; env = env->next_cpu) {
 | 
				
			||||||
 | 
				
			|||||||
@ -71,6 +71,7 @@ unsigned long code_gen_max_block_size(void)
 | 
				
			|||||||
    static unsigned long max;
 | 
					    static unsigned long max;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (max == 0) {
 | 
					    if (max == 0) {
 | 
				
			||||||
 | 
					        max = TCG_MAX_OP_SIZE;
 | 
				
			||||||
#define DEF(s, n, copy_size) max = copy_size > max? copy_size : max;
 | 
					#define DEF(s, n, copy_size) max = copy_size > max? copy_size : max;
 | 
				
			||||||
#include "tcg-opc.h"
 | 
					#include "tcg-opc.h"
 | 
				
			||||||
#undef DEF
 | 
					#undef DEF
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user