// File: /workspace/github_c_makefile_star2_O0/archer1357[P]Offline-Raytracer/jo_jpeg.c
// Function: jo_DCT
static void jo_DCT(float *d0, float *d1, float *d2,
                   float *d3, float *d4, float *d5,
                   float *d6, float *d7) {

  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;

  float 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.
  float z5 = (tmp10 - tmp12) * 0.382683433f; // c6
  float z2 = tmp10 * 0.541196100f + z5; // c2-c6
  float z4 = tmp12 * 1.306562965f + z5; // c2+c6
  float z3 = tmp11 * 0.707106781f; // c4

  float z11 = tmp7 + z3;		// phase 5
  float z13 = tmp7 - z3;

  (*d5) = z13 + z2;			// phase 6
  (*d3) = z13 - z2;
  (*d1) = z11 + z4;
  (*d7) = z11 - z4;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
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
movq 0x18(%rbp), %rax
addss (%rax), %xmm0
movss %xmm0, -0x34(%rbp)
movq -0x8(%rbp), %rax
movss (%rax), %xmm0
movq 0x18(%rbp), %rax
subss (%rax), %xmm0
movss %xmm0, -0x38(%rbp)
movq -0x10(%rbp), %rax
movss (%rax), %xmm0
movq 0x10(%rbp), %rax
addss (%rax), %xmm0
movss %xmm0, -0x3c(%rbp)
movq -0x10(%rbp), %rax
movss (%rax), %xmm0
movq 0x10(%rbp), %rax
subss (%rax), %xmm0
movss %xmm0, -0x40(%rbp)
movq -0x18(%rbp), %rax
movss (%rax), %xmm0
movq -0x30(%rbp), %rax
addss (%rax), %xmm0
movss %xmm0, -0x44(%rbp)
movq -0x18(%rbp), %rax
movss (%rax), %xmm0
movq -0x30(%rbp), %rax
subss (%rax), %xmm0
movss %xmm0, -0x48(%rbp)
movq -0x20(%rbp), %rax
movss (%rax), %xmm0
movq -0x28(%rbp), %rax
addss (%rax), %xmm0
movss %xmm0, -0x4c(%rbp)
movq -0x20(%rbp), %rax
movss (%rax), %xmm0
movq -0x28(%rbp), %rax
subss (%rax), %xmm0
movss %xmm0, -0x50(%rbp)
movss -0x34(%rbp), %xmm0
addss -0x4c(%rbp), %xmm0
movss %xmm0, -0x54(%rbp)
movss -0x34(%rbp), %xmm0
subss -0x4c(%rbp), %xmm0
movss %xmm0, -0x58(%rbp)
movss -0x3c(%rbp), %xmm0
addss -0x44(%rbp), %xmm0
movss %xmm0, -0x5c(%rbp)
movss -0x3c(%rbp), %xmm0
subss -0x44(%rbp), %xmm0
movss %xmm0, -0x60(%rbp)
movss -0x54(%rbp), %xmm0
addss -0x5c(%rbp), %xmm0
movq -0x8(%rbp), %rax
movss %xmm0, (%rax)
movss -0x54(%rbp), %xmm0
subss -0x5c(%rbp), %xmm0
movq -0x28(%rbp), %rax
movss %xmm0, (%rax)
movss -0x60(%rbp), %xmm0
addss -0x58(%rbp), %xmm0
movss 0xd9d9a(%rip), %xmm1    # 0x4e3488
mulss %xmm1, %xmm0
movss %xmm0, -0x64(%rbp)
movss -0x58(%rbp), %xmm0
addss -0x64(%rbp), %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, (%rax)
movss -0x58(%rbp), %xmm0
subss -0x64(%rbp), %xmm0
movq 0x10(%rbp), %rax
movss %xmm0, (%rax)
movss -0x50(%rbp), %xmm0
addss -0x48(%rbp), %xmm0
movss %xmm0, -0x54(%rbp)
movss -0x48(%rbp), %xmm0
addss -0x40(%rbp), %xmm0
movss %xmm0, -0x5c(%rbp)
movss -0x40(%rbp), %xmm0
addss -0x38(%rbp), %xmm0
movss %xmm0, -0x60(%rbp)
movss -0x54(%rbp), %xmm0
subss -0x60(%rbp), %xmm0
movss 0xd9d3a(%rip), %xmm1    # 0x4e3494
mulss %xmm1, %xmm0
movss %xmm0, -0x68(%rbp)
movss -0x54(%rbp), %xmm0
movss -0x68(%rbp), %xmm1
movss 0xd9d1b(%rip), %xmm2    # 0x4e3490
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x6c(%rbp)
movss -0x60(%rbp), %xmm0
movss -0x68(%rbp), %xmm1
movss 0xd9cf8(%rip), %xmm2    # 0x4e348c
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x70(%rbp)
movss 0xd9cdf(%rip), %xmm0    # 0x4e3488
mulss -0x5c(%rbp), %xmm0
movss %xmm0, -0x74(%rbp)
movss -0x38(%rbp), %xmm0
addss -0x74(%rbp), %xmm0
movss %xmm0, -0x78(%rbp)
movss -0x38(%rbp), %xmm0
subss -0x74(%rbp), %xmm0
movss %xmm0, -0x7c(%rbp)
movss -0x7c(%rbp), %xmm0
addss -0x6c(%rbp), %xmm0
movq -0x30(%rbp), %rax
movss %xmm0, (%rax)
movss -0x7c(%rbp), %xmm0
subss -0x6c(%rbp), %xmm0
movq -0x20(%rbp), %rax
movss %xmm0, (%rax)
movss -0x78(%rbp), %xmm0
addss -0x70(%rbp), %xmm0
movq -0x10(%rbp), %rax
movss %xmm0, (%rax)
movss -0x78(%rbp), %xmm0
subss -0x70(%rbp), %xmm0
movq 0x18(%rbp), %rax
movss %xmm0, (%rax)
popq %rbp
retq
nopl (%rax,%rax)