// File: /workspace/github_cpp_makefile_star2_O2/tomfunkhouser[P]gaps/pkgs/jpeg/jfdctflt.c
// Function: jpeg_fdct_float
GLOBAL(void)
jpeg_fdct_float (FAST_FLOAT * data)
{
  FAST_FLOAT tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
  FAST_FLOAT tmp10, tmp11, tmp12, tmp13;
  FAST_FLOAT z1, z2, z3, z4, z5, z11, z13;
  FAST_FLOAT *dataptr;
  int ctr;

  /* Pass 1: process rows. */

  dataptr = data;
  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
    tmp0 = dataptr[0] + dataptr[7];
    tmp7 = dataptr[0] - dataptr[7];
    tmp1 = dataptr[1] + dataptr[6];
    tmp6 = dataptr[1] - dataptr[6];
    tmp2 = dataptr[2] + dataptr[5];
    tmp5 = dataptr[2] - dataptr[5];
    tmp3 = dataptr[3] + dataptr[4];
    tmp4 = dataptr[3] - dataptr[4];
    
    /* Even part */
    
    tmp10 = tmp0 + tmp3;	/* phase 2 */
    tmp13 = tmp0 - tmp3;
    tmp11 = tmp1 + tmp2;
    tmp12 = tmp1 - tmp2;
    
    dataptr[0] = tmp10 + tmp11; /* phase 3 */
    dataptr[4] = tmp10 - tmp11;
    
    z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */
    dataptr[2] = tmp13 + z1;	/* phase 5 */
    dataptr[6] = 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) * ((FAST_FLOAT) 0.382683433); /* c6 */
    z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */
    z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */
    z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */

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

    dataptr[5] = z13 + z2;	/* phase 6 */
    dataptr[3] = z13 - z2;
    dataptr[1] = z11 + z4;
    dataptr[7] = z11 - z4;

    dataptr += DCTSIZE;		/* advance pointer to next row */
  }

  /* Pass 2: process columns. */

  dataptr = data;
  for (ctr = DCTSIZE-1; ctr >= 0; ctr--) {
    tmp0 = dataptr[DCTSIZE*0] + dataptr[DCTSIZE*7];
    tmp7 = dataptr[DCTSIZE*0] - dataptr[DCTSIZE*7];
    tmp1 = dataptr[DCTSIZE*1] + dataptr[DCTSIZE*6];
    tmp6 = dataptr[DCTSIZE*1] - dataptr[DCTSIZE*6];
    tmp2 = dataptr[DCTSIZE*2] + dataptr[DCTSIZE*5];
    tmp5 = dataptr[DCTSIZE*2] - dataptr[DCTSIZE*5];
    tmp3 = dataptr[DCTSIZE*3] + dataptr[DCTSIZE*4];
    tmp4 = dataptr[DCTSIZE*3] - dataptr[DCTSIZE*4];
    
    /* Even part */
    
    tmp10 = tmp0 + tmp3;	/* phase 2 */
    tmp13 = tmp0 - tmp3;
    tmp11 = tmp1 + tmp2;
    tmp12 = tmp1 - tmp2;
    
    dataptr[DCTSIZE*0] = tmp10 + tmp11; /* phase 3 */
    dataptr[DCTSIZE*4] = tmp10 - tmp11;
    
    z1 = (tmp12 + tmp13) * ((FAST_FLOAT) 0.707106781); /* c4 */
    dataptr[DCTSIZE*2] = tmp13 + z1; /* phase 5 */
    dataptr[DCTSIZE*6] = 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) * ((FAST_FLOAT) 0.382683433); /* c6 */
    z2 = ((FAST_FLOAT) 0.541196100) * tmp10 + z5; /* c2-c6 */
    z4 = ((FAST_FLOAT) 1.306562965) * tmp12 + z5; /* c2+c6 */
    z3 = tmp11 * ((FAST_FLOAT) 0.707106781); /* c4 */

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

    dataptr[DCTSIZE*5] = z13 + z2; /* phase 6 */
    dataptr[DCTSIZE*3] = z13 - z2;
    dataptr[DCTSIZE*1] = z11 + z4;
    dataptr[DCTSIZE*7] = z11 - z4;

    dataptr++;			/* advance pointer to next column */
  }
}

