// File: /workspace/github_cpp_makefile_star2_O1/2TallTim[P]modern-raytracing/./camera.hpp
// Function: camera::camera(vec3, vec3, vec3, double, double, double, double)
camera(vec3 origin_, vec3 aim_, vec3 up_,
           double vfov, double aspect, double aperture, double focus_dist) {
        lens_radius = aperture / 2;
        double theta = vfov*M_PI/180;
        double half_height = tan(theta/2);
        double half_width = aspect*half_height;
        origin = origin_;
        w = unit_vector(origin_ - aim_);
        u = unit_vector(cross(up_, w));
        v = cross(w,u);
        horizontal = 2*half_width*focus_dist*u;
        vertical = 2*half_height*focus_dist*v;
    }

// Assembly:
pushq %r14
pushq %rbx
subq $0x38, %rsp
movsd %xmm3, 0x30(%rsp)
movsd %xmm1, 0x18(%rsp)
movsd %xmm0, 0x8(%rsp)
movq %rdi, %rbx
leaq 0x80(%rsp), %r14
addq $0x8, %rdi
mulsd 0x4378(%rip), %xmm2     # 0xa0e8
movsd %xmm2, (%rsp)
movl $0xa8, %edx
xorl %esi, %esi
callq 0x30b0
movsd 0x8(%rsp), %xmm0
mulsd 0x43b9(%rip), %xmm0     # 0xa148
movsd (%rsp), %xmm1
movsd %xmm1, (%rbx)
divsd 0x43b0(%rip), %xmm0     # 0xa150
mulsd 0x4340(%rip), %xmm0     # 0xa0e8
callq 0x30c0
movq 0x60(%rsp), %rax
movq %rax, 0x30(%rbx)
movaps 0x50(%rsp), %xmm1
movups %xmm1, 0x20(%rbx)
movsd 0x50(%rsp), %xmm4
movsd 0x58(%rsp), %xmm7
subsd 0x68(%rsp), %xmm4
subsd 0x70(%rsp), %xmm7
movsd 0x60(%rsp), %xmm9
subsd 0x78(%rsp), %xmm9
movapd %xmm0, %xmm6
movapd %xmm7, %xmm0
mulsd %xmm7, %xmm0
movapd %xmm4, %xmm1
mulsd %xmm4, %xmm1
addsd %xmm0, %xmm1
movapd %xmm9, %xmm0
mulsd %xmm9, %xmm0
addsd %xmm1, %xmm0
xorpd %xmm11, %xmm11
ucomisd %xmm11, %xmm0
movsd %xmm6, 0x8(%rsp)
jb 0x5e23
sqrtsd %xmm0, %xmm0
jmp 0x5e57
movsd %xmm7, (%rsp)
movsd %xmm4, 0x10(%rsp)
movapd %xmm9, 0x20(%rsp)
callq 0x3150
xorpd %xmm11, %xmm11
movapd 0x20(%rsp), %xmm9
movsd 0x10(%rsp), %xmm4
movsd (%rsp), %xmm7
movsd 0x8(%rsp), %xmm6
movsd 0x18(%rsp), %xmm5
mulsd %xmm6, %xmm5
divsd %xmm0, %xmm4
divsd %xmm0, %xmm7
divsd %xmm0, %xmm9
movsd %xmm4, 0x98(%rbx)
movsd %xmm7, 0xa0(%rbx)
movsd %xmm9, 0xa8(%rbx)
movsd (%r14), %xmm0
movsd 0x8(%r14), %xmm1
movsd 0x10(%r14), %xmm2
movapd %xmm7, %xmm3
mulsd %xmm2, %xmm3
mulsd %xmm4, %xmm2
mulsd %xmm1, %xmm4
movapd %xmm1, %xmm8
mulsd %xmm9, %xmm8
subsd %xmm3, %xmm8
mulsd %xmm0, %xmm9
subsd %xmm2, %xmm9
movapd 0x4146(%rip), %xmm10    # 0xa010
xorpd %xmm9, %xmm10
mulsd %xmm0, %xmm7
subsd %xmm4, %xmm7
mulsd %xmm9, %xmm9
movapd %xmm8, %xmm1
mulsd %xmm8, %xmm1
addsd %xmm9, %xmm1
movapd %xmm7, %xmm0
mulsd %xmm7, %xmm0
addsd %xmm1, %xmm0
ucomisd %xmm11, %xmm0
jb 0x5f04
sqrtsd %xmm0, %xmm0
jmp 0x5f41
movsd %xmm5, 0x18(%rsp)
movsd %xmm7, (%rsp)
movsd %xmm8, 0x10(%rsp)
movapd %xmm10, 0x20(%rsp)
callq 0x3150
movapd 0x20(%rsp), %xmm10
movsd 0x10(%rsp), %xmm8
movsd (%rsp), %xmm7
movsd 0x8(%rsp), %xmm6
movsd 0x18(%rsp), %xmm5
divsd %xmm0, %xmm8
divsd %xmm0, %xmm10
divsd %xmm0, %xmm7
movsd %xmm8, 0x68(%rbx)
movsd %xmm10, 0x70(%rbx)
movsd %xmm7, 0x78(%rbx)
movsd 0x98(%rbx), %xmm1
movsd 0xa0(%rbx), %xmm0
movsd 0xa8(%rbx), %xmm3
movapd %xmm10, %xmm2
mulsd %xmm3, %xmm2
movapd %xmm8, %xmm4
mulsd %xmm0, %xmm4
mulsd %xmm7, %xmm0
subsd %xmm2, %xmm0
mulsd %xmm8, %xmm3
movapd %xmm1, %xmm2
mulsd %xmm7, %xmm2
subsd %xmm3, %xmm2
xorpd 0x4065(%rip), %xmm2     # 0xa010
mulsd %xmm10, %xmm1
subsd %xmm4, %xmm1
movsd %xmm0, 0x80(%rbx)
movlpd %xmm2, 0x88(%rbx)
movsd %xmm1, 0x90(%rbx)
addsd %xmm5, %xmm5
movsd 0x30(%rsp), %xmm3
mulsd %xmm3, %xmm5
mulsd %xmm5, %xmm8
mulsd %xmm5, %xmm10
mulsd %xmm7, %xmm5
movsd %xmm8, 0x38(%rbx)
movsd %xmm10, 0x40(%rbx)
movsd %xmm5, 0x48(%rbx)
addsd %xmm6, %xmm6
mulsd %xmm3, %xmm6
mulsd %xmm6, %xmm0
mulsd %xmm6, %xmm2
mulsd %xmm1, %xmm6
movsd %xmm0, 0x50(%rbx)
movsd %xmm2, 0x58(%rbx)
movsd %xmm6, 0x60(%rbx)
addq $0x38, %rsp
popq %rbx
popq %r14
retq