* Inserted skeleton of R5900 COP2 simulation. Merged old vu[01].[ch] code
authorFrank Ch. Eigler <fche@redhat.com>
Fri, 27 Mar 1998 22:00:56 +0000 (22:00 +0000)
committerFrank Ch. Eigler <fche@redhat.com>
Fri, 27 Mar 1998 22:00:56 +0000 (22:00 +0000)
  into single PKE-style vu.[ch].

[ChangeLog]

Fri Mar 27 16:19:29 1998  Frank Ch. Eigler  <fche@cygnus.com>

start-sanitize-sky
* Makefile.in (SIM_SKY_OBJS): Replaced sky-vu[01].o with sky-vu.o.

* interp.c (sim_{load,store}_register): Use new vu[01]_device
  static to access VU registers.
(decode_coproc): Added skeleton of sky COP2 (VU) instruction
  decoding.  Work in progress.

* mips.igen (LDCzz, SDCzz): Removed *5900 case for this
  overlapping/redundant bit pattern.
(LQC2, SQC2): Added *5900 COP2 instruction skeleta.  Work in
progress.

* sim-main.h (status_CU[012]): Added COP[n]-enabled flags for
  status register.

end-sanitize-sky

* interp.c (cop_lq, cop_sq): New functions for future 128-bit
  access to coprocessor registers.

* sim-main.h (COP_LQ, COP_SQ): New macro front-ends for above.

[ChangeLog.sky]

* sky-engine.c (engine_run): Adapted from vu[01] -> vu merge.

* sky-hardware.c (register_devices): Ditto

* sky-pke.c (pke_fifo_*): Made these functions private again, now
  that the GPUIF code does not use them.

* sky-pke.h (pke_fifo_*): Removed newly private declarations.

* sky-vu.c (*): Major rework: merge of old sky-vu0.c and
  sky-vu1.c.  Management of two VU devices parallels two PKEs.
Work in progress.

* sky-vu.h (*): Other half of merge.
(vu_device): New struct, parallel to pke_device.

12 files changed:
sim/mips/.Sanitize
sim/mips/ChangeLog
sim/mips/Makefile.in
sim/mips/interp.c
sim/mips/mips.igen
sim/mips/sim-main.h
sim/mips/sky-pke.c
sim/mips/sky-pke.h
sim/mips/sky-vu0.c [deleted file]
sim/mips/sky-vu0.h [deleted file]
sim/mips/sky-vu1.c [deleted file]
sim/mips/sky-vu1.h [deleted file]

index 455c5e74f6badd685527690a196744027b0b77ad..42534729db0b7efbe9da0662887fd9056e70842c 100644 (file)
@@ -35,7 +35,7 @@ sky_files="ChangeLog.sky sky-device.c sky-device.h sky-dma.c sky-dma.h sky-bits.
 sky_files="$sky_files sky-engine.c sky-gpuif.c sky-gpuif.h"
 sky_files="$sky_files sky-hardware.c sky-hardware.h sky-gdb.c"
 sky_files="$sky_files sky-libvpe.c sky-libvpe.h sky-pke.c sky-pke.h"
-sky_files="$sky_files sky-vpe.h sky-vu.h sky-vu.c sky-vu0.c sky-vu0.h sky-vu1.c sky-vu1.h"
+sky_files="$sky_files sky-vpe.h sky-vu.h sky-vu.c"
 if ( echo $* | grep keep\-sky > /dev/null ) ; then
         keep_these_too="${sky_files} ${keep_these_too}"
 else
index c91f927daeb84905f4bad79e43da43a70d9e472f..9301718d8a2f8ae86f94573684c89932b9fbbf51 100644 (file)
@@ -1,3 +1,28 @@
+Fri Mar 27 16:19:29 1998  Frank Ch. Eigler  <fche@cygnus.com>
+
+start-sanitize-sky
+       * Makefile.in (SIM_SKY_OBJS): Replaced sky-vu[01].o with sky-vu.o.
+
+       * interp.c (sim_{load,store}_register): Use new vu[01]_device
+       static to access VU registers.
+       (decode_coproc): Added skeleton of sky COP2 (VU) instruction
+       decoding.  Work in progress.
+
+       * mips.igen (LDCzz, SDCzz): Removed *5900 case for this
+       overlapping/redundant bit pattern.
+       (LQC2, SQC2): Added *5900 COP2 instruction skeleta.  Work in
+       progress.
+
+       * sim-main.h (status_CU[012]): Added COP[n]-enabled flags for
+       status register.
+       
+end-sanitize-sky
+
+       * interp.c (cop_lq, cop_sq): New functions for future 128-bit
+       access to coprocessor registers.
+
+       * sim-main.h (COP_LQ, COP_SQ): New macro front-ends for above.
+       
 Fri Mar 27 16:15:52 1998  Andrew Cagney  <cagney@b1.cygnus.com>
 
        * configure: Regenerated to track ../common/aclocal.m4 changes.
index abfb81ad9607999fc0892a046dca9d4ab16ad822..d6d332b5fcbab54fc0c6bc3b88c8e62c0e67439a 100644 (file)
@@ -18,8 +18,6 @@ SIM_SKY_OBJS = \
        sky-libvpe.o \
        sky-pke.o \
        sky-vu.o \
-       sky-vu0.o \
-       sky-vu1.o \
        sky-gs.o \
        sky-gdb.o
 # end-sanitize-sky
index 0be63da5eb950b011c5bd6b9b84097380f52588c..c1903311d13ea2c9baeff38da526e1984982c7b5 100644 (file)
@@ -14,8 +14,7 @@
    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
    $Revision$
-     $Author$
-       $Date$             
+   $Date$             
 
 NOTEs:
 
@@ -39,6 +38,14 @@ code on the hardware.
 #include "sim-options.h"
 #include "sim-assert.h"
 
+/* start-sanitize-sky */
+#ifdef TARGET_SKY
+#include "sky-vu.h"
+#include "sky-vpe.h"
+#include "sky-libvpe.h"
+#endif
+/* end-sanitize-sky */
+
 #include "config.h"
 
 #include <stdio.h>
@@ -154,6 +161,7 @@ static void ColdReset PARAMS((SIM_DESC sd));
 #define MONITOR_BASE (0xBFC00000)
 #define MONITOR_SIZE (1 << 11)
 #define MEM_SIZE (2 << 20)
