;;-*-Lisp-*-
(in-package goal)

;; definition for function drawable-sphere-box-intersect?
;; WARN: Function may read a register that is not set: f31
;; Used lq/sq
(defun drawable-sphere-box-intersect? ((arg0 drawable) (arg1 bounding-box4w))
  (local-vars
    (r0-0 int)
    (r0-1 int)
    (r0-2 int)
    (r0-3 int)
    (v1-1 uint128)
    (v1-2 uint128)
    (v1-3 uint128)
    (a0-1 uint128)
    (a1-2 uint128)
    (a2-0 uint128)
    (f31-0 none)
    )
  (rlet ((vf1 :class vf)
         (vf2 :class vf)
         (vf3 :class vf)
         (vf4 :class vf)
         )
    (nop!)
    (nop!)
    (.lvf vf1 (&-> arg0 bsphere quad))
    (.add.w.vf vf2 vf1 vf1 :mask #b111)
    (let ((v1-0 (-> arg1 min quad)))
      (.sub.w.vf vf1 vf1 vf1 :mask #b111)
      (let ((a1-1 (-> arg1 max quad)))
        (.ftoi.vf vf4 vf2)
        (nop!)
        (.ftoi.vf vf3 vf1)
        (nop!)
        (.mov a0-1 vf4)
        (nop!)
        (.mov a2-0 vf3)
        (nop!)
        (.pcgtw a1-2 a2-0 a1-1)
        )
      (.mov r0-0 f31-0)
      (.pcgtw v1-1 v1-0 a0-1)
      )
    (.mov r0-1 f31-0)
    (.por v1-2 a1-2 v1-1)
    (.mov r0-2 f31-0)
    (.ppach v1-3 (the-as uint128 0) v1-2)
    (.mov r0-3 f31-0)
    (let ((v1-4 (shl (the-as int v1-3) 16)))
      (nop!)
      (zero? v1-4)
      )
    )
  )

;; definition for function instance-sphere-box-intersect?
;; WARN: Function may read a register that is not set: f31
;; Used lq/sq
(defun instance-sphere-box-intersect? ((arg0 drawable) (arg1 instance-tie) (arg2 bounding-box4w))
  (local-vars
    (r0-0 int)
    (r0-1 int)
    (r0-2 int)
    (r0-3 int)
    (r0-4 int)
    (r0-5 int)
    (v1-3 uint128)
    (v1-4 uint128)
    (v1-5 uint128)
    (a0-2 uint128)
    (a1-2 uint128)
    (a2-1 uint128)
    (a3-1 uint128)
    (a3-3 uint128)
    (a3-4 uint128)
    (t0-1 uint128)
    (t0-2 uint128)
    (t1-0 uint128)
    (t2-1 uint128)
    (t2-2 uint128)
    (f31-0 none)
    )
  (rlet ((acc :class vf)
         (vf0 :class vf)
         (vf1 :class vf)
         (vf10 :class vf)
         (vf2 :class vf)
         (vf3 :class vf)
         (vf4 :class vf)
         (vf5 :class vf)
         (vf6 :class vf)
         (vf7 :class vf)
         (vf8 :class vf)
         (vf9 :class vf)
         )
    (init-vf0-vector)
    (nop!)
    (let ((v1-0 (-> arg1 max-scale)))
      (nop!)
      (let ((a3-0 (the-as uint128 (-> arg1 origin vector4h 3 long))))
        (nop!)
        (let ((t2-0 (the-as uint128 (-> arg1 origin vector4h 0 long))))
          (.pextlh a3-1 a3-0 0)
          (let ((t0-0 (the-as uint128 (-> arg1 origin vector4h 1 long))))
            (.pw.sra t1-0 a3-1 10)
            (let ((a3-2 (the-as uint128 (-> arg1 origin vector4h 2 long))))
              (.pextlh t2-1 t2-0 0)
              (.mov r0-0 f31-0)
              (.pw.sra t2-2 t2-1 16)
              (.mov r0-1 f31-0)
              (.pextlh t0-1 t0-0 0)
              (.mov vf8 t1-0)
              (.pw.sra t0-2 t0-1 16)
              (.mov vf5 t2-2)
              (.pextlh a3-3 a3-2 0)
              )
            )
          )
        )
      (.mov vf6 t0-2)
      (.pw.sra a3-4 a3-3 16)
      (.lvf vf9 (&-> arg1 bsphere quad))
      (nop!)
      (.mov vf7 a3-4)
      (nop!)
      (.mov vf10 v1-0)
      )
    (.itof.vf vf8 vf8)
    (nop!)
    (vitof12.xyzw vf5 vf5)
    (nop!)
    (vitof12.xyzw vf6 vf6)
    (nop!)
    (vitof12.xyzw vf7 vf7)
    (nop!)
    (.add.vf vf8 vf8 vf9 :mask #b111)
    (nop!)
    (nop!)
    (.lvf vf9 (&-> arg0 bsphere quad))
    (vitof12.xyzw vf10 vf10)
    (nop!)
    (.mul.w.vf vf10 vf10 vf9 :mask #b1)
    (nop!)
    (.mul.x.vf acc vf5 vf9)
    (nop!)
    (.add.mul.y.vf acc vf6 vf9 acc)
    (let ((v1-2 (-> arg2 min quad)))
      (.add.mul.z.vf acc vf7 vf9 acc)
      (let ((a1-1 (-> arg2 max quad)))
        (.add.mul.w.vf vf1 vf8 vf0 acc)
        (nop!)
        (.add.x.vf vf2 vf1 vf10 :mask #b111)
        (nop!)
        (.sub.x.vf vf1 vf1 vf10 :mask #b111)
        (nop!)
        (.ftoi.vf vf4 vf2)
        (nop!)
        (.ftoi.vf vf3 vf1)
        (nop!)
        (.mov a0-2 vf4)
        (nop!)
        (.mov a2-1 vf3)
        (nop!)
        (.pcgtw a1-2 a2-1 a1-1)
        )
      (.mov r0-2 f31-0)
      (.pcgtw v1-3 v1-2 a0-2)
      )
    (.mov r0-3 f31-0)
    (.por v1-4 a1-2 v1-3)
    (.mov r0-4 f31-0)
    (.ppach v1-5 (the-as uint128 0) v1-4)
    (.mov r0-5 f31-0)
    (let ((v1-6 (shl (the-as int v1-5) 16)))
      (nop!)
      (zero? v1-6)
      )
    )
  )

;; definition for function instance-tfragment-add-debug-sphere
;; Used lq/sq
(defun instance-tfragment-add-debug-sphere ((arg0 drawable) (arg1 instance-tie))
  (local-vars (v1-1 uint128) (v1-2 uint128) (a3-0 float))
  (rlet ((vf0 :class vf)
         (vf10 :class vf)
         (vf11 :class vf)
         (vf12 :class vf)
         (vf9 :class vf)
         )
    (init-vf0-vector)
    (nop!)
    (let ((v1-0 (the-as uint128 (-> arg1 origin vector4h 3 long))))
      (.pextlh v1-1 v1-0 0)
      )
    (.lvf vf9 (&-> arg0 bsphere quad))
    (.pw.sra v1-2 v1-1 10)
    (.lvf vf10 (&-> arg1 bsphere quad))
    (nop!)
    (.mov vf12 v1-2)
    (.itof.vf vf12 vf12)
    (nop!)
    (.add.vf vf10 vf10 vf12 :mask #b111)
    (nop!)
    (.add.vf vf9 vf9 vf10 :mask #b111)
    (nop!)
    (.add.w.vf vf11 vf0 vf9 :mask #b1)
    (nop!)
    (.mov a3-0 vf11)
    (nop!)
    (let ((a2-0 (new-stack-vector0)))
      (.svf (&-> a2-0 quad) vf9)
      (add-debug-sphere #t (bucket-id debug) a2-0 a3-0 (new 'static 'rgba :r #x80 :g #x80 :b #x80 :a #x80))
      )
    )
  )
