// File: /workspace/github_cpp_makefile_star2_O2/alan0201tw[P]RayTracer/include/stb_image.h
// Function: stbi__idct_simd(unsigned char*, int, short*)
static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64])
{
   // This is constructed to match our regular (generic) integer IDCT exactly.
   __m128i row0, row1, row2, row3, row4, row5, row6, row7;
   __m128i tmp;

   // dot product constant: even elems=x, odd elems=y
   #define dct_const(x,y)  _mm_setr_epi16((x),(y),(x),(y),(x),(y),(x),(y))

   // out(0) = c0[even]*x + c0[odd]*y   (c0, x, y 16-bit, out 32-bit)
   // out(1) = c1[even]*x + c1[odd]*y
   #define dct_rot(out0,out1, x,y,c0,c1) \
      __m128i c0##lo = _mm_unpacklo_epi16((x),(y)); \
      __m128i c0##hi = _mm_unpackhi_epi16((x),(y)); \
      __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \
      __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \
      __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \
      __m128i out1##_h = _mm_madd_epi16(c0##hi, c1)

   // out = in << 12  (in 16-bit, out 32-bit)
   #define dct_widen(out, in) \
      __m128i out##_l = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \
      __m128i out##_h = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4)

   // wide add
   #define dct_wadd(out, a, b) \
      __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \
      __m128i out##_h = _mm_add_epi32(a##_h, b##_h)

   // wide sub
   #define dct_wsub(out, a, b) \
      __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \
      __m128i out##_h = _mm_sub_epi32(a##_h, b##_h)

   // butterfly a/b, add bias, then shift by "s" and pack
   #define dct_bfly32o(out0, out1, a,b,bias,s) \
      { \
         __m128i abiased_l = _mm_add_epi32(a##_l, bias); \
         __m128i abiased_h = _mm_add_epi32(a##_h, bias); \
         dct_wadd(sum, abiased, b); \
         dct_wsub(dif, abiased, b); \
         out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \
         out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \
      }

   // 8-bit interleave step (for transposes)
   #define dct_interleave8(a, b) \
      tmp = a; \
      a = _mm_unpacklo_epi8(a, b); \
      b = _mm_unpackhi_epi8(tmp, b)

   // 16-bit interleave step (for transposes)
   #define dct_interleave16(a, b) \
      tmp = a; \
      a = _mm_unpacklo_epi16(a, b); \
      b = _mm_unpackhi_epi16(tmp, b)

   #define dct_pass(bias,shift) \
      { \
         /* even part */ \
         dct_rot(t2e,t3e, row2,row6, rot0_0,rot0_1); \
         __m128i sum04 = _mm_add_epi16(row0, row4); \
         __m128i dif04 = _mm_sub_epi16(row0, row4); \
         dct_widen(t0e, sum04); \
         dct_widen(t1e, dif04); \
         dct_wadd(x0, t0e, t3e); \
         dct_wsub(x3, t0e, t3e); \
         dct_wadd(x1, t1e, t2e); \
         dct_wsub(x2, t1e, t2e); \
         /* odd part */ \
         dct_rot(y0o,y2o, row7,row3, rot2_0,rot2_1); \
         dct_rot(y1o,y3o, row5,row1, rot3_0,rot3_1); \
         __m128i sum17 = _mm_add_epi16(row1, row7); \
         __m128i sum35 = _mm_add_epi16(row3, row5); \
         dct_rot(y4o,y5o, sum17,sum35, rot1_0,rot1_1); \
         dct_wadd(x4, y0o, y4o); \
         dct_wadd(x5, y1o, y5o); \
         dct_wadd(x6, y2o, y5o); \
         dct_wadd(x7, y3o, y4o); \
         dct_bfly32o(row0,row7, x0,x7,bias,shift); \
         dct_bfly32o(row1,row6, x1,x6,bias,shift); \
         dct_bfly32o(row2,row5, x2,x5,bias,shift); \
         dct_bfly32o(row3,row4, x3,x4,bias,shift); \
      }

// Assembly:
movdqa (%rdx), %xmm2
movdqa 0x10(%rdx), %xmm3
movdqa 0x20(%rdx), %xmm15
movdqa 0x30(%rdx), %xmm10
movdqa 0x40(%rdx), %xmm0
movdqa 0x50(%rdx), %xmm9
movdqa 0x60(%rdx), %xmm1
movdqa 0x70(%rdx), %xmm4
movdqa %xmm15, %xmm12
punpcklwd %xmm1, %xmm12   # xmm12 = xmm12[0],xmm1[0],xmm12[1],xmm1[1],xmm12[2],xmm1[2],xmm12[3],xmm1[3]
punpckhwd %xmm1, %xmm15   # xmm15 = xmm15[4],xmm1[4],xmm15[5],xmm1[5],xmm15[6],xmm1[6],xmm15[7],xmm1[7]
movdqa %xmm0, %xmm5
paddw %xmm2, %xmm5
psubw %xmm0, %xmm2
pxor %xmm1, %xmm1
punpcklwd %xmm5, %xmm1    # xmm1 = xmm1[0],xmm5[0],xmm1[1],xmm5[1],xmm1[2],xmm5[2],xmm1[3],xmm5[3]
pxor %xmm6, %xmm6
punpckhwd %xmm5, %xmm6    # xmm6 = xmm6[4],xmm5[4],xmm6[5],xmm5[5],xmm6[6],xmm5[6],xmm6[7],xmm5[7]
pxor %xmm5, %xmm5
punpcklwd %xmm2, %xmm5    # xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1],xmm5[2],xmm2[2],xmm5[3],xmm2[3]
pxor %xmm0, %xmm0
punpckhwd %xmm2, %xmm0    # xmm0 = xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
movdqa %xmm4, %xmm14
punpcklwd %xmm10, %xmm14  # xmm14 = xmm14[0],xmm10[0],xmm14[1],xmm10[1],xmm14[2],xmm10[2],xmm14[3],xmm10[3]
movdqa %xmm4, %xmm11
punpckhwd %xmm10, %xmm11  # xmm11 = xmm11[4],xmm10[4],xmm11[5],xmm10[5],xmm11[6],xmm10[6],xmm11[7],xmm10[7]
movdqa %xmm14, -0x48(%rsp)
pmaddwd 0x982b(%rip), %xmm14    # 0x31470
movdqa %xmm9, %xmm2
punpcklwd %xmm3, %xmm2    # xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3]
movdqa %xmm9, %xmm8
punpckhwd %xmm3, %xmm8    # xmm8 = xmm8[4],xmm3[4],xmm8[5],xmm3[5],xmm8[6],xmm3[6],xmm8[7],xmm3[7]
paddw %xmm3, %xmm4
paddw %xmm10, %xmm9
movdqa %xmm4, %xmm10
punpcklwd %xmm9, %xmm10   # xmm10 = xmm10[0],xmm9[0],xmm10[1],xmm9[1],xmm10[2],xmm9[2],xmm10[3],xmm9[3]
punpckhwd %xmm9, %xmm4    # xmm4 = xmm4[4],xmm9[4],xmm4[5],xmm9[5],xmm4[6],xmm9[6],xmm4[7],xmm9[7]
movdqa %xmm2, %xmm7
pmaddwd 0x9804(%rip), %xmm7     # 0x31480
movdqa %xmm10, %xmm9
movdqa 0x9827(%rip), %xmm3     # 0x314b0
pmaddwd %xmm3, %xmm10
movdqa %xmm3, %xmm13
paddd %xmm10, %xmm7
movdqa %xmm7, -0x28(%rsp)
paddd %xmm14, %xmm10
movdqa %xmm11, -0x58(%rsp)
pmaddwd 0x97bd(%rip), %xmm11    # 0x31470
movdqa %xmm8, %xmm7
pmaddwd 0x97c0(%rip), %xmm7     # 0x31480
movdqa %xmm4, %xmm3
pmaddwd %xmm13, %xmm4
paddd %xmm4, %xmm7
movdqa %xmm7, -0x38(%rsp)
paddd %xmm11, %xmm4
movdqa 0x977f(%rip), %xmm13    # 0x31460
movdqa -0x48(%rsp), %xmm14
pmaddwd %xmm13, %xmm14
movdqa 0x979a(%rip), %xmm11    # 0x31490
pmaddwd %xmm11, %xmm2
movdqa 0x979d(%rip), %xmm7     # 0x314a0
pmaddwd %xmm7, %xmm9
paddd %xmm9, %xmm14
movdqa %xmm14, -0x48(%rsp)
paddd %xmm2, %xmm9
movdqa -0x58(%rsp), %xmm2
pmaddwd %xmm13, %xmm2
pmaddwd %xmm11, %xmm8
pmaddwd %xmm7, %xmm3
paddd %xmm3, %xmm2
movdqa %xmm2, -0x58(%rsp)
paddd %xmm8, %xmm3
movdqa %xmm12, %xmm13
movdqa 0x9707(%rip), %xmm2     # 0x31450
pmaddwd %xmm2, %xmm12
psrad $0x4, %xmm1
movdqa %xmm1, %xmm7
psubd %xmm12, %xmm7
movdqa 0x975b(%rip), %xmm11    # 0x314c0
paddd %xmm11, %xmm1
paddd %xmm12, %xmm1
movdqa %xmm15, %xmm12
pmaddwd %xmm2, %xmm15
psrad $0x4, %xmm6
movdqa %xmm6, %xmm2
psubd %xmm15, %xmm2
paddd %xmm11, %xmm6
paddd %xmm15, %xmm6
movdqa %xmm9, %xmm14
paddd %xmm1, %xmm14
psubd %xmm9, %xmm1
movdqa %xmm3, %xmm8
paddd %xmm6, %xmm8
psubd %xmm3, %xmm6
psrad $0xa, %xmm14
psrad $0xa, %xmm8
packssdw %xmm8, %xmm14
psrad $0xa, %xmm1
psrad $0xa, %xmm6
packssdw %xmm6, %xmm1
movdqa 0x966b(%rip), %xmm3     # 0x31440
pmaddwd %xmm3, %xmm13
psrad $0x4, %xmm5
movdqa %xmm5, %xmm9
psubd %xmm13, %xmm9
paddd %xmm11, %xmm5
paddd %xmm13, %xmm5
pmaddwd %xmm3, %xmm12
psrad $0x4, %xmm0
movdqa %xmm0, %xmm13
psubd %xmm12, %xmm13
paddd %xmm11, %xmm0
paddd %xmm12, %xmm0
movdqa %xmm10, %xmm15
paddd %xmm5, %xmm15
psubd %xmm10, %xmm5
movdqa %xmm4, %xmm3
paddd %xmm0, %xmm3
psubd %xmm4, %xmm0
psrad $0xa, %xmm15
psrad $0xa, %xmm3
packssdw %xmm3, %xmm15
psrad $0xa, %xmm5
psrad $0xa, %xmm0
packssdw %xmm0, %xmm5
paddd %xmm11, %xmm9
movdqa -0x28(%rsp), %xmm0
movdqa %xmm0, %xmm10
paddd %xmm9, %xmm10
psubd %xmm0, %xmm9
paddd %xmm11, %xmm13
movdqa -0x38(%rsp), %xmm3
movdqa %xmm3, %xmm0
paddd %xmm13, %xmm0
psubd %xmm3, %xmm13
psrad $0xa, %xmm10
psrad $0xa, %xmm0
packssdw %xmm0, %xmm10
psrad $0xa, %xmm9
psrad $0xa, %xmm13
packssdw %xmm13, %xmm9
paddd %xmm11, %xmm7
paddd %xmm11, %xmm2
movdqa -0x48(%rsp), %xmm0
movdqa %xmm0, %xmm3
paddd %xmm7, %xmm3
psubd %xmm0, %xmm7
movdqa -0x58(%rsp), %xmm4
movdqa %xmm4, %xmm0
paddd %xmm2, %xmm0
psubd %xmm4, %xmm2
psrad $0xa, %xmm3
psrad $0xa, %xmm0
packssdw %xmm0, %xmm3
psrad $0xa, %xmm7
psrad $0xa, %xmm2
packssdw %xmm2, %xmm7
movdqa %xmm14, %xmm2
punpcklwd %xmm7, %xmm2    # xmm2 = xmm2[0],xmm7[0],xmm2[1],xmm7[1],xmm2[2],xmm7[2],xmm2[3],xmm7[3]
punpckhwd %xmm7, %xmm14   # xmm14 = xmm14[4],xmm7[4],xmm14[5],xmm7[5],xmm14[6],xmm7[6],xmm14[7],xmm7[7]
movdqa %xmm15, %xmm0
punpcklwd %xmm9, %xmm0    # xmm0 = xmm0[0],xmm9[0],xmm0[1],xmm9[1],xmm0[2],xmm9[2],xmm0[3],xmm9[3]
punpckhwd %xmm9, %xmm15   # xmm15 = xmm15[4],xmm9[4],xmm15[5],xmm9[5],xmm15[6],xmm9[6],xmm15[7],xmm9[7]
movdqa %xmm10, %xmm4
punpcklwd %xmm5, %xmm4    # xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1],xmm4[2],xmm5[2],xmm4[3],xmm5[3]
punpckhwd %xmm5, %xmm10   # xmm10 = xmm10[4],xmm5[4],xmm10[5],xmm5[5],xmm10[6],xmm5[6],xmm10[7],xmm5[7]
movdqa %xmm3, %xmm6
punpcklwd %xmm1, %xmm6    # xmm6 = xmm6[0],xmm1[0],xmm6[1],xmm1[1],xmm6[2],xmm1[2],xmm6[3],xmm1[3]
punpckhwd %xmm1, %xmm3    # xmm3 = xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]
movdqa %xmm2, %xmm5
punpcklwd %xmm4, %xmm5    # xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1],xmm5[2],xmm4[2],xmm5[3],xmm4[3]
punpckhwd %xmm4, %xmm2    # xmm2 = xmm2[4],xmm4[4],xmm2[5],xmm4[5],xmm2[6],xmm4[6],xmm2[7],xmm4[7]
movdqa %xmm0, %xmm4
punpcklwd %xmm6, %xmm4    # xmm4 = xmm4[0],xmm6[0],xmm4[1],xmm6[1],xmm4[2],xmm6[2],xmm4[3],xmm6[3]
punpckhwd %xmm6, %xmm0    # xmm0 = xmm0[4],xmm6[4],xmm0[5],xmm6[5],xmm0[6],xmm6[6],xmm0[7],xmm6[7]
movdqa %xmm14, %xmm8
punpcklwd %xmm10, %xmm8   # xmm8 = xmm8[0],xmm10[0],xmm8[1],xmm10[1],xmm8[2],xmm10[2],xmm8[3],xmm10[3]
punpckhwd %xmm10, %xmm14  # xmm14 = xmm14[4],xmm10[4],xmm14[5],xmm10[5],xmm14[6],xmm10[6],xmm14[7],xmm10[7]
movdqa %xmm15, %xmm6
punpcklwd %xmm3, %xmm6    # xmm6 = xmm6[0],xmm3[0],xmm6[1],xmm3[1],xmm6[2],xmm3[2],xmm6[3],xmm3[3]
punpckhwd %xmm3, %xmm15   # xmm15 = xmm15[4],xmm3[4],xmm15[5],xmm3[5],xmm15[6],xmm3[6],xmm15[7],xmm3[7]
movdqa %xmm5, %xmm1
punpcklwd %xmm4, %xmm1    # xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3]
punpckhwd %xmm4, %xmm5    # xmm5 = xmm5[4],xmm4[4],xmm5[5],xmm4[5],xmm5[6],xmm4[6],xmm5[7],xmm4[7]
movdqa %xmm2, %xmm4
punpcklwd %xmm0, %xmm4    # xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1],xmm4[2],xmm0[2],xmm4[3],xmm0[3]
punpckhwd %xmm0, %xmm2    # xmm2 = xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
movdqa %xmm8, %xmm0
punpcklwd %xmm6, %xmm0    # xmm0 = xmm0[0],xmm6[0],xmm0[1],xmm6[1],xmm0[2],xmm6[2],xmm0[3],xmm6[3]
punpckhwd %xmm6, %xmm8    # xmm8 = xmm8[4],xmm6[4],xmm8[5],xmm6[5],xmm8[6],xmm6[6],xmm8[7],xmm6[7]
movdqa %xmm14, %xmm3
punpcklwd %xmm15, %xmm3   # xmm3 = xmm3[0],xmm15[0],xmm3[1],xmm15[1],xmm3[2],xmm15[2],xmm3[3],xmm15[3]
punpckhwd %xmm15, %xmm14  # xmm14 = xmm14[4],xmm15[4],xmm14[5],xmm15[5],xmm14[6],xmm15[6],xmm14[7],xmm15[7]
movdqa %xmm4, %xmm13
punpcklwd %xmm3, %xmm13   # xmm13 = xmm13[0],xmm3[0],xmm13[1],xmm3[1],xmm13[2],xmm3[2],xmm13[3],xmm3[3]
punpckhwd %xmm3, %xmm4    # xmm4 = xmm4[4],xmm3[4],xmm4[5],xmm3[5],xmm4[6],xmm3[6],xmm4[7],xmm3[7]
movdqa %xmm13, %xmm6
movdqa 0x949c(%rip), %xmm3     # 0x31440
pmaddwd %xmm3, %xmm6
movdqa %xmm6, -0x38(%rsp)
pmaddwd %xmm4, %xmm3
movdqa %xmm3, -0x28(%rsp)
movdqa 0x9490(%rip), %xmm3     # 0x31450
pmaddwd %xmm3, %xmm13
pmaddwd %xmm3, %xmm4
movdqa %xmm1, %xmm3
paddw %xmm0, %xmm3
psubw %xmm0, %xmm1
pxor %xmm10, %xmm10
punpcklwd %xmm3, %xmm10   # xmm10 = xmm10[0],xmm3[0],xmm10[1],xmm3[1],xmm10[2],xmm3[2],xmm10[3],xmm3[3]
pxor %xmm15, %xmm15
punpckhwd %xmm3, %xmm15   # xmm15 = xmm15[4],xmm3[4],xmm15[5],xmm3[5],xmm15[6],xmm3[6],xmm15[7],xmm3[7]
pxor %xmm3, %xmm3
punpcklwd %xmm1, %xmm3    # xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
pxor %xmm11, %xmm11
punpckhwd %xmm1, %xmm11   # xmm11 = xmm11[4],xmm1[4],xmm11[5],xmm1[5],xmm11[6],xmm1[6],xmm11[7],xmm1[7]
movdqa %xmm14, %xmm1
punpcklwd %xmm2, %xmm1    # xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
movdqa %xmm14, %xmm12
punpckhwd %xmm2, %xmm12   # xmm12 = xmm12[4],xmm2[4],xmm12[5],xmm2[5],xmm12[6],xmm2[6],xmm12[7],xmm2[7]
movdqa %xmm1, %xmm6
movdqa 0x9446(%rip), %xmm0     # 0x31460
pmaddwd %xmm0, %xmm6
movdqa %xmm6, -0x58(%rsp)
pmaddwd %xmm12, %xmm0
movdqa %xmm0, -0x48(%rsp)
movdqa 0x9439(%rip), %xmm0     # 0x31470
pmaddwd %xmm0, %xmm1
pmaddwd %xmm0, %xmm12
movdqa %xmm8, %xmm0
punpcklwd %xmm5, %xmm0    # xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1],xmm0[2],xmm5[2],xmm0[3],xmm5[3]
paddw %xmm8, %xmm2
punpckhwd %xmm5, %xmm8    # xmm8 = xmm8[4],xmm5[4],xmm8[5],xmm5[5],xmm8[6],xmm5[6],xmm8[7],xmm5[7]
movdqa %xmm0, %xmm9
movdqa 0x9420(%rip), %xmm6     # 0x31480
pmaddwd %xmm6, %xmm9
pmaddwd %xmm8, %xmm6
movdqa %xmm6, -0x18(%rsp)
movdqa 0x9418(%rip), %xmm6     # 0x31490
pmaddwd %xmm6, %xmm0
pmaddwd %xmm6, %xmm8
paddw %xmm5, %xmm14
movdqa %xmm14, %xmm7
punpcklwd %xmm2, %xmm7    # xmm7 = xmm7[0],xmm2[0],xmm7[1],xmm2[1],xmm7[2],xmm2[2],xmm7[3],xmm2[3]
punpckhwd %xmm2, %xmm14   # xmm14 = xmm14[4],xmm2[4],xmm14[5],xmm2[5],xmm14[6],xmm2[6],xmm14[7],xmm2[7]
movdqa %xmm7, %xmm5
movdqa 0x9400(%rip), %xmm2     # 0x314a0
pmaddwd %xmm2, %xmm5
pmaddwd %xmm14, %xmm2
movdqa 0x93ff(%rip), %xmm6     # 0x314b0
pmaddwd %xmm6, %xmm7
pmaddwd %xmm6, %xmm14
paddd %xmm7, %xmm9
paddd %xmm1, %xmm7
movdqa -0x18(%rsp), %xmm6
paddd %xmm14, %xmm6
paddd %xmm12, %xmm14
movdqa -0x58(%rsp), %xmm1
paddd %xmm5, %xmm1
movdqa %xmm1, -0x58(%rsp)
paddd %xmm0, %xmm5
movdqa -0x48(%rsp), %xmm0
paddd %xmm2, %xmm0
movdqa %xmm0, -0x48(%rsp)
paddd %xmm8, %xmm2
psrad $0x4, %xmm10
movdqa %xmm10, %xmm0
psubd %xmm13, %xmm0
movdqa 0x93bb(%rip), %xmm8     # 0x314d0
paddd %xmm8, %xmm10
paddd %xmm13, %xmm10
psrad $0x4, %xmm15
movdqa %xmm15, %xmm12
psubd %xmm4, %xmm12
paddd %xmm8, %xmm15
paddd %xmm4, %xmm15
movdqa %xmm5, %xmm4
paddd %xmm10, %xmm4
psubd %xmm5, %xmm10
movdqa %xmm2, %xmm1
paddd %xmm15, %xmm1
psubd %xmm2, %xmm15
psrad $0x11, %xmm4
psrad $0x11, %xmm1
packssdw %xmm1, %xmm4
psrad $0x4, %xmm3
psrad $0x4, %xmm11
psrad $0x11, %xmm10
psrad $0x11, %xmm15
packssdw %xmm15, %xmm10
movdqa %xmm3, %xmm5
movdqa -0x38(%rsp), %xmm1
psubd %xmm1, %xmm5
paddd %xmm8, %xmm3
paddd %xmm1, %xmm3
movdqa %xmm11, %xmm13
movdqa -0x28(%rsp), %xmm1
psubd %xmm1, %xmm13
paddd %xmm8, %xmm11
paddd %xmm1, %xmm11
movdqa %xmm7, %xmm1
paddd %xmm3, %xmm1
psubd %xmm7, %xmm3
movdqa %xmm14, %xmm7
paddd %xmm11, %xmm7
psubd %xmm14, %xmm11
psrad $0x11, %xmm1
psrad $0x11, %xmm7
packssdw %xmm7, %xmm1
packuswb %xmm1, %xmm4
psrad $0x11, %xmm3
psrad $0x11, %xmm11
packssdw %xmm11, %xmm3
packuswb %xmm10, %xmm3
paddd %xmm8, %xmm5
paddd %xmm8, %xmm13
movdqa %xmm9, %xmm1
paddd %xmm5, %xmm1
psubd %xmm9, %xmm5
movdqa %xmm6, %xmm2
paddd %xmm13, %xmm6
psubd %xmm2, %xmm13
psrad $0x11, %xmm1
psrad $0x11, %xmm6
packssdw %xmm6, %xmm1
psrad $0x11, %xmm5
psrad $0x11, %xmm13
packssdw %xmm13, %xmm5
paddd %xmm8, %xmm0
paddd %xmm8, %xmm12
movdqa -0x58(%rsp), %xmm6
movdqa %xmm6, %xmm2
paddd %xmm0, %xmm2
psubd %xmm6, %xmm0
movdqa -0x48(%rsp), %xmm7
movdqa %xmm7, %xmm6
paddd %xmm12, %xmm6
psubd %xmm7, %xmm12
psrad $0x11, %xmm2
psrad $0x11, %xmm6
packssdw %xmm6, %xmm2
packuswb %xmm2, %xmm1
psrad $0x11, %xmm0
psrad $0x11, %xmm12
packssdw %xmm12, %xmm0
packuswb %xmm5, %xmm0
movdqa %xmm4, %xmm2
punpcklbw %xmm0, %xmm2    # xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
punpckhbw %xmm0, %xmm4    # xmm4 = xmm4[8],xmm0[8],xmm4[9],xmm0[9],xmm4[10],xmm0[10],xmm4[11],xmm0[11],xmm4[12],xmm0[12],xmm4[13],xmm0[13],xmm4[14],xmm0[14],xmm4[15],xmm0[15]
movdqa %xmm1, %xmm0
punpcklbw %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
punpckhbw %xmm3, %xmm1    # xmm1 = xmm1[8],xmm3[8],xmm1[9],xmm3[9],xmm1[10],xmm3[10],xmm1[11],xmm3[11],xmm1[12],xmm3[12],xmm1[13],xmm3[13],xmm1[14],xmm3[14],xmm1[15],xmm3[15]
movdqa %xmm2, %xmm3
punpcklbw %xmm0, %xmm3    # xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7]
punpckhbw %xmm0, %xmm2    # xmm2 = xmm2[8],xmm0[8],xmm2[9],xmm0[9],xmm2[10],xmm0[10],xmm2[11],xmm0[11],xmm2[12],xmm0[12],xmm2[13],xmm0[13],xmm2[14],xmm0[14],xmm2[15],xmm0[15]
movdqa %xmm4, %xmm0
punpcklbw %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
punpckhbw %xmm1, %xmm4    # xmm4 = xmm4[8],xmm1[8],xmm4[9],xmm1[9],xmm4[10],xmm1[10],xmm4[11],xmm1[11],xmm4[12],xmm1[12],xmm4[13],xmm1[13],xmm4[14],xmm1[14],xmm4[15],xmm1[15]
movdqa %xmm3, %xmm1
punpcklbw %xmm0, %xmm1    # xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
punpckhbw %xmm0, %xmm3    # xmm3 = xmm3[8],xmm0[8],xmm3[9],xmm0[9],xmm3[10],xmm0[10],xmm3[11],xmm0[11],xmm3[12],xmm0[12],xmm3[13],xmm0[13],xmm3[14],xmm0[14],xmm3[15],xmm0[15]
movdqa %xmm2, %xmm0
punpcklbw %xmm4, %xmm0    # xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
punpckhbw %xmm4, %xmm2    # xmm2 = xmm2[8],xmm4[8],xmm2[9],xmm4[9],xmm2[10],xmm4[10],xmm2[11],xmm4[11],xmm2[12],xmm4[12],xmm2[13],xmm4[13],xmm2[14],xmm4[14],xmm2[15],xmm4[15]
movq %xmm1, (%rdi)
movslq %esi, %rax
pshufd $0xee, %xmm1, %xmm1     # xmm1 = xmm1[2,3,2,3]
movq %xmm1, (%rdi,%rax)
addq %rax, %rdi
movq %xmm3, (%rax,%rdi)
addq %rax, %rdi
pshufd $0xee, %xmm3, %xmm1     # xmm1 = xmm3[2,3,2,3]
movq %xmm1, (%rax,%rdi)
addq %rax, %rdi
movq %xmm0, (%rax,%rdi)
addq %rax, %rdi
pshufd $0xee, %xmm0, %xmm0     # xmm0 = xmm0[2,3,2,3]
movq %xmm0, (%rax,%rdi)
addq %rax, %rdi
movq %xmm2, (%rax,%rdi)
addq %rax, %rdi
pshufd $0xee, %xmm2, %xmm0     # xmm0 = xmm2[2,3,2,3]
movq %xmm0, (%rax,%rdi)
retq