+
 /* start-sanitize-sky */
 #ifdef TARGET_SKY
 #undef MEM_SIZE
@@ -672,7 +680,7 @@ sim_store_register (sd,rn,memory,length)
       rn = rn - NUM_R5900_REGS;
 
       if (rn < NUM_VU_INTEGER_REGS)
-       size = write_vu_int_reg (&(vu0_state.regs), rn, memory);
+       size = write_vu_int_reg (& vu0_device.state->regs, rn, memory);
       else if( rn < NUM_VU_REGS )
        vu_regs[0].f[rn - NUM_VU_INTEGER_REGS] 
          = T2H_4( *(unsigned int *) memory );
@@ -680,7 +688,7 @@ sim_store_register (sd,rn,memory,length)
        rn = rn - NUM_VU_REGS;
 
        if( rn < NUM_VU_INTEGER_REGS ) 
-         size = write_vu_int_reg (&(vu1_state.regs), rn, memory);
+         size = write_vu_int_reg (& vu1_device.state->regs, rn, memory);
        else if( rn < NUM_VU_REGS )
          vu_regs[1].f[rn - NUM_VU_INTEGER_REGS] 
            = T2H_4( *(unsigned int *) memory );
@@ -768,7 +776,7 @@ sim_fetch_register (sd,rn,memory,length)
       rn = rn - NUM_R5900_REGS;
 
       if (rn < NUM_VU_INTEGER_REGS)
-       size = read_vu_int_reg (&(vu0_state.regs), rn, memory);
+       size = read_vu_int_reg (& vu0_device.state->regs, rn, memory);
       else if (rn < NUM_VU_REGS)
        *((unsigned int *) memory) 
          = H2T_4( vu_regs[0].f[rn - NUM_VU_INTEGER_REGS] );
@@ -777,7 +785,7 @@ sim_fetch_register (sd,rn,memory,length)
          rn = rn - NUM_VU_REGS;
        
          if (rn < NUM_VU_INTEGER_REGS) 
-           size = read_vu_int_reg (&(vu1_state.regs), rn, memory);
+           size = read_vu_int_reg (& vu1_device.state->regs, rn, memory);
          else if (rn < NUM_VU_REGS)
            (*(unsigned int *) memory) 
              = H2T_4( vu_regs[1].f[rn - NUM_VU_INTEGER_REGS] );
@@ -3239,6 +3247,33 @@ cop_ld (SIM_DESC sd,
   return;
 }
 
