Diff for /qemu/cpu-exec.c between versions 1.1.1.3 and 1.1.1.4

version 1.1.1.3, 2018/04/24 16:40:34 version 1.1.1.4, 2018/04/24 16:42:36
Line 47  void cpu_loop_exit(void) Line 47  void cpu_loop_exit(void)
     longjmp(env->jmp_env, 1);      longjmp(env->jmp_env, 1);
 }  }
 #endif  #endif
 #ifndef TARGET_SPARC  #if !(defined(TARGET_SPARC) || defined(TARGET_SH4))
 #define reg_T2  #define reg_T2
 #endif  #endif
   
Line 175  static inline TranslationBlock *tb_find_ Line 175  static inline TranslationBlock *tb_find_
     pc = env->regs[15];      pc = env->regs[15];
 #elif defined(TARGET_SPARC)  #elif defined(TARGET_SPARC)
 #ifdef TARGET_SPARC64  #ifdef TARGET_SPARC64
     flags = (env->pstate << 2) | ((env->lsu & (DMMU_E | IMMU_E)) >> 2);      // Combined FPU enable bits . PRIV . DMMU enabled . IMMU enabled
       flags = (((env->pstate & PS_PEF) >> 1) | ((env->fprs & FPRS_FEF) << 2))
           | (env->pstate & PS_PRIV) | ((env->lsu & (DMMU_E | IMMU_E)) >> 2);
 #else  #else
     flags = env->psrs | ((env->mmuregs[0] & (MMU_E | MMU_NF)) << 1);      // FPU enable . MMU enabled . MMU no-fault . Supervisor
       flags = (env->psref << 3) | ((env->mmuregs[0] & (MMU_E | MMU_NF)) << 1)
           | env->psrs;
 #endif  #endif
     cs_base = env->npc;      cs_base = env->npc;
     pc = env->pc;      pc = env->pc;
Line 253  int cpu_exec(CPUState *env1) Line 257  int cpu_exec(CPUState *env1)
     uint32_t *saved_regwptr;      uint32_t *saved_regwptr;
 #endif  #endif
 #endif  #endif
 #ifdef __sparc__  #if defined(__sparc__) && !defined(HOST_SOLARIS)
     int saved_i7, tmp_T0;      int saved_i7, tmp_T0;
 #endif  #endif
     int ret, interrupt_request;      int ret, interrupt_request;
Line 323  int cpu_exec(CPUState *env1) Line 327  int cpu_exec(CPUState *env1)
 #if defined(reg_T2)  #if defined(reg_T2)
     saved_T2 = T2;      saved_T2 = T2;
 #endif  #endif
 #ifdef __sparc__  #if defined(__sparc__) && !defined(HOST_SOLARIS)
     /* we also save i7 because longjmp may not restore it */      /* we also save i7 because longjmp may not restore it */
     asm volatile ("mov %%i7, %0" : "=r" (saved_i7));      asm volatile ("mov %%i7, %0" : "=r" (saved_i7));
 #endif  #endif
