Diff for /qemu/target-ppc/translate_init.c between versions 1.1.1.5 and 1.1.1.6

version 1.1.1.5, 2018/04/24 16:54:23 version 1.1.1.6, 2018/04/24 17:25:30
Line 14 Line 14
  * Lesser General Public License for more details.   * Lesser General Public License for more details.
  *   *
  * You should have received a copy of the GNU Lesser General Public   * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software   * License along with this library; if not, see <http://www.gnu.org/licenses/>.
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA  02110-1301 USA  
  */   */
   
 /* A lot of PowerPC definition have been included here.  /* A lot of PowerPC definition have been included here.
Line 448  static void spr_write_pir (void *opaque, Line 447  static void spr_write_pir (void *opaque,
 }  }
 #endif  #endif
   
   /* SPE specific registers */
   static void spr_read_spefscr (void *opaque, int gprn, int sprn)
   {
       TCGv_i32 t0 = tcg_temp_new_i32();
       tcg_gen_ld_i32(t0, cpu_env, offsetof(CPUState, spe_fscr));
       tcg_gen_extu_i32_tl(cpu_gpr[gprn], t0);
       tcg_temp_free_i32(t0);
   }
   
   static void spr_write_spefscr (void *opaque, int sprn, int gprn)
   {
       TCGv_i32 t0 = tcg_temp_new_i32();
       tcg_gen_trunc_tl_i32(t0, cpu_gpr[gprn]);
       tcg_gen_st_i32(t0, cpu_env, offsetof(CPUState, spe_fscr));
       tcg_temp_free_i32(t0);
   }
   
 #if !defined(CONFIG_USER_ONLY)  #if !defined(CONFIG_USER_ONLY)
 /* Callback used to write the exception vector base */  /* Callback used to write the exception vector base */
 static void spr_write_excp_prefix (void *opaque, int sprn, int gprn)  static void spr_write_excp_prefix (void *opaque, int sprn, int gprn)
Line 457  static void spr_write_excp_prefix (void  Line 473  static void spr_write_excp_prefix (void 
     tcg_gen_and_tl(t0, t0, cpu_gpr[gprn]);      tcg_gen_and_tl(t0, t0, cpu_gpr[gprn]);
     tcg_gen_st_tl(t0, cpu_env, offsetof(CPUState, excp_prefix));      tcg_gen_st_tl(t0, cpu_env, offsetof(CPUState, excp_prefix));
     gen_store_spr(sprn, t0);      gen_store_spr(sprn, t0);
       tcg_temp_free(t0);
 }  }
   
 static void spr_write_excp_vector (void *opaque, int sprn, int gprn)  static void spr_write_excp_vector (void *opaque, int sprn, int gprn)
