mirror of
https://github.com/open-goal/jak-project
synced 2026-05-27 16:14:18 -04:00
08741f0a42
Should fix https://github.com/open-goal/jak-project/issues/2679 Here's a test program that will trigger the bug when near these guards: ```lisp (define *cquery* (new 'global 'collide-query)) (defun test-bad-collide () (let ((lower (new 'static 'vector :x 1681893.8750 :y 61314.2031 :z 345208.6562 :w 1.)) (upper (new 'static 'vector :x 1701603.8750 :y 67624.0625 :z 357881.0312 :w 1.)) ;(cquery (new 'stack-no-clear 'collide-query)) ) (set! (-> *cquery* collide-with) (the-as collide-spec 1)) (set! (-> *cquery* ignore-process0) #f) (set! (-> *cquery* ignore-process1) #f) (set! (-> *cquery* ignore-pat) (new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1)) (set! (-> *cquery* action-mask) (collide-action solid)) (set! (-> *cquery* bbox min quad) (-> lower quad)) (set! (-> *cquery* bbox max quad) (-> upper quad)) (format 0 "doing collide...~%") (fill-using-bounding-box *collide-cache* *cquery*) (format 0 "have ~d and ~d~%" (-> *collide-cache* num-tris) (-> *collide-cache* num-prims)) ) (none) ) ``` As far as I can tell, there's a totally invalid collide-hash with an inside `axis-scale.z`. On the PS2, it gets ignore because of how float->int works for floats that are too big. On PC, it ends up using a negative value and loop forever.
854 lines
35 KiB
Plaintext
854 lines
35 KiB
Plaintext
b L1 | nop
|
|
nop | nop
|
|
b L2 | nop
|
|
nop | nop
|
|
b L13 | nop
|
|
nop | nop
|
|
b L21 | nop
|
|
nop | nop
|
|
nop | nop :e
|
|
nop | nop
|
|
|
|
;; ---------- memory layout
|
|
;; 0 - 4 camera
|
|
;; 4 - 119 upload4
|
|
|
|
;; 174 - 289 upload174
|
|
|
|
;; 344 - ?? upload344
|
|
|
|
;; 600 - ?? upload 600
|
|
|
|
;; 856 - 868 output0
|
|
;; 868 - 880 output1
|
|
|
|
;; 880 hmgescale
|
|
;; 881 invhscale
|
|
;; 882 texoffset
|
|
;; 883 texscale
|
|
;; 884 hvdfoff
|
|
;; 885 fog
|
|
;; 886 clrs[0]
|
|
;; 887 clrs[1]
|
|
|
|
;; 940 mystery[0]
|
|
;; 941 mystery[1]
|
|
;; 942 mystery[2]
|
|
;; 943 mystery[3]
|
|
|
|
;; ---------- vi's
|
|
;; vi01 - temp
|
|
;; vi02 - output addr
|
|
|
|
;; ----------- vf's
|
|
;; vf01 - output buffer addresses (rotated)
|
|
;; vf02 - hmgescale (constant)
|
|
;; vf03 - texoffset (constant)
|
|
;; vf04 - texscale (constant)
|
|
;; vf05 - hvdfoffset (constant)
|
|
;; vf06 - cpersx
|
|
;; vf07 - cpersy
|
|
;; vf08 - cpersz
|
|
;; vf09 - cpersw
|
|
;; vf12 - fog (constant)
|
|
;; vf13 - invhscale (constant)
|
|
|
|
;; MSCAL 10
|
|
L1:
|
|
iaddiu vi01, vi00, 0x358 | nop
|
|
iaddiu vi02, vi00, 0x364 | nop
|
|
mfir.x vf01, vi01 | nop
|
|
mfir.y vf01, vi02 | nop
|
|
mfir.z vf01, vi01 | nop
|
|
mfir.w vf01, vi02 | nop ;; vf01 = [856, 868, 856, 868]
|
|
lq.xyzw vf02, 880(vi00) | nop
|
|
lq.xyzw vf03, 882(vi00) | nop
|
|
lq.xyzw vf04, 883(vi00) | nop
|
|
lq.xyzw vf05, 884(vi00) | nop
|
|
lq.xyzw vf12, 885(vi00) | nop :e
|
|
lq.xyzw vf13, 881(vi00) | nop
|
|
;; END
|
|
|
|
;; mscal 2 init block.
|
|
L2:
|
|
iaddiu vi03, vi00, 0x158 | nop ;; vi03 = 344 (addr list)
|
|
ilwr.x vi08, vi03 | nop ;; vi08 = num tris
|
|
mtir vi02, vf01.x | nop ;; vi02 = output addr
|
|
iaddi vi03, vi03, 0x1 | addw.z vf25, vf00, vf00 ;; inc input ptr, set vf25.z = 1.
|
|
lq.xyzw vf25, 888(vi00) | addw.z vf26, vf00, vf00 ;; vf25 = adgif, vf26.z = 1.
|
|
lq.xyzw vf29, 889(vi00) | addw.z vf27, vf00, vf00 ;; vf29 = texflush, vf27.z = 1.
|
|
lq.xyzw vf30, 891(vi00) | addw.z vf28, vf00, vf00 ;; vf30 = trigif, vf28.z = 1.
|
|
lq.xyzw vf06, 0(vi00) | nop ;; vf06 -> vf09 = camera
|
|
lq.xyzw vf07, 1(vi00) | nop
|
|
lq.xyzw vf08, 2(vi00) | nop
|
|
lq.xyzw vf09, 3(vi00) | nop
|
|
mtir vi01, vf01.y | nop ;; vi01 is the second output buffer
|
|
sq.xyzw vf25, 0(vi02) | nop ;; init output buffers
|
|
sq.xyzw vf29, 1(vi02) | nop
|
|
sq.xyzw vf30, 2(vi02) | nop
|
|
sq.xyzw vf25, 0(vi01) | nop
|
|
sq.xyzw vf29, 1(vi01) | nop
|
|
sq.xyzw vf30, 2(vi01) | nop
|
|
|
|
;; mscal happy loop, from in344.
|
|
L3:
|
|
lqi.xyzw vf16, vi03 | nop ;; load tri addrs
|
|
nop | nop
|
|
nop | nop
|
|
nop | nop
|
|
mtir vi04, vf16.x | nop ;; vi04 = v0 addr
|
|
mtir vi05, vf16.y | nop ;; vi05 = v1 addr
|
|
mtir vi06, vf16.z | nop ;; vi06 = v2 add4r
|
|
nop | nop
|
|
lq.xyzw vf17, 4(vi04) | nop ;; load vertices from upload4 data: vf17 = v0 pos
|
|
lq.xyzw vf18, 4(vi05) | nop ;; vf18 = v1 pos
|
|
lq.xyzw vf19, 4(vi06) | nop ;; vf19 = v2 pos
|
|
nop | mulaw.xyzw ACC, vf09, vf00 ;; transform v0
|
|
move.xyzw vf15, vf17 | maddax.xyzw ACC, vf06, vf17 ;; vf15 = pre-transformed v0
|
|
nop | madday.xyzw ACC, vf07, vf17
|
|
nop | maddz.xyzw vf17, vf08, vf17 ;; vf17 = transformed(v0)
|
|
nop | mulaw.xyzw ACC, vf09, vf00 ;; start v1 trans
|
|
nop | sub.xyzw vf29, vf18, vf15 ;; vf29 = (v1 - v0) (pre-trans)
|
|
nop | sub.xyzw vf30, vf19, vf15 ;; vf30 = (v2 - v0) (pre-trans)
|
|
div Q, vf12.x, vf17.w | maddax.xyzw ACC, vf06, vf18 ;; Q = fog.x / transformed(v0).w, v1 trans
|
|
nop | mul.xyzw vf21, vf17, vf02 ;; vf21 = hmge_scale * transformed(v0)
|
|
nop | madday.xyzw ACC, vf07, vf18 ;; v1 trans
|
|
nop | maddz.xyzw vf18, vf08, vf18 ;; v1 trans, vf18 = transformed(v1)
|
|
nop | mulaw.xyzw ACC, vf09, vf00 ;; v2 trans
|
|
nop | maddax.xyzw ACC, vf06, vf19 ;; v2 trans
|
|
nop | madday.xyzw ACC, vf07, vf19 ;; v2 trans
|
|
div Q, vf12.x, vf18.w | mul.xyz vf17, vf17, Q ;; do perspective divide (transform(v0).xyz * fog.x / tf(v0).w)
|
|
nop | maddz.xyzw vf19, vf08, vf19 ;; vf19 = transformed(v2)
|
|
nop | mul.xyzw vf22, vf18, vf02 ;; vf22 = hmge_scale * transformed(v1)
|
|
nop | opmula.xyz ACC, vf29, vf30 ;; cross (v1 - v0) x (v2 - v0)
|
|
nop | add.xy vf25, vf17, vf03 ;; vf25 = v0's texture
|
|
nop | mulw.z vf17, vf17, vf12 ;; multiply by weird fog value.
|
|
nop | opmsub.xyz vf29, vf30, vf29 ;; vf29 = finish cross
|
|
div Q, vf12.x, vf19.w | mul.xyz vf18, vf18, Q ;; v1's perspective
|
|
nop | mul.xyzw vf23, vf19, vf02 ;; v2's hmge
|
|
nop | mul.xyz vf29, vf29, vf15 ;; dot with pre-trans v0 (kind sketch?)
|
|
nop | add.xy vf26, vf18, vf03 ;; v1's texture
|
|
nop | add.xyzw vf17, vf17, vf05 ;; v0's hvdf offset
|
|
nop | mulw.z vf18, vf18, vf12 ;; v1's fog 1/-1
|
|
nop | mul.xy vf25, vf25, vf04 ;; v0's texture scale
|
|
nop | mul.xyz vf19, vf19, Q ;; v2's perspective
|
|
nop | ftoi4.xyzw vf17, vf17 ;; v0 to GS format
|
|
fcset 0x0 | addy.x vf29, vf29, vf29 ;; dot product sum, clear add flags
|
|
nop | add.xyzw vf18, vf18, vf05 ;; v1's hvdf
|
|
nop | clipw.xyz vf21, vf21 ;; v0's clip
|
|
nop | mulw.z vf19, vf19, vf12 ;; v2's fog mult
|
|
sq.xyzw vf25, 4(vi02) | mul.xy vf26, vf26, vf04 ;; texscale
|
|
sq.xyzw vf17, 5(vi02) | addz.x vf29, vf29, vf29 ;; dot PRODUCT!
|
|
nop | ftoi4.xyzw vf18, vf18 ;; v1's ftoi
|
|
nop | add.xy vf27, vf19, vf03 ;; v2's texoffset
|
|
sq.xyzw vf26, 6(vi02) | add.xyzw vf19, vf19, vf05 ;; v2's hvdf
|
|
fsand vi01, 0x2 | clipw.xyz vf22, vf22 ;; check dp, clip v1
|
|
sq.xyzw vf18, 7(vi02) | clipw.xyz vf23, vf23 ;; clip v1
|
|
ibeq vi00, vi01, L4 | mul.xy vf27, vf27, vf04 ;; texscale
|
|
nop | nop
|
|
b L5 | nop
|
|
lq.xyzw vf31, 887(vi00) | nop ;; vf31 is one of the colors.
|
|
L4:
|
|
lq.xyzw vf31, 886(vi00) | nop
|
|
L5:
|
|
fcand vi01, 0x3ffff | ftoi4.xyzw vf19, vf19 ;; last ftoi
|
|
ibne vi00, vi01, L11 | nop ;; ssee if we need to do clipping.
|
|
iaddi vi08, vi08, -0x1 | nop ;; dec tri count
|
|
sq.xyzw vf27, 8(vi02) | nop
|
|
sq.xyzw vf31, 3(vi02) | nop
|
|
sq.xyzw vf19, 9(vi02) | nop
|
|
xgkick vi02 | nop ;; KICK
|
|
mtir vi02, vf01.y | nop ;; next output buffer
|
|
mr32.xyzw vf01, vf01 | nop
|
|
L6:
|
|
ibgtz vi08, L3 | nop ;; check tri count
|
|
nop | nop
|
|
;; next happy loop
|
|
iaddiu vi03, vi00, 0x158 | nop
|
|
ilwr.x vi08, vi03 | nop
|
|
ilwr.y vi01, vi03 | nop
|
|
iaddi vi03, vi03, 0x1 | nop
|
|
L7:
|
|
lqi.xyzw vf16, vi03 | nop
|
|
nop | nop
|
|
nop | nop
|
|
mtir vi04, vf16.x | nop
|
|
mtir vi05, vf16.y | nop
|
|
mtir vi06, vf16.z | nop
|
|
nop | nop
|
|
lq.xyzw vf17, 174(vi04) | nop
|
|
lq.xyzw vf18, 174(vi06) | nop
|
|
lq.xyzw vf19, 174(vi05) | nop
|
|
nop | mulaw.xyzw ACC, vf09, vf00
|
|
move.xyzw vf15, vf17 | maddax.xyzw ACC, vf06, vf17
|
|
nop | madday.xyzw ACC, vf07, vf17
|
|
nop | maddz.xyzw vf17, vf08, vf17
|
|
nop | mulaw.xyzw ACC, vf09, vf00
|
|
nop | sub.xyzw vf29, vf18, vf15
|
|
nop | sub.xyzw vf30, vf19, vf15
|
|
div Q, vf12.x, vf17.w | maddax.xyzw ACC, vf06, vf18
|
|
nop | mul.xyzw vf21, vf17, vf02
|
|
nop | madday.xyzw ACC, vf07, vf18
|
|
nop | maddz.xyzw vf18, vf08, vf18
|
|
nop | mulaw.xyzw ACC, vf09, vf00
|
|
nop | maddax.xyzw ACC, vf06, vf19
|
|
nop | madday.xyzw ACC, vf07, vf19
|
|
div Q, vf12.x, vf18.w | mul.xyz vf17, vf17, Q
|
|
nop | maddz.xyzw vf19, vf08, vf19
|
|
nop | mul.xyzw vf22, vf18, vf02
|
|
nop | opmula.xyz ACC, vf29, vf30
|
|
nop | add.xy vf25, vf17, vf03
|
|
nop | mulw.z vf17, vf17, vf12
|
|
nop | opmsub.xyz vf29, vf30, vf29
|
|
div Q, vf12.x, vf19.w | mul.xyz vf18, vf18, Q
|
|
nop | mul.xyzw vf23, vf19, vf02
|
|
nop | mul.xyz vf29, vf29, vf15
|
|
nop | add.xy vf26, vf18, vf03
|
|
nop | add.xyzw vf17, vf17, vf05
|
|
nop | mulw.z vf18, vf18, vf12
|
|
nop | mul.xy vf25, vf25, vf04
|
|
nop | mul.xyz vf19, vf19, Q
|
|
nop | ftoi4.xyzw vf17, vf17
|
|
fcset 0x0 | addy.x vf29, vf29, vf29
|
|
nop | add.xyzw vf18, vf18, vf05
|
|
nop | clipw.xyz vf21, vf21
|
|
sq.xyzw vf25, 4(vi02) | mulw.z vf19, vf19, vf12
|
|
sq.xyzw vf17, 5(vi02) | mul.xy vf26, vf26, vf04
|
|
iaddi vi08, vi08, -0x1 | addz.x vf29, vf29, vf29
|
|
nop | ftoi4.xyzw vf18, vf18
|
|
nop | add.xy vf27, vf19, vf03
|
|
sq.xyzw vf26, 6(vi02) | add.xyzw vf19, vf19, vf05
|
|
fsand vi01, 0x2 | clipw.xyz vf22, vf22
|
|
sq.xyzw vf18, 7(vi02) | clipw.xyz vf23, vf23
|
|
ibeq vi00, vi01, L8 | mul.xy vf27, vf27, vf04
|
|
nop | nop
|
|
b L9 | nop
|
|
lq.xyzw vf31, 887(vi00) | nop
|
|
L8:
|
|
lq.xyzw vf31, 886(vi00) | nop
|
|
L9:
|
|
fcand vi01, 0x3ffff | ftoi4.xyzw vf19, vf19
|
|
ibne vi00, vi01, L12 | nop
|
|
sq.xyzw vf27, 8(vi02) | nop
|
|
sq.xyzw vf31, 3(vi02) | nop
|
|
sq.xyzw vf19, 9(vi02) | nop
|
|
xgkick vi02 | nop
|
|
mtir vi02, vf01.y | nop
|
|
mr32.xyzw vf01, vf01 | nop
|
|
L10:
|
|
ibgtz vi08, L7 | nop
|
|
nop | nop
|
|
nop | nop :e
|
|
nop | nop
|
|
L11:
|
|
sq.xyzw vf21, 1000(vi00) | nop
|
|
sq.xyzw vf22, 1003(vi00) | nop
|
|
sq.xyzw vf23, 1006(vi00) | nop
|
|
sq.xyzw vf31, 942(vi00) | nop
|
|
mfir.x vf29, vi02 | nop
|
|
mfir.y vf29, vi03 | nop
|
|
mfir.z vf29, vi07 | nop
|
|
bal vi15, L36 | nop
|
|
mfir.w vf29, vi08 | nop
|
|
mtir vi08, vf29.w | nop
|
|
mtir vi03, vf29.y | nop
|
|
mtir vi07, vf29.z | nop
|
|
b L6 | nop
|
|
mtir vi02, vf29.x | nop
|
|
L12:
|
|
sq.xyzw vf21, 1000(vi00) | nop
|
|
sq.xyzw vf22, 1003(vi00) | nop
|
|
sq.xyzw vf23, 1006(vi00) | nop
|
|
sq.xyzw vf31, 942(vi00) | nop
|
|
mfir.x vf29, vi02 | nop
|
|
mfir.y vf29, vi03 | nop
|
|
mfir.z vf29, vi07 | nop
|
|
bal vi15, L36 | nop
|
|
mfir.w vf29, vi08 | nop
|
|
mtir vi08, vf29.w | nop
|
|
mtir vi03, vf29.y | nop
|
|
mtir vi07, vf29.z | nop
|
|
b L10 | nop
|
|
mtir vi02, vf29.x | nop
|
|
L13:
|
|
iaddiu vi03, vi00, 0x258 | nop ;; vi03 = 600
|
|
ilwr.x vi08, vi03 | nop ;; num quads
|
|
mtir vi02, vf01.x | nop ;; output buffer
|
|
iaddi vi03, vi03, 0x1 | addw.z vf25, vf00, vf00 ;; set 1's in texture
|
|
lq.xyzw vf25, 888(vi00) | addw.z vf26, vf00, vf00
|
|
lq.xyzw vf29, 889(vi00) | addw.z vf27, vf00, vf00
|
|
lq.xyzw vf30, 892(vi00) | nop ;;oops they forget vf28??
|
|
lq.xyzw vf06, 0(vi00) | nop
|
|
lq.xyzw vf07, 1(vi00) | nop
|
|
lq.xyzw vf08, 2(vi00) | nop
|
|
lq.xyzw vf09, 3(vi00) | nop
|
|
mtir vi01, vf01.y | nop
|
|
sq.xyzw vf25, 0(vi02) | nop
|
|
sq.xyzw vf29, 1(vi02) | nop
|
|
sq.xyzw vf30, 2(vi02) | nop
|
|
sq.xyzw vf25, 0(vi01) | nop
|
|
sq.xyzw vf29, 1(vi01) | nop
|
|
sq.xyzw vf30, 2(vi01) | nop
|
|
L14:
|
|
lqi.xyzw vf16, vi03 | nop
|
|
nop | nop
|
|
nop | nop
|
|
nop | nop
|
|
mtir vi06, vf16.z | nop
|
|
mtir vi04, vf16.x | nop
|
|
mtir vi05, vf16.y | nop
|
|
nop | nop
|
|
ibeq vi00, vi06, L15 | nop
|
|
nop | nop
|
|
lq.xyzw vf17, 4(vi04) | nop
|
|
lq.xyzw vf18, 4(vi05) | nop
|
|
lq.xyzw vf19, 174(vi05) | nop
|
|
b L16 | nop
|
|
lq.xyzw vf20, 174(vi04) | nop
|
|
L15:
|
|
lq.xyzw vf17, 4(vi05) | nop
|
|
lq.xyzw vf18, 4(vi04) | nop
|
|
lq.xyzw vf19, 174(vi04) | nop
|
|
lq.xyzw vf20, 174(vi05) | nop
|
|
L16:
|
|
move.xyzw vf15, vf17 | mulaw.xyzw ACC, vf09, vf00
|
|
nop | maddax.xyzw ACC, vf06, vf17
|
|
nop | madday.xyzw ACC, vf07, vf17
|
|
nop | maddz.xyzw vf17, vf08, vf17
|
|
nop | mulaw.xyzw ACC, vf09, vf00
|
|
nop | sub.xyzw vf29, vf18, vf15
|
|
nop | sub.xyzw vf30, vf19, vf15
|
|
div Q, vf12.x, vf17.w | maddax.xyzw ACC, vf06, vf18
|
|
nop | mul.xyzw vf21, vf17, vf02
|
|
nop | madday.xyzw ACC, vf07, vf18
|
|
nop | maddz.xyzw vf18, vf08, vf18
|
|
nop | mulaw.xyzw ACC, vf09, vf00
|
|
nop | maddax.xyzw ACC, vf06, vf19
|
|
nop | madday.xyzw ACC, vf07, vf19
|
|
div Q, vf12.x, vf18.w | mul.xyz vf17, vf17, Q
|
|
nop | maddz.xyzw vf19, vf08, vf19
|
|
nop | mulaw.xyzw ACC, vf09, vf00
|
|
nop | maddax.xyzw ACC, vf06, vf20
|
|
nop | madday.xyzw ACC, vf07, vf20
|
|
nop | maddz.xyzw vf20, vf08, vf20
|
|
nop | mul.xyzw vf22, vf18, vf02
|
|
div Q, vf12.x, vf19.w | mul.xyz vf18, vf18, Q
|
|
nop | add.xy vf25, vf17, vf03
|
|
nop | mulw.z vf17, vf17, vf12
|
|
nop | opmula.xyz ACC, vf29, vf30
|
|
nop | opmsub.xyz vf29, vf30, vf29
|
|
nop | mul.xyzw vf23, vf19, vf02
|
|
nop | mul.xyz vf29, vf29, vf15
|
|
div Q, vf12.x, vf20.w | mul.xyz vf19, vf19, Q
|
|
nop | add.xyzw vf17, vf17, vf05
|
|
nop | mul.xyzw vf24, vf20, vf02
|
|
nop | mul.xy vf25, vf25, vf04
|
|
nop | nop
|
|
nop | ftoi4.xyzw vf17, vf17
|
|
nop | add.xy vf26, vf18, vf03
|
|
nop | mul.xyz vf20, vf20, Q
|
|
nop | mulw.z vf18, vf18, vf12
|
|
nop | addy.x vf29, vf29, vf29
|
|
sq.xyzw vf25, 4(vi02) | nop
|
|
sq.xyzw vf17, 5(vi02) | nop
|
|
nop | add.xyzw vf18, vf18, vf05
|
|
nop | clipw.xyz vf21, vf21
|
|
nop | mul.xy vf26, vf26, vf04
|
|
nop | addz.x vf29, vf29, vf29
|
|
nop | ftoi4.xyzw vf18, vf18
|
|
nop | add.xy vf27, vf19, vf03
|
|
sq.xyzw vf26, 6(vi02) | mulw.z vf19, vf19, vf12
|
|
fsand vi01, 0x2 | clipw.xyz vf22, vf22
|
|
sq.xyzw vf18, 7(vi02) | clipw.xyz vf23, vf23
|
|
nop | clipw.xyz vf24, vf24
|
|
nop | add.xy vf28, vf20, vf03
|
|
nop | mulw.z vf20, vf20, vf12
|
|
nop | mul.xy vf27, vf27, vf04
|
|
nop | add.xyzw vf19, vf19, vf05
|
|
nop | nop
|
|
ibeq vi00, vi01, L17 | mul.xy vf28, vf28, vf04
|
|
nop | add.xyzw vf20, vf20, vf05
|
|
b L18 | nop
|
|
lq.xyzw vf31, 887(vi00) | nop
|
|
L17:
|
|
lq.xyzw vf31, 886(vi00) | nop
|
|
L18:
|
|
fcand vi01, 0xffffff | ftoi4.xyzw vf19, vf19
|
|
ibne vi00, vi01, L20 | nop
|
|
iaddi vi08, vi08, -0x1 | nop
|
|
sq.xyzw vf27, 8(vi02) | ftoi4.xyzw vf20, vf20
|
|
sq.xyzw vf31, 3(vi02) | nop
|
|
sq.xyzw vf19, 9(vi02) | nop
|
|
sq.xyzw vf28, 10(vi02) | nop
|
|
sq.xyzw vf20, 11(vi02) | nop
|
|
xgkick vi02 | nop
|
|
mtir vi02, vf01.y | nop
|
|
mr32.xyzw vf01, vf01 | nop
|
|
L19:
|
|
ibgtz vi08, L14 | nop
|
|
nop | nop
|
|
nop | nop :e
|
|
nop | nop
|
|
L20:
|
|
sq.xyzw vf21, 1000(vi00) | nop
|
|
sq.xyzw vf22, 1003(vi00) | nop
|
|
sq.xyzw vf23, 1006(vi00) | nop
|
|
sq.xyzw vf24, 1009(vi00) | nop
|
|
sq.xyzw vf31, 942(vi00) | nop
|
|
mfir.x vf29, vi02 | nop
|
|
mfir.y vf29, vi03 | nop
|
|
mfir.z vf29, vi07 | nop
|
|
bal vi15, L37 | nop
|
|
mfir.w vf29, vi08 | nop
|
|
mtir vi08, vf29.w | nop
|
|
mtir vi03, vf29.y | nop
|
|
mtir vi07, vf29.z | nop
|
|
b L19 | nop
|
|
mtir vi02, vf29.x | nop
|
|
|
|
;;;;;;;;;; WEIRD TRIANGLES
|
|
L21:
|
|
iaddiu vi03, vi00, 0x158 | nop
|
|
ilwr.x vi08, vi03 | nop
|
|
mtir vi02, vf01.x | nop
|
|
iaddi vi03, vi03, 0x1 | addw.z vf25, vf00, vf00
|
|
lq.xyzw vf25, 888(vi00) | addw.z vf26, vf00, vf00
|
|
lq.xyzw vf29, 889(vi00) | addw.z vf27, vf00, vf00
|
|
lq.xyzw vf30, 891(vi00) | addw.z vf28, vf00, vf00
|
|
lq.xyzw vf06, 0(vi00) | nop
|
|
lq.xyzw vf07, 1(vi00) | nop
|
|
lq.xyzw vf08, 2(vi00) | nop
|
|
lq.xyzw vf09, 3(vi00) | nop
|
|
mtir vi01, vf01.y | nop
|
|
sq.xyzw vf25, 0(vi02) | nop
|
|
sq.xyzw vf29, 1(vi02) | nop
|
|
sq.xyzw vf30, 2(vi02) | nop
|
|
sq.xyzw vf25, 0(vi01) | nop
|
|
sq.xyzw vf29, 1(vi01) | nop
|
|
sq.xyzw vf30, 2(vi01) | nop
|
|
L22:
|
|
lqi.xyzw vf16, vi03 | nop
|
|
nop | nop
|
|
nop | nop
|
|
nop | nop
|
|
mtir vi01, vf16.w | nop
|
|
mtir vi04, vf16.x | nop
|
|
mtir vi05, vf16.y | nop
|
|
mtir vi06, vf16.z | nop
|
|
ibeq vi00, vi01, L23 | nop
|
|
lq.xyzw vf17, 4(vi04) | nop
|
|
lq.xyzw vf18, 4(vi05) | nop
|
|
b L24 | nop
|
|
lq.xyzw vf19, 4(vi06) | nop
|
|
L23:
|
|
lq.xyzw vf19, 4(vi05) | nop
|
|
lq.xyzw vf18, 4(vi06) | nop
|
|
L24:
|
|
nop | mulaw.xyzw ACC, vf09, vf00
|
|
move.xyzw vf15, vf17 | maddax.xyzw ACC, vf06, vf17
|
|
nop | madday.xyzw ACC, vf07, vf17
|
|
nop | sub.xyzw vf29, vf18, vf17
|
|
nop | sub.xyzw vf30, vf19, vf17
|
|
nop | maddz.xyzw vf17, vf08, vf17
|
|
nop | mulaw.xyzw ACC, vf09, vf00
|
|
div Q, vf12.x, vf17.w | maddax.xyzw ACC, vf06, vf18
|
|
nop | madday.xyzw ACC, vf07, vf18
|
|
nop | mul.xyzw vf21, vf17, vf02
|
|
nop | maddz.xyzw vf18, vf08, vf18
|
|
nop | mulaw.xyzw ACC, vf09, vf00
|
|
nop | maddax.xyzw ACC, vf06, vf19
|
|
nop | madday.xyzw ACC, vf07, vf19
|
|
div Q, vf12.x, vf18.w | mul.xyz vf17, vf17, Q
|
|
nop | maddz.xyzw vf19, vf08, vf19
|
|
nop | mul.xyzw vf22, vf18, vf02
|
|
nop | opmula.xyz ACC, vf29, vf30
|
|
nop | opmsub.xyz vf29, vf30, vf29
|
|
nop | add.xy vf25, vf17, vf03
|
|
nop | mulw.z vf17, vf17, vf12
|
|
div Q, vf12.x, vf19.w | mul.xyz vf18, vf18, Q
|
|
nop | mul.xyzw vf23, vf19, vf02
|
|
nop | mul.xyz vf29, vf29, vf15
|
|
nop | add.xyzw vf17, vf17, vf05
|
|
nop | mul.xy vf25, vf25, vf04
|
|
nop | nop
|
|
nop | ftoi4.xyzw vf17, vf17
|
|
nop | add.xy vf26, vf18, vf03
|
|
nop | mulw.z vf18, vf18, vf12
|
|
fcset 0x0 | addy.x vf29, vf29, vf29
|
|
nop | mul.xyz vf19, vf19, Q
|
|
sq.xyzw vf25, 4(vi02) | nop
|
|
sq.xyzw vf17, 5(vi02) | add.xyzw vf18, vf18, vf05
|
|
nop | clipw.xyz vf21, vf21
|
|
nop | mul.xy vf26, vf26, vf04
|
|
nop | addz.x vf29, vf29, vf29
|
|
nop | ftoi4.xyzw vf18, vf18
|
|
nop | add.xy vf27, vf19, vf03
|
|
sq.xyzw vf26, 6(vi02) | mulw.z vf19, vf19, vf12
|
|
fsand vi01, 0x2 | clipw.xyz vf22, vf22
|
|
sq.xyzw vf18, 7(vi02) | clipw.xyz vf23, vf23
|
|
ibeq vi00, vi01, L25 | mul.xy vf27, vf27, vf04
|
|
nop | add.xyzw vf19, vf19, vf05
|
|
b L26 | nop
|
|
lq.xyzw vf31, 887(vi00) | nop
|
|
L25:
|
|
lq.xyzw vf31, 886(vi00) | nop
|
|
L26:
|
|
fcand vi01, 0x3ffff | ftoi4.xyzw vf19, vf19
|
|
ibne vi00, vi01, L34 | nop
|
|
iaddi vi08, vi08, -0x1 | nop
|
|
sq.xyzw vf27, 8(vi02) | nop
|
|
sq.xyzw vf31, 3(vi02) | nop
|
|
sq.xyzw vf19, 9(vi02) | nop
|
|
xgkick vi02 | nop
|
|
mtir vi02, vf01.y | nop
|
|
mr32.xyzw vf01, vf01 | nop
|
|
L27:
|
|
ibgtz vi08, L22 | nop
|
|
nop | nop
|
|
iaddiu vi03, vi00, 0x158 | nop
|
|
ilwr.x vi08, vi03 | nop
|
|
ilwr.y vi01, vi03 | nop
|
|
iaddi vi03, vi03, 0x1 | nop
|
|
L28:
|
|
lqi.xyzw vf16, vi03 | nop
|
|
nop | nop
|
|
nop | nop
|
|
mtir vi01, vf16.w | nop
|
|
mtir vi04, vf16.x | nop
|
|
mtir vi05, vf16.y | nop
|
|
mtir vi06, vf16.z | nop
|
|
ibne vi00, vi01, L29 | nop
|
|
lq.xyzw vf17, 174(vi04) | nop
|
|
lq.xyzw vf18, 174(vi05) | nop
|
|
b L30 | nop
|
|
lq.xyzw vf19, 174(vi06) | nop
|
|
L29:
|
|
lq.xyzw vf19, 174(vi05) | nop
|
|
lq.xyzw vf18, 174(vi06) | nop
|
|
L30:
|
|
nop | mulaw.xyzw ACC, vf09, vf00
|
|
move.xyzw vf15, vf17 | maddax.xyzw ACC, vf06, vf17
|
|
nop | madday.xyzw ACC, vf07, vf17
|
|
nop | maddz.xyzw vf17, vf08, vf17
|
|
nop | mulaw.xyzw ACC, vf09, vf00
|
|
nop | sub.xyzw vf29, vf18, vf15
|
|
nop | sub.xyzw vf30, vf19, vf15
|
|
div Q, vf12.x, vf17.w | maddax.xyzw ACC, vf06, vf18
|
|
nop | mul.xyzw vf21, vf17, vf02
|
|
nop | madday.xyzw ACC, vf07, vf18
|
|
nop | maddz.xyzw vf18, vf08, vf18
|
|
nop | mulaw.xyzw ACC, vf09, vf00
|
|
nop | maddax.xyzw ACC, vf06, vf19
|
|
nop | madday.xyzw ACC, vf07, vf19
|
|
div Q, vf12.x, vf18.w | mul.xyz vf17, vf17, Q
|
|
nop | maddz.xyzw vf19, vf08, vf19
|
|
nop | mul.xyzw vf22, vf18, vf02
|
|
nop | opmula.xyz ACC, vf29, vf30
|
|
nop | opmsub.xyz vf29, vf30, vf29
|
|
nop | add.xy vf25, vf17, vf03
|
|
nop | mulw.z vf17, vf17, vf12
|
|
div Q, vf12.x, vf19.w | mul.xyz vf18, vf18, Q
|
|
nop | mul.xyzw vf23, vf19, vf02
|
|
nop | mul.xyz vf29, vf29, vf15
|
|
nop | add.xyzw vf17, vf17, vf05
|
|
nop | mul.xy vf25, vf25, vf04
|
|
nop | nop
|
|
nop | add.xy vf26, vf18, vf03
|
|
nop | ftoi4.xyzw vf17, vf17
|
|
nop | mulw.z vf18, vf18, vf12
|
|
fcset 0x0 | addy.x vf29, vf29, vf29
|
|
nop | mul.xyz vf19, vf19, Q
|
|
sq.xyzw vf25, 4(vi02) | nop
|
|
sq.xyzw vf17, 5(vi02) | add.xyzw vf18, vf18, vf05
|
|
nop | clipw.xyz vf21, vf21
|
|
nop | mul.xy vf26, vf26, vf04
|
|
nop | addz.x vf29, vf29, vf29
|
|
nop | ftoi4.xyzw vf18, vf18
|
|
nop | add.xy vf27, vf19, vf03
|
|
sq.xyzw vf26, 6(vi02) | mulw.z vf19, vf19, vf12
|
|
fsand vi01, 0x2 | clipw.xyz vf22, vf22
|
|
sq.xyzw vf18, 7(vi02) | clipw.xyz vf23, vf23
|
|
ibeq vi00, vi01, L31 | mul.xy vf27, vf27, vf04
|
|
nop | add.xyzw vf19, vf19, vf05
|
|
b L32 | nop
|
|
lq.xyzw vf31, 887(vi00) | nop
|
|
L31:
|
|
lq.xyzw vf31, 886(vi00) | nop
|
|
L32:
|
|
fcand vi01, 0x3ffff | ftoi4.xyzw vf19, vf19
|
|
ibne vi00, vi01, L35 | nop
|
|
iaddi vi08, vi08, -0x1 | nop
|
|
sq.xyzw vf27, 8(vi02) | nop
|
|
sq.xyzw vf31, 3(vi02) | nop
|
|
sq.xyzw vf19, 9(vi02) | nop
|
|
xgkick vi02 | nop
|
|
mtir vi02, vf01.y | nop
|
|
mr32.xyzw vf01, vf01 | nop
|
|
L33:
|
|
ibgtz vi08, L28 | nop
|
|
nop | nop
|
|
nop | nop :e
|
|
nop | nop
|
|
L34:
|
|
sq.xyzw vf21, 1000(vi00) | nop
|
|
sq.xyzw vf22, 1003(vi00) | nop
|
|
sq.xyzw vf23, 1006(vi00) | nop
|
|
sq.xyzw vf31, 942(vi00) | nop
|
|
mfir.x vf29, vi02 | nop
|
|
mfir.y vf29, vi03 | nop
|
|
mfir.z vf29, vi07 | nop
|
|
bal vi15, L36 | nop
|
|
mfir.w vf29, vi08 | nop
|
|
mtir vi08, vf29.w | nop
|
|
mtir vi03, vf29.y | nop
|
|
mtir vi07, vf29.z | nop
|
|
b L27 | nop
|
|
mtir vi02, vf29.x | nop
|
|
L35:
|
|
sq.xyzw vf21, 1000(vi00) | nop
|
|
sq.xyzw vf22, 1003(vi00) | nop
|
|
sq.xyzw vf23, 1006(vi00) | nop
|
|
sq.xyzw vf31, 942(vi00) | nop
|
|
mfir.x vf29, vi02 | nop
|
|
mfir.y vf29, vi03 | nop
|
|
mfir.z vf29, vi07 | nop
|
|
bal vi15, L36 | nop
|
|
mfir.w vf29, vi08 | nop
|
|
mtir vi08, vf29.w | nop
|
|
mtir vi03, vf29.y | nop
|
|
mtir vi07, vf29.z | nop
|
|
b L33 | nop
|
|
mtir vi02, vf29.x | nop
|
|
L36:
|
|
sq.xyzw vf00, 893(vi00) | nop
|
|
sq.xyzw vf00, 900(vi00) | nop
|
|
sq.xyzw vf00, 907(vi00) | nop
|
|
sq.xyzw vf00, 914(vi00) | nop
|
|
sq.xyzw vf00, 921(vi00) | nop
|
|
sq.xyzw vf00, 928(vi00) | nop
|
|
iaddiu vi01, vi00, 0x2d3 | nop
|
|
isw.z vi01, 893(vi00) | nop
|
|
iaddiu vi01, vi00, 0x2d5 | nop
|
|
isw.z vi01, 900(vi00) | nop
|
|
iaddiu vi01, vi00, 0x2d7 | nop
|
|
isw.z vi01, 907(vi00) | nop
|
|
iaddiu vi01, vi00, 0x2d9 | nop
|
|
isw.z vi01, 914(vi00) | nop
|
|
iaddiu vi01, vi00, 0x2db | nop
|
|
isw.z vi01, 921(vi00) | nop
|
|
iaddiu vi01, vi00, 0x2dd | nop
|
|
isw.z vi01, 928(vi00) | nop
|
|
iaddiu vi03, vi00, 0x3b0 | nop
|
|
iaddiu vi04, vi00, 0x3af | nop
|
|
mfir.x vf31, vi15 | nop
|
|
iaddi vi05, vi00, 0x0 | nop
|
|
bal vi15, L38 | nop
|
|
iaddiu vi07, vi00, 0x3e8 | nop
|
|
bal vi15, L38 | nop
|
|
iaddiu vi07, vi00, 0x3eb | nop
|
|
bal vi15, L38 | nop
|
|
iaddiu vi07, vi00, 0x3ee | nop
|
|
b L47 | nop
|
|
nop | nop
|
|
L37:
|
|
sq.xyzw vf00, 893(vi00) | nop
|
|
sq.xyzw vf00, 900(vi00) | nop
|
|
sq.xyzw vf00, 907(vi00) | nop
|
|
sq.xyzw vf00, 914(vi00) | nop
|
|
sq.xyzw vf00, 921(vi00) | nop
|
|
sq.xyzw vf00, 928(vi00) | nop
|
|
iaddiu vi01, vi00, 0x2d3 | nop
|
|
isw.z vi01, 893(vi00) | nop
|
|
iaddiu vi01, vi00, 0x2d5 | nop
|
|
isw.z vi01, 900(vi00) | nop
|
|
iaddiu vi01, vi00, 0x2d7 | nop
|
|
isw.z vi01, 907(vi00) | nop
|
|
iaddiu vi01, vi00, 0x2d9 | nop
|
|
isw.z vi01, 914(vi00) | nop
|
|
iaddiu vi01, vi00, 0x2db | nop
|
|
isw.z vi01, 921(vi00) | nop
|
|
iaddiu vi01, vi00, 0x2dd | nop
|
|
isw.z vi01, 928(vi00) | nop
|
|
iaddiu vi03, vi00, 0x3b0 | nop
|
|
iaddiu vi04, vi00, 0x3af | nop
|
|
mfir.x vf31, vi15 | nop
|
|
iaddi vi05, vi00, 0x0 | nop
|
|
bal vi15, L38 | nop
|
|
iaddiu vi07, vi00, 0x3e8 | nop
|
|
bal vi15, L38 | nop
|
|
iaddiu vi07, vi00, 0x3eb | nop
|
|
bal vi15, L38 | nop
|
|
iaddiu vi07, vi00, 0x3ee | nop
|
|
bal vi15, L38 | nop
|
|
iaddiu vi07, vi00, 0x3f1 | nop
|
|
b L47 | nop
|
|
nop | nop
|
|
L38:
|
|
iaddiu vi09, vi00, 0x37d | nop
|
|
L39:
|
|
iaddi vi10, vi00, 0x0 | nop
|
|
L40:
|
|
isubiu vi01, vi09, 0x3a7 | nop
|
|
ilwr.y vi08, vi09 | nop
|
|
ibgez vi01, L44 | nop
|
|
ilwr.z vi06, vi09 | nop
|
|
lq.xyzw vf15, 0(vi07) | nop
|
|
lq.xyzw vf14, 0(vi08) | nop
|
|
ibne vi00, vi08, L41 | nop
|
|
iswr.y vi07, vi09 | nop
|
|
jalr vi11, vi06 | nop
|
|
iswr.x vi07, vi09 | nop
|
|
nop | nop
|
|
nop | nop
|
|
nop | nop
|
|
fsand vi02, 0x2 | nop
|
|
ibne vi00, vi02, L45 | nop
|
|
nop | nop
|
|
b L40 | nop
|
|
iaddi vi09, vi09, 0x7 | nop
|
|
L41:
|
|
jalr vi11, vi06 | nop
|
|
nop | nop
|
|
nop | nop
|
|
nop | nop
|
|
fsand vi01, 0x2 | nop
|
|
fsand vi02, 0x2 | nop
|
|
ibne vi00, vi01, L43 | nop
|
|
nop | nop
|
|
ibne vi00, vi02, L42 | nop
|
|
nop | nop
|
|
b L40 | nop
|
|
iaddi vi09, vi09, 0x7 | nop
|
|
L42:
|
|
bal vi11, L52 | nop
|
|
iaddi vi07, vi09, 0x1 | nop
|
|
sq.xyzw vf16, 1(vi09) | nop
|
|
b L40 | nop
|
|
iaddi vi09, vi09, 0x7 | nop
|
|
L43:
|
|
ibne vi00, vi02, L45 | nop
|
|
nop | nop
|
|
bal vi11, L53 | nop
|
|
nop | nop
|
|
sq.xyzw vf16, 4(vi09) | nop
|
|
iaddi vi09, vi09, 0x7 | nop
|
|
isw.x vi09, 935(vi10) | nop
|
|
isw.y vi07, 935(vi10) | nop
|
|
iaddi vi10, vi10, 0x1 | nop
|
|
b L40 | nop
|
|
iaddi vi07, vi09, -0x3 | nop
|
|
L44:
|
|
lq.xyzw vf14, 0(vi07) | nop
|
|
iaddi vi05, vi05, 0x1 | nop
|
|
div Q, vf00.w, vf14.w | nop
|
|
nop | mul.xyzw vf14, vf14, vf13
|
|
iaddi vi03, vi03, 0x2 | nop
|
|
waitq | subw.w vf14, vf00, vf00
|
|
nop | mul.xyz vf14, vf14, Q
|
|
nop | add.xy vf26, vf14, vf03
|
|
nop | mulw.z vf14, vf14, vf12
|
|
nop | add.xyzw vf14, vf14, vf05
|
|
nop | mul.xy vf26, vf26, vf04
|
|
sq.xyzw vf26, -2(vi03) | ftoi4.xyzw vf14, vf14
|
|
sq.xyzw vf14, -1(vi03) | nop
|
|
L45:
|
|
iblez vi10, L46 | nop
|
|
nop | nop
|
|
ilw.x vi09, 934(vi10) | nop
|
|
ilw.y vi07, 934(vi10) | nop
|
|
b L40 | nop
|
|
iaddi vi10, vi10, -0x1 | nop
|
|
L46:
|
|
jr vi15 | nop
|
|
nop | nop
|
|
L47:
|
|
iaddiu vi09, vi00, 0x37d | nop
|
|
L48:
|
|
ilwr.x vi08, vi09 | nop
|
|
ilwr.y vi07, vi09 | nop
|
|
ilwr.z vi06, vi09 | nop
|
|
nop | nop
|
|
ibeq vi00, vi08, L50 | nop
|
|
lq.xyzw vf14, 0(vi07) | nop
|
|
ibeq vi07, vi08, L50 | nop
|
|
lq.xyzw vf15, 0(vi08) | nop
|
|
jalr vi11, vi06 | nop
|
|
nop | nop
|
|
nop | nop
|
|
nop | nop
|
|
fsand vi01, 0x2 | nop
|
|
fsand vi02, 0x2 | nop
|
|
ibeq vi02, vi01, L50 | nop
|
|
nop | nop
|
|
ibeq vi00, vi01, L49 | nop
|
|
nop | nop
|
|
bal vi11, L53 | nop
|
|
nop | nop
|
|
sq.xyzw vf16, 4(vi09) | nop
|
|
iaddi vi07, vi09, 0x4 | nop
|
|
ior vi12, vi09, vi00 | nop
|
|
bal vi15, L39 | nop
|
|
iaddi vi09, vi09, 0x7 | nop
|
|
b L50 | nop
|
|
ior vi09, vi12, vi00 | nop
|
|
L49:
|
|
bal vi11, L52 | nop
|
|
nop | nop
|
|
sq.xyzw vf16, 1(vi09) | nop
|
|
iaddi vi07, vi09, 0x1 | nop
|
|
ior vi12, vi09, vi00 | nop
|
|
bal vi15, L39 | nop
|
|
iaddi vi09, vi09, 0x7 | nop
|
|
ior vi09, vi12, vi00 | nop
|
|
L50:
|
|
isubiu vi01, vi09, 0x3a0 | nop
|
|
iswr.x vi00, vi09 | nop
|
|
iswr.y vi00, vi09 | nop
|
|
ibltz vi01, L48 | nop
|
|
iaddi vi09, vi09, 0x7 | nop
|
|
ibeq vi00, vi05, L51 | nop
|
|
mtir vi15, vf31.x | nop
|
|
iaddiu vi05, vi05, 0x4000 | nop
|
|
iaddiu vi05, vi05, 0x4000 | nop
|
|
iswr.x vi05, vi04 | nop
|
|
iaddiu vi01, vi00, 0x3ac | nop
|
|
xgkick vi01 | nop
|
|
lq.xyzw vf30, 888(vi00) | nop
|
|
lq.xyzw vf31, 890(vi00) | nop
|
|
iaddiu vi01, vi00, 0x3fe | nop
|
|
isubiu vi02, vi00, 0x7fff | nop
|
|
sq.xyzw vf30, 0(vi01) | nop
|
|
iswr.x vi02, vi01 | nop
|
|
sq.xyzw vf31, 1(vi01) | nop
|
|
nop | nop
|
|
xgkick vi01 | nop
|
|
L51:
|
|
nop | nop
|
|
jr vi15 | nop
|
|
nop | nop
|
|
jr vi11 | addx.w vf30, vf14, vf14
|
|
nop | addx.w vf31, vf15, vf15
|
|
jr vi11 | subx.w vf30, vf14, vf14
|
|
nop | subx.w vf31, vf15, vf15
|
|
jr vi11 | addy.w vf30, vf14, vf14
|
|
nop | addy.w vf31, vf15, vf15
|
|
jr vi11 | suby.w vf30, vf14, vf14
|
|
nop | suby.w vf31, vf15, vf15
|
|
jr vi11 | addz.w vf30, vf14, vf14
|
|
nop | addz.w vf31, vf15, vf15
|
|
jr vi11 | subz.w vf30, vf14, vf14
|
|
nop | subz.w vf31, vf15, vf15
|
|
L52:
|
|
nop | subw.w vf31, vf30, vf31
|
|
div Q, vf30.w, vf31.w | sub.xyzw vf16, vf15, vf14
|
|
waitq | mul.xyzw vf16, vf16, Q
|
|
jr vi11 | add.xyzw vf16, vf14, vf16
|
|
nop | nop
|
|
L53:
|
|
nop | subw.w vf30, vf30, vf31
|
|
div Q, vf31.w, vf30.w | sub.xyzw vf16, vf14, vf15
|
|
waitq | mul.xyzw vf16, vf16, Q
|
|
jr vi11 | sub.xyzw vf16, vf15, vf16
|
|
nop | nop
|
|
lq. vf00, 0(vi00) | addx. vf00, vf00, vf00
|