// Auto-generated file. Do not edit!
//   Template: src/f32-gemm/psimd-splat.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_6x8__psimd_splat(
    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)) {
      const psimd_f32 va0 = psimd_load_f32(a0);
      a0 += 4;
      const psimd_f32 va1 = psimd_load_f32(a1);
      a1 += 4;
      const psimd_f32 va2 = psimd_load_f32(a2);
      a2 += 4;
      const psimd_f32 va3 = psimd_load_f32(a3);
      a3 += 4;
      const psimd_f32 va4 = psimd_load_f32(a4);
      a4 += 4;
      const psimd_f32 va5 = psimd_load_f32(a5);
      a5 += 4;

      const psimd_f32 va0c0 = psimd_splat0_f32(va0);
      const psimd_f32 va1c0 = psimd_splat0_f32(va1);
      const psimd_f32 va2c0 = psimd_splat0_f32(va2);
      const psimd_f32 va3c0 = psimd_splat0_f32(va3);
      const psimd_f32 va4c0 = psimd_splat0_f32(va4);
      const psimd_f32 va5c0 = psimd_splat0_f32(va5);

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

      vacc0x0123 = psimd_qfma_f32(vacc0x0123, va0c0, vb0123c0);
      vacc1x0123 = psimd_qfma_f32(vacc1x0123, va1c0, vb0123c0);
      vacc2x0123 = psimd_qfma_f32(vacc2x0123, va2c0, vb0123c0);
      vacc3x0123 = psimd_qfma_f32(vacc3x0123, va3c0, vb0123c0);
      vacc4x0123 = psimd_qfma_f32(vacc4x0123, va4c0, vb0123c0);
      vacc5x0123 = psimd_qfma_f32(vacc5x0123, va5c0, vb0123c0);
      vacc0x4567 = psimd_qfma_f32(vacc0x4567, va0c0, vb4567c0);
      vacc1x4567 = psimd_qfma_f32(vacc1x4567, va1c0, vb4567c0);
      vacc2x4567 = psimd_qfma_f32(vacc2x4567, va2c0, vb4567c0);
      vacc3x4567 = psimd_qfma_f32(vacc3x4567, va3c0, vb4567c0);
      vacc4x4567 = psimd_qfma_f32(vacc4x4567, va4c0, vb4567c0);
      vacc5x4567 = psimd_qfma_f32(vacc5x4567, va5c0, vb4567c0);
      const psimd_f32 va0c1 = psimd_splat1_f32(va0);
      const psimd_f32 va1c1 = psimd_splat1_f32(va1);
      const psimd_f32 va2c1 = psimd_splat1_f32(va2);
      const psimd_f32 va3c1 = psimd_splat1_f32(va3);
      const psimd_f32 va4c1 = psimd_splat1_f32(va4);
      const psimd_f32 va5c1 = psimd_splat1_f32(va5);

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

      vacc0x0123 = psimd_qfma_f32(vacc0x0123, va0c1, vb0123c1);
      vacc1x0123 = psimd_qfma_f32(vacc1x0123, va1c1, vb0123c1);
      vacc2x0123 = psimd_qfma_f32(vacc2x0123, va2c1, vb0123c1);
      vacc3x0123 = psimd_qfma_f32(vacc3x0123, va3c1, vb0123c1);
      vacc4x0123 = psimd_qfma_f32(vacc4x0123, va4c1, vb0123c1);
      vacc5x0123 = psimd_qfma_f32(vacc5x0123, va5c1, vb0123c1);
      vacc0x4567 = psimd_qfma_f32(vacc0x4567, va0c1, vb4567c1);
      vacc1x4567 = psimd_qfma_f32(vacc1x4567, va1c1, vb4567c1);
      vacc2x4567 = psimd_qfma_f32(vacc2x4567, va2c1, vb4567c1);
      vacc3x4567 = psimd_qfma_f32(vacc3x4567, va3c1, vb4567c1);
      vacc4x4567 = psimd_qfma_f32(vacc4x4567, va4c1, vb4567c1);
      vacc5x4567 = psimd_qfma_f32(vacc5x4567, va5c1, vb4567c1);
      const psimd_f32 va0c2 = psimd_splat2_f32(va0);
      const psimd_f32 va1c2 = psimd_splat2_f32(va1);
      const psimd_f32 va2c2 = psimd_splat2_f32(va2);
      const psimd_f32 va3c2 = psimd_splat2_f32(va3);
      const psimd_f32 va4c2 = psimd_splat2_f32(va4);
      const psimd_f32 va5c2 = psimd_splat2_f32(va5);

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

      vacc0x0123 = psimd_qfma_f32(vacc0x0123, va0c2, vb0123c2);
      vacc1x0123 = psimd_qfma_f32(vacc1x0123, va1c2, vb0123c2);
      vacc2x0123 = psimd_qfma_f32(vacc2x0123, va2c2, vb0123c2);
      vacc3x0123 = psimd_qfma_f32(vacc3x0123, va3c2, vb0123c2);
      vacc4x0123 = psimd_qfma_f32(vacc4x0123, va4c2, vb0123c2);
      vacc5x0123 = psimd_qfma_f32(vacc5x0123, va5c2, vb0123c2);
      vacc0x4567 = psimd_qfma_f32(vacc0x4567, va0c2, vb4567c2);
      vacc1x4567 = psimd_qfma_f32(vacc1x4567, va1c2, vb4567c2);
      vacc2x4567 = psimd_qfma_f32(vacc2x4567, va2c2, vb4567c2);
      vacc3x4567 = psimd_qfma_f32(vacc3x4567, va3c2, vb4567c2);
      vacc4x4567 = psimd_qfma_f32(vacc4x4567, va4c2, vb4567c2);
      vacc5x4567 = psimd_qfma_f32(vacc5x4567, va5c2, vb4567c2);
      const psimd_f32 va0c3 = psimd_splat3_f32(va0);
      const psimd_f32 va1c3 = psimd_splat3_f32(va1);
      const psimd_f32 va2c3 = psimd_splat3_f32(va2);
      const psimd_f32 va3c3 = psimd_splat3_f32(va3);
      const psimd_f32 va4c3 = psimd_splat3_f32(va4);
      const psimd_f32 va5c3 = psimd_splat3_f32(va5);

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

      vacc0x0123 = psimd_qfma_f32(vacc0x0123, va0c3, vb0123c3);
      vacc1x0123 = psimd_qfma_f32(vacc1x0123, va1c3, vb0123c3);
      vacc2x0123 = psimd_qfma_f32(vacc2x0123, va2c3, vb0123c3);
      vacc3x0123 = psimd_qfma_f32(vacc3x0123, va3c3, vb0123c3);
      vacc4x0123 = psimd_qfma_f32(vacc4x0123, va4c3, vb0123c3);
      vacc5x0123 = psimd_qfma_f32(vacc5x0123, va5c3, vb0123c3);
      vacc0x4567 = psimd_qfma_f32(vacc0x4567, va0c3, vb4567c3);
      vacc1x4567 = psimd_qfma_f32(vacc1x4567, va1c3, vb4567c3);
      vacc2x4567 = psimd_qfma_f32(vacc2x4567, va2c3, vb4567c3);
      vacc3x4567 = psimd_qfma_f32(vacc3x4567, va3c3, vb4567c3);
      vacc4x4567 = psimd_qfma_f32(vacc4x4567, va4c3, vb4567c3);
      vacc5x4567 = psimd_qfma_f32(vacc5x4567, va5c3, 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);
}
