/[qemu]/qemu/exec-all.h
ViewVC logotype

Diff of /qemu/exec-all.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.24 by bellard, Mon Jan 3 23:35:10 2005 UTC revision 1.25 by bellard, Sun Jan 9 00:07:04 2005 UTC
# Line 322  TranslationBlock *tb_find_pc(unsigned lo Line 322  TranslationBlock *tb_find_pc(unsigned lo
322  #if defined(__powerpc__)  #if defined(__powerpc__)
323    
324  /* we patch the jump instruction directly */  /* we patch the jump instruction directly */
325  #define JUMP_TB(opname, tbparam, n, eip)\  #define GOTO_TB(opname, tbparam, n)\
326  do {\  do {\
327      asm volatile (ASM_DATA_SECTION\      asm volatile (ASM_DATA_SECTION\
328                    ASM_NAME(__op_label) #n "." ASM_NAME(opname) ":\n"\                    ASM_NAME(__op_label) #n "." ASM_NAME(opname) ":\n"\
# Line 330  do {\ Line 330  do {\
330                    ASM_PREVIOUS_SECTION \                    ASM_PREVIOUS_SECTION \
331                    "b " ASM_NAME(__op_jmp) #n "\n"\                    "b " ASM_NAME(__op_jmp) #n "\n"\
332                    "1:\n");\                    "1:\n");\
     T0 = (long)(tbparam) + (n);\  
     EIP = (int32_t)eip;\  
     EXIT_TB();\  
 } while (0)  
   
 #define JUMP_TB2(opname, tbparam, n)\  
 do {\  
     asm volatile ("b " ASM_NAME(__op_jmp) #n "\n");\  
333  } while (0)  } while (0)
334    
335  #elif defined(__i386__) && defined(USE_DIRECT_JUMP)  #elif defined(__i386__) && defined(USE_DIRECT_JUMP)
336    
337  /* we patch the jump instruction directly */  /* we patch the jump instruction directly */
338  #define GOTO_TB(opname, n)\  #define GOTO_TB(opname, tbparam, n)\
339  do {\  do {\
340      asm volatile (".section .data\n"\      asm volatile (".section .data\n"\
341                    ASM_NAME(__op_label) #n "." ASM_NAME(opname) ":\n"\                    ASM_NAME(__op_label) #n "." ASM_NAME(opname) ":\n"\
# Line 353  do {\ Line 345  do {\
345                    "1:\n");\                    "1:\n");\
346  } while (0)  } while (0)
347    
 #define JUMP_TB(opname, tbparam, n, eip)\  
 do {\  
     asm volatile (".section .data\n"\  
                   ASM_NAME(__op_label) #n "." ASM_NAME(opname) ":\n"\  
                   ".long 1f\n"\  
                   ASM_PREVIOUS_SECTION \  
                   "jmp " ASM_NAME(__op_jmp) #n "\n"\  
                   "1:\n");\  
     T0 = (long)(tbparam) + (n);\  
     EIP = (int32_t)eip;\  
     EXIT_TB();\  
 } while (0)  
   
 #define JUMP_TB2(opname, tbparam, n)\  
 do {\  
     asm volatile ("jmp " ASM_NAME(__op_jmp) #n "\n");\  
 } while (0)  
   
348  #else  #else
349    
350  /* jump to next block operations (more portable code, does not need  /* jump to next block operations (more portable code, does not need
351     cache flushing, but slower because of indirect jump) */     cache flushing, but slower because of indirect jump) */
352  #define JUMP_TB(opname, tbparam, n, eip)\  #define GOTO_TB(opname, tbparam, n)\
353  do {\  do {\
     static void __attribute__((unused)) *__op_label ## n = &&label ## n;\  
354      static void __attribute__((unused)) *dummy ## n = &&dummy_label ## n;\      static void __attribute__((unused)) *dummy ## n = &&dummy_label ## n;\
355        static void __attribute__((unused)) *__op_label ## n = &&label ## n;\
356      goto *(void *)(((TranslationBlock *)tbparam)->tb_next[n]);\      goto *(void *)(((TranslationBlock *)tbparam)->tb_next[n]);\
357  label ## n:\  label ## n: ;\
358      T0 = (long)(tbparam) + (n);\  dummy_label ## n: ;\
     EIP = (int32_t)eip;\  
 dummy_label ## n:\  
     EXIT_TB();\  
359  } while (0)  } while (0)
360    
361  /* second jump to same destination 'n' */  #endif
362  #define JUMP_TB2(opname, tbparam, n)\  
363    /* XXX: will be suppressed */
364    #define JUMP_TB(opname, tbparam, n, eip)\
365  do {\  do {\
366      goto *(void *)(((TranslationBlock *)tbparam)->tb_next[n - 2]);\      GOTO_TB(opname, tbparam, n);\
367        T0 = (long)(tbparam) + (n);\
368        EIP = (int32_t)eip;\
369        EXIT_TB();\
370  } while (0)  } while (0)
371    
 #endif  
   
372  extern CPUWriteMemoryFunc *io_mem_write[IO_MEM_NB_ENTRIES][4];  extern CPUWriteMemoryFunc *io_mem_write[IO_MEM_NB_ENTRIES][4];
373  extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];  extern CPUReadMemoryFunc *io_mem_read[IO_MEM_NB_ENTRIES][4];
374  extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];  extern void *io_mem_opaque[IO_MEM_NB_ENTRIES];

Legend:
Removed from v.1.24  
changed lines
  Added in v.1.25

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26