shun-iwasawa 82a8f5
/*
shun-iwasawa 82a8f5
 * AltiVec optimizations for libjpeg-turbo
shun-iwasawa 82a8f5
 *
shun-iwasawa 82a8f5
 * Copyright (C) 2014-2015, 2020, D. R. Commander.  All Rights Reserved.
shun-iwasawa 82a8f5
 *
shun-iwasawa 82a8f5
 * This software is provided 'as-is', without any express or implied
shun-iwasawa 82a8f5
 * warranty.  In no event will the authors be held liable for any damages
shun-iwasawa 82a8f5
 * arising from the use of this software.
shun-iwasawa 82a8f5
 *
shun-iwasawa 82a8f5
 * Permission is granted to anyone to use this software for any purpose,
shun-iwasawa 82a8f5
 * including commercial applications, and to alter it and redistribute it
shun-iwasawa 82a8f5
 * freely, subject to the following restrictions:
shun-iwasawa 82a8f5
 *
shun-iwasawa 82a8f5
 * 1. The origin of this software must not be misrepresented; you must not
shun-iwasawa 82a8f5
 *    claim that you wrote the original software. If you use this software
shun-iwasawa 82a8f5
 *    in a product, an acknowledgment in the product documentation would be
shun-iwasawa 82a8f5
 *    appreciated but is not required.
shun-iwasawa 82a8f5
 * 2. Altered source versions must be plainly marked as such, and must not be
shun-iwasawa 82a8f5
 *    misrepresented as being the original software.
shun-iwasawa 82a8f5
 * 3. This notice may not be removed or altered from any source distribution.
shun-iwasawa 82a8f5
 */
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
/* ACCURATE INTEGER INVERSE DCT */
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
#include "jsimd_altivec.h"
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
#define F_0_298  2446   /* FIX(0.298631336) */
shun-iwasawa 82a8f5
#define F_0_390  3196   /* FIX(0.390180644) */
shun-iwasawa 82a8f5
#define F_0_541  4433   /* FIX(0.541196100) */
shun-iwasawa 82a8f5
#define F_0_765  6270   /* FIX(0.765366865) */
shun-iwasawa 82a8f5
#define F_0_899  7373   /* FIX(0.899976223) */
shun-iwasawa 82a8f5
#define F_1_175  9633   /* FIX(1.175875602) */
shun-iwasawa 82a8f5
#define F_1_501  12299  /* FIX(1.501321110) */
shun-iwasawa 82a8f5
#define F_1_847  15137  /* FIX(1.847759065) */
shun-iwasawa 82a8f5
#define F_1_961  16069  /* FIX(1.961570560) */
shun-iwasawa 82a8f5
#define F_2_053  16819  /* FIX(2.053119869) */
shun-iwasawa 82a8f5
#define F_2_562  20995  /* FIX(2.562915447) */
shun-iwasawa 82a8f5
#define F_3_072  25172  /* FIX(3.072711026) */
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
#define CONST_BITS  13
shun-iwasawa 82a8f5
#define PASS1_BITS  2
shun-iwasawa 82a8f5
#define DESCALE_P1  (CONST_BITS - PASS1_BITS)
shun-iwasawa 82a8f5
#define DESCALE_P2  (CONST_BITS + PASS1_BITS + 3)
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
#define DO_IDCT(in, PASS) { \
shun-iwasawa 82a8f5
  /* Even part \
shun-iwasawa 82a8f5
   * \
shun-iwasawa 82a8f5
   * (Original) \
shun-iwasawa 82a8f5
   * z1 = (z2 + z3) * 0.541196100; \
shun-iwasawa 82a8f5
   * tmp2 = z1 + z3 * -1.847759065; \
shun-iwasawa 82a8f5
   * tmp3 = z1 + z2 * 0.765366865; \
shun-iwasawa 82a8f5
   * \
shun-iwasawa 82a8f5
   * (This implementation) \
shun-iwasawa 82a8f5
   * tmp2 = z2 * 0.541196100 + z3 * (0.541196100 - 1.847759065); \
shun-iwasawa 82a8f5
   * tmp3 = z2 * (0.541196100 + 0.765366865) + z3 * 0.541196100; \
shun-iwasawa 82a8f5
   */ \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  in##26l = vec_mergeh(in##2, in##6); \
shun-iwasawa 82a8f5
  in##26h = vec_mergel(in##2, in##6); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  tmp3l = vec_msums(in##26l, pw_f130_f054, pd_zero); \