// Assembly:
pushq $0x7
popq %rax
movss 0x2d079(%rip), %xmm0    # 0x9b520
movss 0x2d075(%rip), %xmm1    # 0x9b524
movss 0x2d071(%rip), %xmm2    # 0x9b528
movss 0x2d06d(%rip), %xmm3    # 0x9b52c
movq %rdi, %rcx
testl %eax, %eax
js 0x6e5f5
movss 0x1c(%rcx), %xmm6
movss (%rcx), %xmm5
movss 0x4(%rcx), %xmm4
movaps %xmm5, %xmm8
addss %xmm6, %xmm8
subss %xmm6, %xmm5
movss 0x18(%rcx), %xmm6
movaps %xmm4, %xmm9
addss %xmm6, %xmm9
subss %xmm6, %xmm4
movss 0x8(%rcx), %xmm6
movss 0x14(%rcx), %xmm7
movaps %xmm6, %xmm10
addss %xmm7, %xmm10
subss %xmm7, %xmm6
movss 0xc(%rcx), %xmm7
movss 0x10(%rcx), %xmm11
movaps %xmm7, %xmm12
addss %xmm11, %xmm12
subss %xmm11, %xmm7
movaps %xmm8, %xmm11
addss %xmm12, %xmm11
subss %xmm12, %xmm8
movaps %xmm9, %xmm12
addss %xmm10, %xmm12
subss %xmm10, %xmm9
movaps %xmm12, %xmm10
addss %xmm11, %xmm10
movss %xmm10, (%rcx)
subss %xmm12, %xmm11
movss %xmm11, 0x10(%rcx)
addss %xmm8, %xmm9
mulss %xmm0, %xmm9
movaps %xmm8, %xmm10
addss %xmm9, %xmm10
movss %xmm10, 0x8(%rcx)
subss %xmm9, %xmm8
movss %xmm8, 0x18(%rcx)
addss %xmm6, %xmm7
addss %xmm4, %xmm6
addss %xmm5, %xmm4
movaps %xmm7, %xmm8
subss %xmm4, %xmm8
mulss %xmm1, %xmm8
mulss %xmm2, %xmm7
addss %xmm8, %xmm7
mulss %xmm3, %xmm4
addss %xmm8, %xmm4
mulss %xmm0, %xmm6
movaps %xmm5, %xmm8
addss %xmm6, %xmm8
subss %xmm6, %xmm5
movaps %xmm5, %xmm6
addss %xmm7, %xmm6
movss %xmm6, 0x14(%rcx)
subss %xmm7, %xmm5
movss %xmm5, 0xc(%rcx)
movaps %xmm8, %xmm5
addss %xmm4, %xmm5
movss %xmm5, 0x4(%rcx)
subss %xmm4, %xmm8
movss %xmm8, 0x1c(%rcx)
addq $0x20, %rcx
decl %eax
jmp 0x6e4c2
pushq $0x7
popq %rax
testl %eax, %eax
js 0x6e743
movss 0xe0(%rdi), %xmm6
movss (%rdi), %xmm5
movss 0x20(%rdi), %xmm4
movaps %xmm5, %xmm8
addss %xmm6, %xmm8
subss %xmm6, %xmm5
movss 0xc0(%rdi), %xmm6
movaps %xmm4, %xmm9
addss %xmm6, %xmm9
subss %xmm6, %xmm4
movss 0x40(%rdi), %xmm6
movss 0xa0(%rdi), %xmm7
movaps %xmm6, %xmm10
addss %xmm7, %xmm10
subss %xmm7, %xmm6
movss 0x60(%rdi), %xmm7
movss 0x80(%rdi), %xmm11
movaps %xmm7, %xmm12
addss %xmm11, %xmm12
subss %xmm11, %xmm7
movaps %xmm8, %xmm11
addss %xmm12, %xmm11
subss %xmm12, %xmm8
movaps %xmm9, %xmm12
addss %xmm10, %xmm12
subss %xmm10, %xmm9
movaps %xmm12, %xmm10
addss %xmm11, %xmm10
movss %xmm10, (%rdi)
subss %xmm12, %xmm11
movss %xmm11, 0x80(%rdi)
addss %xmm8, %xmm9
mulss %xmm0, %xmm9
movaps %xmm8, %xmm10
addss %xmm9, %xmm10
movss %xmm10, 0x40(%rdi)
subss %xmm9, %xmm8
movss %xmm8, 0xc0(%rdi)
addss %xmm6, %xmm7
addss %xmm4, %xmm6
addss %xmm5, %xmm4
movaps %xmm7, %xmm8
subss %xmm4, %xmm8
mulss %xmm1, %xmm8
mulss %xmm2, %xmm7
addss %xmm8, %xmm7
mulss %xmm3, %xmm4
addss %xmm8, %xmm4
mulss %xmm0, %xmm6
movaps %xmm5, %xmm8
addss %xmm6, %xmm8
subss %xmm6, %xmm5
movaps %xmm5, %xmm6
addss %xmm7, %xmm6
movss %xmm6, 0xa0(%rdi)
subss %xmm7, %xmm5
movss %xmm5, 0x60(%rdi)
movaps %xmm8, %xmm5
addss %xmm4, %xmm5
movss %xmm5, 0x20(%rdi)
subss %xmm4, %xmm8
movss %xmm8, 0xe0(%rdi)
addq $0x4, %rdi
decl %eax
jmp 0x6e5f8
retq