// Auto-generated file. Do not edit!
//   Template: src/f32-gemm/psimd-s4.c.in
//   Generator: tools/xngen
//
// Copyright 2019 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.

#include <assert.h>

#include <psimd.h>

#include <xnnpack/gemm.h>


void xnn_f32_gemminc_ukernel_6x8s4__psimd(
    size_t mr,
    size_t nc,
    size_t kc,
    const float*restrict a,
    size_t a_stride,
    const float*restrict w,
    float*restrict c,
    size_t cm_stride,
    size_t cn_stride,
    const float*restrict acc,
    const union xnn_f32_minmax_params params[restrict static 1])
{
  assert(mr != 0);
  assert(mr <= 6);
  assert(nc != 0);
  assert(kc != 0);
  assert(kc % sizeof(float) == 0);
  assert(a != NULL);
  assert(w != NULL);
  assert(c != NULL);
  assert(acc != NULL);

  const float* a0 = a;
  float* c0 = c;
  const float* a1 = (const float*) ((uintptr_t) a0 + a_stride);
  float* c1 = (float*) ((uintptr_t) c0 + cm_stride);
  if XNN_UNPREDICTABLE(mr < 2) {
    a1 = a0;
    c1 = c0;
  }
  const float* a2 = (const float*) ((uintptr_t) a1 + a_stride);
  float* c2 = (float*) ((uintptr_t) c1 + cm_stride);
  if XNN_UNPREDICTABLE(mr <= 2) {
    a2 = a1;
    c2 = c1;
  }
  const float* a3 = (const float*) ((uintptr_t) a2 + a_stride);
  float* c3 = (float*) ((uintptr_t) c2 + cm_stride);
  if XNN_UNPREDICTABLE(mr < 4) {
    a3 = a2;
    c3 = c2;
  }
  const float* a4 = (const float*) ((uintptr_t) a3 + a_stride);
  float* c4 = (float*) ((uintptr_t) c3 + cm_stride);
  if XNN_UNPREDICTABLE(mr <= 4) {
    a4 = a3;
    c4 = c3;
  }
  const float* a5 = (const float*) ((uintptr_t) a4 + a_stride);
  float* c5 = (float*) ((uintptr_t) c4 + cm_stride);
  if XNN_UNPREDICTABLE(mr != 6) {
    a5 = a4;
    c5 = c4;
  }

  do {
    psimd_f32 vacc0x0123 = psimd_load_f32(acc + 0);
    psimd_f32 vacc0x4567 = psimd_load_f32(acc + 4);
    psimd_f32 vacc1x0123 = psimd_load_f32(acc + 8);
    psimd_f32 vacc1x4567 = psimd_load_f32(acc + 12);
    psimd_f32 vacc2x0123 = psimd_load_f32(acc + 16);
    psimd_f32 vacc2x4567 = psimd_load_f32(acc + 20);
    psimd_f32 vacc3x0123 = psimd_load_f32(acc + 24);
    psimd_f32 vacc3x4567 = psimd_load_f32(acc + 28);
    psimd_f32 vacc4x0123 = psimd_load_f32(acc + 32);
    psimd_f32 vacc4x4567 = psimd_load_f32(acc + 36);
    psimd_f32 vacc5x0123 = psimd_load_f32(acc + 40);
    psimd_f32 vacc5x4567 = psimd_load_f32(acc + 44);
    acc += 48;

    size_t k = kc;
    while (k >= 4 * sizeof(float)) {
      psimd_f32 va0 = psimd_load_f32(a0);
      a0 += 4;
      psimd_f32 va1 = psimd_load_f32(a1);
      a1 += 4;
      psimd_f32 va2 = psimd_load_f32(a2);
      a2 += 4;
      psimd_f32 va3 = psimd_load_f32(a3);
      a3 += 4;
      psimd_f32 va4 = psimd_load_f32(a4);
      a4 += 4;
      psimd_f32 va5 = psimd_load_f32(a5);
      a5 += 4;


      const psimd_f32 vb0123c0 = psimd_load_f32(w + 0);
      const psimd_f32 vb4567c0 = psimd_load_f32(w + 4);

      vacc0x0123 = psimd_qfma_f32(vacc0x0123, va0, vb0123c0);
      vacc1x0123 = psimd_qfma_f32(vacc1x0123, va1, vb0123c0);
      vacc2x0123 = psimd_qfma_f32(vacc2x0123, va2, vb0123c0);
      vacc3x0123 = psimd_qfma_f32(vacc3x0123, va3, vb0123c0);
      vacc4x0123 = psimd_qfma_f32(vacc4x0123, va4, vb0123c0);
      vacc5x0123 = psimd_qfma_f32(vacc5x0123, va5, vb0123c0);
      vacc0x4567 = psimd_qfma_f32(vacc0x4567, va0, vb4567c0);
      vacc1x4567 = psimd_qfma_f32(vacc1x4567, va1, vb4567c0);
      vacc2x4567 = psimd_qfma_f32(vacc2x4567, va2, vb4567c0);
      vacc3x4567 = psimd_qfma_f32(vacc3x4567, va3, vb4567c0);
      vacc4x4567 = psimd_qfma_f32(vacc4x4567, va4, vb4567c0);
      vacc5x4567 = psimd_qfma_f32(vacc5x4567, va5, vb4567c0);

      #ifdef __clang__
      va0 = __builtin_shufflevector(va0, va0, 1, 2, 3, 0);
      va1 = __builtin_shufflevector(va1, va1, 1, 2, 3, 0);
      va2 = __builtin_shufflevector(va2, va2, 1, 2, 3, 0);
      va3 = __builtin_shufflevector(va3, va3, 1, 2, 3, 0);
      va4 = __builtin_shufflevector(va4, va4, 1, 2, 3, 0);
      va5 = __builtin_shufflevector(va5, va5, 1, 2, 3, 0);
      #else
      va0 = __builtin_shuffle(va0, va0, (psimd_s32) { 1, 2, 3, 0 });
      va1 = __builtin_shuffle(va1, va1, (psimd_s32) { 1, 2, 3, 0 });
      va2 = __builtin_shuffle(va2, va2, (psimd_s32) { 1, 2, 3, 0 });
      va3 = __builtin_shuffle(va3, va3, (psimd_s32) { 1, 2, 3, 0 });
      va4 = __builtin_shuffle(va4, va4, (psimd_s32) { 1, 2, 3, 0 });
      va5 = __builtin_shuffle(va5, va5, (psimd_s32) { 1, 2, 3, 0 });
      #endif

      const psimd_f32 vb0123c1 = psimd_load_f32(w + 8);
      const psimd_f32 vb4567c1 = psimd_load_f32(w + 12);

      vacc0x0123 = psimd_qfma_f32(vacc0x0123, va0, vb0123c1);
      vacc1x0123 = psimd_qfma_f32(vacc1x0123, va1, vb0123c1);
      vacc2x0123 = psimd_qfma_f32(vacc2x0123, va2, vb0123c1);
      vacc3x0123 = psimd_qfma_f32(vacc3x0123, va3, vb0123c1);
      vacc4x0123 = psimd_qfma_f32(vacc4x0123, va4, vb0123c1);
      vacc5x0123 = psimd_qfma_f32(vacc5x0123, va5, vb0123c1);
      vacc0x4567 = psimd_qfma_f32(vacc0x4567, va0, vb4567c1);
      vacc1x4567 = psimd_qfma_f32(vacc1x4567, va1, vb4567c1);
      vacc2x4567 = psimd_qfma_f32(vacc2x4567, va2, vb4567c1);
      vacc3x4567 = psimd_qfma_f32(vacc3x4567, va3, vb4567c1);
      vacc4x4567 = psimd_qfma_f32(vacc4x4567, va4, vb4567c1);
      vacc5x4567 = psimd_qfma_f32(vacc5x4567, va5, vb4567c1);

      #ifdef __clang__
      va0 = __builtin_shufflevector(va0, va0, 1, 2, 3, 0);
      va1 = __builtin_shufflevector(va1, va1, 1, 2, 3, 0);
      va2 = __builtin_shufflevector(va2, va2, 1, 2, 3, 0);
      va3 = __builtin_shufflevector(va3, va3, 1, 2, 3, 0);
      va4 = __builtin_shufflevector(va4, va4, 1, 2, 3, 0);
      va5 = __builtin_shufflevector(va5, va5, 1, 2, 3, 0);
      #else
      va0 = __builtin_shuffle(va0, va0, (psimd_s32) { 1, 2, 3, 0 });
      va1 = __builtin_shuffle(va1, va1, (psimd_s32) { 1, 2, 3, 0 });
      va2 = __builtin_shuffle(va2, va2, (psimd_s32) { 1, 2, 3, 0 });
      va3 = __builtin_shuffle(va3, va3, (psimd_s32) { 1, 2, 3, 0 });
      va4 = __builtin_shuffle(va4, va4, (psimd_s32) { 1, 2, 3, 0 });
      va5 = __builtin_shuffle(va5, va5, (psimd_s32) { 1, 2, 3, 0 });
      #endif

      const psimd_f32 vb0123c2 = psimd_load_f32(w + 16);
      const psimd_f32 vb4567c2 = psimd_load_f32(w + 20);

      vacc0x0123 = psimd_qfma_f32(vacc0x0123, va0, vb0123c2);
      vacc1x0123 = psimd_qfma_f32(vacc1x0123, va1, vb0123c2);
      vacc2x0123 = psimd_qfma_f32(vacc2x0123, va2, vb0123c2);
      vacc3x0123 = psimd_qfma_f32(vacc3x0123, va3, vb0123c2);
      vacc4x0123 = psimd_qfma_f32(vacc4x0123, va4, vb0123c2);
      vacc5x0123 = psimd_qfma_f32(vacc5x0123, va5, vb0123c2);
      vacc0x4567 = psimd_qfma_f32(vacc0x4567, va0, vb4567c2);
      vacc1x4567 = psimd_qfma_f32(vacc1x4567, va1, vb4567c2);
      vacc2x4567 = psimd_qfma_f32(vacc2x4567, va2, vb4567c2);
      vacc3x4567 = psimd_qfma_f32(vacc3x4567, va3, vb4567c2);
      vacc4x4567 = psimd_qfma_f32(vacc4x4567, va4, vb4567c2);
      vacc5x4567 = psimd_qfma_f32(vacc5x4567, va5, vb4567c2);

      #ifdef __clang__
      va0 = __builtin_shufflevector(va0, va0, 1, 2, 3, 0);
      va1 = __builtin_shufflevector(va1, va1, 1, 2, 3, 0);
      va2 = __builtin_shufflevector(va2, va2, 1, 2, 3, 0);
      va3 = __builtin_shufflevector(va3, va3, 1, 2, 3, 0);
      va4 = __builtin_shufflevector(va4, va4, 1, 2, 3, 0);
      va5 = __builtin_shufflevector(va5, va5, 1, 2, 3, 0);
      #else
      va0 = __builtin_shuffle(va0, va0, (psimd_s32) { 1, 2, 3, 0 });
      va1 = __builtin_shuffle(va1, va1, (psimd_s32) { 1, 2, 3, 0 });
      va2 = __builtin_shuffle(va2, va2, (psimd_s32) { 1, 2, 3, 0 });
      va3 = __builtin_shuffle(va3, va3, (psimd_s32) { 1, 2, 3, 0 });
      va4 = __builtin_shuffle(va4, va4, (psimd_s32) { 1, 2, 3, 0 });
      va5 = __builtin_shuffle(va5, va5, (psimd_s32) { 1, 2, 3, 0 });
      #endif

      const psimd_f32 vb0123c3 = psimd_load_f32(w + 24);
      const psimd_f32 vb4567c3 = psimd_load_f32(w + 28);

      vacc0x0123 = psimd_qfma_f32(vacc0x0123, va0, vb0123c3);
      vacc1x0123 = psimd_qfma_f32(vacc1x0123, va1, vb0123c3);
      vacc2x0123 = psimd_qfma_f32(vacc2x0123, va2, vb0123c3);
      vacc3x0123 = psimd_qfma_f32(vacc3x0123, va3, vb0123c3);
      vacc4x0123 = psimd_qfma_f32(vacc4x0123, va4, vb0123c3);
      vacc5x0123 = psimd_qfma_f32(vacc5x0123, va5, vb0123c3);
      vacc0x4567 = psimd_qfma_f32(vacc0x4567, va0, vb4567c3);
      vacc1x4567 = psimd_qfma_f32(vacc1x4567, va1, vb4567c3);
      vacc2x4567 = psimd_qfma_f32(vacc2x4567, va2, vb4567c3);
      vacc3x4567 = psimd_qfma_f32(vacc3x4567, va3, vb4567c3);
      vacc4x4567 = psimd_qfma_f32(vacc4x4567, va4, vb4567c3);
      vacc5x4567 = psimd_qfma_f32(vacc5x4567, va5, vb4567c3);


      w += 32;
      k -= 4 * sizeof(float);
    }
    if XNN_UNLIKELY(k != 0) {
      do {
        const psimd_f32 va0 = psimd_load_splat_f32(a0);
        a0 += 1;
        const psimd_f32 va1 = psimd_load_splat_f32(a1);
        a1 += 1;
        const psimd_f32 va2 = psimd_load_splat_f32(a2);
        a2 += 1;
        const psimd_f32 va3 = psimd_load_splat_f32(a3);
        a3 += 1;
        const psimd_f32 va4 = psimd_load_splat_f32(a4);
        a4 += 1;
        const psimd_f32 va5 = psimd_load_splat_f32(a5);
        a5 += 1;

        const psimd_f32 vb0123 = psimd_load_f32(w);
        const psimd_f32 vb4567 = psimd_load_f32(w + 4);
        w += 8;

        vacc0x0123 = psimd_qfma_f32(vacc0x0123, va0, vb0123);
        vacc1x0123 = psimd_qfma_f32(vacc1x0123, va1, vb0123);
        vacc2x0123 = psimd_qfma_f32(vacc2x0123, va2, vb0123);
        vacc3x0123 = psimd_qfma_f32(vacc3x0123, va3, vb0123);
        vacc4x0123 = psimd_qfma_f32(vacc4x0123, va4, vb0123);
        vacc5x0123 = psimd_qfma_f32(vacc5x0123, va5, vb0123);
        vacc0x4567 = psimd_qfma_f32(vacc0x4567, va0, vb4567);
        vacc1x4567 = psimd_qfma_f32(vacc1x4567, va1, vb4567);
        vacc2x4567 = psimd_qfma_f32(vacc2x4567, va2, vb4567);
        vacc3x4567 = psimd_qfma_f32(vacc3x4567, va3, vb4567);
        vacc4x4567 = psimd_qfma_f32(vacc4x4567, va4, vb4567);
        vacc5x4567 = psimd_qfma_f32(vacc5x4567, va5, vb4567);

        k -= sizeof(float);
      } while (k != 0);
    }

    const psimd_f32 vmax = psimd_load_splat_f32(&params->scalar.max);
    vacc0x0123 = psimd_min_f32(vacc0x0123, vmax);
    vacc1x0123 = psimd_min_f32(vacc1x0123, vmax);
    vacc2x0123 = psimd_min_f32(vacc2x0123, vmax);
    vacc3x0123 = psimd_min_f32(vacc3x0123, vmax);
    vacc4x0123 = psimd_min_f32(vacc4x0123, vmax);
    vacc5x0123 = psimd_min_f32(vacc5x0123, vmax);
    vacc0x4567 = psimd_min_f32(vacc0x4567, vmax);
    vacc1x4567 = psimd_min_f32(vacc1x4567, vmax);
    vacc2x4567 = psimd_min_f32(vacc2x4567, vmax);
    vacc3x4567 = psimd_min_f32(vacc3x4567, vmax);
    vacc4x4567 = psimd_min_f32(vacc4x4567, vmax);
    vacc5x4567 = psimd_min_f32(vacc5x4567, vmax);

    const psimd_f32 vmin = psimd_load_splat_f32(&params->scalar.min);
    vacc0x0123 = psimd_max_f32(vacc0x0123, vmin);
    vacc1x0123 = psimd_max_f32(vacc1x0123, vmin);
    vacc2x0123 = psimd_max_f32(vacc2x0123, vmin);
    vacc3x0123 = psimd_max_f32(vacc3x0123, vmin);
    vacc4x0123 = psimd_max_f32(vacc4x0123, vmin);
    vacc5x0123 = psimd_max_f32(vacc5x0123, vmin);
    vacc0x4567 = psimd_max_f32(vacc0x4567, vmin);
    vacc1x4567 = psimd_max_f32(vacc1x4567, vmin);
    vacc2x4567 = psimd_max_f32(vacc2x4567, vmin);
    vacc3x4567 = psimd_max_f32(vacc3x4567, vmin);
    vacc4x4567 = psimd_max_f32(vacc4x4567, vmin);
    vacc5x4567 = psimd_max_f32(vacc5x4567, vmin);

    if XNN_LIKELY(nc >= 8) {
      psimd_store_f32(c5, vacc5x0123);
      psimd_store_f32(c5 + 4, vacc5x4567);
      c5 = (float*) ((uintptr_t) c5 + cn_stride);
      psimd_store_f32(c4, vacc4x0123);
      psimd_store_f32(c4 + 4, vacc4x4567);
      c4 = (float*) ((uintptr_t) c4 + cn_stride);
      psimd_store_f32(c3, vacc3x0123);
      psimd_store_f32(c3 + 4, vacc3x4567);
      c3 = (float*) ((uintptr_t) c3 + cn_stride);
      psimd_store_f32(c2, vacc2x0123);
      psimd_store_f32(c2 + 4, vacc2x4567);
      c2 = (float*) ((uintptr_t) c2 + cn_stride);
      psimd_store_f32(c1, vacc1x0123);
      psimd_store_f32(c1 + 4, vacc1x4567);
      c1 = (float*) ((uintptr_t) c1 + cn_stride);
      psimd_store_f32(c0, vacc0x0123);
      psimd_store_f32(c0 + 4, vacc0x4567);
      c0 = (float*) ((uintptr_t) c0 + cn_stride);

      a5 = (const float*) ((uintptr_t) a5 - kc);
      a4 = (const float*) ((uintptr_t) a4 - kc);
      a3 = (const float*) ((uintptr_t) a3 - kc);
      a2 = (const float*) ((uintptr_t) a2 - kc);
      a1 = (const float*) ((uintptr_t) a1 - kc);
      a0 = (const float*) ((uintptr_t) a0 - kc);

      nc -= 8;
    } else {
      if (nc & 4) {
        psimd_store_f32(c5, vacc5x0123);
        psimd_store_f32(c4, vacc4x0123);
        psimd_store_f32(c3, vacc3x0123);
        psimd_store_f32(c2, vacc2x0123);
        psimd_store_f32(c1, vacc1x0123);
        psimd_store_f32(c0, vacc0x0123);

        vacc5x0123 = vacc5x4567;
        vacc4x0123 = vacc4x4567;
        vacc3x0123 = vacc3x4567;
        vacc2x0123 = vacc2x4567;
        vacc1x0123 = vacc1x4567;
        vacc0x0123 = vacc0x4567;

        c5 += 4;
        c4 += 4;
        c3 += 4;
        c2 += 4;
        c1 += 4;
        c0 += 4;
      }
      if (nc & 2) {
        psimd_store2_f32(c5, vacc5x0123);
        psimd_store2_f32(c4, vacc4x0123);
        psimd_store2_f32(c3, vacc3x0123);
        psimd_store2_f32(c2, vacc2x0123);
        psimd_store2_f32(c1, vacc1x0123);
        psimd_store2_f32(c0, vacc0x0123);

        vacc5x0123 = psimd_concat_hi_f32(vacc5x0123, vacc5x0123);
        vacc4x0123 = psimd_concat_hi_f32(vacc4x0123, vacc4x0123);
        vacc3x0123 = psimd_concat_hi_f32(vacc3x0123, vacc3x0123);
        vacc2x0123 = psimd_concat_hi_f32(vacc2x0123, vacc2x0123);
        vacc1x0123 = psimd_concat_hi_f32(vacc1x0123, vacc1x0123);
        vacc0x0123 = psimd_concat_hi_f32(vacc0x0123, vacc0x0123);

        c5 += 2;
        c4 += 2;
        c3 += 2;
        c2 += 2;
        c1 += 2;
        c0 += 2;
      }
      if (nc & 1) {
        psimd_store1_f32(c5, vacc5x0123);
        psimd_store1_f32(c4, vacc4x0123);
        psimd_store1_f32(c3, vacc3x0123);
        psimd_store1_f32(c2, vacc2x0123);
        psimd_store1_f32(c1, vacc1x0123);
        psimd_store1_f32(c0, vacc0x0123);
      }

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