ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/mon/src/mon_ppc.cpp
(Generate patch)

Comparing mon/src/mon_ppc.cpp (file contents):
Revision 1.9 by gbeauche, 2005-03-13T17:09:19Z vs.
Revision 1.10 by gbeauche, 2006-03-13T12:15:23Z

# Line 165 | Line 165 | static char *to_code[32] = {
165  
166   #define mdsform(s) fprintf(f, "%s%s\tr%d,r%d,r%d,%d\n", s, w & 1 ? "." : "", ra, rd, rb, rc | (w & 32 ? 32 : 0))
167  
168 #define vx_form(s) fprintf(f, "%s\tv%d,v%d,v%d\n", s, rd, ra, rb)
169 #define vxi_form(s) fprintf(f, "%s\tv%d,v%d,v%d,%d\n", s, rd, ra, rb, (rc & 15))
168   #define va_form(s) fprintf(f, "%s\tv%d,v%d,v%d,v%d\n", s, rd, ra, rb, rc)
169 + #define vx_form(s) fprintf(f, "%s\tv%d,v%d,v%d\n", s, rd, ra, rb)
170 + #define vxr_form(s) fprintf(f, "%s%s\tv%d,v%d,v%d\n", s, w & (1 << 10) ? "." : "", rd, ra, rb)
171 + #define vxi_ra_form(s) fprintf(f, "%s\tv%d,v%d,%d\n", s, rd, rb, ra)
172 + #define vx_raz_form(s) \
173 +        if (ra == 0) \
174 +                fprintf(f, "%s\tv%d,v%d\n", s, rd, rb); \
175 +        else \
176 +                fprintf(f, "?\n")
177 + #define vxi_ras_rbz_form(s) \
178 +        if (rb == 0) \
179 +                fprintf(f, "%s\tv%d,%d\n", s, rd, ra - (ra & 0x10 ? 0x20 : 0)); \
180 +        else \
181 +                fprintf(f, "?\n")
182  
183   // Prototypes
184   static void disass4(FILE *f, unsigned int adr, unsigned int w);
# Line 411 | Line 422 | void disass_ppc(FILE *f, unsigned int ad
422   static void disass4(FILE *f, unsigned int adr, unsigned int w)
423   {
424          switch (vxop) {
425 +        case 1540:
426 +                if (ra == 0 && rb == 0)
427 +                        fprintf(f, "mfvscr\tv%d\n", rd);
428 +                else
429 +                        fprintf(f, "?\n");
430 +                break;
431 +        case 1604:
432 +                if (rd == 0 && ra == 0)
433 +                        fprintf(f, "mtvscr\tv%d\n", rb);
434 +                else
435 +                        fprintf(f, "?\n");
436 +                break;
437          case 384: vx_form("vaddcuw"); break;
438          case 10: vx_form("vaddfp"); break;
439          case 768: vx_form("vaddsbs"); break;
# Line 430 | Line 453 | static void disass4(FILE *f, unsigned in
453          case 1026: vx_form("vavgub"); break;
454          case 1090: vx_form("vavguh"); break;
455          case 1154: vx_form("vavguw"); break;
456 +        case 842: vxi_ra_form("vcfsx"); break;
457 +        case 778: vxi_ra_form("vcfux"); break;
458 +        case 966: case 966+1024: vxr_form("vcmpbfp"); break;
459 +        case 198: case 198+1024: vxr_form("vcmpeqfp"); break;
460 +        case 6: case 6+1024: vxr_form("vcmpequb"); break;
461 +        case 70: case 70+1024: vxr_form("vcmpequh"); break;
462 +        case 134: case 134+1024: vxr_form("vcmpequw"); break;
463 +        case 454: case 454+1024: vxr_form("vcmpgefp"); break;
464 +        case 710: case 710+1024: vxr_form("vcmpgtfp"); break;
465 +        case 774: case 774+1024: vxr_form("vcmpgtsb"); break;
466 +        case 838: case 838+1024: vxr_form("vcmpgtsh"); break;
467 +        case 902: case 902+1024: vxr_form("vcmpgtsw"); break;
468 +        case 518: case 518+1024: vxr_form("vcmpgtub"); break;
469 +        case 582: case 582+1024: vxr_form("vcmpgtuh"); break;
470 +        case 646: case 646+1024: vxr_form("vcmpgtuw"); break;
471 +        case 970: vxi_ra_form("vctsxs"); break;
472 +        case 906: vxi_ra_form("vctuxs"); break;
473 +        case 394: vx_raz_form("vexptefp"); break;
474 +        case 458: vx_raz_form("vlogefp"); break;
475          case 1034: vx_form("vmaxfp"); break;
476          case 258: vx_form("vmaxsb"); break;
477          case 322: vx_form("vmaxsh"); break;
478          case 386: vx_form("vmaxsw"); break;
479          case 2: vx_form("vmaxub"); break;
480 <        case 66: vx_form("vmaxus"); break;
480 >        case 66: vx_form("vmaxuh"); break;
481          case 130: vx_form("vmaxuw"); break;
482          case 1098: vx_form("vminfp"); break;
483          case 770: vx_form("vminsb"); break;
# Line 460 | Line 502 | static void disass4(FILE *f, unsigned in
502          case 72: vx_form("vmulouh"); break;
503          case 1284: vx_form("vnor"); break;
504          case 1156: vx_form("vor"); break;
463        case 1220: vx_form("vxor"); break;
505          case 782: vx_form("vpkpx"); break;
506          case 398: vx_form("vpkshss"); break;
507          case 270: vx_form("vpkshus"); break;
# Line 470 | Line 511 | static void disass4(FILE *f, unsigned in
511          case 142: vx_form("vpkuhus"); break;
512          case 78: vx_form("vpkuwum"); break;
513          case 206: vx_form("vpkuwus"); break;
514 +        case 266: vx_raz_form("vrefp"); break;
515 +        case 714: vx_raz_form("vrfim"); break;
516 +        case 522: vx_raz_form("vrfin"); break;
517 +        case 650: vx_raz_form("vrfip"); break;
518 +        case 586: vx_raz_form("vrfiz"); break;
519          case 4: vx_form("vrlb"); break;
520          case 68: vx_form("vrlh"); break;
521          case 132: vx_form("vrlw"); break;
522 +        case 330: vx_raz_form("vrsqrtefp"); break;
523          case 452: vx_form("vsl"); break;
524          case 260: vx_form("vslb"); break;
525          case 324: vx_form("vslh"); break;
526          case 1036: vx_form("vslo"); break;
527          case 388: vx_form("vslw"); break;
528 +        case 524: vxi_ra_form("vspltb"); break;
529 +        case 588: vxi_ra_form("vsplth"); break;
530 +        case 780: vxi_ras_rbz_form("vspltisb"); break;
531 +        case 844: vxi_ras_rbz_form("vspltish"); break;
532 +        case 908: vxi_ras_rbz_form("vspltisw"); break;
533 +        case 652: vxi_ra_form("vspltw"); break;
534          case 708: vx_form("vsr"); break;
535          case 772: vx_form("vsrab"); break;
536          case 836: vx_form("vsrah"); break;
# Line 502 | Line 555 | static void disass4(FILE *f, unsigned in
555          case 1800: vx_form("vsum4sbs"); break;
556          case 1608: vx_form("vsum4shs"); break;
557          case 1544: vx_form("vsum4ubs"); break;
558 +        case 846: vx_raz_form("vupkhpx"); break;
559 +        case 526: vx_raz_form("vupkhsb"); break;
560 +        case 590: vx_raz_form("vupkhsh"); break;
561 +        case 974: vx_raz_form("vupklpx"); break;
562 +        case 654: vx_raz_form("vupklsb"); break;
563 +        case 718: vx_raz_form("vupklsh"); break;
564 +        case 1220: vx_form("vxor"); break;
565          default:
566 <                if ((vxop & 0x43f) == 44) {
567 <                        vxi_form("vsldoi");
566 >                if ((vxop & 0x43f) == 44) {             // vsldoi vD,vA,vB,SHB
567 >                        fprintf(f, "vsldoi\tv%d,v%d,v%d,%d\n", rd, ra, rb, rc & 15);
568                          break;
569                  }
570 <                fprintf(f, "?\n");
570 >                switch (vxop & 0x3f) {                  // VA-form, must come last
571 >                case 46: va_form("vmaddfp"); break;
572 >                case 32: va_form("vmhaddshs"); break;
573 >                case 33: va_form("vmhraddshs"); break;
574 >                case 34: va_form("vmladduhm"); break;
575 >                case 37: va_form("vmsummbm"); break;
576 >                case 40: va_form("vmsumshm"); break;
577 >                case 41: va_form("vmsumshs"); break;
578 >                case 36: va_form("vmsumubm"); break;
579 >                case 38: va_form("vmsumuhm"); break;
580 >                case 39: va_form("vmsumuhs"); break;
581 >                case 47: va_form("vnmsubfp"); break;
582 >                case 43: va_form("vperm"); break;
583 >                case 42: va_form("vsel"); break;
584 >                default: fprintf(f, "?\n"); break;
585 >                }
586                  break;
587          }
588   }
# Line 755 | Line 830 | static void disass31(FILE *f, unsigned i
830                  case 359: xform_vls("lvxl"); break;
831                  case 370: xform("tlbia"); break;
832  
833 +                case 822: // AltiVec
834 +                        if ((rd & 0xc) == 0 && ra == 0 && rb == 0 && (w & 1) == 0) {
835 +                                if (rd & 0x10)
836 +                                        fprintf(f, "dssall\n");
837 +                                else
838 +                                        fprintf(f, "dss\t%d\n", rd & 3);
839 +                        }
840 +                        else
841 +                                fprintf(f, "?\n");
842 +                        break;
843 +
844 +                case 342: // AltiVec
845 +                        if ((rd & 0xc) == 0 && (w & 1) == 0)
846 +                                fprintf(f, "dst%s\tr%d,r%d,%d\n", rd & 0x10 ? "t" : "", ra, rb, rd & 3);
847 +                        else
848 +                                fprintf(f, "?\n");
849 +                        break;
850 +
851 +                case 374: // AltiVec
852 +                        if ((rd & 0xc) == 0 && (w & 1) == 0)
853 +                                fprintf(f, "dstst%s\tr%d,r%d,%d\n", rd & 0x10 ? "t" : "", ra, rb, rd & 3);
854 +                        else
855 +                                fprintf(f, "?\n");
856 +                        break;
857 +
858                  case 371:
859                          if ((ra | (rb << 5)) == 268)
860                                  xfxform_tb("mftb");

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines