6346 lines
128 KiB
Markdown
6346 lines
128 KiB
Markdown
# C++ Plan
|
|
|
|
- Write the extractor:
|
|
- giant mesh vertex data (position, color, texture coordinates per vertex)
|
|
- giant mesh index data (a chunk of indices per corner)
|
|
- list of buckets, each contains a list of corners in the bucket, and montage table
|
|
- Each corner has a vis ID for precomputed vis, bsphere for view frustum culling, and index group
|
|
- time-of-day colors
|
|
- Draw mode for textures (HACK: get the un-animated textures in here too, just for debug)
|
|
|
|
- Write the loader
|
|
- load mesh and colors to GPU
|
|
|
|
- Write the C++ renderer
|
|
- skip texture for now.
|
|
|
|
- Write the GOAL renderer code (send camera data/visibility data to C++)
|
|
|
|
- Debug!
|
|
|
|
- Add textures (un-animated)
|
|
|
|
# Vertex
|
|
|
|
- hfragment
|
|
- buckets: collection of corners, likely using shared texture?
|
|
- "corners": smallest thing that can be processed by vertex generation asm
|
|
- "polyN": square grid of vertices, culled together
|
|
|
|
# Far Vertices
|
|
|
|
Vertex pos spacing is 32
|
|
index0 = index1 = index2.
|
|
|
|
5 chains
|
|
|
|
always poly25's.
|
|
Each poly25 is a 5x5 grid of vertex indices.
|
|
|
|
160x160 position units.
|
|
|
|
Can optionally scissor.
|
|
|
|
Taken if entire "corner" sphere is past far threshold.
|
|
|
|
# Mid Vertices
|
|
|
|
Vertex pos spacing is 16
|
|
index0,1,2 different.
|
|
|
|
9 chains
|
|
|
|
(poly-mid25, far, if the sphere is in mid and far. No scissoring support.)
|
|
2x2 grid of poly25's. Each poly25 is a 5x5 grid of vertex indices.
|
|
160x160 position unit
|
|
|
|
(poly-mid, far-mid, if the sphere is entirely mid. no scissoring.)
|
|
4x4 grid of poly9's. Each poly9 is a 3x3 grid of vertex indices.
|
|
192x192 position units
|
|
|
|
|
|
# Near Vertices
|
|
|
|
Vertex pos spacing is 8.
|
|
index0,1,2 different.
|
|
|
|
17 chains
|
|
|
|
(poly-near, near-mid, if sphere is in mid and near, has scissoring support.)
|
|
8x8 grid of poly9's, each poly9 is a grid of 3x3 indices.
|
|
192x129 position units
|
|
|
|
poly4 as well??
|
|
"near" if sphere is in near. No scissoring option (always on?)
|
|
|
|
# Poly4
|
|
2x2
|
|
12 quadword upload
|
|
|
|
# Poly9
|
|
3x3
|
|
36 quadword upload
|
|
|
|
# poly25
|
|
5x5
|
|
120 quadword upload
|
|
|
|
# DMA generation asms
|
|
|
|
- `near`, 31, 4326 lines
|
|
- `near-mid`, 30, 3274
|
|
- `mid`, 29
|
|
- `far-mid`, 28, 3244 line
|
|
- `far`, 27, 753 lines
|
|
- `far-scissor`, 18
|
|
- `near-mid-scissor`, 21, 3628 lines
|
|
|
|
# Montage Texture Coords
|
|
|
|
16x8 grid texture.
|
|
|
|
# VU1 program addresses
|
|
|
|
- 0x06: scissor??
|
|
- 0x0c: another init??
|
|
- 0x20: abort
|
|
- 0x2c: init
|
|
- 0x2e: poly4-near
|
|
- 0x7d: poly25-far
|
|
- 0x7f: poly25-mid
|
|
- 0x14b: poly9-mid
|
|
- 0x14f: poly9-near
|
|
|
|
# hfrag-vert-index
|
|
Metadata about a vertex?
|
|
|
|
# Corners
|
|
32x32 grid
|
|
Each corner is 524288 apart (128 meters)
|
|
|
|
# Draw table (in work)
|
|
Stores linked list (by index, not pointer) of chains per mode.
|
|
|
|
Example:
|
|
`work.next-far-scissor` points to entry in draw-table for the first corner to be drawn with far scissor. Value in the draw table is the index of the next corner... eventually it's -1, and that's the end of the chain.
|
|
|
|
# Drawing process
|
|
- `init-work-from-current-hfrag`
|
|
- maybe set lowres
|
|
- build corner array
|
|
- zero out work's next/count (next is set to -1)
|
|
- zero out hfragment static data bucket next/count (next is 0)
|
|
- `pick-level-of-detail`
|
|
- loop over all corners, check vis bit.
|
|
- do sphere cull to reject
|
|
- do guard-band-cull to set scissor
|
|
- subdiv-index bits: 8: back mid, 4: front mid, 2: back near, 1: front near
|
|
- build draw-table chains per rendering type
|
|
- `trim-draw-lists`
|
|
- remove stuff from draw table if too big
|
|
- `time-of-day-interp-colors-scratch`
|
|
|
|
- `generate-dma`
|
|
- call asm stuff
|
|
- method 23
|
|
- no idea
|
|
- `finalize-dma`
|
|
- shader asm stuff, finshing up buffers.
|
|
|
|
# `asm-near` summary
|
|
|
|
## Vertex 0
|
|
`vt0` only
|
|
|
|
## Vertex 1
|
|
`weight * vt0 + (1 - weight) * 0.5 * (vt1 + vt2)`
|
|
|
|
## Vertex 2
|
|
`vt0` only
|
|
|
|
## Vertex 3
|
|
`weight * vt0 + (1 - weight) * 0.5 * (vt1 + vt2)`
|
|
|
|
## Vertex 4
|
|
`weight * vt0 + (1 - weight) * 0.5 * (vt1 + vt2)`
|
|
|
|
## Vertex 5
|
|
`weight * vt0 + (1 - weight) * 0.5 * (vt1 + vt2)`
|
|
|
|
## Vertex 6
|
|
`vt0` only
|
|
|
|
## Vertex 7
|
|
`weight * vt0 + (1 - weight) * 0.5 * (vt1 + vt2)`
|
|
|
|
## Vertex 8
|
|
`vt0` only
|
|
|
|
# DMA from spr order (within a poly9)
|
|
0: 16 byte header
|
|
16: c0's pos (xyzw)
|
|
32: c0, c3, c1, c4 (pos'ys as floats)
|
|
48: 16 byte gap
|
|
64: c0, c3, c1, c4 (colors as u8's packed)
|
|
|
|
|
|
# poly9 orders
|
|
|
|
;; 0 1 2 | 0 1 2
|
|
;; 3 4 5 | 3 4 5
|
|
;; 6 7 8 | 6 7 8
|
|
|
|
(0, 3, 1, 4)
|
|
(1, 4, 2, 5)
|
|
(3, 6, 4, 7)
|
|
(4, 7, 5, 8)
|
|
|
|
|
|
First poly9 is special (no shared verts w/ prev)
|
|
Then 6 shared poly9's
|
|
|
|
0
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
|
|
# Texture Stuff
|
|
|
|
```lisp
|
|
(defmethod login ((this hfragment))
|
|
"Initialize the object after it is loaded."
|
|
(dotimes (s5-0 3)
|
|
(adgif-shader-login (-> this shaders s5-0))
|
|
(if (> s5-0 0)
|
|
(set! (-> this shaders s5-0 tex0 tcc) 0)
|
|
)
|
|
(set! (-> this shaders 1 tex0 cbp) 3904)
|
|
(set! (-> this shaders 2 tex0 cbp) 3904)
|
|
)
|
|
this
|
|
)
|
|
```
|
|
|
|
# Method 23 near texture data summary:
|
|
|
|
- `work.frame-tmpl`: 4 a+d data setup
|
|
- `work.frames[0]`: a+d for frame (hard-coded fbp), scissor 0x7f, xyoffset 0, test (no zbuf, always pass)
|
|
- `work.adgif-tmpl`: usual adgif direct template
|
|
- `hfrag.shaders[2]`: the whole thing.
|
|
|
|
Loop over montage (16x?)
|
|
- `hfrag.sprite-tmpl`: 2 qw (template rgba, st, xyz, st, xyz)
|
|
- `colors[0] = 0x80, 0x80, 0x80, 0x80`
|
|
- `montage-tex-coords[montage[m]].st0`
|
|
- `near-data[2 * m]`
|
|
- `montage-tex-coords[montage[m]].st1`
|
|
- `near-data[2 * m + 1]`
|
|
|
|
- `work.frame-tmpl`
|
|
- `work.frames[1]`: half size frame, seems like the MIP data
|
|
|
|
|
|
# C++ version of texture stuff:
|
|
|
|
```c++
|
|
struct Bucket {
|
|
std::vector<int> corners;
|
|
u16 montage_table[16];
|
|
};
|
|
```
|
|
|
|
# `asm-near`
|
|
|
|
```
|
|
L15:
|
|
daddiu sp, sp, -64
|
|
sd ra, 0(sp)
|
|
sq s4, 16(sp)
|
|
sq s5, 32(sp)
|
|
sq gp, 48(sp)
|
|
|
|
a0 hfrag-work
|
|
a1 dma-buffer
|
|
a2 draw-table chain
|
|
|
|
B0:
|
|
sll r0, r0, 0
|
|
lw v1, 4(a1) ;; v1 = dma-buffer.base
|
|
sll r0, r0, 0
|
|
sw a1, 8148(a0) ;; stash dma-buffer in work
|
|
lui t0, 4096 ;; 0x1000????
|
|
lui t1, 4096
|
|
sync.l ;; cache stuff
|
|
cache dxwbin v1, 0
|
|
sync.l
|
|
cache dxwbin v1, 1
|
|
sync.l
|
|
lui a3, 28672 ;; a3 = scratchpad memory 0x7000'0000
|
|
daddiu v1, a0, 512 ;; v1 = work.near-chaina
|
|
daddiu t3, a0, 800 ;; t3 = work.near-chainb
|
|
ori t0, t0, 54272 ;; t0 = 0x1000'd400 (SPR-TO DMA)
|
|
ori t2, t1, 53248 ;; t2 = 0x1000'd000 (SPR-FROM DMA)
|
|
or t1, a3, r0 ;; t1 = scratchpad memory (input bank buffer)
|
|
sw v1, 8180(a0) ;; work.chain-ptr-next = work.near-chaina
|
|
vmaxw.xyzw vf11, vf0, vf0 ;; vf11 = [1, 1, 1, 1]
|
|
sw t3, 8176(a0) ;; work.chain-ptr = work.near-chainb
|
|
lw t3, 4(a1) ;; t3 = dma-buffer.base
|
|
ori v1, a3, 2720 ;; v1 = spad.outa
|
|
addiu a1, r0, 0 ;; a1 = 0
|
|
sw t0, 8192(a0) ;; stash to-spr (ctrl reg)
|
|
or t0, v1, r0 ;; t0 = spad.outa
|
|
sw t2, 8196(a0) ;; stash from-spr (ctrl reg)
|
|
sll r0, r0, 0
|
|
sw t3, 8152(a0) ;; stash base
|
|
sll r0, r0, 0
|
|
lqc2 vf20, 7840(a0) ;; stq.vectors[0] = [1, 0, 0, 0]
|
|
sll r0, r0, 0
|
|
lqc2 vf21, 7872(a0) ;; stq.vectors[2] = [0x1001, 0, 0, 0]
|
|
sll r0, r0, 0
|
|
lqc2 vf22, 7936(a0) ;; stq.vectors[6] = [0x1000, 0, 0, 0]
|
|
sll r0, r0, 0
|
|
lqc2 vf23, 7968(a0) ;; stq.vectors[8] = [0x1000, 0x1000, 0, 0]
|
|
lui t2, 8192 ;; t2 = 0x2000'????
|
|
lw t3, 8176(a0) ;; t3 = work.chain-ptr
|
|
andi t6, a2, 31 ;; t6 = corner_idx[0] (maybe x?) idx = 32 * z + x
|
|
lw t4, 8288(a0) ;; t4 = work.frag.verts
|
|
sra t5, a2, 5 ;; t5 = corner_idx[1] (maybe z?)
|
|
sll t6, t6, 6 ;; t6 = cx * 64
|
|
sll t5, t5, 15 ;; t5 = cz * 32768 ???
|
|
daddu t4, t6, t4
|
|
or t2, t3, t2 ;; uncached chain ptr.
|
|
daddu t3, t4, t5
|
|
|
|
;; loop over gi's, upload 5qw
|
|
|
|
;; vertex data
|
|
|
|
;; verts is a 512x512 grid of 4-byte vertices.
|
|
;; vx,vz -> vx + vz * 512 -> (vx * 4 + vz * 2048)
|
|
|
|
;; a "corner" is a 16x16 tile of vertices (there are 32x32 corners)
|
|
;; cx,cz -> v(cx * 16, cz * 16) -> (cx * 64 + cz * 32768)
|
|
|
|
;; DMA chain to scratchpad to load vertices
|
|
;; vx_start = cx * 16
|
|
;; vz_start = cz * 16
|
|
;; for vz in range(vz_start, vz_start + 17):
|
|
;; for vx in range(vx_start, vx_start + 20):
|
|
;; vi = vx + 512 * vz
|
|
;; vaddr = vi * 4
|
|
;; get_vertex(vaddr)
|
|
|
|
;; to draw a corner, you need 1 vertex past the end in z and x
|
|
|
|
;; patching near-chain addresses for each line of vertices
|
|
sw t3, 4(t2)
|
|
daddiu t3, t3, 2048
|
|
sw t3, 20(t2)
|
|
daddiu t3, t3, 2048
|
|
sw t3, 36(t2)
|
|
daddiu t3, t3, 2048
|
|
sw t3, 52(t2)
|
|
daddiu t3, t3, 2048
|
|
sw t3, 68(t2)
|
|
daddiu t3, t3, 2048
|
|
sw t3, 84(t2)
|
|
daddiu t3, t3, 2048
|
|
sw t3, 100(t2)
|
|
daddiu t3, t3, 2048
|
|
sw t3, 116(t2)
|
|
daddiu t3, t3, 2048
|
|
sw t3, 132(t2)
|
|
daddiu t3, t3, 2048
|
|
sw t3, 148(t2)
|
|
daddiu t3, t3, 2048
|
|
sw t3, 164(t2)
|
|
daddiu t3, t3, 2048
|
|
sw t3, 180(t2)
|
|
daddiu t3, t3, 2048
|
|
sw t3, 196(t2)
|
|
daddiu t3, t3, 2048
|
|
sw t3, 212(t2)
|
|
daddiu t3, t3, 2048
|
|
sw t3, 228(t2)
|
|
daddiu t3, t3, 2048
|
|
sw t3, 244(t2)
|
|
daddiu t3, t3, 2048
|
|
sw t3, 260(t2)
|
|
|
|
sll r0, r0, 0
|
|
lw t2, 8192(a0) ;; to-spr
|
|
sll r0, r0, 0
|
|
|
|
;; wait for to-spr transfer to finish
|
|
B1:
|
|
L16:
|
|
lw t3, 0(t2)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t3, t3, 256
|
|
sll r0, r0, 0
|
|
beq t3, r0, L17
|
|
sll r0, r0, 0
|
|
|
|
B2:
|
|
sll r0, r0, 0
|
|
lw t3, 8156(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu t3, t3, 1
|
|
sll r0, r0, 0
|
|
sw t3, 8156(a0)
|
|
beq r0, r0, L16
|
|
sll r0, r0, 0
|
|
|
|
B3:
|
|
L17:
|
|
sll r0, r0, 0
|
|
lw t3, 8176(a0) ;; t3 = chain-ptr (to-spr vertex gather)
|
|
sll r0, r0, 0
|
|
lw t4, 8180(a0) ;; t4 = chain-ptr-next
|
|
sll r0, r0, 0
|
|
sw t3, 8180(a0) ;; swap chain-ptr to chan-ptr-next
|
|
sll r0, r0, 0
|
|
sw t4, 8176(a0) ;; swap chain-ptr-next to chain-ptr
|
|
sw t1, 128(t2) ;; set spad addr
|
|
sll r0, r0, 0
|
|
sw t3, 48(t2) ;; set chain ptr
|
|
sll r0, r0, 0
|
|
sw r0, 32(t2) ;; other control stuf
|
|
addiu t3, r0, 260
|
|
sw t3, 0(t2) ;; run DMA to spr!
|
|
xori t1, t1, 1360 ;; toggling bank ptr buffer (next spad upload addr)
|
|
sll r0, r0, 0
|
|
or a2, a2, r0 ;; a2 still draw-table index
|
|
|
|
;; loop over corners
|
|
B4:
|
|
L18:
|
|
dsll t2, a2, 1 ;; int16's
|
|
sll r0, r0, 0
|
|
daddu t2, t2, a0 ;; idx * 2 + hfrag_work
|
|
dsll t3, a2, 4 ;; corner_index * 16
|
|
bltz a2, L21 ;; check if draw index is negative, if so don't start next one.
|
|
lh a2, 8456(t2) ;; load next draw
|
|
|
|
B5:
|
|
lui t2, 8192
|
|
lw t4, 8176(a0) ;; t4 = chain-ptr
|
|
andi t7, a2, 31
|
|
lw t5, 8288(a0) ;; t5 - verts
|
|
sra t6, a2, 5
|
|
sll t7, t7, 6
|
|
sll t6, t6, 15
|
|
daddu t5, t7, t5
|
|
or t2, t4, t2
|
|
daddu t4, t5, t6
|
|
|
|
;; patch the chain
|
|
sw t4, 4(t2)
|
|
daddiu t4, t4, 2048
|
|
sw t4, 20(t2)
|
|
daddiu t4, t4, 2048
|
|
sw t4, 36(t2)
|
|
daddiu t4, t4, 2048
|
|
sw t4, 52(t2)
|
|
daddiu t4, t4, 2048
|
|
sw t4, 68(t2)
|
|
daddiu t4, t4, 2048
|
|
sw t4, 84(t2)
|
|
daddiu t4, t4, 2048
|
|
sw t4, 100(t2)
|
|
daddiu t4, t4, 2048
|
|
sw t4, 116(t2)
|
|
daddiu t4, t4, 2048
|
|
sw t4, 132(t2)
|
|
daddiu t4, t4, 2048
|
|
sw t4, 148(t2)
|
|
daddiu t4, t4, 2048
|
|
sw t4, 164(t2)
|
|
daddiu t4, t4, 2048
|
|
sw t4, 180(t2)
|
|
daddiu t4, t4, 2048
|
|
sw t4, 196(t2)
|
|
daddiu t4, t4, 2048
|
|
sw t4, 212(t2)
|
|
daddiu t4, t4, 2048
|
|
sw t4, 228(t2)
|
|
daddiu t4, t4, 2048
|
|
sw t4, 244(t2)
|
|
daddiu t4, t4, 2048
|
|
sw t4, 260(t2)
|
|
sll r0, r0, 0
|
|
|
|
;; wait for spr to to be free
|
|
lw t2, 8192(a0)
|
|
sll r0, r0, 0
|
|
B6:
|
|
L19:
|
|
lw t4, 0(t2)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t4, t4, 256
|
|
sll r0, r0, 0
|
|
beq t4, r0, L20
|
|
sll r0, r0, 0
|
|
|
|
B7:
|
|
sll r0, r0, 0
|
|
lw t4, 8156(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu t4, t4, 1
|
|
sll r0, r0, 0
|
|
sw t4, 8156(a0)
|
|
beq r0, r0, L19
|
|
sll r0, r0, 0
|
|
|
|
B8:
|
|
L20:
|
|
sll r0, r0, 0 ;; swap chain-ptrs
|
|
lw t4, 8176(a0)
|
|
sll r0, r0, 0
|
|
lw t5, 8180(a0)
|
|
sll r0, r0, 0
|
|
sw t4, 8180(a0)
|
|
sll r0, r0, 0
|
|
sw t5, 8176(a0)
|
|
sw t1, 128(t2) ;; start next vetex gather dma
|
|
sll r0, r0, 0
|
|
sw t4, 48(t2)
|
|
sll r0, r0, 0
|
|
sw r0, 32(t2)
|
|
addiu t4, r0, 260
|
|
sw t4, 0(t2)
|
|
xori t1, t1, 1360 ;; swap spad input bank ptr
|
|
beq r0, r0, L23
|
|
sll r0, r0, 0
|
|
;; end next vertex gather dma setup.
|
|
|
|
;; wait for spad to to complete if we're doing the last one.
|
|
B9:
|
|
L21:
|
|
lw t2, 8192(a0)
|
|
sll r0, r0, 0
|
|
B10:
|
|
L22:
|
|
lw t4, 0(t2)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t4, t4, 256
|
|
sll r0, r0, 0
|
|
beq t4, r0, L23
|
|
sll r0, r0, 0
|
|
|
|
B11:
|
|
sll r0, r0, 0
|
|
lw t4, 8156(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu t4, t4, 1
|
|
sll r0, r0, 0
|
|
sw t4, 8156(a0)
|
|
beq r0, r0, L22
|
|
sll r0, r0, 0
|
|
|
|
;; assume we have input data in spad
|
|
B12:
|
|
L23:
|
|
addiu t2, r0, 6 ;; t2 = 6
|
|
lhu t4, 2(t1) ;; t4 = vertex[0,0].packed-index
|
|
daddu t5, t3, a0 ;; preparing to index into work.corners
|
|
lw t3, 8384(a0) ;; t3 = work.poly-near
|
|
dsra t4, t4, 11 ;; t4 = bit11 (unsigned)
|
|
lqc2 vf15, 10512(t5) ;; vf15 = work.corners[this_corner]
|
|
beq t4, r0, L52 ;; skip entirely if bit11.16 is 0
|
|
sll r0, r0, 0
|
|
|
|
B13:
|
|
daddiu t4, a1, -171 ;; t4 = a1 (0) - 171
|
|
sll r0, r0, 0
|
|
blez t4, L26
|
|
sll r0, r0, 0
|
|
|
|
B14:
|
|
lw t4, 8196(a0)
|
|
sll r0, r0, 0
|
|
B15:
|
|
L24: ;; wait for from-spr to finish
|
|
lw t0, 0(t4)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t0, t0, 256
|
|
sll r0, r0, 0
|
|
beq t0, r0, L25
|
|
sll r0, r0, 0
|
|
|
|
B16:
|
|
sll r0, r0, 0
|
|
lw t0, 8160(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu t0, t0, 1
|
|
sll r0, r0, 0
|
|
sw t0, 8160(a0)
|
|
beq r0, r0, L24
|
|
sll r0, r0, 0
|
|
|
|
B17:
|
|
L25: ;; swapping from-spr buffer
|
|
lw t0, 8152(a0)
|
|
sll r0, r0, 0
|
|
sw v1, 128(t4)
|
|
xori v1, v1, 4720
|
|
sw t0, 16(t4)
|
|
sll t5, a1, 4
|
|
addu t5, t0, t5
|
|
or t0, v1, r0
|
|
sw a1, 32(t4)
|
|
addiu a1, r0, 256
|
|
sw a1, 0(t4)
|
|
addiu a1, r0, 0
|
|
sw t5, 8152(a0)
|
|
sll r0, r0, 0
|
|
B18:
|
|
|
|
;; start of actual vertex procssing.
|
|
L26:
|
|
daddiu t4, a3, 9984 ;; t4 = hfrag-cache-line
|
|
addiu t5, r0, 6 ;; t5 = 6
|
|
sll r0, r0, 0
|
|
;; Vertex 0
|
|
lhu t6, 2(t3) ;; t6 = p9[0].index0
|
|
sll r0, r0, 0
|
|
lhu t7, 0(t3) ;; t7 = p9[0].pos (packed u8's)
|
|
daddu t6, t6, t1 ;; t6 = gathered_verts[p9[0].index0] (index0 has the shift applied)
|
|
sll r0, r0, 0
|
|
pextlb t8, r0, t7 ;; expanding the pos (u8's to u16's)
|
|
lhu t7, 2(t6) ;; t7 = t6(the vertex).packed-index
|
|
pextlh t8, r0, t8 ;; expanding the pos (u32's) -> [pos.x, pos.y, 0, 0]
|
|
lhu t6, 0(t6) ;; t6 = t6(the vertex).height
|
|
dsll t8, t8, 12 ;; t8 -> pos to meters (multiply by 4096)
|
|
andi t7, t7, 2047 ;; extract first 11 bits of packed-index
|
|
pexcw t8, t8 ;; t8 = [pos.x * 2048, 0, pos.y * 2048, 0]
|
|
mfc1 r0, f31
|
|
dsll t7, t7, 2 ;; t7 = vert.packed-index.first11 * 4
|
|
qmtc2.i vf1, t8 ;; vf1 = pos
|
|
daddu t7, t7, a3 ;; t7 = spad + 4 * packed-index.first11
|
|
sll t6, t6, 3 ;; t6 = height is multiplied by 8
|
|
vitof0.xyzw vf1, vf1 ;; vf1 pos to float
|
|
mtc1 f0, t6 ;; f0 = t6 height to fpr
|
|
sll r0, r0, 0
|
|
lw t6, 12288(t7) ;; load colors!
|
|
cvt.s.w f0, f0 ;; height to float
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf1, vf1, vf15 ;; vf1 += works.corners[this_corner]
|
|
sll r0, r0, 0
|
|
pextlb t6, r0, t6 ;; colors expand to u16
|
|
mfc1 r0, f31
|
|
pextlh t6, r0, t6 ;; colors expand to u32
|
|
mfc1 r0, f31
|
|
sll r0, r0, 0
|
|
sq t6, 0(t4) ;; stash colors in hfrag-cache-vertex[0]
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 16(t4) ;; stash pos in hfrag-cache-vertex[0]
|
|
sll r0, r0, 0
|
|
swc1 f0, 20(t4) ;; stash y component (height) in hfrag-cache-vertex[0]
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 16(t4) ;; load pos, now containing the height
|
|
|
|
;; camera projection of the vertex
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31 ;; multiply for clipping check
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1 ;; check if in view...
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping ;; check clipping result
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47 ;; mask clip flag for this clip
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 28(t4) ;; stash clip result for later
|
|
sll r0, r0, 0
|
|
|
|
;; Vertex 1
|
|
lhu t6, 10(t3) ;; t6 = p9[1].index0
|
|
sll r0, r0, 0
|
|
lhu t8, 12(t3) ;; t8 = p9[1].index1
|
|
daddu t7, t6, t1 ;; t7 = verts[p9[1].index0] vt0
|
|
lhu t6, 14(t3) ;; t6 = p9[1].index2
|
|
daddu t8, t8, t1 ;; t8 = verts[p9[1].index1] vt1
|
|
lhu t9, 8(t3) ;; t9 = pos
|
|
daddu t6, t6, t1 ;; t6 = verts[p9[1].index2] vt2
|
|
lhu ra, 2(t7) ;; ra = vt0.packed-index
|
|
pextlb t9, r0, t9 ;; pos to u16's
|
|
lhu t7, 0(t7) ;; t7 = vt0.height
|
|
pextlh t9, r0, t9 ;; pos to u32's
|
|
lhu gp, 2(t8) ;; gp = vt1.packed-index
|
|
dsll t9, t9, 12 ;; pos *= 4096
|
|
lhu t8, 0(t8) ;; t8 = vt1.height
|
|
pexcw t9, t9 ;; move pos.y to pos.z
|
|
lhu s5, 2(t6) ;; s5 = vt2.packed-index
|
|
andi ra, ra, 2047 ;; mask packed index to get color indices
|
|
andi gp, gp, 2047
|
|
andi s5, s5, 2047
|
|
dsll s4, ra, 2 ;; shift to load 32-bit rgba's from colors
|
|
dsll gp, gp, 2
|
|
dsll ra, s5, 2
|
|
daddu s4, s4, a3 ;; color addr
|
|
lhu t6, 0(t6) ;; t6 = vt2.height
|
|
sll s5, t7, 3 ;; mult height by 8
|
|
lw t7, 12288(s4) ;; t7 = vt0's color
|
|
daddu gp, gp, a3 ;; color addr
|
|
sq t9, 8080(a0) ;; stash pos in work
|
|
sll t8, t8, 3 ;; mult height by 8
|
|
lw t9, 12288(gp) ;; t9 = vt1's color
|
|
daddu ra, ra, a3 ;; color addr
|
|
sw s5, 8084(a0) ;; store vt0.height * 8 in pos-temp.y
|
|
sll t6, t6, 3 ;; mult height by 8
|
|
lw ra, 12288(ra) ;; ra = vt2's color
|
|
pextlb t7, r0, t7 ;; color to u16's
|
|
lqc2 vf1, 8080(a0) ;; vf1 = load pos-temp with [px_i, vt0.h * 8, pz_i, 0]
|
|
pextlh t7, r0, t7 ;; color to u32's
|
|
sw t8, 8084(a0) ;; store vt1's height in pos-temp
|
|
pextlb t8, r0, t9 ;; color u16's
|
|
qmtc2.i vf4, t7 ;; vf4 = vt0's color
|
|
pextlh t7, r0, t8 ;; t7 = vt1's color
|
|
lqc2 vf2, 8080(a0) ;; vf2 = pos-temp with [px_i, vt1.h * 8, pz_i, 0]
|
|
pextlb t8, r0, ra ;; color to u16's
|
|
qmtc2.i vf5, t7 ;; vf5 = vt1's color
|
|
pextlh t7, r0, t8 ;; vt2's color to u32's
|
|
sw t6, 8084(a0) ;; store vt2's height in pos-temp
|
|
vitof0.xyzw vf4, vf4 ;; vf4 = vt0's color as float
|
|
qmtc2.i vf6, t7 ;; vf6 = vt2's color
|
|
vitof0.xyzw vf5, vf5 ;; vf5 = vt1's color as float
|
|
lqc2 vf3, 8080(a0) ;; vf3 = vt2 pos temp
|
|
|
|
;; vf1,vf2,vf3 - positions; vf4,vf5,vf6 - colors;
|
|
;; convert all to floats
|
|
vitof0.xyzw vf6, vf6
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf1, vf1
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf2, vf2
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf3, vf3
|
|
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf5, vf5, vf6 ;; vf5 = vt1.col + vt2.col
|
|
sll r0, r0, 0
|
|
vadd.xz vf1, vf1, vf15 ;; vf1 = vt0.pos + [cx, 0, cz] < world position of vt0
|
|
sll r0, r0, 0
|
|
vmulaw.xyzw acc, vf27, vf0 ;; acc = cam-pos
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf2, vf2, vf3 ;; vf2 = vt1.pos + vt2.pos
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf5, vf5, vf28 ;; vf5 = 0.5*(vt1.col + vt2.col)
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf24, vf1 ;; camera-rot multiplication...
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf25, vf1 ;; camera-rot multiplication...
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf7, vf26, vf1 ;; vf7 = pos_vt0_rt_camera
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf2, vf2, vf28 ;; vf2 = 0.5*(vt1.pos + vt2.pos)
|
|
sll r0, r0, 0
|
|
vsub.xyzw vf6, vf4, vf5 ;; vf6 = vt0.col - 0.5*(vt1.col + vt2.col)
|
|
sll r0, r0, 0
|
|
vaddz.xyzw vf7, vf13, vf7 ;; vf7 = depth-rt-cam + dists
|
|
sll r0, r0, 0
|
|
vsub.xyz vf3, vf1, vf2 ;; vf3 = corner + vt0.pos - 0.5*(vt1.pos + vt2.pos)
|
|
sll r0, r0, 0
|
|
vmulw.w vf3, vf0, vf0 ;; vf3.w = 1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf7, vf7, vf14 ;; vf7 = (depth-rt-cam + dists)*rdists
|
|
sll r0, r0, 0
|
|
vmini.xyzw vf7, vf7, vf11 ;; clamp dists within 0 to 1
|
|
sll r0, r0, 0
|
|
vmaxx.xyzw vf7, vf7, vf0 ;; clamp dists within 0 to 1
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf5 ;; acc = 0.5*(vt1.col + vt2.col)
|
|
sll r0, r0, 0
|
|
vmaddy.xyzw vf4, vf6, vf7 ;; vf4 = 0.5*(vt1.col + vt2.col) + weight * (vt0.col - 0.5*(vt1.col + vt2.col))
|
|
;; vf4 = weight * vt0 + (1 - weight) * 0.5 * (vt1.col + vt2.col)
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf2
|
|
sll r0, r0, 0
|
|
vmaddy.yw vf1, vf3, vf7
|
|
sll r0, r0, 0
|
|
vftoi0.xyzw vf4, vf4 ;; colors back to int
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 32(t4) ;; store in cache vertex 1
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 48(t4) ;; pos
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 48(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 60(t4) ;; store clip
|
|
sll r0, r0, 0
|
|
|
|
;; Vertex 2
|
|
lhu t6, 18(t3) ;; p9[2].index0
|
|
sll r0, r0, 0
|
|
lhu t7, 16(t3)
|
|
daddu t6, t6, t1
|
|
sll r0, r0, 0
|
|
pextlb t8, r0, t7
|
|
lhu t7, 2(t6)
|
|
pextlh t8, r0, t8
|
|
lhu t6, 0(t6)
|
|
dsll t8, t8, 12
|
|
andi t7, t7, 2047
|
|
pexcw t8, t8
|
|
mfc1 r0, f31
|
|
dsll t7, t7, 2
|
|
qmtc2.i vf1, t8
|
|
daddu t7, t7, a3
|
|
sll t6, t6, 3
|
|
vitof0.xyzw vf1, vf1
|
|
mtc1 f0, t6
|
|
sll r0, r0, 0
|
|
lw t6, 12288(t7)
|
|
cvt.s.w f0, f0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
pextlb t6, r0, t6
|
|
mfc1 r0, f31
|
|
pextlh t6, r0, t6
|
|
mfc1 r0, f31
|
|
sll r0, r0, 0
|
|
sq t6, 64(t4) ;; store in vertex 2 of cache
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 80(t4)
|
|
sll r0, r0, 0
|
|
swc1 f0, 84(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 80(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 92(t4)
|
|
sll r0, r0, 0
|
|
|
|
# Vertex 3
|
|
lhu t6, 26(t3)
|
|
sll r0, r0, 0
|
|
lhu t8, 28(t3)
|
|
daddu t7, t6, t1
|
|
lhu t6, 30(t3)
|
|
daddu t8, t8, t1
|
|
lhu t9, 24(t3)
|
|
daddu t6, t6, t1
|
|
lhu ra, 2(t7)
|
|
pextlb t9, r0, t9
|
|
lhu t7, 0(t7)
|
|
pextlh t9, r0, t9
|
|
lhu gp, 2(t8)
|
|
dsll t9, t9, 12
|
|
lhu t8, 0(t8)
|
|
pexcw t9, t9
|
|
lhu s5, 2(t6)
|
|
andi ra, ra, 2047
|
|
andi gp, gp, 2047
|
|
andi s5, s5, 2047
|
|
dsll s4, ra, 2
|
|
dsll gp, gp, 2
|
|
dsll ra, s5, 2
|
|
daddu s4, s4, a3
|
|
lhu t6, 0(t6)
|
|
sll s5, t7, 3
|
|
lw t7, 12288(s4)
|
|
daddu gp, gp, a3
|
|
sq t9, 8080(a0)
|
|
sll t8, t8, 3
|
|
lw t9, 12288(gp)
|
|
daddu ra, ra, a3
|
|
sw s5, 8084(a0)
|
|
sll t6, t6, 3
|
|
lw ra, 12288(ra)
|
|
pextlb t7, r0, t7
|
|
lqc2 vf1, 8080(a0)
|
|
pextlh t7, r0, t7
|
|
sw t8, 8084(a0)
|
|
pextlb t8, r0, t9
|
|
qmtc2.i vf4, t7
|
|
pextlh t7, r0, t8
|
|
lqc2 vf2, 8080(a0)
|
|
pextlb t8, r0, ra
|
|
qmtc2.i vf5, t7
|
|
pextlh t7, r0, t8
|
|
sw t6, 8084(a0)
|
|
vitof0.xyzw vf4, vf4
|
|
qmtc2.i vf6, t7
|
|
vitof0.xyzw vf5, vf5
|
|
lqc2 vf3, 8080(a0)
|
|
vitof0.xyzw vf6, vf6
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf1, vf1
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf2, vf2
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf3, vf3
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf5, vf5, vf6
|
|
sll r0, r0, 0
|
|
vadd.xz vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
vmulaw.xyzw acc, vf27, vf0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf2, vf2, vf3
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf5, vf5, vf28
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf24, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf25, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf7, vf26, vf1
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf2, vf2, vf28
|
|
sll r0, r0, 0
|
|
vsub.xyzw vf6, vf4, vf5
|
|
sll r0, r0, 0
|
|
vaddz.xyzw vf7, vf13, vf7
|
|
sll r0, r0, 0
|
|
vsub.xyz vf3, vf1, vf2
|
|
sll r0, r0, 0
|
|
vmulw.w vf3, vf0, vf0
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf7, vf7, vf14
|
|
sll r0, r0, 0
|
|
vmini.xyzw vf7, vf7, vf11
|
|
sll r0, r0, 0
|
|
vmaxx.xyzw vf7, vf7, vf0
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf5
|
|
sll r0, r0, 0
|
|
vmaddy.xyzw vf4, vf6, vf7
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf2
|
|
sll r0, r0, 0
|
|
vmaddy.yw vf1, vf3, vf7
|
|
sll r0, r0, 0
|
|
vftoi0.xyzw vf4, vf4
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 96(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 112(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 112(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 124(t4)
|
|
sll r0, r0, 0
|
|
|
|
# Vertex 4
|
|
lhu t6, 34(t3)
|
|
sll r0, r0, 0
|
|
lhu t8, 36(t3)
|
|
daddu t7, t6, t1
|
|
lhu t6, 38(t3)
|
|
daddu t8, t8, t1
|
|
lhu t9, 32(t3)
|
|
daddu t6, t6, t1
|
|
lhu ra, 2(t7)
|
|
pextlb t9, r0, t9
|
|
lhu t7, 0(t7)
|
|
pextlh t9, r0, t9
|
|
lhu gp, 2(t8)
|
|
dsll t9, t9, 12
|
|
lhu t8, 0(t8)
|
|
pexcw t9, t9
|
|
lhu s5, 2(t6)
|
|
andi ra, ra, 2047
|
|
andi gp, gp, 2047
|
|
andi s5, s5, 2047
|
|
dsll s4, ra, 2
|
|
dsll gp, gp, 2
|
|
dsll ra, s5, 2
|
|
daddu s4, s4, a3
|
|
lhu t6, 0(t6)
|
|
sll s5, t7, 3
|
|
lw t7, 12288(s4)
|
|
daddu gp, gp, a3
|
|
sq t9, 8080(a0)
|
|
sll t8, t8, 3
|
|
lw t9, 12288(gp)
|
|
daddu ra, ra, a3
|
|
sw s5, 8084(a0)
|
|
sll t6, t6, 3
|
|
lw ra, 12288(ra)
|
|
pextlb t7, r0, t7
|
|
lqc2 vf1, 8080(a0)
|
|
pextlh t7, r0, t7
|
|
sw t8, 8084(a0)
|
|
pextlb t8, r0, t9
|
|
qmtc2.i vf4, t7
|
|
pextlh t7, r0, t8
|
|
lqc2 vf2, 8080(a0)
|
|
pextlb t8, r0, ra
|
|
qmtc2.i vf5, t7
|
|
pextlh t7, r0, t8
|
|
sw t6, 8084(a0)
|
|
vitof0.xyzw vf4, vf4
|
|
qmtc2.i vf6, t7
|
|
vitof0.xyzw vf5, vf5
|
|
lqc2 vf3, 8080(a0)
|
|
vitof0.xyzw vf6, vf6
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf1, vf1
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf2, vf2
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf3, vf3
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf5, vf5, vf6
|
|
sll r0, r0, 0
|
|
vadd.xz vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
vmulaw.xyzw acc, vf27, vf0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf2, vf2, vf3
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf5, vf5, vf28
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf24, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf25, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf7, vf26, vf1
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf2, vf2, vf28
|
|
sll r0, r0, 0
|
|
vsub.xyzw vf6, vf4, vf5
|
|
sll r0, r0, 0
|
|
vaddz.xyzw vf7, vf13, vf7
|
|
sll r0, r0, 0
|
|
vsub.xyz vf3, vf1, vf2
|
|
sll r0, r0, 0
|
|
vmulw.w vf3, vf0, vf0
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf7, vf7, vf14
|
|
sll r0, r0, 0
|
|
vmini.xyzw vf7, vf7, vf11
|
|
sll r0, r0, 0
|
|
vmaxx.xyzw vf7, vf7, vf0
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf5
|
|
sll r0, r0, 0
|
|
vmaddy.xyzw vf4, vf6, vf7
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf2
|
|
sll r0, r0, 0
|
|
vmaddy.yw vf1, vf3, vf7
|
|
sll r0, r0, 0
|
|
vftoi0.xyzw vf4, vf4
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 128(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 144(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 144(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 156(t4)
|
|
sll r0, r0, 0
|
|
|
|
# Vertex 5
|
|
lhu t6, 42(t3)
|
|
sll r0, r0, 0
|
|
lhu t8, 44(t3)
|
|
daddu t7, t6, t1
|
|
lhu t6, 46(t3)
|
|
daddu t8, t8, t1
|
|
lhu t9, 40(t3)
|
|
daddu t6, t6, t1
|
|
lhu ra, 2(t7)
|
|
pextlb t9, r0, t9
|
|
lhu t7, 0(t7)
|
|
pextlh t9, r0, t9
|
|
lhu gp, 2(t8)
|
|
dsll t9, t9, 12
|
|
lhu t8, 0(t8)
|
|
pexcw t9, t9
|
|
lhu s5, 2(t6)
|
|
andi ra, ra, 2047
|
|
andi gp, gp, 2047
|
|
andi s5, s5, 2047
|
|
dsll s4, ra, 2
|
|
dsll gp, gp, 2
|
|
dsll ra, s5, 2
|
|
daddu s4, s4, a3
|
|
lhu t6, 0(t6)
|
|
sll s5, t7, 3
|
|
lw t7, 12288(s4)
|
|
daddu gp, gp, a3
|
|
sq t9, 8080(a0)
|
|
sll t8, t8, 3
|
|
lw t9, 12288(gp)
|
|
daddu ra, ra, a3
|
|
sw s5, 8084(a0)
|
|
sll t6, t6, 3
|
|
lw ra, 12288(ra)
|
|
pextlb t7, r0, t7
|
|
lqc2 vf1, 8080(a0)
|
|
pextlh t7, r0, t7
|
|
sw t8, 8084(a0)
|
|
pextlb t8, r0, t9
|
|
qmtc2.i vf4, t7
|
|
pextlh t7, r0, t8
|
|
lqc2 vf2, 8080(a0)
|
|
pextlb t8, r0, ra
|
|
qmtc2.i vf5, t7
|
|
pextlh t7, r0, t8
|
|
sw t6, 8084(a0)
|
|
vitof0.xyzw vf4, vf4
|
|
qmtc2.i vf6, t7
|
|
vitof0.xyzw vf5, vf5
|
|
lqc2 vf3, 8080(a0)
|
|
vitof0.xyzw vf6, vf6
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf1, vf1
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf2, vf2
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf3, vf3
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf5, vf5, vf6
|
|
sll r0, r0, 0
|
|
vadd.xz vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
vmulaw.xyzw acc, vf27, vf0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf2, vf2, vf3
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf5, vf5, vf28
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf24, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf25, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf7, vf26, vf1
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf2, vf2, vf28
|
|
sll r0, r0, 0
|
|
vsub.xyzw vf6, vf4, vf5
|
|
sll r0, r0, 0
|
|
vaddz.xyzw vf7, vf13, vf7
|
|
sll r0, r0, 0
|
|
vsub.xyz vf3, vf1, vf2
|
|
sll r0, r0, 0
|
|
vmulw.w vf3, vf0, vf0
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf7, vf7, vf14
|
|
sll r0, r0, 0
|
|
vmini.xyzw vf7, vf7, vf11
|
|
sll r0, r0, 0
|
|
vmaxx.xyzw vf7, vf7, vf0
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf5
|
|
sll r0, r0, 0
|
|
vmaddy.xyzw vf4, vf6, vf7
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf2
|
|
sll r0, r0, 0
|
|
vmaddy.yw vf1, vf3, vf7
|
|
sll r0, r0, 0
|
|
vftoi0.xyzw vf4, vf4
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 160(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 176(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 176(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 188(t4)
|
|
sll r0, r0, 0
|
|
|
|
# Vertex 6
|
|
lhu t6, 50(t3)
|
|
sll r0, r0, 0
|
|
lhu t7, 48(t3)
|
|
daddu t6, t6, t1
|
|
sll r0, r0, 0
|
|
pextlb t8, r0, t7
|
|
lhu t7, 2(t6)
|
|
pextlh t8, r0, t8
|
|
lhu t6, 0(t6)
|
|
dsll t8, t8, 12
|
|
andi t7, t7, 2047
|
|
pexcw t8, t8
|
|
mfc1 r0, f31
|
|
dsll t7, t7, 2
|
|
qmtc2.i vf1, t8
|
|
daddu t7, t7, a3
|
|
sll t6, t6, 3
|
|
vitof0.xyzw vf1, vf1
|
|
mtc1 f0, t6
|
|
sll r0, r0, 0
|
|
lw t6, 12288(t7)
|
|
cvt.s.w f0, f0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
pextlb t6, r0, t6
|
|
mfc1 r0, f31
|
|
pextlh t6, r0, t6
|
|
mfc1 r0, f31
|
|
sll r0, r0, 0
|
|
sq t6, 192(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 208(t4)
|
|
sll r0, r0, 0
|
|
swc1 f0, 212(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 208(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 220(t4)
|
|
sll r0, r0, 0
|
|
|
|
# vertex 7
|
|
lhu t6, 58(t3)
|
|
sll r0, r0, 0
|
|
lhu t8, 60(t3)
|
|
daddu t7, t6, t1
|
|
lhu t6, 62(t3)
|
|
daddu t8, t8, t1
|
|
lhu t9, 56(t3)
|
|
daddu t6, t6, t1
|
|
lhu ra, 2(t7)
|
|
pextlb t9, r0, t9
|
|
lhu t7, 0(t7)
|
|
pextlh t9, r0, t9
|
|
lhu gp, 2(t8)
|
|
dsll t9, t9, 12
|
|
lhu t8, 0(t8)
|
|
pexcw t9, t9
|
|
lhu s5, 2(t6)
|
|
andi ra, ra, 2047
|
|
andi gp, gp, 2047
|
|
andi s5, s5, 2047
|
|
dsll s4, ra, 2
|
|
dsll gp, gp, 2
|
|
dsll ra, s5, 2
|
|
daddu s4, s4, a3
|
|
lhu t6, 0(t6)
|
|
sll s5, t7, 3
|
|
lw t7, 12288(s4)
|
|
daddu gp, gp, a3
|
|
sq t9, 8080(a0)
|
|
sll t8, t8, 3
|
|
lw t9, 12288(gp)
|
|
daddu ra, ra, a3
|
|
sw s5, 8084(a0)
|
|
sll t6, t6, 3
|
|
lw ra, 12288(ra)
|
|
pextlb t7, r0, t7
|
|
lqc2 vf1, 8080(a0)
|
|
pextlh t7, r0, t7
|
|
sw t8, 8084(a0)
|
|
pextlb t8, r0, t9
|
|
qmtc2.i vf4, t7
|
|
pextlh t7, r0, t8
|
|
lqc2 vf2, 8080(a0)
|
|
pextlb t8, r0, ra
|
|
qmtc2.i vf5, t7
|
|
pextlh t7, r0, t8
|
|
sw t6, 8084(a0)
|
|
vitof0.xyzw vf4, vf4
|
|
qmtc2.i vf6, t7
|
|
vitof0.xyzw vf5, vf5
|
|
lqc2 vf3, 8080(a0)
|
|
vitof0.xyzw vf6, vf6
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf1, vf1
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf2, vf2
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf3, vf3
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf5, vf5, vf6
|
|
sll r0, r0, 0
|
|
vadd.xz vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
vmulaw.xyzw acc, vf27, vf0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf2, vf2, vf3
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf5, vf5, vf28
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf24, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf25, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf7, vf26, vf1
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf2, vf2, vf28
|
|
sll r0, r0, 0
|
|
vsub.xyzw vf6, vf4, vf5
|
|
sll r0, r0, 0
|
|
vaddz.xyzw vf7, vf13, vf7
|
|
sll r0, r0, 0
|
|
vsub.xyz vf3, vf1, vf2
|
|
sll r0, r0, 0
|
|
vmulw.w vf3, vf0, vf0
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf7, vf7, vf14
|
|
sll r0, r0, 0
|
|
vmini.xyzw vf7, vf7, vf11
|
|
sll r0, r0, 0
|
|
vmaxx.xyzw vf7, vf7, vf0
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf5
|
|
sll r0, r0, 0
|
|
vmaddy.xyzw vf4, vf6, vf7
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf2
|
|
sll r0, r0, 0
|
|
vmaddy.yw vf1, vf3, vf7
|
|
sll r0, r0, 0
|
|
vftoi0.xyzw vf4, vf4
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 224(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 240(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 240(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 252(t4)
|
|
sll r0, r0, 0
|
|
|
|
# Vertex 8
|
|
lhu t6, 66(t3)
|
|
sll r0, r0, 0
|
|
lhu t7, 64(t3)
|
|
daddu t6, t6, t1
|
|
sll r0, r0, 0
|
|
pextlb t8, r0, t7
|
|
lhu t7, 2(t6)
|
|
pextlh t8, r0, t8
|
|
lhu t6, 0(t6)
|
|
dsll t8, t8, 12
|
|
andi t7, t7, 2047
|
|
pexcw t8, t8
|
|
mfc1 r0, f31
|
|
dsll t7, t7, 2
|
|
qmtc2.i vf1, t8
|
|
daddu t7, t7, a3
|
|
sll t6, t6, 3
|
|
vitof0.xyzw vf1, vf1
|
|
mtc1 f0, t6
|
|
sll r0, r0, 0
|
|
lw t6, 12288(t7)
|
|
cvt.s.w f0, f0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
pextlb t6, r0, t6
|
|
mfc1 r0, f31
|
|
pextlh t6, r0, t6
|
|
mfc1 r0, f31
|
|
sll r0, r0, 0
|
|
sq t6, 256(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 272(t4)
|
|
sll r0, r0, 0
|
|
swc1 f0, 276(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 272(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 284(t4)
|
|
|
|
bgezal r0, L39
|
|
sll r0, r0, 0
|
|
|
|
B19:
|
|
daddiu t3, t3, 72 ;; onto the next poly9
|
|
daddiu t4, t4, 288 ;; onto next cache line
|
|
B20:
|
|
L27:
|
|
daddiu t6, a1, -171
|
|
sll r0, r0, 0
|
|
blez t6, L30 ;; maybe dma sync
|
|
sll r0, r0, 0
|
|
|
|
B21:
|
|
lw t6, 8196(a0)
|
|
sll r0, r0, 0
|
|
B22:
|
|
L28:
|
|
lw t0, 0(t6)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t0, t0, 256
|
|
sll r0, r0, 0
|
|
beq t0, r0, L29
|
|
sll r0, r0, 0
|
|
|
|
B23:
|
|
sll r0, r0, 0
|
|
lw t0, 8160(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu t0, t0, 1
|
|
sll r0, r0, 0
|
|
sw t0, 8160(a0)
|
|
beq r0, r0, L28
|
|
sll r0, r0, 0
|
|
|
|
B24:
|
|
L29:
|
|
lw t0, 8152(a0)
|
|
sll r0, r0, 0
|
|
sw v1, 128(t6)
|
|
xori v1, v1, 4720
|
|
sw t0, 16(t6)
|
|
sll t7, a1, 4
|
|
addu t7, t0, t7
|
|
or t0, v1, r0
|
|
sw a1, 32(t6)
|
|
addiu a1, r0, 256
|
|
sw a1, 0(t6)
|
|
addiu a1, r0, 0
|
|
sw t7, 8152(a0)
|
|
sll r0, r0, 0
|
|
B25:
|
|
L30:
|
|
;; copying shared vertices in cache
|
|
sll r0, r0, 0
|
|
lq t6, -96(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf2, -80(t4)
|
|
sll r0, r0, 0
|
|
sq t6, 0(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf2, 16(t4)
|
|
sll r0, r0, 0
|
|
lq t6, -64(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf2, -48(t4)
|
|
sll r0, r0, 0
|
|
sq t6, 32(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf2, 48(t4)
|
|
sll r0, r0, 0
|
|
lq t6, -32(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf2, -16(t4)
|
|
sll r0, r0, 0
|
|
sq t6, 64(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf2, 80(t4)
|
|
sll r0, r0, 0
|
|
|
|
;; another vertex processing
|
|
;; vertex 0
|
|
lhu t6, 26(t3)
|
|
sll r0, r0, 0
|
|
lhu t8, 28(t3)
|
|
daddu t7, t6, t1
|
|
lhu t6, 30(t3)
|
|
daddu t8, t8, t1
|
|
lhu t9, 24(t3)
|
|
daddu t6, t6, t1
|
|
lhu ra, 2(t7)
|
|
pextlb t9, r0, t9
|
|
lhu t7, 0(t7)
|
|
pextlh t9, r0, t9
|
|
lhu gp, 2(t8)
|
|
dsll t9, t9, 12
|
|
lhu t8, 0(t8)
|
|
pexcw t9, t9
|
|
lhu s5, 2(t6)
|
|
andi ra, ra, 2047
|
|
andi gp, gp, 2047
|
|
andi s5, s5, 2047
|
|
dsll s4, ra, 2
|
|
dsll gp, gp, 2
|
|
dsll ra, s5, 2
|
|
daddu s4, s4, a3
|
|
lhu t6, 0(t6)
|
|
sll s5, t7, 3
|
|
lw t7, 12288(s4)
|
|
daddu gp, gp, a3
|
|
sq t9, 8080(a0)
|
|
sll t8, t8, 3
|
|
lw t9, 12288(gp)
|
|
daddu ra, ra, a3
|
|
sw s5, 8084(a0)
|
|
sll t6, t6, 3
|
|
lw ra, 12288(ra)
|
|
pextlb t7, r0, t7
|
|
lqc2 vf1, 8080(a0)
|
|
pextlh t7, r0, t7
|
|
sw t8, 8084(a0)
|
|
pextlb t8, r0, t9
|
|
qmtc2.i vf4, t7
|
|
pextlh t7, r0, t8
|
|
lqc2 vf2, 8080(a0)
|
|
pextlb t8, r0, ra
|
|
qmtc2.i vf5, t7
|
|
pextlh t7, r0, t8
|
|
sw t6, 8084(a0)
|
|
vitof0.xyzw vf4, vf4
|
|
qmtc2.i vf6, t7
|
|
vitof0.xyzw vf5, vf5
|
|
lqc2 vf3, 8080(a0)
|
|
vitof0.xyzw vf6, vf6
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf1, vf1
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf2, vf2
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf3, vf3
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf5, vf5, vf6
|
|
sll r0, r0, 0
|
|
vadd.xz vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
vmulaw.xyzw acc, vf27, vf0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf2, vf2, vf3
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf5, vf5, vf28
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf24, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf25, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf7, vf26, vf1
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf2, vf2, vf28
|
|
sll r0, r0, 0
|
|
vsub.xyzw vf6, vf4, vf5
|
|
sll r0, r0, 0
|
|
vaddz.xyzw vf7, vf13, vf7
|
|
sll r0, r0, 0
|
|
vsub.xyz vf3, vf1, vf2
|
|
sll r0, r0, 0
|
|
vmulw.w vf3, vf0, vf0
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf7, vf7, vf14
|
|
sll r0, r0, 0
|
|
vmini.xyzw vf7, vf7, vf11
|
|
sll r0, r0, 0
|
|
vmaxx.xyzw vf7, vf7, vf0
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf5
|
|
sll r0, r0, 0
|
|
vmaddy.xyzw vf4, vf6, vf7
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf2
|
|
sll r0, r0, 0
|
|
vmaddy.yw vf1, vf3, vf7
|
|
sll r0, r0, 0
|
|
vftoi0.xyzw vf4, vf4
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 96(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 112(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 112(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 124(t4)
|
|
sll r0, r0, 0
|
|
|
|
# Vertex 1
|
|
lhu t6, 34(t3)
|
|
sll r0, r0, 0
|
|
lhu t8, 36(t3)
|
|
daddu t7, t6, t1
|
|
lhu t6, 38(t3)
|
|
daddu t8, t8, t1
|
|
lhu t9, 32(t3)
|
|
daddu t6, t6, t1
|
|
lhu ra, 2(t7)
|
|
pextlb t9, r0, t9
|
|
lhu t7, 0(t7)
|
|
pextlh t9, r0, t9
|
|
lhu gp, 2(t8)
|
|
dsll t9, t9, 12
|
|
lhu t8, 0(t8)
|
|
pexcw t9, t9
|
|
lhu s5, 2(t6)
|
|
andi ra, ra, 2047
|
|
andi gp, gp, 2047
|
|
andi s5, s5, 2047
|
|
dsll s4, ra, 2
|
|
dsll gp, gp, 2
|
|
dsll ra, s5, 2
|
|
daddu s4, s4, a3
|
|
lhu t6, 0(t6)
|
|
sll s5, t7, 3
|
|
lw t7, 12288(s4)
|
|
daddu gp, gp, a3
|
|
sq t9, 8080(a0)
|
|
sll t8, t8, 3
|
|
lw t9, 12288(gp)
|
|
daddu ra, ra, a3
|
|
sw s5, 8084(a0)
|
|
sll t6, t6, 3
|
|
lw ra, 12288(ra)
|
|
pextlb t7, r0, t7
|
|
lqc2 vf1, 8080(a0)
|
|
pextlh t7, r0, t7
|
|
sw t8, 8084(a0)
|
|
pextlb t8, r0, t9
|
|
qmtc2.i vf4, t7
|
|
pextlh t7, r0, t8
|
|
lqc2 vf2, 8080(a0)
|
|
pextlb t8, r0, ra
|
|
qmtc2.i vf5, t7
|
|
pextlh t7, r0, t8
|
|
sw t6, 8084(a0)
|
|
vitof0.xyzw vf4, vf4
|
|
qmtc2.i vf6, t7
|
|
vitof0.xyzw vf5, vf5
|
|
lqc2 vf3, 8080(a0)
|
|
vitof0.xyzw vf6, vf6
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf1, vf1
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf2, vf2
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf3, vf3
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf5, vf5, vf6
|
|
sll r0, r0, 0
|
|
vadd.xz vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
vmulaw.xyzw acc, vf27, vf0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf2, vf2, vf3
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf5, vf5, vf28
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf24, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf25, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf7, vf26, vf1
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf2, vf2, vf28
|
|
sll r0, r0, 0
|
|
vsub.xyzw vf6, vf4, vf5
|
|
sll r0, r0, 0
|
|
vaddz.xyzw vf7, vf13, vf7
|
|
sll r0, r0, 0
|
|
vsub.xyz vf3, vf1, vf2
|
|
sll r0, r0, 0
|
|
vmulw.w vf3, vf0, vf0
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf7, vf7, vf14
|
|
sll r0, r0, 0
|
|
vmini.xyzw vf7, vf7, vf11
|
|
sll r0, r0, 0
|
|
vmaxx.xyzw vf7, vf7, vf0
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf5
|
|
sll r0, r0, 0
|
|
vmaddy.xyzw vf4, vf6, vf7
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf2
|
|
sll r0, r0, 0
|
|
vmaddy.yw vf1, vf3, vf7
|
|
sll r0, r0, 0
|
|
vftoi0.xyzw vf4, vf4
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 128(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 144(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 144(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 156(t4)
|
|
sll r0, r0, 0
|
|
|
|
;; vertex 2
|
|
lhu t6, 42(t3)
|
|
sll r0, r0, 0
|
|
lhu t8, 44(t3)
|
|
daddu t7, t6, t1
|
|
lhu t6, 46(t3)
|
|
daddu t8, t8, t1
|
|
lhu t9, 40(t3)
|
|
daddu t6, t6, t1
|
|
lhu ra, 2(t7)
|
|
pextlb t9, r0, t9
|
|
lhu t7, 0(t7)
|
|
pextlh t9, r0, t9
|
|
lhu gp, 2(t8)
|
|
dsll t9, t9, 12
|
|
lhu t8, 0(t8)
|
|
pexcw t9, t9
|
|
lhu s5, 2(t6)
|
|
andi ra, ra, 2047
|
|
andi gp, gp, 2047
|
|
andi s5, s5, 2047
|
|
dsll s4, ra, 2
|
|
dsll gp, gp, 2
|
|
dsll ra, s5, 2
|
|
daddu s4, s4, a3
|
|
lhu t6, 0(t6)
|
|
sll s5, t7, 3
|
|
lw t7, 12288(s4)
|
|
daddu gp, gp, a3
|
|
sq t9, 8080(a0)
|
|
sll t8, t8, 3
|
|
lw t9, 12288(gp)
|
|
daddu ra, ra, a3
|
|
sw s5, 8084(a0)
|
|
sll t6, t6, 3
|
|
lw ra, 12288(ra)
|
|
pextlb t7, r0, t7
|
|
lqc2 vf1, 8080(a0)
|
|
pextlh t7, r0, t7
|
|
sw t8, 8084(a0)
|
|
pextlb t8, r0, t9
|
|
qmtc2.i vf4, t7
|
|
pextlh t7, r0, t8
|
|
lqc2 vf2, 8080(a0)
|
|
pextlb t8, r0, ra
|
|
qmtc2.i vf5, t7
|
|
pextlh t7, r0, t8
|
|
sw t6, 8084(a0)
|
|
vitof0.xyzw vf4, vf4
|
|
qmtc2.i vf6, t7
|
|
vitof0.xyzw vf5, vf5
|
|
lqc2 vf3, 8080(a0)
|
|
vitof0.xyzw vf6, vf6
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf1, vf1
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf2, vf2
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf3, vf3
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf5, vf5, vf6
|
|
sll r0, r0, 0
|
|
vadd.xz vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
vmulaw.xyzw acc, vf27, vf0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf2, vf2, vf3
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf5, vf5, vf28
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf24, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf25, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf7, vf26, vf1
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf2, vf2, vf28
|
|
sll r0, r0, 0
|
|
vsub.xyzw vf6, vf4, vf5
|
|
sll r0, r0, 0
|
|
vaddz.xyzw vf7, vf13, vf7
|
|
sll r0, r0, 0
|
|
vsub.xyz vf3, vf1, vf2
|
|
sll r0, r0, 0
|
|
vmulw.w vf3, vf0, vf0
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf7, vf7, vf14
|
|
sll r0, r0, 0
|
|
vmini.xyzw vf7, vf7, vf11
|
|
sll r0, r0, 0
|
|
vmaxx.xyzw vf7, vf7, vf0
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf5
|
|
sll r0, r0, 0
|
|
vmaddy.xyzw vf4, vf6, vf7
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf2
|
|
sll r0, r0, 0
|
|
vmaddy.yw vf1, vf3, vf7
|
|
sll r0, r0, 0
|
|
vftoi0.xyzw vf4, vf4
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 160(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 176(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 176(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 188(t4)
|
|
sll r0, r0, 0
|
|
|
|
;; vertex 3
|
|
lhu t6, 50(t3)
|
|
sll r0, r0, 0
|
|
lhu t7, 48(t3)
|
|
daddu t6, t6, t1
|
|
sll r0, r0, 0
|
|
pextlb t8, r0, t7
|
|
lhu t7, 2(t6)
|
|
pextlh t8, r0, t8
|
|
lhu t6, 0(t6)
|
|
dsll t8, t8, 12
|
|
andi t7, t7, 2047
|
|
pexcw t8, t8
|
|
mfc1 r0, f31
|
|
dsll t7, t7, 2
|
|
qmtc2.i vf1, t8
|
|
daddu t7, t7, a3
|
|
sll t6, t6, 3
|
|
vitof0.xyzw vf1, vf1
|
|
mtc1 f0, t6
|
|
sll r0, r0, 0
|
|
lw t6, 12288(t7)
|
|
cvt.s.w f0, f0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
pextlb t6, r0, t6
|
|
mfc1 r0, f31
|
|
pextlh t6, r0, t6
|
|
mfc1 r0, f31
|
|
sll r0, r0, 0
|
|
sq t6, 192(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 208(t4)
|
|
sll r0, r0, 0
|
|
swc1 f0, 212(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 208(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 220(t4)
|
|
sll r0, r0, 0
|
|
|
|
;; vertex 4
|
|
lhu t6, 58(t3)
|
|
sll r0, r0, 0
|
|
lhu t8, 60(t3)
|
|
daddu t7, t6, t1
|
|
lhu t6, 62(t3)
|
|
daddu t8, t8, t1
|
|
lhu t9, 56(t3)
|
|
daddu t6, t6, t1
|
|
lhu ra, 2(t7)
|
|
pextlb t9, r0, t9
|
|
lhu t7, 0(t7)
|
|
pextlh t9, r0, t9
|
|
lhu gp, 2(t8)
|
|
dsll t9, t9, 12
|
|
lhu t8, 0(t8)
|
|
pexcw t9, t9
|
|
lhu s5, 2(t6)
|
|
andi ra, ra, 2047
|
|
andi gp, gp, 2047
|
|
andi s5, s5, 2047
|
|
dsll s4, ra, 2
|
|
dsll gp, gp, 2
|
|
dsll ra, s5, 2
|
|
daddu s4, s4, a3
|
|
lhu t6, 0(t6)
|
|
sll s5, t7, 3
|
|
lw t7, 12288(s4)
|
|
daddu gp, gp, a3
|
|
sq t9, 8080(a0)
|
|
sll t8, t8, 3
|
|
lw t9, 12288(gp)
|
|
daddu ra, ra, a3
|
|
sw s5, 8084(a0)
|
|
sll t6, t6, 3
|
|
lw ra, 12288(ra)
|
|
pextlb t7, r0, t7
|
|
lqc2 vf1, 8080(a0)
|
|
pextlh t7, r0, t7
|
|
sw t8, 8084(a0)
|
|
pextlb t8, r0, t9
|
|
qmtc2.i vf4, t7
|
|
pextlh t7, r0, t8
|
|
lqc2 vf2, 8080(a0)
|
|
pextlb t8, r0, ra
|
|
qmtc2.i vf5, t7
|
|
pextlh t7, r0, t8
|
|
sw t6, 8084(a0)
|
|
vitof0.xyzw vf4, vf4
|
|
qmtc2.i vf6, t7
|
|
vitof0.xyzw vf5, vf5
|
|
lqc2 vf3, 8080(a0)
|
|
vitof0.xyzw vf6, vf6
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf1, vf1
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf2, vf2
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf3, vf3
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf5, vf5, vf6
|
|
sll r0, r0, 0
|
|
vadd.xz vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
vmulaw.xyzw acc, vf27, vf0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf2, vf2, vf3
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf5, vf5, vf28
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf24, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf25, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf7, vf26, vf1
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf2, vf2, vf28
|
|
sll r0, r0, 0
|
|
vsub.xyzw vf6, vf4, vf5
|
|
sll r0, r0, 0
|
|
vaddz.xyzw vf7, vf13, vf7
|
|
sll r0, r0, 0
|
|
vsub.xyz vf3, vf1, vf2
|
|
sll r0, r0, 0
|
|
vmulw.w vf3, vf0, vf0
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf7, vf7, vf14
|
|
sll r0, r0, 0
|
|
vmini.xyzw vf7, vf7, vf11
|
|
sll r0, r0, 0
|
|
vmaxx.xyzw vf7, vf7, vf0
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf5
|
|
sll r0, r0, 0
|
|
vmaddy.xyzw vf4, vf6, vf7
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf2
|
|
sll r0, r0, 0
|
|
vmaddy.yw vf1, vf3, vf7
|
|
sll r0, r0, 0
|
|
vftoi0.xyzw vf4, vf4
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 224(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 240(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 240(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 252(t4)
|
|
sll r0, r0, 0
|
|
|
|
;; vertex 5
|
|
lhu t6, 66(t3)
|
|
sll r0, r0, 0
|
|
lhu t7, 64(t3)
|
|
daddu t6, t6, t1
|
|
sll r0, r0, 0
|
|
pextlb t8, r0, t7
|
|
lhu t7, 2(t6)
|
|
pextlh t8, r0, t8
|
|
lhu t6, 0(t6)
|
|
dsll t8, t8, 12
|
|
andi t7, t7, 2047
|
|
pexcw t8, t8
|
|
mfc1 r0, f31
|
|
dsll t7, t7, 2
|
|
qmtc2.i vf1, t8
|
|
daddu t7, t7, a3
|
|
sll t6, t6, 3
|
|
vitof0.xyzw vf1, vf1
|
|
mtc1 f0, t6
|
|
sll r0, r0, 0
|
|
lw t6, 12288(t7)
|
|
cvt.s.w f0, f0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
pextlb t6, r0, t6
|
|
mfc1 r0, f31
|
|
pextlh t6, r0, t6
|
|
mfc1 r0, f31
|
|
sll r0, r0, 0
|
|
sq t6, 256(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 272(t4)
|
|
sll r0, r0, 0
|
|
swc1 f0, 276(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 272(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 284(t4)
|
|
bgezal r0, L39
|
|
sll r0, r0, 0
|
|
|
|
B26:
|
|
daddiu t3, t3, 72
|
|
daddiu t4, t4, 288
|
|
bgtz t5, L27 ;; loop over 6 'inner' poly9's
|
|
daddiu t5, t5, -1
|
|
|
|
B27:
|
|
L31:
|
|
daddiu t4, a1, -171
|
|
sll r0, r0, 0
|
|
blez t4, L34 ;; optional dma sync
|
|
sll r0, r0, 0
|
|
|
|
B28:
|
|
lw t4, 8196(a0)
|
|
sll r0, r0, 0
|
|
B29:
|
|
L32:
|
|
lw t0, 0(t4)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t0, t0, 256
|
|
sll r0, r0, 0
|
|
beq t0, r0, L33
|
|
sll r0, r0, 0
|
|
|
|
B30:
|
|
sll r0, r0, 0
|
|
lw t0, 8160(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu t0, t0, 1
|
|
sll r0, r0, 0
|
|
sw t0, 8160(a0)
|
|
beq r0, r0, L32
|
|
sll r0, r0, 0
|
|
|
|
B31:
|
|
L33:
|
|
lw t0, 8152(a0)
|
|
sll r0, r0, 0
|
|
sw v1, 128(t4)
|
|
xori v1, v1, 4720
|
|
sw t0, 16(t4)
|
|
sll t5, a1, 4
|
|
addu t5, t0, t5
|
|
or t0, v1, r0
|
|
sw a1, 32(t4)
|
|
addiu a1, r0, 256
|
|
sw a1, 0(t4)
|
|
addiu a1, r0, 0
|
|
sw t5, 8152(a0)
|
|
sll r0, r0, 0
|
|
B32:
|
|
L34: ;; last poly9 in the row??
|
|
daddiu t4, a3, 9984 ;; reset cache to the beginning
|
|
addiu t5, r0, 6
|
|
sll r0, r0, 0
|
|
lq t6, 64(t4) ;; swap 2 -> 0
|
|
sll r0, r0, 0
|
|
lqc2 vf2, 80(t4)
|
|
sll r0, r0, 0
|
|
sq t6, 0(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf2, 16(t4)
|
|
sll r0, r0, 0
|
|
|
|
;; vertex 1
|
|
lhu t6, 10(t3)
|
|
sll r0, r0, 0
|
|
lhu t8, 12(t3)
|
|
daddu t7, t6, t1
|
|
lhu t6, 14(t3)
|
|
daddu t8, t8, t1
|
|
lhu t9, 8(t3)
|
|
daddu t6, t6, t1
|
|
lhu ra, 2(t7)
|
|
pextlb t9, r0, t9
|
|
lhu t7, 0(t7)
|
|
pextlh t9, r0, t9
|
|
lhu gp, 2(t8)
|
|
dsll t9, t9, 12
|
|
lhu t8, 0(t8)
|
|
pexcw t9, t9
|
|
lhu s5, 2(t6)
|
|
andi ra, ra, 2047
|
|
andi gp, gp, 2047
|
|
andi s5, s5, 2047
|
|
dsll s4, ra, 2
|
|
dsll gp, gp, 2
|
|
dsll ra, s5, 2
|
|
daddu s4, s4, a3
|
|
lhu t6, 0(t6)
|
|
sll s5, t7, 3
|
|
lw t7, 12288(s4)
|
|
daddu gp, gp, a3
|
|
sq t9, 8080(a0)
|
|
sll t8, t8, 3
|
|
lw t9, 12288(gp)
|
|
daddu ra, ra, a3
|
|
sw s5, 8084(a0)
|
|
sll t6, t6, 3
|
|
lw ra, 12288(ra)
|
|
pextlb t7, r0, t7
|
|
lqc2 vf1, 8080(a0)
|
|
pextlh t7, r0, t7
|
|
sw t8, 8084(a0)
|
|
pextlb t8, r0, t9
|
|
qmtc2.i vf4, t7
|
|
pextlh t7, r0, t8
|
|
lqc2 vf2, 8080(a0)
|
|
pextlb t8, r0, ra
|
|
qmtc2.i vf5, t7
|
|
pextlh t7, r0, t8
|
|
sw t6, 8084(a0)
|
|
vitof0.xyzw vf4, vf4
|
|
qmtc2.i vf6, t7
|
|
vitof0.xyzw vf5, vf5
|
|
lqc2 vf3, 8080(a0)
|
|
vitof0.xyzw vf6, vf6
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf1, vf1
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf2, vf2
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf3, vf3
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf5, vf5, vf6
|
|
sll r0, r0, 0
|
|
vadd.xz vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
vmulaw.xyzw acc, vf27, vf0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf2, vf2, vf3
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf5, vf5, vf28
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf24, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf25, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf7, vf26, vf1
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf2, vf2, vf28
|
|
sll r0, r0, 0
|
|
vsub.xyzw vf6, vf4, vf5
|
|
sll r0, r0, 0
|
|
vaddz.xyzw vf7, vf13, vf7
|
|
sll r0, r0, 0
|
|
vsub.xyz vf3, vf1, vf2
|
|
sll r0, r0, 0
|
|
vmulw.w vf3, vf0, vf0
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf7, vf7, vf14
|
|
sll r0, r0, 0
|
|
vmini.xyzw vf7, vf7, vf11
|
|
sll r0, r0, 0
|
|
vmaxx.xyzw vf7, vf7, vf0
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf5
|
|
sll r0, r0, 0
|
|
vmaddy.xyzw vf4, vf6, vf7
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf2
|
|
sll r0, r0, 0
|
|
vmaddy.yw vf1, vf3, vf7
|
|
sll r0, r0, 0
|
|
vftoi0.xyzw vf4, vf4
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 32(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 48(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 48(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 60(t4)
|
|
sll r0, r0, 0
|
|
|
|
;; vertex 2
|
|
lhu t6, 18(t3)
|
|
sll r0, r0, 0
|
|
lhu t7, 16(t3)
|
|
daddu t6, t6, t1
|
|
sll r0, r0, 0
|
|
pextlb t8, r0, t7
|
|
lhu t7, 2(t6)
|
|
pextlh t8, r0, t8
|
|
lhu t6, 0(t6)
|
|
dsll t8, t8, 12
|
|
andi t7, t7, 2047
|
|
pexcw t8, t8
|
|
mfc1 r0, f31
|
|
dsll t7, t7, 2
|
|
qmtc2.i vf1, t8
|
|
daddu t7, t7, a3
|
|
sll t6, t6, 3
|
|
vitof0.xyzw vf1, vf1
|
|
mtc1 f0, t6
|
|
sll r0, r0, 0
|
|
lw t6, 12288(t7)
|
|
cvt.s.w f0, f0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
pextlb t6, r0, t6
|
|
mfc1 r0, f31
|
|
pextlh t6, r0, t6
|
|
mfc1 r0, f31
|
|
sll r0, r0, 0
|
|
sq t6, 64(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 80(t4)
|
|
sll r0, r0, 0
|
|
swc1 f0, 84(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 80(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 92(t4)
|
|
|
|
;; copy cached vertex 5 -> 3
|
|
sll r0, r0, 0
|
|
lq t6, 160(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf2, 176(t4)
|
|
sll r0, r0, 0
|
|
sq t6, 96(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf2, 112(t4)
|
|
sll r0, r0, 0
|
|
|
|
;; vertex 4
|
|
lhu t6, 34(t3)
|
|
sll r0, r0, 0
|
|
lhu t8, 36(t3)
|
|
daddu t7, t6, t1
|
|
lhu t6, 38(t3)
|
|
daddu t8, t8, t1
|
|
lhu t9, 32(t3)
|
|
daddu t6, t6, t1
|
|
lhu ra, 2(t7)
|
|
pextlb t9, r0, t9
|
|
lhu t7, 0(t7)
|
|
pextlh t9, r0, t9
|
|
lhu gp, 2(t8)
|
|
dsll t9, t9, 12
|
|
lhu t8, 0(t8)
|
|
pexcw t9, t9
|
|
lhu s5, 2(t6)
|
|
andi ra, ra, 2047
|
|
andi gp, gp, 2047
|
|
andi s5, s5, 2047
|
|
dsll s4, ra, 2
|
|
dsll gp, gp, 2
|
|
dsll ra, s5, 2
|
|
daddu s4, s4, a3
|
|
lhu t6, 0(t6)
|
|
sll s5, t7, 3
|
|
lw t7, 12288(s4)
|
|
daddu gp, gp, a3
|
|
sq t9, 8080(a0)
|
|
sll t8, t8, 3
|
|
lw t9, 12288(gp)
|
|
daddu ra, ra, a3
|
|
sw s5, 8084(a0)
|
|
sll t6, t6, 3
|
|
lw ra, 12288(ra)
|
|
pextlb t7, r0, t7
|
|
lqc2 vf1, 8080(a0)
|
|
pextlh t7, r0, t7
|
|
sw t8, 8084(a0)
|
|
pextlb t8, r0, t9
|
|
qmtc2.i vf4, t7
|
|
pextlh t7, r0, t8
|
|
lqc2 vf2, 8080(a0)
|
|
pextlb t8, r0, ra
|
|
qmtc2.i vf5, t7
|
|
pextlh t7, r0, t8
|
|
sw t6, 8084(a0)
|
|
vitof0.xyzw vf4, vf4
|
|
qmtc2.i vf6, t7
|
|
vitof0.xyzw vf5, vf5
|
|
lqc2 vf3, 8080(a0)
|
|
vitof0.xyzw vf6, vf6
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf1, vf1
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf2, vf2
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf3, vf3
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf5, vf5, vf6
|
|
sll r0, r0, 0
|
|
vadd.xz vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
vmulaw.xyzw acc, vf27, vf0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf2, vf2, vf3
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf5, vf5, vf28
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf24, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf25, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf7, vf26, vf1
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf2, vf2, vf28
|
|
sll r0, r0, 0
|
|
vsub.xyzw vf6, vf4, vf5
|
|
sll r0, r0, 0
|
|
vaddz.xyzw vf7, vf13, vf7
|
|
sll r0, r0, 0
|
|
vsub.xyz vf3, vf1, vf2
|
|
sll r0, r0, 0
|
|
vmulw.w vf3, vf0, vf0
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf7, vf7, vf14
|
|
sll r0, r0, 0
|
|
vmini.xyzw vf7, vf7, vf11
|
|
sll r0, r0, 0
|
|
vmaxx.xyzw vf7, vf7, vf0
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf5
|
|
sll r0, r0, 0
|
|
vmaddy.xyzw vf4, vf6, vf7
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf2
|
|
sll r0, r0, 0
|
|
vmaddy.yw vf1, vf3, vf7
|
|
sll r0, r0, 0
|
|
vftoi0.xyzw vf4, vf4
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 128(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 144(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 144(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 156(t4)
|
|
sll r0, r0, 0
|
|
|
|
;; vertex 5
|
|
lhu t6, 42(t3)
|
|
sll r0, r0, 0
|
|
lhu t8, 44(t3)
|
|
daddu t7, t6, t1
|
|
lhu t6, 46(t3)
|
|
daddu t8, t8, t1
|
|
lhu t9, 40(t3)
|
|
daddu t6, t6, t1
|
|
lhu ra, 2(t7)
|
|
pextlb t9, r0, t9
|
|
lhu t7, 0(t7)
|
|
pextlh t9, r0, t9
|
|
lhu gp, 2(t8)
|
|
dsll t9, t9, 12
|
|
lhu t8, 0(t8)
|
|
pexcw t9, t9
|
|
lhu s5, 2(t6)
|
|
andi ra, ra, 2047
|
|
andi gp, gp, 2047
|
|
andi s5, s5, 2047
|
|
dsll s4, ra, 2
|
|
dsll gp, gp, 2
|
|
dsll ra, s5, 2
|
|
daddu s4, s4, a3
|
|
lhu t6, 0(t6)
|
|
sll s5, t7, 3
|
|
lw t7, 12288(s4)
|
|
daddu gp, gp, a3
|
|
sq t9, 8080(a0)
|
|
sll t8, t8, 3
|
|
lw t9, 12288(gp)
|
|
daddu ra, ra, a3
|
|
sw s5, 8084(a0)
|
|
sll t6, t6, 3
|
|
lw ra, 12288(ra)
|
|
pextlb t7, r0, t7
|
|
lqc2 vf1, 8080(a0)
|
|
pextlh t7, r0, t7
|
|
sw t8, 8084(a0)
|
|
pextlb t8, r0, t9
|
|
qmtc2.i vf4, t7
|
|
pextlh t7, r0, t8
|
|
lqc2 vf2, 8080(a0)
|
|
pextlb t8, r0, ra
|
|
qmtc2.i vf5, t7
|
|
pextlh t7, r0, t8
|
|
sw t6, 8084(a0)
|
|
vitof0.xyzw vf4, vf4
|
|
qmtc2.i vf6, t7
|
|
vitof0.xyzw vf5, vf5
|
|
lqc2 vf3, 8080(a0)
|
|
vitof0.xyzw vf6, vf6
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf1, vf1
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf2, vf2
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf3, vf3
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf5, vf5, vf6
|
|
sll r0, r0, 0
|
|
vadd.xz vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
vmulaw.xyzw acc, vf27, vf0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf2, vf2, vf3
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf5, vf5, vf28
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf24, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf25, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf7, vf26, vf1
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf2, vf2, vf28
|
|
sll r0, r0, 0
|
|
vsub.xyzw vf6, vf4, vf5
|
|
sll r0, r0, 0
|
|
vaddz.xyzw vf7, vf13, vf7
|
|
sll r0, r0, 0
|
|
vsub.xyz vf3, vf1, vf2
|
|
sll r0, r0, 0
|
|
vmulw.w vf3, vf0, vf0
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf7, vf7, vf14
|
|
sll r0, r0, 0
|
|
vmini.xyzw vf7, vf7, vf11
|
|
sll r0, r0, 0
|
|
vmaxx.xyzw vf7, vf7, vf0
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf5
|
|
sll r0, r0, 0
|
|
vmaddy.xyzw vf4, vf6, vf7
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf2
|
|
sll r0, r0, 0
|
|
vmaddy.yw vf1, vf3, vf7
|
|
sll r0, r0, 0
|
|
vftoi0.xyzw vf4, vf4
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 160(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 176(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 176(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 188(t4)
|
|
sll r0, r0, 0
|
|
|
|
;; copy 8 -> 6
|
|
lq t6, 256(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf2, 272(t4)
|
|
sll r0, r0, 0
|
|
sq t6, 192(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf2, 208(t4)
|
|
sll r0, r0, 0
|
|
|
|
;; vertex 7
|
|
lhu t6, 58(t3)
|
|
sll r0, r0, 0
|
|
lhu t8, 60(t3)
|
|
daddu t7, t6, t1
|
|
lhu t6, 62(t3)
|
|
daddu t8, t8, t1
|
|
lhu t9, 56(t3)
|
|
daddu t6, t6, t1
|
|
lhu ra, 2(t7)
|
|
pextlb t9, r0, t9
|
|
lhu t7, 0(t7)
|
|
pextlh t9, r0, t9
|
|
lhu gp, 2(t8)
|
|
dsll t9, t9, 12
|
|
lhu t8, 0(t8)
|
|
pexcw t9, t9
|
|
lhu s5, 2(t6)
|
|
andi ra, ra, 2047
|
|
andi gp, gp, 2047
|
|
andi s5, s5, 2047
|
|
dsll s4, ra, 2
|
|
dsll gp, gp, 2
|
|
dsll ra, s5, 2
|
|
daddu s4, s4, a3
|
|
lhu t6, 0(t6)
|
|
sll s5, t7, 3
|
|
lw t7, 12288(s4)
|
|
daddu gp, gp, a3
|
|
sq t9, 8080(a0)
|
|
sll t8, t8, 3
|
|
lw t9, 12288(gp)
|
|
daddu ra, ra, a3
|
|
sw s5, 8084(a0)
|
|
sll t6, t6, 3
|
|
lw ra, 12288(ra)
|
|
pextlb t7, r0, t7
|
|
lqc2 vf1, 8080(a0)
|
|
pextlh t7, r0, t7
|
|
sw t8, 8084(a0)
|
|
pextlb t8, r0, t9
|
|
qmtc2.i vf4, t7
|
|
pextlh t7, r0, t8
|
|
lqc2 vf2, 8080(a0)
|
|
pextlb t8, r0, ra
|
|
qmtc2.i vf5, t7
|
|
pextlh t7, r0, t8
|
|
sw t6, 8084(a0)
|
|
vitof0.xyzw vf4, vf4
|
|
qmtc2.i vf6, t7
|
|
vitof0.xyzw vf5, vf5
|
|
lqc2 vf3, 8080(a0)
|
|
vitof0.xyzw vf6, vf6
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf1, vf1
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf2, vf2
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf3, vf3
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf5, vf5, vf6
|
|
sll r0, r0, 0
|
|
vadd.xz vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
vmulaw.xyzw acc, vf27, vf0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf2, vf2, vf3
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf5, vf5, vf28
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf24, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf25, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf7, vf26, vf1
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf2, vf2, vf28
|
|
sll r0, r0, 0
|
|
vsub.xyzw vf6, vf4, vf5
|
|
sll r0, r0, 0
|
|
vaddz.xyzw vf7, vf13, vf7
|
|
sll r0, r0, 0
|
|
vsub.xyz vf3, vf1, vf2
|
|
sll r0, r0, 0
|
|
vmulw.w vf3, vf0, vf0
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf7, vf7, vf14
|
|
sll r0, r0, 0
|
|
vmini.xyzw vf7, vf7, vf11
|
|
sll r0, r0, 0
|
|
vmaxx.xyzw vf7, vf7, vf0
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf5
|
|
sll r0, r0, 0
|
|
vmaddy.xyzw vf4, vf6, vf7
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf2
|
|
sll r0, r0, 0
|
|
vmaddy.yw vf1, vf3, vf7
|
|
sll r0, r0, 0
|
|
vftoi0.xyzw vf4, vf4
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 224(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 240(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 240(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 252(t4)
|
|
sll r0, r0, 0
|
|
|
|
;; vertex 8
|
|
lhu t6, 66(t3)
|
|
sll r0, r0, 0
|
|
lhu t7, 64(t3)
|
|
daddu t6, t6, t1
|
|
sll r0, r0, 0
|
|
pextlb t8, r0, t7
|
|
lhu t7, 2(t6)
|
|
pextlh t8, r0, t8
|
|
lhu t6, 0(t6)
|
|
dsll t8, t8, 12
|
|
andi t7, t7, 2047
|
|
pexcw t8, t8
|
|
mfc1 r0, f31
|
|
dsll t7, t7, 2
|
|
qmtc2.i vf1, t8
|
|
daddu t7, t7, a3
|
|
sll t6, t6, 3
|
|
vitof0.xyzw vf1, vf1
|
|
mtc1 f0, t6
|
|
sll r0, r0, 0
|
|
lw t6, 12288(t7)
|
|
cvt.s.w f0, f0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
pextlb t6, r0, t6
|
|
mfc1 r0, f31
|
|
pextlh t6, r0, t6
|
|
mfc1 r0, f31
|
|
sll r0, r0, 0
|
|
sq t6, 256(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 272(t4)
|
|
sll r0, r0, 0
|
|
swc1 f0, 276(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 272(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 284(t4)
|
|
bgezal r0, L39
|
|
sll r0, r0, 0
|
|
|
|
B33:
|
|
daddiu t3, t3, 72 ;; advance cache and poly table
|
|
daddiu t4, t4, 288
|
|
B34:
|
|
L35:
|
|
daddiu t6, a1, -171
|
|
sll r0, r0, 0
|
|
blez t6, L38 ;; maybe dma sync
|
|
sll r0, r0, 0
|
|
|
|
B35:
|
|
lw t6, 8196(a0)
|
|
sll r0, r0, 0
|
|
B36:
|
|
L36:
|
|
lw t0, 0(t6)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t0, t0, 256
|
|
sll r0, r0, 0
|
|
beq t0, r0, L37
|
|
sll r0, r0, 0
|
|
|
|
B37:
|
|
sll r0, r0, 0
|
|
lw t0, 8160(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu t0, t0, 1
|
|
sll r0, r0, 0
|
|
sw t0, 8160(a0)
|
|
beq r0, r0, L36
|
|
sll r0, r0, 0
|
|
|
|
B38:
|
|
L37:
|
|
lw t0, 8152(a0)
|
|
sll r0, r0, 0
|
|
sw v1, 128(t6)
|
|
xori v1, v1, 4720
|
|
sw t0, 16(t6)
|
|
sll t7, a1, 4
|
|
addu t7, t0, t7
|
|
or t0, v1, r0
|
|
sw a1, 32(t6)
|
|
addiu a1, r0, 256
|
|
sw a1, 0(t6)
|
|
addiu a1, r0, 0
|
|
sw t7, 8152(a0)
|
|
sll r0, r0, 0
|
|
B39:
|
|
L38: ;; cache copy "down"
|
|
sll r0, r0, 0
|
|
lq t6, -96(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf2, -80(t4)
|
|
sll r0, r0, 0
|
|
sq t6, 0(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf2, 16(t4)
|
|
sll r0, r0, 0
|
|
lq t6, -64(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf2, -48(t4)
|
|
sll r0, r0, 0
|
|
sq t6, 32(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf2, 48(t4)
|
|
sll r0, r0, 0
|
|
lq t6, -32(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf2, -16(t4)
|
|
sll r0, r0, 0
|
|
sq t6, 64(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf2, 80(t4)
|
|
sll r0, r0, 0
|
|
lq t6, 160(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf2, 176(t4)
|
|
sll r0, r0, 0
|
|
sq t6, 96(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf2, 112(t4)
|
|
sll r0, r0, 0
|
|
lhu t6, 34(t3)
|
|
sll r0, r0, 0
|
|
|
|
;; inner 0
|
|
lhu t8, 36(t3)
|
|
daddu t7, t6, t1
|
|
lhu t6, 38(t3)
|
|
daddu t8, t8, t1
|
|
lhu t9, 32(t3)
|
|
daddu t6, t6, t1
|
|
lhu ra, 2(t7)
|
|
pextlb t9, r0, t9
|
|
lhu t7, 0(t7)
|
|
pextlh t9, r0, t9
|
|
lhu gp, 2(t8)
|
|
dsll t9, t9, 12
|
|
lhu t8, 0(t8)
|
|
pexcw t9, t9
|
|
lhu s5, 2(t6)
|
|
andi ra, ra, 2047
|
|
andi gp, gp, 2047
|
|
andi s5, s5, 2047
|
|
dsll s4, ra, 2
|
|
dsll gp, gp, 2
|
|
dsll ra, s5, 2
|
|
daddu s4, s4, a3
|
|
lhu t6, 0(t6)
|
|
sll s5, t7, 3
|
|
lw t7, 12288(s4)
|
|
daddu gp, gp, a3
|
|
sq t9, 8080(a0)
|
|
sll t8, t8, 3
|
|
lw t9, 12288(gp)
|
|
daddu ra, ra, a3
|
|
sw s5, 8084(a0)
|
|
sll t6, t6, 3
|
|
lw ra, 12288(ra)
|
|
pextlb t7, r0, t7
|
|
lqc2 vf1, 8080(a0)
|
|
pextlh t7, r0, t7
|
|
sw t8, 8084(a0)
|
|
pextlb t8, r0, t9
|
|
qmtc2.i vf4, t7
|
|
pextlh t7, r0, t8
|
|
lqc2 vf2, 8080(a0)
|
|
pextlb t8, r0, ra
|
|
qmtc2.i vf5, t7
|
|
pextlh t7, r0, t8
|
|
sw t6, 8084(a0)
|
|
vitof0.xyzw vf4, vf4
|
|
qmtc2.i vf6, t7
|
|
vitof0.xyzw vf5, vf5
|
|
lqc2 vf3, 8080(a0)
|
|
vitof0.xyzw vf6, vf6
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf1, vf1
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf2, vf2
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf3, vf3
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf5, vf5, vf6
|
|
sll r0, r0, 0
|
|
vadd.xz vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
vmulaw.xyzw acc, vf27, vf0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf2, vf2, vf3
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf5, vf5, vf28
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf24, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf25, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf7, vf26, vf1
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf2, vf2, vf28
|
|
sll r0, r0, 0
|
|
vsub.xyzw vf6, vf4, vf5
|
|
sll r0, r0, 0
|
|
vaddz.xyzw vf7, vf13, vf7
|
|
sll r0, r0, 0
|
|
vsub.xyz vf3, vf1, vf2
|
|
sll r0, r0, 0
|
|
vmulw.w vf3, vf0, vf0
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf7, vf7, vf14
|
|
sll r0, r0, 0
|
|
vmini.xyzw vf7, vf7, vf11
|
|
sll r0, r0, 0
|
|
vmaxx.xyzw vf7, vf7, vf0
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf5
|
|
sll r0, r0, 0
|
|
vmaddy.xyzw vf4, vf6, vf7
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf2
|
|
sll r0, r0, 0
|
|
vmaddy.yw vf1, vf3, vf7
|
|
sll r0, r0, 0
|
|
vftoi0.xyzw vf4, vf4
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 128(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 144(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 144(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 156(t4)
|
|
sll r0, r0, 0
|
|
|
|
;; inner 1
|
|
lhu t6, 42(t3)
|
|
sll r0, r0, 0
|
|
lhu t8, 44(t3)
|
|
daddu t7, t6, t1
|
|
lhu t6, 46(t3)
|
|
daddu t8, t8, t1
|
|
lhu t9, 40(t3)
|
|
daddu t6, t6, t1
|
|
lhu ra, 2(t7)
|
|
pextlb t9, r0, t9
|
|
lhu t7, 0(t7)
|
|
pextlh t9, r0, t9
|
|
lhu gp, 2(t8)
|
|
dsll t9, t9, 12
|
|
lhu t8, 0(t8)
|
|
pexcw t9, t9
|
|
lhu s5, 2(t6)
|
|
andi ra, ra, 2047
|
|
andi gp, gp, 2047
|
|
andi s5, s5, 2047
|
|
dsll s4, ra, 2
|
|
dsll gp, gp, 2
|
|
dsll ra, s5, 2
|
|
daddu s4, s4, a3
|
|
lhu t6, 0(t6)
|
|
sll s5, t7, 3
|
|
lw t7, 12288(s4)
|
|
daddu gp, gp, a3
|
|
sq t9, 8080(a0)
|
|
sll t8, t8, 3
|
|
lw t9, 12288(gp)
|
|
daddu ra, ra, a3
|
|
sw s5, 8084(a0)
|
|
sll t6, t6, 3
|
|
lw ra, 12288(ra)
|
|
pextlb t7, r0, t7
|
|
lqc2 vf1, 8080(a0)
|
|
pextlh t7, r0, t7
|
|
sw t8, 8084(a0)
|
|
pextlb t8, r0, t9
|
|
qmtc2.i vf4, t7
|
|
pextlh t7, r0, t8
|
|
lqc2 vf2, 8080(a0)
|
|
pextlb t8, r0, ra
|
|
qmtc2.i vf5, t7
|
|
pextlh t7, r0, t8
|
|
sw t6, 8084(a0)
|
|
vitof0.xyzw vf4, vf4
|
|
qmtc2.i vf6, t7
|
|
vitof0.xyzw vf5, vf5
|
|
lqc2 vf3, 8080(a0)
|
|
vitof0.xyzw vf6, vf6
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf1, vf1
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf2, vf2
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf3, vf3
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf5, vf5, vf6
|
|
sll r0, r0, 0
|
|
vadd.xz vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
vmulaw.xyzw acc, vf27, vf0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf2, vf2, vf3
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf5, vf5, vf28
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf24, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf25, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf7, vf26, vf1
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf2, vf2, vf28
|
|
sll r0, r0, 0
|
|
vsub.xyzw vf6, vf4, vf5
|
|
sll r0, r0, 0
|
|
vaddz.xyzw vf7, vf13, vf7
|
|
sll r0, r0, 0
|
|
vsub.xyz vf3, vf1, vf2
|
|
sll r0, r0, 0
|
|
vmulw.w vf3, vf0, vf0
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf7, vf7, vf14
|
|
sll r0, r0, 0
|
|
vmini.xyzw vf7, vf7, vf11
|
|
sll r0, r0, 0
|
|
vmaxx.xyzw vf7, vf7, vf0
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf5
|
|
sll r0, r0, 0
|
|
vmaddy.xyzw vf4, vf6, vf7
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf2
|
|
sll r0, r0, 0
|
|
vmaddy.yw vf1, vf3, vf7
|
|
sll r0, r0, 0
|
|
vftoi0.xyzw vf4, vf4
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 160(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 176(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 176(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 188(t4)
|
|
sll r0, r0, 0
|
|
|
|
lq t6, 256(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf2, 272(t4)
|
|
sll r0, r0, 0
|
|
sq t6, 192(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf2, 208(t4)
|
|
sll r0, r0, 0
|
|
|
|
;; inner 2
|
|
lhu t6, 58(t3)
|
|
sll r0, r0, 0
|
|
lhu t8, 60(t3)
|
|
daddu t7, t6, t1
|
|
lhu t6, 62(t3)
|
|
daddu t8, t8, t1
|
|
lhu t9, 56(t3)
|
|
daddu t6, t6, t1
|
|
lhu ra, 2(t7)
|
|
pextlb t9, r0, t9
|
|
lhu t7, 0(t7)
|
|
pextlh t9, r0, t9
|
|
lhu gp, 2(t8)
|
|
dsll t9, t9, 12
|
|
lhu t8, 0(t8)
|
|
pexcw t9, t9
|
|
lhu s5, 2(t6)
|
|
andi ra, ra, 2047
|
|
andi gp, gp, 2047
|
|
andi s5, s5, 2047
|
|
dsll s4, ra, 2
|
|
dsll gp, gp, 2
|
|
dsll ra, s5, 2
|
|
daddu s4, s4, a3
|
|
lhu t6, 0(t6)
|
|
sll s5, t7, 3
|
|
lw t7, 12288(s4)
|
|
daddu gp, gp, a3
|
|
sq t9, 8080(a0)
|
|
sll t8, t8, 3
|
|
lw t9, 12288(gp)
|
|
daddu ra, ra, a3
|
|
sw s5, 8084(a0)
|
|
sll t6, t6, 3
|
|
lw ra, 12288(ra)
|
|
pextlb t7, r0, t7
|
|
lqc2 vf1, 8080(a0)
|
|
pextlh t7, r0, t7
|
|
sw t8, 8084(a0)
|
|
pextlb t8, r0, t9
|
|
qmtc2.i vf4, t7
|
|
pextlh t7, r0, t8
|
|
lqc2 vf2, 8080(a0)
|
|
pextlb t8, r0, ra
|
|
qmtc2.i vf5, t7
|
|
pextlh t7, r0, t8
|
|
sw t6, 8084(a0)
|
|
vitof0.xyzw vf4, vf4
|
|
qmtc2.i vf6, t7
|
|
vitof0.xyzw vf5, vf5
|
|
lqc2 vf3, 8080(a0)
|
|
vitof0.xyzw vf6, vf6
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf1, vf1
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf2, vf2
|
|
sll r0, r0, 0
|
|
vitof0.xyzw vf3, vf3
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf5, vf5, vf6
|
|
sll r0, r0, 0
|
|
vadd.xz vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
vmulaw.xyzw acc, vf27, vf0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf2, vf2, vf3
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf5, vf5, vf28
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf24, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf25, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf7, vf26, vf1
|
|
sll r0, r0, 0
|
|
vmulx.xyzw vf2, vf2, vf28
|
|
sll r0, r0, 0
|
|
vsub.xyzw vf6, vf4, vf5
|
|
sll r0, r0, 0
|
|
vaddz.xyzw vf7, vf13, vf7
|
|
sll r0, r0, 0
|
|
vsub.xyz vf3, vf1, vf2
|
|
sll r0, r0, 0
|
|
vmulw.w vf3, vf0, vf0
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf7, vf7, vf14
|
|
sll r0, r0, 0
|
|
vmini.xyzw vf7, vf7, vf11
|
|
sll r0, r0, 0
|
|
vmaxx.xyzw vf7, vf7, vf0
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf5
|
|
sll r0, r0, 0
|
|
vmaddy.xyzw vf4, vf6, vf7
|
|
sll r0, r0, 0
|
|
vmula.xyzw acc, vf11, vf2
|
|
sll r0, r0, 0
|
|
vmaddy.yw vf1, vf3, vf7
|
|
sll r0, r0, 0
|
|
vftoi0.xyzw vf4, vf4
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 224(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 240(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 240(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 252(t4)
|
|
sll r0, r0, 0
|
|
|
|
|
|
lhu t6, 66(t3)
|
|
sll r0, r0, 0
|
|
lhu t7, 64(t3)
|
|
daddu t6, t6, t1
|
|
sll r0, r0, 0
|
|
pextlb t8, r0, t7
|
|
lhu t7, 2(t6)
|
|
pextlh t8, r0, t8
|
|
lhu t6, 0(t6)
|
|
dsll t8, t8, 12
|
|
andi t7, t7, 2047
|
|
pexcw t8, t8
|
|
mfc1 r0, f31
|
|
dsll t7, t7, 2
|
|
qmtc2.i vf1, t8
|
|
daddu t7, t7, a3
|
|
sll t6, t6, 3
|
|
vitof0.xyzw vf1, vf1
|
|
mtc1 f0, t6
|
|
sll r0, r0, 0
|
|
lw t6, 12288(t7)
|
|
cvt.s.w f0, f0
|
|
sll r0, r0, 0
|
|
vadd.xyzw vf1, vf1, vf15
|
|
sll r0, r0, 0
|
|
pextlb t6, r0, t6
|
|
mfc1 r0, f31
|
|
pextlh t6, r0, t6
|
|
mfc1 r0, f31
|
|
sll r0, r0, 0
|
|
sq t6, 256(t4)
|
|
sll r0, r0, 0
|
|
sqc2 vf1, 272(t4)
|
|
sll r0, r0, 0
|
|
swc1 f0, 276(t4)
|
|
sll r0, r0, 0
|
|
lqc2 vf1, 272(t4)
|
|
vmulaw.xyzw acc, vf19, vf0
|
|
sll r0, r0, 0
|
|
vmaddax.xyzw acc, vf16, vf1
|
|
sll r0, r0, 0
|
|
vmadday.xyzw acc, vf17, vf1
|
|
sll r0, r0, 0
|
|
vmaddz.xyzw vf1, vf18, vf1
|
|
sll r0, r0, 0
|
|
vmul.xyzw vf1, vf1, vf31
|
|
sll r0, r0, 0
|
|
vclip.xyz vf1, vf1
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
cfc2.i t6, Clipping
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t6, t6, 47
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sw t6, 284(t4)
|
|
bgezal r0, L39
|
|
sll r0, r0, 0
|
|
|
|
B40:
|
|
daddiu t3, t3, 72
|
|
daddiu t4, t4, 288
|
|
bgtz t5, L35
|
|
daddiu t5, t5, -1
|
|
|
|
B41:
|
|
bgtz t2, L31
|
|
daddiu t2, t2, -1
|
|
|
|
B42:
|
|
beq r0, r0, L52
|
|
sll r0, r0, 0
|
|
|
|
B43:
|
|
L39:
|
|
;;;;;;; subroutine
|
|
;; t4 = hfrag-cache
|
|
;; t3 = p9
|
|
;; t1 = gathered verts (spad input buffer)
|
|
;; t0 = output buffer on spad
|
|
;; a0 = work
|
|
sll r0, r0, 0
|
|
lw t6, 28(t4) ;; cv0.clip
|
|
sll r0, r0, 0
|
|
lw t7, 124(t4) ;; cv6.clip
|
|
sll r0, r0, 0
|
|
lw t8, 60(t4) ;; cv6.clip
|
|
sll r0, r0, 0
|
|
lw t9, 156(t4) ;; cv8.clip
|
|
and gp, t6, t7
|
|
and s5, t8, t9
|
|
and gp, gp, s5
|
|
or t8, t8, t9
|
|
bne gp, r0, L41
|
|
or t6, t6, t7
|
|
|
|
B44:
|
|
or t7, t6, t8
|
|
lq t6, 0(t4) ;; t6 = cv0.col
|
|
bne t7, r0, L40
|
|
lq t7, 96(t4) ;; t7 = cv3.col
|
|
|
|
B45:
|
|
sll r0, r0, 0
|
|
lq t9, 32(t4) ;; t9 = cv1.col
|
|
sll r0, r0, 0
|
|
lq t8, 128(t4) ;; t8 = cv4.col
|
|
ppach t6, r0, t6 ;; cv0.col u16's
|
|
lwc1 f0, 20(t4) ;; f0 = cv0.posy
|
|
ppach t7, r0, t7 ;; cv3.col u16's
|
|
lwc1 f1, 116(t4) ;; f1 = cv3.posy
|
|
ppach t9, r0, t9 ;; t9 = cv1.col u16's
|
|
lwc1 f2, 52(t4) ;; f2 = cv1.height
|
|
ppach t8, r0, t8 ;; col to u8's
|
|
lwc1 f3, 148(t4) ;; f3 = cv4's height
|
|
ppacb t6, r0, t6 ;; cv0.col u8's
|
|
swc1 f0, 32(t0)
|
|
ppacb t7, r0, t7 ;; cv3.col u8's
|
|
swc1 f1, 36(t0)
|
|
ppacb t9, r0, t9
|
|
swc1 f2, 40(t0)
|
|
ppacb t8, r0, t8
|
|
swc1 f3, 44(t0)
|
|
sll r0, r0, 0
|
|
sw t6, 64(t0) ;; writing colors 0
|
|
sll r0, r0, 0
|
|
sw t7, 68(t0) ;; writing colors 3
|
|
sll r0, r0, 0
|
|
sw t9, 72(t0) ;; colors 1
|
|
sll r0, r0, 0
|
|
sw t8, 76(t0) ;; colors 4
|
|
sll r0, r0, 0
|
|
|
|
lhu t7, 2(t3) ;; p9[0].index0
|
|
sll r0, r0, 0
|
|
lw t6, 8284(a0) ;; buckets-near
|
|
daddu t7, t7, t1 ;; t7 = gathered_verts[p9[0].index0]
|
|
lw t8, 8152(a0) ;; t8 = dma-buffer base.
|
|
sll r0, r0, 0
|
|
lhu t7, 2(t7) ;; t7 = t7.packed-index
|
|
dsra t7, t7, 11 ;; t7 = upperbit11
|
|
lqc2 vf1, 16(t4) ;; vf1 is the whole position
|
|
sll r0, r0, 0
|
|
dsll t7, t7, 4 ;; multiply by 16 to get the right bucket
|
|
daddu t7, t6, t7 ;; hfrag-bucket pointer
|
|
sqc2 vf1, 16(t0) ;; store output corner
|
|
sll r0, r0, 0
|
|
lh t9, 6(t7) ;; vtx count
|
|
sll r0, r0, 0
|
|
lw t6, 0(t7) ;; next pointer
|
|
dsll s5, a1, 4
|
|
lh gp, 4(t7) ;; count
|
|
daddu s5, s5, t8 ;; dma dest stuff...
|
|
sw t6, 1700(a0) ;; dma next stuff
|
|
daddu t8, t9, a0
|
|
sw s5, 0(t7) ;; update bucket
|
|
daddiu gp, gp, 1 ;; inc count
|
|
daddiu s5, t9, -16
|
|
addiu t9, r0, 32
|
|
sh gp, 4(t7)
|
|
movz s5, t9, s5 ;; dma crap
|
|
lq t9, 1696(a0)
|
|
sll r0, r0, 0
|
|
sh s5, 6(t7)
|
|
sll r0, r0, 0
|
|
lq gp, 1728(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 1392(t8)
|
|
movz t9, gp, t6
|
|
lq t6, 1424(t8)
|
|
sll r0, r0, 0
|
|
sq t7, 0(t0)
|
|
sll r0, r0, 0
|
|
sq t6, 48(t0)
|
|
daddiu a1, a1, 6
|
|
sq t9, 80(t0)
|
|
beq r0, r0, L42
|
|
daddiu t0, t0, 96
|
|
|
|
B46:
|
|
L40:
|
|
sll r0, r0, 0
|
|
lq t8, 32(t4)
|
|
sll r0, r0, 0
|
|
lq t9, 128(t4)
|
|
sq t6, 32(t0)
|
|
sll r0, r0, 0
|
|
sq t7, 80(t0)
|
|
sll r0, r0, 0
|
|
sq t8, 128(t0)
|
|
sll r0, r0, 0
|
|
sq t9, 176(t0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
lhu t7, 2(t3)
|
|
sll r0, r0, 0
|
|
lw t6, 8284(a0)
|
|
daddu t7, t7, t1
|
|
lqc2 vf2, 16(t4)
|
|
sll r0, r0, 0
|
|
lhu t7, 2(t7)
|
|
sll r0, r0, 0
|
|
lqc2 vf3, 112(t4)
|
|
dsra t7, t7, 11
|
|
lw t9, 8152(a0)
|
|
dsll t7, t7, 4
|
|
sll r0, r0, 0
|
|
daddu t6, t6, t7
|
|
lqc2 vf4, 48(t4)
|
|
sll r0, r0, 0
|
|
lh t8, 14(t6)
|
|
sll r0, r0, 0
|
|
lw t7, 8(t6)
|
|
dsll s5, a1, 4
|
|
lh gp, 12(t6)
|
|
daddu s5, s5, t9
|
|
sw t7, 1748(a0)
|
|
daddu t9, t8, a0
|
|
sw s5, 8(t6)
|
|
daddiu gp, gp, 1
|
|
lq t9, 1072(t9)
|
|
daddiu t8, t8, -16
|
|
sh gp, 12(t6)
|
|
addiu gp, r0, 48
|
|
lq s5, 1744(a0)
|
|
sll r0, r0, 0
|
|
lq s4, 1760(a0)
|
|
movz t8, gp, t8
|
|
sq t9, 0(t0)
|
|
movz s5, s4, t7
|
|
sh t8, 14(t6)
|
|
sll r0, r0, 0
|
|
sq s5, 208(t0)
|
|
sll r0, r0, 0
|
|
lqc2 vf5, 144(t4)
|
|
sqc2 vf2, 48(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf20, 16(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf3, 96(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf21, 64(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 144(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf22, 112(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf5, 192(t0)
|
|
daddiu a1, a1, 14
|
|
sqc2 vf23, 160(t0)
|
|
daddiu t0, t0, 224
|
|
beq r0, r0, L42
|
|
sll r0, r0, 0
|
|
|
|
B47:
|
|
L41:
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
B48:
|
|
L42:
|
|
sll r0, r0, 0
|
|
lw t6, 60(t4) ;; 1
|
|
sll r0, r0, 0
|
|
lw t7, 156(t4) ;; 4
|
|
sll r0, r0, 0
|
|
lw t8, 92(t4) ;; 2
|
|
sll r0, r0, 0
|
|
lw t9, 188(t4) ;; 5
|
|
and gp, t6, t7
|
|
and s5, t8, t9
|
|
and gp, gp, s5
|
|
or t8, t8, t9
|
|
bne gp, r0, L44
|
|
or t6, t6, t7
|
|
|
|
B49:
|
|
or t7, t6, t8
|
|
lq t6, 32(t4)
|
|
bne t7, r0, L43
|
|
lq t7, 128(t4)
|
|
|
|
B50:
|
|
sll r0, r0, 0
|
|
lq t9, 64(t4)
|
|
sll r0, r0, 0
|
|
lq t8, 160(t4)
|
|
ppach t6, r0, t6
|
|
lwc1 f0, 52(t4)
|
|
ppach t7, r0, t7
|
|
lwc1 f1, 148(t4)
|
|
ppach t9, r0, t9
|
|
lwc1 f2, 84(t4)
|
|
ppach t8, r0, t8
|
|
lwc1 f3, 180(t4)
|
|
ppacb t6, r0, t6
|
|
swc1 f0, 32(t0)
|
|
ppacb t7, r0, t7
|
|
swc1 f1, 36(t0)
|
|
ppacb t9, r0, t9
|
|
swc1 f2, 40(t0)
|
|
ppacb t8, r0, t8
|
|
swc1 f3, 44(t0)
|
|
sll r0, r0, 0
|
|
sw t6, 64(t0)
|
|
sll r0, r0, 0
|
|
sw t7, 68(t0)
|
|
sll r0, r0, 0
|
|
sw t9, 72(t0)
|
|
sll r0, r0, 0
|
|
sw t8, 76(t0)
|
|
sll r0, r0, 0
|
|
lhu t7, 10(t3)
|
|
sll r0, r0, 0
|
|
lw t6, 8284(a0)
|
|
daddu t7, t7, t1
|
|
lw t8, 8152(a0)
|
|
sll r0, r0, 0
|
|
lhu t7, 2(t7)
|
|
dsra t7, t7, 11
|
|
lqc2 vf1, 48(t4)
|
|
sll r0, r0, 0
|
|
dsll t7, t7, 4
|
|
daddu t7, t6, t7
|
|
sqc2 vf1, 16(t0)
|
|
sll r0, r0, 0
|
|
lh t9, 6(t7)
|
|
sll r0, r0, 0
|
|
lw t6, 0(t7)
|
|
dsll s5, a1, 4
|
|
lh gp, 4(t7)
|
|
daddu s5, s5, t8
|
|
sw t6, 1700(a0)
|
|
daddu t8, t9, a0
|
|
sw s5, 0(t7)
|
|
daddiu gp, gp, 1
|
|
daddiu s5, t9, -16
|
|
addiu t9, r0, 32
|
|
sh gp, 4(t7)
|
|
movz s5, t9, s5
|
|
lq t9, 1696(a0)
|
|
sll r0, r0, 0
|
|
sh s5, 6(t7)
|
|
sll r0, r0, 0
|
|
lq gp, 1728(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 1392(t8)
|
|
movz t9, gp, t6
|
|
lq t6, 1424(t8)
|
|
sll r0, r0, 0
|
|
sq t7, 0(t0)
|
|
sll r0, r0, 0
|
|
sq t6, 48(t0)
|
|
daddiu a1, a1, 6
|
|
sq t9, 80(t0)
|
|
beq r0, r0, L45
|
|
daddiu t0, t0, 96
|
|
|
|
B51:
|
|
L43:
|
|
sll r0, r0, 0
|
|
lq t8, 64(t4)
|
|
sll r0, r0, 0
|
|
lq t9, 160(t4)
|
|
sq t6, 32(t0)
|
|
sll r0, r0, 0
|
|
sq t7, 80(t0)
|
|
sll r0, r0, 0
|
|
sq t8, 128(t0)
|
|
sll r0, r0, 0
|
|
sq t9, 176(t0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
lhu t7, 10(t3)
|
|
sll r0, r0, 0
|
|
lw t6, 8284(a0)
|
|
daddu t7, t7, t1
|
|
lqc2 vf2, 48(t4)
|
|
sll r0, r0, 0
|
|
lhu t7, 2(t7)
|
|
sll r0, r0, 0
|
|
lqc2 vf3, 144(t4)
|
|
dsra t7, t7, 11
|
|
lw t9, 8152(a0)
|
|
dsll t7, t7, 4
|
|
sll r0, r0, 0
|
|
daddu t6, t6, t7
|
|
lqc2 vf4, 80(t4)
|
|
sll r0, r0, 0
|
|
lh t8, 14(t6)
|
|
sll r0, r0, 0
|
|
lw t7, 8(t6)
|
|
dsll s5, a1, 4
|
|
lh gp, 12(t6)
|
|
daddu s5, s5, t9
|
|
sw t7, 1748(a0)
|
|
daddu t9, t8, a0
|
|
sw s5, 8(t6)
|
|
daddiu gp, gp, 1
|
|
lq t9, 1072(t9)
|
|
daddiu t8, t8, -16
|
|
sh gp, 12(t6)
|
|
addiu gp, r0, 48
|
|
lq s5, 1744(a0)
|
|
sll r0, r0, 0
|
|
lq s4, 1760(a0)
|
|
movz t8, gp, t8
|
|
sq t9, 0(t0)
|
|
movz s5, s4, t7
|
|
sh t8, 14(t6)
|
|
sll r0, r0, 0
|
|
sq s5, 208(t0)
|
|
sll r0, r0, 0
|
|
lqc2 vf5, 176(t4)
|
|
sqc2 vf2, 48(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf20, 16(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf3, 96(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf21, 64(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 144(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf22, 112(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf5, 192(t0)
|
|
daddiu a1, a1, 14
|
|
sqc2 vf23, 160(t0)
|
|
daddiu t0, t0, 224
|
|
beq r0, r0, L45
|
|
sll r0, r0, 0
|
|
|
|
B52:
|
|
L44:
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
B53:
|
|
L45:
|
|
sll r0, r0, 0
|
|
lw t6, 124(t4)
|
|
sll r0, r0, 0
|
|
lw t7, 220(t4)
|
|
sll r0, r0, 0
|
|
lw t8, 156(t4)
|
|
sll r0, r0, 0
|
|
lw t9, 252(t4)
|
|
and gp, t6, t7
|
|
and s5, t8, t9
|
|
and gp, gp, s5
|
|
or t8, t8, t9
|
|
bne gp, r0, L47
|
|
or t6, t6, t7
|
|
|
|
B54:
|
|
or t7, t6, t8
|
|
lq t6, 96(t4)
|
|
bne t7, r0, L46
|
|
lq t7, 192(t4)
|
|
|
|
B55:
|
|
sll r0, r0, 0
|
|
lq t9, 128(t4)
|
|
sll r0, r0, 0
|
|
lq t8, 224(t4)
|
|
ppach t6, r0, t6
|
|
lwc1 f0, 116(t4)
|
|
ppach t7, r0, t7
|
|
lwc1 f1, 212(t4)
|
|
ppach t9, r0, t9
|
|
lwc1 f2, 148(t4)
|
|
ppach t8, r0, t8
|
|
lwc1 f3, 244(t4)
|
|
ppacb t6, r0, t6
|
|
swc1 f0, 32(t0)
|
|
ppacb t7, r0, t7
|
|
swc1 f1, 36(t0)
|
|
ppacb t9, r0, t9
|
|
swc1 f2, 40(t0)
|
|
ppacb t8, r0, t8
|
|
swc1 f3, 44(t0)
|
|
sll r0, r0, 0
|
|
sw t6, 64(t0)
|
|
sll r0, r0, 0
|
|
sw t7, 68(t0)
|
|
sll r0, r0, 0
|
|
sw t9, 72(t0)
|
|
sll r0, r0, 0
|
|
sw t8, 76(t0)
|
|
sll r0, r0, 0
|
|
lhu t7, 26(t3)
|
|
sll r0, r0, 0
|
|
lw t6, 8284(a0)
|
|
daddu t7, t7, t1
|
|
lw t8, 8152(a0)
|
|
sll r0, r0, 0
|
|
lhu t7, 2(t7)
|
|
dsra t7, t7, 11
|
|
lqc2 vf1, 112(t4)
|
|
sll r0, r0, 0
|
|
dsll t7, t7, 4
|
|
daddu t7, t6, t7
|
|
sqc2 vf1, 16(t0)
|
|
sll r0, r0, 0
|
|
lh t9, 6(t7)
|
|
sll r0, r0, 0
|
|
lw t6, 0(t7)
|
|
dsll s5, a1, 4
|
|
lh gp, 4(t7)
|
|
daddu s5, s5, t8
|
|
sw t6, 1700(a0)
|
|
daddu t8, t9, a0
|
|
sw s5, 0(t7)
|
|
daddiu gp, gp, 1
|
|
daddiu s5, t9, -16
|
|
addiu t9, r0, 32
|
|
sh gp, 4(t7)
|
|
movz s5, t9, s5
|
|
lq t9, 1696(a0)
|
|
sll r0, r0, 0
|
|
sh s5, 6(t7)
|
|
sll r0, r0, 0
|
|
lq gp, 1728(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 1392(t8)
|
|
movz t9, gp, t6
|
|
lq t6, 1424(t8)
|
|
sll r0, r0, 0
|
|
sq t7, 0(t0)
|
|
sll r0, r0, 0
|
|
sq t6, 48(t0)
|
|
daddiu a1, a1, 6
|
|
sq t9, 80(t0)
|
|
beq r0, r0, L48
|
|
daddiu t0, t0, 96
|
|
|
|
B56:
|
|
L46:
|
|
sll r0, r0, 0
|
|
lq t8, 128(t4)
|
|
sll r0, r0, 0
|
|
lq t9, 224(t4)
|
|
sq t6, 32(t0)
|
|
sll r0, r0, 0
|
|
sq t7, 80(t0)
|
|
sll r0, r0, 0
|
|
sq t8, 128(t0)
|
|
sll r0, r0, 0
|
|
sq t9, 176(t0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
lhu t7, 26(t3)
|
|
sll r0, r0, 0
|
|
lw t6, 8284(a0)
|
|
daddu t7, t7, t1
|
|
lqc2 vf2, 112(t4)
|
|
sll r0, r0, 0
|
|
lhu t7, 2(t7)
|
|
sll r0, r0, 0
|
|
lqc2 vf3, 208(t4)
|
|
dsra t7, t7, 11
|
|
lw t9, 8152(a0)
|
|
dsll t7, t7, 4
|
|
sll r0, r0, 0
|
|
daddu t6, t6, t7
|
|
lqc2 vf4, 144(t4)
|
|
sll r0, r0, 0
|
|
lh t8, 14(t6)
|
|
sll r0, r0, 0
|
|
lw t7, 8(t6)
|
|
dsll s5, a1, 4
|
|
lh gp, 12(t6)
|
|
daddu s5, s5, t9
|
|
sw t7, 1748(a0)
|
|
daddu t9, t8, a0
|
|
sw s5, 8(t6)
|
|
daddiu gp, gp, 1
|
|
lq t9, 1072(t9)
|
|
daddiu t8, t8, -16
|
|
sh gp, 12(t6)
|
|
addiu gp, r0, 48
|
|
lq s5, 1744(a0)
|
|
sll r0, r0, 0
|
|
lq s4, 1760(a0)
|
|
movz t8, gp, t8
|
|
sq t9, 0(t0)
|
|
movz s5, s4, t7
|
|
sh t8, 14(t6)
|
|
sll r0, r0, 0
|
|
sq s5, 208(t0)
|
|
sll r0, r0, 0
|
|
lqc2 vf5, 240(t4)
|
|
sqc2 vf2, 48(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf20, 16(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf3, 96(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf21, 64(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 144(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf22, 112(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf5, 192(t0)
|
|
daddiu a1, a1, 14
|
|
sqc2 vf23, 160(t0)
|
|
daddiu t0, t0, 224
|
|
beq r0, r0, L48
|
|
sll r0, r0, 0
|
|
|
|
B57:
|
|
L47:
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
B58:
|
|
L48:
|
|
sll r0, r0, 0
|
|
lw t6, 156(t4)
|
|
sll r0, r0, 0
|
|
lw t7, 252(t4)
|
|
sll r0, r0, 0
|
|
lw t8, 188(t4)
|
|
sll r0, r0, 0
|
|
lw t9, 284(t4)
|
|
and gp, t6, t7
|
|
and s5, t8, t9
|
|
and gp, gp, s5
|
|
or t8, t8, t9
|
|
bne gp, r0, L50
|
|
or t6, t6, t7
|
|
|
|
B59:
|
|
or t7, t6, t8
|
|
lq t6, 128(t4)
|
|
bne t7, r0, L49
|
|
lq t7, 224(t4)
|
|
|
|
B60:
|
|
sll r0, r0, 0
|
|
lq t9, 160(t4)
|
|
sll r0, r0, 0
|
|
lq t8, 256(t4)
|
|
ppach t6, r0, t6
|
|
lwc1 f0, 148(t4)
|
|
ppach t7, r0, t7
|
|
lwc1 f1, 244(t4)
|
|
ppach t9, r0, t9
|
|
lwc1 f2, 180(t4)
|
|
ppach t8, r0, t8
|
|
lwc1 f3, 276(t4)
|
|
ppacb t6, r0, t6
|
|
swc1 f0, 32(t0)
|
|
ppacb t7, r0, t7
|
|
swc1 f1, 36(t0)
|
|
ppacb t9, r0, t9
|
|
swc1 f2, 40(t0)
|
|
ppacb t8, r0, t8
|
|
swc1 f3, 44(t0)
|
|
sll r0, r0, 0
|
|
sw t6, 64(t0)
|
|
sll r0, r0, 0
|
|
sw t7, 68(t0)
|
|
sll r0, r0, 0
|
|
sw t9, 72(t0)
|
|
sll r0, r0, 0
|
|
sw t8, 76(t0)
|
|
sll r0, r0, 0
|
|
lhu t7, 34(t3)
|
|
sll r0, r0, 0
|
|
lw t6, 8284(a0)
|
|
daddu t7, t7, t1
|
|
lw t8, 8152(a0)
|
|
sll r0, r0, 0
|
|
lhu t7, 2(t7)
|
|
dsra t7, t7, 11
|
|
lqc2 vf1, 144(t4)
|
|
sll r0, r0, 0
|
|
dsll t7, t7, 4
|
|
daddu t7, t6, t7
|
|
sqc2 vf1, 16(t0)
|
|
sll r0, r0, 0
|
|
lh t9, 6(t7)
|
|
sll r0, r0, 0
|
|
lw t6, 0(t7)
|
|
dsll s5, a1, 4
|
|
lh gp, 4(t7)
|
|
daddu s5, s5, t8
|
|
sw t6, 1700(a0)
|
|
daddu t8, t9, a0
|
|
sw s5, 0(t7)
|
|
daddiu gp, gp, 1
|
|
daddiu s5, t9, -16
|
|
addiu t9, r0, 32
|
|
sh gp, 4(t7)
|
|
movz s5, t9, s5
|
|
lq t9, 1696(a0)
|
|
sll r0, r0, 0
|
|
sh s5, 6(t7)
|
|
sll r0, r0, 0
|
|
lq gp, 1728(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 1392(t8)
|
|
movz t9, gp, t6
|
|
lq t6, 1424(t8)
|
|
sll r0, r0, 0
|
|
sq t7, 0(t0)
|
|
sll r0, r0, 0
|
|
sq t6, 48(t0)
|
|
daddiu a1, a1, 6
|
|
sq t9, 80(t0)
|
|
beq r0, r0, L51
|
|
daddiu t0, t0, 96
|
|
|
|
B61:
|
|
L49:
|
|
sll r0, r0, 0
|
|
lq t8, 160(t4)
|
|
sll r0, r0, 0
|
|
lq t9, 256(t4)
|
|
sq t6, 32(t0)
|
|
sll r0, r0, 0
|
|
sq t7, 80(t0)
|
|
sll r0, r0, 0
|
|
sq t8, 128(t0)
|
|
sll r0, r0, 0
|
|
sq t9, 176(t0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
lhu t7, 34(t3)
|
|
sll r0, r0, 0
|
|
lw t6, 8284(a0)
|
|
daddu t7, t7, t1
|
|
lqc2 vf2, 144(t4)
|
|
sll r0, r0, 0
|
|
lhu t7, 2(t7)
|
|
sll r0, r0, 0
|
|
lqc2 vf3, 240(t4)
|
|
dsra t7, t7, 11
|
|
lw t9, 8152(a0)
|
|
dsll t7, t7, 4
|
|
sll r0, r0, 0
|
|
daddu t6, t6, t7
|
|
lqc2 vf4, 176(t4)
|
|
sll r0, r0, 0
|
|
lh t8, 14(t6)
|
|
sll r0, r0, 0
|
|
lw t7, 8(t6)
|
|
dsll s5, a1, 4
|
|
lh gp, 12(t6)
|
|
daddu s5, s5, t9
|
|
sw t7, 1748(a0)
|
|
daddu t9, t8, a0
|
|
sw s5, 8(t6)
|
|
daddiu gp, gp, 1
|
|
lq t9, 1072(t9)
|
|
daddiu t8, t8, -16
|
|
sh gp, 12(t6)
|
|
addiu gp, r0, 48
|
|
lq s5, 1744(a0)
|
|
sll r0, r0, 0
|
|
lq s4, 1760(a0)
|
|
movz t8, gp, t8
|
|
sq t9, 0(t0)
|
|
movz s5, s4, t7
|
|
sh t8, 14(t6)
|
|
sll r0, r0, 0
|
|
sq s5, 208(t0)
|
|
sll r0, r0, 0
|
|
lqc2 vf5, 272(t4)
|
|
sqc2 vf2, 48(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf20, 16(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf3, 96(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf21, 64(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf4, 144(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf22, 112(t0)
|
|
sll r0, r0, 0
|
|
sqc2 vf5, 192(t0)
|
|
daddiu a1, a1, 14
|
|
sqc2 vf23, 160(t0)
|
|
daddiu t0, t0, 224
|
|
beq r0, r0, L51
|
|
sll r0, r0, 0
|
|
|
|
B62:
|
|
L50:
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
B63:
|
|
L51:
|
|
jr ra
|
|
sll r0, r0, 0
|
|
|
|
B64:
|
|
L52:
|
|
bgez a2, L18
|
|
or a2, a2, r0
|
|
|
|
B65:
|
|
beq a1, r0, L55
|
|
sll r0, r0, 0
|
|
|
|
B66:
|
|
lw a2, 8196(a0)
|
|
sll r0, r0, 0
|
|
B67:
|
|
L53:
|
|
lw a3, 0(a2)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi a3, a3, 256
|
|
sll r0, r0, 0
|
|
beq a3, r0, L54
|
|
sll r0, r0, 0
|
|
|
|
B68:
|
|
sll r0, r0, 0
|
|
lw a3, 8160(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu a3, a3, 1
|
|
sll r0, r0, 0
|
|
sw a3, 8160(a0)
|
|
beq r0, r0, L53
|
|
sll r0, r0, 0
|
|
|
|
B69:
|
|
L54:
|
|
lw a3, 8152(a0)
|
|
sll r0, r0, 0
|
|
sw v1, 128(a2)
|
|
xori t0, v1, 4720
|
|
sw a3, 16(a2)
|
|
sll v1, a1, 4
|
|
addu v1, a3, v1
|
|
or a3, t0, r0
|
|
sw a1, 32(a2)
|
|
addiu a1, r0, 256
|
|
sw a1, 0(a2)
|
|
addiu a1, r0, 0
|
|
sw v1, 8152(a0)
|
|
sll r0, r0, 0
|
|
B70:
|
|
L55:
|
|
lw v1, 8196(a0)
|
|
sll r0, r0, 0
|
|
B71:
|
|
L56:
|
|
lw a1, 0(v1)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi a1, a1, 256
|
|
sll r0, r0, 0
|
|
beq a1, r0, L57
|
|
sll r0, r0, 0
|
|
|
|
B72:
|
|
sll r0, r0, 0
|
|
lw a1, 8160(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu a1, a1, 1
|
|
sll r0, r0, 0
|
|
sw a1, 8160(a0)
|
|
beq r0, r0, L56
|
|
sll r0, r0, 0
|
|
|
|
B73:
|
|
L57:
|
|
lw v1, 8152(a0)
|
|
sll r0, r0, 0
|
|
lw a0, 8148(a0)
|
|
sll r0, r0, 0
|
|
sw v1, 4(a0)
|
|
sll r0, r0, 0
|
|
or v0, r0, r0
|
|
ld ra, 0(sp)
|
|
lq gp, 48(sp)
|
|
lq s5, 32(sp)
|
|
lq s4, 16(sp)
|
|
jr ra
|
|
daddiu sp, sp, 64
|
|
```
|
|
|
|
# Unknown Method 23 (texture DMA generation?)
|
|
```
|
|
L219:
|
|
daddiu sp, sp, -64
|
|
sd ra, 0(sp)
|
|
sq s4, 16(sp)
|
|
sq s5, 32(sp)
|
|
sq gp, 48(sp)
|
|
B0:
|
|
lw v1, *display*(s7)
|
|
lw v1, 0(v1)
|
|
dsll v1, v1, 2
|
|
lw a1, *display*(s7)
|
|
daddu v1, v1, a1
|
|
lwu v1, 8(v1) ;; load the on-screen display frame
|
|
lwu a2, 36(v1) ;; global-buf for DMA
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
lw a1, 4(a2) ;; dma-buffer base
|
|
lui v1, 4096
|
|
sw a2, 8148(a0) ;; stash buffer in work.
|
|
sync.l
|
|
cache dxwbin a1, 0
|
|
sync.l
|
|
cache dxwbin a1, 1
|
|
sync.l
|
|
lui a2, 28672 ;; a2 = scratchpad
|
|
ori a3, v1, 53248 ;; a3 = spr-from dma control register
|
|
vmaxw.xyzw vf11, vf0, vf0 ;; vf11 = [1, 1, 1, 1]
|
|
ori v1, a2, 2720 ;; v1 = spad output buffer
|
|
sw r0, 1736(a0) ;; modify dma return template
|
|
addiu a2, r0, 0 ;; a2 = 0
|
|
sw a3, 8196(a0) ;; stash spr-from reg
|
|
or a3, v1, r0 ;; a3 = spad output
|
|
sw a1, 8152(a0) ;; stash global dma (EE) ptr
|
|
sll r0, r0, 0
|
|
lqc2 vf29, 1728(a0) ;; vf29 = ret-tmpl
|
|
sll r0, r0, 0
|
|
lw t0, 8152(a0) ;; t0 = global dma ptr
|
|
sll r0, r0, 0
|
|
lw a1, 8264(a0) ;; a1 = work.hfragment.shaders
|
|
sll r0, r0, 0
|
|
sw t0, 8388(a0) ;; far-texture = global dma ptr
|
|
daddiu t0, a2, -200
|
|
sll r0, r0, 0
|
|
blez t0, L222
|
|
sll r0, r0, 0
|
|
|
|
B1: ;; if full, dma from transfer.
|
|
lw t0, 8196(a0)
|
|
sll r0, r0, 0
|
|
B2:
|
|
L220:
|
|
lw a3, 0(t0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi a3, a3, 256
|
|
sll r0, r0, 0
|
|
beq a3, r0, L221
|
|
sll r0, r0, 0
|
|
|
|
B3:
|
|
sll r0, r0, 0
|
|
lw a3, 8160(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu a3, a3, 1
|
|
sll r0, r0, 0
|
|
sw a3, 8160(a0)
|
|
beq r0, r0, L220
|
|
sll r0, r0, 0
|
|
|
|
B4:
|
|
L221:
|
|
lw a3, 8152(a0) ;; dma buffer swap
|
|
sll r0, r0, 0
|
|
sw v1, 128(t0)
|
|
xori v1, v1, 4720
|
|
sw a3, 16(t0)
|
|
sll t1, a2, 4
|
|
addu t1, a3, t1
|
|
or a3, v1, r0
|
|
sw a2, 32(t0)
|
|
addiu a2, r0, 256
|
|
sw a2, 0(t0)
|
|
addiu a2, r0, 0
|
|
sw t1, 8152(a0)
|
|
sll r0, r0, 0
|
|
B5:
|
|
L222:
|
|
sll r0, r0, 0 ;; set up the 1 far-texture bucket.
|
|
lq t1, 1776(a0)
|
|
sll r0, r0, 0
|
|
lq t2, 1792(a0)
|
|
sll r0, r0, 0
|
|
lq t3, 1936(a0)
|
|
sll r0, r0, 0
|
|
lq t4, 1952(a0)
|
|
sll r0, r0, 0
|
|
lq t5, 1968(a0)
|
|
sll r0, r0, 0
|
|
lq t0, 1984(a0)
|
|
sq t1, 0(a3)
|
|
sll r0, r0, 0
|
|
sq t2, 16(a3)
|
|
sll r0, r0, 0
|
|
sq t3, 32(a3)
|
|
sll r0, r0, 0
|
|
sq t4, 48(a3)
|
|
sll r0, r0, 0
|
|
sq t5, 64(a3)
|
|
daddiu a2, a2, 6
|
|
sq t0, 80(a3)
|
|
daddiu a3, a3, 96
|
|
sll r0, r0, 0
|
|
lq t0, 2128(a0)
|
|
sll r0, r0, 0
|
|
lq t1, 2144(a0)
|
|
sll r0, r0, 0
|
|
lq t2, 80(a1)
|
|
sll r0, r0, 0
|
|
lq t3, 96(a1)
|
|
sll r0, r0, 0
|
|
lq t4, 112(a1)
|
|
sll r0, r0, 0
|
|
lq t5, 128(a1)
|
|
sll r0, r0, 0
|
|
lq t6, 144(a1)
|
|
sq t0, 0(a3)
|
|
sll r0, r0, 0
|
|
sq t1, 16(a3)
|
|
sll r0, r0, 0
|
|
sq t2, 32(a3)
|
|
sll r0, r0, 0
|
|
sq t3, 48(a3)
|
|
sll r0, r0, 0
|
|
sq t4, 64(a3)
|
|
sll r0, r0, 0
|
|
sq t5, 80(a3)
|
|
daddiu a1, a2, 7
|
|
sq t6, 96(a3)
|
|
daddiu a2, a3, 112
|
|
sll r0, r0, 0
|
|
lq t0, 2192(a0)
|
|
sll r0, r0, 0
|
|
lq t1, 2208(a0)
|
|
sll r0, r0, 0
|
|
lq t2, 2256(a0)
|
|
sll r0, r0, 0
|
|
lq t3, 3360(a0)
|
|
sll r0, r0, 0
|
|
lq t4, 2352(a0)
|
|
sll r0, r0, 0
|
|
lq t5, 3360(a0)
|
|
sll r0, r0, 0
|
|
lq a3, 2368(a0)
|
|
sq t0, 0(a2)
|
|
sll r0, r0, 0
|
|
sq t1, 16(a2)
|
|
sll r0, r0, 0
|
|
sq t2, 32(a2)
|
|
sll r0, r0, 0
|
|
sq t3, 48(a2)
|
|
sll r0, r0, 0
|
|
sq t4, 64(a2)
|
|
sll r0, r0, 0
|
|
sq t5, 80(a2)
|
|
daddiu a1, a1, 7
|
|
sq a3, 96(a2)
|
|
daddiu a2, a2, 112
|
|
sll r0, r0, 0
|
|
lq t0, 1776(a0)
|
|
sll r0, r0, 0
|
|
lq t1, 1792(a0)
|
|
sll r0, r0, 0
|
|
lq t2, 2064(a0)
|
|
sll r0, r0, 0
|
|
lq t3, 2080(a0)
|
|
sll r0, r0, 0
|
|
lq t4, 2096(a0)
|
|
sll r0, r0, 0
|
|
lq a3, 2112(a0)
|
|
sq t0, 0(a2)
|
|
sll r0, r0, 0
|
|
sq t1, 16(a2)
|
|
sll r0, r0, 0
|
|
sq t2, 32(a2)
|
|
sll r0, r0, 0
|
|
sq t3, 48(a2)
|
|
sll r0, r0, 0
|
|
sq t4, 64(a2)
|
|
daddiu a1, a1, 6
|
|
sq a3, 80(a2)
|
|
daddiu a2, a2, 96
|
|
sll r0, r0, 0
|
|
daddiu t2, a1, 1
|
|
sqc2 vf29, 0(a2)
|
|
daddiu t3, a2, 16
|
|
or a1, a0, r0
|
|
lw a2, 8284(a0) ;; a2 = hfragment.buckets-near
|
|
sll r0, r0, 0
|
|
lw a3, 8272(a0) ;; a3 = hfragment.montage
|
|
sll r0, r0, 0
|
|
lhu t0, 8302(a0) ;; t0 = hfragment.num-buckets-near
|
|
beq r0, r0, L230
|
|
lw t1, 8264(a0) ;; t1 = hfragment.shaders
|
|
|
|
B6:
|
|
L223:
|
|
daddu t5, t4, t5 ;; t5 = count + count-scissor
|
|
lw t4, 8152(a0) ;; t4 = dma-buffer.base
|
|
beq t5, r0, L230 ;; skip ahead to L230 if no near buckets
|
|
dsll t5, t2, 4 ;; t5 = qw offset in EE memory dma buffer??
|
|
|
|
B7:
|
|
daddu t4, t5, t4 ;; t4 = output for this texture DMA
|
|
sw t4, 8392(a1) ;; store dma ptr in work.near-textures[bucket-idx]
|
|
daddiu t4, t2, -102
|
|
sll r0, r0, 0
|
|
blez t4, L226
|
|
sll r0, r0, 0
|
|
|
|
B8: ;; copy back from scratchpad to main memory
|
|
lw t4, 8196(a0)
|
|
sll r0, r0, 0
|
|
B9:
|
|
L224:
|
|
lw t3, 0(t4)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t3, t3, 256
|
|
sll r0, r0, 0
|
|
beq t3, r0, L225
|
|
sll r0, r0, 0
|
|
|
|
B10:
|
|
sll r0, r0, 0
|
|
lw t3, 8160(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu t3, t3, 1
|
|
sll r0, r0, 0
|
|
sw t3, 8160(a0)
|
|
beq r0, r0, L224
|
|
sll r0, r0, 0
|
|
|
|
B11:
|
|
L225:
|
|
lw t3, 8152(a0) ;; swap dma buffers
|
|
sll r0, r0, 0
|
|
sw v1, 128(t4)
|
|
xori v1, v1, 4720
|
|
sw t3, 16(t4)
|
|
sll t5, t2, 4
|
|
addu t5, t3, t5
|
|
or t3, v1, r0
|
|
sw t2, 32(t4)
|
|
addiu t2, r0, 256
|
|
sw t2, 0(t4)
|
|
addiu t2, r0, 0
|
|
sw t5, 8152(a0)
|
|
sll r0, r0, 0
|
|
B12:
|
|
L226:
|
|
sll r0, r0, 0
|
|
lq t5, 1776(a0) ;; t5 = work.frame-tmpl[0]
|
|
sll r0, r0, 0
|
|
lq t6, 1792(a0) ;; t6 = work.frame-tmpl[1]
|
|
sll r0, r0, 0
|
|
lq t7, 1808(a0) ;; t7 = work.frames[0].ad[0] (frame)
|
|
sll r0, r0, 0
|
|
lq t8, 1824(a0) ;; t8 = work.frames[0].ad[1] (scissor, 0x7f)
|
|
sll r0, r0, 0
|
|
lq t9, 1840(a0) ;; t9 = work.frames[0].ad[2] (xyoffset)
|
|
sll r0, r0, 0
|
|
lq t4, 1856(a0) ;; t4 = work.frames[0].ad[3] (test)
|
|
|
|
;; store the frame template for frames[0]
|
|
sq t5, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t9, 64(t3)
|
|
daddiu t2, t2, 6 ;; inc offset
|
|
sq t4, 80(t3)
|
|
daddiu t3, t3, 96 ;; inc offset
|
|
sll r0, r0, 0
|
|
|
|
lq t5, 2128(a0) ;; t5 = adgif-tmpl[0]
|
|
sll r0, r0, 0
|
|
lq t6, 2144(a0) ;; t6 = adgif-tmpl[1]
|
|
sll r0, r0, 0
|
|
lq t7, 160(t1) ;; t7 = shaders[2][0]
|
|
sll r0, r0, 0
|
|
lq t8, 176(t1) ;; t8 = shaders[2][1]
|
|
sll r0, r0, 0
|
|
lq t9, 192(t1) ;; t9 = shaders[2][2]
|
|
sll r0, r0, 0
|
|
lq ra, 208(t1) ;; ra = shaders[2][3]
|
|
sll r0, r0, 0
|
|
lq t4, 224(t1) ;; t4 = shaders[2][4]
|
|
sq t5, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t9, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7 ;; inc offset
|
|
sq t4, 96(t3)
|
|
daddiu t3, t3, 112 ;; inc offset
|
|
sll r0, r0, 0
|
|
|
|
;; montage 0
|
|
lhu t5, 0(a3) ;; t5 = montage[0]
|
|
sll r0, r0, 0
|
|
lq t4, 2192(a0) ;; t4 = sprite-tmpl[0]
|
|
daddu t9, t5, a0 ;; t9 = work + montage value
|
|
lq t5, 2208(a0) ;; t5 = sprite-tmpl[1]
|
|
sll r0, r0, 0
|
|
lq t6, 2256(a0) ;; t6 = color[0] = [0x80, 0x80, 0x80, 0x80]
|
|
sll r0, r0, 0
|
|
lq t7, 3456(t9) ;; load montage-tex-coords + montage[0]
|
|
sll r0, r0, 0
|
|
lq t8, 2384(a0) ;; t8 = near-data[0]
|
|
sll r0, r0, 0
|
|
lq ra, 3472(t9) ;; load second montage tex coords + montage[0]
|
|
sll r0, r0, 0
|
|
lq t9, 2400(a0) ;; t9 = near-data[1]
|
|
sq t4, 0(t3) ;; store sprite[0]
|
|
sll r0, r0, 0
|
|
sq t5, 16(t3) ;; store sprite[1]
|
|
sll r0, r0, 0
|
|
sq t6, 32(t3) ;; store color 0x80, 0x80, 0x80, 0x80
|
|
sll r0, r0, 0
|
|
sq t7, 48(t3) ;; store first tex coords
|
|
sll r0, r0, 0
|
|
sq t8, 64(t3) ;; store first position
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3) ;; store second text coords
|
|
daddiu t2, t2, 7
|
|
sq t9, 96(t3) ;; store second position
|
|
daddiu t3, t3, 112
|
|
sll r0, r0, 0
|
|
|
|
;; montage 1
|
|
lhu t5, 2(a3)
|
|
sll r0, r0, 0
|
|
lq t4, 2192(a0)
|
|
daddu t9, t5, a0
|
|
lq t5, 2208(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2256(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3456(t9)
|
|
sll r0, r0, 0
|
|
lq t8, 2416(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 3472(t9)
|
|
sll r0, r0, 0
|
|
lq t9, 2432(a0)
|
|
sq t4, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t5, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7
|
|
sq t9, 96(t3)
|
|
daddiu t3, t3, 112
|
|
sll r0, r0, 0
|
|
|
|
;; montage 2
|
|
lhu t5, 4(a3)
|
|
sll r0, r0, 0
|
|
lq t4, 2192(a0)
|
|
daddu t9, t5, a0
|
|
lq t5, 2208(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2256(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3456(t9)
|
|
sll r0, r0, 0
|
|
lq t8, 2448(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 3472(t9)
|
|
sll r0, r0, 0
|
|
lq t9, 2464(a0)
|
|
sq t4, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t5, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7
|
|
sq t9, 96(t3)
|
|
daddiu t3, t3, 112
|
|
sll r0, r0, 0
|
|
|
|
;; montage 3
|
|
lhu t5, 6(a3)
|
|
sll r0, r0, 0
|
|
lq t4, 2192(a0)
|
|
daddu t9, t5, a0
|
|
lq t5, 2208(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2256(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3456(t9)
|
|
sll r0, r0, 0
|
|
lq t8, 2480(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 3472(t9)
|
|
sll r0, r0, 0
|
|
lq t9, 2496(a0)
|
|
sq t4, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t5, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7
|
|
sq t9, 96(t3)
|
|
daddiu t3, t3, 112
|
|
sll r0, r0, 0
|
|
|
|
;; montage 4
|
|
lhu t5, 8(a3)
|
|
sll r0, r0, 0
|
|
lq t4, 2192(a0)
|
|
daddu t9, t5, a0
|
|
lq t5, 2208(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2256(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3456(t9)
|
|
sll r0, r0, 0
|
|
lq t8, 2512(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 3472(t9)
|
|
sll r0, r0, 0
|
|
lq t9, 2528(a0)
|
|
sq t4, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t5, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7
|
|
sq t9, 96(t3)
|
|
daddiu t3, t3, 112
|
|
sll r0, r0, 0
|
|
|
|
;; montage 5
|
|
lhu t5, 10(a3)
|
|
sll r0, r0, 0
|
|
lq t4, 2192(a0)
|
|
daddu t9, t5, a0
|
|
lq t5, 2208(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2256(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3456(t9)
|
|
sll r0, r0, 0
|
|
lq t8, 2544(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 3472(t9)
|
|
sll r0, r0, 0
|
|
lq t9, 2560(a0)
|
|
sq t4, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t5, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7
|
|
sq t9, 96(t3)
|
|
daddiu t3, t3, 112
|
|
sll r0, r0, 0
|
|
|
|
;; montage 6
|
|
lhu t5, 12(a3)
|
|
sll r0, r0, 0
|
|
lq t4, 2192(a0)
|
|
daddu t9, t5, a0
|
|
lq t5, 2208(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2256(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3456(t9)
|
|
sll r0, r0, 0
|
|
lq t8, 2576(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 3472(t9)
|
|
sll r0, r0, 0
|
|
lq t9, 2592(a0)
|
|
sq t4, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t5, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7
|
|
sq t9, 96(t3)
|
|
daddiu t3, t3, 112
|
|
sll r0, r0, 0
|
|
|
|
;; montage 7
|
|
lhu t5, 14(a3)
|
|
sll r0, r0, 0
|
|
lq t4, 2192(a0)
|
|
daddu t9, t5, a0
|
|
lq t5, 2208(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2256(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3456(t9)
|
|
sll r0, r0, 0
|
|
lq t8, 2608(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 3472(t9)
|
|
sll r0, r0, 0
|
|
lq t9, 2624(a0)
|
|
sq t4, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t5, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7
|
|
sq t9, 96(t3)
|
|
daddiu t3, t3, 112
|
|
sll r0, r0, 0
|
|
|
|
;; montage 8
|
|
lhu t5, 16(a3)
|
|
sll r0, r0, 0
|
|
lq t4, 2192(a0)
|
|
daddu t9, t5, a0
|
|
lq t5, 2208(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2256(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3456(t9)
|
|
sll r0, r0, 0
|
|
lq t8, 2640(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 3472(t9)
|
|
sll r0, r0, 0
|
|
lq t9, 2656(a0)
|
|
sq t4, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t5, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7
|
|
sq t9, 96(t3)
|
|
daddiu t3, t3, 112
|
|
sll r0, r0, 0
|
|
|
|
;; montage 9
|
|
lhu t5, 18(a3)
|
|
sll r0, r0, 0
|
|
lq t4, 2192(a0)
|
|
daddu t9, t5, a0
|
|
lq t5, 2208(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2256(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3456(t9)
|
|
sll r0, r0, 0
|
|
lq t8, 2672(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 3472(t9)
|
|
sll r0, r0, 0
|
|
lq t9, 2688(a0)
|
|
sq t4, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t5, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7
|
|
sq t9, 96(t3)
|
|
daddiu t3, t3, 112
|
|
sll r0, r0, 0
|
|
|
|
;; montage 10
|
|
lhu t5, 20(a3)
|
|
sll r0, r0, 0
|
|
lq t4, 2192(a0)
|
|
daddu t9, t5, a0
|
|
lq t5, 2208(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2256(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3456(t9)
|
|
sll r0, r0, 0
|
|
lq t8, 2704(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 3472(t9)
|
|
sll r0, r0, 0
|
|
lq t9, 2720(a0)
|
|
sq t4, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t5, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7
|
|
sq t9, 96(t3)
|
|
daddiu t3, t3, 112
|
|
sll r0, r0, 0
|
|
|
|
;; montage 11
|
|
lhu t5, 22(a3)
|
|
sll r0, r0, 0
|
|
lq t4, 2192(a0)
|
|
daddu t9, t5, a0
|
|
lq t5, 2208(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2256(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3456(t9)
|
|
sll r0, r0, 0
|
|
lq t8, 2736(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 3472(t9)
|
|
sll r0, r0, 0
|
|
lq t9, 2752(a0)
|
|
sq t4, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t5, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7
|
|
sq t9, 96(t3)
|
|
daddiu t3, t3, 112
|
|
sll r0, r0, 0
|
|
|
|
;; montage 12
|
|
lhu t5, 24(a3)
|
|
sll r0, r0, 0
|
|
lq t4, 2192(a0)
|
|
daddu t9, t5, a0
|
|
lq t5, 2208(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2256(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3456(t9)
|
|
sll r0, r0, 0
|
|
lq t8, 2768(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 3472(t9)
|
|
sll r0, r0, 0
|
|
lq t9, 2784(a0)
|
|
sq t4, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t5, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7
|
|
sq t9, 96(t3)
|
|
daddiu t3, t3, 112
|
|
sll r0, r0, 0
|
|
|
|
;; montage 13
|
|
lhu t5, 26(a3)
|
|
sll r0, r0, 0
|
|
lq t4, 2192(a0)
|
|
daddu t9, t5, a0
|
|
lq t5, 2208(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2256(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3456(t9)
|
|
sll r0, r0, 0
|
|
lq t8, 2800(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 3472(t9)
|
|
sll r0, r0, 0
|
|
lq t9, 2816(a0)
|
|
sq t4, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t5, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7
|
|
sq t9, 96(t3)
|
|
daddiu t3, t3, 112
|
|
sll r0, r0, 0
|
|
|
|
;; montage 14
|
|
lhu t5, 28(a3)
|
|
sll r0, r0, 0
|
|
lq t4, 2192(a0)
|
|
daddu t9, t5, a0
|
|
lq t5, 2208(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2256(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3456(t9)
|
|
sll r0, r0, 0
|
|
lq t8, 2832(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 3472(t9)
|
|
sll r0, r0, 0
|
|
lq t9, 2848(a0)
|
|
sq t4, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t5, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7
|
|
sq t9, 96(t3)
|
|
daddiu t3, t3, 112
|
|
sll r0, r0, 0
|
|
|
|
;; montage 15
|
|
lhu t5, 30(a3)
|
|
sll r0, r0, 0
|
|
lq t4, 2192(a0)
|
|
daddu t9, t5, a0
|
|
lq t5, 2208(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2256(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3456(t9)
|
|
sll r0, r0, 0
|
|
lq t8, 2864(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 3472(t9)
|
|
sll r0, r0, 0
|
|
lq t9, 2880(a0)
|
|
sq t4, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t5, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7
|
|
sq t9, 96(t3)
|
|
daddiu t3, t3, 112
|
|
|
|
daddiu t4, t2, -138
|
|
sll r0, r0, 0
|
|
blez t4, L229 ;; see if we need dma transfer
|
|
sll r0, r0, 0
|
|
|
|
B13:
|
|
lw t4, 8196(a0)
|
|
sll r0, r0, 0
|
|
B14:
|
|
L227:
|
|
lw t3, 0(t4) ;; dma wait
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t3, t3, 256
|
|
sll r0, r0, 0
|
|
beq t3, r0, L228
|
|
sll r0, r0, 0
|
|
|
|
B15:
|
|
sll r0, r0, 0
|
|
lw t3, 8160(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu t3, t3, 1
|
|
sll r0, r0, 0
|
|
sw t3, 8160(a0)
|
|
beq r0, r0, L227
|
|
sll r0, r0, 0
|
|
|
|
B16:
|
|
L228:
|
|
lw t3, 8152(a0) ;; dma buffer swap
|
|
sll r0, r0, 0
|
|
sw v1, 128(t4)
|
|
xori v1, v1, 4720
|
|
sw t3, 16(t4)
|
|
sll t5, t2, 4
|
|
addu t5, t3, t5
|
|
or t3, v1, r0
|
|
sw t2, 32(t4)
|
|
addiu t2, r0, 256
|
|
sw t2, 0(t4)
|
|
addiu t2, r0, 0
|
|
sw t5, 8152(a0)
|
|
sll r0, r0, 0
|
|
B17:
|
|
L229:
|
|
sll r0, r0, 0
|
|
lq t5, 1776(a0) ;; t5 = work.frame-tmpl[0]
|
|
sll r0, r0, 0
|
|
lq t6, 1792(a0) ;; t6 = work.frame-tmpl[1]
|
|
sll r0, r0, 0
|
|
lq t7, 1872(a0) ;; t7 = work.frames[1].ad[0] (frame)
|
|
sll r0, r0, 0
|
|
lq t8, 1888(a0) ;; t8 = work.frames[1].ad[1] (scissor, 0x3f)
|
|
sll r0, r0, 0
|
|
lq t9, 1904(a0) ;; t9 = work.frames[0].ad[2] (xyoffset)
|
|
sll r0, r0, 0
|
|
lq t4, 1920(a0) ;; t4 = work.frames[0].ad[3] (test)
|
|
|
|
sq t5, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t9, 64(t3)
|
|
daddiu t2, t2, 6
|
|
sq t4, 80(t3)
|
|
daddiu t3, t3, 96
|
|
sll r0, r0, 0
|
|
|
|
lq t5, 2224(a0) ;; t5 = mip-tmpl (different!)
|
|
sll r0, r0, 0
|
|
lq t6, 2240(a0) ;; t6 = mip-tmpl[2]
|
|
sll r0, r0, 0
|
|
lq t7, 3120(a0) ;; t7 = tex-data[0][0]
|
|
sll r0, r0, 0
|
|
lq t8, 3136(a0) ;; t8 = tex-data[0][1]
|
|
sll r0, r0, 0
|
|
lq t9, 3152(a0) ;; t9 = tex-data[0][2]
|
|
sll r0, r0, 0
|
|
lq ra, 2256(a0) ;; ra = color[0] = [0x80, 0x80, 0x80, 0x80]
|
|
sll r0, r0, 0
|
|
lq gp, 3360(a0) ;; gp = tex[0]
|
|
sll r0, r0, 0
|
|
lq s5, 2896(a0) ;; s5 = mip-data[0]
|
|
sll r0, r0, 0
|
|
lq s4, 3376(a0) ;; s4 = tex[1]
|
|
sll r0, r0, 0
|
|
|
|
lq t4, 2912(a0)
|
|
sq t5, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t9, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
sll r0, r0, 0
|
|
sq gp, 96(t3)
|
|
sll r0, r0, 0
|
|
sq s5, 112(t3)
|
|
sll r0, r0, 0
|
|
sq s4, 128(t3)
|
|
daddiu t2, t2, 10
|
|
sq t4, 144(t3)
|
|
daddiu t3, t3, 160
|
|
sll r0, r0, 0
|
|
lq t5, 1776(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 1792(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 1936(a0)
|
|
sll r0, r0, 0
|
|
lq t8, 1952(a0)
|
|
sll r0, r0, 0
|
|
lq t9, 1968(a0)
|
|
sll r0, r0, 0
|
|
lq t4, 1984(a0)
|
|
sq t5, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t9, 64(t3)
|
|
daddiu t2, t2, 6
|
|
sq t4, 80(t3)
|
|
daddiu t3, t3, 96
|
|
sll r0, r0, 0
|
|
lq t5, 2128(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2144(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 80(t1)
|
|
sll r0, r0, 0
|
|
lq t8, 96(t1)
|
|
sll r0, r0, 0
|
|
lq t9, 112(t1)
|
|
sll r0, r0, 0
|
|
lq ra, 128(t1)
|
|
sll r0, r0, 0
|
|
lq t4, 144(t1)
|
|
sq t5, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t9, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7
|
|
sq t4, 96(t3)
|
|
daddiu t3, t3, 112
|
|
sll r0, r0, 0
|
|
lq t5, 2192(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2208(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 2256(a0)
|
|
sll r0, r0, 0
|
|
lq t8, 3360(a0)
|
|
sll r0, r0, 0
|
|
lq t9, 3088(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 3360(a0)
|
|
sll r0, r0, 0
|
|
lq t4, 3104(a0)
|
|
sq t5, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t9, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
daddiu t2, t2, 7
|
|
sq t4, 96(t3)
|
|
daddiu t3, t3, 112
|
|
sll r0, r0, 0
|
|
lq t5, 1776(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 1792(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 2000(a0)
|
|
sll r0, r0, 0
|
|
lq t8, 2016(a0)
|
|
sll r0, r0, 0
|
|
lq t9, 2032(a0)
|
|
sll r0, r0, 0
|
|
lq t4, 2048(a0)
|
|
sq t5, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t9, 64(t3)
|
|
daddiu t2, t2, 6
|
|
sq t4, 80(t3)
|
|
daddiu t3, t3, 96
|
|
sll r0, r0, 0
|
|
lq t5, 2224(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2240(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3168(a0)
|
|
sll r0, r0, 0
|
|
lq t8, 3184(a0)
|
|
sll r0, r0, 0
|
|
lq t9, 3200(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 2272(a0)
|
|
sll r0, r0, 0
|
|
lq gp, 3360(a0)
|
|
sll r0, r0, 0
|
|
lq s5, 2928(a0)
|
|
sll r0, r0, 0
|
|
lq s4, 3392(a0)
|
|
sll r0, r0, 0
|
|
lq t4, 2944(a0)
|
|
sq t5, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t9, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
sll r0, r0, 0
|
|
sq gp, 96(t3)
|
|
sll r0, r0, 0
|
|
sq s5, 112(t3)
|
|
sll r0, r0, 0
|
|
sq s4, 128(t3)
|
|
daddiu t2, t2, 10
|
|
sq t4, 144(t3)
|
|
daddiu t3, t3, 160
|
|
sll r0, r0, 0
|
|
lq t5, 2224(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2240(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3216(a0)
|
|
sll r0, r0, 0
|
|
lq t8, 3232(a0)
|
|
sll r0, r0, 0
|
|
lq t9, 3248(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 2288(a0)
|
|
sll r0, r0, 0
|
|
lq gp, 3360(a0)
|
|
sll r0, r0, 0
|
|
lq s5, 2960(a0)
|
|
sll r0, r0, 0
|
|
lq s4, 3408(a0)
|
|
sll r0, r0, 0
|
|
lq t4, 2976(a0)
|
|
sq t5, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t9, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
sll r0, r0, 0
|
|
sq gp, 96(t3)
|
|
sll r0, r0, 0
|
|
sq s5, 112(t3)
|
|
sll r0, r0, 0
|
|
sq s4, 128(t3)
|
|
daddiu t2, t2, 10
|
|
sq t4, 144(t3)
|
|
daddiu t3, t3, 160
|
|
sll r0, r0, 0
|
|
lq t5, 2224(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2240(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3264(a0)
|
|
sll r0, r0, 0
|
|
lq t8, 3280(a0)
|
|
sll r0, r0, 0
|
|
lq t9, 3296(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 2304(a0)
|
|
sll r0, r0, 0
|
|
lq gp, 3360(a0)
|
|
sll r0, r0, 0
|
|
lq s5, 2992(a0)
|
|
sll r0, r0, 0
|
|
lq s4, 3424(a0)
|
|
sll r0, r0, 0
|
|
lq t4, 3008(a0)
|
|
sq t5, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t9, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
sll r0, r0, 0
|
|
sq gp, 96(t3)
|
|
sll r0, r0, 0
|
|
sq s5, 112(t3)
|
|
sll r0, r0, 0
|
|
sq s4, 128(t3)
|
|
daddiu t2, t2, 10
|
|
sq t4, 144(t3)
|
|
daddiu t3, t3, 160
|
|
sll r0, r0, 0
|
|
lq t5, 2224(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 2240(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 3312(a0)
|
|
sll r0, r0, 0
|
|
lq t8, 3328(a0)
|
|
sll r0, r0, 0
|
|
lq t9, 3344(a0)
|
|
sll r0, r0, 0
|
|
lq ra, 2320(a0)
|
|
sll r0, r0, 0
|
|
lq gp, 3360(a0)
|
|
sll r0, r0, 0
|
|
lq s5, 3024(a0)
|
|
sll r0, r0, 0
|
|
lq s4, 3440(a0)
|
|
sll r0, r0, 0
|
|
lq t4, 3040(a0)
|
|
sq t5, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t9, 64(t3)
|
|
sll r0, r0, 0
|
|
sq ra, 80(t3)
|
|
sll r0, r0, 0
|
|
sq gp, 96(t3)
|
|
sll r0, r0, 0
|
|
sq s5, 112(t3)
|
|
sll r0, r0, 0
|
|
sq s4, 128(t3)
|
|
daddiu t2, t2, 10
|
|
sq t4, 144(t3)
|
|
daddiu t3, t3, 160
|
|
sll r0, r0, 0
|
|
lq t5, 1776(a0)
|
|
sll r0, r0, 0
|
|
lq t6, 1792(a0)
|
|
sll r0, r0, 0
|
|
lq t7, 2064(a0)
|
|
sll r0, r0, 0
|
|
lq t8, 2080(a0)
|
|
sll r0, r0, 0
|
|
lq t9, 2096(a0)
|
|
sll r0, r0, 0
|
|
lq t4, 2112(a0)
|
|
sq t5, 0(t3)
|
|
sll r0, r0, 0
|
|
sq t6, 16(t3)
|
|
sll r0, r0, 0
|
|
sq t7, 32(t3)
|
|
sll r0, r0, 0
|
|
sq t8, 48(t3)
|
|
sll r0, r0, 0
|
|
sq t9, 64(t3)
|
|
daddiu t2, t2, 6
|
|
sq t4, 80(t3)
|
|
daddiu t3, t3, 96
|
|
sll r0, r0, 0
|
|
daddiu t2, t2, 1
|
|
sqc2 vf29, 0(t3)
|
|
daddiu t3, t3, 16
|
|
B18:
|
|
L230:
|
|
daddiu a2, a2, 16 ;; advance bucket
|
|
daddiu a3, a3, 32 ;; advange montage
|
|
daddiu t0, t0, -1 ;; decrement remaining bucket count.
|
|
lhu t4, 4(a2) ;; t4 = this-bucket.count (num tags?)
|
|
daddiu a1, a1, 4 ;; work-offset += 4
|
|
lhu t5, 12(a2) ;; t5 = this-bucket.count-scissor (ignore)
|
|
bgtz t0, L223 ;; go back
|
|
sll r0, r0, 0
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;; End near texture stuff
|
|
|
|
B19:
|
|
beq t2, r0, L233
|
|
sll r0, r0, 0
|
|
|
|
B20:
|
|
lw a1, 8196(a0)
|
|
sll r0, r0, 0
|
|
B21:
|
|
L231:
|
|
lw a2, 0(a1)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi a2, a2, 256
|
|
sll r0, r0, 0
|
|
beq a2, r0, L232
|
|
sll r0, r0, 0
|
|
|
|
B22:
|
|
sll r0, r0, 0
|
|
lw a2, 8160(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu a2, a2, 1
|
|
sll r0, r0, 0
|
|
sw a2, 8160(a0)
|
|
beq r0, r0, L231
|
|
sll r0, r0, 0
|
|
|
|
B23:
|
|
L232:
|
|
lw a2, 8152(a0)
|
|
sll r0, r0, 0
|
|
sw v1, 128(a1)
|
|
xori a3, v1, 4720
|
|
sw a2, 16(a1)
|
|
sll v1, t2, 4
|
|
addu v1, a2, v1
|
|
or a2, a3, r0
|
|
sw t2, 32(a1)
|
|
addiu a2, r0, 256
|
|
sw a2, 0(a1)
|
|
addiu a1, r0, 0
|
|
sw v1, 8152(a0)
|
|
sll r0, r0, 0
|
|
B24:
|
|
L233:
|
|
lw v1, 8196(a0)
|
|
sll r0, r0, 0
|
|
B25:
|
|
L234:
|
|
lw a1, 0(v1)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi a1, a1, 256
|
|
sll r0, r0, 0
|
|
beq a1, r0, L235
|
|
sll r0, r0, 0
|
|
|
|
B26:
|
|
sll r0, r0, 0
|
|
lw a1, 8160(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu a1, a1, 1
|
|
sll r0, r0, 0
|
|
sw a1, 8160(a0)
|
|
beq r0, r0, L234
|
|
sll r0, r0, 0
|
|
|
|
B27:
|
|
L235:
|
|
lw v1, 8152(a0)
|
|
sll r0, r0, 0
|
|
lw a0, 8148(a0)
|
|
sll r0, r0, 0
|
|
sw v1, 4(a0)
|
|
sll r0, r0, 0
|
|
or v1, r0, r0
|
|
or v0, r0, r0
|
|
ld ra, 0(sp)
|
|
lq gp, 48(sp)
|
|
lq s5, 32(sp)
|
|
lq s4, 16(sp)
|
|
jr ra
|
|
daddiu sp, sp, 64
|
|
|
|
sll r0, r0, 0
|
|
```
|
|
|
|
# Method 34
|
|
```
|
|
vf6, vf7, vf8, vf9, vf10 have shader-near.
|
|
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
lw a2, 4(a1) ;; a2 = dma ptr
|
|
lui v1, 4096
|
|
sw a1, 8148(a0) ;; stash dma buffer
|
|
sync.l
|
|
cache dxwbin a2, 0
|
|
sync.l
|
|
cache dxwbin a2, 1
|
|
sync.l
|
|
lui a3, 28672
|
|
ori a1, v1, 53248
|
|
vmaxw.xyzw vf11, vf0, vf0
|
|
ori v1, a3, 2720
|
|
sw r0, 1736(a0)
|
|
addiu t0, r0, 0
|
|
sw a1, 8196(a0)
|
|
or t1, v1, r0
|
|
sw a2, 8152(a0)
|
|
sll r0, r0, 0
|
|
lqc2 vf29, 1728(a0) ;; vf29 = ret-tmpl
|
|
or a1, a0, r0 ;; a1 is offset work
|
|
lw a2, 8284(a0) ;; a2 = work.hfragment.buckets-near
|
|
sll r0, r0, 0
|
|
lhu a3, 8302(a0) ;; a3 = work.hfragment.num-buckets-near
|
|
beq r0, r0, L195
|
|
lhu t2, 4(a2) ;; t2 = this-bucket.count
|
|
|
|
B1:
|
|
L188:
|
|
sll r0, r0, 0
|
|
lw t2, 8392(a1) ;; t2 = near-textures[bucket-idx]
|
|
beq t3, r0, L195 ;; skip if nothing in bucket.
|
|
sll r0, r0, 0
|
|
|
|
B2:
|
|
sll r0, r0, 0
|
|
sw t2, 1716(a0) ;; put near-textures in call
|
|
daddiu t2, t0, -226
|
|
sll r0, r0, 0
|
|
blez t2, L191 ;; maybe dma out
|
|
sll r0, r0, 0
|
|
|
|
B3: ;; dma wait
|
|
lw t2, 8196(a0)
|
|
sll r0, r0, 0
|
|
B4:
|
|
L189:
|
|
lw t1, 0(t2)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t1, t1, 256
|
|
sll r0, r0, 0
|
|
beq t1, r0, L190
|
|
sll r0, r0, 0
|
|
|
|
B5:
|
|
sll r0, r0, 0
|
|
lw t1, 8160(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu t1, t1, 1
|
|
sll r0, r0, 0
|
|
sw t1, 8160(a0)
|
|
beq r0, r0, L189
|
|
sll r0, r0, 0
|
|
|
|
B6:
|
|
L190: ;; dma swap
|
|
lw t1, 8152(a0)
|
|
sll r0, r0, 0
|
|
sw v1, 128(t2)
|
|
xori v1, v1, 4720
|
|
sw t1, 16(t2)
|
|
sll t3, t0, 4
|
|
addu t3, t1, t3
|
|
or t1, v1, r0
|
|
sw t0, 32(t2)
|
|
addiu t0, r0, 256
|
|
sw t0, 0(t2)
|
|
addiu t0, r0, 0
|
|
sw t3, 8152(a0)
|
|
sll r0, r0, 0
|
|
B7:
|
|
L191:
|
|
lq t2, 7584(a0) ;; t2 = call-abort-vu1
|
|
daddiu t0, t0, 1
|
|
sq t2, 0(t1)
|
|
daddiu t2, t1, 16
|
|
daddiu t1, t0, -215
|
|
sll r0, r0, 0
|
|
blez t1, L194
|
|
sll r0, r0, 0
|
|
|
|
B8:
|
|
lw t1, 8196(a0) ;; dma out of scratchpad if needed
|
|
sll r0, r0, 0
|
|
B9:
|
|
L192:
|
|
lw t2, 0(t1)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi t2, t2, 256
|
|
sll r0, r0, 0
|
|
beq t2, r0, L193
|
|
sll r0, r0, 0
|
|
|
|
B10:
|
|
sll r0, r0, 0
|
|
lw t2, 8160(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu t2, t2, 1
|
|
sll r0, r0, 0
|
|
sw t2, 8160(a0)
|
|
beq r0, r0, L192
|
|
sll r0, r0, 0
|
|
|
|
B11:
|
|
L193: ;; swap dma buffer
|
|
lw t2, 8152(a0)
|
|
sll r0, r0, 0
|
|
sw v1, 128(t1)
|
|
xori v1, v1, 4720
|
|
sw t2, 16(t1)
|
|
sll t3, t0, 4
|
|
addu t3, t2, t3
|
|
or t2, v1, r0
|
|
sw t0, 32(t1)
|
|
addiu t0, r0, 256
|
|
sw t0, 0(t1)
|
|
addiu t0, r0, 0
|
|
sw t3, 8152(a0)
|
|
sll r0, r0, 0
|
|
B12:
|
|
L194:
|
|
sll r0, r0, 0
|
|
lqc2 vf30, 1712(a0) ;; vf30 = call
|
|
sll r0, r0, 0
|
|
daddiu t0, t0, 1
|
|
sqc2 vf30, 0(t2)
|
|
daddiu t1, t2, 16
|
|
sll r0, r0, 0
|
|
lq t2, 2160(a0) ;; t2 = adgif2[0]
|
|
sll r0, r0, 0
|
|
lq t3, 2176(a0) ;; t3 = adgif2[1]
|
|
sq t2, 0(t1)
|
|
sll r0, r0, 0
|
|
sq t3, 16(t1)
|
|
sll r0, r0, 0
|
|
|
|
sqc2 vf6, 32(t1)
|
|
sll r0, r0, 0
|
|
sqc2 vf7, 48(t1)
|
|
sll r0, r0, 0
|
|
sqc2 vf8, 64(t1)
|
|
sll r0, r0, 0
|
|
sqc2 vf9, 80(t1)
|
|
sll r0, r0, 0
|
|
sqc2 vf10, 96(t1)
|
|
daddiu t0, t0, 8
|
|
sqc2 vf5, 112(t1) ;; plus the texflush!
|
|
daddiu t1, t1, 128
|
|
sll r0, r0, 0
|
|
lh t3, 6(a2) ;; t3 = vertex count
|
|
sll r0, r0, 0
|
|
lw t2, 0(a2) ;; t2 = bucket.next (vertex uploads for bucket)
|
|
dsll t4, t3, 1 ;; t4 = vertex-count * 2
|
|
sll r0, r0, 0
|
|
daddu t3, t4, t3 ;; t3 = vertex-count * 3 = 48 or 96
|
|
sll r0, r0, 0
|
|
daddu t5, t3, a0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
lq t3, 1552(t5) ;; 1648 or 1600
|
|
sll r0, r0, 0
|
|
lq t4, 1568(t5)
|
|
sll r0, r0, 0
|
|
lq t5, 1584(t5)
|
|
sq t3, 0(t1)
|
|
sll r0, r0, 0
|
|
sq t4, 16(t1)
|
|
sll r0, r0, 0
|
|
sq t5, 32(t1)
|
|
daddiu t0, t0, 3
|
|
sw t2, 4(t1)
|
|
daddiu t1, t1, 48
|
|
B13:
|
|
L195:
|
|
daddiu a2, a2, 16 ;; inc bucket
|
|
daddiu a1, a1, 4 ;; inc offset work
|
|
daddiu a3, a3, -1 ;; dec bucket count
|
|
lhu t3, 4(a2) ;; load count in bucket
|
|
bgtz a3, L188 ;; go back
|
|
sll r0, r0, 0
|
|
|
|
B14:
|
|
beq t0, r0, L198
|
|
sll r0, r0, 0
|
|
|
|
B15:
|
|
lw a1, 8196(a0)
|
|
sll r0, r0, 0
|
|
B16:
|
|
L196:
|
|
lw a2, 0(a1)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi a2, a2, 256
|
|
sll r0, r0, 0
|
|
beq a2, r0, L197
|
|
sll r0, r0, 0
|
|
|
|
B17:
|
|
sll r0, r0, 0
|
|
lw a2, 8160(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu a2, a2, 1
|
|
sll r0, r0, 0
|
|
sw a2, 8160(a0)
|
|
beq r0, r0, L196
|
|
sll r0, r0, 0
|
|
|
|
B18:
|
|
L197:
|
|
lw a2, 8152(a0)
|
|
sll r0, r0, 0
|
|
sw v1, 128(a1)
|
|
xori a3, v1, 4720
|
|
sw a2, 16(a1)
|
|
sll v1, t0, 4
|
|
addu v1, a2, v1
|
|
or a2, a3, r0
|
|
sw t0, 32(a1)
|
|
addiu a2, r0, 256
|
|
sw a2, 0(a1)
|
|
addiu a1, r0, 0
|
|
sw v1, 8152(a0)
|
|
sll r0, r0, 0
|
|
B19:
|
|
L198:
|
|
lw v1, 8196(a0)
|
|
sll r0, r0, 0
|
|
B20:
|
|
L199:
|
|
lw a1, 0(v1)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
andi a1, a1, 256
|
|
sll r0, r0, 0
|
|
beq a1, r0, L200
|
|
sll r0, r0, 0
|
|
|
|
B21:
|
|
sll r0, r0, 0
|
|
lw a1, 8160(a0)
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
sll r0, r0, 0
|
|
daddiu a1, a1, 1
|
|
sll r0, r0, 0
|
|
sw a1, 8160(a0)
|
|
beq r0, r0, L199
|
|
sll r0, r0, 0
|
|
|
|
B22:
|
|
L200:
|
|
lw v1, 8152(a0)
|
|
sll r0, r0, 0
|
|
lw a0, 8148(a0)
|
|
sll r0, r0, 0
|
|
sw v1, 4(a0)
|
|
sll r0, r0, 0
|
|
or v0, r0, r0
|
|
jr ra
|
|
daddu sp, sp, r0
|
|
|
|
``` |