// File: /workspace/github_c_makefile_star2_O1/nkanaev[P]tipsy/src/tipsy.c
// Function: obj_normalize
void obj_normalize(Obj *obj) {
  Vec min = {FLT_MAX, FLT_MAX, FLT_MAX}, max = {FLT_MIN, FLT_MIN, FLT_MIN};
  for (int i = 0; i < obj->v->len; i++) {
    Vec v = VREF(list_get(obj->v, i));
    min.x = fminf(min.x, v.x); max.x = fmaxf(max.x, v.x);
    min.y = fminf(min.y, v.y); max.y = fmaxf(max.y, v.y);
    min.z = fminf(min.z, v.z); max.z = fmaxf(max.z, v.z);
  }

  Vec size = vec_sub(max, min);
  float W = fmaxf(fmaxf(size.x, size.y), size.z);

  for (int i = 0; i < obj->v->len; i++) {
    Vec *v = (Vec*)list_get(obj->v, i);
    v->x = ((v->x - min.x) / W*2 - size.x/W);
    v->y = -((v->y - min.y) / W*2 - size.y/W);
    v->z = -((v->z - min.z) / W*2 - size.z/W);
  }

  for (int i = 0; i < obj->vn->len; i++) {
    Vec *vn = (Vec*)list_get(obj->vn, i);
    Vec nrm = vec_nrm(*vn);
    vn->x = nrm.x;
    vn->y = -nrm.y;
    vn->z = -nrm.z;
  }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x38, %rsp
movq %rdi, %rbx
movq (%rdi), %rcx
movslq 0x8(%rcx), %rax
testq %rax, %rax
jle 0x8f16
movq (%rcx), %rdx
movslq 0x10(%rcx), %rsi
addq $0x8, %rdx
movaps 0x3f72(%rip), %xmm5     # 0xcd90
movss 0x3f32(%rip), %xmm4     # 0xcd58
movaps 0x3f53(%rip), %xmm7     # 0xcd80
movss 0x3f1f(%rip), %xmm0     # 0xcd54
movq %rax, %rdi
movaps %xmm7, %xmm1
movaps %xmm5, %xmm2
movaps %xmm4, %xmm3
movss -0x8(%rdx), %xmm9
movss -0x4(%rdx), %xmm8
movss (%rdx), %xmm6
cmpunordss %xmm1, %xmm1
movaps %xmm1, %xmm10
andps %xmm9, %xmm10
movaps %xmm9, %xmm11
minss %xmm7, %xmm11
andnps %xmm11, %xmm1
orps %xmm10, %xmm1
cmpunordss %xmm2, %xmm2
movaps %xmm2, %xmm10
andps %xmm9, %xmm10
maxss %xmm5, %xmm9
andnps %xmm9, %xmm2
orps %xmm10, %xmm2
shufps $0x55, %xmm7, %xmm7     # xmm7 = xmm7[1,1,1,1]
movaps %xmm8, %xmm9
minss %xmm7, %xmm9
cmpunordss %xmm7, %xmm7
movaps %xmm7, %xmm10
andps %xmm8, %xmm10
andnps %xmm9, %xmm7
orps %xmm10, %xmm7
unpcklps %xmm7, %xmm1            # xmm1 = xmm1[0],xmm7[0],xmm1[1],xmm7[1]
shufps $0x55, %xmm5, %xmm5     # xmm5 = xmm5[1,1,1,1]
movaps %xmm5, %xmm7
cmpunordss %xmm5, %xmm7
movaps %xmm7, %xmm9
andps %xmm8, %xmm9
maxss %xmm5, %xmm8
andnps %xmm8, %xmm7
orps %xmm9, %xmm7
unpcklps %xmm7, %xmm2            # xmm2 = xmm2[0],xmm7[0],xmm2[1],xmm7[1]
movaps %xmm6, %xmm5
minss %xmm0, %xmm5
cmpunordss %xmm0, %xmm0
movaps %xmm0, %xmm7
andps %xmm6, %xmm7
andnps %xmm5, %xmm0
orps %xmm7, %xmm0
cmpunordss %xmm3, %xmm3
movaps %xmm3, %xmm5
andps %xmm6, %xmm5
maxss %xmm4, %xmm6
andnps %xmm6, %xmm3
orps %xmm5, %xmm3
addq %rsi, %rdx
movaps %xmm1, %xmm7
movaps %xmm3, %xmm4
movaps %xmm2, %xmm5
decq %rdi
jne 0x8e41
jmp 0x8f34
movss 0x3e36(%rip), %xmm0     # 0xcd54
movaps 0x3e5b(%rip), %xmm1     # 0xcd80
movss 0x3e2b(%rip), %xmm3     # 0xcd58
movaps 0x3e5c(%rip), %xmm2     # 0xcd90
testl %eax, %eax
jle 0x901f
subps %xmm1, %xmm2
movaps %xmm1, %xmm4
shufps $0x55, %xmm1, %xmm4     # xmm4 = xmm4[1,1],xmm1[1,1]
movaps %xmm2, %xmm5
shufps $0x55, %xmm2, %xmm5     # xmm5 = xmm5[1,1],xmm2[1,1]
subss %xmm0, %xmm3
movaps %xmm2, %xmm6
cmpunordss %xmm2, %xmm6
movaps %xmm6, %xmm7
andps %xmm5, %xmm7
movaps %xmm5, %xmm8
maxss %xmm2, %xmm8
andnps %xmm8, %xmm6
orps %xmm7, %xmm6
movaps %xmm3, %xmm7
maxss %xmm6, %xmm7
cmpunordss %xmm6, %xmm6
movaps %xmm6, %xmm8
andnps %xmm7, %xmm8
andps %xmm3, %xmm6
orps %xmm8, %xmm6
movq (%rcx), %rdx
movslq 0x10(%rcx), %rcx
movaps 0x3e08(%rip), %xmm7     # 0xcda0
xorps %xmm7, %xmm2
divss %xmm6, %xmm2
xorps %xmm7, %xmm5
divss %xmm6, %xmm5
xorps %xmm7, %xmm3
divss %xmm6, %xmm3
addq $0x8, %rdx
movss -0x8(%rdx), %xmm8
movss -0x4(%rdx), %xmm9
subss %xmm1, %xmm8
divss %xmm6, %xmm8
addss %xmm8, %xmm8
addss %xmm2, %xmm8
movss %xmm8, -0x8(%rdx)
subss %xmm4, %xmm9
divss %xmm6, %xmm9
addss %xmm9, %xmm9
addss %xmm5, %xmm9
xorps %xmm7, %xmm9
movss %xmm9, -0x4(%rdx)
movss (%rdx), %xmm8
subss %xmm0, %xmm8
divss %xmm6, %xmm8
addss %xmm8, %xmm8
addss %xmm3, %xmm8
xorps %xmm7, %xmm8
movss %xmm8, (%rdx)
addq %rcx, %rdx
decq %rax
jne 0x8fb1
movq 0x8(%rbx), %rax
cmpl $0x0, 0x8(%rax)
jle 0x90fe
xorl %ebp, %ebp
xorps %xmm2, %xmm2
movss 0x1fca(%rip), %xmm3     # 0xb004
movaps 0x3d5f(%rip), %xmm4     # 0xcda0
movq (%rax), %r14
movslq 0x10(%rax), %rax
movslq %ebp, %r15
imulq %rax, %r15
movsd (%r14,%r15), %xmm7
movss 0x8(%r14,%r15), %xmm5
movaps %xmm7, %xmm6
shufps $0x55, %xmm7, %xmm6     # xmm6 = xmm6[1,1],xmm7[1,1]
movaps %xmm6, %xmm0
mulss %xmm6, %xmm0
movaps %xmm7, %xmm1
mulss %xmm7, %xmm1
addss %xmm0, %xmm1
movaps %xmm5, %xmm0
mulss %xmm5, %xmm0
addss %xmm1, %xmm0
ucomiss %xmm2, %xmm0
jb 0x908b
sqrtss %xmm0, %xmm0
jmp 0x90c2
movss %xmm5, 0xc(%rsp)
movaps %xmm6, 0x20(%rsp)
movaps %xmm7, 0x10(%rsp)
callq 0x3730
movaps 0x10(%rsp), %xmm7
movaps 0x20(%rsp), %xmm6
movss 0xc(%rsp), %xmm5
movaps 0x3ce9(%rip), %xmm4     # 0xcda0
movss 0x1f45(%rip), %xmm3     # 0xb004
xorps %xmm2, %xmm2
movaps %xmm3, %xmm1
divss %xmm0, %xmm1
mulss %xmm1, %xmm7
movss %xmm7, (%r14,%r15)
xorps %xmm4, %xmm6
mulss %xmm1, %xmm6
movss %xmm6, 0x4(%r14,%r15)
xorps %xmm4, %xmm1
mulss %xmm1, %xmm5
movss %xmm5, 0x8(%r14,%r15)
incl %ebp
movq 0x8(%rbx), %rax
cmpl 0x8(%rax), %ebp
jl 0x9041
addq $0x38, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq