Commit 05332d70fd7488459e4b80c73ff7547b3a1a7ce6
1 parent
a4f30719
A little more granularity in PowerPC instructions definition is needed
in order to implement Freescale cores. Fix efsadd / efssub opcodes. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3679 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
84 additions
and
66 deletions
target-ppc/translate.c
... | ... | @@ -462,8 +462,12 @@ enum { |
462 | 462 | /* Fixed-point unit extensions */ |
463 | 463 | /* PowerPC 602 specific */ |
464 | 464 | PPC_602_SPEC = 0x0000000000000400ULL, |
465 | - /* PowerPC 2.03 specification extensions */ | |
466 | - PPC_203 = 0x0000000000000800ULL, | |
465 | + /* isel instruction */ | |
466 | + PPC_ISEL = 0x0000000000000800ULL, | |
467 | + /* popcntb instruction */ | |
468 | + PPC_POPCNTB = 0x0000000000001000ULL, | |
469 | + /* string load / store */ | |
470 | + PPC_STRING = 0x0000000000002000ULL, | |
467 | 471 | |
468 | 472 | /* Floating-point unit extensions */ |
469 | 473 | /* Optional floating point instructions */ |
... | ... | @@ -480,12 +484,10 @@ enum { |
480 | 484 | /* Vector/SIMD extensions */ |
481 | 485 | /* Altivec support */ |
482 | 486 | PPC_ALTIVEC = 0x0000000001000000ULL, |
483 | - /* e500 vector instructions */ | |
484 | - PPC_E500_VECTOR = 0x0000000002000000ULL, | |
485 | 487 | /* PowerPC 2.03 SPE extension */ |
486 | - PPC_SPE = 0x0000000004000000ULL, | |
488 | + PPC_SPE = 0x0000000002000000ULL, | |
487 | 489 | /* PowerPC 2.03 SPE floating-point extension */ |
488 | - PPC_SPEFPU = 0x0000000008000000ULL, | |
490 | + PPC_SPEFPU = 0x0000000004000000ULL, | |
489 | 491 | |
490 | 492 | /* Optional memory control instructions */ |
491 | 493 | PPC_MEM_TLBIA = 0x0000000010000000ULL, |
... | ... | @@ -497,52 +499,64 @@ enum { |
497 | 499 | PPC_MEM_EIEIO = 0x0000000100000000ULL, |
498 | 500 | |
499 | 501 | /* Cache control instructions */ |
500 | - PPC_CACHE = 0x0000001000000000ULL, | |
502 | + PPC_CACHE = 0x00000002000000000ULL, | |
501 | 503 | /* icbi instruction */ |
502 | - PPC_CACHE_ICBI = 0x0000002000000000ULL, | |
504 | + PPC_CACHE_ICBI = 0x0000000400000000ULL, | |
503 | 505 | /* dcbz instruction with fixed cache line size */ |
504 | - PPC_CACHE_DCBZ = 0x0000004000000000ULL, | |
506 | + PPC_CACHE_DCBZ = 0x0000000800000000ULL, | |
505 | 507 | /* dcbz instruction with tunable cache line size */ |
506 | - PPC_CACHE_DCBZT = 0x0000008000000000ULL, | |
508 | + PPC_CACHE_DCBZT = 0x0000001000000000ULL, | |
507 | 509 | /* dcba instruction */ |
508 | - PPC_CACHE_DCBA = 0x0000010000000000ULL, | |
510 | + PPC_CACHE_DCBA = 0x0000002000000000ULL, | |
511 | + /* Freescale cache locking instructions */ | |
512 | + PPC_CACHE_LOCK = 0x0000004000000000ULL, | |
509 | 513 | |
510 | 514 | /* MMU related extensions */ |
511 | 515 | /* external control instructions */ |
512 | - PPC_EXTERN = 0x0000100000000000ULL, | |
516 | + PPC_EXTERN = 0x0000010000000000ULL, | |
513 | 517 | /* segment register access instructions */ |
514 | - PPC_SEGMENT = 0x0000200000000000ULL, | |
518 | + PPC_SEGMENT = 0x0000020000000000ULL, | |
515 | 519 | /* PowerPC 6xx TLB management instructions */ |
516 | - PPC_6xx_TLB = 0x0000400000000000ULL, | |
520 | + PPC_6xx_TLB = 0x0000040000000000ULL, | |
517 | 521 | /* PowerPC 74xx TLB management instructions */ |
518 | - PPC_74xx_TLB = 0x0000800000000000ULL, | |
522 | + PPC_74xx_TLB = 0x0000080000000000ULL, | |
519 | 523 | /* PowerPC 40x TLB management instructions */ |
520 | - PPC_40x_TLB = 0x0001000000000000ULL, | |
524 | + PPC_40x_TLB = 0x0000100000000000ULL, | |
521 | 525 | /* segment register access instructions for PowerPC 64 "bridge" */ |
522 | - PPC_SEGMENT_64B = 0x0002000000000000ULL, | |
526 | + PPC_SEGMENT_64B = 0x0000200000000000ULL, | |
523 | 527 | /* SLB management */ |
524 | - PPC_SLBI = 0x0004000000000000ULL, | |
528 | + PPC_SLBI = 0x0000400000000000ULL, | |
525 | 529 | |
526 | 530 | /* Embedded PowerPC dedicated instructions */ |
527 | - PPC_EMB_COMMON = 0x0010000000000000ULL, | |
531 | + PPC_WRTEE = 0x0001000000000000ULL, | |
528 | 532 | /* PowerPC 40x exception model */ |
529 | - PPC_40x_EXCP = 0x0020000000000000ULL, | |
533 | + PPC_40x_EXCP = 0x0002000000000000ULL, | |
530 | 534 | /* PowerPC 405 Mac instructions */ |
531 | - PPC_405_MAC = 0x0040000000000000ULL, | |
535 | + PPC_405_MAC = 0x0004000000000000ULL, | |
532 | 536 | /* PowerPC 440 specific instructions */ |
533 | - PPC_440_SPEC = 0x0080000000000000ULL, | |
537 | + PPC_440_SPEC = 0x0008000000000000ULL, | |
534 | 538 | /* BookE (embedded) PowerPC specification */ |
535 | - PPC_BOOKE = 0x0100000000000000ULL, | |
536 | - /* More BookE (embedded) instructions... */ | |
537 | - PPC_BOOKE_EXT = 0x0200000000000000ULL, | |
539 | + PPC_BOOKE = 0x0010000000000000ULL, | |
540 | + /* mfapidi instruction */ | |
541 | + PPC_MFAPIDI = 0x0020000000000000ULL, | |
542 | + /* tlbiva instruction */ | |
543 | + PPC_TLBIVA = 0x0040000000000000ULL, | |
544 | + /* tlbivax instruction */ | |
545 | + PPC_TLBIVAX = 0x0080000000000000ULL, | |
538 | 546 | /* PowerPC 4xx dedicated instructions */ |
539 | - PPC_4xx_COMMON = 0x0400000000000000ULL, | |
547 | + PPC_4xx_COMMON = 0x0100000000000000ULL, | |
540 | 548 | /* PowerPC 40x ibct instructions */ |
541 | - PPC_40x_ICBT = 0x0800000000000000ULL, | |
549 | + PPC_40x_ICBT = 0x0200000000000000ULL, | |
542 | 550 | /* rfmci is not implemented in all BookE PowerPC */ |
543 | - PPC_RFMCI = 0x1000000000000000ULL, | |
551 | + PPC_RFMCI = 0x0400000000000000ULL, | |
552 | + /* rfdi instruction */ | |
553 | + PPC_RFDI = 0x0800000000000000ULL, | |
554 | + /* DCR accesses */ | |
555 | + PPC_DCR = 0x1000000000000000ULL, | |
556 | + /* DCR extended accesse */ | |
557 | + PPC_DCRX = 0x2000000000000000ULL, | |
544 | 558 | /* user-mode DCR access, implemented in PowerPC 460 */ |
545 | - PPC_DCRUX = 0x2000000000000000ULL, | |
559 | + PPC_DCRUX = 0x4000000000000000ULL, | |
546 | 560 | }; |
547 | 561 | |
548 | 562 | /*****************************************************************************/ |
... | ... | @@ -1119,7 +1133,7 @@ GEN_HANDLER(cmpli, 0x0A, 0xFF, 0xFF, 0x00400000, PPC_INTEGER) |
1119 | 1133 | } |
1120 | 1134 | |
1121 | 1135 | /* isel (PowerPC 2.03 specification) */ |
1122 | -GEN_HANDLER(isel, 0x1F, 0x0F, 0x00, 0x00000001, PPC_203) | |
1136 | +GEN_HANDLER(isel, 0x1F, 0x0F, 0x00, 0x00000001, PPC_ISEL) | |
1123 | 1137 | { |
1124 | 1138 | uint32_t bi = rC(ctx->opcode); |
1125 | 1139 | uint32_t mask; |
... | ... | @@ -1342,7 +1356,7 @@ GEN_HANDLER(xoris, 0x1B, 0xFF, 0xFF, 0x00000000, PPC_INTEGER) |
1342 | 1356 | } |
1343 | 1357 | |
1344 | 1358 | /* popcntb : PowerPC 2.03 specification */ |
1345 | -GEN_HANDLER(popcntb, 0x1F, 0x03, 0x03, 0x0000F801, PPC_203) | |
1359 | +GEN_HANDLER(popcntb, 0x1F, 0x03, 0x03, 0x0000F801, PPC_POPCNTB) | |
1346 | 1360 | { |
1347 | 1361 | gen_op_load_gpr_T0(rS(ctx->opcode)); |
1348 | 1362 | #if defined(TARGET_PPC64) |
... | ... | @@ -2457,7 +2471,7 @@ static GenOpFunc1 *gen_op_stsw[NB_MEM_FUNCS] = { |
2457 | 2471 | * In an other hand, IBM says this is valid, but rA won't be loaded. |
2458 | 2472 | * For now, I'll follow the spec... |
2459 | 2473 | */ |
2460 | -GEN_HANDLER(lswi, 0x1F, 0x15, 0x12, 0x00000001, PPC_INTEGER) | |
2474 | +GEN_HANDLER(lswi, 0x1F, 0x15, 0x12, 0x00000001, PPC_STRING) | |
2461 | 2475 | { |
2462 | 2476 | int nb = NB(ctx->opcode); |
2463 | 2477 | int start = rD(ctx->opcode); |
... | ... | @@ -2482,7 +2496,7 @@ GEN_HANDLER(lswi, 0x1F, 0x15, 0x12, 0x00000001, PPC_INTEGER) |
2482 | 2496 | } |
2483 | 2497 | |
2484 | 2498 | /* lswx */ |
2485 | -GEN_HANDLER(lswx, 0x1F, 0x15, 0x10, 0x00000001, PPC_INTEGER) | |
2499 | +GEN_HANDLER(lswx, 0x1F, 0x15, 0x10, 0x00000001, PPC_STRING) | |
2486 | 2500 | { |
2487 | 2501 | int ra = rA(ctx->opcode); |
2488 | 2502 | int rb = rB(ctx->opcode); |
... | ... | @@ -2498,7 +2512,7 @@ GEN_HANDLER(lswx, 0x1F, 0x15, 0x10, 0x00000001, PPC_INTEGER) |
2498 | 2512 | } |
2499 | 2513 | |
2500 | 2514 | /* stswi */ |
2501 | -GEN_HANDLER(stswi, 0x1F, 0x15, 0x16, 0x00000001, PPC_INTEGER) | |
2515 | +GEN_HANDLER(stswi, 0x1F, 0x15, 0x16, 0x00000001, PPC_STRING) | |
2502 | 2516 | { |
2503 | 2517 | int nb = NB(ctx->opcode); |
2504 | 2518 | |
... | ... | @@ -2512,7 +2526,7 @@ GEN_HANDLER(stswi, 0x1F, 0x15, 0x16, 0x00000001, PPC_INTEGER) |
2512 | 2526 | } |
2513 | 2527 | |
2514 | 2528 | /* stswx */ |
2515 | -GEN_HANDLER(stswx, 0x1F, 0x15, 0x14, 0x00000001, PPC_INTEGER) | |
2529 | +GEN_HANDLER(stswx, 0x1F, 0x15, 0x14, 0x00000001, PPC_STRING) | |
2516 | 2530 | { |
2517 | 2531 | /* NIP cannot be restored if the memory exception comes from an helper */ |
2518 | 2532 | gen_update_nip(ctx, ctx->nip - 4); |
... | ... | @@ -4520,14 +4534,14 @@ GEN_HANDLER(stfqx, 0x1F, 0x17, 0x1C, 0x00000001, PPC_POWER2) |
4520 | 4534 | |
4521 | 4535 | /* BookE specific instructions */ |
4522 | 4536 | /* XXX: not implemented on 440 ? */ |
4523 | -GEN_HANDLER(mfapidi, 0x1F, 0x13, 0x08, 0x0000F801, PPC_BOOKE_EXT) | |
4537 | +GEN_HANDLER(mfapidi, 0x1F, 0x13, 0x08, 0x0000F801, PPC_MFAPIDI) | |
4524 | 4538 | { |
4525 | 4539 | /* XXX: TODO */ |
4526 | 4540 | GEN_EXCP_INVAL(ctx); |
4527 | 4541 | } |
4528 | 4542 | |
4529 | 4543 | /* XXX: not implemented on 440 ? */ |
4530 | -GEN_HANDLER(tlbiva, 0x1F, 0x12, 0x18, 0x03FFF801, PPC_BOOKE_EXT) | |
4544 | +GEN_HANDLER(tlbiva, 0x1F, 0x12, 0x18, 0x03FFF801, PPC_TLBIVA) | |
4531 | 4545 | { |
4532 | 4546 | #if defined(CONFIG_USER_ONLY) |
4533 | 4547 | GEN_EXCP_PRIVOPC(ctx); |
... | ... | @@ -4723,7 +4737,7 @@ GEN_MAC_HANDLER(mullhw, 0x08, 0x0D); |
4723 | 4737 | GEN_MAC_HANDLER(mullhwu, 0x08, 0x0C); |
4724 | 4738 | |
4725 | 4739 | /* mfdcr */ |
4726 | -GEN_HANDLER(mfdcr, 0x1F, 0x03, 0x0A, 0x00000001, PPC_EMB_COMMON) | |
4740 | +GEN_HANDLER(mfdcr, 0x1F, 0x03, 0x0A, 0x00000001, PPC_DCR) | |
4727 | 4741 | { |
4728 | 4742 | #if defined(CONFIG_USER_ONLY) |
4729 | 4743 | GEN_EXCP_PRIVREG(ctx); |
... | ... | @@ -4741,7 +4755,7 @@ GEN_HANDLER(mfdcr, 0x1F, 0x03, 0x0A, 0x00000001, PPC_EMB_COMMON) |
4741 | 4755 | } |
4742 | 4756 | |
4743 | 4757 | /* mtdcr */ |
4744 | -GEN_HANDLER(mtdcr, 0x1F, 0x03, 0x0E, 0x00000001, PPC_EMB_COMMON) | |
4758 | +GEN_HANDLER(mtdcr, 0x1F, 0x03, 0x0E, 0x00000001, PPC_DCR) | |
4745 | 4759 | { |
4746 | 4760 | #if defined(CONFIG_USER_ONLY) |
4747 | 4761 | GEN_EXCP_PRIVREG(ctx); |
... | ... | @@ -4760,7 +4774,7 @@ GEN_HANDLER(mtdcr, 0x1F, 0x03, 0x0E, 0x00000001, PPC_EMB_COMMON) |
4760 | 4774 | |
4761 | 4775 | /* mfdcrx */ |
4762 | 4776 | /* XXX: not implemented on 440 ? */ |
4763 | -GEN_HANDLER(mfdcrx, 0x1F, 0x03, 0x08, 0x00000000, PPC_BOOKE_EXT) | |
4777 | +GEN_HANDLER(mfdcrx, 0x1F, 0x03, 0x08, 0x00000000, PPC_DCRX) | |
4764 | 4778 | { |
4765 | 4779 | #if defined(CONFIG_USER_ONLY) |
4766 | 4780 | GEN_EXCP_PRIVREG(ctx); |
... | ... | @@ -4778,7 +4792,7 @@ GEN_HANDLER(mfdcrx, 0x1F, 0x03, 0x08, 0x00000000, PPC_BOOKE_EXT) |
4778 | 4792 | |
4779 | 4793 | /* mtdcrx */ |
4780 | 4794 | /* XXX: not implemented on 440 ? */ |
4781 | -GEN_HANDLER(mtdcrx, 0x1F, 0x03, 0x0C, 0x00000000, PPC_BOOKE_EXT) | |
4795 | +GEN_HANDLER(mtdcrx, 0x1F, 0x03, 0x0C, 0x00000000, PPC_DCRX) | |
4782 | 4796 | { |
4783 | 4797 | #if defined(CONFIG_USER_ONLY) |
4784 | 4798 | GEN_EXCP_PRIVREG(ctx); |
... | ... | @@ -4912,7 +4926,7 @@ GEN_HANDLER(rfci, 0x13, 0x13, 0x01, 0x03FF8001, PPC_BOOKE) |
4912 | 4926 | |
4913 | 4927 | /* BookE specific */ |
4914 | 4928 | /* XXX: not implemented on 440 ? */ |
4915 | -GEN_HANDLER(rfdi, 0x13, 0x07, 0x01, 0x03FF8001, PPC_BOOKE_EXT) | |
4929 | +GEN_HANDLER(rfdi, 0x13, 0x07, 0x01, 0x03FF8001, PPC_RFDI) | |
4916 | 4930 | { |
4917 | 4931 | #if defined(CONFIG_USER_ONLY) |
4918 | 4932 | GEN_EXCP_PRIVOPC(ctx); |
... | ... | @@ -5088,7 +5102,7 @@ GEN_HANDLER2(tlbwe_440, "tlbwe", 0x1F, 0x12, 0x1E, 0x00000001, PPC_BOOKE) |
5088 | 5102 | } |
5089 | 5103 | |
5090 | 5104 | /* wrtee */ |
5091 | -GEN_HANDLER(wrtee, 0x1F, 0x03, 0x04, 0x000FFC01, PPC_EMB_COMMON) | |
5105 | +GEN_HANDLER(wrtee, 0x1F, 0x03, 0x04, 0x000FFC01, PPC_WRTEE) | |
5092 | 5106 | { |
5093 | 5107 | #if defined(CONFIG_USER_ONLY) |
5094 | 5108 | GEN_EXCP_PRIVOPC(ctx); |
... | ... | @@ -5107,7 +5121,7 @@ GEN_HANDLER(wrtee, 0x1F, 0x03, 0x04, 0x000FFC01, PPC_EMB_COMMON) |
5107 | 5121 | } |
5108 | 5122 | |
5109 | 5123 | /* wrteei */ |
5110 | -GEN_HANDLER(wrteei, 0x1F, 0x03, 0x05, 0x000EFC01, PPC_EMB_COMMON) | |
5124 | +GEN_HANDLER(wrteei, 0x1F, 0x03, 0x05, 0x000EFC01, PPC_WRTEE) | |
5111 | 5125 | { |
5112 | 5126 | #if defined(CONFIG_USER_ONLY) |
5113 | 5127 | GEN_EXCP_PRIVOPC(ctx); |
... | ... | @@ -5943,7 +5957,7 @@ GEN_SPEOP_COMP(efststlt); |
5943 | 5957 | GEN_SPEOP_COMP(efststeq); |
5944 | 5958 | |
5945 | 5959 | /* Opcodes definitions */ |
5946 | -GEN_SPE(efsadd, efssub, 0x00, 0x0A, 0x00000000, PPC_SPEFPU); // | |
5960 | +GEN_SPE(efsadd, efssub, 0x00, 0x0B, 0x00000000, PPC_SPEFPU); // | |
5947 | 5961 | GEN_SPE(efsabs, efsnabs, 0x02, 0x0B, 0x0000F800, PPC_SPEFPU); // |
5948 | 5962 | GEN_SPE(efsneg, speundef, 0x03, 0x0B, 0x0000F800, PPC_SPEFPU); // |
5949 | 5963 | GEN_SPE(efsmul, efsdiv, 0x04, 0x0B, 0x00000000, PPC_SPEFPU); // | ... | ... |
target-ppc/translate_init.c
... | ... | @@ -2648,11 +2648,11 @@ static int check_pow_hid0 (CPUPPCState *env) |
2648 | 2648 | /* PowerPC implementations definitions */ |
2649 | 2649 | |
2650 | 2650 | /* PowerPC 40x instruction set */ |
2651 | -#define POWERPC_INSNS_EMB (PPC_INSNS_BASE | PPC_EMB_COMMON | \ | |
2651 | +#define POWERPC_INSNS_EMB (PPC_INSNS_BASE | PPC_WRTEE | \ | |
2652 | 2652 | PPC_CACHE | PPC_CACHE_ICBI | PPC_CACHE_DCBZ) |
2653 | 2653 | |
2654 | 2654 | /* PowerPC 401 */ |
2655 | -#define POWERPC_INSNS_401 (POWERPC_INSNS_EMB | \ | |
2655 | +#define POWERPC_INSNS_401 (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR | \ | |
2656 | 2656 | PPC_MEM_SYNC | PPC_MEM_EIEIO | \ |
2657 | 2657 | PPC_4xx_COMMON | PPC_40x_EXCP | PPC_40x_ICBT) |
2658 | 2658 | #define POWERPC_MSRM_401 (0x00000000000FD201ULL) |
... | ... | @@ -2676,7 +2676,7 @@ static void init_proc_401 (CPUPPCState *env) |
2676 | 2676 | } |
2677 | 2677 | |
2678 | 2678 | /* PowerPC 401x2 */ |
2679 | -#define POWERPC_INSNS_401x2 (POWERPC_INSNS_EMB | \ | |
2679 | +#define POWERPC_INSNS_401x2 (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR | \ | |
2680 | 2680 | PPC_MEM_SYNC | PPC_MEM_EIEIO | \ |
2681 | 2681 | PPC_40x_TLB | PPC_MEM_TLBIA | PPC_MEM_TLBSYNC | \ |
2682 | 2682 | PPC_CACHE_DCBA | PPC_MFTB | \ |
... | ... | @@ -2709,7 +2709,7 @@ static void init_proc_401x2 (CPUPPCState *env) |
2709 | 2709 | } |
2710 | 2710 | |
2711 | 2711 | /* PowerPC 401x3 */ |
2712 | -#define POWERPC_INSNS_401x3 (POWERPC_INSNS_EMB | \ | |
2712 | +#define POWERPC_INSNS_401x3 (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR | \ | |
2713 | 2713 | PPC_MEM_SYNC | PPC_MEM_EIEIO | \ |
2714 | 2714 | PPC_40x_TLB | PPC_MEM_TLBIA | PPC_MEM_TLBSYNC | \ |
2715 | 2715 | PPC_CACHE_DCBA | PPC_MFTB | \ |
... | ... | @@ -2738,7 +2738,7 @@ static void init_proc_401x3 (CPUPPCState *env) |
2738 | 2738 | } |
2739 | 2739 | |
2740 | 2740 | /* IOP480 */ |
2741 | -#define POWERPC_INSNS_IOP480 (POWERPC_INSNS_EMB | \ | |
2741 | +#define POWERPC_INSNS_IOP480 (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR | \ | |
2742 | 2742 | PPC_MEM_SYNC | PPC_MEM_EIEIO | \ |
2743 | 2743 | PPC_40x_TLB | PPC_MEM_TLBIA | PPC_MEM_TLBSYNC | \ |
2744 | 2744 | PPC_CACHE_DCBA | \ |
... | ... | @@ -2771,7 +2771,7 @@ static void init_proc_IOP480 (CPUPPCState *env) |
2771 | 2771 | } |
2772 | 2772 | |
2773 | 2773 | /* PowerPC 403 */ |
2774 | -#define POWERPC_INSNS_403 (POWERPC_INSNS_EMB | \ | |
2774 | +#define POWERPC_INSNS_403 (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR | \ | |
2775 | 2775 | PPC_MEM_SYNC | PPC_MEM_EIEIO | \ |
2776 | 2776 | PPC_4xx_COMMON | PPC_40x_EXCP | PPC_40x_ICBT) |
2777 | 2777 | #define POWERPC_MSRM_403 (0x000000000007D00DULL) |
... | ... | @@ -2800,7 +2800,7 @@ static void init_proc_403 (CPUPPCState *env) |
2800 | 2800 | } |
2801 | 2801 | |
2802 | 2802 | /* PowerPC 403 GCX */ |
2803 | -#define POWERPC_INSNS_403GCX (POWERPC_INSNS_EMB | \ | |
2803 | +#define POWERPC_INSNS_403GCX (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR | \ | |
2804 | 2804 | PPC_MEM_SYNC | PPC_MEM_EIEIO | \ |
2805 | 2805 | PPC_40x_TLB | PPC_MEM_TLBIA | PPC_MEM_TLBSYNC | \ |
2806 | 2806 | PPC_4xx_COMMON | PPC_40x_EXCP | PPC_40x_ICBT) |
... | ... | @@ -2844,7 +2844,8 @@ static void init_proc_403GCX (CPUPPCState *env) |
2844 | 2844 | } |
2845 | 2845 | |
2846 | 2846 | /* PowerPC 405 */ |
2847 | -#define POWERPC_INSNS_405 (POWERPC_INSNS_EMB | PPC_MFTB | \ | |
2847 | +#define POWERPC_INSNS_405 (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR | \ | |
2848 | + PPC_MFTB | \ | |
2848 | 2849 | PPC_MEM_SYNC | PPC_MEM_EIEIO | PPC_CACHE_DCBA | \ |
2849 | 2850 | PPC_40x_TLB | PPC_MEM_TLBIA | PPC_MEM_TLBSYNC | \ |
2850 | 2851 | PPC_4xx_COMMON | PPC_40x_EXCP | PPC_40x_ICBT | \ |
... | ... | @@ -2889,7 +2890,7 @@ static void init_proc_405 (CPUPPCState *env) |
2889 | 2890 | } |
2890 | 2891 | |
2891 | 2892 | /* PowerPC 440 EP */ |
2892 | -#define POWERPC_INSNS_440EP (POWERPC_INSNS_EMB | \ | |
2893 | +#define POWERPC_INSNS_440EP (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR | \ | |
2893 | 2894 | PPC_CACHE_DCBA | PPC_MEM_TLBSYNC | \ |
2894 | 2895 | PPC_BOOKE | PPC_4xx_COMMON | PPC_405_MAC | \ |
2895 | 2896 | PPC_440_SPEC | PPC_RFMCI) |
... | ... | @@ -2939,10 +2940,11 @@ static void init_proc_440EP (CPUPPCState *env) |
2939 | 2940 | } |
2940 | 2941 | |
2941 | 2942 | /* PowerPC 440 GP */ |
2942 | -#define POWERPC_INSNS_440GP (POWERPC_INSNS_EMB | \ | |
2943 | +#define POWERPC_INSNS_440GP (POWERPC_INSNS_EMB | PPC_STRING | \ | |
2944 | + PPC_DCR | PPC_DCRX | \ | |
2943 | 2945 | PPC_CACHE_DCBA | PPC_MEM_TLBSYNC | \ |
2944 | - PPC_BOOKE | PPC_BOOKE_EXT | PPC_4xx_COMMON | \ | |
2945 | - PPC_405_MAC | PPC_440_SPEC) | |
2946 | + PPC_BOOKE | PPC_MFAPIDI | PPC_TLBIVA | \ | |
2947 | + PPC_4xx_COMMON | PPC_405_MAC | PPC_440_SPEC) | |
2946 | 2948 | #define POWERPC_MSRM_440GP (0x000000000006FF30ULL) |
2947 | 2949 | #define POWERPC_MMU_440GP (POWERPC_MMU_BOOKE) |
2948 | 2950 | #define POWERPC_EXCP_440GP (POWERPC_EXCP_BOOKE) |
... | ... | @@ -2971,7 +2973,7 @@ static void init_proc_440GP (CPUPPCState *env) |
2971 | 2973 | } |
2972 | 2974 | |
2973 | 2975 | /* PowerPC 440x4 */ |
2974 | -#define POWERPC_INSNS_440x4 (POWERPC_INSNS_EMB | \ | |
2976 | +#define POWERPC_INSNS_440x4 (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR | \ | |
2975 | 2977 | PPC_CACHE_DCBA | PPC_MEM_TLBSYNC | \ |
2976 | 2978 | PPC_BOOKE | PPC_4xx_COMMON | PPC_405_MAC | \ |
2977 | 2979 | PPC_440_SPEC) |
... | ... | @@ -3004,7 +3006,7 @@ static void init_proc_440x4 (CPUPPCState *env) |
3004 | 3006 | } |
3005 | 3007 | |
3006 | 3008 | /* PowerPC 440x5 */ |
3007 | -#define POWERPC_INSNS_440x5 (POWERPC_INSNS_EMB | \ | |
3009 | +#define POWERPC_INSNS_440x5 (POWERPC_INSNS_EMB | PPC_STRING | PPC_DCR | \ | |
3008 | 3010 | PPC_CACHE_DCBA | PPC_MEM_TLBSYNC | \ |
3009 | 3011 | PPC_BOOKE | PPC_4xx_COMMON | PPC_405_MAC | \ |
3010 | 3012 | PPC_440_SPEC | PPC_RFMCI) |
... | ... | @@ -3054,10 +3056,11 @@ static void init_proc_440x5 (CPUPPCState *env) |
3054 | 3056 | } |
3055 | 3057 | |
3056 | 3058 | /* PowerPC 460 (guessed) */ |
3057 | -#define POWERPC_INSNS_460 (POWERPC_INSNS_EMB | \ | |
3059 | +#define POWERPC_INSNS_460 (POWERPC_INSNS_EMB | PPC_STRING | \ | |
3060 | + PPC_DCR | PPC_DCRX | PPC_DCRUX | \ | |
3058 | 3061 | PPC_CACHE_DCBA | PPC_MEM_TLBSYNC | \ |
3059 | - PPC_BOOKE | PPC_BOOKE_EXT | PPC_4xx_COMMON | \ | |
3060 | - PPC_405_MAC | PPC_440_SPEC | PPC_DCRUX) | |
3062 | + PPC_BOOKE | PPC_MFAPIDI | PPC_TLBIVA | \ | |
3063 | + PPC_4xx_COMMON | PPC_405_MAC | PPC_440_SPEC) | |
3061 | 3064 | #define POWERPC_MSRM_460 (0x000000000006FF30ULL) |
3062 | 3065 | #define POWERPC_MMU_460 (POWERPC_MMU_BOOKE) |
3063 | 3066 | #define POWERPC_EXCP_460 (POWERPC_EXCP_BOOKE) |
... | ... | @@ -3110,13 +3113,14 @@ static void init_proc_460 (CPUPPCState *env) |
3110 | 3113 | } |
3111 | 3114 | |
3112 | 3115 | /* PowerPC 460F (guessed) */ |
3113 | -#define POWERPC_INSNS_460F (POWERPC_INSNS_EMB | \ | |
3116 | +#define POWERPC_INSNS_460F (POWERPC_INSNS_EMB | PPC_STRING | \ | |
3117 | + PPC_DCR | PPC_DCRX | PPC_DCRUX | \ | |
3114 | 3118 | PPC_CACHE_DCBA | PPC_MEM_TLBSYNC | \ |
3115 | 3119 | PPC_FLOAT | PPC_FLOAT_FSQRT | PPC_FLOAT_FRES | \ |
3116 | 3120 | PPC_FLOAT_FRSQRTE | PPC_FLOAT_FSEL | \ |
3117 | 3121 | PPC_FLOAT_STFIWX | \ |
3118 | - PPC_BOOKE | PPC_BOOKE_EXT | PPC_4xx_COMMON | \ | |
3119 | - PPC_405_MAC | PPC_440_SPEC | PPC_DCRUX) | |
3122 | + PPC_BOOKE | PPC_MFAPIDI | PPC_TLBIVA | \ | |
3123 | + PPC_4xx_COMMON | PPC_405_MAC | PPC_440_SPEC) | |
3120 | 3124 | #define POWERPC_MSRM_460 (0x000000000006FF30ULL) |
3121 | 3125 | #define POWERPC_MMU_460F (POWERPC_MMU_BOOKE) |
3122 | 3126 | #define POWERPC_EXCP_460F (POWERPC_EXCP_BOOKE) |
... | ... | @@ -3231,7 +3235,7 @@ static void init_proc_e500 (CPUPPCState *env) |
3231 | 3235 | |
3232 | 3236 | /* Non-embedded PowerPC */ |
3233 | 3237 | /* Base instructions set for all 6xx/7xx/74xx/970 PowerPC */ |
3234 | -#define POWERPC_INSNS_6xx (PPC_INSNS_BASE | PPC_FLOAT | \ | |
3238 | +#define POWERPC_INSNS_6xx (PPC_INSNS_BASE | PPC_STRING | PPC_FLOAT | \ | |
3235 | 3239 | PPC_CACHE | PPC_CACHE_ICBI | \ |
3236 | 3240 | PPC_MEM_SYNC | PPC_MEM_EIEIO | PPC_MEM_TLBIE) |
3237 | 3241 | /* Instructions common to all 6xx/7xx/74xx/970 PowerPC except 601 & 602 */ | ... | ... |