configure.in: add -DTARGET_SKY for mips64r5900-sky-elf configure.
authorRon Unrau <runrau@cygnus>
Sun, 15 Feb 1998 21:33:13 +0000 (21:33 +0000)
committerRon Unrau <runrau@cygnus>
Sun, 15 Feb 1998 21:33:13 +0000 (21:33 +0000)
sim-main.h: Define regs for sky if -DTARGET_SKY
interp.c: Initial register upload/download support for sky.

sim/mips/configure.in
sim/mips/interp.c

index a3b294abfdad2a93ebc0fdc71e3d7b614b8b8761..9c56e7ab042c2db1fb958ede0b594593dab8aacf 100644 (file)
@@ -202,7 +202,7 @@ AC_SUBST(sim_gen)
 case "${target}" in
 # start-sanitize-sky
   mips64r59*-sky-*)  mips_extra_objs='$(SIM_SKY_OBJS)' ;
-                    SIM_SUBTARGET="-DWITH_DEVICES=1 -DDEVICE_INIT=1";;
+                    SIM_SUBTARGET="-DTARGET_SKY -DWITH_DEVICES=1 -DDEVICE_INIT=1";;
 
 # end-sanitize-sky
   *)                 mips_extra_objs="" ;;
index da161828a0825fbe923d4051a87bf65e231d0fdb..bca479cadc9cc17b54422dcbbabee02dd40b8b43 100644 (file)
@@ -255,13 +255,20 @@ interrupt_event (SIM_DESC sd, void *data)
 /*---------------------------------------------------------------------------*/
 /*-- Device registration hook -----------------------------------------------*/
 /*---------------------------------------------------------------------------*/
-static device_init(SIM_DESC sd) {
+static void device_init(SIM_DESC sd) {
 #ifdef DEVICE_INIT
   extern void register_devices(SIM_DESC);
   register_devices(sd);
 #endif
 }
 
+/* start-sanitize-sky */
+static struct {
+  short i[16];
+  int f[NUM_VU_REGS - 16];
+} vu_regs[2];
+/* end-sanitize-sky */
+
 /*---------------------------------------------------------------------------*/
 /*-- GDB simulator interface ------------------------------------------------*/
 /*---------------------------------------------------------------------------*/
@@ -369,6 +376,41 @@ sim_open (kind, cb, abfd, argv)
     for( rn = LAST_EMBED_REGNUM+1; rn < NUM_REGS; rn++)
       cpu->register_widths[rn] = 64;      
     /* end-sanitize-r5900 */
+
+    /* start-sanitize-sky */
+#ifdef TARGET_SKY
+    /* Now the VU registers */
+    for( rn = 0; rn < 16; rn++ ) { /* first the integer registers */
+      cpu->register_widths[rn + NUM_R5900_REGS] = 16;
+      cpu->register_widths[rn + NUM_R5900_REGS + NUM_VU_REGS] = 16;
+
+      /* Hack for now - to test gdb interface */
+      vu_regs[0].i[rn] = rn + 0x100;
+      vu_regs[1].i[rn] = rn + 0x200;
+    }
+
+    for( rn = 16; rn < NUM_VU_REGS; rn++ ) { /* then the FP registers */
+      float f;
+
+      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);
+      }
+      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);
+      }
+    }
+#endif
+    /* end-sanitize-sky */
   }
 
 #if defined(TRACE)
@@ -561,6 +603,28 @@ sim_store_register (sd,rn,memory)
 
   if (cpu->register_widths[rn] == 0)
     sim_io_eprintf(sd,"Invalid register width for %d (register store ignored)\n",rn);
+  /* start-sanitize-sky */
+#ifdef TARGET_SKY
+  else if( rn > NUM_R5900_REGS ) {
+    rn = rn - NUM_R5900_REGS;
+
+    if( rn < 16 ) 
+      vu_regs[0].i[rn] = T2H_2( *(unsigned short *) memory );
+    else if( rn < NUM_VU_REGS )
+      vu_regs[0].f[rn - 16] = T2H_4( *(unsigned int *) memory );
+    else {
+      rn = rn - NUM_VU_REGS;
+
+      if( rn < 16 ) 
+       vu_regs[1].i[rn] = T2H_2( *(unsigned short *) memory );
+      else if( rn < NUM_VU_REGS )
+       vu_regs[1].f[rn - 16] = T2H_4( *(unsigned int *) memory );
+      else
+       sim_io_eprintf( sd, "Invalid VU register (register store ignored)\n" );
+    }
+  }
+#endif
+  /* end-sanitize-sky */
   /* start-sanitize-r5900 */
   else if (rn == REGISTER_SA)
     SA = T2H_8(*(unsigned64*)memory);
@@ -597,6 +661,28 @@ sim_fetch_register (sd,rn,memory)
 
   if (cpu->register_widths[rn] == 0)
     sim_io_eprintf(sd,"Invalid register width for %d (register fetch ignored)\n",rn);
+  /* start-sanitize-sky */
+#ifdef TARGET_SKY
+  else if( rn > NUM_R5900_REGS ) {
+    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 < 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" );
+    }
+  }
+#endif
+  /* end-sanitize-sky */
   /* start-sanitize-r5900 */
   else if (rn == REGISTER_SA)
     *((unsigned64*)memory) = H2T_8(SA);