// File: alan0201tw[P]RayTracer/include/stb_image_write.h
// Function: stbiw__jpg_DCT(float*, float*, float*, float*, float*, float*, float*, float*)
static void stbiw__jpg_DCT(float *d0p, float *d1p, float *d2p, float *d3p, float *d4p, float *d5p, float *d6p, float *d7p) {
   float d0 = *d0p, d1 = *d1p, d2 = *d2p, d3 = *d3p, d4 = *d4p, d5 = *d5p, d6 = *d6p, d7 = *d7p;
   float z1, z2, z3, z4, z5, z11, z13;

   float tmp0 = d0 + d7;
   float tmp7 = d0 - d7;
   float tmp1 = d1 + d6;
   float tmp6 = d1 - d6;
   float tmp2 = d2 + d5;
   float tmp5 = d2 - d5;
   float tmp3 = d3 + d4;
   float tmp4 = d3 - d4;

   // Even part
   float tmp10 = tmp0 + tmp3;   // phase 2
   float tmp13 = tmp0 - tmp3;
   float tmp11 = tmp1 + tmp2;
   float tmp12 = tmp1 - tmp2;

   d0 = tmp10 + tmp11;       // phase 3
   d4 = tmp10 - tmp11;

   z1 = (tmp12 + tmp13) * 0.707106781f; // c4
   d2 = tmp13 + z1;       // phase 5
   d6 = tmp13 - z1;

   // Odd part
   tmp10 = tmp4 + tmp5;       // phase 2
   tmp11 = tmp5 + tmp6;
   tmp12 = tmp6 + tmp7;

   // The rotator is modified from fig 4-8 to avoid extra negations.
   z5 = (tmp10 - tmp12) * 0.382683433f; // c6
   z2 = tmp10 * 0.541196100f + z5; // c2-c6
   z4 = tmp12 * 1.306562965f + z5; // c2+c6
   z3 = tmp11 * 0.707106781f; // c4

   z11 = tmp7 + z3;      // phase 5
   z13 = tmp7 - z3;

   *d5p = z13 + z2;         // phase 6
   *d3p = z13 - z2;
   *d1p = z11 + z4;
   *d7p = z11 - z4;

   *d0p = d0;  *d2p = d2;  *d4p = d4;  *d6p = d6;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x8(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0x34(%rbp)
movq -0x10(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0x38(%rbp)
movq -0x18(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0x3c(%rbp)
movq -0x20(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0x40(%rbp)
movq -0x28(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0x44(%rbp)
movq -0x30(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0x48(%rbp)
movq 0x10(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0x4c(%rbp)
movq 0x18(%rbp), %rax
movss (%rax), %xmm0
movss %xmm0, -0x50(%rbp)
movss -0x34(%rbp), %xmm0
addss -0x50(%rbp), %xmm0
movss %xmm0, -0x70(%rbp)
movss -0x34(%rbp), %xmm0
subss -0x50(%rbp), %xmm0
movss %xmm0, -0x74(%rbp)
movss -0x38(%rbp), %xmm0
addss -0x4c(%rbp), %xmm0
movss %xmm0, -0x78(%rbp)
movss -0x38(%rbp), %xmm0
subss -0x4c(%rbp), %xmm0
movss %xmm0, -0x7c(%rbp)
movss -0x3c(%rbp), %xmm0
addss -0x48(%rbp), %xmm0
movss %xmm0, -0x80(%rbp)
movss -0x3c(%rbp), %xmm0
subss -0x48(%rbp), %xmm0
movss %xmm0, -0x84(%rbp)
movss -0x40(%rbp), %xmm0
addss -0x44(%rbp), %xmm0
movss %xmm0, -0x88(%rbp)
movss -0x40(%rbp), %xmm0
subss -0x44(%rbp), %xmm0
movss %xmm0, -0x8c(%rbp)
movss -0x70(%rbp), %xmm0
addss -0x88(%rbp), %xmm0
movss %xmm0, -0x90(%rbp)
movss -0x70(%rbp), %xmm0
subss -0x88(%rbp), %xmm0
movss %xmm0, -0x94(%rbp)
movss -0x78(%rbp), %xmm0
addss -0x80(%rbp), %xmm0
movss %xmm0, -0x98(%rbp)
movss -0x78(%rbp), %xmm0
subss -0x80(%rbp), %xmm0
movss %xmm0, -0x9c(%rbp)
movss -0x90(%rbp), %xmm0
addss -0x98(%rbp), %xmm0
movss %xmm0, -0x34(%rbp)
movss -0x90(%rbp), %xmm0
subss -0x98(%rbp), %xmm0
movss %xmm0, -0x44(%rbp)
movss -0x9c(%rbp), %xmm0
addss -0x94(%rbp), %xmm0
movss 0xbd23(%rip), %xmm1     # 0x7f214
mulss %xmm1, %xmm0
movss %xmm0, -0x54(%rbp)
movss -0x94(%rbp), %xmm0
addss -0x54(%rbp), %xmm0
movss %xmm0, -0x3c(%rbp)
movss -0x94(%rbp), %xmm0
subss -0x54(%rbp), %xmm0
movss %xmm0, -0x4c(%rbp)
movss -0x8c(%rbp), %xmm0
addss -0x84(%rbp), %xmm0
movss %xmm0, -0x90(%rbp)
movss -0x84(%rbp), %xmm0
addss -0x7c(%rbp), %xmm0
movss %xmm0, -0x98(%rbp)
movss -0x7c(%rbp), %xmm0
addss -0x74(%rbp), %xmm0
movss %xmm0, -0x9c(%rbp)
movss -0x90(%rbp), %xmm0
subss -0x9c(%rbp), %xmm0
movss 0xbcab(%rip), %xmm1     # 0x7f220
mulss %xmm1, %xmm0
movss %xmm0, -0x64(%rbp)
movss -0x90(%rbp), %xmm0
movss -0x64(%rbp), %xmm1
movss 0xbc89(%rip), %xmm2     # 0x7f21c
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x58(%rbp)
movss -0x9c(%rbp), %xmm0
movss -0x64(%rbp), %xmm1
movss 0xbc63(%rip), %xmm2     # 0x7f218
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x60(%rbp)
movss 0xbc4a(%rip), %xmm0     # 0x7f214
mulss -0x98(%rbp), %xmm0
movss %xmm0, -0x5c(%rbp)
movss -0x74(%rbp), %xmm0
addss -0x5c(%rbp), %xmm0
movss %xmm0, -0x68(%rbp)
movss -0x74(%rbp), %xmm0
subss -0x5c(%rbp), %xmm0
movss %xmm0, -0x6c(%rbp)
movss -0x6c(%rbp), %xmm0
addss -0x58(%rbp), %xmm0
movq -0x30(%rbp), %rax
movss %xmm0, (%rax)
movss -0x6c(%rbp), %xmm0
subss -0x58(%rbp), %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, (%rax)
movss -0x68(%rbp), %xmm0
addss -0x60(%rbp), %xmm0
movq -0x10(%rbp), %rax
movss %xmm0, (%rax)
movss -0x68(%rbp), %xmm0
subss -0x60(%rbp), %xmm0
movq 0x18(%rbp), %rax
movss %xmm0, (%rax)
movss -0x34(%rbp), %xmm0
movq -0x8(%rbp), %rax
movss %xmm0, (%rax)
movss -0x3c(%rbp), %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, (%rax)
movss -0x44(%rbp), %xmm0
movq -0x28(%rbp), %rax
movss %xmm0, (%rax)
movss -0x4c(%rbp), %xmm0
movq 0x10(%rbp), %rax
movss %xmm0, (%rax)
addq $0x20, %rsp
popq %rbp
retq
nopw (%rax,%rax)