Line 2565  static void gen_spr_8xx (CPUPPCState *en Line 2582  static void gen_spr_8xx (CPUPPCState *en
  * HSRR1   => SPR 315 (Power 2.04 hypv)   * HSRR1   => SPR 315 (Power 2.04 hypv)
  * LPCR    => SPR 316 (970)   * LPCR    => SPR 316 (970)
  * LPIDR   => SPR 317 (970)   * LPIDR   => SPR 317 (970)
  * SPEFSCR => SPR 512 (Power 2.04 emb)  
  * EPR     => SPR 702 (Power 2.04 emb)   * EPR     => SPR 702 (Power 2.04 emb)
  * perf    => 768-783 (Power 2.04)   * perf    => 768-783 (Power 2.04)
  * perf    => 784-799 (Power 2.04)   * perf    => 784-799 (Power 2.04)
Line 2592  static void init_excp_4xx_real (CPUPPCSt Line 2608  static void init_excp_4xx_real (CPUPPCSt
     env->excp_vectors[POWERPC_EXCP_FIT]      = 0x00001010;      env->excp_vectors[POWERPC_EXCP_FIT]      = 0x00001010;
     env->excp_vectors[POWERPC_EXCP_WDT]      = 0x00001020;      env->excp_vectors[POWERPC_EXCP_WDT]      = 0x00001020;
     env->excp_vectors[POWERPC_EXCP_DEBUG]    = 0x00002000;      env->excp_vectors[POWERPC_EXCP_DEBUG]    = 0x00002000;
     env->excp_prefix = 0x00000000UL;      env->hreset_excp_prefix = 0x00000000UL;
     env->ivor_mask = 0x0000FFF0UL;      env->ivor_mask = 0x0000FFF0UL;
     env->ivpr_mask = 0xFFFF0000UL;      env->ivpr_mask = 0xFFFF0000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
Line 2617  static void init_excp_4xx_softmmu (CPUPP Line 2633  static void init_excp_4xx_softmmu (CPUPP
     env->excp_vectors[POWERPC_EXCP_DTLB]     = 0x00001100;      env->excp_vectors[POWERPC_EXCP_DTLB]     = 0x00001100;
     env->excp_vectors[POWERPC_EXCP_ITLB]     = 0x00001200;      env->excp_vectors[POWERPC_EXCP_ITLB]     = 0x00001200;
     env->excp_vectors[POWERPC_EXCP_DEBUG]    = 0x00002000;      env->excp_vectors[POWERPC_EXCP_DEBUG]    = 0x00002000;
     env->excp_prefix = 0x00000000UL;      env->hreset_excp_prefix = 0x00000000UL;
     env->ivor_mask = 0x0000FFF0UL;      env->ivor_mask = 0x0000FFF0UL;
     env->ivpr_mask = 0xFFFF0000UL;      env->ivpr_mask = 0xFFFF0000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
Line 2643  static void init_excp_MPC5xx (CPUPPCStat Line 2659  static void init_excp_MPC5xx (CPUPPCStat
     env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001C00;      env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001C00;
     env->excp_vectors[POWERPC_EXCP_MEXTBR]   = 0x00001E00;      env->excp_vectors[POWERPC_EXCP_MEXTBR]   = 0x00001E00;
     env->excp_vectors[POWERPC_EXCP_NMEXTBR]  = 0x00001F00;      env->excp_vectors[POWERPC_EXCP_NMEXTBR]  = 0x00001F00;
     env->excp_prefix = 0x00000000UL;      env->hreset_excp_prefix = 0x00000000UL;
     env->ivor_mask = 0x0000FFF0UL;      env->ivor_mask = 0x0000FFF0UL;
     env->ivpr_mask = 0xFFFF0000UL;      env->ivpr_mask = 0xFFFF0000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
Line 2675  static void init_excp_MPC8xx (CPUPPCStat Line 2691  static void init_excp_MPC8xx (CPUPPCStat
     env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001C00;      env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001C00;
     env->excp_vectors[POWERPC_EXCP_MEXTBR]   = 0x00001E00;      env->excp_vectors[POWERPC_EXCP_MEXTBR]   = 0x00001E00;
     env->excp_vectors[POWERPC_EXCP_NMEXTBR]  = 0x00001F00;      env->excp_vectors[POWERPC_EXCP_NMEXTBR]  = 0x00001F00;
     env->excp_prefix = 0x00000000UL;      env->hreset_excp_prefix = 0x00000000UL;
     env->ivor_mask = 0x0000FFF0UL;      env->ivor_mask = 0x0000FFF0UL;
     env->ivpr_mask = 0xFFFF0000UL;      env->ivpr_mask = 0xFFFF0000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
Line 2703  static void init_excp_G2 (CPUPPCState *e Line 2719  static void init_excp_G2 (CPUPPCState *e
     env->excp_vectors[POWERPC_EXCP_DSTLB]    = 0x00001200;      env->excp_vectors[POWERPC_EXCP_DSTLB]    = 0x00001200;
     env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;      env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
     env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;      env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
     env->excp_prefix = 0x00000000UL;      env->hreset_excp_prefix = 0x00000000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
     env->hreset_vector = 0xFFFFFFFCUL;      env->hreset_vector = 0xFFFFFFFCUL;
 #endif  #endif
Line 2732  static void init_excp_e200 (CPUPPCState  Line 2748  static void init_excp_e200 (CPUPPCState 
     env->excp_vectors[POWERPC_EXCP_SPEU]     = 0x00000000;      env->excp_vectors[POWERPC_EXCP_SPEU]     = 0x00000000;
     env->excp_vectors[POWERPC_EXCP_EFPDI]    = 0x00000000;      env->excp_vectors[POWERPC_EXCP_EFPDI]    = 0x00000000;
     env->excp_vectors[POWERPC_EXCP_EFPRI]    = 0x00000000;      env->excp_vectors[POWERPC_EXCP_EFPRI]    = 0x00000000;
     env->excp_prefix = 0x00000000UL;      env->hreset_excp_prefix = 0x00000000UL;
     env->ivor_mask = 0x0000FFF7UL;      env->ivor_mask = 0x0000FFF7UL;
     env->ivpr_mask = 0xFFFF0000UL;      env->ivpr_mask = 0xFFFF0000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
Line 2759  static void init_excp_BookE (CPUPPCState Line 2775  static void init_excp_BookE (CPUPPCState
     env->excp_vectors[POWERPC_EXCP_DTLB]     = 0x00000000;      env->excp_vectors[POWERPC_EXCP_DTLB]     = 0x00000000;
     env->excp_vectors[POWERPC_EXCP_ITLB]     = 0x00000000;      env->excp_vectors[POWERPC_EXCP_ITLB]     = 0x00000000;
     env->excp_vectors[POWERPC_EXCP_DEBUG]    = 0x00000000;      env->excp_vectors[POWERPC_EXCP_DEBUG]    = 0x00000000;
     env->excp_prefix = 0x00000000UL;      env->hreset_excp_prefix = 0x00000000UL;
     env->ivor_mask = 0x0000FFE0UL;      env->ivor_mask = 0x0000FFE0UL;
     env->ivpr_mask = 0xFFFF0000UL;      env->ivpr_mask = 0xFFFF0000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
Line 2782  static void init_excp_601 (CPUPPCState * Line 2798  static void init_excp_601 (CPUPPCState *
     env->excp_vectors[POWERPC_EXCP_IO]       = 0x00000A00;      env->excp_vectors[POWERPC_EXCP_IO]       = 0x00000A00;
     env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;      env->excp_vectors[POWERPC_EXCP_SYSCALL]  = 0x00000C00;
     env->excp_vectors[POWERPC_EXCP_RUNM]     = 0x00002000;      env->excp_vectors[POWERPC_EXCP_RUNM]     = 0x00002000;
     env->excp_prefix = 0xFFF00000UL;      env->hreset_excp_prefix = 0xFFF00000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
     env->hreset_vector = 0x00000100UL;      env->hreset_vector = 0x00000100UL;
 #endif  #endif
Line 2810  static void init_excp_602 (CPUPPCState * Line 2826  static void init_excp_602 (CPUPPCState *
     env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;      env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
     env->excp_vectors[POWERPC_EXCP_WDT]      = 0x00001500;      env->excp_vectors[POWERPC_EXCP_WDT]      = 0x00001500;
     env->excp_vectors[POWERPC_EXCP_EMUL]     = 0x00001600;      env->excp_vectors[POWERPC_EXCP_EMUL]     = 0x00001600;
     env->excp_prefix = 0xFFF00000UL;      env->hreset_excp_prefix = 0xFFF00000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
     env->hreset_vector = 0xFFFFFFFCUL;      env->hreset_vector = 0xFFFFFFFCUL;
 #endif  #endif
Line 2835  static void init_excp_603 (CPUPPCState * Line 2851  static void init_excp_603 (CPUPPCState *
     env->excp_vectors[POWERPC_EXCP_DSTLB]    = 0x00001200;      env->excp_vectors[POWERPC_EXCP_DSTLB]    = 0x00001200;
     env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;      env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
     env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;      env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
     env->excp_prefix = 0x00000000UL;      env->hreset_excp_prefix = 0x00000000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
     env->hreset_vector = 0xFFFFFFFCUL;      env->hreset_vector = 0xFFFFFFFCUL;
 #endif  #endif
Line 2858  static void init_excp_604 (CPUPPCState * Line 2874  static void init_excp_604 (CPUPPCState *
     env->excp_vectors[POWERPC_EXCP_PERFM]    = 0x00000F00;      env->excp_vectors[POWERPC_EXCP_PERFM]    = 0x00000F00;
     env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;      env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
     env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;      env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
     env->excp_prefix = 0x00000000UL;      env->hreset_excp_prefix = 0xFFF00000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
     env->hreset_vector = 0xFFFFFFFCUL;      env->hreset_vector = 0x00000100UL;
 #endif  #endif
 }  }
   
Line 2882  static void init_excp_620 (CPUPPCState * Line 2898  static void init_excp_620 (CPUPPCState *
     env->excp_vectors[POWERPC_EXCP_PERFM]    = 0x00000F00;      env->excp_vectors[POWERPC_EXCP_PERFM]    = 0x00000F00;
     env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;      env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
     env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;      env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
     env->excp_prefix = 0xFFF00000UL;      env->hreset_excp_prefix = 0xFFF00000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
     env->hreset_vector = 0x0000000000000100ULL;      env->hreset_vector = 0x0000000000000100ULL;
 #endif  #endif
Line 2907  static void init_excp_7x0 (CPUPPCState * Line 2923  static void init_excp_7x0 (CPUPPCState *
     env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;      env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
     env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;      env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
     env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;      env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;
     env->excp_prefix = 0x00000000UL;      env->hreset_excp_prefix = 0x00000000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
     env->hreset_vector = 0xFFFFFFFCUL;      env->hreset_vector = 0xFFFFFFFCUL;
 #endif  #endif
Line 2930  static void init_excp_750cl (CPUPPCState Line 2946  static void init_excp_750cl (CPUPPCState
     env->excp_vectors[POWERPC_EXCP_PERFM]    = 0x00000F00;      env->excp_vectors[POWERPC_EXCP_PERFM]    = 0x00000F00;
     env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;      env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
     env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;      env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
     env->excp_prefix = 0x00000000UL;      env->hreset_excp_prefix = 0x00000000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
     env->hreset_vector = 0xFFFFFFFCUL;      env->hreset_vector = 0xFFFFFFFCUL;
 #endif  #endif
Line 2953  static void init_excp_750cx (CPUPPCState Line 2969  static void init_excp_750cx (CPUPPCState
     env->excp_vectors[POWERPC_EXCP_PERFM]    = 0x00000F00;      env->excp_vectors[POWERPC_EXCP_PERFM]    = 0x00000F00;
     env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;      env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
     env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;      env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;
     env->excp_prefix = 0x00000000UL;      env->hreset_excp_prefix = 0x00000000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
     env->hreset_vector = 0xFFFFFFFCUL;      env->hreset_vector = 0xFFFFFFFCUL;
 #endif  #endif
Line 2981  static void init_excp_7x5 (CPUPPCState * Line 2997  static void init_excp_7x5 (CPUPPCState *
     env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;      env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
     env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;      env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
     env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;      env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;
     env->excp_prefix = 0x00000000UL;      env->hreset_excp_prefix = 0x00000000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
     env->hreset_vector = 0xFFFFFFFCUL;      env->hreset_vector = 0xFFFFFFFCUL;
 #endif  #endif
Line 3007  static void init_excp_7400 (CPUPPCState  Line 3023  static void init_excp_7400 (CPUPPCState 
     env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;      env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
     env->excp_vectors[POWERPC_EXCP_VPUA]     = 0x00001600;      env->excp_vectors[POWERPC_EXCP_VPUA]     = 0x00001600;
     env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;      env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001700;
     env->excp_prefix = 0x00000000UL;      env->hreset_excp_prefix = 0x00000000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
     env->hreset_vector = 0xFFFFFFFCUL;      env->hreset_vector = 0xFFFFFFFCUL;
 #endif  #endif
Line 3035  static void init_excp_7450 (CPUPPCState  Line 3051  static void init_excp_7450 (CPUPPCState 
     env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;      env->excp_vectors[POWERPC_EXCP_IABR]     = 0x00001300;
     env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;      env->excp_vectors[POWERPC_EXCP_SMI]      = 0x00001400;
     env->excp_vectors[POWERPC_EXCP_VPUA]     = 0x00001600;      env->excp_vectors[POWERPC_EXCP_VPUA]     = 0x00001600;
     env->excp_prefix = 0x00000000UL;      env->hreset_excp_prefix = 0x00000000UL;
     /* Hardware reset vector */      /* Hardware reset vector */
     env->hreset_vector = 0xFFFFFFFCUL;      env->hreset_vector = 0xFFFFFFFCUL;
 #endif  #endif
Line 3065  static void init_excp_970 (CPUPPCState * Line 3081  static void init_excp_970 (CPUPPCState *
     env->excp_vectors[POWERPC_EXCP_MAINT]    = 0x00001600;      env->excp_vectors[POWERPC_EXCP_MAINT]    = 0x00001600;
     env->excp_vectors[POWERPC_EXCP_VPUA]     = 0x00001700;      env->excp_vectors[POWERPC_EXCP_VPUA]     = 0x00001700;
     env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001800;      env->excp_vectors[POWERPC_EXCP_THERM]    = 0x00001800;
     env->excp_prefix   = 0x00000000FFF00000ULL;      env->hreset_excp_prefix = 0x00000000FFF00000ULL;
     /* Hardware reset vector */      /* Hardware reset vector */
     env->hreset_vector = 0x0000000000000100ULL;      env->hreset_vector = 0x0000000000000100ULL;
 #endif  #endif
Line 3364  static void init_proc_405 (CPUPPCState * Line 3380  static void init_proc_405 (CPUPPCState *
                               PPC_DCR | PPC_WRTEE | PPC_RFMCI |               \                                PPC_DCR | PPC_WRTEE | PPC_RFMCI |               \
                               PPC_CACHE | PPC_CACHE_ICBI |                    \                                PPC_CACHE | PPC_CACHE_ICBI |                    \
                               PPC_CACHE_DCBZ | PPC_CACHE_DCBA |               \                                PPC_CACHE_DCBZ | PPC_CACHE_DCBA |               \
                               PPC_MEM_TLBSYNC |                               \                                PPC_MEM_TLBSYNC | PPC_MFTB |                    \
                               PPC_BOOKE | PPC_4xx_COMMON | PPC_405_MAC |      \                                PPC_BOOKE | PPC_4xx_COMMON | PPC_405_MAC |      \
                               PPC_440_SPEC)                                PPC_440_SPEC)
 #define POWERPC_MSRM_440EP   (0x000000000006D630ULL)  #define POWERPC_MSRM_440EP   (0x000000000006D630ULL)
Line 3444  static void init_proc_440EP (CPUPPCState Line 3460  static void init_proc_440EP (CPUPPCState
                               PPC_DCR | PPC_DCRX | PPC_WRTEE | PPC_MFAPIDI |  \                                PPC_DCR | PPC_DCRX | PPC_WRTEE | PPC_MFAPIDI |  \
                               PPC_CACHE | PPC_CACHE_ICBI |                    \                                PPC_CACHE | PPC_CACHE_ICBI |                    \
                               PPC_CACHE_DCBZ | PPC_CACHE_DCBA |               \                                PPC_CACHE_DCBZ | PPC_CACHE_DCBA |               \
                               PPC_MEM_TLBSYNC | PPC_TLBIVA |                  \                                PPC_MEM_TLBSYNC | PPC_TLBIVA | PPC_MFTB |       \
                               PPC_BOOKE | PPC_4xx_COMMON | PPC_405_MAC |      \                                PPC_BOOKE | PPC_4xx_COMMON | PPC_405_MAC |      \
                               PPC_440_SPEC)                                PPC_440_SPEC)
 #define POWERPC_MSRM_440GP   (0x000000000006FF30ULL)  #define POWERPC_MSRM_440GP   (0x000000000006FF30ULL)
Line 3506  static void init_proc_440GP (CPUPPCState Line 3522  static void init_proc_440GP (CPUPPCState
                               PPC_DCR | PPC_WRTEE |                           \                                PPC_DCR | PPC_WRTEE |                           \
                               PPC_CACHE | PPC_CACHE_ICBI |                    \                                PPC_CACHE | PPC_CACHE_ICBI |                    \
                               PPC_CACHE_DCBZ | PPC_CACHE_DCBA |               \                                PPC_CACHE_DCBZ | PPC_CACHE_DCBA |               \
                               PPC_MEM_TLBSYNC |                               \                                PPC_MEM_TLBSYNC | PPC_MFTB |                    \
                               PPC_BOOKE | PPC_4xx_COMMON | PPC_405_MAC |      \                                PPC_BOOKE | PPC_4xx_COMMON | PPC_405_MAC |      \
                               PPC_440_SPEC)                                PPC_440_SPEC)
 #define POWERPC_MSRM_440x4   (0x000000000006FF30ULL)  #define POWERPC_MSRM_440x4   (0x000000000006FF30ULL)
Line 3568  static void init_proc_440x4 (CPUPPCState Line 3584  static void init_proc_440x4 (CPUPPCState
                               PPC_DCR | PPC_WRTEE | PPC_RFMCI |               \                                PPC_DCR | PPC_WRTEE | PPC_RFMCI |               \
                               PPC_CACHE | PPC_CACHE_ICBI |                    \                                PPC_CACHE | PPC_CACHE_ICBI |                    \
                               PPC_CACHE_DCBZ | PPC_CACHE_DCBA |               \                                PPC_CACHE_DCBZ | PPC_CACHE_DCBA |               \
                               PPC_MEM_TLBSYNC |                               \                                PPC_MEM_TLBSYNC | PPC_MFTB |                    \
                               PPC_BOOKE | PPC_4xx_COMMON | PPC_405_MAC |      \                                PPC_BOOKE | PPC_4xx_COMMON | PPC_405_MAC |      \
                               PPC_440_SPEC)                                PPC_440_SPEC)
 #define POWERPC_MSRM_440x5   (0x000000000006FF30ULL)  #define POWERPC_MSRM_440x5   (0x000000000006FF30ULL)
Line 3646  static void init_proc_440x5 (CPUPPCState Line 3662  static void init_proc_440x5 (CPUPPCState
 /* PowerPC 460 (guessed)                                                     */  /* PowerPC 460 (guessed)                                                     */
 #define POWERPC_INSNS_460    (PPC_INSNS_BASE | PPC_STRING |                   \  #define POWERPC_INSNS_460    (PPC_INSNS_BASE | PPC_STRING |                   \
                               PPC_DCR | PPC_DCRX  | PPC_DCRUX |               \                                PPC_DCR | PPC_DCRX  | PPC_DCRUX |               \
                               PPC_WRTEE | PPC_MFAPIDI |                       \                                PPC_WRTEE | PPC_MFAPIDI | PPC_MFTB |            \
                               PPC_CACHE | PPC_CACHE_ICBI |                    \                                PPC_CACHE | PPC_CACHE_ICBI |                    \
                               PPC_CACHE_DCBZ | PPC_CACHE_DCBA |               \                                PPC_CACHE_DCBZ | PPC_CACHE_DCBA |               \
                               PPC_MEM_TLBSYNC | PPC_TLBIVA |                  \                                PPC_MEM_TLBSYNC | PPC_TLBIVA |                  \
Line 3733  static void init_proc_460 (CPUPPCState * Line 3749  static void init_proc_460 (CPUPPCState *
 #define POWERPC_INSNS_460F   (PPC_INSNS_BASE | PPC_STRING |                   \  #define POWERPC_INSNS_460F   (PPC_INSNS_BASE | PPC_STRING |                   \
                               PPC_FLOAT | PPC_FLOAT_FRES | PPC_FLOAT_FSEL |   \                                PPC_FLOAT | PPC_FLOAT_FRES | PPC_FLOAT_FSEL |   \
                               PPC_FLOAT_FSQRT | PPC_FLOAT_FRSQRTE |           \                                PPC_FLOAT_FSQRT | PPC_FLOAT_FRSQRTE |           \
                               PPC_FLOAT_STFIWX |                              \                                PPC_FLOAT_STFIWX | PPC_MFTB |                   \
                               PPC_DCR | PPC_DCRX | PPC_DCRUX |                \                                PPC_DCR | PPC_DCRX | PPC_DCRUX |                \
                               PPC_WRTEE | PPC_MFAPIDI |                       \                                PPC_WRTEE | PPC_MFAPIDI |                       \
                               PPC_CACHE | PPC_CACHE_ICBI |                    \                                PPC_CACHE | PPC_CACHE_ICBI |                    \
Line 4021  static void init_proc_e200 (CPUPPCState  Line 4037  static void init_proc_e200 (CPUPPCState 
     gen_spr_BookE(env, 0x000000070000FFFFULL);      gen_spr_BookE(env, 0x000000070000FFFFULL);
     /* XXX : not implemented */      /* XXX : not implemented */
     spr_register(env, SPR_BOOKE_SPEFSCR, "SPEFSCR",      spr_register(env, SPR_BOOKE_SPEFSCR, "SPEFSCR",
                  SPR_NOACCESS, SPR_NOACCESS,                   &spr_read_spefscr, &spr_write_spefscr,
                  &spr_read_generic, &spr_write_generic,                   &spr_read_spefscr, &spr_write_spefscr,
                  0x00000000);                   0x00000000);
     /* Memory management */      /* Memory management */
     gen_spr_BookE_FSL(env, 0x0000005D);      gen_spr_BookE_FSL(env, 0x0000005D);
Line 4210  static void init_proc_e500 (CPUPPCState  Line 4226  static void init_proc_e500 (CPUPPCState 
                  0x00000000);                   0x00000000);
     /* XXX : not implemented */      /* XXX : not implemented */
     spr_register(env, SPR_BOOKE_SPEFSCR, "SPEFSCR",      spr_register(env, SPR_BOOKE_SPEFSCR, "SPEFSCR",
                  SPR_NOACCESS, SPR_NOACCESS,                   &spr_read_spefscr, &spr_write_spefscr,
                  &spr_read_generic, &spr_write_generic,                   &spr_read_spefscr, &spr_write_spefscr,
                  0x00000000);                   0x00000000);
     /* Memory management */      /* Memory management */
 #if !defined(CONFIG_USER_ONLY)  #if !defined(CONFIG_USER_ONLY)
Line 6043  static void init_proc_970FX (CPUPPCState Line 6059  static void init_proc_970FX (CPUPPCState
                  SPR_NOACCESS, SPR_NOACCESS,                   SPR_NOACCESS, SPR_NOACCESS,
                  &spr_read_hior, &spr_write_hior,                   &spr_read_hior, &spr_write_hior,
                  0x00000000);                   0x00000000);
       spr_register(env, SPR_CTRL, "SPR_CTRL",
                    SPR_NOACCESS, SPR_NOACCESS,
                    &spr_read_generic, &spr_write_generic,
                    0x00000000);
       spr_register(env, SPR_UCTRL, "SPR_UCTRL",
                    SPR_NOACCESS, SPR_NOACCESS,
                    &spr_read_generic, &spr_write_generic,
                    0x00000000);
       spr_register(env, SPR_VRSAVE, "SPR_VRSAVE",
                    &spr_read_generic, &spr_write_generic,
                    &spr_read_generic, &spr_write_generic,
                    0x00000000);
 #if !defined(CONFIG_USER_ONLY)  #if !defined(CONFIG_USER_ONLY)
     env->slb_nr = 32;      env->slb_nr = 64;
 #endif  #endif
     init_excp_970(env);      init_excp_970(env);
     env->dcache_line_size = 128;      env->dcache_line_size = 128;
Line 8863  static void init_ppc_proc (CPUPPCState * Line 8891  static void init_ppc_proc (CPUPPCState *
     /* Set all exception vectors to an invalid address */      /* Set all exception vectors to an invalid address */
     for (i = 0; i < POWERPC_EXCP_NB; i++)      for (i = 0; i < POWERPC_EXCP_NB; i++)
         env->excp_vectors[i] = (target_ulong)(-1ULL);          env->excp_vectors[i] = (target_ulong)(-1ULL);
     env->excp_prefix = 0x00000000;      env->hreset_excp_prefix = 0x00000000;
     env->ivor_mask = 0x00000000;      env->ivor_mask = 0x00000000;
     env->ivpr_mask = 0x00000000;      env->ivpr_mask = 0x00000000;
     /* Default MMU definitions */      /* Default MMU definitions */
Line 8874  static void init_ppc_proc (CPUPPCState * Line 8902  static void init_ppc_proc (CPUPPCState *
     /* Register SPR common to all PowerPC implementations */      /* Register SPR common to all PowerPC implementations */
     gen_spr_generic(env);      gen_spr_generic(env);
     spr_register(env, SPR_PVR, "PVR",      spr_register(env, SPR_PVR, "PVR",
                  SPR_NOACCESS, SPR_NOACCESS,                   /* Linux permits userspace to read PVR */
   #if defined(CONFIG_LINUX_USER)
                    &spr_read_generic,
   #else
                    SPR_NOACCESS,
   #endif
                    SPR_NOACCESS,
                  &spr_read_generic, SPR_NOACCESS,                   &spr_read_generic, SPR_NOACCESS,
                  def->pvr);                   def->pvr);
     /* Register SVR if it's defined to anything else than POWERPC_SVR_NONE */      /* Register SVR if it's defined to anything else than POWERPC_SVR_NONE */
Line 8893  static void init_ppc_proc (CPUPPCState * Line 8927  static void init_ppc_proc (CPUPPCState *
     }      }
     /* PowerPC implementation specific initialisations (SPRs, timers, ...) */      /* PowerPC implementation specific initialisations (SPRs, timers, ...) */
     (*def->init_proc)(env);      (*def->init_proc)(env);
   #if !defined(CONFIG_USER_ONLY)
       env->excp_prefix = env->hreset_excp_prefix;
   #endif
     /* MSR bits & flags consistency checks */      /* MSR bits & flags consistency checks */
     if (env->msr_mask & (1 << 25)) {      if (env->msr_mask & (1 << 25)) {
         switch (env->flags & (POWERPC_FLAG_SPE | POWERPC_FLAG_VRE)) {          switch (env->flags & (POWERPC_FLAG_SPE | POWERPC_FLAG_VRE)) {
Line 9228  static void fix_opcode_tables (opc_handl Line 9265  static void fix_opcode_tables (opc_handl
 /*****************************************************************************/  /*****************************************************************************/
 static int create_ppc_opcodes (CPUPPCState *env, const ppc_def_t *def)  static int create_ppc_opcodes (CPUPPCState *env, const ppc_def_t *def)
 {  {
     opcode_t *opc, *start, *end;      opcode_t *opc;
   
     fill_new_table(env->opcodes, 0x40);      fill_new_table(env->opcodes, 0x40);
     if (&opc_start < &opc_end) {      for (opc = opcodes; opc < &opcodes[ARRAY_SIZE(opcodes)]; opc++) {
         start = &opc_start;  
         end = &opc_end;  
     } else {  
         start = &opc_end;  
         end = &opc_start;  
     }  
     for (opc = start + 1; opc != end; opc++) {  
         if ((opc->handler.type & def->insns_flags) != 0) {          if ((opc->handler.type & def->insns_flags) != 0) {
             if (register_insn(env->opcodes, opc) < 0) {              if (register_insn(env->opcodes, opc) < 0) {
                 printf("*** ERROR initializing PowerPC instruction "                  printf("*** ERROR initializing PowerPC instruction "
Line 9367  static int gdb_get_avr_reg(CPUState *env Line 9397  static int gdb_get_avr_reg(CPUState *env
 #endif  #endif
         return 16;          return 16;
     }      }
     if (n == 33) {      if (n == 32) {
         stl_p(mem_buf, env->vscr);          stl_p(mem_buf, env->vscr);
         return 4;          return 4;
     }      }
     if (n == 34) {      if (n == 33) {
         stl_p(mem_buf, (uint32_t)env->spr[SPR_VRSAVE]);          stl_p(mem_buf, (uint32_t)env->spr[SPR_VRSAVE]);
         return 4;          return 4;
     }      }
Line 9390  static int gdb_set_avr_reg(CPUState *env Line 9420  static int gdb_set_avr_reg(CPUState *env
 #endif  #endif
         return 16;          return 16;
     }      }
     if (n == 33) {      if (n == 32) {
         env->vscr = ldl_p(mem_buf);          env->vscr = ldl_p(mem_buf);
         return 4;          return 4;
     }      }
     if (n == 34) {      if (n == 33) {
         env->spr[SPR_VRSAVE] = (target_ulong)ldl_p(mem_buf);          env->spr[SPR_VRSAVE] = (target_ulong)ldl_p(mem_buf);
         return 4;          return 4;
     }      }
Line 9411  static int gdb_get_spe_reg(CPUState *env Line 9441  static int gdb_get_spe_reg(CPUState *env
 #endif  #endif
         return 4;          return 4;
     }      }
     if (n == 33) {      if (n == 32) {
         stq_p(mem_buf, env->spe_acc);          stq_p(mem_buf, env->spe_acc);
         return 8;          return 8;
     }      }
     if (n == 34) {      if (n == 33) {
         /* SPEFSCR not implemented */          stl_p(mem_buf, env->spe_fscr);
         memset(mem_buf, 0, 4);  
         return 4;          return 4;
     }      }
     return 0;      return 0;
Line 9435  static int gdb_set_spe_reg(CPUState *env Line 9464  static int gdb_set_spe_reg(CPUState *env
 #endif  #endif
         return 4;          return 4;
     }      }
     if (n == 33) {      if (n == 32) {
         env->spe_acc = ldq_p(mem_buf);          env->spe_acc = ldq_p(mem_buf);
         return 8;          return 8;
     }      }
     if (n == 34) {      if (n == 33) {
         /* SPEFSCR not implemented */          env->spe_fscr = ldl_p(mem_buf);
         return 4;          return 4;
     }      }
     return 0;      return 0;
Line 9452  int cpu_ppc_register_internal (CPUPPCSta Line 9481  int cpu_ppc_register_internal (CPUPPCSta
     env->mmu_model = def->mmu_model;      env->mmu_model = def->mmu_model;
     env->excp_model = def->excp_model;      env->excp_model = def->excp_model;
     env->bus_model = def->bus_model;      env->bus_model = def->bus_model;
       env->insns_flags = def->insns_flags;
     env->flags = def->flags;      env->flags = def->flags;
     env->bfd_mach = def->bfd_mach;      env->bfd_mach = def->bfd_mach;
     env->check_pow = def->check_pow;      env->check_pow = def->check_pow;

Removed from v.1.1.1.5  
changed lines
  Added in v.1.1.1.6


unix.superglobalmegacorp.com