+
+void
+cop_lq (SIM_DESC sd,
+       sim_cpu *cpu,
+       address_word cia,
+       int coproc_num,
+       int coproc_reg,
+       unsigned128 memword)
+{
+  switch (coproc_num)
+    {
+      /* start-sanitize-sky */
+    case 2:
+      /* XXX COP2 */
+      break;
+      /* end-sanitize-sky */
+      
+    default:
+      sim_io_printf(sd,"COP_LQ(%d,%d,??) at PC = 0x%s : TODO (architecture specific)\n",
+                   coproc_num,coproc_reg,pr_addr(cia));
+      break;
+    }
+  
+  return;
+}
+
+
 unsigned int
 cop_sw (SIM_DESC sd,
        sim_cpu *cpu,
@@ -3298,6 +3333,33 @@ cop_sd (SIM_DESC sd,
   return(value);
 }
 
+
+unsigned128
+cop_sq (SIM_DESC sd,
+       sim_cpu *cpu,
+       address_word cia,
+       int coproc_num,
+       int coproc_reg)
+{
+  unsigned128 value = {0, 0};
+  switch (coproc_num)
+    {
+      /* start-sanitize-sky */
+    case 2:
+      /* XXX COP2 */
+      break;
+      /* end-sanitize-sky */
+
+    default:
+      sim_io_printf(sd,"COP_SQ(%d,%d) at PC = 0x%s : TODO (architecture specific)\n",
+                   coproc_num,coproc_reg,pr_addr(cia));
+      break;
+    }
+
+  return(value);
+}
+
+
 void
 decode_coproc (SIM_DESC sd,
               sim_cpu *cpu,
@@ -3439,9 +3501,140 @@ decode_coproc (SIM_DESC sd,
     break;
     
     case 2: /* undefined co-processor */
-      sim_io_eprintf(sd,"COP2 instruction 0x%08X at PC = 0x%s : No handler present\n",instruction,pr_addr(cia));
-      break;
-      
+      {
+       int handle = 0;
+
+       /* start-sanitize-sky */
+       /* On the R5900, this refers to a "VU" vector co-processor. */
+
+       int i_25_21 = (instruction >> 21) & 0x1f;
+       int i_20_16 = (instruction >> 16) & 0x1f;
+       int i_15_11 = (instruction >> 11) & 0x1f;
+       int i_15_0 = instruction & 0xffff;
+       int i_10_1 = (instruction >> 1) & 0x3ff;
+       int interlock = instruction & 0x01;
+       unsigned_4 vpe_status = sim_core_read_aligned_4 (cpu, cia, read_map, VPE0_STAT);
+       int vpe_busy = (vpe_status & 0x00000001);
+       /* setup for semantic.c-like actions below */
+       typedef unsigned_4 instruction_word;
+       int CIA = cia;
+       int NIA = cia + 4;
+       sim_cpu* CPU_ = cpu;
+
+       handle = 1;
+
+       /* test COP2 usability */
+       if(! (SR & status_CU2))
+         {
+           SignalException(CoProcessorUnusable,instruction);       
+           /* NOTREACHED */
+         }
+
+       /* classify & execute basic COP2 instructions */
+       if(i_25_21 == 0x08 && i_20_16 == 0x00) /* BC2F */
+         {
+           address_word offset = EXTEND16(i_15_0) << 2;
+           if(! vpe_busy) DELAY_SLOT(cia + 4 + offset);
+         }
+       else if(i_25_21 == 0x08 && i_20_16==0x02) /* BC2FL */
+         {
+           address_word offset = EXTEND16(i_15_0) << 2;
+           if(! vpe_busy) DELAY_SLOT(cia + 4 + offset);
+           else NULLIFY_NEXT_INSTRUCTION();
+         }
+       else if(i_25_21 == 0x08 && i_20_16 == 0x01) /* BC2T */
+         {
+           address_word offset = EXTEND16(i_15_0) << 2;
+           if(vpe_busy) DELAY_SLOT(cia + 4 + offset);
+         }
+       else if(i_25_21 == 0x08 && i_20_16 == 0x03) /* BC2TL */
+         {
+           address_word offset = EXTEND16(i_15_0) << 2;
+           if(vpe_busy) DELAY_SLOT(cia + 4 + offset);
+           else NULLIFY_NEXT_INSTRUCTION();
+         }
+       else if((i_25_21 == 0x02 && i_10_1 == 0x000) || /* CFC2 */
+               (i_25_21 == 0x06 && i_10_1 == 0x000)) /* CTC2 */
+         {
+           int rt = i_20_16;
+           int id = i_15_11;
+           int to_vu = (i_25_21 == 0x06); /* transfer direction */
+           address_word vu_cr_addr; /* VU control register address */
+
+           if(interlock)
+             while(vpe_busy)
+               {
+                 vu0_issue(sd); /* advance one clock cycle */
+                 vpe_status = sim_core_read_aligned_4 (cpu, cia, read_map, VPE0_STAT);
+                 vpe_busy = vpe_status & 0x00000001;
+               }
+
+           /* compute VU register address */
+           vu_cr_addr = VU0_MST + (id * 16);
+
+           /* read or write word */
+           if(to_vu) /* CTC2 */
+             {
+               unsigned_4 data = GPR[rt];
+               sim_core_write_aligned_4(cpu, cia, write_map, vu_cr_addr, data);
+             }
+           else /* CFC2 */
+             {
+               unsigned_4 data = sim_core_read_aligned_4(cpu, cia, read_map, vu_cr_addr);
+               GPR[rt] = EXTEND64(data);
+             }
+         }
+       else if((i_25_21 == 0x01) || /* QMFC2 */
+               (i_25_21 == 0x05))   /* QMTC2 */
+         {
+           int rt = i_20_16;
+           int id = i_15_11;
+           int to_vu = (i_25_21 == 0x05); /* transfer direction */
+           address_word vu_cr_addr; /* VU control register address */
+
+           if(interlock)
+             while(vpe_busy)
+               {
+                 vu0_issue(sd); /* advance one clock cycle */
+                 vpe_status = sim_core_read_aligned_4 (cpu, cia, read_map, VPE0_STAT);
+                 vpe_busy = vpe_status & 0x00000001;
+               }
+
+           /* compute VU register address */
+           vu_cr_addr = VU0_VF00 + (id * 16);
+
+           /* read or write word */
+           if(to_vu) /* CTC2 */
+             {
+               unsigned_4 data = GPR[rt];
+               sim_core_write_aligned_4(cpu, cia, write_map, vu_cr_addr, data);
+             }
+           else /* CFC2 */
+             {
+               unsigned_4 data = sim_core_read_aligned_4(cpu, cia, read_map, vu_cr_addr);
+               GPR[rt] = EXTEND64(data);
+             }
+         }
+       /* other COP2 instructions */
+       else
+         {
+           SignalException(ReservedInstruction,instruction); 
+           /* NOTREACHED */
+         }
+       
+       /* cleanup for semantic.c-like actions above */
+       PC = NIA;
+
+       /* end-sanitize-sky */
+
+       if(! handle)
+         {
+           sim_io_eprintf(sd,"COP2 instruction 0x%08X at PC = 0x%s : No handler present\n",
+                          instruction,pr_addr(cia));
+         }
+      }
+    break;
+    
     case 1: /* should not occur (FPU co-processor) */
     case 3: /* should not occur (FPU co-processor) */
       SignalException(ReservedInstruction,instruction);
@@ -3451,6 +3644,7 @@ decode_coproc (SIM_DESC sd,
   return;
 }
 
+
 /*-- instruction simulation -------------------------------------------------*/
 
 /* When the IGEN simulator is being built, the function below is be
index 64a7c73eb9c434e5a427374868ec50a9f4734751..603ec81f9fe89e3c8726cd05420a4cee003191f9 100644 (file)
 
 
 // Models known by this simulator
-:model:::mipsI:mipsI:
-:model:::mipsII:mipsII:
-:model:::mipsIII:mipsIII:
-:model:::mipsIV:mipsIV:
+:model:::mipsI:mips3000:
+:model:::mipsII:mips6000:
+:model:::mipsIII:mips4000:
+:model:::mipsIV:mips8000:
 :model:::mips16:mips16:
 // start-sanitize-r5900
 :model:::r5900:mips5900:
@@ -43,6 +43,9 @@
 // start-sanitize-tx19
 :model:::tx19:tx19:
 // end-sanitize-tx19
+// start-sanitize-vr4320
+:model:::vr4320:mips4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 :model:::vr5400:mips5400:
 :model:::mdmx:mdmx:
@@ -79,6 +82,9 @@
 "add r<RD>, r<RS>, r<RT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "addi r<RT>, r<RS>, IMMEDIATE"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "add r<RT>, r<RS>, <IMMEDIATE>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 000000,5.RS,5.RT,5.RD,00000,100001:SPECIAL:32::ADDU
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "and r<RD>, r<RS>, r<RT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "and r<RT>, r<RS>, <IMMEDIATE>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "beq r<RS>, r<RT>, <OFFSET>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "bgez r<RS>, <OFFSET>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "bgezal r<RS>, <OFFSET>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "bgtz r<RS>, <OFFSET>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "blez r<RS>, <OFFSET>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "bltz r<RS>, <OFFSET>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "bltzal r<RS>, <OFFSET>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "bne r<RS>, r<RT>, <OFFSET>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "break"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIV:
 *r3900:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "div r<RS>, r<RT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "divu r<RS>, r<RT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 // start-sanitize-tx19
 *tx19:
 // end-sanitize-tx19
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 {
   do_dmult (SD_, RS, RT, 0, 1);
 }
 // start-sanitize-tx19
 *tx19:
 // end-sanitize-tx19
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 {
   do_dmult (SD_, RS, RT, 0, 0);
 }
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "j <INSTR_INDEX>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "jal <INSTR_INDEX>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "jalr r<RD>, r<RS>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "jr r<RS>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "lb r<RT>, <OFFSET>(r<BASE>)"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "lbu r<RT>, <OFFSET>(r<BASE>)"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
-// start-sanitize-r5900
-*r5900:
-// end-sanitize-r5900
 *r3900:
 // start-sanitize-tx19
 *tx19:
 }
 
 
+// start-sanitize-sky
+110110,5.BASE,5.RT,16.OFFSET:NORMAL:64::LQC2
+"lqc2 r<RT>, <OFFSET>(r<BASE>)"
+*r5900:
+{
+  unsigned32 instruction = instruction_0;
+  signed_word offset = SIGNEXTEND((signed_word)((instruction >> 0) & 0x0000FFFF),16);
+  int destreg = ((instruction >> 16) & 0x0000001F);
+  signed_word op1 = GPR[((instruction >> 21) & 0x0000001F)];
+  {
+    address_word vaddr = ((unsigned64)op1 + offset);
+    address_word paddr;
+    int uncached;
+    if ((vaddr & 0x0f) != 0)
+      SignalExceptionAddressLoad();
+    else
+      {
+       if (AddressTranslation(vaddr,isDATA,isLOAD,&paddr,&uncached,isTARGET,isREAL))
+         {
+           unsigned64 memval = 0;
+           unsigned64 memval1 = 0;
+           unsigned128 qw = U16_8(memval, memval1); /* XXX: check order */
+           /* XXX: block on VU0 pipeline if necessary */
+           LoadMemory(&memval,&memval1,uncached,AccessLength_QUADWORD,paddr,vaddr,isDATA,isREAL);
+           COP_LQ(((instruction >> 26) & 0x3),destreg,qw);;
+         }
+      }
+  }
+}
+// end-sanitize-sky
+
+
 011010,5.BASE,5.RT,16.OFFSET:NORMAL:64::LDL
 "ldl r<RT>, <OFFSET>(r<BASE>)"
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "lh r<RT>, <OFFSET>(r<BASE>)"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "lhu r<RT>, <OFFSET>(r<BASE>)"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "lui r<RT>, <IMMEDIATE>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "lw r<RT>, <OFFSET>(r<BASE>)"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "lwc<ZZ> r<RT>, <OFFSET>(r<BASE>)"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "lwl r<RT>, <OFFSET>(r<BASE>)"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "lwr r<RT>, <OFFSET>(r<BASE>)"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "mfhi r<RD>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "mflo r<RD>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "movn r<RD>, r<RS>, r<RT>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "movz r<RD>, r<RS>, r<RT>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "mthi r<RS>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "mtlo r<RS>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 000000,5.RS,5.RT,00000,00000011000:SPECIAL:32::MULT
 "mult r<RS>, r<RT>"
 *mipsI,mipsII,mipsIII,mipsIV:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 {
   signed64 prod;
   CHECKHILO ("Multiplication");
   LO = EXTEND32 (VL4_8 (prod));
   HI = EXTEND32 (VH4_8 (prod));
 }
