Files
jak-project/docs/progress-notes/jak1/scratch/merc_asm.asm
T
water111 0fcc7eb8e9 [merc2] Support emerc (#2147)
This adds environment mapping support to `Merc2`, and turns it on for
Jak 1 and Jak 2.

- The performance is much better
- Jak 1 can be toggled back to the old behavior with `(set! *emerc-hack*
#f)`. The new environment mapping is identical to the old one everywhere
I checked.
- Jak 1 still falls back to generic for ripple/texscroll/blerc/eyes -
there's still no dynamic texture or vertex updating support. The eye
detection stuff will sometimes flag stuff as eyes which is not eyes,
which is fine, but means that generic will be used in some places where
emerc could be used. For example, the shiny plates on jak's arm will be
drawn with generic because jak has eyes.
- Jak 2 hasn't been checked super carefully against PCSX2 yet.
- Jak 2 still isn't technically using emerc, but instead putting emerc
models in the merc bucket.
- The interface to merc is a lot different now and totally custom
OpenGOAL DMA code. The original merc drawing asm doesn't run anymore.
- The FR3 format changed
- Something funky going on with foreground lighting in escape, but
doesn't seem to be related to this change?

Performance comparison, jak 1, in likely the most generic-merc heavy
spot:

![image](https://user-images.githubusercontent.com/48171810/213882718-feb2ab59-95a9-44a2-b0e5-95fba860c7b0.png)

![image](https://user-images.githubusercontent.com/48171810/213882736-8dbbf4c9-6bbf-4d0b-96ce-78d63274660c.png)
2023-01-22 18:30:31 -05:00

2332 lines
119 KiB
NASM

;; Register use (after init and effect setup)
;; to be extra annoying, they often stash stuff in
;; w (and sometimes z) and use xyz for other stuff.
;; vf01 = [lt0_dir.xyz, pfog0]
;; vf02 = [lt1_dir.xyz, fog-min]
;; vf03 = [lt2_dir.xyz, fog-max]
;; vf04 = [lt0_color]
;; vf05 = [lt1_color]
;; vf06 = [lt2_color]
;; vf07 = [lt_ambient]
;; vf17 = [2048, 255, -65537, xyz-add.x]
;; vf18 = [st-out-X, st-out-X, -65537, xyz-add.y] (X = a if xtop = 0, X = b otherwise)
;; vf19 = [st-magic, st-magic, -65537, xyz-add.z]
;; vf22 = hvdf-offset (does get set to others, but is always restored)
;; vf29 = [??, ??, ??, 0.003921569]
;; Low Memory use (after init and effect setup)
;; 1 - [adgif_giftag, use_mercprime]
;; 2 - hvdf-offset
;; 3 - [p0x, p1y, p2z, p2w] (note p2w, not p3w here!)
;; 4 - [p3x, p3y, p3z, p3w]
;; 5 - [p0x*sc, p1y*sc, p2z*sc, p2w*sc] (where sc is the xyz-scale of the header)
;; 132 - not double buffered, lights + merc-ctrl-header (per ctrl)
;; 132
;; 133 light 1 dir, w has flags (0x44 for ignore alpha, )
;; 134 light 2 dir, w has fade out parameter (how much to fade out)
;; 139 - [xyz_scale, st-magic, st-out-a, st-out-b]
;; 140 - not double buffered, header (per effect)
;; xtop + 140 + st-out
;; this contains the uploaded fp data.
;; the first
;; initialization - this runs after the merc program is uploaded and the vu1 low memory
;; block is uploaded. It sets constant registers and stashes some stuff in memory.
;; - set vf01.w to pfog0
lq.xyzw vf01, 7(vi00) | nop ;; vf01 = fog
lq.xyzw vf25, 3(vi00) | nop ;; vf25 = perspective.row0
lq.xyzw vf26, 4(vi00) | nop ;; vf26 = perspective.row1
lq.xyzw vf27, 5(vi00) | nop ;; vf27 = perspective.row2
lq.xyzw vf28, 6(vi00) | nop ;; vf28 = perspective.row3
mr32.xyzw vf01, vf01 | nop ;; rotate pfog0 into vf01.w
move.y vf25, vf26 | nop ;; setting up vf25
move.zw vf25, vf27 | nop ;; same
sq.xyzw vf25, 3(vi00) | nop ;; setting up low 3.
2048.0 | nop :i ;; setup I
255.0 | maxi.x vf17, vf00, I :i ;; setup vf17
-65537.0 | maxi.y vf17, vf00, I :i ;; setup vf17
mr32.xyzw vf02, vf01 | minii.z vf17, vf00, I ;; vf17, setup vf02.w
lq.xyzw vf22, 2(vi00) | minii.z vf18, vf00, I ;; vf18.z, vf22 as hvdf-offset
0.003921569 | minii.z vf19, vf00, I :i ;; vf19.z
sq.xyzw vf28, 4(vi00) | minii.w vf29, vf00, I :e ;; setup low 4
mr32.xyzw vf03, vf02 | nop ;; set up vf03
;; the 17/20 entry points are the same as 32/35, but should be used
;; on the first frag of an effect. they set up lights.
;; enter 17 (setup lights, with merc "prime")
iaddi vi07, vi00, 0x1 | nop ;; set vi07 mercprime
b L2 | nop
isw.w vi07, 1(vi00) | nop ;; leave behind mercprime flag.
ENTER_20: ;; (setup lights, no merc prime)
iaddi vi07, vi00, 0x0 | nop ;; no mercprime for us today.
L2: ;; (setup lights common)
lq.xyzw vf25, 139(vi00) | nop ;; vf25 = merc-ctrl-header
lq.xyzw vf26, 3(vi00) | nop ;; vf26 = persp-diag
lq.xyz vf01, 132(vi00) | nop ;; setup vf01 light 0 dir
lq.xyz vf02, 133(vi00) | nop ;; setup vf02 light 1 dir
lq.xyz vf03, 134(vi00) | addy.xy vf19, vf00, vf25 ;; vf03 light setup, st-magic
lq.xyzw vf04, 135(vi00) | mulx.xyzw vf26, vf26, vf25 ;; scaled persp diag
lq.xyzw vf05, 136(vi00) | nop
lq.xyzw vf06, 137(vi00) | nop
lq.xyzw vf07, 138(vi00) | nop
b L5 | nop
sq.xyzw vf26, 5(vi00) | nop ;; stash persp diag scaled
;; 32/35 are prime/normal entry points for normal drawing.
ENTER_32: ;; (run, use prev lights, with merc "prime")
iaddi vi07, vi00, 0x1 | nop ;; vi07 for mercprime
b L5 | nop
isw.w vi07, 1(vi00) | nop ;; stash mercprime flag
ENTER_35:
iaddi vi07, vi00, 0x0 | nop
L5: ;; common effect drawing entry point.
;; all draw paths go to here.
lq.xyzw vf28, 139(vi00) | minix.xyzw vf15, vf00, vf00 ;; vf28 = mch, vf15 = [0, 0, 0, 0]
xtop vi15 | nop ;; vi15 = 0 (output buffer)
iaddiu vi12, vi15, 0x8c | nop ;; vi12 = xtop + 140 (merc-byte-header, u4)
ibeq vi00, vi15, L6 | nop ;; branch if output buffer a (0)
ilwr.w vi03, vi12 | maxz.xy vf18, vf00, vf28 ;; set vf18.xy = [st-out-a, st-out-a] (for a buffer)
nop | maxw.xy vf18, vf00, vf28 ;; set vf18.xy = [st-out-b, st-out-b] (for b buffer)
L6:
ilw.w vi10, 133(vi00) | nop ;; vi10 = fade out flags
iaddiu vi15, vi15, 0x173 | nop ;; vi15 = xtop + 371
ilw.y vi02, 2(vi12) | nop ;; vi02 = strip-len
lq.xyzw vf14, 0(vi00) | nop ;; vf14 = tri-strip-gif-tag
ibeq vi00, vi10, L7 | nop ;; branch to L7 if no fade out.
iadd vi03, vi03, vi12 | nop ;; st-output location = {st-out-a, st-out-b} + xtop + 140
;; modify vf14 to have :abe, setup constants for fadeout.
mr32.xyzw vf27, vf14 | nop ;; vf27 = [yzwx] of the tri-strip-gif-tag
ilw.w vi11, 134(vi00) | nop ;; vi11 = fade-out parameter
iaddiu vi13, vi00, 0x42 | nop ;; vi13 = 0x42
mr32.y vf14, vf27 | nop ;; replace y of tag with w. (enables abe in the gs-prim)
;; next, we set up the memory layout of the output buffer.
;; the output buffer has two (poorly name) parts: "strip" and "shader".
;; the "strip" part will continue using the shader of the previous fragment.
;; it has a single tag. This "strip" part be left out, if desired. It is always first.
;; the "strip-len" is how large this data is.
;; the "shader" part contains a series of [shader, triangles] groups.
;; it sets the shader settings, then draws stuff.
;; the shader-cnt is how many [shader, triangle] groups there are.
;; the sizes are stored in the adgif data itself
;; the blocks below place the shaders and gif tags in memory, setting nloops and eops.
L7:
ilwr.w vi09, vi03 | nop ;; vi09 = fp-header u8's [shader-cnt, kick-off, kick-step, hword-cnt]
lqi.xyzw vf27, vi03 | nop ;; vf27 = xyz-add
ilw.x vi04, 1(vi12) | nop ;; vi04 = mat1-cnt
iaddiu vi05, vi00, 0x7f | addw.xyz vf15, vf15, vf00 ;; vf15 = [1, 1, 1, 0], vi05 = 0x7f
iand vi09, vi09, vi05 | nop ;; mask to get vi09 = shader-cnt
ilw.y vi06, 1(vi12) | miniz.w vf19, vf00, vf27 ;; set add, vi06 = mat2-cnt
ibeq vi00, vi02, L9 | miniy.w vf18, vf00, vf27 ;; skip to L9 if strip-len is 0
ilwr.z vi01, vi12 | minix.w vf17, vf00, vf27 ;; vi01 = lump-off
;; we have strip
ibne vi00, vi09, L8 | nop ;; goto L8 if we have nonzero shader-cnt
sq.yzw vf14, 0(vi15) | nop ;; store giftag (only upper 96 bits)
;; we have strip, but no shader. set eop.
iaddiu vi02, vi02, 0x4000 | nop ;; build the first 32-bits, strip-len + eop flag
iaddiu vi02, vi02, 0x4000 | nop ;; imm 0x8000 doesn't fit, have to add 2x.
iswr.x vi02, vi15 | nop ;; store nloop = strip-len, eop.
b L12 | nop ;; skip shader setup!
nop | nop
L8:
iswr.x vi02, vi15 | nop ;; nonzero shader and nonzero strip. set nloop on the strip tag, but not eop.
L9:
lq.xyzw vf13, 1(vi00) | nop ;; vf13 = adgif gif tag.
L10: ;; shader loop
ilwr.w vi02, vi03 | nop ;; vi02 = shader control word 0 (dest offset)
lqi.xyzw vf08, vi03 | nop ;; load shader data
lqi.xyzw vf09, vi03 | nop
lqi.xyzw vf10, vi03 | nop
lqi.xyzw vf11, vi03 | nop
lqi.xyzw vf12, vi03 | nop
iadd vi02, vi02, vi15 | nop ;; compute destination
mtir vi08, vf09.w | nop ;; vi08 = shader control word 1 ()
sqi.xyzw vf13, vi02 | nop ;; store giftag
sqi.xyzw vf08, vi02 | nop ;; store shader0/5
sqi.xyzw vf09, vi02 | nop ;; store shader1/5
mfir.x vf14, vi08 | nop ;; vf14 = post-shader giftag lower-32
sqi.xyzw vf10, vi02 | nop ;; store shader2/5
sqi.xyzw vf11, vi02 | nop ;; store shader3/5
ibeq vi00, vi10, L11 | nop ;; goto L11 if no fadeout
sqi.xyzw vf12, vi02 | nop ;; store shader4/5
;; fade out setup (todo). it just modifies shaders
mtir vi14, vf12.z | nop
isw.x vi10, -1(vi02) | nop
ibeq vi14, vi13, L11 | nop
isw.y vi11, -1(vi02) | nop
ilw.x vi13, -4(vi02) | nop
isubiu vi14, vi00, 0x1d | nop
iand vi13, vi13, vi14 | nop
iaddi vi13, vi13, 0xc | nop
isw.x vi13, -4(vi02) | nop
iaddiu vi13, vi00, 0x42 | nop
isw.z vi13, -1(vi02) | nop
;; loop!
L11:
ibgtz vi08, L10 | nop ;; cool trick, eop is the sign bit here.
sq.xyzw vf14, 0(vi02) | nop
;; end of shader and strip setup.
;; matrix crap 1
L12:
lq.xyzw vf28, 3(vi00) | nop ;; vf28 = persp-diag
ilw.y vi08, 3(vi12) | nop ;; vi08 = mat-slot.0
lq.xyzw vf16, 5(vi00) | nop ;; vf16 = scaled-persp-diag
lq.xyzw vf20, 4(vi00) | nop ;; vf20 = persp-off
ilw.z vi09, 3(vi12) | mul.xyzw vf27, vf28, vf15 ;; vf27 = [pdx, pdy, pdz, 0], vi09 = mat-slot.1
ior vi11, vi08, vi00 | mul.xyzw vf28, vf28, vf00 ;; vf28 = [0, 0, 0, pdw], vi11 = vi08 = mat-slot.0
ibeq vi00, vi08, L14 | mul.xyzw vf15, vf16, vf15 ;; vf15 = [spdx, spdy, spdz, 0], skip if slot = 0
iaddi vi13, vi12, 0x3 | mul.xyzw vf16, vf16, vf00 ;; vi13 = mat-slot-ptr, vf16 = [0, 0, 0, spdw]
;; pipelined matrix thing
;; multiply matrices and store them back
;; run until we get a slot of 0.
;; mula.xyzw ACC, vf15, vf08
;; maddz.xyzw vf09, vf16, vf08
;; mula.xyzw ACC, vf15, vf10
;; maddz.xyzw vf11, vf16, vf10
;; mula.xyzw ACC, vf15, vf12
;; maddz.xyzw vf13, vf16, vf12
;; addax.xyzw vf20, vf00
;; madda.xyzw ACC, vf27, vf25
;; maddz.xyzw vf26, vf28, vf25
L13:
lq.xyzw vf08, 0(vi08) | addax.xyzw vf20, vf00
lq.xyzw vf10, 1(vi08) | madda.xyzw ACC, vf27, vf25
lq.xyzw vf12, 2(vi08) | maddz.xyzw vf26, vf28, vf25
lq.xyzw vf25, 3(vi08) | nop
sq.xyzw vf09, 0(vi11) | mula.xyzw ACC, vf15, vf08
sq.xyzw vf11, 1(vi11) | maddz.xyzw vf09, vf16, vf08
sq.xyzw vf13, 2(vi11) | mula.xyzw ACC, vf15, vf10
sq.xyzw vf26, 3(vi11) | maddz.xyzw vf11, vf16, vf10
ibeq vi00, vi08, L14 | mula.xyzw ACC, vf15, vf12
ilwr.w vi10, vi13 | maddz.xyzw vf13, vf16, vf12
lq.xyzw vf08, 0(vi09) | addax.xyzw vf20, vf00
lq.xyzw vf10, 1(vi09) | madda.xyzw ACC, vf27, vf25
lq.xyzw vf12, 2(vi09) | maddz.xyzw vf26, vf28, vf25
lq.xyzw vf25, 3(vi09) | nop
sq.xyzw vf09, 0(vi08) | mula.xyzw ACC, vf15, vf08
sq.xyzw vf11, 1(vi08) | maddz.xyzw vf09, vf16, vf08
sq.xyzw vf13, 2(vi08) | mula.xyzw ACC, vf15, vf10
sq.xyzw vf26, 3(vi08) | maddz.xyzw vf11, vf16, vf10
ibeq vi00, vi09, L14 | mula.xyzw ACC, vf15, vf12
ilw.x vi11, 1(vi13) | maddz.xyzw vf13, vf16, vf12
lq.xyzw vf08, 0(vi10) | addax.xyzw vf20, vf00
lq.xyzw vf10, 1(vi10) | madda.xyzw ACC, vf27, vf25
lq.xyzw vf12, 2(vi10) | maddz.xyzw vf26, vf28, vf25
lq.xyzw vf25, 3(vi10) | nop
sq.xyzw vf09, 0(vi09) | mula.xyzw ACC, vf15, vf08
sq.xyzw vf11, 1(vi09) | maddz.xyzw vf09, vf16, vf08
sq.xyzw vf13, 2(vi09) | mula.xyzw ACC, vf15, vf10
sq.xyzw vf26, 3(vi09) | maddz.xyzw vf11, vf16, vf10
ibeq vi00, vi10, L14 | mula.xyzw ACC, vf15, vf12
ilw.y vi08, 1(vi13) | maddz.xyzw vf13, vf16, vf12
lq.xyzw vf08, 0(vi11) | addax.xyzw vf20, vf00
lq.xyzw vf10, 1(vi11) | madda.xyzw ACC, vf27, vf25
lq.xyzw vf12, 2(vi11) | maddz.xyzw vf26, vf28, vf25
lq.xyzw vf25, 3(vi11) | nop
sq.xyzw vf09, 0(vi10) | mula.xyzw ACC, vf15, vf08
sq.xyzw vf11, 1(vi10) | maddz.xyzw vf09, vf16, vf08
sq.xyzw vf13, 2(vi10) | mula.xyzw ACC, vf15, vf10
sq.xyzw vf26, 3(vi10) | maddz.xyzw vf11, vf16, vf10
iaddi vi13, vi13, 0x1 | nop
ibne vi00, vi11, L13 | mula.xyzw ACC, vf15, vf12
ilwr.z vi09, vi13 | maddz.xyzw vf13, vf16, vf12
;; end matrix setup
;; the L14 -> L26 area handles mat1s.
;; it appears to set vi03 as the rgba reading pointer
;; and vi04 as the end of mat1's rgba (poniter to last, not one past the end)
;; and vi06 as the end of mat2's rgba
;; and vi07 as the end of mat3's rgba
L14:
ilw.x vi02, 3(vi12) | nop ;; vi02 = perc-off
ibeq vi00, vi04, L26 | nop ;; goto L26 if mat1 count is 0
iadd vi01, vi01, vi12 | nop ;; vi01 = lump.
ilwr.x vi08, vi01 | nop ;; vi08 = lump[0].x = mat-0?
lqi.xyzw vf08, vi01 | nop ;; vf08 = lump[0] = [mat0, mat1, nrmx, posx]?
lqi.xyzw vf11, vi01 | nop ;; vf11 = lump[1] = [dst0, dst1, nrmy, posy]?
lqi.xyzw vf14, vi01 | nop ;; vf14 = lump[2] = [texs, text, nrmz, posz]?
lq.xyz vf29, 4(vi08) | nop ;; vf29 = [nmat0x, nmat0y, nmat0z, 0.003921569]
lq.xyz vf30, 5(vi08) | add.zw vf08, vf08, vf17 ;; add to nrm and pos, keep loading nmat (w is ? here)
lq.xyzw vf31, 6(vi08) | add.xyzw vf11, vf11, vf18 ;; lump unpack and add
iaddi vi04, vi04, -0x1 | add.xyzw vf14, vf14, vf19 ;; lump unpack and add, subtract 1 from mat1 count
iadd vi02, vi02, vi12 | nop ;; vi02 = perc
;; right does matrix mul with nmat and the vertex.
;; it rotates the normal
;; left lqi's from perc, unpacks dst0, dst1 to vi10 and vi13
lqi.xyzw vf24, vi02 | mulaz.xyzw ACC, vf29, vf08
mtir vi10, vf11.x | maddaz.xyzw ACC, vf30, vf11
mtir vi13, vf11.y | maddz.xyz vf11, vf31, vf14
;; vf25, vf26, vf27, vf28 is the tmat
lq.xyzw vf25, 0(vi08) | nop
lq.xyzw vf26, 1(vi08) | itof0.xyzw vf24, vf24 ;; perc to floats: no idea what this is yet.
lq.xyzw vf27, 2(vi08) | nop
erleng.xyz P, vf11 | nop ;; p = normal length.
lq.xyzw vf28, 3(vi08) | mulaw.xyzw ACC, vf25, vf08 ;; transform point, keep loading tmat
ior vi15, vi07, vi00 | maddaw.xyzw ACC, vf26, vf11 ;; vi15 = using mercprime
mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14 ;; vf14.z = 1. (clears nrmz)
lqi.xyzw vf09, vi01 | nop ;; vf09 = [mat0, mat1, nrmx, posx]? (P1)
ilwr.y vi03, vi12 | nop ;; vi03 = rgba-off
ilw.z vi07, 1(vi12) | nop ;; vi07 = mat3-cnt (why.....)
lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28 ;; P1 vert load | finish xf pt
lqi.xyzw vf15, vi01 | nop ;; P1 vert load
mtir vi08, vf09.x | nop ;; P1 mat0
ibeq vi00, vi15, L15 | nop
iadd vi03, vi03, vi12 | nop ;; vi03 = rgba
;; only if merc-prime
nop | miniw.w vf08, vf08, vf01
L15:
;; rhs is lump adding
div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17 ;; perspective divide!
iadd vi04, vi04, vi03 | add.xyzw vf12, vf12, vf18 ;; vi04 = rgba + mat1-cnt - 1 (??)
;; note: the -1 is because the last vertex is handled
lq.xyz vf29, 4(vi08) | add.xyzw vf15, vf15, vf19 ;; P1 load nmat | P1 lump add v2
lq.xyz vf30, 5(vi08) | nop ;; P1 load nmat
iadd vi06, vi06, vi04 | nop ;; vi06 = rgba + mat1-cnt + mat2-cnt - 1
lq.xyzw vf31, 6(vi08) | nop ;; p1 load mat
lq.xyzw vf25, 0(vi08) | nop ;; p1 load mat
lq.xyzw vf26, 1(vi08) | mul.xyz vf08, vf08, Q ;; p1 load mat | perspective multiply
mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q ;; p1 get dst | vf14 = [s*Q, t*Q, Q, posz*Q]
mtir vi14, vf12.y | nop ;; p1 get dst
lq.xyzw vf27, 2(vi08) | nop ;; p1 load mat
lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22 ;; load rgba, hvdf offset
;; rhs is p1's normal xform
iadd vi07, vi07, vi06 | mulaz.xyzw ACC, vf29, vf09 ;; vi07 = rgba + mat1-cnt + mat2-cnt + mat3-cnt - 1
lq.xyzw vf28, 3(vi08) | maddaz.xyzw ACC, vf30, vf12 ;;
mfp.w vf20, P | maddz.xyz vf12, vf31, vf15 ;; vf20.w = normal length
nop | nop
1024.0 | miniw.w vf08, vf08, vf03 :i ;; fog max
ibne vi00, vi15, L82 | mulaw.xyzw ACC, vf25, vf09 ;; if mercprime, goto L82 | rhs is p1
ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20 ;; vi09 = p0 vtx's mat1 | normalization of normal
erleng.xyz P, vf12 | nop ;; p1's nrm length
nop | maddaw.xyzw ACC, vf26, vf12 ;; p1 nrm xf
mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15 ;; p1
lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11 ;; dot with light dir
ibne vi04, vi03, L17 | madday.xyzw ACC, vf02, vf11 ;; branch to L17 if not done
nop | maddz.xyzw vf11, vf03, vf11
ibne vi06, vi03, L31 | nop ;; branch to L31 if mat2's can be done
nop | nop
b L67 | nop ;; go to mat3
nop | nop
;; pipelined mat1 loop here
L16:
lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11
sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11
sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11
L17: ;; entry from above.
lqi.xyzw vf13, vi01 | add.xyzw vf09, vf09, vf28 ;; all p1
lqi.xyzw vf16, vi01 | maxw.w vf08, vf08, vf02 ;; p1 | fog min
mtir vi08, vf10.x | itof0.xyzw vf23, vf23 ;; rgba to float
ilw.y vi09, -9(vi01) | maxx.xyzw vf11, vf11, vf00 ;; vi09 = mat1 | light clamp
div Q, vf01.w, vf09.w | add.zw vf10, vf10, vf17 ;; pipe 1
move.xyzw vf21, vf08 | add.xyzw vf13, vf13, vf18 ;; move | pipe1
lq.xyz vf29, 4(vi08) | add.xyzw vf16, vf16, vf19 ;; pipe | pipe
lq.xyz vf30, 5(vi08) | mulax.xyzw ACC, vf04, vf11 ;; more lights
ibgtz vi09, L18 | madday.xyzw ACC, vf05, vf11
lq.xyzw vf31, 6(vi08) | maddaz.xyzw ACC, vf06, vf11
nop | addx.w vf21, vf21, vf17
L18:
lq.xyzw vf25, 0(vi08) | maddw.xyzw vf11, vf07, vf00 ;; p1 | add ambient
lq.xyzw vf26, 1(vi08) | mul.xyz vf09, vf09, Q ;; p | p
mtir vi12, vf13.x | mul.xyzw vf15, vf15, Q ;; p | p
mtir vi15, vf13.y | ftoi4.xyzw vf21, vf21 ;; p | position ftoi
lq.xyzw vf27, 2(vi08) | mul.xyzw vf11, vf11, vf23 ;; p | vertex coloring
lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22
ibne vi00, vi09, L19 | mulaz.xyzw ACC, vf29, vf10
sq.xyzw vf21, 2(vi10) | maddaz.xyzw ACC, vf30, vf13
nop | ftoi4.xyzw vf21, vf08
L19:
mfp.w vf20, P | maddz.xyz vf13, vf31, vf16
sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17
sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03
sq.xyzw vf21, 2(vi13) | mulaw.xyzw ACC, vf25, vf10
lq.xyzw vf28, 3(vi08) | mulw.xyzw vf12, vf12, vf20
erleng.xyz P, vf13 | ftoi0.xyzw vf11, vf11
;; branch to end (first version in this loop)
ibne vi04, vi03, L20 | maddaw.xyzw ACC, vf26, vf13
mr32.z vf16, vf00 | maddw.xyzw vf10, vf27, vf16
ibne vi06, vi03, L36 | nop ;; branch if there's mat2's to do
ilw.y vi09, -6(vi01) | nop ;; pipeline "exiting"
ibne vi07, vi03, L72 | nop
nop | nop
b L143 | nop
nop | nop
L20:
lqi.xyzw vf08, vi01 | mulax.xyzw ACC, vf01, vf12 ;;
sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12 ;;
sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12 ;;
lqi.xyzw vf11, vi01 | add.xyzw vf10, vf10, vf28 ;;
lqi.xyzw vf14, vi01 | maxw.w vf09, vf09, vf02 ;;
mtir vi08, vf08.x | itof0.xyzw vf23, vf23 ;;
ilw.y vi09, -9(vi01) | maxx.xyzw vf12, vf12, vf00 ;;
div Q, vf01.w, vf10.w | add.zw vf08, vf08, vf17 ;;
move.xyzw vf21, vf09 | add.xyzw vf11, vf11, vf18 ;;
lq.xyz vf29, 4(vi08) | add.xyzw vf14, vf14, vf19
lq.xyz vf30, 5(vi08) | mulax.xyzw ACC, vf04, vf12 ;;
ibgtz vi09, L21 | madday.xyzw ACC, vf05, vf12 ;;
lq.xyzw vf31, 6(vi08) | maddaz.xyzw ACC, vf06, vf12 ;;
nop | addx.w vf21, vf21, vf17 ;;
L21:
lq.xyzw vf25, 0(vi08) | maddw.xyzw vf12, vf07, vf00 ;;
lq.xyzw vf26, 1(vi08) | mul.xyz vf10, vf10, Q ;;
mtir vi10, vf11.x | mul.xyzw vf16, vf16, Q ;;
mtir vi13, vf11.y | ftoi4.xyzw vf21, vf21 ;;
lq.xyzw vf27, 2(vi08) | mul.xyzw vf12, vf12, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22
ibne vi00, vi09, L22 | mulaz.xyzw ACC, vf29, vf08
sq.xyzw vf21, 2(vi11) | maddaz.xyzw ACC, vf30, vf11 ;;
nop | ftoi4.xyzw vf21, vf09
L22:
mfp.w vf20, P | maddz.xyz vf11, vf31, vf14 ;;
sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17 ;;
sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03 ;;
sq.xyzw vf21, 2(vi14) | mulaw.xyzw ACC, vf25, vf08 ;;
lq.xyzw vf28, 3(vi08) | mulw.xyzw vf13, vf13, vf20 ;;
erleng.xyz P, vf11 | ftoi0.xyzw vf12, vf12 ;;
ibne vi04, vi03, L23 | maddaw.xyzw ACC, vf26, vf11
mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14
ibne vi06, vi03, L41 | nop
ilw.y vi09, -6(vi01) | nop
ibne vi07, vi03, L77 | nop
nop | nop
b L153 | nop
nop | nop
L23:
lqi.xyzw vf09, vi01 | mulax.xyzw ACC, vf01, vf13 ;;
sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13 ;;
sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13 ;;
lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28
lqi.xyzw vf15, vi01 | maxw.w vf10, vf10, vf02 ;;
mtir vi08, vf09.x | itof0.xyzw vf23, vf23 ;;
ilw.y vi09, -9(vi01) | maxx.xyzw vf13, vf13, vf00
div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17
move.xyzw vf21, vf10 | add.xyzw vf12, vf12, vf18 ;;
lq.xyz vf29, 4(vi08) | add.xyzw vf15, vf15, vf19
lq.xyz vf30, 5(vi08) | mulax.xyzw ACC, vf04, vf13 ;;
ibgtz vi09, L24 | madday.xyzw ACC, vf05, vf13 ;;
lq.xyzw vf31, 6(vi08) | maddaz.xyzw ACC, vf06, vf13 ;;
nop | addx.w vf21, vf21, vf17 ;;
L24:
lq.xyzw vf25, 0(vi08) | maddw.xyzw vf13, vf07, vf00
lq.xyzw vf26, 1(vi08) | mul.xyz vf08, vf08, Q
mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q
mtir vi14, vf12.y | ftoi4.xyzw vf21, vf21 ;;
lq.xyzw vf27, 2(vi08) | mul.xyzw vf13, vf13, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22
ibne vi00, vi09, L25 | mulaz.xyzw ACC, vf29, vf09
sq.xyzw vf21, 2(vi12) | maddaz.xyzw ACC, vf30, vf12
nop | ftoi4.xyzw vf21, vf10
L25:
mfp.w vf20, P | maddz.xyz vf12, vf31, vf15
sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17
sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03
sq.xyzw vf21, 2(vi15) | mulaw.xyzw ACC, vf25, vf09
lq.xyzw vf28, 3(vi08) | mulw.xyzw vf11, vf11, vf20
erleng.xyz P, vf12 | ftoi0.xyzw vf13, vf13
ibne vi04, vi03, L16 | maddaw.xyzw ACC, vf26, vf12
mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15
ibne vi06, vi03, L30 | nop
ilw.y vi09, -6(vi01) | nop
ibne vi07, vi03, L66 | nop
nop | nop
b L163 | nop
nop | nop
L26: ;; pipeline startup for mat2's (assuming you had no mat1's to get things started)
ibeq vi00, vi06, L61 | nop ;; goto L61 if no mat2's
iadd vi02, vi02, vi12 | nop ;; compute perc offset
lqi.xyzw vf08, vi01 | nop ;; vf08 = vtx0 = [mat0, mat1, nrmx, posx]
lqi.xyzw vf24, vi02 | nop ;; vf24 = perc
lqi.xyzw vf11, vi01 | nop ;; vf11 = vtx1 = [dst0, dst1, nrmy, posy]
lqi.xyzw vf14, vi01 | nop ;; vf14 = vtx2 = [texs, text, nrmz, posz]
mtir vi10, vf08.x | nop ;; vi10 = mat0
mtir vi13, vf08.y | itof0.xyzw vf24, vf24 ;; vi13 = mat1 | vf24 = itof0(perc)
iaddi vi06, vi06, -0x1 | add.zw vf08, vf08, vf17 ;; dec count | lump offset
nop | add.xyzw vf11, vf11, vf18 ;; lump offset
iand vi10, vi10, vi05 | add.xyzw vf14, vf14, vf19 ;; vi10 = mat0 & 0x7f | lump offset
nop | mulw.xyzw vf24, vf24, vf29 ;; scale perc
iand vi13, vi13, vi05 | nop ;; vi13 = mat1 & 0x7f
;; left col is loading matrices, right col is multiplication by perc.
lq.xyzw vf20, 0(vi10) | nop
lq.xyzw vf25, 0(vi13) | nop
lq.xyzw vf23, 1(vi10) | nop
lq.xyzw vf26, 1(vi13) | nop
lq.xyzw vf20, 2(vi10) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf27, 2(vi13) | maddy.xyzw vf25, vf25, vf24
lq.xyzw vf23, 3(vi10) | mulax.xyzw ACC, vf23, vf24
lq.xyzw vf28, 3(vi13) | maddy.xyzw vf26, vf26, vf24
lq.xyzw vf20, 4(vi10) | mulax.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi13) | maddy.xyzw vf27, vf27, vf24
lq.xyzw vf23, 5(vi10) | mulax.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi13) | maddy.xyzw vf28, vf28, vf24
lq.xyzw vf20, 6(vi10) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf31, 6(vi13) | maddy.xyz vf29, vf29, vf24
mtir vi10, vf11.x | mulax.xyzw ACC, vf23, vf24
mtir vi13, vf11.y | maddy.xyz vf30, vf30, vf24
nop | mulax.xyzw ACC, vf20, vf24
nop | maddy.xyzw vf31, vf31, vf24 ;; last perc multiply
nop | mulaz.xyzw ACC, vf29, vf08 ;; rotate normal
nop | maddaz.xyzw ACC, vf30, vf11
nop | maddz.xyz vf11, vf31, vf14
nop | nop
nop | nop
nop | mulaw.xyzw ACC, vf25, vf08 ;; xf point
iaddiu vi08, vi00, 0x243 | nop ;; vi08 = 0x243 = 579
erleng.xyz P, vf11 | nop ;; length of normal
ior vi15, vi07, vi00 | maddaw.xyzw ACC, vf26, vf11 ;; vi15 = mercprimt | xf point
mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14 ;; set vf14.z = 1.0 | xf point
lqi.xyzw vf09, vi01 | nop ;; pipe |
ilwr.y vi03, vi12 | nop ;; vi03 = rgba-off
ilw.z vi07, 1(vi12) | nop ;; vi07 = mat3-cnt
lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28 ;; pipe | xf point
lqi.xyzw vf15, vi01 | nop ;; pipe
mtir vi11, vf09.x | nop ;; pipe
ibeq vi00, vi15, L27 | nop ;; goto L27 if no merc-prim
mtir vi14, vf09.y | nop ;; pipe
iaddiu vi08, vi00, 0x539 | miniw.w vf08, vf08, vf01 ;; ONLY RUN IF MERCPRIME
L27:
div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17 ;; perspective divide | pipe
iadd vi03, vi03, vi12 | add.xyzw vf12, vf12, vf18 ;; rgba off | pipe
iand vi11, vi11, vi05 | add.xyzw vf15, vf15, vf19 ;; pipe | pipe
iadd vi06, vi06, vi03 | nop ;; end addr calc1
iadd vi07, vi07, vi06 | nop ;; end addr calc2
iand vi14, vi14, vi05 | nop ;; pipe
ibne vi05, vi11, L28 | nop ;; branch on next(?) vertex mat0 sign bit
nop | mul.xyz vf08, vf08, Q ;; perspective
mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q
mtir vi14, vf12.y | nop
b L29 | nop ;; branch to skip matrix load, if possible
lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22 ;; load rgba | hvdf offset
L28:
lq.xyzw vf20, 0(vi11) | mul.xyzw vf14, vf14, Q
lq.xyzw vf25, 0(vi14) | nop
lq.xyzw vf23, 1(vi11) | nop
lq.xyzw vf26, 1(vi14) | add.xyzw vf08, vf08, vf22
lq.xyzw vf20, 2(vi11) | mulaz.xyzw ACC, vf20, vf24
lq.xyzw vf27, 2(vi14) | maddw.xyzw vf25, vf25, vf24
lq.xyzw vf23, 3(vi11) | mulaz.xyzw ACC, vf23, vf24
lq.xyzw vf28, 3(vi14) | maddw.xyzw vf26, vf26, vf24
lq.xyzw vf20, 4(vi11) | mulaz.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi14) | maddw.xyzw vf27, vf27, vf24
lq.xyzw vf23, 5(vi11) | mulaz.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi14) | maddw.xyzw vf28, vf28, vf24
lq.xyzw vf20, 6(vi11) | mulaz.xyzw ACC, vf20, vf24
lq.xyzw vf31, 6(vi14) | maddw.xyz vf29, vf29, vf24
lqi.xyzw vf23, vi02 | mulaz.xyzw ACC, vf23, vf24
mtir vi11, vf12.x | maddw.xyz vf30, vf30, vf24
mtir vi14, vf12.y | mulaz.xyzw ACC, vf20, vf24
iaddiu vi08, vi00, 0x1a1 | maddw.xyzw vf31, vf31, vf24
ibeq vi00, vi15, L29 | nop
lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23
iaddiu vi08, vi00, 0x48e | nop
L29:
nop | mulaz.xyzw ACC, vf29, vf09 ;; pipe
nop | maddaz.xyzw ACC, vf30, vf12 ;; pipe
mfp.w vf20, P | maddz.xyz vf12, vf31, vf15 ;; normal length | pipe
nop | nop
1024.0 | miniw.w vf08, vf08, vf03 :i ;; fog max
ibne vi00, vi15, L93 | mulaw.xyzw ACC, vf25, vf09 ;; mercprime | pipe
ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20 ;; vi09 = mat1 | normalize
erleng.xyz P, vf12 | nop ;; pipe
ibeq vi06, vi03, L65 | maddaw.xyzw ACC, vf26, vf12 ;; check done | pipe
mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15 ;; pipe | pipe
lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11 ;; pipe | dot product with light
jr vi08 | madday.xyzw ACC, vf02, vf11
nop | maddz.xyzw vf11, vf03, vf11
L30: ;; mat2 cross entry 3
lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11
sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11
sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11
L31:
lqi.xyzw vf13, vi01 | add.xyzw vf09, vf09, vf28
lqi.xyzw vf16, vi01 | maxw.w vf08, vf08, vf02
mtir vi12, vf10.x | itof0.xyzw vf23, vf23
mtir vi15, vf10.y | maxx.xyzw vf11, vf11, vf00
div Q, vf01.w, vf09.w | add.zw vf10, vf10, vf17
move.xyzw vf21, vf08 | add.xyzw vf13, vf13, vf18
iand vi12, vi12, vi05 | add.xyzw vf16, vf16, vf19
nop | mulax.xyzw ACC, vf04, vf11
ibgtz vi09, L32 | madday.xyzw ACC, vf05, vf11
iand vi15, vi15, vi05 | maddaz.xyzw ACC, vf06, vf11
nop | addx.w vf21, vf21, vf17
L32:
ibne vi05, vi12, L33 | maddw.xyzw vf11, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf09, vf09, Q
mtir vi12, vf13.x | mul.xyzw vf15, vf15, Q
mtir vi15, vf13.y | ftoi4.xyzw vf21, vf21
b L34 | mul.xyzw vf11, vf11, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22
L33:
lq.xyzw vf20, 0(vi12) | mul.xyzw vf15, vf15, Q
nop | mulw.xyzw vf24, vf24, vf29
lq.xyzw vf25, 0(vi15) | ftoi4.xyzw vf21, vf21
lq.xyzw vf23, 1(vi12) | mul.xyzw vf11, vf11, vf23
lq.xyzw vf26, 1(vi15) | add.xyzw vf09, vf09, vf22
lq.xyzw vf20, 2(vi12) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf27, 2(vi15) | maddy.xyzw vf25, vf25, vf24
lq.xyzw vf23, 3(vi12) | mulax.xyzw ACC, vf23, vf24
lq.xyzw vf28, 3(vi15) | maddy.xyzw vf26, vf26, vf24
lq.xyzw vf20, 4(vi12) | mulax.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi15) | maddy.xyzw vf27, vf27, vf24
lq.xyzw vf23, 5(vi12) | mulax.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi15) | maddy.xyzw vf28, vf28, vf24
lq.xyzw vf20, 6(vi12) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf31, 6(vi15) | maddy.xyz vf29, vf29, vf24
mtir vi12, vf13.x | mulax.xyzw ACC, vf23, vf24
mtir vi15, vf13.y | maddy.xyz vf30, vf30, vf24
b L49 | mulax.xyzw ACC, vf20, vf24
lqi.xyzw vf23, vi03 | maddy.xyzw vf31, vf31, vf24
L34:
ibgez vi09, L35 | mulaz.xyzw ACC, vf29, vf10
sq.xyzw vf21, 2(vi10) | maddaz.xyzw ACC, vf30, vf13
nop | ftoi4.xyzw vf21, vf08
L35:
mfp.w vf20, P | maddz.xyz vf13, vf31, vf16
sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17
sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03
sq.xyzw vf21, 2(vi13) | mulaw.xyzw ACC, vf25, vf10
ilw.y vi09, -6(vi01) | mulw.xyzw vf12, vf12, vf20
erleng.xyz P, vf13 | ftoi0.xyzw vf11, vf11
ibne vi06, vi03, L36 | maddaw.xyzw ACC, vf26, vf13
mr32.z vf16, vf00 | maddw.xyzw vf10, vf27, vf16
ibne vi07, vi03, L72 | nop
nop | nop
b L143 | nop
nop | nop
L36: ;; mat2 cross entry 1
lqi.xyzw vf08, vi01 | mulax.xyzw ACC, vf01, vf12
sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12
sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12
;; END of first vertex....
lqi.xyzw vf11, vi01 | add.xyzw vf10, vf10, vf28
lqi.xyzw vf14, vi01 | maxw.w vf09, vf09, vf02
mtir vi10, vf08.x | itof0.xyzw vf23, vf23
mtir vi13, vf08.y | maxx.xyzw vf12, vf12, vf00
div Q, vf01.w, vf10.w | add.zw vf08, vf08, vf17
move.xyzw vf21, vf09 | add.xyzw vf11, vf11, vf18
iand vi10, vi10, vi05 | add.xyzw vf14, vf14, vf19
nop | mulax.xyzw ACC, vf04, vf12
ibgtz vi09, L37 | madday.xyzw ACC, vf05, vf12
iand vi13, vi13, vi05 | maddaz.xyzw ACC, vf06, vf12
nop | addx.w vf21, vf21, vf17
L37:
ibne vi05, vi10, L38 | maddw.xyzw vf12, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf10, vf10, Q
mtir vi10, vf11.x | mul.xyzw vf16, vf16, Q
mtir vi13, vf11.y | ftoi4.xyzw vf21, vf21
b L39 | mul.xyzw vf12, vf12, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22
L38:
lq.xyzw vf20, 0(vi10) | mul.xyzw vf16, vf16, Q
nop | mulw.xyzw vf24, vf24, vf29
lq.xyzw vf25, 0(vi13) | ftoi4.xyzw vf21, vf21
lq.xyzw vf23, 1(vi10) | mul.xyzw vf12, vf12, vf23
lq.xyzw vf26, 1(vi13) | add.xyzw vf10, vf10, vf22
lq.xyzw vf20, 2(vi10) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf27, 2(vi13) | maddy.xyzw vf25, vf25, vf24
lq.xyzw vf23, 3(vi10) | mulax.xyzw ACC, vf23, vf24
lq.xyzw vf28, 3(vi13) | maddy.xyzw vf26, vf26, vf24
lq.xyzw vf20, 4(vi10) | mulax.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi13) | maddy.xyzw vf27, vf27, vf24
lq.xyzw vf23, 5(vi10) | mulax.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi13) | maddy.xyzw vf28, vf28, vf24
lq.xyzw vf20, 6(vi10) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf31, 6(vi13) | maddy.xyz vf29, vf29, vf24
mtir vi10, vf11.x | mulax.xyzw ACC, vf23, vf24
mtir vi13, vf11.y | maddy.xyz vf30, vf30, vf24
b L54 | mulax.xyzw ACC, vf20, vf24
lqi.xyzw vf23, vi03 | maddy.xyzw vf31, vf31, vf24
L39:
ibgez vi09, L40 | mulaz.xyzw ACC, vf29, vf08
sq.xyzw vf21, 2(vi11) | maddaz.xyzw ACC, vf30, vf11
nop | ftoi4.xyzw vf21, vf09
L40:
mfp.w vf20, P | maddz.xyz vf11, vf31, vf14
sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17
sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03
sq.xyzw vf21, 2(vi14) | mulaw.xyzw ACC, vf25, vf08
ilw.y vi09, -6(vi01) | mulw.xyzw vf13, vf13, vf20
erleng.xyz P, vf11 | ftoi0.xyzw vf12, vf12
ibne vi06, vi03, L41 | maddaw.xyzw ACC, vf26, vf11
mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14
ibne vi07, vi03, L77 | nop
nop | nop
b L153 | nop
nop | nop
L41: ;; mat2 cross entry 2
lqi.xyzw vf09, vi01 | mulax.xyzw ACC, vf01, vf13
sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13
sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13
lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28
lqi.xyzw vf15, vi01 | maxw.w vf10, vf10, vf02
mtir vi11, vf09.x | itof0.xyzw vf23, vf23
mtir vi14, vf09.y | maxx.xyzw vf13, vf13, vf00
div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17
move.xyzw vf21, vf10 | add.xyzw vf12, vf12, vf18
iand vi11, vi11, vi05 | add.xyzw vf15, vf15, vf19
nop | mulax.xyzw ACC, vf04, vf13
ibgtz vi09, L42 | madday.xyzw ACC, vf05, vf13
iand vi14, vi14, vi05 | maddaz.xyzw ACC, vf06, vf13
nop | addx.w vf21, vf21, vf17
L42:
ibne vi05, vi11, L43 | maddw.xyzw vf13, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf08, vf08, Q
mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q
mtir vi14, vf12.y | ftoi4.xyzw vf21, vf21
b L44 | mul.xyzw vf13, vf13, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22
L43:
lq.xyzw vf20, 0(vi11) | mul.xyzw vf14, vf14, Q
nop | mulw.xyzw vf24, vf24, vf29
lq.xyzw vf25, 0(vi14) | ftoi4.xyzw vf21, vf21
lq.xyzw vf23, 1(vi11) | mul.xyzw vf13, vf13, vf23
lq.xyzw vf26, 1(vi14) | add.xyzw vf08, vf08, vf22
lq.xyzw vf20, 2(vi11) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf27, 2(vi14) | maddy.xyzw vf25, vf25, vf24
lq.xyzw vf23, 3(vi11) | mulax.xyzw ACC, vf23, vf24
lq.xyzw vf28, 3(vi14) | maddy.xyzw vf26, vf26, vf24
lq.xyzw vf20, 4(vi11) | mulax.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi14) | maddy.xyzw vf27, vf27, vf24
lq.xyzw vf23, 5(vi11) | mulax.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi14) | maddy.xyzw vf28, vf28, vf24
lq.xyzw vf20, 6(vi11) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf31, 6(vi14) | maddy.xyz vf29, vf29, vf24
mtir vi11, vf12.x | mulax.xyzw ACC, vf23, vf24
mtir vi14, vf12.y | maddy.xyz vf30, vf30, vf24
b L59 | mulax.xyzw ACC, vf20, vf24
lqi.xyzw vf23, vi03 | maddy.xyzw vf31, vf31, vf24
L44:
ibgez vi09, L45 | mulaz.xyzw ACC, vf29, vf09
sq.xyzw vf21, 2(vi12) | maddaz.xyzw ACC, vf30, vf12
nop | ftoi4.xyzw vf21, vf10
L45:
mfp.w vf20, P | maddz.xyz vf12, vf31, vf15
sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17
sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03
sq.xyzw vf21, 2(vi15) | mulaw.xyzw ACC, vf25, vf09
ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20
erleng.xyz P, vf12 | ftoi0.xyzw vf13, vf13
ibne vi06, vi03, L30 | maddaw.xyzw ACC, vf26, vf12
mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15
ibne vi07, vi03, L66 | nop
nop | nop
b L163 | nop
nop | nop
L46:
lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11
sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11
sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11
;; ugh, I think we jump here.
lqi.xyzw vf13, vi01 | add.xyzw vf09, vf09, vf28 ;; pipe | pipe
lqi.xyzw vf16, vi01 | maxw.w vf08, vf08, vf02 ;; pipe | fogmin
mtir vi12, vf10.x | itof0.xyzw vf23, vf23 ;; pipe | vtx color convert
mtir vi15, vf10.y | maxx.xyzw vf11, vf11, vf00 ;; pipe | light clamp
div Q, vf01.w, vf09.w | add.zw vf10, vf10, vf17
move.xyzw vf21, vf08 | add.xyzw vf13, vf13, vf18
iand vi12, vi12, vi05 | add.xyzw vf16, vf16, vf19
nop | mulax.xyzw ACC, vf04, vf11
ibgtz vi09, L47 | madday.xyzw ACC, vf05, vf11
iand vi15, vi15, vi05 | maddaz.xyzw ACC, vf06, vf11
nop | addx.w vf21, vf21, vf17
L47:
ibne vi05, vi12, L48 | maddw.xyzw vf11, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf09, vf09, Q
mtir vi12, vf13.x | mul.xyzw vf15, vf15, Q
mtir vi15, vf13.y | ftoi4.xyzw vf21, vf21
b L49 | mul.xyzw vf11, vf11, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22
L48:
lq.xyzw vf20, 0(vi12) | mul.xyzw vf15, vf15, Q
lq.xyzw vf25, 0(vi15) | ftoi4.xyzw vf21, vf21
lq.xyzw vf23, 1(vi12) | mul.xyzw vf11, vf11, vf23
lq.xyzw vf26, 1(vi15) | add.xyzw vf09, vf09, vf22
lq.xyzw vf20, 2(vi12) | mulaz.xyzw ACC, vf20, vf24
lq.xyzw vf27, 2(vi15) | maddw.xyzw vf25, vf25, vf24
lq.xyzw vf23, 3(vi12) | mulaz.xyzw ACC, vf23, vf24
lq.xyzw vf28, 3(vi15) | maddw.xyzw vf26, vf26, vf24
lq.xyzw vf20, 4(vi12) | mulaz.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi15) | maddw.xyzw vf27, vf27, vf24
lq.xyzw vf23, 5(vi12) | mulaz.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi15) | maddw.xyzw vf28, vf28, vf24
lq.xyzw vf20, 6(vi12) | mulaz.xyzw ACC, vf20, vf24
lq.xyzw vf31, 6(vi15) | maddw.xyz vf29, vf29, vf24
lqi.xyzw vf23, vi02 | mulaz.xyzw ACC, vf23, vf24
mtir vi12, vf13.x | maddw.xyz vf30, vf30, vf24
mtir vi15, vf13.y | mulaz.xyzw ACC, vf20, vf24
b L34 | maddw.xyzw vf31, vf31, vf24
lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23
L49:
ibgez vi09, L50 | mulaz.xyzw ACC, vf29, vf10
sq.xyzw vf21, 2(vi10) | maddaz.xyzw ACC, vf30, vf13 ;; first store
nop | ftoi4.xyzw vf21, vf08
L50:
mfp.w vf20, P | maddz.xyz vf13, vf31, vf16
sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17
sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03
sq.xyzw vf21, 2(vi13) | mulaw.xyzw ACC, vf25, vf10 ;; second store
ilw.y vi09, -6(vi01) | mulw.xyzw vf12, vf12, vf20
erleng.xyz P, vf13 | ftoi0.xyzw vf11, vf11
ibne vi06, vi03, L51 | maddaw.xyzw ACC, vf26, vf13
mr32.z vf16, vf00 | maddw.xyzw vf10, vf27, vf16
ibne vi07, vi03, L72 | nop
nop | nop
b L143 | nop
nop | nop
L51:
lqi.xyzw vf08, vi01 | mulax.xyzw ACC, vf01, vf12
sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12
sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12
;; end, for real this time.
lqi.xyzw vf11, vi01 | add.xyzw vf10, vf10, vf28
lqi.xyzw vf14, vi01 | maxw.w vf09, vf09, vf02
mtir vi10, vf08.x | itof0.xyzw vf23, vf23
mtir vi13, vf08.y | maxx.xyzw vf12, vf12, vf00
div Q, vf01.w, vf10.w | add.zw vf08, vf08, vf17
move.xyzw vf21, vf09 | add.xyzw vf11, vf11, vf18
iand vi10, vi10, vi05 | add.xyzw vf14, vf14, vf19
nop | mulax.xyzw ACC, vf04, vf12
ibgtz vi09, L52 | madday.xyzw ACC, vf05, vf12
iand vi13, vi13, vi05 | maddaz.xyzw ACC, vf06, vf12
nop | addx.w vf21, vf21, vf17
L52:
ibne vi05, vi10, L53 | maddw.xyzw vf12, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf10, vf10, Q
mtir vi10, vf11.x | mul.xyzw vf16, vf16, Q
mtir vi13, vf11.y | ftoi4.xyzw vf21, vf21
b L54 | mul.xyzw vf12, vf12, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22
L53:
lq.xyzw vf20, 0(vi10) | mul.xyzw vf16, vf16, Q
lq.xyzw vf25, 0(vi13) | ftoi4.xyzw vf21, vf21
lq.xyzw vf23, 1(vi10) | mul.xyzw vf12, vf12, vf23
lq.xyzw vf26, 1(vi13) | add.xyzw vf10, vf10, vf22
lq.xyzw vf20, 2(vi10) | mulaz.xyzw ACC, vf20, vf24
lq.xyzw vf27, 2(vi13) | maddw.xyzw vf25, vf25, vf24
lq.xyzw vf23, 3(vi10) | mulaz.xyzw ACC, vf23, vf24
lq.xyzw vf28, 3(vi13) | maddw.xyzw vf26, vf26, vf24
lq.xyzw vf20, 4(vi10) | mulaz.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi13) | maddw.xyzw vf27, vf27, vf24
lq.xyzw vf23, 5(vi10) | mulaz.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi13) | maddw.xyzw vf28, vf28, vf24
lq.xyzw vf20, 6(vi10) | mulaz.xyzw ACC, vf20, vf24
lq.xyzw vf31, 6(vi13) | maddw.xyz vf29, vf29, vf24
lqi.xyzw vf23, vi02 | mulaz.xyzw ACC, vf23, vf24
mtir vi10, vf11.x | maddw.xyz vf30, vf30, vf24
mtir vi13, vf11.y | mulaz.xyzw ACC, vf20, vf24
b L39 | maddw.xyzw vf31, vf31, vf24
lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23
L54:
ibgez vi09, L55 | mulaz.xyzw ACC, vf29, vf08
sq.xyzw vf21, 2(vi11) | maddaz.xyzw ACC, vf30, vf11
nop | ftoi4.xyzw vf21, vf09
L55:
mfp.w vf20, P | maddz.xyz vf11, vf31, vf14
sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17
sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03
sq.xyzw vf21, 2(vi14) | mulaw.xyzw ACC, vf25, vf08
ilw.y vi09, -6(vi01) | mulw.xyzw vf13, vf13, vf20
erleng.xyz P, vf11 | ftoi0.xyzw vf12, vf12
ibne vi06, vi03, L56 | maddaw.xyzw ACC, vf26, vf11
mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14
ibne vi07, vi03, L77 | nop
nop | nop
b L153 | nop
nop | nop
L56:
lqi.xyzw vf09, vi01 | mulax.xyzw ACC, vf01, vf13
sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13
sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13
lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28
lqi.xyzw vf15, vi01 | maxw.w vf10, vf10, vf02
mtir vi11, vf09.x | itof0.xyzw vf23, vf23
mtir vi14, vf09.y | maxx.xyzw vf13, vf13, vf00
div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17
move.xyzw vf21, vf10 | add.xyzw vf12, vf12, vf18
iand vi11, vi11, vi05 | add.xyzw vf15, vf15, vf19
nop | mulax.xyzw ACC, vf04, vf13
ibgtz vi09, L57 | madday.xyzw ACC, vf05, vf13
iand vi14, vi14, vi05 | maddaz.xyzw ACC, vf06, vf13
nop | addx.w vf21, vf21, vf17
L57:
ibne vi05, vi11, L58 | maddw.xyzw vf13, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf08, vf08, Q
mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q
mtir vi14, vf12.y | ftoi4.xyzw vf21, vf21
b L59 | mul.xyzw vf13, vf13, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22
L58:
lq.xyzw vf20, 0(vi11) | mul.xyzw vf14, vf14, Q
lq.xyzw vf25, 0(vi14) | ftoi4.xyzw vf21, vf21
lq.xyzw vf23, 1(vi11) | mul.xyzw vf13, vf13, vf23
lq.xyzw vf26, 1(vi14) | add.xyzw vf08, vf08, vf22
lq.xyzw vf20, 2(vi11) | mulaz.xyzw ACC, vf20, vf24
lq.xyzw vf27, 2(vi14) | maddw.xyzw vf25, vf25, vf24
lq.xyzw vf23, 3(vi11) | mulaz.xyzw ACC, vf23, vf24
lq.xyzw vf28, 3(vi14) | maddw.xyzw vf26, vf26, vf24
lq.xyzw vf20, 4(vi11) | mulaz.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi14) | maddw.xyzw vf27, vf27, vf24
lq.xyzw vf23, 5(vi11) | mulaz.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi14) | maddw.xyzw vf28, vf28, vf24
lq.xyzw vf20, 6(vi11) | mulaz.xyzw ACC, vf20, vf24
lq.xyzw vf31, 6(vi14) | maddw.xyz vf29, vf29, vf24
lqi.xyzw vf23, vi02 | mulaz.xyzw ACC, vf23, vf24
mtir vi11, vf12.x | maddw.xyz vf30, vf30, vf24
mtir vi14, vf12.y | mulaz.xyzw ACC, vf20, vf24
b L44 | maddw.xyzw vf31, vf31, vf24
lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23
L59:
ibgez vi09, L60 | mulaz.xyzw ACC, vf29, vf09
sq.xyzw vf21, 2(vi12) | maddaz.xyzw ACC, vf30, vf12
nop | ftoi4.xyzw vf21, vf10
L60:
mfp.w vf20, P | maddz.xyz vf12, vf31, vf15
sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17
sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03
sq.xyzw vf21, 2(vi15) | mulaw.xyzw ACC, vf25, vf09
ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20
erleng.xyz P, vf12 | ftoi0.xyzw vf13, vf13
ibne vi06, vi03, L46 | maddaw.xyzw ACC, vf26, vf12
mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15
ibne vi07, vi03, L72 | nop
nop | nop
b L163 | nop
nop | nop
;; maybe mat3s
L61:
lqi.xyzw vf08, vi01 | nop
lqi.xyzw vf24, vi02 | nop
lqi.xyzw vf11, vi01 | nop
lqi.xyzw vf14, vi01 | nop
mtir vi10, vf08.x | nop
mtir vi13, vf08.y | itof0.xyzw vf24, vf24
nop | add.zw vf08, vf08, vf17
nop | add.xyzw vf11, vf11, vf18
iand vi10, vi10, vi05 | add.xyzw vf14, vf14, vf19
ilw.w vi08, -1(vi02) | mulw.xyzw vf24, vf24, vf29
iand vi13, vi13, vi05 | nop
lq.xyzw vf20, 0(vi10) | nop
lq.xyzw vf31, 0(vi13) | nop
lq.xyzw vf25, 0(vi08) | nop
lq.xyzw vf23, 1(vi10) | nop
lq.xyzw vf20, 1(vi13) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf26, 1(vi08) | madday.xyzw ACC, vf31, vf24
lq.xyzw vf31, 2(vi10) | maddz.xyzw vf25, vf25, vf24
lq.xyzw vf23, 2(vi13) | mulax.xyzw ACC, vf23, vf24
lq.xyzw vf27, 2(vi08) | madday.xyzw ACC, vf20, vf24
lq.xyzw vf20, 3(vi10) | maddz.xyzw vf26, vf26, vf24
lq.xyzw vf31, 3(vi13) | mulax.xyzw ACC, vf31, vf24
lq.xyzw vf28, 3(vi08) | madday.xyzw ACC, vf23, vf24
lq.xyzw vf23, 4(vi10) | maddz.xyzw vf27, vf27, vf24
lq.xyzw vf20, 4(vi13) | mulax.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi08) | madday.xyzw ACC, vf31, vf24
lq.xyzw vf31, 5(vi10) | maddz.xyzw vf28, vf28, vf24
lq.xyzw vf23, 5(vi13) | mulax.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi08) | madday.xyzw ACC, vf20, vf24
lq.xyzw vf20, 6(vi10) | maddz.xyz vf29, vf29, vf24
lq.xyzw vf22, 6(vi13) | mulax.xyzw ACC, vf31, vf24
lq.xyzw vf31, 6(vi08) | madday.xyzw ACC, vf23, vf24
lqi.xyzw vf23, vi02 | maddz.xyz vf30, vf30, vf24
mtir vi10, vf11.x | mulax.xyzw ACC, vf20, vf24
mtir vi13, vf11.y | madday.xyzw ACC, vf22, vf24
lq.xyzw vf22, 2(vi00) | maddz.xyzw vf31, vf31, vf24
nop | itof0.xyzw vf24, vf23
nop | mulaz.xyzw ACC, vf29, vf08
nop | maddaz.xyzw ACC, vf30, vf11
nop | maddz.xyz vf11, vf31, vf14
nop | nop
nop | nop
nop | mulaw.xyzw ACC, vf25, vf08
nop | nop
erleng.xyz P, vf11 | nop
ior vi15, vi07, vi00 | maddaw.xyzw ACC, vf26, vf11
mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14
lqi.xyzw vf09, vi01 | nop
ilwr.y vi03, vi12 | nop
ilw.z vi07, 1(vi12) | nop
lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28
lqi.xyzw vf15, vi01 | nop
mtir vi11, vf09.x | nop
ibeq vi00, vi15, L62 | nop
mtir vi14, vf09.y | nop
nop | miniw.w vf08, vf08, vf01
L62:
div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17
iadd vi03, vi03, vi12 | add.xyzw vf12, vf12, vf18
iand vi11, vi11, vi05 | add.xyzw vf15, vf15, vf19
ilw.w vi08, -1(vi02) | nop
iadd vi07, vi07, vi03 | nop
iand vi14, vi14, vi05 | nop
ibne vi05, vi11, L63 | nop
iaddi vi07, vi07, -0x1 | mul.xyz vf08, vf08, Q
mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q
mtir vi14, vf12.y | nop
b L64 | nop
lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22
L63:
lq.xyzw vf20, 0(vi11) | mul.xyzw vf14, vf14, Q
nop | mulw.xyzw vf24, vf24, vf29
lq.xyzw vf31, 0(vi14) | nop
lq.xyzw vf25, 0(vi08) | nop
lq.xyzw vf23, 1(vi11) | add.xyzw vf08, vf08, vf22
lq.xyzw vf20, 1(vi14) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf26, 1(vi08) | madday.xyzw ACC, vf31, vf24
lq.xyzw vf31, 2(vi11) | maddz.xyzw vf25, vf25, vf24
lq.xyzw vf23, 2(vi14) | mulax.xyzw ACC, vf23, vf24
lq.xyzw vf27, 2(vi08) | madday.xyzw ACC, vf20, vf24
lq.xyzw vf20, 3(vi11) | maddz.xyzw vf26, vf26, vf24
lq.xyzw vf31, 3(vi14) | mulax.xyzw ACC, vf31, vf24
lq.xyzw vf28, 3(vi08) | madday.xyzw ACC, vf23, vf24
lq.xyzw vf23, 4(vi11) | maddz.xyzw vf27, vf27, vf24
lq.xyzw vf20, 4(vi14) | mulax.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi08) | madday.xyzw ACC, vf31, vf24
lq.xyzw vf31, 5(vi11) | maddz.xyzw vf28, vf28, vf24
lq.xyzw vf23, 5(vi14) | mulax.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi08) | madday.xyzw ACC, vf20, vf24
lq.xyzw vf20, 6(vi11) | maddz.xyz vf29, vf29, vf24
lq.xyzw vf22, 6(vi14) | mulax.xyzw ACC, vf31, vf24
lq.xyzw vf31, 6(vi08) | madday.xyzw ACC, vf23, vf24
lqi.xyzw vf23, vi02 | maddz.xyz vf30, vf30, vf24
mtir vi11, vf12.x | mulax.xyzw ACC, vf20, vf24
mtir vi14, vf12.y | madday.xyzw ACC, vf22, vf24
lq.xyzw vf22, 2(vi00) | maddz.xyzw vf31, vf31, vf24
lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23
L64:
nop | mulaz.xyzw ACC, vf29, vf09
nop | maddaz.xyzw ACC, vf30, vf12
mfp.w vf20, P | maddz.xyz vf12, vf31, vf15
nop | nop
1024.0 | miniw.w vf08, vf08, vf03 :i
ibne vi00, vi15, L125 | mulaw.xyzw ACC, vf25, vf09
ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20
erleng.xyz P, vf12 | nop
nop | maddaw.xyzw ACC, vf26, vf12
mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15
L65:
lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11
b L67 | madday.xyzw ACC, vf02, vf11
nop | maddz.xyzw vf11, vf03, vf11
L66: ;; mat3 cross entry
lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11
sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11
sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11
L67:
lqi.xyzw vf13, vi01 | add.xyzw vf09, vf09, vf28
lqi.xyzw vf16, vi01 | maxw.w vf08, vf08, vf02
mtir vi12, vf10.x | itof0.xyzw vf23, vf23
mtir vi15, vf10.y | maxx.xyzw vf11, vf11, vf00
div Q, vf01.w, vf09.w | add.zw vf10, vf10, vf17
move.xyzw vf21, vf08 | add.xyzw vf13, vf13, vf18
iand vi12, vi12, vi05 | add.xyzw vf16, vf16, vf19
ilw.w vi08, -1(vi02) | mulax.xyzw ACC, vf04, vf11
ibgtz vi09, L68 | madday.xyzw ACC, vf05, vf11
iand vi15, vi15, vi05 | maddaz.xyzw ACC, vf06, vf11
nop | addx.w vf21, vf21, vf17
L68:
ibne vi05, vi12, L69 | maddw.xyzw vf11, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf09, vf09, Q
mtir vi12, vf13.x | mul.xyzw vf15, vf15, Q
mtir vi15, vf13.y | ftoi4.xyzw vf21, vf21
b L70 | mul.xyzw vf11, vf11, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22
L69:
lq.xyzw vf20, 0(vi12) | mul.xyzw vf15, vf15, Q
nop | mulw.xyzw vf24, vf24, vf29
lq.xyzw vf31, 0(vi15) | ftoi4.xyzw vf21, vf21
lq.xyzw vf25, 0(vi08) | mul.xyzw vf11, vf11, vf23
lq.xyzw vf23, 1(vi12) | add.xyzw vf09, vf09, vf22
lq.xyzw vf20, 1(vi15) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf26, 1(vi08) | madday.xyzw ACC, vf31, vf24
lq.xyzw vf31, 2(vi12) | maddz.xyzw vf25, vf25, vf24
lq.xyzw vf23, 2(vi15) | mulax.xyzw ACC, vf23, vf24
lq.xyzw vf27, 2(vi08) | madday.xyzw ACC, vf20, vf24
lq.xyzw vf20, 3(vi12) | maddz.xyzw vf26, vf26, vf24
lq.xyzw vf31, 3(vi15) | mulax.xyzw ACC, vf31, vf24
lq.xyzw vf28, 3(vi08) | madday.xyzw ACC, vf23, vf24
lq.xyzw vf23, 4(vi12) | maddz.xyzw vf27, vf27, vf24
lq.xyzw vf20, 4(vi15) | mulax.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi08) | madday.xyzw ACC, vf31, vf24
lq.xyzw vf31, 5(vi12) | maddz.xyzw vf28, vf28, vf24
lq.xyzw vf23, 5(vi15) | mulax.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi08) | madday.xyzw ACC, vf20, vf24
lq.xyzw vf20, 6(vi12) | maddz.xyz vf29, vf29, vf24
lq.xyzw vf22, 6(vi15) | mulax.xyzw ACC, vf31, vf24
lq.xyzw vf31, 6(vi08) | madday.xyzw ACC, vf23, vf24
lqi.xyzw vf23, vi02 | maddz.xyz vf30, vf30, vf24
mtir vi12, vf13.x | mulax.xyzw ACC, vf20, vf24
mtir vi15, vf13.y | madday.xyzw ACC, vf22, vf24
lq.xyzw vf22, 2(vi00) | maddz.xyzw vf31, vf31, vf24
lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23
L70:
ibgez vi09, L71 | mulaz.xyzw ACC, vf29, vf10
sq.xyzw vf21, 2(vi10) | maddaz.xyzw ACC, vf30, vf13
nop | ftoi4.xyzw vf21, vf08
L71:
mfp.w vf20, P | maddz.xyz vf13, vf31, vf16
sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17
sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03
sq.xyzw vf21, 2(vi13) | mulaw.xyzw ACC, vf25, vf10
ilw.y vi09, -6(vi01) | mulw.xyzw vf12, vf12, vf20
erleng.xyz P, vf13 | ftoi0.xyzw vf11, vf11
ibeq vi07, vi03, L143 | maddaw.xyzw ACC, vf26, vf13
mr32.z vf16, vf00 | maddw.xyzw vf10, vf27, vf16
L72: ;; mat3 cross entry
lqi.xyzw vf08, vi01 | mulax.xyzw ACC, vf01, vf12
sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12
sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12
lqi.xyzw vf11, vi01 | add.xyzw vf10, vf10, vf28
lqi.xyzw vf14, vi01 | maxw.w vf09, vf09, vf02
mtir vi10, vf08.x | itof0.xyzw vf23, vf23
mtir vi13, vf08.y | maxx.xyzw vf12, vf12, vf00
div Q, vf01.w, vf10.w | add.zw vf08, vf08, vf17
move.xyzw vf21, vf09 | add.xyzw vf11, vf11, vf18
iand vi10, vi10, vi05 | add.xyzw vf14, vf14, vf19
ilw.w vi08, -1(vi02) | mulax.xyzw ACC, vf04, vf12
ibgtz vi09, L73 | madday.xyzw ACC, vf05, vf12
iand vi13, vi13, vi05 | maddaz.xyzw ACC, vf06, vf12
nop | addx.w vf21, vf21, vf17
L73:
ibne vi05, vi10, L74 | maddw.xyzw vf12, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf10, vf10, Q
mtir vi10, vf11.x | mul.xyzw vf16, vf16, Q
mtir vi13, vf11.y | ftoi4.xyzw vf21, vf21
b L75 | mul.xyzw vf12, vf12, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22
L74:
lq.xyzw vf20, 0(vi10) | mul.xyzw vf16, vf16, Q
nop | mulw.xyzw vf24, vf24, vf29
lq.xyzw vf31, 0(vi13) | ftoi4.xyzw vf21, vf21
lq.xyzw vf25, 0(vi08) | mul.xyzw vf12, vf12, vf23
lq.xyzw vf23, 1(vi10) | add.xyzw vf10, vf10, vf22
lq.xyzw vf20, 1(vi13) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf26, 1(vi08) | madday.xyzw ACC, vf31, vf24
lq.xyzw vf31, 2(vi10) | maddz.xyzw vf25, vf25, vf24
lq.xyzw vf23, 2(vi13) | mulax.xyzw ACC, vf23, vf24
lq.xyzw vf27, 2(vi08) | madday.xyzw ACC, vf20, vf24
lq.xyzw vf20, 3(vi10) | maddz.xyzw vf26, vf26, vf24
lq.xyzw vf31, 3(vi13) | mulax.xyzw ACC, vf31, vf24
lq.xyzw vf28, 3(vi08) | madday.xyzw ACC, vf23, vf24
lq.xyzw vf23, 4(vi10) | maddz.xyzw vf27, vf27, vf24
lq.xyzw vf20, 4(vi13) | mulax.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi08) | madday.xyzw ACC, vf31, vf24
lq.xyzw vf31, 5(vi10) | maddz.xyzw vf28, vf28, vf24
lq.xyzw vf23, 5(vi13) | mulax.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi08) | madday.xyzw ACC, vf20, vf24
lq.xyzw vf20, 6(vi10) | maddz.xyz vf29, vf29, vf24
lq.xyzw vf22, 6(vi13) | mulax.xyzw ACC, vf31, vf24
lq.xyzw vf31, 6(vi08) | madday.xyzw ACC, vf23, vf24
lqi.xyzw vf23, vi02 | maddz.xyz vf30, vf30, vf24
mtir vi10, vf11.x | mulax.xyzw ACC, vf20, vf24
mtir vi13, vf11.y | madday.xyzw ACC, vf22, vf24
lq.xyzw vf22, 2(vi00) | maddz.xyzw vf31, vf31, vf24
lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23
L75:
ibgez vi09, L76 | mulaz.xyzw ACC, vf29, vf08
sq.xyzw vf21, 2(vi11) | maddaz.xyzw ACC, vf30, vf11
nop | ftoi4.xyzw vf21, vf09
L76:
mfp.w vf20, P | maddz.xyz vf11, vf31, vf14
sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17
sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03
sq.xyzw vf21, 2(vi14) | mulaw.xyzw ACC, vf25, vf08
ilw.y vi09, -6(vi01) | mulw.xyzw vf13, vf13, vf20
erleng.xyz P, vf11 | ftoi0.xyzw vf12, vf12
ibeq vi07, vi03, L153 | maddaw.xyzw ACC, vf26, vf11
mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14
L77: ;; mat3 cross entry
lqi.xyzw vf09, vi01 | mulax.xyzw ACC, vf01, vf13
sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13
sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13
lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28
lqi.xyzw vf15, vi01 | maxw.w vf10, vf10, vf02
mtir vi11, vf09.x | itof0.xyzw vf23, vf23
mtir vi14, vf09.y | maxx.xyzw vf13, vf13, vf00
div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17
move.xyzw vf21, vf10 | add.xyzw vf12, vf12, vf18
iand vi11, vi11, vi05 | add.xyzw vf15, vf15, vf19
ilw.w vi08, -1(vi02) | mulax.xyzw ACC, vf04, vf13
ibgtz vi09, L78 | madday.xyzw ACC, vf05, vf13
iand vi14, vi14, vi05 | maddaz.xyzw ACC, vf06, vf13
nop | addx.w vf21, vf21, vf17
L78:
ibne vi05, vi11, L79 | maddw.xyzw vf13, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf08, vf08, Q
mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q
mtir vi14, vf12.y | ftoi4.xyzw vf21, vf21
b L80 | mul.xyzw vf13, vf13, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22
L79:
lq.xyzw vf20, 0(vi11) | mul.xyzw vf14, vf14, Q
nop | mulw.xyzw vf24, vf24, vf29
lq.xyzw vf31, 0(vi14) | ftoi4.xyzw vf21, vf21
lq.xyzw vf25, 0(vi08) | mul.xyzw vf13, vf13, vf23
lq.xyzw vf23, 1(vi11) | add.xyzw vf08, vf08, vf22
lq.xyzw vf20, 1(vi14) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf26, 1(vi08) | madday.xyzw ACC, vf31, vf24
lq.xyzw vf31, 2(vi11) | maddz.xyzw vf25, vf25, vf24
lq.xyzw vf23, 2(vi14) | mulax.xyzw ACC, vf23, vf24
lq.xyzw vf27, 2(vi08) | madday.xyzw ACC, vf20, vf24
lq.xyzw vf20, 3(vi11) | maddz.xyzw vf26, vf26, vf24
lq.xyzw vf31, 3(vi14) | mulax.xyzw ACC, vf31, vf24
lq.xyzw vf28, 3(vi08) | madday.xyzw ACC, vf23, vf24
lq.xyzw vf23, 4(vi11) | maddz.xyzw vf27, vf27, vf24
lq.xyzw vf20, 4(vi14) | mulax.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi08) | madday.xyzw ACC, vf31, vf24
lq.xyzw vf31, 5(vi11) | maddz.xyzw vf28, vf28, vf24
lq.xyzw vf23, 5(vi14) | mulax.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi08) | madday.xyzw ACC, vf20, vf24
lq.xyzw vf20, 6(vi11) | maddz.xyz vf29, vf29, vf24
lq.xyzw vf22, 6(vi14) | mulax.xyzw ACC, vf31, vf24
lq.xyzw vf31, 6(vi08) | madday.xyzw ACC, vf23, vf24
lqi.xyzw vf23, vi02 | maddz.xyz vf30, vf30, vf24
mtir vi11, vf12.x | mulax.xyzw ACC, vf20, vf24
mtir vi14, vf12.y | madday.xyzw ACC, vf22, vf24
lq.xyzw vf22, 2(vi00) | maddz.xyzw vf31, vf31, vf24
lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23
L80:
ibgez vi09, L81 | mulaz.xyzw ACC, vf29, vf09
sq.xyzw vf21, 2(vi12) | maddaz.xyzw ACC, vf30, vf12
nop | ftoi4.xyzw vf21, vf10
L81:
mfp.w vf20, P | maddz.xyz vf12, vf31, vf15
sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17
sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03
sq.xyzw vf21, 2(vi15) | mulaw.xyzw ACC, vf25, vf09
ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20
erleng.xyz P, vf12 | ftoi0.xyzw vf13, vf13
ibne vi07, vi03, L66 | maddaw.xyzw ACC, vf26, vf12
mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15
b L163 | nop
nop | nop
;; merc prime, or other weird things.
L82:
erleng.xyz P, vf12 | maxi.xy vf08, vf08, I
3072.0 | nop :i
nop | minii.xy vf08, vf08, I
nop | maddaw.xyzw ACC, vf26, vf12
mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15
lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11
ibne vi04, vi03, L84 | madday.xyzw ACC, vf02, vf11
nop | maddz.xyzw vf11, vf03, vf11
ibne vi06, vi03, L95 | nop
nop | nop
b L128 | nop
nop | nop
L83:
3072.0 | mulax.xyzw ACC, vf01, vf11 :i
lqi.xyzw vf10, vi01 | minii.xy vf08, vf08, I
sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11
sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11
L84:
lqi.xyzw vf13, vi01 | add.xyzw vf09, vf09, vf28
lqi.xyzw vf16, vi01 | maxw.w vf08, vf08, vf02
mtir vi08, vf10.x | itof0.xyzw vf23, vf23
ilw.y vi09, -9(vi01) | maxx.xyzw vf11, vf11, vf00
nop | miniw.w vf09, vf09, vf01
div Q, vf01.w, vf09.w | add.zw vf10, vf10, vf17
move.xyzw vf21, vf08 | add.xyzw vf13, vf13, vf18
lq.xyz vf29, 4(vi08) | add.xyzw vf16, vf16, vf19
lq.xyz vf30, 5(vi08) | mulax.xyzw ACC, vf04, vf11
ibgtz vi09, L85 | madday.xyzw ACC, vf05, vf11
lq.xyzw vf31, 6(vi08) | maddaz.xyzw ACC, vf06, vf11
nop | addx.w vf21, vf21, vf17
L85:
lq.xyzw vf25, 0(vi08) | maddw.xyzw vf11, vf07, vf00
lq.xyzw vf26, 1(vi08) | mul.xyz vf09, vf09, Q
mtir vi12, vf13.x | mul.xyzw vf15, vf15, Q
mtir vi15, vf13.y | ftoi4.xyzw vf21, vf21
lq.xyzw vf27, 2(vi08) | mul.xyzw vf11, vf11, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22
ibne vi00, vi09, L86 | mulaz.xyzw ACC, vf29, vf10
sq.xyzw vf21, 2(vi10) | maddaz.xyzw ACC, vf30, vf13
nop | ftoi4.xyzw vf21, vf08
L86:
mfp.w vf20, P | maddz.xyz vf13, vf31, vf16
sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17
sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03
sq.xyzw vf21, 2(vi13) | mulaw.xyzw ACC, vf25, vf10
lq.xyzw vf28, 3(vi08) | mulw.xyzw vf12, vf12, vf20
1024.0 | ftoi0.xyzw vf11, vf11 :i
erleng.xyz P, vf13 | maxi.xy vf09, vf09, I
ibne vi04, vi03, L87 | maddaw.xyzw ACC, vf26, vf13
mr32.z vf16, vf00 | maddw.xyzw vf10, vf27, vf16
ibne vi06, vi03, L100 | nop
ilw.y vi09, -6(vi01) | nop
ibne vi07, vi03, L133 | nop
nop | nop
b L143 | nop
nop | nop
L87:
3072.0 | mulax.xyzw ACC, vf01, vf12 :i
lqi.xyzw vf08, vi01 | minii.xy vf09, vf09, I
sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12
sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12
lqi.xyzw vf11, vi01 | add.xyzw vf10, vf10, vf28
lqi.xyzw vf14, vi01 | maxw.w vf09, vf09, vf02
mtir vi08, vf08.x | itof0.xyzw vf23, vf23
ilw.y vi09, -9(vi01) | maxx.xyzw vf12, vf12, vf00
nop | miniw.w vf10, vf10, vf01
div Q, vf01.w, vf10.w | add.zw vf08, vf08, vf17
move.xyzw vf21, vf09 | add.xyzw vf11, vf11, vf18
lq.xyz vf29, 4(vi08) | add.xyzw vf14, vf14, vf19
lq.xyz vf30, 5(vi08) | mulax.xyzw ACC, vf04, vf12
ibgtz vi09, L88 | madday.xyzw ACC, vf05, vf12
lq.xyzw vf31, 6(vi08) | maddaz.xyzw ACC, vf06, vf12
nop | addx.w vf21, vf21, vf17
L88:
lq.xyzw vf25, 0(vi08) | maddw.xyzw vf12, vf07, vf00
lq.xyzw vf26, 1(vi08) | mul.xyz vf10, vf10, Q
mtir vi10, vf11.x | mul.xyzw vf16, vf16, Q
mtir vi13, vf11.y | ftoi4.xyzw vf21, vf21
lq.xyzw vf27, 2(vi08) | mul.xyzw vf12, vf12, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22
ibne vi00, vi09, L89 | mulaz.xyzw ACC, vf29, vf08
sq.xyzw vf21, 2(vi11) | maddaz.xyzw ACC, vf30, vf11
nop | ftoi4.xyzw vf21, vf09
L89:
mfp.w vf20, P | maddz.xyz vf11, vf31, vf14
sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17
sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03
sq.xyzw vf21, 2(vi14) | mulaw.xyzw ACC, vf25, vf08
lq.xyzw vf28, 3(vi08) | mulw.xyzw vf13, vf13, vf20
1024.0 | ftoi0.xyzw vf12, vf12 :i
erleng.xyz P, vf11 | maxi.xy vf10, vf10, I
ibne vi04, vi03, L90 | maddaw.xyzw ACC, vf26, vf11
mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14
ibne vi06, vi03, L105 | nop
ilw.y vi09, -6(vi01) | nop
ibne vi07, vi03, L138 | nop
nop | nop
b L153 | nop
nop | nop
L90:
3072.0 | mulax.xyzw ACC, vf01, vf13 :i
lqi.xyzw vf09, vi01 | minii.xy vf10, vf10, I
sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13
sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13
lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28
lqi.xyzw vf15, vi01 | maxw.w vf10, vf10, vf02
mtir vi08, vf09.x | itof0.xyzw vf23, vf23
ilw.y vi09, -9(vi01) | maxx.xyzw vf13, vf13, vf00
nop | miniw.w vf08, vf08, vf01
div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17
move.xyzw vf21, vf10 | add.xyzw vf12, vf12, vf18
lq.xyz vf29, 4(vi08) | add.xyzw vf15, vf15, vf19
lq.xyz vf30, 5(vi08) | mulax.xyzw ACC, vf04, vf13
ibgtz vi09, L91 | madday.xyzw ACC, vf05, vf13
lq.xyzw vf31, 6(vi08) | maddaz.xyzw ACC, vf06, vf13
nop | addx.w vf21, vf21, vf17
L91:
lq.xyzw vf25, 0(vi08) | maddw.xyzw vf13, vf07, vf00
lq.xyzw vf26, 1(vi08) | mul.xyz vf08, vf08, Q
mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q
mtir vi14, vf12.y | ftoi4.xyzw vf21, vf21
lq.xyzw vf27, 2(vi08) | mul.xyzw vf13, vf13, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22
ibne vi00, vi09, L92 | mulaz.xyzw ACC, vf29, vf09
sq.xyzw vf21, 2(vi12) | maddaz.xyzw ACC, vf30, vf12
nop | ftoi4.xyzw vf21, vf10
L92:
mfp.w vf20, P | maddz.xyz vf12, vf31, vf15
sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17
sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03
sq.xyzw vf21, 2(vi15) | mulaw.xyzw ACC, vf25, vf09
lq.xyzw vf28, 3(vi08) | mulw.xyzw vf11, vf11, vf20
1024.0 | ftoi0.xyzw vf13, vf13 :i
erleng.xyz P, vf12 | maxi.xy vf08, vf08, I
ibne vi04, vi03, L83 | maddaw.xyzw ACC, vf26, vf12
mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15
ibne vi06, vi03, L94 | nop
ilw.y vi09, -6(vi01) | nop
ibne vi07, vi03, L127 | nop
nop | nop
b L163 | nop
nop | nop
L93:
erleng.xyz P, vf12 | maxi.xy vf08, vf08, I
3072.0 | nop :i
nop | minii.xy vf08, vf08, I
ibeq vi06, vi03, L126 | maddaw.xyzw ACC, vf26, vf12
mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15
lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11
jr vi08 | madday.xyzw ACC, vf02, vf11
nop | maddz.xyzw vf11, vf03, vf11
L94:
3072.0 | mulax.xyzw ACC, vf01, vf11 :i
lqi.xyzw vf10, vi01 | minii.xy vf08, vf08, I
sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11
sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11
L95:
lqi.xyzw vf13, vi01 | add.xyzw vf09, vf09, vf28
lqi.xyzw vf16, vi01 | maxw.w vf08, vf08, vf02
mtir vi12, vf10.x | itof0.xyzw vf23, vf23
mtir vi15, vf10.y | maxx.xyzw vf11, vf11, vf00
nop | miniw.w vf09, vf09, vf01
div Q, vf01.w, vf09.w | add.zw vf10, vf10, vf17
move.xyzw vf21, vf08 | add.xyzw vf13, vf13, vf18
iand vi12, vi12, vi05 | add.xyzw vf16, vf16, vf19
nop | mulax.xyzw ACC, vf04, vf11
ibgtz vi09, L96 | madday.xyzw ACC, vf05, vf11
iand vi15, vi15, vi05 | maddaz.xyzw ACC, vf06, vf11
nop | addx.w vf21, vf21, vf17
L96:
ibne vi05, vi12, L97 | maddw.xyzw vf11, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf09, vf09, Q
mtir vi12, vf13.x | mul.xyzw vf15, vf15, Q
mtir vi15, vf13.y | ftoi4.xyzw vf21, vf21
b L98 | mul.xyzw vf11, vf11, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22
L97:
lq.xyzw vf20, 0(vi12) | mul.xyzw vf15, vf15, Q
nop | mulw.xyzw vf24, vf24, vf29
lq.xyzw vf25, 0(vi15) | ftoi4.xyzw vf21, vf21
lq.xyzw vf23, 1(vi12) | mul.xyzw vf11, vf11, vf23
lq.xyzw vf26, 1(vi15) | add.xyzw vf09, vf09, vf22
lq.xyzw vf20, 2(vi12) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf27, 2(vi15) | maddy.xyzw vf25, vf25, vf24
lq.xyzw vf23, 3(vi12) | mulax.xyzw ACC, vf23, vf24
lq.xyzw vf28, 3(vi15) | maddy.xyzw vf26, vf26, vf24
lq.xyzw vf20, 4(vi12) | mulax.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi15) | maddy.xyzw vf27, vf27, vf24
lq.xyzw vf23, 5(vi12) | mulax.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi15) | maddy.xyzw vf28, vf28, vf24
lq.xyzw vf20, 6(vi12) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf31, 6(vi15) | maddy.xyz vf29, vf29, vf24
mtir vi12, vf13.x | mulax.xyzw ACC, vf23, vf24
mtir vi15, vf13.y | maddy.xyz vf30, vf30, vf24
b L113 | mulax.xyzw ACC, vf20, vf24
lqi.xyzw vf23, vi03 | maddy.xyzw vf31, vf31, vf24
L98:
ibgez vi09, L99 | mulaz.xyzw ACC, vf29, vf10
sq.xyzw vf21, 2(vi10) | maddaz.xyzw ACC, vf30, vf13
nop | ftoi4.xyzw vf21, vf08
L99:
mfp.w vf20, P | maddz.xyz vf13, vf31, vf16
sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17
sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03
sq.xyzw vf21, 2(vi13) | mulaw.xyzw ACC, vf25, vf10
ilw.y vi09, -6(vi01) | mulw.xyzw vf12, vf12, vf20
1024.0 | ftoi0.xyzw vf11, vf11 :i
erleng.xyz P, vf13 | maxi.xy vf09, vf09, I
ibne vi06, vi03, L100 | maddaw.xyzw ACC, vf26, vf13
mr32.z vf16, vf00 | maddw.xyzw vf10, vf27, vf16
ibne vi07, vi03, L133 | nop
nop | nop
b L143 | nop
nop | nop
L100:
3072.0 | mulax.xyzw ACC, vf01, vf12 :i
lqi.xyzw vf08, vi01 | minii.xy vf09, vf09, I
sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12
sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12
lqi.xyzw vf11, vi01 | add.xyzw vf10, vf10, vf28
lqi.xyzw vf14, vi01 | maxw.w vf09, vf09, vf02
mtir vi10, vf08.x | itof0.xyzw vf23, vf23
mtir vi13, vf08.y | maxx.xyzw vf12, vf12, vf00
nop | miniw.w vf10, vf10, vf01
div Q, vf01.w, vf10.w | add.zw vf08, vf08, vf17
move.xyzw vf21, vf09 | add.xyzw vf11, vf11, vf18
iand vi10, vi10, vi05 | add.xyzw vf14, vf14, vf19
nop | mulax.xyzw ACC, vf04, vf12
ibgtz vi09, L101 | madday.xyzw ACC, vf05, vf12
iand vi13, vi13, vi05 | maddaz.xyzw ACC, vf06, vf12
nop | addx.w vf21, vf21, vf17
L101:
ibne vi05, vi10, L102 | maddw.xyzw vf12, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf10, vf10, Q
mtir vi10, vf11.x | mul.xyzw vf16, vf16, Q
mtir vi13, vf11.y | ftoi4.xyzw vf21, vf21
b L103 | mul.xyzw vf12, vf12, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22
L102:
lq.xyzw vf20, 0(vi10) | mul.xyzw vf16, vf16, Q
nop | mulw.xyzw vf24, vf24, vf29
lq.xyzw vf25, 0(vi13) | ftoi4.xyzw vf21, vf21
lq.xyzw vf23, 1(vi10) | mul.xyzw vf12, vf12, vf23
lq.xyzw vf26, 1(vi13) | add.xyzw vf10, vf10, vf22
lq.xyzw vf20, 2(vi10) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf27, 2(vi13) | maddy.xyzw vf25, vf25, vf24
lq.xyzw vf23, 3(vi10) | mulax.xyzw ACC, vf23, vf24
lq.xyzw vf28, 3(vi13) | maddy.xyzw vf26, vf26, vf24
lq.xyzw vf20, 4(vi10) | mulax.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi13) | maddy.xyzw vf27, vf27, vf24
lq.xyzw vf23, 5(vi10) | mulax.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi13) | maddy.xyzw vf28, vf28, vf24
lq.xyzw vf20, 6(vi10) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf31, 6(vi13) | maddy.xyz vf29, vf29, vf24
mtir vi10, vf11.x | mulax.xyzw ACC, vf23, vf24
mtir vi13, vf11.y | maddy.xyz vf30, vf30, vf24
b L118 | mulax.xyzw ACC, vf20, vf24
lqi.xyzw vf23, vi03 | maddy.xyzw vf31, vf31, vf24
L103:
ibgez vi09, L104 | mulaz.xyzw ACC, vf29, vf08
sq.xyzw vf21, 2(vi11) | maddaz.xyzw ACC, vf30, vf11
nop | ftoi4.xyzw vf21, vf09
L104:
mfp.w vf20, P | maddz.xyz vf11, vf31, vf14
sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17
sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03
sq.xyzw vf21, 2(vi14) | mulaw.xyzw ACC, vf25, vf08
ilw.y vi09, -6(vi01) | mulw.xyzw vf13, vf13, vf20
1024.0 | ftoi0.xyzw vf12, vf12 :i
erleng.xyz P, vf11 | maxi.xy vf10, vf10, I
ibne vi06, vi03, L105 | maddaw.xyzw ACC, vf26, vf11
mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14
ibne vi07, vi03, L138 | nop
nop | nop
b L153 | nop
nop | nop
L105:
3072.0 | mulax.xyzw ACC, vf01, vf13 :i
lqi.xyzw vf09, vi01 | minii.xy vf10, vf10, I
sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13
sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13
lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28
lqi.xyzw vf15, vi01 | maxw.w vf10, vf10, vf02
mtir vi11, vf09.x | itof0.xyzw vf23, vf23
mtir vi14, vf09.y | maxx.xyzw vf13, vf13, vf00
nop | miniw.w vf08, vf08, vf01
div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17
move.xyzw vf21, vf10 | add.xyzw vf12, vf12, vf18
iand vi11, vi11, vi05 | add.xyzw vf15, vf15, vf19
nop | mulax.xyzw ACC, vf04, vf13
ibgtz vi09, L106 | madday.xyzw ACC, vf05, vf13
iand vi14, vi14, vi05 | maddaz.xyzw ACC, vf06, vf13
nop | addx.w vf21, vf21, vf17
L106:
ibne vi05, vi11, L107 | maddw.xyzw vf13, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf08, vf08, Q
mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q
mtir vi14, vf12.y | ftoi4.xyzw vf21, vf21
b L108 | mul.xyzw vf13, vf13, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22
L107:
lq.xyzw vf20, 0(vi11) | mul.xyzw vf14, vf14, Q
nop | mulw.xyzw vf24, vf24, vf29
lq.xyzw vf25, 0(vi14) | ftoi4.xyzw vf21, vf21
lq.xyzw vf23, 1(vi11) | mul.xyzw vf13, vf13, vf23
lq.xyzw vf26, 1(vi14) | add.xyzw vf08, vf08, vf22
lq.xyzw vf20, 2(vi11) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf27, 2(vi14) | maddy.xyzw vf25, vf25, vf24
lq.xyzw vf23, 3(vi11) | mulax.xyzw ACC, vf23, vf24
lq.xyzw vf28, 3(vi14) | maddy.xyzw vf26, vf26, vf24
lq.xyzw vf20, 4(vi11) | mulax.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi14) | maddy.xyzw vf27, vf27, vf24
lq.xyzw vf23, 5(vi11) | mulax.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi14) | maddy.xyzw vf28, vf28, vf24
lq.xyzw vf20, 6(vi11) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf31, 6(vi14) | maddy.xyz vf29, vf29, vf24
mtir vi11, vf12.x | mulax.xyzw ACC, vf23, vf24
mtir vi14, vf12.y | maddy.xyz vf30, vf30, vf24
b L123 | mulax.xyzw ACC, vf20, vf24
lqi.xyzw vf23, vi03 | maddy.xyzw vf31, vf31, vf24
L108:
ibgez vi09, L109 | mulaz.xyzw ACC, vf29, vf09
sq.xyzw vf21, 2(vi12) | maddaz.xyzw ACC, vf30, vf12
nop | ftoi4.xyzw vf21, vf10
L109:
mfp.w vf20, P | maddz.xyz vf12, vf31, vf15
sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17
sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03
sq.xyzw vf21, 2(vi15) | mulaw.xyzw ACC, vf25, vf09
ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20
1024.0 | ftoi0.xyzw vf13, vf13 :i
erleng.xyz P, vf12 | maxi.xy vf08, vf08, I
ibne vi06, vi03, L94 | maddaw.xyzw ACC, vf26, vf12
mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15
ibne vi07, vi03, L127 | nop
nop | nop
b L163 | nop
nop | nop
L110:
3072.0 | mulax.xyzw ACC, vf01, vf11 :i
lqi.xyzw vf10, vi01 | minii.xy vf08, vf08, I
sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11
sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11
lqi.xyzw vf13, vi01 | add.xyzw vf09, vf09, vf28
lqi.xyzw vf16, vi01 | maxw.w vf08, vf08, vf02
mtir vi12, vf10.x | itof0.xyzw vf23, vf23
mtir vi15, vf10.y | maxx.xyzw vf11, vf11, vf00
nop | miniw.w vf09, vf09, vf01
div Q, vf01.w, vf09.w | add.zw vf10, vf10, vf17
move.xyzw vf21, vf08 | add.xyzw vf13, vf13, vf18
iand vi12, vi12, vi05 | add.xyzw vf16, vf16, vf19
nop | mulax.xyzw ACC, vf04, vf11
ibgtz vi09, L111 | madday.xyzw ACC, vf05, vf11
iand vi15, vi15, vi05 | maddaz.xyzw ACC, vf06, vf11
nop | addx.w vf21, vf21, vf17
L111:
ibne vi05, vi12, L112 | maddw.xyzw vf11, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf09, vf09, Q
mtir vi12, vf13.x | mul.xyzw vf15, vf15, Q
mtir vi15, vf13.y | ftoi4.xyzw vf21, vf21
b L113 | mul.xyzw vf11, vf11, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22
L112:
lq.xyzw vf20, 0(vi12) | mul.xyzw vf15, vf15, Q
lq.xyzw vf25, 0(vi15) | ftoi4.xyzw vf21, vf21
lq.xyzw vf23, 1(vi12) | mul.xyzw vf11, vf11, vf23
lq.xyzw vf26, 1(vi15) | add.xyzw vf09, vf09, vf22
lq.xyzw vf20, 2(vi12) | mulaz.xyzw ACC, vf20, vf24
lq.xyzw vf27, 2(vi15) | maddw.xyzw vf25, vf25, vf24
lq.xyzw vf23, 3(vi12) | mulaz.xyzw ACC, vf23, vf24
lq.xyzw vf28, 3(vi15) | maddw.xyzw vf26, vf26, vf24
lq.xyzw vf20, 4(vi12) | mulaz.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi15) | maddw.xyzw vf27, vf27, vf24
lq.xyzw vf23, 5(vi12) | mulaz.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi15) | maddw.xyzw vf28, vf28, vf24
lq.xyzw vf20, 6(vi12) | mulaz.xyzw ACC, vf20, vf24
lq.xyzw vf31, 6(vi15) | maddw.xyz vf29, vf29, vf24
lqi.xyzw vf23, vi02 | mulaz.xyzw ACC, vf23, vf24
mtir vi12, vf13.x | maddw.xyz vf30, vf30, vf24
mtir vi15, vf13.y | mulaz.xyzw ACC, vf20, vf24
b L98 | maddw.xyzw vf31, vf31, vf24
lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23
L113:
ibgez vi09, L114 | mulaz.xyzw ACC, vf29, vf10
sq.xyzw vf21, 2(vi10) | maddaz.xyzw ACC, vf30, vf13
nop | ftoi4.xyzw vf21, vf08
L114:
mfp.w vf20, P | maddz.xyz vf13, vf31, vf16
sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17
sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03
sq.xyzw vf21, 2(vi13) | mulaw.xyzw ACC, vf25, vf10
ilw.y vi09, -6(vi01) | mulw.xyzw vf12, vf12, vf20
1024.0 | ftoi0.xyzw vf11, vf11 :i
erleng.xyz P, vf13 | maxi.xy vf09, vf09, I
ibne vi06, vi03, L115 | maddaw.xyzw ACC, vf26, vf13
mr32.z vf16, vf00 | maddw.xyzw vf10, vf27, vf16
ibne vi07, vi03, L133 | nop
nop | nop
b L143 | nop
nop | nop
L115:
3072.0 | mulax.xyzw ACC, vf01, vf12 :i
lqi.xyzw vf08, vi01 | minii.xy vf09, vf09, I
sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12
sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12
lqi.xyzw vf11, vi01 | add.xyzw vf10, vf10, vf28
lqi.xyzw vf14, vi01 | maxw.w vf09, vf09, vf02
mtir vi10, vf08.x | itof0.xyzw vf23, vf23
mtir vi13, vf08.y | maxx.xyzw vf12, vf12, vf00
nop | miniw.w vf10, vf10, vf01
div Q, vf01.w, vf10.w | add.zw vf08, vf08, vf17
move.xyzw vf21, vf09 | add.xyzw vf11, vf11, vf18
iand vi10, vi10, vi05 | add.xyzw vf14, vf14, vf19
nop | mulax.xyzw ACC, vf04, vf12
ibgtz vi09, L116 | madday.xyzw ACC, vf05, vf12
iand vi13, vi13, vi05 | maddaz.xyzw ACC, vf06, vf12
nop | addx.w vf21, vf21, vf17
L116:
ibne vi05, vi10, L117 | maddw.xyzw vf12, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf10, vf10, Q
mtir vi10, vf11.x | mul.xyzw vf16, vf16, Q
mtir vi13, vf11.y | ftoi4.xyzw vf21, vf21
b L118 | mul.xyzw vf12, vf12, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22
L117:
lq.xyzw vf20, 0(vi10) | mul.xyzw vf16, vf16, Q
lq.xyzw vf25, 0(vi13) | ftoi4.xyzw vf21, vf21
lq.xyzw vf23, 1(vi10) | mul.xyzw vf12, vf12, vf23
lq.xyzw vf26, 1(vi13) | add.xyzw vf10, vf10, vf22
lq.xyzw vf20, 2(vi10) | mulaz.xyzw ACC, vf20, vf24
lq.xyzw vf27, 2(vi13) | maddw.xyzw vf25, vf25, vf24
lq.xyzw vf23, 3(vi10) | mulaz.xyzw ACC, vf23, vf24
lq.xyzw vf28, 3(vi13) | maddw.xyzw vf26, vf26, vf24
lq.xyzw vf20, 4(vi10) | mulaz.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi13) | maddw.xyzw vf27, vf27, vf24
lq.xyzw vf23, 5(vi10) | mulaz.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi13) | maddw.xyzw vf28, vf28, vf24
lq.xyzw vf20, 6(vi10) | mulaz.xyzw ACC, vf20, vf24
lq.xyzw vf31, 6(vi13) | maddw.xyz vf29, vf29, vf24
lqi.xyzw vf23, vi02 | mulaz.xyzw ACC, vf23, vf24
mtir vi10, vf11.x | maddw.xyz vf30, vf30, vf24
mtir vi13, vf11.y | mulaz.xyzw ACC, vf20, vf24
b L103 | maddw.xyzw vf31, vf31, vf24
lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23
L118:
ibgez vi09, L119 | mulaz.xyzw ACC, vf29, vf08
sq.xyzw vf21, 2(vi11) | maddaz.xyzw ACC, vf30, vf11
nop | ftoi4.xyzw vf21, vf09
L119:
mfp.w vf20, P | maddz.xyz vf11, vf31, vf14
sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17
sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03
sq.xyzw vf21, 2(vi14) | mulaw.xyzw ACC, vf25, vf08
ilw.y vi09, -6(vi01) | mulw.xyzw vf13, vf13, vf20
1024.0 | ftoi0.xyzw vf12, vf12 :i
erleng.xyz P, vf11 | maxi.xy vf10, vf10, I
ibne vi06, vi03, L120 | maddaw.xyzw ACC, vf26, vf11
mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14
ibne vi07, vi03, L138 | nop
nop | nop
b L153 | nop
nop | nop
L120:
3072.0 | mulax.xyzw ACC, vf01, vf13 :i
lqi.xyzw vf09, vi01 | minii.xy vf10, vf10, I
sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13
sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13
lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28
lqi.xyzw vf15, vi01 | maxw.w vf10, vf10, vf02
mtir vi11, vf09.x | itof0.xyzw vf23, vf23
mtir vi14, vf09.y | maxx.xyzw vf13, vf13, vf00
nop | miniw.w vf08, vf08, vf01
div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17
move.xyzw vf21, vf10 | add.xyzw vf12, vf12, vf18
iand vi11, vi11, vi05 | add.xyzw vf15, vf15, vf19
nop | mulax.xyzw ACC, vf04, vf13
ibgtz vi09, L121 | madday.xyzw ACC, vf05, vf13
iand vi14, vi14, vi05 | maddaz.xyzw ACC, vf06, vf13
nop | addx.w vf21, vf21, vf17
L121:
ibne vi05, vi11, L122 | maddw.xyzw vf13, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf08, vf08, Q
mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q
mtir vi14, vf12.y | ftoi4.xyzw vf21, vf21
b L123 | mul.xyzw vf13, vf13, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22
L122:
lq.xyzw vf20, 0(vi11) | mul.xyzw vf14, vf14, Q
lq.xyzw vf25, 0(vi14) | ftoi4.xyzw vf21, vf21
lq.xyzw vf23, 1(vi11) | mul.xyzw vf13, vf13, vf23
lq.xyzw vf26, 1(vi14) | add.xyzw vf08, vf08, vf22
lq.xyzw vf20, 2(vi11) | mulaz.xyzw ACC, vf20, vf24
lq.xyzw vf27, 2(vi14) | maddw.xyzw vf25, vf25, vf24
lq.xyzw vf23, 3(vi11) | mulaz.xyzw ACC, vf23, vf24
lq.xyzw vf28, 3(vi14) | maddw.xyzw vf26, vf26, vf24
lq.xyzw vf20, 4(vi11) | mulaz.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi14) | maddw.xyzw vf27, vf27, vf24
lq.xyzw vf23, 5(vi11) | mulaz.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi14) | maddw.xyzw vf28, vf28, vf24
lq.xyzw vf20, 6(vi11) | mulaz.xyzw ACC, vf20, vf24
lq.xyzw vf31, 6(vi14) | maddw.xyz vf29, vf29, vf24
lqi.xyzw vf23, vi02 | mulaz.xyzw ACC, vf23, vf24
mtir vi11, vf12.x | maddw.xyz vf30, vf30, vf24
mtir vi14, vf12.y | mulaz.xyzw ACC, vf20, vf24
b L108 | maddw.xyzw vf31, vf31, vf24
lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23
L123:
ibgez vi09, L124 | mulaz.xyzw ACC, vf29, vf09
sq.xyzw vf21, 2(vi12) | maddaz.xyzw ACC, vf30, vf12
nop | ftoi4.xyzw vf21, vf10
L124:
mfp.w vf20, P | maddz.xyz vf12, vf31, vf15
sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17
sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03
sq.xyzw vf21, 2(vi15) | mulaw.xyzw ACC, vf25, vf09
ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20
1024.0 | ftoi0.xyzw vf13, vf13 :i
erleng.xyz P, vf12 | maxi.xy vf08, vf08, I
ibne vi06, vi03, L110 | maddaw.xyzw ACC, vf26, vf12
mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15
ibne vi07, vi03, L133 | nop
nop | nop
b L163 | nop
nop | nop
L125:
erleng.xyz P, vf12 | maxi.xy vf08, vf08, I
3072.0 | nop :i
nop | minii.xy vf08, vf08, I
nop | maddaw.xyzw ACC, vf26, vf12
mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15
L126:
lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11
b L128 | madday.xyzw ACC, vf02, vf11
nop | maddz.xyzw vf11, vf03, vf11
L127:
3072.0 | mulax.xyzw ACC, vf01, vf11 :i
lqi.xyzw vf10, vi01 | minii.xy vf08, vf08, I
sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11
sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11
L128:
lqi.xyzw vf13, vi01 | add.xyzw vf09, vf09, vf28
lqi.xyzw vf16, vi01 | maxw.w vf08, vf08, vf02
mtir vi12, vf10.x | itof0.xyzw vf23, vf23
mtir vi15, vf10.y | maxx.xyzw vf11, vf11, vf00
nop | miniw.w vf09, vf09, vf01
div Q, vf01.w, vf09.w | add.zw vf10, vf10, vf17
move.xyzw vf21, vf08 | add.xyzw vf13, vf13, vf18
iand vi12, vi12, vi05 | add.xyzw vf16, vf16, vf19
ilw.w vi08, -1(vi02) | mulax.xyzw ACC, vf04, vf11
ibgtz vi09, L129 | madday.xyzw ACC, vf05, vf11
iand vi15, vi15, vi05 | maddaz.xyzw ACC, vf06, vf11
nop | addx.w vf21, vf21, vf17
L129:
ibne vi05, vi12, L130 | maddw.xyzw vf11, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf09, vf09, Q
mtir vi12, vf13.x | mul.xyzw vf15, vf15, Q
mtir vi15, vf13.y | ftoi4.xyzw vf21, vf21
b L131 | mul.xyzw vf11, vf11, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22
L130:
lq.xyzw vf20, 0(vi12) | mul.xyzw vf15, vf15, Q
nop | mulw.xyzw vf24, vf24, vf29
lq.xyzw vf31, 0(vi15) | ftoi4.xyzw vf21, vf21
lq.xyzw vf25, 0(vi08) | mul.xyzw vf11, vf11, vf23
lq.xyzw vf23, 1(vi12) | add.xyzw vf09, vf09, vf22
lq.xyzw vf20, 1(vi15) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf26, 1(vi08) | madday.xyzw ACC, vf31, vf24
lq.xyzw vf31, 2(vi12) | maddz.xyzw vf25, vf25, vf24
lq.xyzw vf23, 2(vi15) | mulax.xyzw ACC, vf23, vf24
lq.xyzw vf27, 2(vi08) | madday.xyzw ACC, vf20, vf24
lq.xyzw vf20, 3(vi12) | maddz.xyzw vf26, vf26, vf24
lq.xyzw vf31, 3(vi15) | mulax.xyzw ACC, vf31, vf24
lq.xyzw vf28, 3(vi08) | madday.xyzw ACC, vf23, vf24
lq.xyzw vf23, 4(vi12) | maddz.xyzw vf27, vf27, vf24
lq.xyzw vf20, 4(vi15) | mulax.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi08) | madday.xyzw ACC, vf31, vf24
lq.xyzw vf31, 5(vi12) | maddz.xyzw vf28, vf28, vf24
lq.xyzw vf23, 5(vi15) | mulax.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi08) | madday.xyzw ACC, vf20, vf24
lq.xyzw vf20, 6(vi12) | maddz.xyz vf29, vf29, vf24
lq.xyzw vf22, 6(vi15) | mulax.xyzw ACC, vf31, vf24
lq.xyzw vf31, 6(vi08) | madday.xyzw ACC, vf23, vf24
lqi.xyzw vf23, vi02 | maddz.xyz vf30, vf30, vf24
mtir vi12, vf13.x | mulax.xyzw ACC, vf20, vf24
mtir vi15, vf13.y | madday.xyzw ACC, vf22, vf24
lq.xyzw vf22, 2(vi00) | maddz.xyzw vf31, vf31, vf24
lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23
L131:
ibgez vi09, L132 | mulaz.xyzw ACC, vf29, vf10
sq.xyzw vf21, 2(vi10) | maddaz.xyzw ACC, vf30, vf13
nop | ftoi4.xyzw vf21, vf08
L132:
mfp.w vf20, P | maddz.xyz vf13, vf31, vf16
sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17
sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03
sq.xyzw vf21, 2(vi13) | mulaw.xyzw ACC, vf25, vf10
ilw.y vi09, -6(vi01) | mulw.xyzw vf12, vf12, vf20
1024.0 | ftoi0.xyzw vf11, vf11 :i
erleng.xyz P, vf13 | maxi.xy vf09, vf09, I
ibeq vi07, vi03, L143 | maddaw.xyzw ACC, vf26, vf13
mr32.z vf16, vf00 | maddw.xyzw vf10, vf27, vf16
L133:
3072.0 | mulax.xyzw ACC, vf01, vf12 :i
lqi.xyzw vf08, vi01 | minii.xy vf09, vf09, I
sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12
sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12
lqi.xyzw vf11, vi01 | add.xyzw vf10, vf10, vf28
lqi.xyzw vf14, vi01 | maxw.w vf09, vf09, vf02
mtir vi10, vf08.x | itof0.xyzw vf23, vf23
mtir vi13, vf08.y | maxx.xyzw vf12, vf12, vf00
nop | miniw.w vf10, vf10, vf01
div Q, vf01.w, vf10.w | add.zw vf08, vf08, vf17
move.xyzw vf21, vf09 | add.xyzw vf11, vf11, vf18
iand vi10, vi10, vi05 | add.xyzw vf14, vf14, vf19
ilw.w vi08, -1(vi02) | mulax.xyzw ACC, vf04, vf12
ibgtz vi09, L134 | madday.xyzw ACC, vf05, vf12
iand vi13, vi13, vi05 | maddaz.xyzw ACC, vf06, vf12
nop | addx.w vf21, vf21, vf17
L134:
ibne vi05, vi10, L135 | maddw.xyzw vf12, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf10, vf10, Q
mtir vi10, vf11.x | mul.xyzw vf16, vf16, Q
mtir vi13, vf11.y | ftoi4.xyzw vf21, vf21
b L136 | mul.xyzw vf12, vf12, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22
L135:
lq.xyzw vf20, 0(vi10) | mul.xyzw vf16, vf16, Q
nop | mulw.xyzw vf24, vf24, vf29
lq.xyzw vf31, 0(vi13) | ftoi4.xyzw vf21, vf21
lq.xyzw vf25, 0(vi08) | mul.xyzw vf12, vf12, vf23
lq.xyzw vf23, 1(vi10) | add.xyzw vf10, vf10, vf22
lq.xyzw vf20, 1(vi13) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf26, 1(vi08) | madday.xyzw ACC, vf31, vf24
lq.xyzw vf31, 2(vi10) | maddz.xyzw vf25, vf25, vf24
lq.xyzw vf23, 2(vi13) | mulax.xyzw ACC, vf23, vf24
lq.xyzw vf27, 2(vi08) | madday.xyzw ACC, vf20, vf24
lq.xyzw vf20, 3(vi10) | maddz.xyzw vf26, vf26, vf24
lq.xyzw vf31, 3(vi13) | mulax.xyzw ACC, vf31, vf24
lq.xyzw vf28, 3(vi08) | madday.xyzw ACC, vf23, vf24
lq.xyzw vf23, 4(vi10) | maddz.xyzw vf27, vf27, vf24
lq.xyzw vf20, 4(vi13) | mulax.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi08) | madday.xyzw ACC, vf31, vf24
lq.xyzw vf31, 5(vi10) | maddz.xyzw vf28, vf28, vf24
lq.xyzw vf23, 5(vi13) | mulax.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi08) | madday.xyzw ACC, vf20, vf24
lq.xyzw vf20, 6(vi10) | maddz.xyz vf29, vf29, vf24
lq.xyzw vf22, 6(vi13) | mulax.xyzw ACC, vf31, vf24
lq.xyzw vf31, 6(vi08) | madday.xyzw ACC, vf23, vf24
lqi.xyzw vf23, vi02 | maddz.xyz vf30, vf30, vf24
mtir vi10, vf11.x | mulax.xyzw ACC, vf20, vf24
mtir vi13, vf11.y | madday.xyzw ACC, vf22, vf24
lq.xyzw vf22, 2(vi00) | maddz.xyzw vf31, vf31, vf24
lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23
L136:
ibgez vi09, L137 | mulaz.xyzw ACC, vf29, vf08
sq.xyzw vf21, 2(vi11) | maddaz.xyzw ACC, vf30, vf11
nop | ftoi4.xyzw vf21, vf09
L137:
mfp.w vf20, P | maddz.xyz vf11, vf31, vf14
sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17
sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03
sq.xyzw vf21, 2(vi14) | mulaw.xyzw ACC, vf25, vf08
ilw.y vi09, -6(vi01) | mulw.xyzw vf13, vf13, vf20
1024.0 | ftoi0.xyzw vf12, vf12 :i
erleng.xyz P, vf11 | maxi.xy vf10, vf10, I
ibeq vi07, vi03, L153 | maddaw.xyzw ACC, vf26, vf11
mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14
L138:
3072.0 | mulax.xyzw ACC, vf01, vf13 :i
lqi.xyzw vf09, vi01 | minii.xy vf10, vf10, I
sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13
sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13
lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28
lqi.xyzw vf15, vi01 | maxw.w vf10, vf10, vf02
mtir vi11, vf09.x | itof0.xyzw vf23, vf23
mtir vi14, vf09.y | maxx.xyzw vf13, vf13, vf00
nop | miniw.w vf08, vf08, vf01
div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17
move.xyzw vf21, vf10 | add.xyzw vf12, vf12, vf18
iand vi11, vi11, vi05 | add.xyzw vf15, vf15, vf19
ilw.w vi08, -1(vi02) | mulax.xyzw ACC, vf04, vf13
ibgtz vi09, L139 | madday.xyzw ACC, vf05, vf13
iand vi14, vi14, vi05 | maddaz.xyzw ACC, vf06, vf13
nop | addx.w vf21, vf21, vf17
L139:
ibne vi05, vi11, L140 | maddw.xyzw vf13, vf07, vf00
ilw.x vi09, -9(vi01) | mul.xyz vf08, vf08, Q
mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q
mtir vi14, vf12.y | ftoi4.xyzw vf21, vf21
b L141 | mul.xyzw vf13, vf13, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22
L140:
lq.xyzw vf20, 0(vi11) | mul.xyzw vf14, vf14, Q
nop | mulw.xyzw vf24, vf24, vf29
lq.xyzw vf31, 0(vi14) | ftoi4.xyzw vf21, vf21
lq.xyzw vf25, 0(vi08) | mul.xyzw vf13, vf13, vf23
lq.xyzw vf23, 1(vi11) | add.xyzw vf08, vf08, vf22
lq.xyzw vf20, 1(vi14) | mulax.xyzw ACC, vf20, vf24
lq.xyzw vf26, 1(vi08) | madday.xyzw ACC, vf31, vf24
lq.xyzw vf31, 2(vi11) | maddz.xyzw vf25, vf25, vf24
lq.xyzw vf23, 2(vi14) | mulax.xyzw ACC, vf23, vf24
lq.xyzw vf27, 2(vi08) | madday.xyzw ACC, vf20, vf24
lq.xyzw vf20, 3(vi11) | maddz.xyzw vf26, vf26, vf24
lq.xyzw vf31, 3(vi14) | mulax.xyzw ACC, vf31, vf24
lq.xyzw vf28, 3(vi08) | madday.xyzw ACC, vf23, vf24
lq.xyzw vf23, 4(vi11) | maddz.xyzw vf27, vf27, vf24
lq.xyzw vf20, 4(vi14) | mulax.xyzw ACC, vf20, vf24
lq.xyz vf29, 4(vi08) | madday.xyzw ACC, vf31, vf24
lq.xyzw vf31, 5(vi11) | maddz.xyzw vf28, vf28, vf24
lq.xyzw vf23, 5(vi14) | mulax.xyzw ACC, vf23, vf24
lq.xyz vf30, 5(vi08) | madday.xyzw ACC, vf20, vf24
lq.xyzw vf20, 6(vi11) | maddz.xyz vf29, vf29, vf24
lq.xyzw vf22, 6(vi14) | mulax.xyzw ACC, vf31, vf24
lq.xyzw vf31, 6(vi08) | madday.xyzw ACC, vf23, vf24
lqi.xyzw vf23, vi02 | maddz.xyz vf30, vf30, vf24
mtir vi11, vf12.x | mulax.xyzw ACC, vf20, vf24
mtir vi14, vf12.y | madday.xyzw ACC, vf22, vf24
lq.xyzw vf22, 2(vi00) | maddz.xyzw vf31, vf31, vf24
lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23
L141:
ibgez vi09, L142 | mulaz.xyzw ACC, vf29, vf09
sq.xyzw vf21, 2(vi12) | maddaz.xyzw ACC, vf30, vf12
nop | ftoi4.xyzw vf21, vf10
L142:
mfp.w vf20, P | maddz.xyz vf12, vf31, vf15
sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17
sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03
sq.xyzw vf21, 2(vi15) | mulaw.xyzw ACC, vf25, vf09
ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20
1024.0 | ftoi0.xyzw vf13, vf13 :i
erleng.xyz P, vf12 | maxi.xy vf08, vf08, I
ibne vi07, vi03, L127 | maddaw.xyzw ACC, vf26, vf12
mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15
b L163 | nop
nop | nop
L143: ;; exit cross 1
ilw.w vi08, 1(vi00) | nop ;; vi08 = mercprime flag
xtop vi02 | mulax.xyzw ACC, vf01, vf12 ;; vi02 = out (0) | pipe
sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12 ;; pipe | pipe
sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12 ;; pipe | pipe
iaddiu vi04, vi02, 0x8c | add.xyzw vf10, vf10, vf28 ;; vi04 = 140 (byte header) | pipe
ilwr.x vi05, vi04 | maxw.w vf09, vf09, vf02 ;; vi05 = srcdest-off | pipe
ilw.w vi06, 1(vi04) | itof0.xyzw vf23, vf23 ;; vi06 = samecopy-cnt | pipe
ibne vi00, vi08, L151 | nop ;; goto L151 if merc prime (just a detour to set constants).
ilw.x vi07, 2(vi04) | maxx.xyzw vf12, vf12, vf00 ;; vi07 = crosscopy-cnt | pipe
L144:
div Q, vf01.w, vf10.w | minix.xyzw vf25, vf00, vf00 ;; pipe | vf25 = 0
move.xyzw vf21, vf09 | minix.xyzw vf26, vf00, vf00 ;; pipe | vf26 = 0
iadd vi05, vi05, vi04 | nop ;; vi05 = srcdest table addr
iaddiu vi04, vi02, 0x173 | mulax.xyzw ACC, vf04, vf12 ;; vi04 = "output zone" | pipe
ibgtz vi09, L145 | madday.xyzw ACC, vf05, vf12 ;; pipe | pipe
iadd vi06, vi06, vi05 | maddaz.xyzw ACC, vf06, vf12 ;; vi06 = cross copy table | pipe
nop | addx.w vf21, vf21, vf17 ;; pipe | pipe
L145:
iadd vi07, vi07, vi06 | maddw.xyzw vf12, vf07, vf00 ;; vi07 = end cross copy table | pipe
ilw.x vi09, -6(vi01) | mul.xyz vf10, vf10, Q ;; ?????? | pipe
iaddiu vi08, vi00, 0x1ba | mul.xyzw vf16, vf16, Q ;; vi08 = 442 | pipe
isub vi08, vi08, vi02 | ftoi4.xyzw vf21, vf21 ;; vi08 is the other buffer | pipe
iaddiu vi08, vi08, 0x173 | mul.xyzw vf12, vf12, vf23 ;; vi08 is the other buffer | pipe
lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22 ;; pipe | pipe
ibgez vi09, L146 | nop ;; pipe (but weird, not applicable for mat1, but still works)
sq.xyzw vf21, 2(vi11) | nop ;; pipe
nop | ftoi4.xyzw vf21, vf09 ;; pipe (slightly wrong for mat1, but might not matter?)
L146:
mfp.w vf20, P | nop ;; pipe
sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17 ;; pipe
sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03 ;; pipe
sq.xyzw vf21, 2(vi14) | nop ;; pipe
ilw.y vi09, -3(vi01) | mulw.xyzw vf13, vf13, vf20 ;; werid pipe | pipe
mfir.x vf25, vi04 | ftoi0.xyzw vf12, vf12 ;; vf25.x = output zone | pipe
mfir.y vf25, vi04 | nop ;; vf25.y = output zone
mfir.x vf26, vi08 | nop ;; vf26.x = old output zone
ilw.w vi02, 1(vi00) | nop ;; vi02 = mercprime flag
mfir.y vf26, vi04 | mulax.xyzw ACC, vf01, vf13 ;; vf26.y = output zone | pipe
sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13 ;; pipe | pipe
sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13 ;; pipe | pipe
nop | nop ;; ? why the nop ?
ibne vi00, vi02, L152 | maxw.w vf10, vf10, vf02 ;; mercprime detour | pipe
nop | itof0.xyzw vf23, vf23 ;; pipe
L147:
8388608.0 | maxx.xyzw vf13, vf13, vf00 :i ;; vf13 = 0
256.0 | maxi.xy vf27, vf00, I :i ;; vf27.xy = 8388608.0
move.xyzw vf21, vf10 | maxi.w vf27, vf00, I ;; pipe | vf27.w = 256.0
nop | nop ;; ??
nop | mulax.xyzw ACC, vf04, vf13 ;; pipe
ibgtz vi09, L148 | madday.xyzw ACC, vf05, vf13 ;; pipe | pipe
nop | maddaz.xyzw ACC, vf06, vf13 ;; pipe
nop | addx.w vf21, vf21, vf17 ;; pipe
L148:
nop | maddw.xyzw vf13, vf07, vf00 ;; pipe
ilw.x vi09, -3(vi01) | itof0.xyzw vf25, vf25 ;; pipe | zone addrs to float
nop | itof0.xyzw vf26, vf26 ;; zone addrs to float
nop | ftoi4.xyzw vf21, vf21 ;; pipe
nop | mul.xyzw vf13, vf13, vf23 ;; pipe
ior vi02, vi05, vi00 | add.xyzw vf25, vf25, vf27 ;; vi02 = srcdst table | float trick
ibgez vi09, L149 | add.xyzw vf26, vf26, vf27 ;; pipe | float trick
sq.xyzw vf21, 2(vi12) | nop ;; pipe
nop | ftoi4.xyzw vf21, vf10 ;; pipe
L149:
ibne vi06, vi05, L150 | nop
sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17
ior vi06, vi07, vi00 | max.xyzw vf25, vf26, vf26
L150:
sq.xyzw vf16, 0(vi15) | nop ;; pipe
sq.xyzw vf21, 2(vi15) | nop ;; pipe
lqi.xyzw vf27, vi05 | nop
nop | ftoi0.xyzw vf13, vf13 ;; pipe
nop | nop
nop | nop
nop | itof0.xyzw vf27, vf27
sq.xyzw vf13, 1(vi12) | nop ;; pipe
b L173 | nop
sq.xyzw vf13, 1(vi15) | nop ;; pipe
L151:
3072.0 | miniw.w vf10, vf10, vf01 :i
b L144 | minii.xy vf09, vf09, I
nop | nop
L152:
1024.0 | nop :i
3072.0 | maxi.xy vf10, vf10, I :i
b L147 | minii.xy vf10, vf10, I
isw.w vi00, 1(vi00) | nop
L153: ;; exit cross 2
ilw.w vi08, 1(vi00) | nop
xtop vi02 | mulax.xyzw ACC, vf01, vf13
sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13
sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13
iaddiu vi04, vi02, 0x8c | add.xyzw vf08, vf08, vf28
ilwr.x vi05, vi04 | maxw.w vf10, vf10, vf02
ilw.w vi06, 1(vi04) | itof0.xyzw vf23, vf23
ibne vi00, vi08, L161 | nop
ilw.x vi07, 2(vi04) | maxx.xyzw vf13, vf13, vf00
L154:
div Q, vf01.w, vf08.w | minix.xyzw vf25, vf00, vf00
move.xyzw vf21, vf10 | minix.xyzw vf26, vf00, vf00
iadd vi05, vi05, vi04 | nop
iaddiu vi04, vi02, 0x173 | mulax.xyzw ACC, vf04, vf13
ibgtz vi09, L155 | madday.xyzw ACC, vf05, vf13
iadd vi06, vi06, vi05 | maddaz.xyzw ACC, vf06, vf13
nop | addx.w vf21, vf21, vf17
L155:
iadd vi07, vi07, vi06 | maddw.xyzw vf13, vf07, vf00
ilw.x vi09, -6(vi01) | mul.xyz vf08, vf08, Q
iaddiu vi08, vi00, 0x1ba | mul.xyzw vf14, vf14, Q
isub vi08, vi08, vi02 | ftoi4.xyzw vf21, vf21
iaddiu vi08, vi08, 0x173 | mul.xyzw vf13, vf13, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22
ibgez vi09, L156 | nop
sq.xyzw vf21, 2(vi12) | nop
nop | ftoi4.xyzw vf21, vf10
L156:
mfp.w vf20, P | nop
sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17
sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03
sq.xyzw vf21, 2(vi15) | nop
ilw.y vi09, -3(vi01) | mulw.xyzw vf11, vf11, vf20
mfir.x vf25, vi04 | ftoi0.xyzw vf13, vf13
mfir.y vf25, vi04 | nop
mfir.x vf26, vi08 | nop
ilw.w vi02, 1(vi00) | nop
mfir.y vf26, vi04 | mulax.xyzw ACC, vf01, vf11
sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11
sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11
nop | nop
ibne vi00, vi02, L162 | maxw.w vf08, vf08, vf02
nop | itof0.xyzw vf23, vf23
L157:
8388608.0 | maxx.xyzw vf11, vf11, vf00 :i
256.0 | maxi.xy vf27, vf00, I :i
move.xyzw vf21, vf08 | maxi.w vf27, vf00, I
nop | nop
nop | mulax.xyzw ACC, vf04, vf11
ibgtz vi09, L158 | madday.xyzw ACC, vf05, vf11
nop | maddaz.xyzw ACC, vf06, vf11
nop | addx.w vf21, vf21, vf17
L158:
nop | maddw.xyzw vf11, vf07, vf00
ilw.x vi09, -3(vi01) | itof0.xyzw vf25, vf25
nop | itof0.xyzw vf26, vf26
nop | ftoi4.xyzw vf21, vf21
nop | mul.xyzw vf11, vf11, vf23
ior vi02, vi05, vi00 | add.xyzw vf25, vf25, vf27
ibgez vi09, L159 | add.xyzw vf26, vf26, vf27
sq.xyzw vf21, 2(vi10) | nop
nop | ftoi4.xyzw vf21, vf08
L159:
ibne vi06, vi05, L160 | nop
sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17
ior vi06, vi07, vi00 | max.xyzw vf25, vf26, vf26
L160:
sq.xyzw vf14, 0(vi13) | nop
sq.xyzw vf21, 2(vi13) | nop
lqi.xyzw vf27, vi05 | nop
nop | ftoi0.xyzw vf11, vf11
nop | nop
nop | nop
nop | itof0.xyzw vf27, vf27
sq.xyzw vf11, 1(vi10) | nop
b L173 | nop
sq.xyzw vf11, 1(vi13) | nop
L161:
3072.0 | miniw.w vf08, vf08, vf01 :i
b L154 | minii.xy vf10, vf10, I
nop | nop
L162:
1024.0 | nop :i
3072.0 | maxi.xy vf08, vf08, I :i
b L157 | minii.xy vf08, vf08, I
isw.w vi00, 1(vi00) | nop
L163: ;; exit cross 3
ilw.w vi08, 1(vi00) | nop
xtop vi02 | mulax.xyzw ACC, vf01, vf11
sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11
sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11
iaddiu vi04, vi02, 0x8c | add.xyzw vf09, vf09, vf28
ilwr.x vi05, vi04 | maxw.w vf08, vf08, vf02
ilw.w vi06, 1(vi04) | itof0.xyzw vf23, vf23
ibne vi00, vi08, L171 | nop
ilw.x vi07, 2(vi04) | maxx.xyzw vf11, vf11, vf00
L164:
div Q, vf01.w, vf09.w | minix.xyzw vf25, vf00, vf00
move.xyzw vf21, vf08 | minix.xyzw vf26, vf00, vf00
iadd vi05, vi05, vi04 | nop
iaddiu vi04, vi02, 0x173 | mulax.xyzw ACC, vf04, vf11
ibgtz vi09, L165 | madday.xyzw ACC, vf05, vf11
iadd vi06, vi06, vi05 | maddaz.xyzw ACC, vf06, vf11
nop | addx.w vf21, vf21, vf17
L165:
iadd vi07, vi07, vi06 | maddw.xyzw vf11, vf07, vf00
ilw.x vi09, -6(vi01) | mul.xyz vf09, vf09, Q
iaddiu vi08, vi00, 0x1ba | mul.xyzw vf15, vf15, Q
isub vi08, vi08, vi02 | ftoi4.xyzw vf21, vf21
iaddiu vi08, vi08, 0x173 | mul.xyzw vf11, vf11, vf23
lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22
ibgez vi09, L166 | nop
sq.xyzw vf21, 2(vi10) | nop
nop | ftoi4.xyzw vf21, vf08
L166:
mfp.w vf20, P | nop
sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17
sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03
sq.xyzw vf21, 2(vi13) | nop
ilw.y vi09, -3(vi01) | mulw.xyzw vf12, vf12, vf20
mfir.x vf25, vi04 | ftoi0.xyzw vf11, vf11
mfir.y vf25, vi04 | nop
mfir.x vf26, vi08 | nop
ilw.w vi02, 1(vi00) | nop
mfir.y vf26, vi04 | mulax.xyzw ACC, vf01, vf12
sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12
sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12
nop | nop
ibne vi00, vi02, L172 | maxw.w vf09, vf09, vf02
nop | itof0.xyzw vf23, vf23
L167:
8388608.0 | maxx.xyzw vf12, vf12, vf00 :i
256.0 | maxi.xy vf27, vf00, I :i
move.xyzw vf21, vf09 | maxi.w vf27, vf00, I
nop | nop
nop | mulax.xyzw ACC, vf04, vf12
ibgtz vi09, L168 | madday.xyzw ACC, vf05, vf12
nop | maddaz.xyzw ACC, vf06, vf12
nop | addx.w vf21, vf21, vf17
L168:
nop | maddw.xyzw vf12, vf07, vf00
ilw.x vi09, -3(vi01) | itof0.xyzw vf25, vf25
nop | itof0.xyzw vf26, vf26
nop | ftoi4.xyzw vf21, vf21
nop | mul.xyzw vf12, vf12, vf23
ior vi02, vi05, vi00 | add.xyzw vf25, vf25, vf27
ibgez vi09, L169 | add.xyzw vf26, vf26, vf27
sq.xyzw vf21, 2(vi11) | nop
nop | ftoi4.xyzw vf21, vf09
L169:
ibne vi06, vi05, L170 | nop
sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17
ior vi06, vi07, vi00 | max.xyzw vf25, vf26, vf26
L170:
sq.xyzw vf15, 0(vi14) | nop
sq.xyzw vf21, 2(vi14) | nop
lqi.xyzw vf27, vi05 | nop
nop | ftoi0.xyzw vf12, vf12
nop | nop
nop | nop
nop | itof0.xyzw vf27, vf27
sq.xyzw vf12, 1(vi11) | nop
b L173 | nop
sq.xyzw vf12, 1(vi14) | nop
L171:
3072.0 | miniw.w vf09, vf09, vf01 :i
b L164 | minii.xy vf08, vf08, I
nop | nop
L172:
1024.0 | nop :i
3072.0 | maxi.xy vf09, vf09, I :i
b L167 | minii.xy vf09, vf09, I
isw.w vi00, 1(vi00) | nop
;; end routine.
L173:
ibeq vi07, vi02, L179 | nop
ilw.w vi15, 132(vi00) | nop
ibne vi06, vi05, L174 | add.xyzw vf11, vf27, vf25
nop | nop
ibne vi07, vi06, L174 | nop
ior vi06, vi07, vi00 | max.xyzw vf25, vf26, vf26
nop | nop
nop | nop
mtir vi08, vf11.x | nop
mtir vi10, vf11.y | nop
nop | nop
nop | nop
lq.xyzw vf16, 2(vi08) | maxx.xyzw vf15, vf11, vf00
lq.xyzw vf13, 0(vi08) | nop
b L178 | nop
nop | nop
L174:
lqi.xyzw vf27, vi05 | nop
nop | nop
mtir vi08, vf11.x | nop
mtir vi09, vf11.y | nop
nop | itof0.xyzw vf27, vf27
nop | nop
lq.xyzw vf12, 2(vi08) | maxx.xyzw vf15, vf11, vf00
lq.xyzw vf13, 0(vi08) | nop
ibne vi06, vi05, L175 | add.xyzw vf11, vf27, vf25
nop | nop
ibeq vi07, vi06, L177 | nop
ior vi06, vi07, vi00 | max.xyzw vf25, vf26, vf26
L175:
lqi.xyzw vf27, vi05 | itof15.w vf12, vf12
lq.xyzw vf14, 1(vi08) | nop
mtir vi08, vf11.x | nop
mtir vi10, vf11.y | nop
sq.xyzw vf13, 0(vi09) | itof0.xyzw vf27, vf27
sq.xyzw vf14, 1(vi09) | add.w vf12, vf12, vf15
lq.xyzw vf16, 2(vi08) | maxx.xyzw vf15, vf11, vf00
lq.xyzw vf13, 0(vi08) | nop
ibne vi06, vi05, L176 | add.xyzw vf11, vf27, vf25
sq.xyzw vf12, 2(vi09) | nop
ibne vi07, vi06, L176 | nop
ior vi06, vi07, vi00 | max.xyzw vf25, vf26, vf26
move.xyzw vf12, vf16 | nop
b L177 | nop
ior vi09, vi10, vi00 | nop
L176:
lqi.xyzw vf27, vi05 | itof15.w vf16, vf16
lq.xyzw vf14, 1(vi08) | nop
mtir vi08, vf11.x | nop
mtir vi09, vf11.y | nop
sq.xyzw vf13, 0(vi10) | itof0.xyzw vf27, vf27
sq.xyzw vf14, 1(vi10) | add.w vf16, vf16, vf15
lq.xyzw vf12, 2(vi08) | maxx.xyzw vf15, vf11, vf00
lq.xyzw vf13, 0(vi08) | nop
ibne vi06, vi05, L175 | add.xyzw vf11, vf27, vf25
sq.xyzw vf16, 2(vi10) | nop
ibne vi07, vi06, L175 | nop
ior vi06, vi07, vi00 | max.xyzw vf25, vf26, vf26
L177:
nop | itof15.w vf12, vf12
lq.xyzw vf14, 1(vi08) | nop
mtir vi08, vf11.x | nop
mtir vi10, vf11.y | nop
sq.xyzw vf13, 0(vi09) | nop
sq.xyzw vf14, 1(vi09) | add.w vf12, vf12, vf15
lq.xyzw vf16, 2(vi08) | maxx.xyzw vf15, vf11, vf00
lq.xyzw vf13, 0(vi08) | nop
nop | nop
sq.xyzw vf12, 2(vi09) | nop
L178:
nop | itof15.w vf16, vf16
lq.xyzw vf14, 1(vi08) | nop
nop | nop
nop | nop
sq.xyzw vf13, 0(vi10) | nop
sq.xyzw vf14, 1(vi10) | add.w vf16, vf16, vf15
nop | nop
nop | nop
nop | nop
sq.xyzw vf16, 2(vi10) | nop
L179:
ibne vi00, vi15, L180 | nop
nop | nop
xgkick vi04 | nop
nop | nop :e
nop | nop
L180:
lq.xyzw vf20, 132(vi00) | nop
lq.xyzw vf21, 1(vi00) | nop
iaddi vi01, vi00, 0x1 | nop
isw.x vi01, -2(vi04) | nop
iaddiu vi02, vi00, 0x47 | maxw.x vf20, vf00, vf20
isw.z vi02, -1(vi04) | nop
sq.yzw vf21, -2(vi04) | nop
isw.w vi00, 132(vi00) | nop
sq.x vf20, -1(vi04) | nop
iaddi vi04, vi04, -0x2 | nop
xgkick vi04 | nop
nop | nop :e
nop | nop