// File: /workspace/github_c_makefile_star2_O0/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
movq %rsp, %rbp
subq $0xc0, %rsp
movq %rdi, -0x8(%rbp)
movq 0x4926(%rip), %rax      # 0x108dc
movq %rax, -0x14(%rbp)
movl 0x4924(%rip), %eax      # 0x108e4
movl %eax, -0xc(%rbp)
movq 0x491e(%rip), %rax      # 0x108e8
movq %rax, -0x20(%rbp)
movl 0x491c(%rip), %eax      # 0x108f0
movl %eax, -0x18(%rbp)
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x8(%rcx), %eax
jge 0xc129
movq -0x8(%rbp), %rax
movq (%rax), %rdi
movl -0x24(%rbp), %esi
callq 0xabd0
movq (%rax), %rcx
movq %rcx, -0x30(%rbp)
movl 0x8(%rax), %eax
movl %eax, -0x28(%rbp)
movss -0x14(%rbp), %xmm3
movss -0x30(%rbp), %xmm2
movaps %xmm2, %xmm4
movaps %xmm3, %xmm0
cmpunordss %xmm0, %xmm0
movaps %xmm0, %xmm1
pand %xmm4, %xmm1
minss %xmm3, %xmm2
pandn %xmm2, %xmm0
por %xmm1, %xmm0
movss %xmm0, -0x14(%rbp)
movss -0x20(%rbp), %xmm3
movss -0x30(%rbp), %xmm2
movaps %xmm2, %xmm4
movaps %xmm3, %xmm0
cmpunordss %xmm0, %xmm0
movaps %xmm0, %xmm1
pand %xmm4, %xmm1
maxss %xmm3, %xmm2
pandn %xmm2, %xmm0
por %xmm1, %xmm0
movss %xmm0, -0x20(%rbp)
movss -0x10(%rbp), %xmm3
movss -0x2c(%rbp), %xmm2
movaps %xmm2, %xmm4
movaps %xmm3, %xmm0
cmpunordss %xmm0, %xmm0
movaps %xmm0, %xmm1
pand %xmm4, %xmm1
minss %xmm3, %xmm2
pandn %xmm2, %xmm0
por %xmm1, %xmm0
movss %xmm0, -0x10(%rbp)
movss -0x1c(%rbp), %xmm3
movss -0x2c(%rbp), %xmm2
movaps %xmm2, %xmm4
movaps %xmm3, %xmm0
cmpunordss %xmm0, %xmm0
movaps %xmm0, %xmm1
pand %xmm4, %xmm1
maxss %xmm3, %xmm2
pandn %xmm2, %xmm0
por %xmm1, %xmm0
movss %xmm0, -0x1c(%rbp)
movss -0xc(%rbp), %xmm3
movss -0x28(%rbp), %xmm2
movaps %xmm2, %xmm4
movaps %xmm3, %xmm0
cmpunordss %xmm0, %xmm0
movaps %xmm0, %xmm1
pand %xmm4, %xmm1
minss %xmm3, %xmm2
pandn %xmm2, %xmm0
por %xmm1, %xmm0
movss %xmm0, -0xc(%rbp)
movss -0x18(%rbp), %xmm3
movss -0x28(%rbp), %xmm2
movaps %xmm2, %xmm4
movaps %xmm3, %xmm0
cmpunordss %xmm0, %xmm0
movaps %xmm0, %xmm1
pand %xmm4, %xmm1
maxss %xmm3, %xmm2
pandn %xmm2, %xmm0
por %xmm1, %xmm0
movss %xmm0, -0x18(%rbp)
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0xbfde
movl -0x18(%rbp), %eax
movl %eax, -0x48(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x50(%rbp)
movsd -0x50(%rbp), %xmm0
movss -0x48(%rbp), %xmm1
movl -0xc(%rbp), %eax
movl %eax, -0x58(%rbp)
movq -0x14(%rbp), %rax
movq %rax, -0x60(%rbp)
movsd -0x60(%rbp), %xmm2
movss -0x58(%rbp), %xmm3
callq 0xaed0
movss %xmm1, -0x68(%rbp)
movlpd %xmm0, -0x70(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x3c(%rbp)
movl -0x68(%rbp), %eax
movl %eax, -0x34(%rbp)
movss -0x3c(%rbp), %xmm2
movss -0x38(%rbp), %xmm1
movaps %xmm1, %xmm4
movaps %xmm2, %xmm3
cmpunordss %xmm3, %xmm3
movaps %xmm3, %xmm0
pand %xmm4, %xmm0
maxss %xmm2, %xmm1
pandn %xmm1, %xmm3
por %xmm0, %xmm3
movss -0x34(%rbp), %xmm2
movaps %xmm2, %xmm4
movaps %xmm3, %xmm0
cmpunordss %xmm0, %xmm0
movaps %xmm0, %xmm1
pand %xmm4, %xmm1
maxss %xmm3, %xmm2
pandn %xmm2, %xmm0
por %xmm1, %xmm0
movss %xmm0, -0x74(%rbp)
movl $0x0, -0x78(%rbp)
movl -0x78(%rbp), %eax
movq -0x8(%rbp), %rcx
movq (%rcx), %rcx
cmpl 0x8(%rcx), %eax
jge 0xc2ca
movq -0x8(%rbp), %rax
movq (%rax), %rdi
movl -0x78(%rbp), %esi
callq 0xabd0
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
movss (%rax), %xmm0
subss -0x14(%rbp), %xmm0
divss -0x74(%rbp), %xmm0
movss -0x3c(%rbp), %xmm1
divss -0x74(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
addss %xmm0, %xmm0
addss %xmm1, %xmm0
movq -0x80(%rbp), %rax
movss %xmm0, (%rax)
movq -0x80(%rbp), %rax
movss 0x4(%rax), %xmm0
subss -0x10(%rbp), %xmm0
divss -0x74(%rbp), %xmm0
movss -0x38(%rbp), %xmm1
divss -0x74(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
addss %xmm0, %xmm0
addss %xmm1, %xmm0
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
movq -0x80(%rbp), %rax
movss %xmm0, 0x4(%rax)
movq -0x80(%rbp), %rax
movss 0x8(%rax), %xmm0
subss -0xc(%rbp), %xmm0
divss -0x74(%rbp), %xmm0
movss -0x34(%rbp), %xmm1
divss -0x74(%rbp), %xmm1
movd %xmm1, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm1
addss %xmm0, %xmm0
addss %xmm1, %xmm0
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
movq -0x80(%rbp), %rax
movss %xmm0, 0x8(%rax)
movl -0x78(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x78(%rbp)
jmp 0xc1cd
movl $0x0, -0x84(%rbp)
movl -0x84(%rbp), %eax
movq -0x8(%rbp), %rcx
movq 0x8(%rcx), %rcx
cmpl 0x8(%rcx), %eax
jge 0xc3c7
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rdi
movl -0x84(%rbp), %esi
callq 0xabd0
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
movl 0x8(%rax), %ecx
movl %ecx, -0xa8(%rbp)
movq (%rax), %rax
movq %rax, -0xb0(%rbp)
movsd -0xb0(%rbp), %xmm0
movss -0xa8(%rbp), %xmm1
callq 0xaf60
movss %xmm1, -0xb8(%rbp)
movlpd %xmm0, -0xc0(%rbp)
movq -0xc0(%rbp), %rax
movq %rax, -0x9c(%rbp)
movl -0xb8(%rbp), %eax
movl %eax, -0x94(%rbp)
movss -0x9c(%rbp), %xmm0
movq -0x90(%rbp), %rax
movss %xmm0, (%rax)
movss -0x98(%rbp), %xmm0
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
movq -0x90(%rbp), %rax
movss %xmm0, 0x4(%rax)
movss -0x94(%rbp), %xmm0
movd %xmm0, %eax
xorl $0x80000000, %eax       # imm = 0x80000000
movd %eax, %xmm0
movq -0x90(%rbp), %rax
movss %xmm0, 0x8(%rax)
movl -0x84(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x84(%rbp)
jmp 0xc2d4
addq $0xc0, %rsp
popq %rbp
retq