+
+
 000000,5.RS,5.RT,5.RD,00000011000:SPECIAL:32::MULT
 "mult r<RD>, r<RS>, r<RT>"
 *vr5000:
 000000,5.RS,5.RT,00000,00000011001:SPECIAL:32::MULTU
 "multu r<RS>, r<RT>"
 *mipsI,mipsII,mipsIII,mipsIV:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 {
   unsigned64 prod;
   CHECKHILO ("Multiplication");
 "nor r<RD>, r<RS>, r<RT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "or r<RD>, r<RS>, r<RT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "ori r<RT>, r<RS>, <IMMEDIATE>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 110011,5.RS,nnnnn,16.OFFSET:NORMAL:32::PREF
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "sb r<RT>, <OFFSET>(r<BASE>)"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 }
 
 
+// start-sanitize-sky
+111010,5.BASE,5.RT,16.OFFSET:NORMAL:64::SQC2
+"sqc2 r<RT>, <OFFSET>(r<BASE>)"
+*r5900:
+{
+  unsigned32 instruction = instruction_0;
+  signed_word offset = SIGNEXTEND((signed_word)((instruction >> 0) & 0x0000FFFF),16);
+  int destreg = ((instruction >> 16) & 0x0000001F);
+  signed_word op1 = GPR[((instruction >> 21) & 0x0000001F)];
+  {
+    address_word vaddr = ((unsigned64)op1 + offset);
+    address_word paddr;
+    int uncached;
+    if ((vaddr & 0x0f) != 0)
+      SignalExceptionAddressStore();
+    else
+      {
+       if (AddressTranslation(vaddr,isDATA,isSTORE,&paddr,&uncached,isTARGET,isREAL))
+         {
+           unsigned128 qw;
+           unsigned64 memval0 = 0;
+           unsigned64 memval1 = 0;
+           qw = COP_SQ(((instruction >> 26) & 0x3),destreg);
+           memval0 = *A8_16(& qw, 0);
+           memval1 = *A8_16(& qw, 1);
+           {
+             StoreMemory(uncached,AccessLength_WORD,memval0,memval1,paddr,vaddr,isREAL);
+           }
+         }
+      }
+  }
+}
+// end-sanitize-sky
+
+
+
 101100,5.BASE,5.RT,16.OFFSET:NORMAL:64::SDL
 "sdl r<RT>, <OFFSET>(r<BASE>)"
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "sh r<RT>, <OFFSET>(r<BASE>)"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "sll r<RD>, r<RT>, <SHIFT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "sllv r<RD>, r<RT>, r<RS>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "slt r<RD>, r<RS>, r<RT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "slti r<RT>, r<RS>, <IMMEDIATE>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "sltiu r<RT>, r<RS>, <IMMEDIATE>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "sltu r<RD>, r<RS>, r<RT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "sra r<RD>, r<RT>, <SHIFT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "srav r<RD>, r<RT>, r<RS>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "srl r<RD>, r<RT>, <SHIFT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "srlv r<RD>, r<RT>, r<RS>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "sub r<RD>, r<RS>, r<RT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "subu r<RD>, r<RS>, r<RT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "sw r<RT>, <OFFSET>(r<BASE>)"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "swc<ZZ> r<RT>, <OFFSET>(r<BASE>)"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
-// start-sanitize-r5900
-*r5900:
-// end-sanitize-r5900
 *r3900:
 // start-sanitize-tx19
 *tx19:
 "swl r<RT>, <OFFSET>(r<BASE>)"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "swr r<RT>, <OFFSET>(r<BASE>)"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "syscall <CODE>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "xor r<RD>, r<RS>, r<RT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "xori r<RT>, r<RS>, <IMMEDIATE>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "abs.%s<FMT> f<FD>, f<FS>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "add.%s<FMT> f<FD>, f<FS>, f<FT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "bc1%s<TF>%s<ND> <CC>, <OFFSET>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "c.%s<COND>.%s<FMT> <CC>, f<FS>, f<FT>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "c%s<X>c1 r<RT>, f<FS>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "cvt.d.%s<FMT> f<FD>, f<FS>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "cvt.s.%s<FMT> f<FD>, f<FS>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "cvt.w.%s<FMT> f<FD>, f<FS>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "div.%s<FMT> f<FD>, f<FS>, f<FT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "dm%s<X>c1 r<RT>, f<FS>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "ldxc1 f<FD>, r<INDEX>(r<BASE>)"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "lwc1 f<FT>, <OFFSET>(r<BASE>)"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "lwxc1 f<FD>, r<INDEX>(r<BASE>)"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "madd.d f<FD>, f<FR>, f<FS>, f<FT>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "madd.s f<FD>, f<FR>, f<FS>, f<FT>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "m%s<X>c1 r<RT>, f<FS>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "mov.%s<FMT> f<FD>, f<FS>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "mov%s<TF> r<RD>, r<RS>, <CC>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "mov%s<TF>.%s<FMT> f<FD>, f<FS>, <CC>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 010001,10,3.FMT,5.RT,5.FS,5.FD,010011:COP1:32::MOVN.fmt
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "movz.%s<FMT> f<FD>, f<FS>, r<RT>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "msub.d f<FD>, f<FR>, f<FS>, f<FT>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "msub.s f<FD>, f<FR>, f<FS>, f<FT>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "mul.%s<FMT> f<FD>, f<FS>, f<FT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "neg.%s<FMT> f<FD>, f<FS>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "nmadd.d f<FD>, f<FR>, f<FS>, f<FT>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "nmadd.s f<FD>, f<FR>, f<FS>, f<FT>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "nmsub.d f<FD>, f<FR>, f<FS>, f<FT>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "nmsub.s f<FD>, f<FR>, f<FS>, f<FT>"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "prefx <HINT>, r<INDEX>(r<BASE>)"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIV:
 "recip.%s<FMT> f<FD>, f<FS>"
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIV:
 "rsqrt.%s<FMT> f<FD>, f<FS>"
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 }
 
 
-
 010011,5.RS,5.RT,vvvvv,00000001001:COP1X:64::SDXC1
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "sub.%s<FMT> f<FD>, f<FS>, f<FT>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "swc1 f<FT>, <OFFSET>(r<BASE>)"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "swxc1 f<FS>, r<INDEX>(r<BASE>)"
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "bc0f <OFFSET>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "bc0fl <OFFSET>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "bc0tl <OFFSET>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "di"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "ei"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 *mipsIII:
 *mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "mfc0 r<RT>, r<RD> # <REGX>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "mtc0 r<RT>, r<RD> # <REGX>"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "tlbp"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "tlbr"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "tlbwi"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 "tlbwr"
 *mipsI,mipsII,mipsIII,mipsIV:
 *vr5000:
