Commit d26bfc9a1b449db84b80d39ed9d870671a944e5c
1 parent
7875ed20
Add MSR bits signification per PowerPC implementation flags (to be continued).
As a side effect, single step and branch step are available again. Remove irrelevant MSR bits definitions. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3342 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
4 changed files
with
122 additions
and
61 deletions
target-ppc/cpu.h
@@ -347,40 +347,37 @@ union ppc_tlb_t { | @@ -347,40 +347,37 @@ union ppc_tlb_t { | ||
347 | #define MSR_CM 31 /* Computation mode for BookE hflags */ | 347 | #define MSR_CM 31 /* Computation mode for BookE hflags */ |
348 | #define MSR_ICM 30 /* Interrupt computation mode for BookE */ | 348 | #define MSR_ICM 30 /* Interrupt computation mode for BookE */ |
349 | #define MSR_UCLE 26 /* User-mode cache lock enable for BookE */ | 349 | #define MSR_UCLE 26 /* User-mode cache lock enable for BookE */ |
350 | -#define MSR_VR 25 /* altivec available hflags */ | ||
351 | -#define MSR_SPE 25 /* SPE enable for BookE hflags */ | 350 | +#define MSR_VR 25 /* altivec available x hflags */ |
351 | +#define MSR_SPE 25 /* SPE enable for BookE x hflags */ | ||
352 | #define MSR_AP 23 /* Access privilege state on 602 hflags */ | 352 | #define MSR_AP 23 /* Access privilege state on 602 hflags */ |
353 | #define MSR_SA 22 /* Supervisor access mode on 602 hflags */ | 353 | #define MSR_SA 22 /* Supervisor access mode on 602 hflags */ |
354 | #define MSR_KEY 19 /* key bit on 603e */ | 354 | #define MSR_KEY 19 /* key bit on 603e */ |
355 | -#define MSR_POW 18 /* Power management */ | ||
356 | -#define MSR_WE 18 /* Wait state enable on embedded PowerPC */ | ||
357 | -#define MSR_TGPR 17 /* TGPR usage on 602/603 */ | ||
358 | -#define MSR_TLB 17 /* TLB update on ? */ | ||
359 | -#define MSR_CE 17 /* Critical interrupt enable on embedded PowerPC */ | 355 | +#define MSR_POW 18 /* Power management x */ |
356 | +#define MSR_WE 18 /* Wait state enable on embedded PowerPC x */ | ||
357 | +#define MSR_TGPR 17 /* TGPR usage on 602/603 x */ | ||
358 | +#define MSR_CE 17 /* Critical interrupt enable on embedded PowerPC x */ | ||
360 | #define MSR_ILE 16 /* Interrupt little-endian mode */ | 359 | #define MSR_ILE 16 /* Interrupt little-endian mode */ |
361 | #define MSR_EE 15 /* External interrupt enable */ | 360 | #define MSR_EE 15 /* External interrupt enable */ |
362 | #define MSR_PR 14 /* Problem state hflags */ | 361 | #define MSR_PR 14 /* Problem state hflags */ |
363 | #define MSR_FP 13 /* Floating point available hflags */ | 362 | #define MSR_FP 13 /* Floating point available hflags */ |
364 | #define MSR_ME 12 /* Machine check interrupt enable */ | 363 | #define MSR_ME 12 /* Machine check interrupt enable */ |
365 | #define MSR_FE0 11 /* Floating point exception mode 0 hflags */ | 364 | #define MSR_FE0 11 /* Floating point exception mode 0 hflags */ |
366 | -#define MSR_SE 10 /* Single-step trace enable hflags */ | ||
367 | -#define MSR_DWE 10 /* Debug wait enable on 405 */ | ||
368 | -#define MSR_UBLE 10 /* User BTB lock enable on e500 */ | ||
369 | -#define MSR_BE 9 /* Branch trace enable hflags */ | ||
370 | -#define MSR_DE 9 /* Debug interrupts enable on embedded PowerPC */ | 365 | +#define MSR_SE 10 /* Single-step trace enable x hflags */ |
366 | +#define MSR_DWE 10 /* Debug wait enable on 405 x */ | ||
367 | +#define MSR_UBLE 10 /* User BTB lock enable on e500 x */ | ||
368 | +#define MSR_BE 9 /* Branch trace enable x hflags */ | ||
369 | +#define MSR_DE 9 /* Debug interrupts enable on embedded PowerPC x */ | ||
371 | #define MSR_FE1 8 /* Floating point exception mode 1 hflags */ | 370 | #define MSR_FE1 8 /* Floating point exception mode 1 hflags */ |
372 | #define MSR_AL 7 /* AL bit on POWER */ | 371 | #define MSR_AL 7 /* AL bit on POWER */ |
373 | #define MSR_IP 6 /* Interrupt prefix */ | 372 | #define MSR_IP 6 /* Interrupt prefix */ |
374 | #define MSR_IR 5 /* Instruction relocate */ | 373 | #define MSR_IR 5 /* Instruction relocate */ |
375 | -#define MSR_IS 5 /* Instruction address space on embedded PowerPC */ | ||
376 | #define MSR_DR 4 /* Data relocate */ | 374 | #define MSR_DR 4 /* Data relocate */ |
377 | -#define MSR_DS 4 /* Data address space on embedded PowerPC */ | ||
378 | -#define MSR_PE 3 /* Protection enable on 403 */ | ||
379 | -#define MSR_EP 3 /* Exception prefix on 601 */ | ||
380 | -#define MSR_PX 2 /* Protection exclusive on 403 */ | ||
381 | -#define MSR_PMM 2 /* Performance monitor mark on POWER */ | ||
382 | -#define MSR_RI 1 /* Recoverable interrupt */ | ||
383 | -#define MSR_LE 0 /* Little-endian mode hflags */ | 375 | +#define MSR_PE 3 /* Protection enable on 403 x */ |
376 | +#define MSR_EP 3 /* Exception prefix on 601 x */ | ||
377 | +#define MSR_PX 2 /* Protection exclusive on 403 x */ | ||
378 | +#define MSR_PMM 2 /* Performance monitor mark on POWER x */ | ||
379 | +#define MSR_RI 1 /* Recoverable interrupt 1 */ | ||
380 | +#define MSR_LE 0 /* Little-endian mode 1 hflags */ | ||
384 | #define msr_sf env->msr[MSR_SF] | 381 | #define msr_sf env->msr[MSR_SF] |
385 | #define msr_isf env->msr[MSR_ISF] | 382 | #define msr_isf env->msr[MSR_ISF] |
386 | #define msr_hv env->msr[MSR_HV] | 383 | #define msr_hv env->msr[MSR_HV] |
@@ -395,7 +392,6 @@ union ppc_tlb_t { | @@ -395,7 +392,6 @@ union ppc_tlb_t { | ||
395 | #define msr_pow env->msr[MSR_POW] | 392 | #define msr_pow env->msr[MSR_POW] |
396 | #define msr_we env->msr[MSR_WE] | 393 | #define msr_we env->msr[MSR_WE] |
397 | #define msr_tgpr env->msr[MSR_TGPR] | 394 | #define msr_tgpr env->msr[MSR_TGPR] |
398 | -#define msr_tlb env->msr[MSR_TLB] | ||
399 | #define msr_ce env->msr[MSR_CE] | 395 | #define msr_ce env->msr[MSR_CE] |
400 | #define msr_ile env->msr[MSR_ILE] | 396 | #define msr_ile env->msr[MSR_ILE] |
401 | #define msr_ee env->msr[MSR_EE] | 397 | #define msr_ee env->msr[MSR_EE] |
@@ -412,9 +408,7 @@ union ppc_tlb_t { | @@ -412,9 +408,7 @@ union ppc_tlb_t { | ||
412 | #define msr_al env->msr[MSR_AL] | 408 | #define msr_al env->msr[MSR_AL] |
413 | #define msr_ip env->msr[MSR_IP] | 409 | #define msr_ip env->msr[MSR_IP] |
414 | #define msr_ir env->msr[MSR_IR] | 410 | #define msr_ir env->msr[MSR_IR] |
415 | -#define msr_is env->msr[MSR_IS] | ||
416 | #define msr_dr env->msr[MSR_DR] | 411 | #define msr_dr env->msr[MSR_DR] |
417 | -#define msr_ds env->msr[MSR_DS] | ||
418 | #define msr_pe env->msr[MSR_PE] | 412 | #define msr_pe env->msr[MSR_PE] |
419 | #define msr_ep env->msr[MSR_EP] | 413 | #define msr_ep env->msr[MSR_EP] |
420 | #define msr_px env->msr[MSR_PX] | 414 | #define msr_px env->msr[MSR_PX] |
@@ -422,6 +416,33 @@ union ppc_tlb_t { | @@ -422,6 +416,33 @@ union ppc_tlb_t { | ||
422 | #define msr_ri env->msr[MSR_RI] | 416 | #define msr_ri env->msr[MSR_RI] |
423 | #define msr_le env->msr[MSR_LE] | 417 | #define msr_le env->msr[MSR_LE] |
424 | 418 | ||
419 | +enum { | ||
420 | + /* Beware that MSR bits are given using IBM standard (ie MSB is 0 !) */ | ||
421 | + POWERPC_FLAG_NONE = 0x00000000, | ||
422 | + /* Flag for MSR bit 25 signification (VRE/SPE) */ | ||
423 | + POWERPC_FLAG_SPE = 0x00000001, | ||
424 | + POWERPC_FLAG_VRE = 0x00000002, | ||
425 | + /* Flag for MSR bit 18 may not be needed... */ | ||
426 | + POWERPC_FLAG_POW = 0x00000004, | ||
427 | + POWERPC_FLAG_WE = 0x00000008, | ||
428 | + /* Flag for MSR bit 17 signification (TGPR/CE) */ | ||
429 | + POWERPC_FLAG_TGPR = 0x00000010, | ||
430 | + POWERPC_FLAG_CE = 0x00000020, | ||
431 | + /* Flag for MSR bit 10 signification (SE/DWE/UBLE) */ | ||
432 | + POWERPC_FLAG_SE = 0x00000040, | ||
433 | + POWERPC_FLAG_DWE = 0x00000080, | ||
434 | + POWERPC_FLAG_UBLE = 0x00000100, | ||
435 | + /* Flag for MSR bit 9 signification (BE/DE) */ | ||
436 | + POWERPC_FLAG_BE = 0x00000200, | ||
437 | + POWERPC_FLAG_DE = 0x00000400, | ||
438 | + /* Flag for MSR bit 3 signification (PE/EP) */ | ||
439 | + POWERPC_FLAG_PE = 0x00000800, | ||
440 | + POWERPC_FLAG_EP = 0x00001000, | ||
441 | + /* Flag for MSR but 2 signification (PX/PMM) */ | ||
442 | + POWERPC_FLAG_PX = 0x00002000, | ||
443 | + POWERPC_FLAG_PMM = 0x00004000, | ||
444 | +}; | ||
445 | + | ||
425 | /*****************************************************************************/ | 446 | /*****************************************************************************/ |
426 | /* The whole PowerPC CPU context */ | 447 | /* The whole PowerPC CPU context */ |
427 | struct CPUPPCState { | 448 | struct CPUPPCState { |
target-ppc/helper.c
@@ -1183,7 +1183,7 @@ int mmubooke_get_physical_address (CPUState *env, mmu_ctx_t *ctx, | @@ -1183,7 +1183,7 @@ int mmubooke_get_physical_address (CPUState *env, mmu_ctx_t *ctx, | ||
1183 | prot = (tlb->prot >> 4) & 0xF; | 1183 | prot = (tlb->prot >> 4) & 0xF; |
1184 | /* Check the address space */ | 1184 | /* Check the address space */ |
1185 | if (access_type == ACCESS_CODE) { | 1185 | if (access_type == ACCESS_CODE) { |
1186 | - if (msr_is != (tlb->attr & 1)) | 1186 | + if (msr_ir != (tlb->attr & 1)) |
1187 | continue; | 1187 | continue; |
1188 | ctx->prot = prot; | 1188 | ctx->prot = prot; |
1189 | if (prot & PAGE_EXEC) { | 1189 | if (prot & PAGE_EXEC) { |
@@ -1192,7 +1192,7 @@ int mmubooke_get_physical_address (CPUState *env, mmu_ctx_t *ctx, | @@ -1192,7 +1192,7 @@ int mmubooke_get_physical_address (CPUState *env, mmu_ctx_t *ctx, | ||
1192 | } | 1192 | } |
1193 | ret = -3; | 1193 | ret = -3; |
1194 | } else { | 1194 | } else { |
1195 | - if (msr_ds != (tlb->attr & 1)) | 1195 | + if (msr_dr != (tlb->attr & 1)) |
1196 | continue; | 1196 | continue; |
1197 | ctx->prot = prot; | 1197 | ctx->prot = prot; |
1198 | if ((!rw && prot & PAGE_READ) || (rw && (prot & PAGE_WRITE))) { | 1198 | if ((!rw && prot & PAGE_READ) || (rw && (prot & PAGE_WRITE))) { |
@@ -1964,7 +1964,7 @@ target_ulong do_load_msr (CPUPPCState *env) | @@ -1964,7 +1964,7 @@ target_ulong do_load_msr (CPUPPCState *env) | ||
1964 | ((target_ulong)msr_sa << MSR_SA) | | 1964 | ((target_ulong)msr_sa << MSR_SA) | |
1965 | ((target_ulong)msr_key << MSR_KEY) | | 1965 | ((target_ulong)msr_key << MSR_KEY) | |
1966 | ((target_ulong)msr_pow << MSR_POW) | /* POW / WE */ | 1966 | ((target_ulong)msr_pow << MSR_POW) | /* POW / WE */ |
1967 | - ((target_ulong)msr_tlb << MSR_TLB) | /* TLB / TGPE / CE */ | 1967 | + ((target_ulong)msr_tgpr << MSR_TGPR) | /* TGPR / CE */ |
1968 | ((target_ulong)msr_ile << MSR_ILE) | | 1968 | ((target_ulong)msr_ile << MSR_ILE) | |
1969 | ((target_ulong)msr_ee << MSR_EE) | | 1969 | ((target_ulong)msr_ee << MSR_EE) | |
1970 | ((target_ulong)msr_pr << MSR_PR) | | 1970 | ((target_ulong)msr_pr << MSR_PR) | |
@@ -2000,18 +2000,10 @@ int do_store_msr (CPUPPCState *env, target_ulong value) | @@ -2000,18 +2000,10 @@ int do_store_msr (CPUPPCState *env, target_ulong value) | ||
2000 | fprintf(logfile, "%s: T0 %08lx\n", __func__, value); | 2000 | fprintf(logfile, "%s: T0 %08lx\n", __func__, value); |
2001 | } | 2001 | } |
2002 | #endif | 2002 | #endif |
2003 | - switch (env->excp_model) { | ||
2004 | - case POWERPC_EXCP_602: | ||
2005 | - case POWERPC_EXCP_603: | ||
2006 | - case POWERPC_EXCP_603E: | ||
2007 | - case POWERPC_EXCP_G2: | ||
2008 | - if (((value >> MSR_TGPR) & 1) != msr_tgpr) { | ||
2009 | - /* Swap temporary saved registers with GPRs */ | ||
2010 | - swap_gpr_tgpr(env); | ||
2011 | - } | ||
2012 | - break; | ||
2013 | - default: | ||
2014 | - break; | 2003 | + if (unlikely((env->flags & POWERPC_FLAG_TGPR) && |
2004 | + ((value >> MSR_TGPR) & 1) != msr_tgpr)) { | ||
2005 | + /* Swap temporary saved registers with GPRs */ | ||
2006 | + swap_gpr_tgpr(env); | ||
2015 | } | 2007 | } |
2016 | #if defined (TARGET_PPC64) | 2008 | #if defined (TARGET_PPC64) |
2017 | msr_sf = (value >> MSR_SF) & 1; | 2009 | msr_sf = (value >> MSR_SF) & 1; |
@@ -2024,7 +2016,7 @@ int do_store_msr (CPUPPCState *env, target_ulong value) | @@ -2024,7 +2016,7 @@ int do_store_msr (CPUPPCState *env, target_ulong value) | ||
2024 | msr_sa = (value >> MSR_SA) & 1; | 2016 | msr_sa = (value >> MSR_SA) & 1; |
2025 | msr_key = (value >> MSR_KEY) & 1; | 2017 | msr_key = (value >> MSR_KEY) & 1; |
2026 | msr_pow = (value >> MSR_POW) & 1; /* POW / WE */ | 2018 | msr_pow = (value >> MSR_POW) & 1; /* POW / WE */ |
2027 | - msr_tlb = (value >> MSR_TLB) & 1; /* TLB / TGPR / CE */ | 2019 | + msr_tgpr = (value >> MSR_TGPR) & 1; /* TGPR / CE */ |
2028 | msr_ile = (value >> MSR_ILE) & 1; | 2020 | msr_ile = (value >> MSR_ILE) & 1; |
2029 | msr_ee = (value >> MSR_EE) & 1; | 2021 | msr_ee = (value >> MSR_EE) & 1; |
2030 | msr_pr = (value >> MSR_PR) & 1; | 2022 | msr_pr = (value >> MSR_PR) & 1; |
target-ppc/translate.c
@@ -6514,6 +6514,7 @@ static inline int gen_intermediate_code_internal (CPUState *env, | @@ -6514,6 +6514,7 @@ static inline int gen_intermediate_code_internal (CPUState *env, | ||
6514 | target_ulong pc_start; | 6514 | target_ulong pc_start; |
6515 | uint16_t *gen_opc_end; | 6515 | uint16_t *gen_opc_end; |
6516 | int supervisor; | 6516 | int supervisor; |
6517 | + int single_step, branch_step; | ||
6517 | int j, lj = -1; | 6518 | int j, lj = -1; |
6518 | 6519 | ||
6519 | pc_start = tb->pc; | 6520 | pc_start = tb->pc; |
@@ -6545,9 +6546,20 @@ static inline int gen_intermediate_code_internal (CPUState *env, | @@ -6545,9 +6546,20 @@ static inline int gen_intermediate_code_internal (CPUState *env, | ||
6545 | ctx.dcache_line_size = env->dcache_line_size; | 6546 | ctx.dcache_line_size = env->dcache_line_size; |
6546 | ctx.fpu_enabled = msr_fp; | 6547 | ctx.fpu_enabled = msr_fp; |
6547 | #if defined(TARGET_PPCEMB) | 6548 | #if defined(TARGET_PPCEMB) |
6548 | - ctx.spe_enabled = msr_spe; | 6549 | + if (env->flags & POWERPC_FLAG_SPE) |
6550 | + ctx.spe_enabled = msr_spe; | ||
6551 | + else | ||
6552 | + ctx.spe_enabled = 0; | ||
6549 | #endif | 6553 | #endif |
6550 | - ctx.singlestep_enabled = env->singlestep_enabled; | 6554 | + if ((env->flags & POWERPC_FLAG_SE) && msr_se) |
6555 | + single_step = 1; | ||
6556 | + else | ||
6557 | + single_step = 0; | ||
6558 | + if ((env->flags & POWERPC_FLAG_BE) && msr_be) | ||
6559 | + branch_step = 1; | ||
6560 | + else | ||
6561 | + branch_step = 0; | ||
6562 | + ctx.singlestep_enabled = env->singlestep_enabled || single_step == 1;; | ||
6551 | #if defined (DO_SINGLE_STEP) && 0 | 6563 | #if defined (DO_SINGLE_STEP) && 0 |
6552 | /* Single step trace mode */ | 6564 | /* Single step trace mode */ |
6553 | msr_se = 1; | 6565 | msr_se = 1; |
@@ -6642,30 +6654,24 @@ static inline int gen_intermediate_code_internal (CPUState *env, | @@ -6642,30 +6654,24 @@ static inline int gen_intermediate_code_internal (CPUState *env, | ||
6642 | handler->count++; | 6654 | handler->count++; |
6643 | #endif | 6655 | #endif |
6644 | /* Check trace mode exceptions */ | 6656 | /* Check trace mode exceptions */ |
6645 | -#if 0 // XXX: buggy on embedded PowerPC | ||
6646 | - if (unlikely((msr_be && ctx.exception == POWERPC_EXCP_BRANCH) || | ||
6647 | - /* Check in single step trace mode | ||
6648 | - * we need to stop except if: | ||
6649 | - * - rfi, trap or syscall | ||
6650 | - * - first instruction of an exception handler | ||
6651 | - */ | ||
6652 | - (msr_se && (ctx.nip < 0x100 || | ||
6653 | - ctx.nip > 0xF00 || | ||
6654 | - (ctx.nip & 0xFC) != 0x04) && | 6657 | + if (unlikely(branch_step != 0 && |
6658 | + ctx.exception == POWERPC_EXCP_BRANCH)) { | ||
6659 | + GEN_EXCP(ctxp, POWERPC_EXCP_TRACE, 0); | ||
6660 | + } else if (unlikely(single_step != 0 && | ||
6661 | + (ctx.nip <= 0x100 || ctx.nip > 0xF00 || | ||
6662 | + (ctx.nip & 0xFC) != 0x04) && | ||
6655 | #if defined(CONFIG_USER_ONLY) | 6663 | #if defined(CONFIG_USER_ONLY) |
6656 | - ctx.exception != POWERPC_EXCP_SYSCALL_USER && | 6664 | + ctx.exception != POWERPC_EXCP_SYSCALL_USER && |
6657 | #else | 6665 | #else |
6658 | - ctx.exception != POWERPC_EXCP_SYSCALL && | 6666 | + ctx.exception != POWERPC_EXCP_SYSCALL && |
6659 | #endif | 6667 | #endif |
6660 | - ctx.exception != POWERPC_EXCP_TRAP))) { | 6668 | + ctx.exception != POWERPC_EXCP_TRAP)) { |
6661 | GEN_EXCP(ctxp, POWERPC_EXCP_TRACE, 0); | 6669 | GEN_EXCP(ctxp, POWERPC_EXCP_TRACE, 0); |
6662 | - } | ||
6663 | -#endif | ||
6664 | - /* if we reach a page boundary or are single stepping, stop | ||
6665 | - * generation | ||
6666 | - */ | ||
6667 | - if (unlikely(((ctx.nip & (TARGET_PAGE_SIZE - 1)) == 0) || | ||
6668 | - (env->singlestep_enabled))) { | 6670 | + } else if (unlikely(((ctx.nip & (TARGET_PAGE_SIZE - 1)) == 0) || |
6671 | + (env->singlestep_enabled))) { | ||
6672 | + /* if we reach a page boundary or are single stepping, stop | ||
6673 | + * generation | ||
6674 | + */ | ||
6669 | break; | 6675 | break; |
6670 | } | 6676 | } |
6671 | #if defined (DO_SINGLE_STEP) | 6677 | #if defined (DO_SINGLE_STEP) |
target-ppc/translate_init.c
@@ -39,6 +39,7 @@ struct ppc_def_t { | @@ -39,6 +39,7 @@ struct ppc_def_t { | ||
39 | uint8_t excp_model; | 39 | uint8_t excp_model; |
40 | uint8_t bus_model; | 40 | uint8_t bus_model; |
41 | uint8_t pad; | 41 | uint8_t pad; |
42 | + uint32_t flags; | ||
42 | int bfd_mach; | 43 | int bfd_mach; |
43 | void (*init_proc)(CPUPPCState *env); | 44 | void (*init_proc)(CPUPPCState *env); |
44 | }; | 45 | }; |
@@ -2581,6 +2582,7 @@ static void init_excp_970 (CPUPPCState *env) | @@ -2581,6 +2582,7 @@ static void init_excp_970 (CPUPPCState *env) | ||
2581 | #define POWERPC_EXCP_401 (POWERPC_EXCP_40x) | 2582 | #define POWERPC_EXCP_401 (POWERPC_EXCP_40x) |
2582 | #define POWERPC_INPUT_401 (PPC_FLAGS_INPUT_401) | 2583 | #define POWERPC_INPUT_401 (PPC_FLAGS_INPUT_401) |
2583 | #define POWERPC_BFDM_401 (bfd_mach_ppc_403) | 2584 | #define POWERPC_BFDM_401 (bfd_mach_ppc_403) |
2585 | +#define POWERPC_FLAG_401 (POWERPC_FLAG_NONE) | ||
2584 | 2586 | ||
2585 | static void init_proc_401 (CPUPPCState *env) | 2587 | static void init_proc_401 (CPUPPCState *env) |
2586 | { | 2588 | { |
@@ -2605,6 +2607,7 @@ static void init_proc_401 (CPUPPCState *env) | @@ -2605,6 +2607,7 @@ static void init_proc_401 (CPUPPCState *env) | ||
2605 | #define POWERPC_EXCP_401x2 (POWERPC_EXCP_40x) | 2607 | #define POWERPC_EXCP_401x2 (POWERPC_EXCP_40x) |
2606 | #define POWERPC_INPUT_401x2 (PPC_FLAGS_INPUT_401) | 2608 | #define POWERPC_INPUT_401x2 (PPC_FLAGS_INPUT_401) |
2607 | #define POWERPC_BFDM_401x2 (bfd_mach_ppc_403) | 2609 | #define POWERPC_BFDM_401x2 (bfd_mach_ppc_403) |
2610 | +#define POWERPC_FLAG_401x2 (POWERPC_FLAG_NONE) | ||
2608 | 2611 | ||
2609 | static void init_proc_401x2 (CPUPPCState *env) | 2612 | static void init_proc_401x2 (CPUPPCState *env) |
2610 | { | 2613 | { |
@@ -2634,6 +2637,7 @@ static void init_proc_401x2 (CPUPPCState *env) | @@ -2634,6 +2637,7 @@ static void init_proc_401x2 (CPUPPCState *env) | ||
2634 | #define POWERPC_EXCP_401x3 (POWERPC_EXCP_40x) | 2637 | #define POWERPC_EXCP_401x3 (POWERPC_EXCP_40x) |
2635 | #define POWERPC_INPUT_401x3 (PPC_FLAGS_INPUT_401) | 2638 | #define POWERPC_INPUT_401x3 (PPC_FLAGS_INPUT_401) |
2636 | #define POWERPC_BFDM_401x3 (bfd_mach_ppc_403) | 2639 | #define POWERPC_BFDM_401x3 (bfd_mach_ppc_403) |
2640 | +#define POWERPC_FLAG_401x3 (POWERPC_FLAG_NONE) | ||
2637 | 2641 | ||
2638 | __attribute__ (( unused )) | 2642 | __attribute__ (( unused )) |
2639 | static void init_proc_401x3 (CPUPPCState *env) | 2643 | static void init_proc_401x3 (CPUPPCState *env) |
@@ -2661,6 +2665,7 @@ static void init_proc_401x3 (CPUPPCState *env) | @@ -2661,6 +2665,7 @@ static void init_proc_401x3 (CPUPPCState *env) | ||
2661 | #define POWERPC_EXCP_IOP480 (POWERPC_EXCP_40x) | 2665 | #define POWERPC_EXCP_IOP480 (POWERPC_EXCP_40x) |
2662 | #define POWERPC_INPUT_IOP480 (PPC_FLAGS_INPUT_401) | 2666 | #define POWERPC_INPUT_IOP480 (PPC_FLAGS_INPUT_401) |
2663 | #define POWERPC_BFDM_IOP480 (bfd_mach_ppc_403) | 2667 | #define POWERPC_BFDM_IOP480 (bfd_mach_ppc_403) |
2668 | +#define POWERPC_FLAG_IOP480 (POWERPC_FLAG_NONE) | ||
2664 | 2669 | ||
2665 | static void init_proc_IOP480 (CPUPPCState *env) | 2670 | static void init_proc_IOP480 (CPUPPCState *env) |
2666 | { | 2671 | { |
@@ -2689,6 +2694,7 @@ static void init_proc_IOP480 (CPUPPCState *env) | @@ -2689,6 +2694,7 @@ static void init_proc_IOP480 (CPUPPCState *env) | ||
2689 | #define POWERPC_EXCP_403 (POWERPC_EXCP_40x) | 2694 | #define POWERPC_EXCP_403 (POWERPC_EXCP_40x) |
2690 | #define POWERPC_INPUT_403 (PPC_FLAGS_INPUT_401) | 2695 | #define POWERPC_INPUT_403 (PPC_FLAGS_INPUT_401) |
2691 | #define POWERPC_BFDM_403 (bfd_mach_ppc_403) | 2696 | #define POWERPC_BFDM_403 (bfd_mach_ppc_403) |
2697 | +#define POWERPC_FLAG_403 (POWERPC_FLAG_NONE) | ||
2692 | 2698 | ||
2693 | static void init_proc_403 (CPUPPCState *env) | 2699 | static void init_proc_403 (CPUPPCState *env) |
2694 | { | 2700 | { |
@@ -2717,6 +2723,7 @@ static void init_proc_403 (CPUPPCState *env) | @@ -2717,6 +2723,7 @@ static void init_proc_403 (CPUPPCState *env) | ||
2717 | #define POWERPC_EXCP_403GCX (POWERPC_EXCP_40x) | 2723 | #define POWERPC_EXCP_403GCX (POWERPC_EXCP_40x) |
2718 | #define POWERPC_INPUT_403GCX (PPC_FLAGS_INPUT_401) | 2724 | #define POWERPC_INPUT_403GCX (PPC_FLAGS_INPUT_401) |
2719 | #define POWERPC_BFDM_403GCX (bfd_mach_ppc_403) | 2725 | #define POWERPC_BFDM_403GCX (bfd_mach_ppc_403) |
2726 | +#define POWERPC_FLAG_403GCX (POWERPC_FLAG_NONE) | ||
2720 | 2727 | ||
2721 | static void init_proc_403GCX (CPUPPCState *env) | 2728 | static void init_proc_403GCX (CPUPPCState *env) |
2722 | { | 2729 | { |
@@ -2758,6 +2765,7 @@ static void init_proc_403GCX (CPUPPCState *env) | @@ -2758,6 +2765,7 @@ static void init_proc_403GCX (CPUPPCState *env) | ||
2758 | #define POWERPC_EXCP_405 (POWERPC_EXCP_40x) | 2765 | #define POWERPC_EXCP_405 (POWERPC_EXCP_40x) |
2759 | #define POWERPC_INPUT_405 (PPC_FLAGS_INPUT_405) | 2766 | #define POWERPC_INPUT_405 (PPC_FLAGS_INPUT_405) |
2760 | #define POWERPC_BFDM_405 (bfd_mach_ppc_403) | 2767 | #define POWERPC_BFDM_405 (bfd_mach_ppc_403) |
2768 | +#define POWERPC_FLAG_405 (POWERPC_FLAG_NONE) | ||
2761 | 2769 | ||
2762 | static void init_proc_405 (CPUPPCState *env) | 2770 | static void init_proc_405 (CPUPPCState *env) |
2763 | { | 2771 | { |
@@ -2797,6 +2805,7 @@ static void init_proc_405 (CPUPPCState *env) | @@ -2797,6 +2805,7 @@ static void init_proc_405 (CPUPPCState *env) | ||
2797 | #define POWERPC_EXCP_440EP (POWERPC_EXCP_BOOKE) | 2805 | #define POWERPC_EXCP_440EP (POWERPC_EXCP_BOOKE) |
2798 | #define POWERPC_INPUT_440EP (PPC_FLAGS_INPUT_BookE) | 2806 | #define POWERPC_INPUT_440EP (PPC_FLAGS_INPUT_BookE) |
2799 | #define POWERPC_BFDM_440EP (bfd_mach_ppc_403) | 2807 | #define POWERPC_BFDM_440EP (bfd_mach_ppc_403) |
2808 | +#define POWERPC_FLAG_440EP (POWERPC_FLAG_NONE) | ||
2800 | 2809 | ||
2801 | static void init_proc_440EP (CPUPPCState *env) | 2810 | static void init_proc_440EP (CPUPPCState *env) |
2802 | { | 2811 | { |
@@ -2842,6 +2851,7 @@ static void init_proc_440EP (CPUPPCState *env) | @@ -2842,6 +2851,7 @@ static void init_proc_440EP (CPUPPCState *env) | ||
2842 | #define POWERPC_EXCP_440GP (POWERPC_EXCP_BOOKE) | 2851 | #define POWERPC_EXCP_440GP (POWERPC_EXCP_BOOKE) |
2843 | #define POWERPC_INPUT_440GP (PPC_FLAGS_INPUT_BookE) | 2852 | #define POWERPC_INPUT_440GP (PPC_FLAGS_INPUT_BookE) |
2844 | #define POWERPC_BFDM_440GP (bfd_mach_ppc_403) | 2853 | #define POWERPC_BFDM_440GP (bfd_mach_ppc_403) |
2854 | +#define POWERPC_FLAG_440GP (POWERPC_FLAG_NONE) | ||
2845 | 2855 | ||
2846 | static void init_proc_440GP (CPUPPCState *env) | 2856 | static void init_proc_440GP (CPUPPCState *env) |
2847 | { | 2857 | { |
@@ -2869,6 +2879,7 @@ static void init_proc_440GP (CPUPPCState *env) | @@ -2869,6 +2879,7 @@ static void init_proc_440GP (CPUPPCState *env) | ||
2869 | #define POWERPC_EXCP_440x4 (POWERPC_EXCP_BOOKE) | 2879 | #define POWERPC_EXCP_440x4 (POWERPC_EXCP_BOOKE) |
2870 | #define POWERPC_INPUT_440x4 (PPC_FLAGS_INPUT_BookE) | 2880 | #define POWERPC_INPUT_440x4 (PPC_FLAGS_INPUT_BookE) |
2871 | #define POWERPC_BFDM_440x4 (bfd_mach_ppc_403) | 2881 | #define POWERPC_BFDM_440x4 (bfd_mach_ppc_403) |
2882 | +#define POWERPC_FLAG_440x4 (POWERPC_FLAG_NONE) | ||
2872 | 2883 | ||
2873 | __attribute__ (( unused )) | 2884 | __attribute__ (( unused )) |
2874 | static void init_proc_440x4 (CPUPPCState *env) | 2885 | static void init_proc_440x4 (CPUPPCState *env) |
@@ -2897,6 +2908,7 @@ static void init_proc_440x4 (CPUPPCState *env) | @@ -2897,6 +2908,7 @@ static void init_proc_440x4 (CPUPPCState *env) | ||
2897 | #define POWERPC_EXCP_440x5 (POWERPC_EXCP_BOOKE) | 2908 | #define POWERPC_EXCP_440x5 (POWERPC_EXCP_BOOKE) |
2898 | #define POWERPC_INPUT_440x5 (PPC_FLAGS_INPUT_BookE) | 2909 | #define POWERPC_INPUT_440x5 (PPC_FLAGS_INPUT_BookE) |
2899 | #define POWERPC_BFDM_440x5 (bfd_mach_ppc_403) | 2910 | #define POWERPC_BFDM_440x5 (bfd_mach_ppc_403) |
2911 | +#define POWERPC_FLAG_440x5 (POWERPC_FLAG_NONE) | ||
2900 | 2912 | ||
2901 | static void init_proc_440x5 (CPUPPCState *env) | 2913 | static void init_proc_440x5 (CPUPPCState *env) |
2902 | { | 2914 | { |
@@ -2942,6 +2954,7 @@ static void init_proc_440x5 (CPUPPCState *env) | @@ -2942,6 +2954,7 @@ static void init_proc_440x5 (CPUPPCState *env) | ||
2942 | #define POWERPC_EXCP_460 (POWERPC_EXCP_BOOKE) | 2954 | #define POWERPC_EXCP_460 (POWERPC_EXCP_BOOKE) |
2943 | #define POWERPC_INPUT_460 (PPC_FLAGS_INPUT_BookE) | 2955 | #define POWERPC_INPUT_460 (PPC_FLAGS_INPUT_BookE) |
2944 | #define POWERPC_BFDM_460 (bfd_mach_ppc_403) | 2956 | #define POWERPC_BFDM_460 (bfd_mach_ppc_403) |
2957 | +#define POWERPC_FLAG_460 (POWERPC_FLAG_NONE) | ||
2945 | 2958 | ||
2946 | __attribute__ (( unused )) | 2959 | __attribute__ (( unused )) |
2947 | static void init_proc_460 (CPUPPCState *env) | 2960 | static void init_proc_460 (CPUPPCState *env) |
@@ -2996,6 +3009,7 @@ static void init_proc_460 (CPUPPCState *env) | @@ -2996,6 +3009,7 @@ static void init_proc_460 (CPUPPCState *env) | ||
2996 | #define POWERPC_EXCP_460F (POWERPC_EXCP_BOOKE) | 3009 | #define POWERPC_EXCP_460F (POWERPC_EXCP_BOOKE) |
2997 | #define POWERPC_INPUT_460F (PPC_FLAGS_INPUT_BookE) | 3010 | #define POWERPC_INPUT_460F (PPC_FLAGS_INPUT_BookE) |
2998 | #define POWERPC_BFDM_460F (bfd_mach_ppc_403) | 3011 | #define POWERPC_BFDM_460F (bfd_mach_ppc_403) |
3012 | +#define POWERPC_FLAG_460F (POWERPC_FLAG_NONE) | ||
2999 | 3013 | ||
3000 | __attribute__ (( unused )) | 3014 | __attribute__ (( unused )) |
3001 | static void init_proc_460F (CPUPPCState *env) | 3015 | static void init_proc_460F (CPUPPCState *env) |
@@ -3050,6 +3064,7 @@ static void init_proc_460F (CPUPPCState *env) | @@ -3050,6 +3064,7 @@ static void init_proc_460F (CPUPPCState *env) | ||
3050 | #define POWERPC_EXCP_BookE (POWERPC_EXCP_BOOKE) | 3064 | #define POWERPC_EXCP_BookE (POWERPC_EXCP_BOOKE) |
3051 | #define POWERPC_INPUT_BookE (PPC_FLAGS_INPUT_BookE) | 3065 | #define POWERPC_INPUT_BookE (PPC_FLAGS_INPUT_BookE) |
3052 | #define POWERPC_BFDM_BookE (bfd_mach_ppc_403) | 3066 | #define POWERPC_BFDM_BookE (bfd_mach_ppc_403) |
3067 | +#define POWERPC_FLAG_BookE (POWERPC_FLAG_NONE) | ||
3053 | 3068 | ||
3054 | __attribute__ (( unused )) | 3069 | __attribute__ (( unused )) |
3055 | static void init_proc_BookE (CPUPPCState *env) | 3070 | static void init_proc_BookE (CPUPPCState *env) |
@@ -3072,6 +3087,7 @@ static void init_proc_BookE (CPUPPCState *env) | @@ -3072,6 +3087,7 @@ static void init_proc_BookE (CPUPPCState *env) | ||
3072 | #define POWERPC_EXCP_e500 (POWERPC_EXCP_40x) | 3087 | #define POWERPC_EXCP_e500 (POWERPC_EXCP_40x) |
3073 | #define POWERPC_INPUT_e500 (PPC_FLAGS_INPUT_BookE) | 3088 | #define POWERPC_INPUT_e500 (PPC_FLAGS_INPUT_BookE) |
3074 | #define POWERPC_BFDM_e500 (bfd_mach_ppc_403) | 3089 | #define POWERPC_BFDM_e500 (bfd_mach_ppc_403) |
3090 | +#define POWERPC_FLAG_e500 (POWERPC_FLAG_SPE) | ||
3075 | 3091 | ||
3076 | __attribute__ (( unused )) | 3092 | __attribute__ (( unused )) |
3077 | static void init_proc_e500 (CPUPPCState *env) | 3093 | static void init_proc_e500 (CPUPPCState *env) |
@@ -3118,6 +3134,7 @@ static void init_proc_e500 (CPUPPCState *env) | @@ -3118,6 +3134,7 @@ static void init_proc_e500 (CPUPPCState *env) | ||
3118 | //#define POWERPC_EXCP_601 (POWERPC_EXCP_601) | 3134 | //#define POWERPC_EXCP_601 (POWERPC_EXCP_601) |
3119 | #define POWERPC_INPUT_601 (PPC_FLAGS_INPUT_6xx) | 3135 | #define POWERPC_INPUT_601 (PPC_FLAGS_INPUT_6xx) |
3120 | #define POWERPC_BFDM_601 (bfd_mach_ppc_601) | 3136 | #define POWERPC_BFDM_601 (bfd_mach_ppc_601) |
3137 | +#define POWERPC_FLAG_601 (POWERPC_FLAG_NONE) | ||
3121 | 3138 | ||
3122 | static void init_proc_601 (CPUPPCState *env) | 3139 | static void init_proc_601 (CPUPPCState *env) |
3123 | { | 3140 | { |
@@ -3171,6 +3188,7 @@ static void init_proc_601 (CPUPPCState *env) | @@ -3171,6 +3188,7 @@ static void init_proc_601 (CPUPPCState *env) | ||
3171 | //#define POWERPC_EXCP_602 (POWERPC_EXCP_602) | 3188 | //#define POWERPC_EXCP_602 (POWERPC_EXCP_602) |
3172 | #define POWERPC_INPUT_602 (PPC_FLAGS_INPUT_6xx) | 3189 | #define POWERPC_INPUT_602 (PPC_FLAGS_INPUT_6xx) |
3173 | #define POWERPC_BFDM_602 (bfd_mach_ppc_602) | 3190 | #define POWERPC_BFDM_602 (bfd_mach_ppc_602) |
3191 | +#define POWERPC_FLAG_602 (POWERPC_FLAG_TGPR) | ||
3174 | 3192 | ||
3175 | static void init_proc_602 (CPUPPCState *env) | 3193 | static void init_proc_602 (CPUPPCState *env) |
3176 | { | 3194 | { |
@@ -3206,6 +3224,7 @@ static void init_proc_602 (CPUPPCState *env) | @@ -3206,6 +3224,7 @@ static void init_proc_602 (CPUPPCState *env) | ||
3206 | //#define POWERPC_EXCP_603 (POWERPC_EXCP_603) | 3224 | //#define POWERPC_EXCP_603 (POWERPC_EXCP_603) |
3207 | #define POWERPC_INPUT_603 (PPC_FLAGS_INPUT_6xx) | 3225 | #define POWERPC_INPUT_603 (PPC_FLAGS_INPUT_6xx) |
3208 | #define POWERPC_BFDM_603 (bfd_mach_ppc_603) | 3226 | #define POWERPC_BFDM_603 (bfd_mach_ppc_603) |
3227 | +#define POWERPC_FLAG_603 (POWERPC_FLAG_TGPR) | ||
3209 | 3228 | ||
3210 | static void init_proc_603 (CPUPPCState *env) | 3229 | static void init_proc_603 (CPUPPCState *env) |
3211 | { | 3230 | { |
@@ -3241,6 +3260,7 @@ static void init_proc_603 (CPUPPCState *env) | @@ -3241,6 +3260,7 @@ static void init_proc_603 (CPUPPCState *env) | ||
3241 | //#define POWERPC_EXCP_603E (POWERPC_EXCP_603E) | 3260 | //#define POWERPC_EXCP_603E (POWERPC_EXCP_603E) |
3242 | #define POWERPC_INPUT_603E (PPC_FLAGS_INPUT_6xx) | 3261 | #define POWERPC_INPUT_603E (PPC_FLAGS_INPUT_6xx) |
3243 | #define POWERPC_BFDM_603E (bfd_mach_ppc_ec603e) | 3262 | #define POWERPC_BFDM_603E (bfd_mach_ppc_ec603e) |
3263 | +#define POWERPC_FLAG_603E (POWERPC_FLAG_TGPR) | ||
3244 | 3264 | ||
3245 | static void init_proc_603E (CPUPPCState *env) | 3265 | static void init_proc_603E (CPUPPCState *env) |
3246 | { | 3266 | { |
@@ -3281,6 +3301,7 @@ static void init_proc_603E (CPUPPCState *env) | @@ -3281,6 +3301,7 @@ static void init_proc_603E (CPUPPCState *env) | ||
3281 | //#define POWERPC_EXCP_G2 (POWERPC_EXCP_G2) | 3301 | //#define POWERPC_EXCP_G2 (POWERPC_EXCP_G2) |
3282 | #define POWERPC_INPUT_G2 (PPC_FLAGS_INPUT_6xx) | 3302 | #define POWERPC_INPUT_G2 (PPC_FLAGS_INPUT_6xx) |
3283 | #define POWERPC_BFDM_G2 (bfd_mach_ppc_ec603e) | 3303 | #define POWERPC_BFDM_G2 (bfd_mach_ppc_ec603e) |
3304 | +#define POWERPC_FLAG_G2 (POWERPC_FLAG_TGPR) | ||
3284 | 3305 | ||
3285 | static void init_proc_G2 (CPUPPCState *env) | 3306 | static void init_proc_G2 (CPUPPCState *env) |
3286 | { | 3307 | { |
@@ -3323,6 +3344,7 @@ static void init_proc_G2 (CPUPPCState *env) | @@ -3323,6 +3344,7 @@ static void init_proc_G2 (CPUPPCState *env) | ||
3323 | #define POWERPC_EXCP_G2LE (POWERPC_EXCP_G2) | 3344 | #define POWERPC_EXCP_G2LE (POWERPC_EXCP_G2) |
3324 | #define POWERPC_INPUT_G2LE (PPC_FLAGS_INPUT_6xx) | 3345 | #define POWERPC_INPUT_G2LE (PPC_FLAGS_INPUT_6xx) |
3325 | #define POWERPC_BFDM_G2LE (bfd_mach_ppc_ec603e) | 3346 | #define POWERPC_BFDM_G2LE (bfd_mach_ppc_ec603e) |
3347 | +#define POWERPC_FLAG_G2LE (POWERPC_FLAG_TGPR) | ||
3326 | 3348 | ||
3327 | static void init_proc_G2LE (CPUPPCState *env) | 3349 | static void init_proc_G2LE (CPUPPCState *env) |
3328 | { | 3350 | { |
@@ -3365,6 +3387,7 @@ static void init_proc_G2LE (CPUPPCState *env) | @@ -3365,6 +3387,7 @@ static void init_proc_G2LE (CPUPPCState *env) | ||
3365 | //#define POWERPC_EXCP_604 (POWERPC_EXCP_604) | 3387 | //#define POWERPC_EXCP_604 (POWERPC_EXCP_604) |
3366 | #define POWERPC_INPUT_604 (PPC_FLAGS_INPUT_6xx) | 3388 | #define POWERPC_INPUT_604 (PPC_FLAGS_INPUT_6xx) |
3367 | #define POWERPC_BFDM_604 (bfd_mach_ppc_604) | 3389 | #define POWERPC_BFDM_604 (bfd_mach_ppc_604) |
3390 | +#define POWERPC_FLAG_604 (POWERPC_FLAG_NONE) | ||
3368 | 3391 | ||
3369 | static void init_proc_604 (CPUPPCState *env) | 3392 | static void init_proc_604 (CPUPPCState *env) |
3370 | { | 3393 | { |
@@ -3399,6 +3422,7 @@ static void init_proc_604 (CPUPPCState *env) | @@ -3399,6 +3422,7 @@ static void init_proc_604 (CPUPPCState *env) | ||
3399 | //#define POWERPC_EXCP_7x0 (POWERPC_EXCP_7x0) | 3422 | //#define POWERPC_EXCP_7x0 (POWERPC_EXCP_7x0) |
3400 | #define POWERPC_INPUT_7x0 (PPC_FLAGS_INPUT_6xx) | 3423 | #define POWERPC_INPUT_7x0 (PPC_FLAGS_INPUT_6xx) |
3401 | #define POWERPC_BFDM_7x0 (bfd_mach_ppc_750) | 3424 | #define POWERPC_BFDM_7x0 (bfd_mach_ppc_750) |
3425 | +#define POWERPC_FLAG_7x0 (POWERPC_FLAG_NONE) | ||
3402 | 3426 | ||
3403 | static void init_proc_7x0 (CPUPPCState *env) | 3427 | static void init_proc_7x0 (CPUPPCState *env) |
3404 | { | 3428 | { |
@@ -3435,6 +3459,7 @@ static void init_proc_7x0 (CPUPPCState *env) | @@ -3435,6 +3459,7 @@ static void init_proc_7x0 (CPUPPCState *env) | ||
3435 | #define POWERPC_EXCP_750fx (POWERPC_EXCP_7x0) | 3459 | #define POWERPC_EXCP_750fx (POWERPC_EXCP_7x0) |
3436 | #define POWERPC_INPUT_750fx (PPC_FLAGS_INPUT_6xx) | 3460 | #define POWERPC_INPUT_750fx (PPC_FLAGS_INPUT_6xx) |
3437 | #define POWERPC_BFDM_750fx (bfd_mach_ppc_750) | 3461 | #define POWERPC_BFDM_750fx (bfd_mach_ppc_750) |
3462 | +#define POWERPC_FLAG_750fx (POWERPC_FLAG_NONE) | ||
3438 | 3463 | ||
3439 | static void init_proc_750fx (CPUPPCState *env) | 3464 | static void init_proc_750fx (CPUPPCState *env) |
3440 | { | 3465 | { |
@@ -3478,6 +3503,7 @@ static void init_proc_750fx (CPUPPCState *env) | @@ -3478,6 +3503,7 @@ static void init_proc_750fx (CPUPPCState *env) | ||
3478 | //#define POWERPC_EXCP_7x5 (POWERPC_EXCP_7x5) | 3503 | //#define POWERPC_EXCP_7x5 (POWERPC_EXCP_7x5) |
3479 | #define POWERPC_INPUT_7x5 (PPC_FLAGS_INPUT_6xx) | 3504 | #define POWERPC_INPUT_7x5 (PPC_FLAGS_INPUT_6xx) |
3480 | #define POWERPC_BFDM_7x5 (bfd_mach_ppc_750) | 3505 | #define POWERPC_BFDM_7x5 (bfd_mach_ppc_750) |
3506 | +#define POWERPC_FLAG_7x5 (POWERPC_FLAG_NONE) | ||
3481 | 3507 | ||
3482 | static void init_proc_7x5 (CPUPPCState *env) | 3508 | static void init_proc_7x5 (CPUPPCState *env) |
3483 | { | 3509 | { |
@@ -3536,6 +3562,7 @@ static void init_proc_7x5 (CPUPPCState *env) | @@ -3536,6 +3562,7 @@ static void init_proc_7x5 (CPUPPCState *env) | ||
3536 | #define POWERPC_EXCP_7400 (POWERPC_EXCP_74xx) | 3562 | #define POWERPC_EXCP_7400 (POWERPC_EXCP_74xx) |
3537 | #define POWERPC_INPUT_7400 (PPC_FLAGS_INPUT_6xx) | 3563 | #define POWERPC_INPUT_7400 (PPC_FLAGS_INPUT_6xx) |
3538 | #define POWERPC_BFDM_7400 (bfd_mach_ppc_7400) | 3564 | #define POWERPC_BFDM_7400 (bfd_mach_ppc_7400) |
3565 | +#define POWERPC_FLAG_7400 (POWERPC_FLAG_VRE) | ||
3539 | 3566 | ||
3540 | static void init_proc_7400 (CPUPPCState *env) | 3567 | static void init_proc_7400 (CPUPPCState *env) |
3541 | { | 3568 | { |
@@ -3565,6 +3592,7 @@ static void init_proc_7400 (CPUPPCState *env) | @@ -3565,6 +3592,7 @@ static void init_proc_7400 (CPUPPCState *env) | ||
3565 | #define POWERPC_EXCP_7410 (POWERPC_EXCP_74xx) | 3592 | #define POWERPC_EXCP_7410 (POWERPC_EXCP_74xx) |
3566 | #define POWERPC_INPUT_7410 (PPC_FLAGS_INPUT_6xx) | 3593 | #define POWERPC_INPUT_7410 (PPC_FLAGS_INPUT_6xx) |
3567 | #define POWERPC_BFDM_7410 (bfd_mach_ppc_7400) | 3594 | #define POWERPC_BFDM_7410 (bfd_mach_ppc_7400) |
3595 | +#define POWERPC_FLAG_7410 (POWERPC_FLAG_VRE) | ||
3568 | 3596 | ||
3569 | static void init_proc_7410 (CPUPPCState *env) | 3597 | static void init_proc_7410 (CPUPPCState *env) |
3570 | { | 3598 | { |
@@ -3606,6 +3634,7 @@ static void init_proc_7410 (CPUPPCState *env) | @@ -3606,6 +3634,7 @@ static void init_proc_7410 (CPUPPCState *env) | ||
3606 | #define POWERPC_EXCP_7440 (POWERPC_EXCP_74xx) | 3634 | #define POWERPC_EXCP_7440 (POWERPC_EXCP_74xx) |
3607 | #define POWERPC_INPUT_7440 (PPC_FLAGS_INPUT_6xx) | 3635 | #define POWERPC_INPUT_7440 (PPC_FLAGS_INPUT_6xx) |
3608 | #define POWERPC_BFDM_7440 (bfd_mach_ppc_7400) | 3636 | #define POWERPC_BFDM_7440 (bfd_mach_ppc_7400) |
3637 | +#define POWERPC_FLAG_7440 (POWERPC_FLAG_VRE) | ||
3609 | 3638 | ||
3610 | __attribute__ (( unused )) | 3639 | __attribute__ (( unused )) |
3611 | static void init_proc_7440 (CPUPPCState *env) | 3640 | static void init_proc_7440 (CPUPPCState *env) |
@@ -3674,6 +3703,7 @@ static void init_proc_7440 (CPUPPCState *env) | @@ -3674,6 +3703,7 @@ static void init_proc_7440 (CPUPPCState *env) | ||
3674 | #define POWERPC_EXCP_7450 (POWERPC_EXCP_74xx) | 3703 | #define POWERPC_EXCP_7450 (POWERPC_EXCP_74xx) |
3675 | #define POWERPC_INPUT_7450 (PPC_FLAGS_INPUT_6xx) | 3704 | #define POWERPC_INPUT_7450 (PPC_FLAGS_INPUT_6xx) |
3676 | #define POWERPC_BFDM_7450 (bfd_mach_ppc_7400) | 3705 | #define POWERPC_BFDM_7450 (bfd_mach_ppc_7400) |
3706 | +#define POWERPC_FLAG_7450 (POWERPC_FLAG_VRE) | ||
3677 | 3707 | ||
3678 | __attribute__ (( unused )) | 3708 | __attribute__ (( unused )) |
3679 | static void init_proc_7450 (CPUPPCState *env) | 3709 | static void init_proc_7450 (CPUPPCState *env) |
@@ -3744,6 +3774,7 @@ static void init_proc_7450 (CPUPPCState *env) | @@ -3744,6 +3774,7 @@ static void init_proc_7450 (CPUPPCState *env) | ||
3744 | #define POWERPC_EXCP_7445 (POWERPC_EXCP_74xx) | 3774 | #define POWERPC_EXCP_7445 (POWERPC_EXCP_74xx) |
3745 | #define POWERPC_INPUT_7445 (PPC_FLAGS_INPUT_6xx) | 3775 | #define POWERPC_INPUT_7445 (PPC_FLAGS_INPUT_6xx) |
3746 | #define POWERPC_BFDM_7445 (bfd_mach_ppc_7400) | 3776 | #define POWERPC_BFDM_7445 (bfd_mach_ppc_7400) |
3777 | +#define POWERPC_FLAG_7445 (POWERPC_FLAG_VRE) | ||
3747 | 3778 | ||
3748 | __attribute__ (( unused )) | 3779 | __attribute__ (( unused )) |
3749 | static void init_proc_7445 (CPUPPCState *env) | 3780 | static void init_proc_7445 (CPUPPCState *env) |
@@ -3846,6 +3877,7 @@ static void init_proc_7445 (CPUPPCState *env) | @@ -3846,6 +3877,7 @@ static void init_proc_7445 (CPUPPCState *env) | ||
3846 | #define POWERPC_EXCP_7455 (POWERPC_EXCP_74xx) | 3877 | #define POWERPC_EXCP_7455 (POWERPC_EXCP_74xx) |
3847 | #define POWERPC_INPUT_7455 (PPC_FLAGS_INPUT_6xx) | 3878 | #define POWERPC_INPUT_7455 (PPC_FLAGS_INPUT_6xx) |
3848 | #define POWERPC_BFDM_7455 (bfd_mach_ppc_7400) | 3879 | #define POWERPC_BFDM_7455 (bfd_mach_ppc_7400) |
3880 | +#define POWERPC_FLAG_7455 (POWERPC_FLAG_VRE) | ||
3849 | 3881 | ||
3850 | __attribute__ (( unused )) | 3882 | __attribute__ (( unused )) |
3851 | static void init_proc_7455 (CPUPPCState *env) | 3883 | static void init_proc_7455 (CPUPPCState *env) |
@@ -3955,6 +3987,7 @@ static void init_proc_7455 (CPUPPCState *env) | @@ -3955,6 +3987,7 @@ static void init_proc_7455 (CPUPPCState *env) | ||
3955 | //#define POWERPC_EXCP_970 (POWERPC_EXCP_970) | 3987 | //#define POWERPC_EXCP_970 (POWERPC_EXCP_970) |
3956 | #define POWERPC_INPUT_970 (PPC_FLAGS_INPUT_970) | 3988 | #define POWERPC_INPUT_970 (PPC_FLAGS_INPUT_970) |
3957 | #define POWERPC_BFDM_970 (bfd_mach_ppc64) | 3989 | #define POWERPC_BFDM_970 (bfd_mach_ppc64) |
3990 | +#define POWERPC_FLAG_970 (POWERPC_FLAG_VRE) | ||
3958 | 3991 | ||
3959 | static void init_proc_970 (CPUPPCState *env) | 3992 | static void init_proc_970 (CPUPPCState *env) |
3960 | { | 3993 | { |
@@ -4025,6 +4058,7 @@ static void init_proc_970 (CPUPPCState *env) | @@ -4025,6 +4058,7 @@ static void init_proc_970 (CPUPPCState *env) | ||
4025 | #define POWERPC_EXCP_970FX (POWERPC_EXCP_970) | 4058 | #define POWERPC_EXCP_970FX (POWERPC_EXCP_970) |
4026 | #define POWERPC_INPUT_970FX (PPC_FLAGS_INPUT_970) | 4059 | #define POWERPC_INPUT_970FX (PPC_FLAGS_INPUT_970) |
4027 | #define POWERPC_BFDM_970FX (bfd_mach_ppc64) | 4060 | #define POWERPC_BFDM_970FX (bfd_mach_ppc64) |
4061 | +#define POWERPC_FLAG_970FX (POWERPC_FLAG_VRE) | ||
4028 | 4062 | ||
4029 | static void init_proc_970FX (CPUPPCState *env) | 4063 | static void init_proc_970FX (CPUPPCState *env) |
4030 | { | 4064 | { |
@@ -4095,6 +4129,7 @@ static void init_proc_970FX (CPUPPCState *env) | @@ -4095,6 +4129,7 @@ static void init_proc_970FX (CPUPPCState *env) | ||
4095 | #define POWERPC_EXCP_970GX (POWERPC_EXCP_970) | 4129 | #define POWERPC_EXCP_970GX (POWERPC_EXCP_970) |
4096 | #define POWERPC_INPUT_970GX (PPC_FLAGS_INPUT_970) | 4130 | #define POWERPC_INPUT_970GX (PPC_FLAGS_INPUT_970) |
4097 | #define POWERPC_BFDM_970GX (bfd_mach_ppc64) | 4131 | #define POWERPC_BFDM_970GX (bfd_mach_ppc64) |
4132 | +#define POWERPC_FLAG_970GX (POWERPC_FLAG_VRE) | ||
4098 | 4133 | ||
4099 | static void init_proc_970GX (CPUPPCState *env) | 4134 | static void init_proc_970GX (CPUPPCState *env) |
4100 | { | 4135 | { |
@@ -4164,6 +4199,7 @@ static void init_proc_970GX (CPUPPCState *env) | @@ -4164,6 +4199,7 @@ static void init_proc_970GX (CPUPPCState *env) | ||
4164 | #define POWERPC_EXCP_620 (POWERPC_EXCP_970) | 4199 | #define POWERPC_EXCP_620 (POWERPC_EXCP_970) |
4165 | #define POWERPC_INPUT_620 (PPC_FLAGS_INPUT_970) | 4200 | #define POWERPC_INPUT_620 (PPC_FLAGS_INPUT_970) |
4166 | #define POWERPC_BFDM_620 (bfd_mach_ppc64) | 4201 | #define POWERPC_BFDM_620 (bfd_mach_ppc64) |
4202 | +#define POWERPC_FLAG_620 (POWERPC_FLAG_NONE) | ||
4167 | 4203 | ||
4168 | __attribute__ (( unused )) | 4204 | __attribute__ (( unused )) |
4169 | static void init_proc_620 (CPUPPCState *env) | 4205 | static void init_proc_620 (CPUPPCState *env) |
@@ -4197,6 +4233,7 @@ static void init_proc_620 (CPUPPCState *env) | @@ -4197,6 +4233,7 @@ static void init_proc_620 (CPUPPCState *env) | ||
4197 | #define POWERPC_INPUT_PPC32 POWERPC_INPUT_604 | 4233 | #define POWERPC_INPUT_PPC32 POWERPC_INPUT_604 |
4198 | #define init_proc_PPC32 init_proc_604 | 4234 | #define init_proc_PPC32 init_proc_604 |
4199 | #define POWERPC_BFDM_PPC32 POWERPC_BFDM_604 | 4235 | #define POWERPC_BFDM_PPC32 POWERPC_BFDM_604 |
4236 | +#define POWERPC_FLAG_PPC32 POWERPC_FLAG_604 | ||
4200 | 4237 | ||
4201 | /* Default 64 bits PowerPC target will be 970 FX */ | 4238 | /* Default 64 bits PowerPC target will be 970 FX */ |
4202 | #define CPU_POWERPC_PPC64 CPU_POWERPC_970FX | 4239 | #define CPU_POWERPC_PPC64 CPU_POWERPC_970FX |
@@ -4207,6 +4244,7 @@ static void init_proc_620 (CPUPPCState *env) | @@ -4207,6 +4244,7 @@ static void init_proc_620 (CPUPPCState *env) | ||
4207 | #define POWERPC_INPUT_PPC64 POWERPC_INPUT_970FX | 4244 | #define POWERPC_INPUT_PPC64 POWERPC_INPUT_970FX |
4208 | #define init_proc_PPC64 init_proc_970FX | 4245 | #define init_proc_PPC64 init_proc_970FX |
4209 | #define POWERPC_BFDM_PPC64 POWERPC_BFDM_970FX | 4246 | #define POWERPC_BFDM_PPC64 POWERPC_BFDM_970FX |
4247 | +#define POWERPC_FLAG_PPC64 POWERPC_FLAG_970FX | ||
4210 | 4248 | ||
4211 | /* Default PowerPC target will be PowerPC 32 */ | 4249 | /* Default PowerPC target will be PowerPC 32 */ |
4212 | #if defined (TARGET_PPC64) && 0 // XXX: TODO | 4250 | #if defined (TARGET_PPC64) && 0 // XXX: TODO |
@@ -4218,6 +4256,7 @@ static void init_proc_620 (CPUPPCState *env) | @@ -4218,6 +4256,7 @@ static void init_proc_620 (CPUPPCState *env) | ||
4218 | #define POWERPC_INPUT_DEFAULT POWERPC_INPUT_PPC64 | 4256 | #define POWERPC_INPUT_DEFAULT POWERPC_INPUT_PPC64 |
4219 | #define init_proc_DEFAULT init_proc_PPC64 | 4257 | #define init_proc_DEFAULT init_proc_PPC64 |
4220 | #define POWERPC_BFDM_DEFAULT POWERPC_BFDM_PPC64 | 4258 | #define POWERPC_BFDM_DEFAULT POWERPC_BFDM_PPC64 |
4259 | +#define POWERPC_FLAG_DEFAULT POWERPC_FLAG_PPC64 | ||
4221 | #else | 4260 | #else |
4222 | #define CPU_POWERPC_DEFAULT CPU_POWERPC_PPC32 | 4261 | #define CPU_POWERPC_DEFAULT CPU_POWERPC_PPC32 |
4223 | #define POWERPC_INSNS_DEFAULT POWERPC_INSNS_PPC32 | 4262 | #define POWERPC_INSNS_DEFAULT POWERPC_INSNS_PPC32 |
@@ -4227,6 +4266,7 @@ static void init_proc_620 (CPUPPCState *env) | @@ -4227,6 +4266,7 @@ static void init_proc_620 (CPUPPCState *env) | ||
4227 | #define POWERPC_INPUT_DEFAULT POWERPC_INPUT_PPC32 | 4266 | #define POWERPC_INPUT_DEFAULT POWERPC_INPUT_PPC32 |
4228 | #define init_proc_DEFAULT init_proc_PPC32 | 4267 | #define init_proc_DEFAULT init_proc_PPC32 |
4229 | #define POWERPC_BFDM_DEFAULT POWERPC_BFDM_PPC32 | 4268 | #define POWERPC_BFDM_DEFAULT POWERPC_BFDM_PPC32 |
4269 | +#define POWERPC_FLAG_DEFAULT POWERPC_FLAG_PPC32 | ||
4230 | #endif | 4270 | #endif |
4231 | 4271 | ||
4232 | /*****************************************************************************/ | 4272 | /*****************************************************************************/ |
@@ -4724,6 +4764,7 @@ enum { | @@ -4724,6 +4764,7 @@ enum { | ||
4724 | .excp_model = glue(POWERPC_EXCP_,_type), \ | 4764 | .excp_model = glue(POWERPC_EXCP_,_type), \ |
4725 | .bus_model = glue(POWERPC_INPUT_,_type), \ | 4765 | .bus_model = glue(POWERPC_INPUT_,_type), \ |
4726 | .bfd_mach = glue(POWERPC_BFDM_,_type), \ | 4766 | .bfd_mach = glue(POWERPC_BFDM_,_type), \ |
4767 | + .flags = glue(POWERPC_FLAG_,_type), \ | ||
4727 | .init_proc = &glue(init_proc_,_type), \ | 4768 | .init_proc = &glue(init_proc_,_type), \ |
4728 | } | 4769 | } |
4729 | 4770 | ||
@@ -6016,6 +6057,7 @@ int cpu_ppc_register (CPUPPCState *env, ppc_def_t *def) | @@ -6016,6 +6057,7 @@ int cpu_ppc_register (CPUPPCState *env, ppc_def_t *def) | ||
6016 | env->mmu_model = def->mmu_model; | 6057 | env->mmu_model = def->mmu_model; |
6017 | env->excp_model = def->excp_model; | 6058 | env->excp_model = def->excp_model; |
6018 | env->bus_model = def->bus_model; | 6059 | env->bus_model = def->bus_model; |
6060 | + env->flags = def->flags; | ||
6019 | env->bfd_mach = def->bfd_mach; | 6061 | env->bfd_mach = def->bfd_mach; |
6020 | if (create_ppc_opcodes(env, def) < 0) | 6062 | if (create_ppc_opcodes(env, def) < 0) |
6021 | return -1; | 6063 | return -1; |