shun-iwasawa 82a8f5
  tmp3h = vec_msums(in##26h, pw_f130_f054, pd_zero); \
shun-iwasawa 82a8f5
  tmp2l = vec_msums(in##26l, pw_f054_mf130, pd_zero); \
shun-iwasawa 82a8f5
  tmp2h = vec_msums(in##26h, pw_f054_mf130, pd_zero); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  tmp0 = vec_add(in##0, in##4); \
shun-iwasawa 82a8f5
  tmp1 = vec_sub(in##0, in##4); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  tmp0l = vec_unpackh(tmp0); \
shun-iwasawa 82a8f5
  tmp0h = vec_unpackl(tmp0); \
shun-iwasawa 82a8f5
  tmp0l = vec_sl(tmp0l, const_bits); \
shun-iwasawa 82a8f5
  tmp0h = vec_sl(tmp0h, const_bits); \
shun-iwasawa 82a8f5
  tmp0l = vec_add(tmp0l, pd_descale_p##PASS); \
shun-iwasawa 82a8f5
  tmp0h = vec_add(tmp0h, pd_descale_p##PASS); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  tmp10l = vec_add(tmp0l, tmp3l); \
shun-iwasawa 82a8f5
  tmp10h = vec_add(tmp0h, tmp3h); \
shun-iwasawa 82a8f5
  tmp13l = vec_sub(tmp0l, tmp3l); \
shun-iwasawa 82a8f5
  tmp13h = vec_sub(tmp0h, tmp3h); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  tmp1l = vec_unpackh(tmp1); \
shun-iwasawa 82a8f5
  tmp1h = vec_unpackl(tmp1); \
shun-iwasawa 82a8f5
  tmp1l = vec_sl(tmp1l, const_bits); \
shun-iwasawa 82a8f5
  tmp1h = vec_sl(tmp1h, const_bits); \
shun-iwasawa 82a8f5
  tmp1l = vec_add(tmp1l, pd_descale_p##PASS); \
shun-iwasawa 82a8f5
  tmp1h = vec_add(tmp1h, pd_descale_p##PASS); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  tmp11l = vec_add(tmp1l, tmp2l); \
shun-iwasawa 82a8f5
  tmp11h = vec_add(tmp1h, tmp2h); \
shun-iwasawa 82a8f5
  tmp12l = vec_sub(tmp1l, tmp2l); \
shun-iwasawa 82a8f5
  tmp12h = vec_sub(tmp1h, tmp2h); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  /* Odd part */ \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  z3 = vec_add(in##3, in##7); \
shun-iwasawa 82a8f5
  z4 = vec_add(in##1, in##5); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  /* (Original) \
shun-iwasawa 82a8f5
   * z5 = (z3 + z4) * 1.175875602; \
shun-iwasawa 82a8f5
   * z3 = z3 * -1.961570560;  z4 = z4 * -0.390180644; \
shun-iwasawa 82a8f5
   * z3 += z5;  z4 += z5; \
shun-iwasawa 82a8f5
   * \
shun-iwasawa 82a8f5
   * (This implementation) \
shun-iwasawa 82a8f5
   * z3 = z3 * (1.175875602 - 1.961570560) + z4 * 1.175875602; \
shun-iwasawa 82a8f5
   * z4 = z3 * 1.175875602 + z4 * (1.175875602 - 0.390180644); \
shun-iwasawa 82a8f5
   */ \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  z34l = vec_mergeh(z3, z4); \
shun-iwasawa 82a8f5
  z34h = vec_mergel(z3, z4); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  z3l = vec_msums(z34l, pw_mf078_f117, pd_zero); \
shun-iwasawa 82a8f5
  z3h = vec_msums(z34h, pw_mf078_f117, pd_zero); \
shun-iwasawa 82a8f5
  z4l = vec_msums(z34l, pw_f117_f078, pd_zero); \
shun-iwasawa 82a8f5
  z4h = vec_msums(z34h, pw_f117_f078, pd_zero); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  /* (Original) \
shun-iwasawa 82a8f5
   * z1 = tmp0 + tmp3;  z2 = tmp1 + tmp2; \
shun-iwasawa 82a8f5
   * tmp0 = tmp0 * 0.298631336;  tmp1 = tmp1 * 2.053119869; \
shun-iwasawa 82a8f5
   * tmp2 = tmp2 * 3.072711026;  tmp3 = tmp3 * 1.501321110; \
shun-iwasawa 82a8f5
   * z1 = z1 * -0.899976223;  z2 = z2 * -2.562915447; \
shun-iwasawa 82a8f5
   * tmp0 += z1 + z3;  tmp1 += z2 + z4; \
shun-iwasawa 82a8f5
   * tmp2 += z2 + z3;  tmp3 += z1 + z4; \
shun-iwasawa 82a8f5
   * \
shun-iwasawa 82a8f5
   * (This implementation) \
shun-iwasawa 82a8f5
   * tmp0 = tmp0 * (0.298631336 - 0.899976223) + tmp3 * -0.899976223; \
shun-iwasawa 82a8f5
   * tmp1 = tmp1 * (2.053119869 - 2.562915447) + tmp2 * -2.562915447; \
shun-iwasawa 82a8f5
   * tmp2 = tmp1 * -2.562915447 + tmp2 * (3.072711026 - 2.562915447); \
shun-iwasawa 82a8f5
   * tmp3 = tmp0 * -0.899976223 + tmp3 * (1.501321110 - 0.899976223); \
shun-iwasawa 82a8f5
   * tmp0 += z3;  tmp1 += z4; \
shun-iwasawa 82a8f5
   * tmp2 += z3;  tmp3 += z4; \
shun-iwasawa 82a8f5
   */ \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  in##71l = vec_mergeh(in##7, in##1); \
shun-iwasawa 82a8f5
  in##71h = vec_mergel(in##7, in##1); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  tmp0l = vec_msums(in##71l, pw_mf060_mf089, z3l); \
shun-iwasawa 82a8f5
  tmp0h = vec_msums(in##71h, pw_mf060_mf089, z3h); \
shun-iwasawa 82a8f5
  tmp3l = vec_msums(in##71l, pw_mf089_f060, z4l); \
shun-iwasawa 82a8f5
  tmp3h = vec_msums(in##71h, pw_mf089_f060, z4h); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  in##53l = vec_mergeh(in##5, in##3); \
shun-iwasawa 82a8f5
  in##53h = vec_mergel(in##5, in##3); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  tmp1l = vec_msums(in##53l, pw_mf050_mf256, z4l); \
shun-iwasawa 82a8f5
  tmp1h = vec_msums(in##53h, pw_mf050_mf256, z4h); \
shun-iwasawa 82a8f5
  tmp2l = vec_msums(in##53l, pw_mf256_f050, z3l); \
shun-iwasawa 82a8f5
  tmp2h = vec_msums(in##53h, pw_mf256_f050, z3h); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  /* Final output stage */ \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  out0l = vec_add(tmp10l, tmp3l); \
shun-iwasawa 82a8f5
  out0h = vec_add(tmp10h, tmp3h); \
shun-iwasawa 82a8f5
  out7l = vec_sub(tmp10l, tmp3l); \
shun-iwasawa 82a8f5
  out7h = vec_sub(tmp10h, tmp3h); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  out0l = vec_sra(out0l, descale_p##PASS); \
shun-iwasawa 82a8f5
  out0h = vec_sra(out0h, descale_p##PASS); \
shun-iwasawa 82a8f5
  out7l = vec_sra(out7l, descale_p##PASS); \
shun-iwasawa 82a8f5
  out7h = vec_sra(out7h, descale_p##PASS); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  out0 = vec_pack(out0l, out0h); \
shun-iwasawa 82a8f5
  out7 = vec_pack(out7l, out7h); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  out1l = vec_add(tmp11l, tmp2l); \
shun-iwasawa 82a8f5
  out1h = vec_add(tmp11h, tmp2h); \
shun-iwasawa 82a8f5
  out6l = vec_sub(tmp11l, tmp2l); \
shun-iwasawa 82a8f5
  out6h = vec_sub(tmp11h, tmp2h); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  out1l = vec_sra(out1l, descale_p##PASS); \
shun-iwasawa 82a8f5
  out1h = vec_sra(out1h, descale_p##PASS); \
shun-iwasawa 82a8f5
  out6l = vec_sra(out6l, descale_p##PASS); \
shun-iwasawa 82a8f5
  out6h = vec_sra(out6h, descale_p##PASS); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  out1 = vec_pack(out1l, out1h); \
shun-iwasawa 82a8f5
  out6 = vec_pack(out6l, out6h); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  out2l = vec_add(tmp12l, tmp1l); \
shun-iwasawa 82a8f5
  out2h = vec_add(tmp12h, tmp1h); \
shun-iwasawa 82a8f5
  out5l = vec_sub(tmp12l, tmp1l); \
shun-iwasawa 82a8f5
  out5h = vec_sub(tmp12h, tmp1h); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  out2l = vec_sra(out2l, descale_p##PASS); \
shun-iwasawa 82a8f5
  out2h = vec_sra(out2h, descale_p##PASS); \
shun-iwasawa 82a8f5
  out5l = vec_sra(out5l, descale_p##PASS); \
shun-iwasawa 82a8f5
  out5h = vec_sra(out5h, descale_p##PASS); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  out2 = vec_pack(out2l, out2h); \
shun-iwasawa 82a8f5
  out5 = vec_pack(out5l, out5h); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  out3l = vec_add(tmp13l, tmp0l); \
shun-iwasawa 82a8f5
  out3h = vec_add(tmp13h, tmp0h); \
shun-iwasawa 82a8f5
  out4l = vec_sub(tmp13l, tmp0l); \
shun-iwasawa 82a8f5
  out4h = vec_sub(tmp13h, tmp0h); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  out3l = vec_sra(out3l, descale_p##PASS); \
shun-iwasawa 82a8f5
  out3h = vec_sra(out3h, descale_p##PASS); \
shun-iwasawa 82a8f5
  out4l = vec_sra(out4l, descale_p##PASS); \
shun-iwasawa 82a8f5
  out4h = vec_sra(out4h, descale_p##PASS); \
shun-iwasawa 82a8f5
  \
shun-iwasawa 82a8f5
  out3 = vec_pack(out3l, out3h); \
shun-iwasawa 82a8f5
  out4 = vec_pack(out4l, out4h); \
shun-iwasawa 82a8f5
}
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
void jsimd_idct_islow_altivec(void *dct_table_, JCOEFPTR coef_block,
shun-iwasawa 82a8f5
                              JSAMPARRAY output_buf, JDIMENSION output_col)
shun-iwasawa 82a8f5
{
shun-iwasawa 82a8f5
  short *dct_table = (short *)dct_table_;
shun-iwasawa 82a8f5
  int *outptr;
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  __vector short row0, row1, row2, row3, row4, row5, row6, row7,
shun-iwasawa 82a8f5
    col0, col1, col2, col3, col4, col5, col6, col7,
shun-iwasawa 82a8f5
    quant0, quant1, quant2, quant3, quant4, quant5, quant6, quant7,
shun-iwasawa 82a8f5
    tmp0, tmp1, tmp2, tmp3, z3, z4,
shun-iwasawa 82a8f5
    z34l, z34h, col71l, col71h, col26l, col26h, col53l, col53h,
shun-iwasawa 82a8f5
    row71l, row71h, row26l, row26h, row53l, row53h,
shun-iwasawa 82a8f5
    out0, out1, out2, out3, out4, out5, out6, out7;
shun-iwasawa 82a8f5
  __vector int tmp0l, tmp0h, tmp1l, tmp1h, tmp2l, tmp2h, tmp3l, tmp3h,
shun-iwasawa 82a8f5
    tmp10l, tmp10h, tmp11l, tmp11h, tmp12l, tmp12h, tmp13l, tmp13h,
shun-iwasawa 82a8f5
    z3l, z3h, z4l, z4h,
shun-iwasawa 82a8f5
    out0l, out0h, out1l, out1h, out2l, out2h, out3l, out3h, out4l, out4h,
shun-iwasawa 82a8f5
    out5l, out5h, out6l, out6h, out7l, out7h;
shun-iwasawa 82a8f5
  __vector signed char outb;
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  /* Constants */
shun-iwasawa 82a8f5
  __vector short pw_zero = { __8X(0) },
shun-iwasawa 82a8f5
    pw_f130_f054 = { __4X2(F_0_541 + F_0_765, F_0_541) },
shun-iwasawa 82a8f5
    pw_f054_mf130 = { __4X2(F_0_541, F_0_541 - F_1_847) },
shun-iwasawa 82a8f5
    pw_mf078_f117 = { __4X2(F_1_175 - F_1_961, F_1_175) },
shun-iwasawa 82a8f5
    pw_f117_f078 = { __4X2(F_1_175, F_1_175 - F_0_390) },
shun-iwasawa 82a8f5
    pw_mf060_mf089 = { __4X2(F_0_298 - F_0_899, -F_0_899) },
shun-iwasawa 82a8f5
    pw_mf089_f060 = { __4X2(-F_0_899, F_1_501 - F_0_899) },
shun-iwasawa 82a8f5
    pw_mf050_mf256 = { __4X2(F_2_053 - F_2_562, -F_2_562) },
shun-iwasawa 82a8f5
    pw_mf256_f050 = { __4X2(-F_2_562, F_3_072 - F_2_562) };
shun-iwasawa 82a8f5
  __vector unsigned short pass1_bits = { __8X(PASS1_BITS) };
shun-iwasawa 82a8f5
  __vector int pd_zero = { __4X(0) },
shun-iwasawa 82a8f5
    pd_descale_p1 = { __4X(1 << (DESCALE_P1 - 1)) },
shun-iwasawa 82a8f5
    pd_descale_p2 = { __4X(1 << (DESCALE_P2 - 1)) };
shun-iwasawa 82a8f5
  __vector unsigned int descale_p1 = { __4X(DESCALE_P1) },
shun-iwasawa 82a8f5
    descale_p2 = { __4X(DESCALE_P2) },
shun-iwasawa 82a8f5
    const_bits = { __4X(CONST_BITS) };
shun-iwasawa 82a8f5
  __vector signed char pb_centerjsamp = { __16X(CENTERJSAMPLE) };
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  /* Pass 1: process columns */
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  col0 = vec_ld(0, coef_block);
shun-iwasawa 82a8f5
  col1 = vec_ld(16, coef_block);
shun-iwasawa 82a8f5
  col2 = vec_ld(32, coef_block);
shun-iwasawa 82a8f5
  col3 = vec_ld(48, coef_block);
shun-iwasawa 82a8f5
  col4 = vec_ld(64, coef_block);
shun-iwasawa 82a8f5
  col5 = vec_ld(80, coef_block);
shun-iwasawa 82a8f5
  col6 = vec_ld(96, coef_block);
shun-iwasawa 82a8f5
  col7 = vec_ld(112, coef_block);
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  tmp1 = vec_or(col1, col2);
shun-iwasawa 82a8f5
  tmp2 = vec_or(col3, col4);
shun-iwasawa 82a8f5
  tmp1 = vec_or(tmp1, tmp2);
shun-iwasawa 82a8f5
  tmp3 = vec_or(col5, col6);
shun-iwasawa 82a8f5
  tmp3 = vec_or(tmp3, col7);
shun-iwasawa 82a8f5
  tmp1 = vec_or(tmp1, tmp3);
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  quant0 = vec_ld(0, dct_table);
shun-iwasawa 82a8f5
  col0 = vec_mladd(col0, quant0, pw_zero);
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  if (vec_all_eq(tmp1, pw_zero)) {
shun-iwasawa 82a8f5
    /* AC terms all zero */
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
    col0 = vec_sl(col0, pass1_bits);
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
    row0 = vec_splat(col0, 0);
shun-iwasawa 82a8f5
    row1 = vec_splat(col0, 1);
shun-iwasawa 82a8f5
    row2 = vec_splat(col0, 2);
shun-iwasawa 82a8f5
    row3 = vec_splat(col0, 3);
shun-iwasawa 82a8f5
    row4 = vec_splat(col0, 4);
shun-iwasawa 82a8f5
    row5 = vec_splat(col0, 5);
shun-iwasawa 82a8f5
    row6 = vec_splat(col0, 6);
shun-iwasawa 82a8f5
    row7 = vec_splat(col0, 7);
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  } else {
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
    quant1 = vec_ld(16, dct_table);
shun-iwasawa 82a8f5
    quant2 = vec_ld(32, dct_table);
shun-iwasawa 82a8f5
    quant3 = vec_ld(48, dct_table);
shun-iwasawa 82a8f5
    quant4 = vec_ld(64, dct_table);
shun-iwasawa 82a8f5
    quant5 = vec_ld(80, dct_table);
shun-iwasawa 82a8f5
    quant6 = vec_ld(96, dct_table);
shun-iwasawa 82a8f5
    quant7 = vec_ld(112, dct_table);
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
    col1 = vec_mladd(col1, quant1, pw_zero);
shun-iwasawa 82a8f5
    col2 = vec_mladd(col2, quant2, pw_zero);
shun-iwasawa 82a8f5
    col3 = vec_mladd(col3, quant3, pw_zero);
shun-iwasawa 82a8f5
    col4 = vec_mladd(col4, quant4, pw_zero);
shun-iwasawa 82a8f5
    col5 = vec_mladd(col5, quant5, pw_zero);
shun-iwasawa 82a8f5
    col6 = vec_mladd(col6, quant6, pw_zero);
shun-iwasawa 82a8f5
    col7 = vec_mladd(col7, quant7, pw_zero);
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
    DO_IDCT(col, 1);
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
    TRANSPOSE(out, row);
shun-iwasawa 82a8f5
  }
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  /* Pass 2: process rows */
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  DO_IDCT(row, 2);
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  TRANSPOSE(out, col);
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  outb = vec_packs(col0, col0);
shun-iwasawa 82a8f5
  outb = vec_add(outb, pb_centerjsamp);
shun-iwasawa 82a8f5
  outptr = (int *)(output_buf[0] + output_col);
shun-iwasawa 82a8f5
  vec_ste((__vector int)outb, 0, outptr);
shun-iwasawa 82a8f5
  vec_ste((__vector int)outb, 4, outptr);
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  outb = vec_packs(col1, col1);
shun-iwasawa 82a8f5
  outb = vec_add(outb, pb_centerjsamp);
shun-iwasawa 82a8f5
  outptr = (int *)(output_buf[1] + output_col);
shun-iwasawa 82a8f5
  vec_ste((__vector int)outb, 0, outptr);
shun-iwasawa 82a8f5
  vec_ste((__vector int)outb, 4, outptr);
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  outb = vec_packs(col2, col2);
shun-iwasawa 82a8f5
  outb = vec_add(outb, pb_centerjsamp);
shun-iwasawa 82a8f5
  outptr = (int *)(output_buf[2] + output_col);
shun-iwasawa 82a8f5
  vec_ste((__vector int)outb, 0, outptr);
shun-iwasawa 82a8f5
  vec_ste((__vector int)outb, 4, outptr);
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  outb = vec_packs(col3, col3);
shun-iwasawa 82a8f5
  outb = vec_add(outb, pb_centerjsamp);
shun-iwasawa 82a8f5
  outptr = (int *)(output_buf[3] + output_col);
shun-iwasawa 82a8f5
  vec_ste((__vector int)outb, 0, outptr);
shun-iwasawa 82a8f5
  vec_ste((__vector int)outb, 4, outptr);
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  outb = vec_packs(col4, col4);
shun-iwasawa 82a8f5
  outb = vec_add(outb, pb_centerjsamp);
shun-iwasawa 82a8f5
  outptr = (int *)(output_buf[4] + output_col);
shun-iwasawa 82a8f5
  vec_ste((__vector int)outb, 0, outptr);
shun-iwasawa 82a8f5
  vec_ste((__vector int)outb, 4, outptr);
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  outb = vec_packs(col5, col5);
shun-iwasawa 82a8f5
  outb = vec_add(outb, pb_centerjsamp);
shun-iwasawa 82a8f5
  outptr = (int *)(output_buf[5] + output_col);
shun-iwasawa 82a8f5
  vec_ste((__vector int)outb, 0, outptr);
shun-iwasawa 82a8f5
  vec_ste((__vector int)outb, 4, outptr);
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  outb = vec_packs(col6, col6);
shun-iwasawa 82a8f5
  outb = vec_add(outb, pb_centerjsamp);
shun-iwasawa 82a8f5
  outptr = (int *)(output_buf[6] + output_col);
shun-iwasawa 82a8f5
  vec_ste((__vector int)outb, 0, outptr);
shun-iwasawa 82a8f5
  vec_ste((__vector int)outb, 4, outptr);
shun-iwasawa 82a8f5
shun-iwasawa 82a8f5
  outb = vec_packs(col7, col7);
shun-iwasawa 82a8f5
  outb = vec_add(outb, pb_centerjsamp);
shun-iwasawa 82a8f5
  outptr = (int *)(output_buf[7] + output_col);
shun-iwasawa 82a8f5
  vec_ste((__vector int)outb, 0, outptr);
shun-iwasawa 82a8f5
  vec_ste((__vector int)outb, 4, outptr);
shun-iwasawa 82a8f5
}