+// start-sanitize-vr4320
+*vr4320:
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 *vr5400:
 // end-sanitize-vr5400
 
 \f
 :include:16::m16.igen
+// start-sanitize-vr4320
+:include::vr4320:vr4320.igen
+// end-sanitize-vr4320
 // start-sanitize-vr5400
 :include::vr5400:vr5400.igen
 :include:64,f::mdmx.igen
index 697d14574727287e7a35ac32e2eab4c871720935..87a434c55714e3081770ae83d0ee3bf5e705fca1 100644 (file)
@@ -513,7 +513,8 @@ struct _sim_cpu {
 #ifndef TM_TXVU_H
 
 /* Number of machine registers */
-#define NUM_VU_REGS 152
+#define NUM_VU_REGS 153
+#define NUM_VU_INTEGER_REGS 17
 
 #define NUM_R5900_REGS 128
 
@@ -681,6 +682,11 @@ struct sim_state {
 #define status_TS        (1 << 21)      /* TLB shutdown has occurred */
 #define status_ERL       (1 <<  2)      /* Error level */
 #define status_RP        (1 << 27)      /* Reduced Power mode */
+/* begin-sanitize-r5900 */
+#define status_CU0       (1 << 28)      /* COP0 usable */
+#define status_CU1       (1 << 29)      /* COP1 usable */
+#define status_CU2       (1 << 30)      /* COP2 usable */
+/* begin-sanitize-r5900 */
 
 #define cause_BD        ((unsigned)1 << 31)     /* Exception in branch delay slot */
 
@@ -757,17 +763,23 @@ void signal_exception (SIM_DESC sd, sim_cpu *cpu, address_word cia, int exceptio
 
 void cop_lw  PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, int coproc_num, int coproc_reg, unsigned int memword));
 void cop_ld  PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, int coproc_num, int coproc_reg, uword64 memword));
+void cop_lq  PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, int coproc_num, int coproc_reg, unsigned128 memword));
 unsigned int cop_sw PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, int coproc_num, int coproc_reg));
 uword64 cop_sd PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, int coproc_num, int coproc_reg));
+unsigned128 cop_sq PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, int coproc_num, int coproc_reg));
 
 #define COP_LW(coproc_num,coproc_reg,memword) \
 cop_lw (SD, CPU, cia, coproc_num, coproc_reg, memword)
 #define COP_LD(coproc_num,coproc_reg,memword) \
 cop_ld (SD, CPU, cia, coproc_num, coproc_reg, memword)
+#define COP_LQ(coproc_num,coproc_reg,memword) \
+cop_lq (SD, CPU, cia, coproc_num, coproc_reg, memword)
 #define COP_SW(coproc_num,coproc_reg) \
 cop_sw (SD, CPU, cia, coproc_num, coproc_reg)
 #define COP_SD(coproc_num,coproc_reg) \
 cop_sd (SD, CPU, cia, coproc_num, coproc_reg)
+#define COP_SQ(coproc_num,coproc_reg) \
+cop_sq (SD, CPU, cia, coproc_num, coproc_reg)
 
 void decode_coproc PARAMS ((SIM_DESC sd, sim_cpu *cpu, address_word cia, unsigned int instruction));
 #define DecodeCoproc(instruction) \
index cf7408b0684785298e50f80d7f555e79726765d3..a0db39abedf43e32f17448049da9c8aa73504dd3 100644 (file)
@@ -4,15 +4,16 @@
 #include "config.h"
 
 #include <stdlib.h>
-#include "sky-pke.h"
-#include "sky-dma.h"
+#include "sim-main.h"
 #include "sim-bits.h"
 #include "sim-assert.h"
-#include "sky-vu0.h"
-#include "sky-vu1.h"
+#include "sky-pke.h"
+#include "sky-dma.h"
+#include "sky-vu.h"
 #include "sky-gpuif.h"
 #include "sky-device.h"
 
+
 #ifdef HAVE_STRING_H
 #include <string.h>
 #else
@@ -64,6 +65,11 @@ static void pke_code_direct(struct pke_device* me, unsigned_4 pkecode);
 static void pke_code_directhl(struct pke_device* me, unsigned_4 pkecode);
 static void pke_code_unpack(struct pke_device* me, unsigned_4 pkecode);
 static void pke_code_error(struct pke_device* me, unsigned_4 pkecode);
+unsigned_4 pke_fifo_flush(struct pke_fifo*);
+void pke_fifo_reset(struct pke_fifo*);
+struct fifo_quadword* pke_fifo_fit(struct pke_fifo*);
+struct fifo_quadword* pke_fifo_access(struct pke_fifo*, unsigned_4 qwnum);
+void pke_fifo_old(struct pke_fifo*, unsigned_4 qwnum);
 
 
 
index 59558420ab0dcb23145b36943fd4b55d5e6af4a0..88b4d01640624158b9dd883e5c29ae95f0f22d01 100644 (file)
@@ -15,16 +15,11 @@ void pke0_issue(SIM_DESC sd);
 void pke1_attach(SIM_DESC sd);
 void pke1_issue(SIM_DESC sd);
 
+
 /* structs declared below */
 struct pke_fifo;
 struct fifo_quadword;
 
-unsigned_4 pke_fifo_flush(struct pke_fifo*);
-void pke_fifo_reset(struct pke_fifo*);
-struct fifo_quadword* pke_fifo_fit(struct pke_fifo*);
-struct fifo_quadword* pke_fifo_access(struct pke_fifo*, unsigned_4 qwnum);
-void pke_fifo_old(struct pke_fifo*, unsigned_4 qwnum);
-
 
 /* Quadword data type */
 
