From fd90908986929e283cca54c3675f7131fa5b16ab Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Fri, 6 Mar 1998 22:46:40 +0000 Subject: [PATCH] * Numerous changes & small bug fixes in PKE sim code and test suite. for sim/testsuite/sky: * t-pke4.run: Removed test, since it succeeds yet returns a non-zero exit code. * Makefile.in (RUNOPTS): Removed --memory-size flag, made unnecessary by sim/mips/interp.c changes. (TESTS): Removed t-pke4.ok target. * t-pke3.trc: Classified tests with [---] indicators, to match items up with entries documented in testplan.sgml. Added numerous additional tests. They assert behavior that assumes certain favorable answers to PKE question set #6 to SCEI. * t-pke1.trc: Added some [---] indicators. for sim/mips: * sky-pke.c (pke_issue): Revamped interrupt & stall code. Assume that ER1/ER0/PIS bits are only set if not masked by ERR bits. Signal PIS only if unmasked. (pke_code_error): Signal ER1 only if unmasked. (pke_pc_fifo): Signal ER0 only if unmasked. (pke_code_unpack): Round up num_operands for last operand's partial-word. Factor out "R" bit handling for better coverage analysis. Fill upper words of a quadword with zeroes for Vn_m UNPACK with n < 4. * sky-device.c (device_error): Made function accept varargs. * sky-device.h (device_error): Changed declaration to match. * interp.c (sim_open): Made 0x0000 area memory be an alias of the K0/K1 segments. Sanitized code. --- sim/mips/interp.c | 13 +- sim/mips/sky-pke.c | 177 +++++++++++++----------- sim/testsuite/sky/ChangeLog | 16 +++ sim/testsuite/sky/Makefile.in | 5 +- sim/testsuite/sky/t-pke1.trc | 1 + sim/testsuite/sky/t-pke3.trc | 253 ++++++++++++++++++++++++++-------- sim/testsuite/sky/t-pke4.run | Bin 186145 -> 0 bytes 7 files changed, 327 insertions(+), 138 deletions(-) delete mode 100644 sim/testsuite/sky/t-pke4.run diff --git a/sim/mips/interp.c b/sim/mips/interp.c index b794fb7656..eaf37a2a22 100644 --- a/sim/mips/interp.c +++ b/sim/mips/interp.c @@ -310,13 +310,22 @@ sim_open (kind, cb, abfd, argv) are the kernel spaces K0 & K1. Both of these map to a single smaller sub region */ sim_do_command(sd," memory region 0x7fff8000,0x8000") ; /* MTZ- 32 k stack */ +/* start-sanitize-sky */ +#ifndef TARGET_SKY +/* end-sanitize-sky */ sim_do_commandf (sd, "memory alias 0x%lx@1,0x%lx%%0x%lx,0x%0x", K1BASE, K0SIZE, MEM_SIZE, /* actual size */ K0BASE); -#ifdef TARGET_SKY - sim_do_command (sd, "memory region 0x00000000,0x00100000"); /* 1M */ +/* start-sanitize-sky */ +#else + sim_do_commandf (sd, "memory alias 0x%lx@1,0x%lx%%0x%lx,0x%0x,0x%0x", + K1BASE, K0SIZE, + MEM_SIZE, /* actual size */ + K0BASE, + 0); /* add alias at 0x0000 */ #endif +/* end-sanitize-sky */ device_init(sd); diff --git a/sim/mips/sky-pke.c b/sim/mips/sky-pke.c index db9ecc420e..011db64c15 100644 --- a/sim/mips/sky-pke.c +++ b/sim/mips/sky-pke.c @@ -13,11 +13,7 @@ #include "sky-vu0.h" #include "sky-vu1.h" #include "sky-gpuif.h" - - -/* Imported functions */ - -void device_error (device *me, char* message); /* device.c */ +#include "sky-device.h" /* Internal function declarations */ @@ -526,7 +522,24 @@ pke_issue(SIM_DESC sd, struct pke_device* me) unsigned_4 cmd, intr, num; unsigned_4 imm; - /* 1 -- test go / no-go for PKE execution */ + /* 1 -- fetch PKE instruction */ + + /* confirm availability of new quadword of PKE instructions */ + if(me->fifo_num_elements <= me->fifo_pc) + return; + + /* skip over DMA tag, if present */ + pke_pc_advance(me, 0); + + /* "fetch" instruction quadword and word */ + fqw = & me->fifo[me->fifo_pc]; + fw = fqw->data[me->qw_pc]; + + /* store word in PKECODE register */ + me->regs[PKE_REG_CODE][0] = fw; + + + /* 2 -- test go / no-go for PKE execution */ /* switch on STAT:PSS if PSS-pending and in idle state */ if((PKE_REG_MASK_GET(me, STAT, PPS) == PKE_REG_STAT_PPS_IDLE) && @@ -542,118 +555,109 @@ pke_issue(SIM_DESC sd, struct pke_device* me) /* PEW bit not a reason to keep stalling - it's re-checked below */ /* PGW bit not a reason to keep stalling - it's re-checked below */ /* maskable stall controls: ER0, ER1, PIS */ - (PKE_REG_MASK_GET(me, STAT, ER0) && !PKE_REG_MASK_GET(me, ERR, ME0)) || - (PKE_REG_MASK_GET(me, STAT, ER1) && !PKE_REG_MASK_GET(me, ERR, ME1)) || - (PKE_REG_MASK_GET(me, STAT, PIS) && !PKE_REG_MASK_GET(me, ERR, MII))) + PKE_REG_MASK_GET(me, STAT, ER0) || + PKE_REG_MASK_GET(me, STAT, ER1) || + PKE_REG_MASK_GET(me, STAT, PIS)) { - /* try again next cycle; no state change */ + /* (still) stalled */ + PKE_REG_MASK_SET(me, STAT, PPS, PKE_REG_STAT_PPS_STALL); + /* try again next cycle */ return; } - /* confirm availability of new quadword of PKE instructions */ - if(me->fifo_num_elements <= me->fifo_pc) - return; - - - /* 2 -- fetch PKE instruction */ - - /* skip over DMA tag, if present */ - pke_pc_advance(me, 0); - - /* "fetch" instruction quadword and word */ - fqw = & me->fifo[me->fifo_pc]; - fw = fqw->data[me->qw_pc]; - - /* store word in PKECODE register */ - me->regs[PKE_REG_CODE][0] = fw; - /* 3 -- decode PKE instruction */ - /* PKE instruction format: [intr 0:0][pke-command 6:0][num 7:0][immediate 15:0], - so op-code is in top byte. */ + /* decoding */ + if(PKE_REG_MASK_GET(me, STAT, PPS) == PKE_REG_STAT_PPS_IDLE) + PKE_REG_MASK_SET(me, STAT, PPS, PKE_REG_STAT_PPS_DECODE); + + /* Extract relevant bits from PKEcode */ intr = BIT_MASK_GET(fw, PKE_OPCODE_I_B, PKE_OPCODE_I_E); cmd = BIT_MASK_GET(fw, PKE_OPCODE_CMD_B, PKE_OPCODE_CMD_E); - num = BIT_MASK_GET(fw, PKE_OPCODE_NUM_B, PKE_OPCODE_NUM_E); - imm = BIT_MASK_GET(fw, PKE_OPCODE_IMM_B, PKE_OPCODE_IMM_E); /* handle interrupts */ if(intr) { - /* are we resuming an interrupt-flagged instruction? */ + /* are we resuming an interrupt-stalled instruction? */ if(me->flags & PKE_FLAG_INT_NOLOOP) { /* clear loop-prevention flag */ me->flags &= ~PKE_FLAG_INT_NOLOOP; - /* mask interrupt bit from instruction word so re-decoded instructions don't stall */ - BIT_MASK_SET(fw, PKE_OPCODE_I_B, PKE_OPCODE_I_E, 0); - intr = 0; + + /* fall through to decode & execute */ + /* The pke_code_* functions should not check the MSB in the + pkecode. */ } else /* new interrupt-flagged instruction */ { + /* XXX: send interrupt to 5900? */ + /* set INT flag in STAT register */ PKE_REG_MASK_SET(me, STAT, INT, 1); /* set loop-prevention flag */ me->flags |= PKE_FLAG_INT_NOLOOP; - /* XXX: send interrupt to 5900? */ + /* set PIS if stall not masked */ + if(!PKE_REG_MASK_GET(me, ERR, MII)) + PKE_REG_MASK_SET(me, STAT, PIS, 1); + + /* suspend this instruction unless it's PKEMARK */ + if(!IS_PKE_CMD(cmd, PKEMARK)) + { + PKE_REG_MASK_SET(me, STAT, PPS, PKE_REG_STAT_PPS_STALL); + return; + } + else + { + ; /* fall through to decode & execute */ + } } } - /* decoding */ - if(PKE_REG_MASK_GET(me, STAT, PPS) == PKE_REG_STAT_PPS_IDLE) - PKE_REG_MASK_SET(me, STAT, PPS, PKE_REG_STAT_PPS_DECODE); - - /* handle [new - first time] interrupts */ - if(intr) - { - PKE_REG_MASK_SET(me, STAT, PIS, 1); - PKE_REG_MASK_SET(me, STAT, PPS, PKE_REG_STAT_PPS_STALL); - /* presume stall state follows; only PKEMARK may go ahead anyway */ - } /* decode & execute */ - if(IS_PKE_CMD(cmd, PKENOP) && !intr) + if(IS_PKE_CMD(cmd, PKENOP)) pke_code_nop(me, fw); - else if(IS_PKE_CMD(cmd, STCYCL) && !intr) + else if(IS_PKE_CMD(cmd, STCYCL)) pke_code_stcycl(me, fw); - else if(me->pke_number == 1 && IS_PKE_CMD(cmd, OFFSET) && !intr) + else if(me->pke_number == 1 && IS_PKE_CMD(cmd, OFFSET)) pke_code_offset(me, fw); - else if(me->pke_number == 1 && IS_PKE_CMD(cmd, BASE) && !intr) + else if(me->pke_number == 1 && IS_PKE_CMD(cmd, BASE)) pke_code_base(me, fw); - else if(IS_PKE_CMD(cmd, ITOP) && !intr) + else if(IS_PKE_CMD(cmd, ITOP)) pke_code_itop(me, fw); - else if(IS_PKE_CMD(cmd, STMOD) && !intr) + else if(IS_PKE_CMD(cmd, STMOD)) pke_code_stmod(me, fw); - else if(me->pke_number == 1 && IS_PKE_CMD(cmd, MSKPATH3) && !intr) + else if(me->pke_number == 1 && IS_PKE_CMD(cmd, MSKPATH3)) pke_code_mskpath3(me, fw); else if(IS_PKE_CMD(cmd, PKEMARK)) pke_code_pkemark(me, fw); - else if(IS_PKE_CMD(cmd, FLUSHE) && !intr) + else if(IS_PKE_CMD(cmd, FLUSHE)) pke_code_flushe(me, fw); - else if(me->pke_number == 1 && IS_PKE_CMD(cmd, FLUSH) && !intr) + else if(me->pke_number == 1 && IS_PKE_CMD(cmd, FLUSH)) pke_code_flush(me, fw); - else if(me->pke_number == 1 && IS_PKE_CMD(cmd, FLUSHA) && !intr) + else if(me->pke_number == 1 && IS_PKE_CMD(cmd, FLUSHA)) pke_code_flusha(me, fw); - else if(IS_PKE_CMD(cmd, PKEMSCAL) && !intr) + else if(IS_PKE_CMD(cmd, PKEMSCAL)) pke_code_pkemscal(me, fw); - else if(IS_PKE_CMD(cmd, PKEMSCNT) && !intr) + else if(IS_PKE_CMD(cmd, PKEMSCNT)) pke_code_pkemscnt(me, fw); - else if(me->pke_number == 1 && IS_PKE_CMD(cmd, PKEMSCALF) && !intr) + else if(me->pke_number == 1 && IS_PKE_CMD(cmd, PKEMSCALF)) pke_code_pkemscalf(me, fw); - else if(IS_PKE_CMD(cmd, STMASK) && !intr) + else if(IS_PKE_CMD(cmd, STMASK)) pke_code_stmask(me, fw); - else if(IS_PKE_CMD(cmd, STROW) && !intr) + else if(IS_PKE_CMD(cmd, STROW)) pke_code_strow(me, fw); - else if(IS_PKE_CMD(cmd, STCOL) && !intr) + else if(IS_PKE_CMD(cmd, STCOL)) pke_code_stcol(me, fw); - else if(IS_PKE_CMD(cmd, MPG) && !intr) + else if(IS_PKE_CMD(cmd, MPG)) pke_code_mpg(me, fw); - else if(IS_PKE_CMD(cmd, DIRECT) && !intr) + else if(IS_PKE_CMD(cmd, DIRECT)) pke_code_direct(me, fw); - else if(IS_PKE_CMD(cmd, DIRECTHL) && !intr) + else if(IS_PKE_CMD(cmd, DIRECTHL)) pke_code_directhl(me, fw); - else if(IS_PKE_CMD(cmd, UNPACK) && !intr) + else if(IS_PKE_CMD(cmd, UNPACK)) pke_code_unpack(me, fw); /* ... no other commands ... */ else @@ -786,7 +790,12 @@ pke_pc_fifo(struct pke_device* me, int operand_num, unsigned_4** operand) if(fq->word_class[new_qw_pc] == wc_dma) { /* mismatch error! */ - PKE_REG_MASK_SET(me, STAT, ER0, 1); + if(! PKE_REG_MASK_GET(me, ERR, ME0)) + { + PKE_REG_MASK_SET(me, STAT, ER0, 1); + /* don't stall just yet -- finish this instruction */ + /* the PPS_STALL state will be entered by pke_issue() next time */ + } /* skip by going around loop an extra time */ num ++; } @@ -1604,7 +1613,7 @@ pke_code_unpack(struct pke_device* me, unsigned_4 pkecode) n = num; else n = cl * (num/wl) + PKE_LIMIT(num % wl, cl); - num_operands = ((32 >> vl) * (vn+1) * n)/32; + num_operands = (31 + (32 >> vl) * (vn+1) * n)/32; /* round up to next word */ /* confirm that FIFO has enough words in it */ if(num_operands > 0) @@ -1662,14 +1671,16 @@ pke_code_unpack(struct pke_device* me, unsigned_4 pkecode) /* map zero to max+1 */ int addrwl = (wl == 0) ? 0x0100 : wl; vu_addr = vu_addr_base + 16 * (BIT_MASK_GET(imm, 0, 9) + - (r ? PKE_REG_MASK_GET(me, TOPS, TOPS) : 0) + - cl*(vector_num_out/addrwl) + - (vector_num_out%addrwl)); + (vector_num_out / addrwl) * cl + + (vector_num_out % addrwl)); } else vu_addr = vu_addr_base + 16 * (BIT_MASK_GET(imm, 0, 9) + - (r ? PKE_REG_MASK_GET(me, TOPS, TOPS) : 0) + vector_num_out); + + /* handle "R" double-buffering bit */ + if(r) + vu_addr += 16 * PKE_REG_MASK_GET(me, TOPS, TOPS); /* check for vu_addr overflow */ while(vu_addr >= vu_addr_base + vu_addr_max_size) @@ -1693,7 +1704,7 @@ pke_code_unpack(struct pke_device* me, unsigned_4 pkecode) /* For cyclic unpack, next operand quadword may come from instruction stream or be zero. */ if((num == 0 && cl == 0 && wl == 0) || /* shortcut clear */ - ((cl < wl) && ((vector_num_out % wl) >= cl))) /* wl != 0, set above */ + ((cl < wl) && ((vector_num_out % wl) >= cl))) /* && short-circuit asserts wl != 0 */ { /* clear operand - used only in a "indeterminate" state */ for(i = 0; i < 4; i++) @@ -1744,6 +1755,10 @@ pke_code_unpack(struct pke_device* me, unsigned_4 pkecode) unpacked_data[i] = SEXT32(operand, unitbits-1); } + /* clear remaining top words in vector */ + for(; i<4; i++) + unpacked_data[i] = 0; + /* consumed a vector from the PKE instruction stream */ vector_num_in ++; } /* unpack word from instruction operand */ @@ -1863,9 +1878,17 @@ pke_code_unpack(struct pke_device* me, unsigned_4 pkecode) void pke_code_error(struct pke_device* me, unsigned_4 pkecode) { - /* set ER1 flag in STAT register */ - PKE_REG_MASK_SET(me, STAT, ER1, 1); + if(! PKE_REG_MASK_GET(me, ERR, ME1)) + { + /* set ER1 flag in STAT register */ + PKE_REG_MASK_SET(me, STAT, ER1, 1); + PKE_REG_MASK_SET(me, STAT, PPS, PKE_REG_STAT_PPS_STALL); + } + else + { + PKE_REG_MASK_SET(me, STAT, PPS, PKE_REG_STAT_PPS_IDLE); + } + /* advance over faulty word */ - PKE_REG_MASK_SET(me, STAT, PPS, PKE_REG_STAT_PPS_IDLE); pke_pc_advance(me, 1); } diff --git a/sim/testsuite/sky/ChangeLog b/sim/testsuite/sky/ChangeLog index 4892baeb80..34cd5123c7 100644 --- a/sim/testsuite/sky/ChangeLog +++ b/sim/testsuite/sky/ChangeLog @@ -1,3 +1,19 @@ +Fri Mar 6 17:30:31 1998 Frank Ch. Eigler + + * t-pke4.run: Removed test, since it succeeds yet returns a + non-zero exit code. + + * Makefile.in (RUNOPTS): Removed --memory-size flag, made + unnecessary by sim/mips/interp.c changes. + (TESTS): Removed t-pke4.ok target. + + * t-pke3.trc: Classified tests with [---] indicators, to match + items up with entries documented in testplan.sgml. Added numerous + additional tests. They assert behavior that assumes certain + favorable answers to PKE question set #6 to SCEI. + + * t-pke1.trc: Added some [---] indicators. + Mon Mar 2 18:54:26 1998 Frank Ch. Eigler * t-pke3.trc: Added FLUSH* / PKEMS* tests. diff --git a/sim/testsuite/sky/Makefile.in b/sim/testsuite/sky/Makefile.in index 2076bc8b72..838e68292e 100644 --- a/sim/testsuite/sky/Makefile.in +++ b/sim/testsuite/sky/Makefile.in @@ -55,7 +55,7 @@ LD_FOR_TARGET = `\ echo $(target_alias)-ld ; \ fi` -RUNOPTS = --memory-size=0x1000000 +RUNOPTS = RUN_FOR_TARGET = `\ if [ -x ../../../sim/mips/run ]; then \ @@ -84,8 +84,7 @@ TESTS = \ t-pke2.vif1ok \ t-pke3.c \ t-pke3.run \ - t-pke3.ok \ - t-pke4.ok + t-pke3.ok check: sanity $(TESTS) sanity: diff --git a/sim/testsuite/sky/t-pke1.trc b/sim/testsuite/sky/t-pke1.trc index 053975fd2e..0a5fa5defc 100644 --- a/sim/testsuite/sky/t-pke1.trc +++ b/sim/testsuite/sky/t-pke1.trc @@ -1,6 +1,7 @@ # PKE tests from SCEI PKE simulator # Converted by FChE using emacs macros from "sce-project/scei/pke/sample/tsv432.in" # Regenerated with word classification using PKE trace output. +# [test.code.unpack] [test.unpack.V4_32] 0 0x55555555_20000000_00000000_31000066 0x00000000 .PDD 0 0x0000ffff_0000ffff_0000ffff_30000000 0x00000000 ...P 0 0x30000000_7c000000_01000000_0000ffff 0x00000000 PPP. diff --git a/sim/testsuite/sky/t-pke3.trc b/sim/testsuite/sky/t-pke3.trc index ca906aa67f..d711f1a068 100644 --- a/sim/testsuite/sky/t-pke3.trc +++ b/sim/testsuite/sky/t-pke3.trc @@ -1,8 +1,7 @@ -# PKE tests for code coverage +# PKE tests for code coverage / functional testing # # -# -# ---- STCYCL/CYCLE ---- +# ---- STCYCL/CYCLE ---- [test.code.stcycl] # # Test STCYCL instruction 0 0x0100fedc_00000000_00000000_00000000 0x00000000 PPPP @@ -14,7 +13,25 @@ ? 0x10003800 0x00000000 0x00002000 # # -# ---- OFFSET/OFST ---- +# ---- BASE/BASE ---- [test.code.base] [test.dbf.base] +# +# Read TOPS register; confirm original TOPS +? 0x10003cc0 0x00000000 0xffffffff +# Test BASE instruction on PKE1 +1 0x0300fedc_00000000_00000000_00000000 0x00000000 PPPP +# Attempt erroneous write to BASE register +! 0x10003ca0 0x0000dead +# Read BASE register; confirm proper 10-bit value +? 0x10003ca0 0x000002dc 0xffffffff +# Read TOPS register; confirm unmodified TOPS +? 0x10003cc0 0x00000000 0xffffffff +# Read STAT register; confirm DBF=0 +? 0x10003c00 0x00000000 0x00000080 +# Read DBF register; confirm DBF=0 +? 0x10003cf0 0x00000000 0x00000001 +# +# +# ---- OFFSET/OFST ---- [test.code.offset] [test.dbf.offset] # # Test OFFSET instruction on PKE1 1 0x0200ffff_00000000_00000000_00000000 0x00000000 PPPP @@ -22,6 +39,8 @@ ! 0x10003cb0 0x0000dead # Read OFST register; confirm proper 10-bit value ? 0x10003cb0 0x000003ff 0xffffffff +# Read TOPS register; confirm recomputed TOPS +? 0x10003cc0 0x000002dc 0xffffffff # Read STAT register; confirm DBF=0 ? 0x10003c00 0x00000000 0x00000080 # Read DBF register; confirm DBF=0 @@ -30,21 +49,7 @@ ? 0x10003c00 0x00000000 0x00002000 # # -# ---- BASE/BASE ---- -# -# Test BASE instruction on PKE1 -1 0x0300ffff_00000000_00000000_00000000 0x00000000 PPPP -# Attempt erroneous write to BASE register -! 0x10003ca0 0x0000dead -# Read BASE register; confirm proper 10-bit value -? 0x10003ca0 0x000003ff 0xffffffff -# Read STAT register; confirm DBF=0 -? 0x10003c00 0x00000000 0x00000080 -# Read DBF register; confirm DBF=0 -? 0x10003cf0 0x00000000 0x00000001 -# -# -# ---- ITOP/ITOPS ---- +# ---- ITOP/ITOPS ---- [test.code.itop] # # Test ITOP instruction 0 0x0400ffff_00000000_00000000_00000000 0x00000000 PPPP @@ -56,7 +61,7 @@ ? 0x10003800 0x00000000 0x00002000 # # -# ---- STMOD/MODE ---- +# ---- STMOD/MODE ---- [test.code.stmod] # # Test STMOD instruction 0 0x05000003_00000000_00000000_00000000 0x00000000 PPPP @@ -72,7 +77,7 @@ ? 0x10003800 0x00000000 0x00002000 # # -# ---- STMARK/MARK ---- +# ---- STMARK/MARK ---- [test.code.stmark] # # Test MARK instruction 0 0x0700abcd_00000000_00000000_00000000 0x00000000 PPPP @@ -88,15 +93,15 @@ ? 0x10003830 0x00001234 0xffffffff # # -# ---- bad PKEcode/ER1, interrupts ---- +# ---- bad PKEcode/ER1, interrupts ---- [test.code.bad] [test.stall.er1] # # A bad PKEcode -1 0x00000000_00000000_00000000_08000000 0x00000000 PPPP +1 0x00000000_00000000_01000001_08000000 0x00000000 PPPP # should put PKE into stalled mode, not executing following PKENOPs # Read STAT register; confirm ER1 bit set ? 0x10003c00 0x00002000 0x00002000 -# Read CODE register; confirm PKE is stuck at bad code -? 0x10003c80 0x08000000 0xffffffff +# Read CODE register; confirm PKE is stuck just after bad code +? 0x10003c80 0x01000001 0xffffffff # Reset PKE ! 0x10003c10 0x00000001 # Read STAT register; confirm ER1 no longer set @@ -107,32 +112,56 @@ # A bad PKEcode with ER1 masked 1 0x00000000_00000000_00000000_08000000 0x00000000 PPPP # should not put PKE into stalled mode, should execute following PKENOPs -# Read STAT register; confirm ER1 bit set -? 0x10003c00 0x00002000 0x00002000 +# Read STAT register; confirm ER1 bit not set +? 0x10003c00 0x00000000 0x00002000 # Read CODE register; confirm PKE went past bad code ? 0x10003c80 0x00000000 0xffffffff # Reset PKE ! 0x10003c10 0x00000001 -# Read STAT register; confirm ER1 no longer set -? 0x10003c00 0x00000000 0x00002000 -# # +# [test.stall.pis] [test.stall.int] # A good PKEcode (STMOD) with interrupt -1 0x00000000_00000000_00000000_85000000 0x00000000 PPPP +1 0x01000000_00000000_00000000_85000000 0x00000000 PPPP # should put PKE into stalled mode, not executing following PKENOPs -# Read STAT register; confirm PIS & INT bits set -? 0x10003c00 0x00000c00 0x00000c00 +# Read STAT register; confirm PIS & INT bits set, no ER1 +? 0x10003c00 0x00000c00 0x00002c00 # Read CODE register; confirm PKE is stuck at bad code ? 0x10003c80 0x85000000 0xffffffff # Resume PKE with STC ! 0x10003c10 0x00000008 -# Read STAT register; confirm PIS & INT no longer set -? 0x10003c00 0x00000000 0x00000c00 -# Read CODE register; confirm PKE executed trailing no-ops -? 0x10003c80 0x00000000 0xffffffff +# Read STAT register; confirm PIS & INT no longer set, no ER1 +? 0x10003c00 0x00000000 0x00002c00 +# Read CODE register; confirm PKE executed last instruction +? 0x10003c80 0x01000000 0xffffffff +# +# [test.stall.pis] [test.stall.int] [test.stall.int-masked] +# Mask INT stall: set ERR:MII +! 0x10003c20 0x00000001 +# A good PKEcode (STMOD) with interrupt +1 0x01000001_00000000_00000000_85000000 0x00000000 PPPP +# should NOT put PKE into stalled mode +# Read STAT register; confirm INT bits set but no PIS, and no ER1 +? 0x10003c00 0x00000800 0x00002c00 +# Read CODE register; confirm PKE executed last instruction +? 0x10003c80 0x01000001 0xffffffff +# +# [test.stall.int-mark] +# Reset the PKE, unmasking interrupt +! 0x10003c10 0x00000001 +# A good PKEcode (PKEMARK) with interrupt +1 0x01000002_01000001_0100000f_8700b00f 0x00000000 PPPP +# should NOT put PKE into stalled mode +# Read MARK register; confirm its value +? 0x10003c30 0x0000b00f 0xffffffff +# Read STAT register; confirm INT & PIS bits are set, and no ER1 +? 0x10003c00 0x00000c00 0x00002c00 +# Read CODE register; confirm PKE is stalled with following NOP instruction +? 0x10003c80 0x0100000f 0xffffffff +# Reset the PKE +! 0x10003c10 0x00000001 # # -# ---- STMASK/MASK ---- +# ---- STMASK/MASK ---- [test.code.stmask] # # Test STMASK instruction; leave operand out for now 0 0x20000000_00000000_00000000_00000000 0x00000000 PPPP @@ -148,7 +177,7 @@ ? 0x10003800 0x00000000 0x00002000 # # -# ---- DIRECT ---- +# ---- DIRECT/DIRECTHL ---- [test.code.direct] [test.code.directhl] # # Test DIRECT instruction; leave operand out for now 1 0x50000001_00000000_00000000_00000000 0x00000000 PPPP @@ -164,16 +193,16 @@ ! 0x10003c10 0x00000001 # Read STAT register; confirm ER1 no longer set ? 0x10003c00 0x00000000 0x00002000 -# Test DIRECT instruction with bad operand alignment -1 0x00000000_00000000_50000001_00000000 0x00000000 PPPP +# Test DIRECTHL instruction with bad operand alignment +1 0x00000000_00000000_51000001_00000000 0x00000000 PPPP # Read STAT register; confirm ER1 bit set ? 0x10003c00 0x00002000 0x00002000 # Reset PKE ! 0x10003c10 0x00000001 # Read STAT register; confirm ER1 no longer set ? 0x10003c00 0x00000000 0x00002000 -# Test DIRECT instruction with bad operand alignment -1 0x00000000_00000000_00000000_50000001 0x00000000 PPPP +# Test DIRECTHL instruction with bad operand alignment +1 0x00000000_00000000_00000000_51000001 0x00000000 PPPP # Read STAT register; confirm ER1 bit set ? 0x10003c00 0x00002000 0x00002000 # Reset PKE @@ -182,7 +211,7 @@ ? 0x10003c00 0x00000000 0x00002000 # # -# ---- MPG - PKE0 ---- +# ---- MPG - PKE0 ---- [test.code.mpg] # # Test MPG instruction; leave operand out for now 0 0x4a080000_00000000_00000000_00000000 0x00000000 PPPP @@ -230,7 +259,7 @@ ? 0x10003800 0x00000000 0x00002000 # # -# ---- MPG - PKE1 ---- +# ---- MPG - PKE1 ---- [test.code.mpg] # # Test MPG instruction; leave operand out for now 1 0x4a080000_00000000_00000000_00000000 0x00000000 PPPP @@ -278,19 +307,24 @@ ? 0x10003c00 0x00000000 0x00002000 # # -# ---- STROW/ROW + DMA mismatch ---- +# ---- STROW/ROW + DMA mismatch ---- [test.code.strow] [test.dma.er0] # +# Don't mask anything (including ER0) +! 0x10003820 0x00000000 # Test STROW instruction; leave operand out for now 0 0x30000000_00000000_00000000_00000000 0x00000000 PPPP # Read STAT register; confirm PPS field set at WAIT ? 0x10003800 0x00000001 0x00000003 -# Write ERR register; mask ER0 stalling -! 0x10003820 0x00000002 # Supply operand - four words 0 0x1234abcd_2345bcde_ffffffff_ffffffff 0x00000000 ..DD -0 0x00000000_00000000_5432dcba_76543210 0x00000000 PP.. # Read STAT register; confirm ER0 (DMA mismatch) ? 0x10003800 0x00001000 0x00001000 +# Confirm that PKE is stalled at STROW instruction +? 0x10003880 0x30000000 0xffffffff +# Supply final few operand words +0 0x00000000_01000020_5432dcba_76543210 0x00000000 PP.. +# Resume PKE with STC +! 0x10003810 0x00000008 # Make erroneous write ! 0x10003900 0x11111111 ! 0x10003910 0x22222222 @@ -301,13 +335,11 @@ ? 0x10003910 0x1234abcd 0xffffffff ? 0x10003920 0x76543210 0xffffffff ? 0x10003930 0x5432dcba 0xffffffff -# Read STAT register; confirm ER1 not set -? 0x10003800 0x00000000 0x00002000 # Reset PKE ! 0x10003810 0x00000001 # # -# ---- STCOL/COL + STOP/CONTINUE ---- +# ---- STCOL/COL + STOP/CONTINUE ---- [test.code.stcol] [test.stall.fbk] [test.stall.pfs] # # Test STCOL instruction; leave operand out for now 0 0x31000000_00000000_00000000_00000000 0x00000000 PPPP @@ -334,6 +366,7 @@ ? 0x10003800 0x00000000 0x00002000 # # Try stopping using STP bit this time +# [test.stall.stp] [test.stall.wait] [test.stall.pss] # Test STCOL instruction; leave operand out for now 1 0x31000000_00000000_00000000_00000000 0x00000000 PPPP # Read STAT register; confirm PPS field set at WAIT @@ -365,10 +398,11 @@ ? 0x10003c00 0x00000000 0x00002000 # # -# ---- MSKPATH3 ---- +# ---- MSKPATH3 ---- [test.code.mskpath3] # # Set then clear MSKPATH3 on PKE1 1 0x06008000_00000000_06000000_00000000 0x00000000 PPPP +# XXX: test M3P register of GPUIF XXX # Read STAT register; confirm ER1 not set ? 0x10003c00 0x00000000 0x00002000 # Erroneously run this on PKE0 @@ -379,7 +413,7 @@ ! 0x10003810 0x00000001 # # -# ---- memory-mapped port reading ---- +# ---- memory-mapped port reading ---- [test.mmap] # # Erroneously read words from FIFO ports ? 0x10004000 0x00000000 0xffffffff @@ -432,8 +466,18 @@ ! 0x10003d60 0x00000000 ! 0x10003d70 0x00000000 # +# Erroneously read/write words between registers +! 0x10003c14 0xffffffff +! 0x10003c18 0xffffffff +! 0x10003c1c 0xffffffff +! 0x10003874 0xffffffff +! 0x10003884 0xffffffff +! 0x100038fc 0xffffffff # -# ---- FLUSH/FLUSHE/FLUSHA & CALL/CALLF/CONT ---- +# +# ---- FLUSH/FLUSHE/FLUSHA & CALL/CALLF/CONT ---- [test.code.flush] [test.code.flushe] +# [test.code.flusha] [test.code.pkemscal] [test.code.pkemscalf] [test.code.pkemscnt] +# [test.stall.vu] # # Load a bunch of NOP[e]/NOP instructions into the VU # 0x000002ff_8000033c == NOP NOP @@ -447,6 +491,8 @@ 1 0x400002ff_8000033c_000002ff_8000033c 0x00000000 .... # Start VU; FLUSH 1 0x10000000_14000000_00000000_00000000 0x00000000 PPPP +# Assert PEW bit on while waiting for VU +? 0x10003c00 0x00000004 0x00000004 # Send a few more NOPs to let VU get to first END 1 0x00000000_00000000_00000000_00000000 0x00000000 PPPP 1 0x00000000_00000000_00000000_00000000 0x00000000 PPPP @@ -472,4 +518,99 @@ 1 0x00000000_00000000_00000000_00000000 0x00000000 PPPP # Assert VU is in idle state ? 0x110073d0 0x00000000 0x00000200 - +# +# +# ---- DBF ---- [test.code.base] [test.code.offset] [test.dbf] +# [test.code.pkemscal] [test.code.pkemscalf] [test.code.pkemscnt] +# +# Load a bunch of NOP[e]/NOP instructions into the VU +# 0x000002ff_8000033c == NOP NOP +# 0x400002ff_8000033c == NOP[e] NOP +# MPG 10 instructions with lots of ENDs +1 0x4a0a0000_00000000_00000000_00000000 0x00000000 PPPP +1 0x400002ff_8000033c_000002ff_8000033c 0x00000000 .... +1 0x000002ff_8000033c_000002ff_8000033c 0x00000000 .... +1 0x000002ff_8000033c_400002ff_8000033c 0x00000000 .... +1 0x400002ff_8000033c_000002ff_8000033c 0x00000000 .... +1 0x000002ff_8000033c_000002ff_8000033c 0x00000000 .... +# Load BASE & OFFSET registers; stick in some DMA tags too [test.dma] +1 0x02000200_03000100_77777777_77777777 0x00000000 PPDD +# Confirm BASE & OFFSET & TOPS & TOP & DBF registers +? 0x10003ca0 0x00000100 0xffffffff +? 0x10003cb0 0x00000200 0xffffffff +? 0x10003cc0 0x00000100 0xffffffff +? 0x10003ce0 0x00000000 0xffffffff +? 0x10003cf0 0x00000000 0xffffffff +# Make one CALL +1 0x00000000_00000000_00000000_14000000 0x00000000 PPPP +# Confirm TOP & DBF & TOPS registers after DBF flip +? 0x10003ce0 0x00000100 0xffffffff +? 0x10003cf0 0x00000001 0xffffffff +? 0x10003cc0 0x00000300 0xffffffff +# Make one CALLF +1 0x00000000_00000000_00000000_15000000 0x00000000 PPPP +# Confirm TOP & DBF & TOPS registers after DBF flip +? 0x10003ce0 0x00000300 0xffffffff +? 0x10003cf0 0x00000000 0xffffffff +? 0x10003cc0 0x00000100 0xffffffff +# Make one CONT +1 0x00000000_00000000_00000000_17000000 0x00000000 PPPP +# Confirm TOP & DBF & TOPS registers after DBF flip +? 0x10003ce0 0x00000100 0xffffffff +? 0x10003cf0 0x00000001 0xffffffff +? 0x10003cc0 0x00000300 0xffffffff +# +# +# ---- MPG/UNPACK address overflow tests ---- [test.ext.mpgaddr] +# +# MPG to PKE0 near top of address range +# [test.unpack.V3_32] [test.code.stcycl] [test.unpack.endian] [test.unpack.unsigned] +# [test.unpack.no-r] +0 0x6804ffff_01000000_77777777_55555555 0x00000000 PPDD +0 0x33330333_22222022_11111101_ccccccc0 0x00000000 .... +0 0x07777777_60666666_55055555_44404444 0x00000000 .... +0 0xbbbb0bbb_aaaaa0aa_99999909_88888880 0x00000000 .... +# Assert that all words were written correctly +? 0x11004ff0 0xccccccc0 0xffffffff +? 0x11004ff4 0x11111101 0xffffffff +? 0x11004ff8 0x22222022 0xffffffff +? 0x11004ffc 0x00000000 0xffffffff +? 0x11004000 0x33330333 0xffffffff +? 0x11004004 0x44404444 0xffffffff +? 0x11004008 0x55055555 0xffffffff +? 0x1100400c 0x00000000 0xffffffff +? 0x11004010 0x60666666 0xffffffff +? 0x11004014 0x07777777 0xffffffff +? 0x11004018 0x88888880 0xffffffff +? 0x1100401c 0x00000000 0xffffffff +? 0x11004020 0x99999909 0xffffffff +? 0x11004024 0xaaaaa0aa 0xffffffff +? 0x11004028 0xbbbb0bbb 0xffffffff +? 0x1100402c 0x00000000 0xffffffff +# +# MPG to PKE1 near top of PKE1 address range [test.unpack.V4_5] +# [test.unpack.signed] [test.unpack.r] +1 0x02000100_00000100_99999999_33333333 0x00000000 PPDD +1 0x6f058eff_01000000_77777777_55555555 0x00000000 PPDD +1 0x00000000_77779999_deadbeef_aaaa5555 0x00000000 P... +# Assert that all words were written correctly +? 0x1100fff0 0xfffffff5 0xffffffff +? 0x1100fff4 0x0000000a 0xffffffff +? 0x1100fff8 0xfffffff5 0xffffffff +? 0x1100fffc 0x00000000 0xffffffff +? 0x1100c000 0x0000000a 0xffffffff +? 0x1100c004 0xfffffff5 0xffffffff +? 0x1100c008 0x0000000a 0xffffffff +? 0x1100c00c 0x00000001 0xffffffff +? 0x1100c010 0x0000000f 0xffffffff +? 0x1100c014 0xfffffff7 0xffffffff +? 0x1100c018 0x0000000f 0xffffffff +? 0x1100c01c 0x00000001 0xffffffff +? 0x1100c020 0x0000000d 0xffffffff +? 0x1100c024 0xfffffff5 0xffffffff +? 0x1100c028 0xfffffff7 0xffffffff +? 0x1100c02c 0x00000001 0xffffffff +? 0x1100c030 0xfffffff9 0xffffffff +? 0x1100c034 0x0000000c 0xffffffff +? 0x1100c038 0x00000006 0xffffffff +? 0x1100c03c 0x00000001 0xffffffff diff --git a/sim/testsuite/sky/t-pke4.run b/sim/testsuite/sky/t-pke4.run deleted file mode 100644 index 4c2c17f94454bb7f9381dad802c460bf6d767404..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186145 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�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 z¥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 -- 2.34.1