jak-project/docs/progress-notes/jak1/scratch/merc_asm.asm
Tyler Wilding b4391d0643
docs: documentation cleanup and improvements for normal users (#1618)
* docs: documentation pass

* docs: main README pass
2022-07-06 18:08:07 -04: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] (the ?? is set per fragment)
;; 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