diff --git a/sim/mips/sky-vu0.c b/sim/mips/sky-vu0.c
deleted file mode 100644 (file)
index a685713..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/*  Copyright (C) 1998, Cygnus Solutions
-
-    */
-
-#include "sim-main.h"
-
-#include "sky-device.h"
-#include "sky-vu.h"
-#include "sky-vu0.h"
-
-VectorUnitState vu0_state;
-
-/* these are aligned versions of zalloc() pointers - do not zfree()! */
-static char* vu0_mem0_buffer = 0;
-static char* vu0_mem1_buffer = 0;
-
-
-void 
-vu0_issue(void) 
-{
-}
-
-static int
-vu0_io_read_buffer(device *me,
-                      void *dest,
-                      int space,
-                      address_word addr,
-                      unsigned nr_bytes,
-                      sim_cpu *processor,
-                      sim_cia cia)
-{
-  if (addr < VU0_REGISTER_WINDOW_START)
-    return 0;
-
-  addr -= VU0_REGISTER_WINDOW_START;
-
-  /* Adjust nr_bytes if too big */
-  if ((addr + nr_bytes) > VU_REG_END)
-    nr_bytes -= addr + nr_bytes - VU_REG_END;
-
-  return read_vu_registers (&vu0_state, addr, nr_bytes, dest);
-}
-
-static int
-vu0_io_write_buffer(device *me,
-                    const void *source,
-                    int space,
-                    address_word addr,
-                    unsigned nr_bytes,
-                    sim_cpu *processor,
-                    sim_cia cia)
-{
-  if (addr < VU0_REGISTER_WINDOW_START)
-    return 0;
-
-  addr -= VU0_REGISTER_WINDOW_START;
-
-  /* Adjust nr_bytes if too big */
-  if ((addr + nr_bytes) > VU_REG_END)
-    nr_bytes -= addr + nr_bytes - VU_REG_END;
-
-  return write_vu_registers (&vu0_state, addr, nr_bytes, source);
-}
-
-device vu0_device = 
-  { 
-    "vu0", 
-    &vu0_io_read_buffer,
-    &vu0_io_write_buffer 
-  };
-
-void 
-vu0_attach(SIM_DESC sd) 
-{
-  sim_core_attach (sd,
-                  NULL,
-                   0 /*level*/,
-                   access_read_write,
-                   0 /*space ???*/,
-                   VU0_REGISTER_WINDOW_START,
-                   VU_REG_END /*nr_bytes*/,
-                   0 /*modulo*/,
-                   &vu0_device,
-                   NULL /*buffer*/);
-
-  vu0_mem0_buffer = zalloc(VU0_MEM0_SIZE);
-  vu0_mem0_buffer = (void*) ALIGN_16((unsigned)vu0_mem0_buffer);
-  sim_core_attach (sd,
-                  NULL,
-                   0 /*level*/,
-                   access_read_write,
-                   0 /*space ???*/,
-                   VU0_MEM0_WINDOW_START,
-                   VU0_MEM0_SIZE /*nr_bytes*/,
-                   0 /*modulo*/,
-                   0 /*device*/,
-                   vu0_mem0_buffer /*buffer*/);
-
-  vu0_mem1_buffer = zalloc(VU0_MEM1_SIZE);
-  vu0_mem1_buffer = (void*) ALIGN_16((unsigned)vu0_mem1_buffer);
-  sim_core_attach (sd,
-                  NULL,
-                   0 /*level*/,
-                   access_read_write,
-                   0 /*space ???*/,
-                   VU0_MEM1_WINDOW_START,
-                   VU0_MEM1_SIZE /*nr_bytes*/,
-                   0 /*modulo*/,
-                   0 /*device*/,
-                   vu0_mem1_buffer /*buffer*/);
-}
diff --git a/sim/mips/sky-vu0.h b/sim/mips/sky-vu0.h
deleted file mode 100644 (file)
index 2519384..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*  Copyright (C) 1998, Cygnus Solutions
-
-    */
-
-#ifndef VU0_H_
-#define VU0_H_
-
-#include "sim-main.h"
-
-void vu0_attach(SIM_DESC sd);
-void vu0_issue(void);
-
-#define VU0_MEM0_WINDOW_START  0x11000000
-#define VU0_MEM0_SIZE                  0x1000  /* 4K = 4096 */
-
-#define VU0_MEM1_WINDOW_START  0x11004000
-#define VU0_MEM1_SIZE                  0x1000  /* 4K = 4096 */
-
-#define VU0_REGISTER_WINDOW_START 0x10000c00
-
-#define VPE0_STAT              0x10000fd0
-#define VU0_CIA                        0x10000fe0
-
-#endif
diff --git a/sim/mips/sky-vu1.c b/sim/mips/sky-vu1.c
deleted file mode 100644 (file)
index c7f7b4a..0000000
+++ /dev/null
@@ -1,310 +0,0 @@
-/*  Copyright (C) 1998, Cygnus Solutions
-
-    */
-
-#include "sim-main.h"
-#include "sim-endian.h"
-
-#include "sky-device.h"
-#include "sky-vu1.h"
-#include "sky-libvpe.h"
-#include "sky-vu.h"
-#include "sky-bits.h"
-
-#include <assert.h>
-
-VectorUnitState vu1_state;
-
-#define sim_warning printf
-
-/* these are aligned versions of zalloc() pointers - do not zfree()! */
-static char* vu1_umem_buffer = 0;
-static char* vu1_mem_buffer = 0;
-
-void init_vu1(void);
-void init_vu(VectorUnitState *state,
-            char* umem_buffer, unsigned umem_dw_size,
-            char* mem_buffer, unsigned mem_qw_size);
-
-#if 0
-static void dump_mem() {
-    int i;
-    typedef int T[2048][4];  
-    T *mem = (T*)&vu1_mem_buffer;
-
-    for (i = 0; i < 200; i++) {
-       printf("%d: %x %x %x %x\n", i, (*mem)[i][0], (*mem)[i][1], (*mem)[i][2], (*mem)[i][3]);
-    }
-}
-#endif
-
-void 
-vu1_issue(void) 
-{
-      if (vu1_state.runState == VU_RUN)
-          vpecallms_cycle(&vu1_state);
-}
-
-static int
-vu1_io_read_register_window(device *me,
-                           void *dest,
-                           int space,
-                           address_word addr,
-                           unsigned nr_bytes,
-                           sim_cpu *processor,
-                           sim_cia cia)
-{
-  if (addr < VU1_REGISTER_WINDOW_START)
-    return 0;
-
-  addr -= VU1_REGISTER_WINDOW_START;
-
-  /* Adjust nr_bytes if too big */
-  if ((addr + nr_bytes) > VU_REG_END)
-    nr_bytes -= addr + nr_bytes - VU_REG_END;
-
-  return read_vu_registers (&vu1_state, addr, nr_bytes, dest);
-}
-
-static int
-vu1_io_write_register_window(device *me,
-                            const void *source,
-                            int space,
-                            address_word addr,
-                            unsigned nr_bytes,
-                            sim_cpu *processor,
-                            sim_cia cia)
-{
-  if (addr < VU1_REGISTER_WINDOW_START)
-    return 0;
-
-  addr -= VU1_REGISTER_WINDOW_START;
-
-  /* Adjust nr_bytes if too big */
-  if ((addr + nr_bytes) > VU_REG_END)
-    nr_bytes -= addr + nr_bytes - VU_REG_END;
-
-  return write_vu_registers (&vu1_state, addr, nr_bytes, source);
-}
-
-device vu1_device = 
-  { 
-    "vu1", 
-    &vu1_io_read_register_window,
-    &vu1_io_write_register_window 
-  };
-
-void 
-vu1_init(SIM_DESC sd) 
-{
-
-  sim_core_attach (sd,
-                  NULL,
-                   0 /*level*/,
-                   access_read_write,
-                   0 /*space ???*/,
-                   VU1_REGISTER_WINDOW_START,
-                   VU_REG_END /*nr_bytes*/,
-                   0 /*modulo*/,
-                   &vu1_device,
-                   NULL /*buffer*/);
-
-  vu1_umem_buffer = zalloc(VU1_MEM0_SIZE);
-  vu1_umem_buffer = (void*) ALIGN_16((unsigned)vu1_umem_buffer);
-  sim_core_attach (sd,
-                  NULL,
-                   0 /*level*/,
-                   access_read_write,
-                   0 /*space ???*/,
-                   VU1_MEM0_WINDOW_START,
-                   VU1_MEM0_SIZE /*nr_bytes*/,
-                   0 /*modulo*/,
-                   0 /*device*/,
-                   vu1_umem_buffer /*buffer*/);
-
-  vu1_mem_buffer = zalloc(VU1_MEM1_SIZE + 2*sizeof(unsigned_16));
-  vu1_mem_buffer = (void*) ALIGN_16((unsigned)vu1_mem_buffer);
-  sim_core_attach (sd,
-                  NULL,
-                   0 /*level*/,
-                   access_read_write,
-                   0 /*space ???*/,
-                   VU1_MEM1_WINDOW_START,
-                   VU1_MEM1_SIZE /*nr_bytes*/,
-                   0 /*modulo*/,
-                   0 /*device*/,
-                   vu1_mem_buffer /*buffer*/);
-
-  init_vu1();
-  /*initvpe();*/
-  vpecallms_init(&vu1_state);
-}
-
-/****************************************************************************/
-/*                                                                          */
-/*             Sony Computer Entertainment CONFIDENTIAL                     */
-/*      (C) 1997 Sony Computer Entertainment Inc. All Rights Reserved       */
-/*                                                                          */
-/*      VPE1 simulator                                                      */
-/*                                                                          */
-/****************************************************************************/
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <strings.h>
-#include "sky-libvpe.h"
-
-char   ifilename[64] = "vu.bin";
-char   ofilename[64] = "";
-char   pfilename[64] = "";
-
-static void abend2(char *fmt, char* p) {
-    fprintf(stderr, fmt, p);
-    exit(1);
-}
-
-void getoption(VectorUnitState* state);
-
-void init_vu1(void) {
-    init_vu(&vu1_state,
-           &vu1_umem_buffer[0], VU1_MEM0_SIZE/8,
-           &vu1_mem_buffer[0], VU1_MEM1_SIZE/16);
-}
-
-void init_vu(VectorUnitState *state,
-            char* umem_buffer, unsigned umem_dw_size,
-            char* mem_buffer, unsigned mem_qw_size)
-{
-       FILE *fp;
-       int i, j;
-       u_long  data[4];
-
-       /* set up memory buffers */
-       state->uMEM_buffer = (uMEM_Entry_Type *) umem_buffer;
-       state->uMEM_size = umem_dw_size;
-       state->MEM_buffer =  (MEM_Entry_Type*)   mem_buffer;
-       state->MEM_size = mem_qw_size;
-       
-       /* set up run state */
-       state->runState = VU_READY;
-
-       /* read option */
-       getoption(state);
-
-       /* read instruction file (mandatory) */
-       if (*ifilename) {
-               if((fp = fopen(ifilename, "r")) != NULL) {
-                       for (i = 0; fread(&data[0], 4, 1, fp) != 0; i++) {
-                               fread(&data[1], 4, 1, fp);
-                               LoadMMem(state, i, data, 1);
-                       }
-                       fclose(fp);
-               }
-       }
-       
-       /* PKE dirven simvpe */
-       if (*pfilename) {
-               /* initpke(pfilename); */
-               initvpe(&vu1_state);
-               /* while (simpke() != -1) 
-                       simvpe(); */
-       }
-       
-       /* conventional simvpe */
-       else {
-               initvpe(&vu1_state);
-               /*simvpe();*/
-       }
-       
-       /* write result memory image (optional) */
-       if (*ofilename) {
-               if((fp = fopen(ofilename, "w")) == NULL)
-                       abend2("%s: can not open\n", ofilename);
-
-               for(i = 0; i < 2048; i++){
-                       StoreVUMem(state, i, data, 1);
-                       for(j = 0; j < 4; j++)
-                               fwrite(&data[j], 4, 1, fp);
-               }
-               fclose(fp);
-       }
-}
-
-#if 0
-static void Usage(void)
-{
-       fprintf(stderr, "Usage: simvpe [options]\n");
-       fprintf(stderr, "\t\t-i instruction-file\n");
-       fprintf(stderr, "\t\t-o output-memory-file\n");
-       fprintf(stderr, "\t\t-t PKE-file (text type)\n");
-       fprintf(stderr, "\t\t-s start-address [default = 0]\n");
-       fprintf(stderr, "\t\t-d [interactive mode enable: default desable]\n");
-       fprintf(stderr, "\t\t-v [statistics mode enable: default desable]\n");
-       fprintf(stderr, "\t\t-p [debug print mode enable: default desable]\n");
-}
-#endif
-
-void getoption(VectorUnitState* state)
-{
-#if 0
-       int startline = 0;
-       int count = 1;
-#endif
-
-       state->junk._is_dbg = 1;
-       state->junk._vpepc = 0;
-       state->junk._is_verb = 0;
-       state->junk._is_dump = 0;
-       state->junk._pgpuif      = 4;   /* MEMGPUIF */
-       state->junk._ITOP = 20;
-       state->junk._TOP = 10;
-
-#if 0
-       while(argc - count){
-               if(argv[count][0] == '-'){
-                       switch(argv[count][1]){
-                               case 'i':
-                                       strcpy(ifilename, argv[count+1]);
-                                       count += 2;
-                                       break;
-                               case 'o':
-                                       strcpy(ofilename, argv[count+1]);
-                                       count += 2;
-                                       break;
-                               case 't':
-                                       strcpy(pfilename, argv[count+1]);
-                                       count += 2;
-                                       break;
-                               case 's':
-                                       sscanf(argv[count+1], "%d", &startline);
-                                       state->junk._vpepc = startline;
-                                       count += 2;
-                                       break;
-                               case 'd':
-                                       state->junk._is_dbg = 1;
-                                       count += 1;
-                                       break;
-                               case 'v':
-                                       state->junk._is_verb = 1;
-                                       count += 1;
-                                       break;
-                               case 'p':
-                                       state->junk._is_dump = 1;
-                                       count += 1;
-                                       break;
-                               case 'h':
-                               case '?':
-                                       Usage();
-                                       exit(1);
-                                       break;
-                               default:
-                                       Usage();
-                                       exit(1);
-                       }
-               }else{
-                       Usage();
-                       exit(1);
-               }
-       }
-#endif
-}
diff --git a/sim/mips/sky-vu1.h b/sim/mips/sky-vu1.h
deleted file mode 100644 (file)
index 17e9d99..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*  Copyright (C) 1998, Cygnus Solutions
-
-    */
-
-#ifndef VU1_H_
-#define VU1_H_
-
-#include "sim-main.h"
-
-void vu1_issue(void);
-void vu1_init(SIM_DESC sd);
-int vu1_status(void);
-int vu1_busy(void);
-
-#define VU1_MEM0_WINDOW_START  0x11008000
-#define VU1_MEM0_SIZE          0x4000    /* 16K = 16384 */
-
-#define VU1_MEM1_WINDOW_START  0x1100c000
-#define VU1_MEM1_SIZE                  0x4000    /* 16K = 16384 */
-
-#define VU1_REGISTER_WINDOW_START 0x11007000
-
-/* FIX ME: These should be derived from enum in sky-vu.h */
-#define VPU_STAT               0x110073d0
-#define VU1_CIA                        0x110073e0
-
-#endif