Line 447  int cpu_exec(CPUState *env1) Line 451  int cpu_exec(CPUState *env1)
   
             T0 = 0; /* force lookup of first TB */              T0 = 0; /* force lookup of first TB */
             for(;;) {              for(;;) {
 #ifdef __sparc__  #if defined(__sparc__) && !defined(HOST_SOLARIS)
                 /* g1 can be modified by some libc? functions */                   /* g1 can be modified by some libc? functions */ 
                 tmp_T0 = T0;                  tmp_T0 = T0;
 #endif        #endif      
Line 467  int cpu_exec(CPUState *env1) Line 471  int cpu_exec(CPUState *env1)
                         do_interrupt(intno, 0, 0, 0, 1);                          do_interrupt(intno, 0, 0, 0, 1);
                         /* ensure that no TB jump will be modified as                          /* ensure that no TB jump will be modified as
                            the program flow was changed */                             the program flow was changed */
 #ifdef __sparc__  #if defined(__sparc__) && !defined(HOST_SOLARIS)
                         tmp_T0 = 0;                          tmp_T0 = 0;
 #else  #else
                         T0 = 0;                          T0 = 0;
Line 486  int cpu_exec(CPUState *env1) Line 490  int cpu_exec(CPUState *env1)
                             env->error_code = 0;                              env->error_code = 0;
                             do_interrupt(env);                              do_interrupt(env);
                             env->interrupt_request &= ~CPU_INTERRUPT_HARD;                              env->interrupt_request &= ~CPU_INTERRUPT_HARD;
 #ifdef __sparc__  #if defined(__sparc__) && !defined(HOST_SOLARIS)
                             tmp_T0 = 0;                              tmp_T0 = 0;
 #else  #else
                             T0 = 0;                              T0 = 0;
Line 497  int cpu_exec(CPUState *env1) Line 501  int cpu_exec(CPUState *env1)
                             env->error_code = 0;                              env->error_code = 0;
                             do_interrupt(env);                              do_interrupt(env);
                             env->interrupt_request &= ~CPU_INTERRUPT_TIMER;                              env->interrupt_request &= ~CPU_INTERRUPT_TIMER;
 #ifdef __sparc__  #if defined(__sparc__) && !defined(HOST_SOLARIS)
                             tmp_T0 = 0;                              tmp_T0 = 0;
 #else  #else
                             T0 = 0;                              T0 = 0;
Line 516  int cpu_exec(CPUState *env1) Line 520  int cpu_exec(CPUState *env1)
                         env->error_code = 0;                          env->error_code = 0;
                         do_interrupt(env);                          do_interrupt(env);
                         env->interrupt_request &= ~CPU_INTERRUPT_HARD;                          env->interrupt_request &= ~CPU_INTERRUPT_HARD;
 #ifdef __sparc__  #if defined(__sparc__) && !defined(HOST_SOLARIS)
                         tmp_T0 = 0;                          tmp_T0 = 0;
 #else  #else
                         T0 = 0;                          T0 = 0;
Line 534  int cpu_exec(CPUState *env1) Line 538  int cpu_exec(CPUState *env1)
                             env->interrupt_request &= ~CPU_INTERRUPT_HARD;                              env->interrupt_request &= ~CPU_INTERRUPT_HARD;
                             do_interrupt(env->interrupt_index);                              do_interrupt(env->interrupt_index);
                             env->interrupt_index = 0;                              env->interrupt_index = 0;
 #ifdef __sparc__  #if defined(__sparc__) && !defined(HOST_SOLARIS)
                             tmp_T0 = 0;                              tmp_T0 = 0;
 #else  #else
                             T0 = 0;                              T0 = 0;
Line 561  int cpu_exec(CPUState *env1) Line 565  int cpu_exec(CPUState *env1)
 #elif defined(TARGET_SH4)  #elif defined(TARGET_SH4)
                     /* XXXXX */                      /* XXXXX */
 #endif  #endif
                      /* Don't use the cached interupt_request value,
                         do_interrupt may have updated the EXITTB flag. */
                     if (env->interrupt_request & CPU_INTERRUPT_EXITTB) {                      if (env->interrupt_request & CPU_INTERRUPT_EXITTB) {
                         env->interrupt_request &= ~CPU_INTERRUPT_EXITTB;                          env->interrupt_request &= ~CPU_INTERRUPT_EXITTB;
                         /* ensure that no TB jump will be modified as                          /* ensure that no TB jump will be modified as
                            the program flow was changed */                             the program flow was changed */
 #ifdef __sparc__  #if defined(__sparc__) && !defined(HOST_SOLARIS)
                         tmp_T0 = 0;                          tmp_T0 = 0;
 #else  #else
                         T0 = 0;                          T0 = 0;
Line 633  int cpu_exec(CPUState *env1) Line 639  int cpu_exec(CPUState *env1)
                             lookup_symbol(tb->pc));                              lookup_symbol(tb->pc));
                 }                  }
 #endif  #endif
 #ifdef __sparc__  #if defined(__sparc__) && !defined(HOST_SOLARIS)
                 T0 = tmp_T0;                  T0 = tmp_T0;
 #endif        #endif      
                 /* see if we can patch the calling TB. When the TB                  /* see if we can patch the calling TB. When the TB
Line 669  int cpu_exec(CPUState *env1) Line 675  int cpu_exec(CPUState *env1)
                                      "mov       %%o7,%%i0"                                       "mov       %%o7,%%i0"
                                      : /* no outputs */                                       : /* no outputs */
                                      : "r" (gen_func)                                        : "r" (gen_func) 
                                      : "i0", "i1", "i2", "i3", "i4", "i5");                                       : "i0", "i1", "i2", "i3", "i4", "i5",
                                          "l0", "l1", "l2", "l3", "l4", "l5",
                                          "l6", "l7");
 #elif defined(__arm__)  #elif defined(__arm__)
                 asm volatile ("mov pc, %0\n\t"                  asm volatile ("mov pc, %0\n\t"
                               ".global exec_loop\n\t"                                ".global exec_loop\n\t"
Line 834  int cpu_exec(CPUState *env1) Line 842  int cpu_exec(CPUState *env1)
 #else  #else
 #error unsupported target CPU  #error unsupported target CPU
 #endif  #endif
 #ifdef __sparc__  #if defined(__sparc__) && !defined(HOST_SOLARIS)
     asm volatile ("mov %0, %%i7" : : "r" (saved_i7));      asm volatile ("mov %0, %%i7" : : "r" (saved_i7));
 #endif  #endif
     T0 = saved_T0;      T0 = saved_T0;
Line 1168  static inline int handle_cpu_signal(unsi Line 1176  static inline int handle_cpu_signal(unsi
            a virtual CPU fault */             a virtual CPU fault */
         cpu_restore_state(tb, env, pc, puc);          cpu_restore_state(tb, env, pc, puc);
     }      }
     if (ret == 1) {  
 #if 0  #if 0
         printf("PF exception: NIP=0x%08x error=0x%x %p\n",           printf("PF exception: NIP=0x%08x error=0x%x %p\n", 
                env->nip, env->error_code, tb);                 env->nip, env->error_code, tb);
 #endif  #endif
     /* we restore the process signal mask as the sigreturn should      /* we restore the process signal mask as the sigreturn should
        do it (XXX: use sigsetjmp) */         do it (XXX: use sigsetjmp) */
         sigprocmask(SIG_SETMASK, old_set, NULL);      sigprocmask(SIG_SETMASK, old_set, NULL);
         //        do_raise_exception_err(env->exception_index, env->error_code);      cpu_loop_exit();
     } else {  
         /* activate soft MMU for this block */  
         cpu_resume_from_signal(env, puc);  
     }  
     /* never comes here */      /* never comes here */
     return 1;      return 1;
 }  }

Removed from v.1.1.1.3  
changed lines
  Added in v.1.1.1.4


unix.superglobalmegacorp.com