sim-main.h: track SKY register number changes from gdb
authorRon Unrau <runrau@cygnus>
Wed, 4 Mar 1998 08:47:31 +0000 (08:47 +0000)
committerRon Unrau <runrau@cygnus>
Wed, 4 Mar 1998 08:47:31 +0000 (08:47 +0000)
interp.c: ditto

sim/mips/interp.c

index 5de00e3eecebd9a6c5032f8b778b5c628d77e811..aa151c1a9230686270fdb8454833e0598339b2d7 100644 (file)
@@ -269,8 +269,8 @@ static void device_init(SIM_DESC sd) {
 /* start-sanitize-sky */
 #ifdef TARGET_SKY
 static struct {
-  short i[16];
-  int f[NUM_VU_REGS - 16];
+  short i[NUM_VU_INTEGER_REGS];
+  int f[NUM_VU_REGS - NUM_VU_INTEGER_REGS];
 } vu_regs[2];
 #endif
 /* end-sanitize-sky */
@@ -390,7 +390,7 @@ sim_open (kind, cb, abfd, argv)
     /* start-sanitize-sky */
 #ifdef TARGET_SKY
     /* Now the VU registers */
-    for( rn = 0; rn < 16; rn++ ) { /* first the integer registers */
+    for( rn = 0; rn < NUM_VU_INTEGER_REGS; rn++ ) { 
       cpu->register_widths[rn + NUM_R5900_REGS] = 16;
       cpu->register_widths[rn + NUM_R5900_REGS + NUM_VU_REGS] = 16;
 
@@ -399,24 +399,25 @@ sim_open (kind, cb, abfd, argv)
       vu_regs[1].i[rn] = rn + 0x200;
     }
 
-    for( rn = 16; rn < NUM_VU_REGS; rn++ ) { /* then the FP registers */
+    for( rn = NUM_VU_INTEGER_REGS; rn < NUM_VU_REGS; rn++ ) { 
       float f;
+      int first_vec_reg = NUM_VU_INTEGER_REGS + 8;
 
       cpu->register_widths[rn + NUM_R5900_REGS] = 32;
       cpu->register_widths[rn + NUM_R5900_REGS + NUM_VU_REGS] = 32;
 
       /* Hack for now - to test gdb interface */
-      if( rn < 24 ) {
-       f = rn - 16 + 100.0;
-       vu_regs[0].f[rn-16] = *((unsigned *) &f);
-       f = rn - 16 + 200.0;
-       vu_regs[1].f[rn-16] = *((unsigned *) &f);
+      if( rn < first_vec_reg ) {
+       f = rn - NUM_VU_INTEGER_REGS + 100.0;
+       vu_regs[0].f[rn-NUM_VU_INTEGER_REGS] = *((unsigned *) &f);
+       f = rn - NUM_VU_INTEGER_REGS + 200.0;
+       vu_regs[1].f[rn-NUM_VU_INTEGER_REGS] = *((unsigned *) &f);
       }
       else {
-       f = (rn - 24)/4 + (rn - 24)%4 + 1000.0;
-       vu_regs[0].f[rn-16] = *((unsigned *) &f);
-       f = (rn - 24)/4 + (rn - 24)%4 + 2000.0;
-       vu_regs[1].f[rn-16] = *((unsigned *) &f);
+       f = (rn - first_vec_reg)/4 + (rn - first_vec_reg)%4 + 1000.0;
+       vu_regs[0].f[rn-NUM_VU_INTEGER_REGS] = *((unsigned *) &f);
+       f = (rn - first_vec_reg)/4 + (rn - first_vec_reg)%4 + 2000.0;
+       vu_regs[1].f[rn-NUM_VU_INTEGER_REGS] = *((unsigned *) &f);
       }
     }
 #endif
@@ -640,24 +641,36 @@ sim_store_register (sd,rn,memory,length)
 
   /* start-sanitize-sky */
 #ifdef TARGET_SKY
-  if (rn > NUM_R5900_REGS) 
+  if (rn >= NUM_R5900_REGS) 
     {
+      int size = 4;    /* Default register size */
+
       rn = rn - NUM_R5900_REGS;
 
-      if( rn < 16 ) 
-       vu_regs[0].i[rn] = T2H_2( *(unsigned short *) memory );
+      if (rn < NUM_VU_INTEGER_REGS)
+       {
+         vu_regs[0].i[rn] = T2H_2( *(unsigned short *) memory );
+         size = 2;
+       }
       else if( rn < NUM_VU_REGS )
-       vu_regs[0].f[rn - 16] = T2H_4( *(unsigned int *) memory );
+       vu_regs[0].f[rn - NUM_VU_INTEGER_REGS] 
+         = T2H_4( *(unsigned int *) memory );
       else {
        rn = rn - NUM_VU_REGS;
 
-       if( rn < 16 ) 
-         vu_regs[1].i[rn] = T2H_2( *(unsigned short *) memory );
+       if( rn < NUM_VU_INTEGER_REGS ) 
+         {
+           vu_regs[1].i[rn] = T2H_2( *(unsigned short *) memory );
+           size = 2;
+         }
        else if( rn < NUM_VU_REGS )
-         vu_regs[1].f[rn - 16] = T2H_4( *(unsigned int *) memory );
+         vu_regs[1].f[rn - NUM_VU_INTEGER_REGS] 
+           = T2H_4( *(unsigned int *) memory );
        else
          sim_io_eprintf( sd, "Invalid VU register (register store ignored)\n" );
       }
+
+      return size;
     }
 #endif
   /* end-sanitize-sky */
@@ -730,25 +743,37 @@ sim_fetch_register (sd,rn,memory,length)
 
   /* start-sanitize-sky */
 #ifdef TARGET_SKY
-  if( rn > NUM_R5900_REGS 
+  if (rn >= NUM_R5900_REGS
     {
+      int size = 4; /* default register width */
+
       rn = rn - NUM_R5900_REGS;
 
-      if( rn < 16 ) 
-       *((unsigned short *) memory) = H2T_2( vu_regs[0].i[rn] );
-      else if( rn < NUM_VU_REGS )
-       *((unsigned int *) memory) = H2T_4( vu_regs[0].f[rn - 16] );
-      else {
-       rn = rn - NUM_VU_REGS;
+      if (rn < NUM_VU_INTEGER_REGS)
+       {
+         *((unsigned short *) memory) = H2T_2( vu_regs[0].i[rn] );
+         size = 2;
+       }
+      else if (rn < NUM_VU_REGS)
+       *((unsigned int *) memory) 
+         = H2T_4( vu_regs[0].f[rn - NUM_VU_INTEGER_REGS] );
+      else 
+       {
+         rn = rn - NUM_VU_REGS;
        
-       if( rn < 16 ) 
-         (*(unsigned short *) memory) = H2T_2( vu_regs[1].i[rn] );
-       else if( rn < NUM_VU_REGS )
-         (*(unsigned int *) memory) = H2T_4( vu_regs[1].f[rn - 16] );
-       else
-         sim_io_eprintf( sd, "Invalid VU register (register fetch ignored)\n" );
-      }
-      return -1;
+         if (rn < NUM_VU_INTEGER_REGS) 
+           {
+             (*(unsigned short *) memory) = H2T_2( vu_regs[1].i[rn] );
+             size = 2;
+           }
+         else if (rn < NUM_VU_REGS)
+           (*(unsigned int *) memory) 
+             = H2T_4( vu_regs[1].f[rn - NUM_VU_INTEGER_REGS] );
+         else
+           sim_io_eprintf( sd, "Invalid VU register (register fetch ignored)\n" );
+       }
+
+      return size;
     }
 #endif
   /* end-sanitize-sky */