// Copyright 2020 Google LLC
//
// This source code is licensed under the BSD-style license found in the
// LICENSE file in the root directory of this source tree.

$assert REQUANTIZATION == "FP32"
$assert DATATYPE in ["QC8", "QS8", "QU8"]
$assert VARIANT in ["LD128", "EXTENDED"]
$assert MR <= 4
#include <assert.h>

#include <immintrin.h>

#include <xnnpack/gemm.h>
#include <xnnpack/intrinsics-polyfill.h>
#include <xnnpack/math.h>
#include <xnnpack/unaligned.h>


$GEMM_SUFFIX = "_xw" if VARIANT == "EXTENDED" else ""
$PARAMS_STRUCT = REQUANTIZATION.lower() + "_avx2"
$PARAMS_UNION = "xnn_%s_conv_minmax_params" % DATATYPE.lower()
$XINT8_T = "uint8_t" if DATATYPE == "QU8" else "int8_t"
void xnn_${DATATYPE.lower()}_gemm${GEMM_SUFFIX}_minmax_fp32_ukernel_${MR}x8c8__avx2(
    size_t mr,
    size_t nc,
    size_t kc,
    const ${XINT8_T}* restrict a,
    size_t a_stride,
    const void* restrict w,
    ${XINT8_T}* restrict c,
    size_t cm_stride,
    size_t cn_stride,
    const union ${PARAMS_UNION} params[restrict XNN_MIN_ELEMENTS(1)]) XNN_OOB_READS
{
  assert(mr != 0);
  assert(mr <= ${MR});
  assert(nc != 0);
  assert(kc != 0);
  assert(kc % sizeof(${XINT8_T}) == 0);
  assert(a != NULL);
  assert(w != NULL);
  assert(c != NULL);

  kc = round_up_po2(kc, 8);
  const ${XINT8_T}* a0 = a;
  ${XINT8_T}* c0 = c;
  $for M in range(1, MR):
    const ${XINT8_T}* a${M} = (const ${XINT8_T}*) ((uintptr_t) a${M-1} + a_stride);
    ${XINT8_T}* c${M} = (${XINT8_T}*) ((uintptr_t) c${M-1} + cm_stride);
    $if M % 2 == 0:
      if XNN_UNPREDICTABLE(mr <= ${M}) {
        a${M} = a${M-1};
        c${M} = c${M-1};
      }
    $elif M + 1 == MR:
      if XNN_UNPREDICTABLE(mr != ${M+1}) {
        a${M} = a${M-1};
        c${M} = c${M-1};
      }
    $else:
      if XNN_UNPREDICTABLE(mr < ${M+1}) {
        a${M} = a${M-1};
        c${M} = c${M-1};
      }

  do {
    $for N in range(0, 8, 2):
      const __m128i vbias0x${N} = _mm_cvtsi32_si128(((const int*) w)[${N}]);
      const __m128i vbias0x${N+1} = _mm_cvtsi32_si128(((const int*) w)[${N+1}]);
      __m256i vacc0x${N}${N+1} = _mm256_inserti128_si256(_mm256_castsi128_si256(vbias0x${N}), vbias0x${N+1}, 1);
    $for M in range(1, MR):
      $for N in range(0, 8, 2):
        __m256i vacc${M}x${N}${N+1} = vacc0x${N}${N+1};
    w = (const int32_t*) w + 8;

    size_t k = 0;
    $if DATATYPE == "QU8":
      const __m256i vb_zero_point = _mm256_load_si256((const __m256i*) params->${PARAMS_STRUCT}.kernel_zero_point);
    while (k < kc) {
      $for M in range(MR):
        const __m128i va${M} = _mm_broadcastq_epi64(_mm_loadl_epi64((const __m128i*) a${M}));
        $if DATATYPE == "QU8":
          const __m256i vxa${M} = _mm256_cvtepu8_epi16(va${M});
        $else:
          const __m256i vxa${M} = _mm256_cvtepi8_epi16(va${M});
        a${M} += 8;

      $for N in range(0, 8, 2):
        $if VARIANT == "EXTENDED":
          $if N == 0:
            const __m256i vxb${N}${N+1} = _mm256_load_si256((const __m256i*) w);
          $else:
            const __m256i vxb${N}${N+1} = _mm256_load_si256((const __m256i*) ((const int16_t*) w + ${N * 8}));
        $else:
          $if N == 0:
            const __m128i vb${N}${N+1} = _mm_load_si128((const __m128i*) w);
          $else:
            const __m128i vb${N}${N+1} = _mm_load_si128((const __m128i*) ((const ${XINT8_T}*) w + ${N * 8}));
          $if DATATYPE == "QU8":
            const __m256i vxb${N}${N+1} = _mm256_sub_epi16(_mm256_cvtepu8_epi16(vb${N}${N+1}), vb_zero_point);
          $else:
            const __m256i vxb${N}${N+1} = _mm256_cvtepi8_epi16(vb${N}${N+1});

        $for M in range(MR):
          vacc${M}x${N}${N+1} = _mm256_add_epi32(vacc${M}x${N}${N+1}, _mm256_madd_epi16(vxa${M}, vxb${N}${N+1}));

      $if VARIANT == "EXTENDED":
        w = (const void*) ((const int16_t*) w + 64);
      $else:
        w = (const void*) ((const ${XINT8_T}*) w + 64);
      k += 8 * sizeof(${XINT8_T});
    }

    $for M in range(MR):
      const __m256i vacc${M}x0213 = _mm256_hadd_epi32(vacc${M}x01, vacc${M}x23);
      const __m256i vacc${M}x4657 = _mm256_hadd_epi32(vacc${M}x45, vacc${M}x67);

    $for M in range(MR):
      const __m256i vacc${M}x02461357 = _mm256_hadd_epi32(vacc${M}x0213, vacc${M}x4657);

    const __m256i vpermute_mask = _mm256_set_epi32(7, 3, 6, 2, 5, 1, 4, 0);
    $for M in range(MR):
      __m256i vacc${M}x01234567 = _mm256_permutevar8x32_epi32(vacc${M}x02461357, vpermute_mask);

    $for M in range(MR):
      __m256 vscaled${M}x01234567 = _mm256_cvtepi32_ps(vacc${M}x01234567);

    $if DATATYPE == "QC8":
      const __m256 vscale01234567 = _mm256_load_ps(w);
      w = (const void*) ((const float*) w + 8);
      $for M in range(MR):
        vscaled${M}x01234567 = _mm256_mul_ps(vscaled${M}x01234567, vscale01234567);
    $else:
      const __m256 vscale = _mm256_load_ps(params->fp32_avx2.scale);
      $for M in range(MR):
        vscaled${M}x01234567 = _mm256_mul_ps(vscaled${M}x01234567, vscale);

    const __m256 voutput_max_less_zero_point = _mm256_load_ps(params->${PARAMS_STRUCT}.output_max_less_zero_point);
    $for M in range(MR):
      vscaled${M}x01234567 = _mm256_min_ps(vscaled${M}x01234567, voutput_max_less_zero_point);

    $for M in range(MR):
      vacc${M}x01234567 = _mm256_cvtps_epi32(vscaled${M}x01234567);

    const __m256i voutput_zero_point = _mm256_load_si256((const __m256i*) params->${PARAMS_STRUCT}.output_zero_point);
    $for M in range(0, MR, 2):
      __m256i vacc${M}${min(M+1, MR-1)}x01234567 = _mm256_adds_epi16(_mm256_packs_epi32(vacc${M}x01234567, vacc${min(M+1, MR-1)}x01234567), voutput_zero_point);

    $for M in range(0, MR, 2):
      vacc${M}${min(M+1, MR-1)}x01234567 = _mm256_permute4x64_epi64(vacc${M}${min(M+1, MR-1)}x01234567, _MM_SHUFFLE(3, 1, 2, 0));

    $if DATATYPE == "QU8":
      $if MR > 2:
        __m256i vout = _mm256_packus_epi16(vacc0${min(1, MR-1)}x01234567, vacc${min(2, MR-1)}${min(3, MR-1)}x01234567);
      $else:
        __m256i vout = _mm256_packus_epi16(vacc0${min(1, MR-1)}x01234567, vacc0${min(1, MR-1)}x01234567);

      vout = _mm256_max_epu8(vout, _mm256_load_si256((const __m256i*) params->${PARAMS_STRUCT}.output_min));
    $else:
      $if MR > 2:
        __m256i vout = _mm256_packs_epi16(vacc0${min(1, MR-1)}x01234567, vacc${min(2, MR-1)}${min(3, MR-1)}x01234567);
      $else:
        __m256i vout = _mm256_packs_epi16(vacc0${min(1, MR-1)}x01234567, vacc0${min(1, MR-1)}x01234567);

      vout = _mm256_max_epi8(vout, _mm256_load_si256((const __m256i*) params->${PARAMS_STRUCT}.output_min));

    __m128i vout_lo = _mm256_castsi256_si128(vout);
    __m128i vout_hi = _mm256_extracti128_si256(vout, 1);

    if (nc >= 8) {
      _mm_storel_epi64((__m128i*) c0, vout_lo);
      $if MR > 1:
        _mm_storel_epi64((__m128i*) c1, vout_hi);
      $if MR > 2:
        _mm_storeh_pi((__m64*) c2, _mm_castsi128_ps(vout_lo));
      $if MR > 3:
        _mm_storeh_pi((__m64*) c3, _mm_castsi128_ps(vout_hi));

      $for M in range(MR):
        c${M} = (${XINT8_T}*) ((uintptr_t) c${M} + cn_stride);

      $for M in range(MR):
        a${M} = (const ${XINT8_T}*) ((uintptr_t) a${M} - kc);

      nc -= 8;
    } else {
      if (nc & 4) {
        _mm_storeu_si32(c0, vout_lo);
        $if MR > 1:
          _mm_storeu_si32(c1, vout_hi);
        $if MR > 2:
          unaligned_store_u32(c2, (uint32_t) _mm_extract_epi32(vout_lo, 2));
        $if MR > 3:
          unaligned_store_u32(c3, (uint32_t) _mm_extract_epi32(vout_hi, 2));

        $for M in range(MR):
          c${M} += 4;

        vout_lo = _mm_srli_epi64(vout_lo, 32);
        vout_hi = _mm_srli_epi64(vout_hi, 32);
      }
      if (nc & 2) {
        unaligned_store_u16(c0, (uint16_t) _mm_extract_epi16(vout_lo, 0));
        $if MR > 1:
          unaligned_store_u16(c1, (uint16_t) _mm_extract_epi16(vout_hi, 0));
        $if MR > 2:
          unaligned_store_u16(c2, (uint16_t) _mm_extract_epi16(vout_lo, 4));
        $if MR > 3:
          unaligned_store_u16(c3, (uint16_t) _mm_extract_epi16(vout_hi, 4));

        $for M in range(MR):
          c${M} += 2;

        vout_lo = _mm_srli_epi32(vout_lo, 16);
        vout_hi = _mm_srli_epi32(vout_hi, 16);
      }
      if (nc & 1) {
        *c0 = (${XINT8_T}) _mm_extract_epi8(vout_lo, 0);
        $if MR > 1:
          *c1 = (${XINT8_T}) _mm_extract_epi8(vout_hi, 0);
        $if MR > 2:
          *c2 = (${XINT8_T}) _mm_extract_epi8(vout_lo, 8);
        $if MR > 3:
          *c3 = (${XINT8_T}) _mm_extract_epi8(vout_hi, 8);
      }

      nc = 0;
    }
  } while (nc != 0);
}
