masking facility for PATH3 transfers.
[ChangeLog.sky]
Sun Apr 5 12:11:45 1998 Frank Ch. Eigler <fche@cygnus.com>
* sky-libvpe.c (exec-inst): Added "M" bit detection for upper
instruction.
* sky-pke.c (pke_check_stall): Added more assertions.
(pke_code_mskpath3): Use new GPUIF M3P control register.
* sky-pke.h (VU[01]_CIA): New macros that give VU CIA
pseudo-register addresses.
* sky-vu.h (vu_device, VectorUnitState): Merged structs.
(VectorUnitState.mflag): New field.
(VU_REG_{CMSAR0,CMSAR1,FBRST}) Added missing control registers.
* sky-vu.c (vu0_busy): New function.
(vu0_q_busy): New function.
(vu0_macro_issue): New function.
(vu0_micro_interlock_released): New function.
(vu0_busy_in_{micro,macro}_mode): Deleted stubs.
(vu0_macro_hazard_check): Deleted stubs.
(vu_attach): Adapted code to merged device & state struct.
(read_vu_special_reg): Compute VBS0/VBS1 bits in STAT register.
[ChangeLog]
start-sanitize-sky
Sun Apr 5 12:05:44 1998 Frank Ch. Eigler <fche@cygnus.com>
* interp.c (*): Adapt code to merged VU device & state structs.
(decode_coproc): Execute COP2 each macroinstruction without
pipelining, by stepping VU to completion state. Adapted to
read_vu_*_reg style of register access.
* mips.igen ([SL]QC2): Removed these COP2 instructions.
* r5900.igen ([SL]QC2): Transplanted these COP2 instructions here.
* sim-main.h (cop_[ls]q): Enclosed in TARGET_SKY guards.
end-sanitize-sky
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.
* sky-pke.h (pke_fifo*): Exported these formerly private functions.
(pke_device): Added FIFO cache fields.
* sky-pke.c (pke_fifo_reset): New function for GPUIF client -
clear FIFO contents.
(pke_pcrel_fifo): Added caching facility to prevent O(n^2) cost for
searching for consecutive operand words.
* sky-libvpe.c (MEM, uMEM): New/changed macros that perform modulo
calculations to handle out-of-range VU memory addresses.
(*): Replaced many previous uses of MEM[] and state->uMEM[] with
calls to above macros.
* sky-vu.h (struct VectorUnitState): Added qw/dw size fields for
MEM/uMEM buffers, for overflow prevention. Renamed MEM/uMEM fields
to catch all their prior users.
* sky-vu0.c (vu0_attach): Manually align MEM0/MEM1 buffers to force
16-byte alignment. (zalloc is not enough.)
* sky-vu1.c (vu1_attach): Ditto.
(init_vu): Store buffer sizes from allocation into VectorUnitState.
* sky-gpuif.h (GifPath): Use a pke_fifo strucf instead of
temporary fixed-size array for flexible FIFO sizing.
* sky-gpuif.c (SKY_GPU2_REFRESH): This is now an integer value to be
used as a modulus for periodic refresh.
(refresh): New function to send GPU2 refresh code periodically.
(*): Use pke_fifo calls to en/dequeue GPUIF tags & operands.
* sky-pke.h (struct pke_device): Added fields to allow caching of
results from recent FIFO searches.
effectively full. The code is believed to be functionally complete now.
Some code cleanup is included at no extra charge in this version.
Fri Mar 13 20:21:57 1998 Frank Ch. Eigler <fche@cygnus.com>
* sky-vu1.c: (dump_mem): Commented out function to satiate
warning-ful compilation.
* sky-pke.c: (pke_reset): New function, called explicitly at
initialization and at FBRST.
(pke_fifo_flush): New function to flush (skip over) existing
quadwords in FIFO.
(pke_fifo_fit): New function to add space for new quadword in
FIFO.
(pke_fifo_access): New function to absolute-index into FIFO.
(pke_fifo_old): New function to remove old quadwords from FIFO.
(pke_begin_interrupt_stall): New function to abstract
interrupt-caused stalls.
(pke_*): Access PKE FIFO only thorugh pke_fifo functions.
(pke_pcrel_*): Renamed pke_pc_* functions.
(pke_code_unpack): Numerous logic tweaks for latest UNPACK
behavior changes & clarifications from SCEI.
* sky-pke.h (struct pke_fifo): New explicit FIFO representation.
(struct pke_device): Use struct above.
(PKE_DEBUG): Removed macro as misnomer.
* sky-hardware.c: Moved *_cmd_install declarations out.
* sky-hardware.h: Moved *_cmd_install declarations in.
PKE tests run identically on SPARC/Solaris and x86/Linux.
* sky-pke.c (pke_io_{read,write}_buffer): Endianness fixes aka
"E-fixes" in register and FIFO read/writes.
(pke_code_{pkemscalf,pkemscal}): E-fixes in VU CIA setting.
(pke_code_{mpg,unpack}): E-fixes in VU memory & tracking updates.
(pke_code_direct): E-fixes in GPUIF FIFO stuffing.
* sky-pke.h (PKE_MEM_WRITE): E-fixes in trace file writing.
* sky-vu0.c (vu0_attach): Allocate micro/data memory with zalloc
to guarantee sufficient (16-byte) alignment.
* sky-vu1.c (vu1_attach): Ditto.
(vu1_io_read_register_window): *PARTIAL* E-fixes in register accesses.
* sky-libvpe.c (gif_write): E-fixes in GPUIF FIFO stuffing.
* sky-gpuif.c (gif_io_{read,write}_buffer): E-fixes in
register and FIFO read/writes.
* sky-dma.c (do_dma_transfer_tag): E-fixes in tag reading.
mechanism is starting to subside.
* sky-pke.h (PKE_FLAG_INT_NOLOOP): Added device flag to indicate
presence of stalled & interrupted PKEcode.
* sky-pke.c (pke_issue): Added PKEcode interrupt bit handling.
(pke_flip_dbf): Changed double-buffering logic to match SCEI
clarification.
(pke_code_*): Added interrupt bit stalling clause.
(pke_code_pkems*): Added ITOP/ITOPS transmission code.
(pke_code_unpack): Added more careful logic for processing
overflows of VU data memory addresses.
* sky-pke.h (PKE_MEM_READ): Removed "read" entry from FIFO trace.
* sky-pke.c (pke_attach): Set trace file to line buffering iff
open.
(pke_io_read_buffer, pke_io_write_buffer): Handle erroneous
reads/writes by zero-padding.
(pke_io_write_buffer): Switch to more bit-field definition macros.
(pke_issue): Remove "stalled" entry from FIFO trace.
(pke_pc_advance): Correct logic for DMA-tag-skipping, PKEcode
classification.
(pke_code_mskpath3): Sketch of possible PATH3 masking method.
(pke_code_mpg): Keep order of lower/upper VU words as supplied.
(pke_code_unpack): Logic change for wl/cl/num unpacking. Weird.
the SCEI PKE simulator's output on its own test sample (tsv432.in).
* sky-pke.h (PKE_MEM_READ, PKE_MEM_WRITE, PKE_REG_MASK_SET): Add
trace file records.
* sky-pke.c: (pke_track_write): Removed function. Replaced with
in-line modifications to VU tracking tables.
(pke_attach): Attach VU tracking tables. Use line buffering on
trace files.
(pke_issue): Spit out additional trace records.
(pke_pc_operand_bits): Correct bitfield masking error.
(*): Replace sim_read/write with kludge PKE_MEM_READ/WRITE
throughout.
(pke_code_unpack): Correct numerous small bugs in operand decoding
etc.
A few PKE instructions even run correctly! Next missing function of
interest: FIFO pruning.
* sky-pke.c (pke_issue): Take extra SIM_DESC argument.
(pke_attach): Attach correct PKE0/PKE1 device. Open trace file if
VIF{0,1}_TRACE_FILE env. var. is defined.
(pke_io_write_buffer): Classify words in FIFO quadword. Use
kludgey sim_core routines to access DMA registers.
(pke_pc_advance): Add PKEcode classification. Correct DMA tag
skipping. Emit trace records.
(pke_pc_fifo): Add PKEcode operand classification.
(pke_check_stall): Perform stall checks against updated register
scheme.
(pke_code_unpack): Correct operand-count calculation.
(pke_code_stmask): Correct instruction skipping.
* sky-pke.h (PKE_MEM_WRITE, PKE_MEM_READ): New kludge macros.
(BIT_MASK_BTW): Corrected off-by-one error.
(enum wordclass): Classify words in a FIFO quadword.
* sky-dma.c (dma_io_read_buffer): Correct address checking assertions.
* sky-engine.c (engine_run): Pass along SIM_DESC to PKE
instruction issue code.
* handling of super duper packed UNPACK arguments
* skipping of in-progress instruction on break/stop
* interrupt generation to 5900
* PATH2/PATH3 status checking & masking
* ability to write to FIFO one word (instead of quadword) at a time