// Auto-generated file. Do not edit!
//   Template: src/f32-gemm/neon-shuffle.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 <arm_neon.h>

#include <xnnpack/gemm.h>


void xnn_f32_gemminc_ukernel_8x8s4__neonfma(
    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_output_params params[restrict static 1])
{
  assert(mr != 0);
  assert(mr <= 8);
  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;
  }
  const float* a6 = (const float*) ((uintptr_t) a5 + a_stride);
  float* c6 = (float*) ((uintptr_t) c5 + cm_stride);
  if XNN_UNPREDICTABLE(mr <= 6) {
    a6 = a5;
    c6 = c5;
  }
  const float* a7 = (const float*) ((uintptr_t) a6 + a_stride);
  float* c7 = (float*) ((uintptr_t) c6 + cm_stride);
  if XNN_UNPREDICTABLE(mr != 8) {
    a7 = a6;
    c7 = c6;
  }

  do {
    float32x4_t vacc0x0123 = vld1q_f32(acc); acc += 4;
    float32x4_t vacc0x4567 = vld1q_f32(acc); acc += 4;
    float32x4_t vacc1x0123 = vld1q_f32(acc); acc += 4;
    float32x4_t vacc1x4567 = vld1q_f32(acc); acc += 4;
    float32x4_t vacc2x0123 = vld1q_f32(acc); acc += 4;
    float32x4_t vacc2x4567 = vld1q_f32(acc); acc += 4;
    float32x4_t vacc3x0123 = vld1q_f32(acc); acc += 4;
    float32x4_t vacc3x4567 = vld1q_f32(acc); acc += 4;
    float32x4_t vacc4x0123 = vld1q_f32(acc); acc += 4;
    float32x4_t vacc4x4567 = vld1q_f32(acc); acc += 4;
    float32x4_t vacc5x0123 = vld1q_f32(acc); acc += 4;
    float32x4_t vacc5x4567 = vld1q_f32(acc); acc += 4;
    float32x4_t vacc6x0123 = vld1q_f32(acc); acc += 4;
    float32x4_t vacc6x4567 = vld1q_f32(acc); acc += 4;
    float32x4_t vacc7x0123 = vld1q_f32(acc); acc += 4;
    float32x4_t vacc7x4567 = vld1q_f32(acc); acc += 4;

    size_t k = kc;
    while (k >= 4 * sizeof(float)) {
      float32x4_t va0 = vld1q_f32(a0); a0 += 4;
      float32x4_t va1 = vld1q_f32(a1); a1 += 4;
      float32x4_t va2 = vld1q_f32(a2); a2 += 4;
      float32x4_t va3 = vld1q_f32(a3); a3 += 4;
      float32x4_t va4 = vld1q_f32(a4); a4 += 4;
      float32x4_t va5 = vld1q_f32(a5); a5 += 4;
      float32x4_t va6 = vld1q_f32(a6); a6 += 4;
      float32x4_t va7 = vld1q_f32(a7); a7 += 4;


      const float32x4_t vb0123c0 = vld1q_f32(w + 0);
      const float32x4_t vb4567c0 = vld1q_f32(w + 4);

      vacc0x0123 = vfmaq_f32(vacc0x0123, va0, vb0123c0);
      vacc1x0123 = vfmaq_f32(vacc1x0123, va1, vb0123c0);
      vacc2x0123 = vfmaq_f32(vacc2x0123, va2, vb0123c0);
      vacc3x0123 = vfmaq_f32(vacc3x0123, va3, vb0123c0);
      vacc4x0123 = vfmaq_f32(vacc4x0123, va4, vb0123c0);
      vacc5x0123 = vfmaq_f32(vacc5x0123, va5, vb0123c0);
      vacc6x0123 = vfmaq_f32(vacc6x0123, va6, vb0123c0);
      vacc7x0123 = vfmaq_f32(vacc7x0123, va7, vb0123c0);
      vacc0x4567 = vfmaq_f32(vacc0x4567, va0, vb4567c0);
      vacc1x4567 = vfmaq_f32(vacc1x4567, va1, vb4567c0);
      vacc2x4567 = vfmaq_f32(vacc2x4567, va2, vb4567c0);
      vacc3x4567 = vfmaq_f32(vacc3x4567, va3, vb4567c0);
      vacc4x4567 = vfmaq_f32(vacc4x4567, va4, vb4567c0);
      vacc5x4567 = vfmaq_f32(vacc5x4567, va5, vb4567c0);
      vacc6x4567 = vfmaq_f32(vacc6x4567, va6, vb4567c0);
      vacc7x4567 = vfmaq_f32(vacc7x4567, va7, vb4567c0);

      va0 = vextq_f32(va0, va0, 1);
      va1 = vextq_f32(va1, va1, 1);
      va2 = vextq_f32(va2, va2, 1);
      va3 = vextq_f32(va3, va3, 1);
      va4 = vextq_f32(va4, va4, 1);
      va5 = vextq_f32(va5, va5, 1);
      va6 = vextq_f32(va6, va6, 1);
      va7 = vextq_f32(va7, va7, 1);

      const float32x4_t vb0123c1 = vld1q_f32(w + 8);
      const float32x4_t vb4567c1 = vld1q_f32(w + 12);

      vacc0x0123 = vfmaq_f32(vacc0x0123, va0, vb0123c1);
      vacc1x0123 = vfmaq_f32(vacc1x0123, va1, vb0123c1);
      vacc2x0123 = vfmaq_f32(vacc2x0123, va2, vb0123c1);
      vacc3x0123 = vfmaq_f32(vacc3x0123, va3, vb0123c1);
      vacc4x0123 = vfmaq_f32(vacc4x0123, va4, vb0123c1);
      vacc5x0123 = vfmaq_f32(vacc5x0123, va5, vb0123c1);
      vacc6x0123 = vfmaq_f32(vacc6x0123, va6, vb0123c1);
      vacc7x0123 = vfmaq_f32(vacc7x0123, va7, vb0123c1);
      vacc0x4567 = vfmaq_f32(vacc0x4567, va0, vb4567c1);
      vacc1x4567 = vfmaq_f32(vacc1x4567, va1, vb4567c1);
      vacc2x4567 = vfmaq_f32(vacc2x4567, va2, vb4567c1);
      vacc3x4567 = vfmaq_f32(vacc3x4567, va3, vb4567c1);
      vacc4x4567 = vfmaq_f32(vacc4x4567, va4, vb4567c1);
      vacc5x4567 = vfmaq_f32(vacc5x4567, va5, vb4567c1);
      vacc6x4567 = vfmaq_f32(vacc6x4567, va6, vb4567c1);
      vacc7x4567 = vfmaq_f32(vacc7x4567, va7, vb4567c1);

      va0 = vextq_f32(va0, va0, 1);
      va1 = vextq_f32(va1, va1, 1);
      va2 = vextq_f32(va2, va2, 1);
      va3 = vextq_f32(va3, va3, 1);
      va4 = vextq_f32(va4, va4, 1);
      va5 = vextq_f32(va5, va5, 1);
      va6 = vextq_f32(va6, va6, 1);
      va7 = vextq_f32(va7, va7, 1);

      const float32x4_t vb0123c2 = vld1q_f32(w + 16);
      const float32x4_t vb4567c2 = vld1q_f32(w + 20);

      vacc0x0123 = vfmaq_f32(vacc0x0123, va0, vb0123c2);
      vacc1x0123 = vfmaq_f32(vacc1x0123, va1, vb0123c2);
      vacc2x0123 = vfmaq_f32(vacc2x0123, va2, vb0123c2);
      vacc3x0123 = vfmaq_f32(vacc3x0123, va3, vb0123c2);
      vacc4x0123 = vfmaq_f32(vacc4x0123, va4, vb0123c2);
      vacc5x0123 = vfmaq_f32(vacc5x0123, va5, vb0123c2);
      vacc6x0123 = vfmaq_f32(vacc6x0123, va6, vb0123c2);
      vacc7x0123 = vfmaq_f32(vacc7x0123, va7, vb0123c2);
      vacc0x4567 = vfmaq_f32(vacc0x4567, va0, vb4567c2);
      vacc1x4567 = vfmaq_f32(vacc1x4567, va1, vb4567c2);
      vacc2x4567 = vfmaq_f32(vacc2x4567, va2, vb4567c2);
      vacc3x4567 = vfmaq_f32(vacc3x4567, va3, vb4567c2);
      vacc4x4567 = vfmaq_f32(vacc4x4567, va4, vb4567c2);
      vacc5x4567 = vfmaq_f32(vacc5x4567, va5, vb4567c2);
      vacc6x4567 = vfmaq_f32(vacc6x4567, va6, vb4567c2);
      vacc7x4567 = vfmaq_f32(vacc7x4567, va7, vb4567c2);

      va0 = vextq_f32(va0, va0, 1);
      va1 = vextq_f32(va1, va1, 1);
      va2 = vextq_f32(va2, va2, 1);
      va3 = vextq_f32(va3, va3, 1);
      va4 = vextq_f32(va4, va4, 1);
      va5 = vextq_f32(va5, va5, 1);
      va6 = vextq_f32(va6, va6, 1);
      va7 = vextq_f32(va7, va7, 1);

      const float32x4_t vb0123c3 = vld1q_f32(w + 24);
      const float32x4_t vb4567c3 = vld1q_f32(w + 28);

      vacc0x0123 = vfmaq_f32(vacc0x0123, va0, vb0123c3);
      vacc1x0123 = vfmaq_f32(vacc1x0123, va1, vb0123c3);
      vacc2x0123 = vfmaq_f32(vacc2x0123, va2, vb0123c3);
      vacc3x0123 = vfmaq_f32(vacc3x0123, va3, vb0123c3);
      vacc4x0123 = vfmaq_f32(vacc4x0123, va4, vb0123c3);
      vacc5x0123 = vfmaq_f32(vacc5x0123, va5, vb0123c3);
      vacc6x0123 = vfmaq_f32(vacc6x0123, va6, vb0123c3);
      vacc7x0123 = vfmaq_f32(vacc7x0123, va7, vb0123c3);
      vacc0x4567 = vfmaq_f32(vacc0x4567, va0, vb4567c3);
      vacc1x4567 = vfmaq_f32(vacc1x4567, va1, vb4567c3);
      vacc2x4567 = vfmaq_f32(vacc2x4567, va2, vb4567c3);
      vacc3x4567 = vfmaq_f32(vacc3x4567, va3, vb4567c3);
      vacc4x4567 = vfmaq_f32(vacc4x4567, va4, vb4567c3);
      vacc5x4567 = vfmaq_f32(vacc5x4567, va5, vb4567c3);
      vacc6x4567 = vfmaq_f32(vacc6x4567, va6, vb4567c3);
      vacc7x4567 = vfmaq_f32(vacc7x4567, va7, vb4567c3);


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

        const float32x4_t vb0123 = vld1q_f32(w); w += 4;
        const float32x4_t vb4567 = vld1q_f32(w); w += 4;

        vacc0x0123 = vfmaq_f32(vacc0x0123, va0, vb0123);
        vacc1x0123 = vfmaq_f32(vacc1x0123, va1, vb0123);
        vacc2x0123 = vfmaq_f32(vacc2x0123, va2, vb0123);
        vacc3x0123 = vfmaq_f32(vacc3x0123, va3, vb0123);
        vacc4x0123 = vfmaq_f32(vacc4x0123, va4, vb0123);
        vacc5x0123 = vfmaq_f32(vacc5x0123, va5, vb0123);
        vacc6x0123 = vfmaq_f32(vacc6x0123, va6, vb0123);
        vacc7x0123 = vfmaq_f32(vacc7x0123, va7, vb0123);
        vacc0x4567 = vfmaq_f32(vacc0x4567, va0, vb4567);
        vacc1x4567 = vfmaq_f32(vacc1x4567, va1, vb4567);
        vacc2x4567 = vfmaq_f32(vacc2x4567, va2, vb4567);
        vacc3x4567 = vfmaq_f32(vacc3x4567, va3, vb4567);
        vacc4x4567 = vfmaq_f32(vacc4x4567, va4, vb4567);
        vacc5x4567 = vfmaq_f32(vacc5x4567, va5, vb4567);
        vacc6x4567 = vfmaq_f32(vacc6x4567, va6, vb4567);
        vacc7x4567 = vfmaq_f32(vacc7x4567, va7, vb4567);

        k -= sizeof(float);
      } while (k != 0);
    }
    const float32x4_t vmax = vld1q_dup_f32(&params->scalar.max);
    vacc0x0123 = vminq_f32(vacc0x0123, vmax);
    vacc1x0123 = vminq_f32(vacc1x0123, vmax);
    vacc2x0123 = vminq_f32(vacc2x0123, vmax);
    vacc3x0123 = vminq_f32(vacc3x0123, vmax);
    vacc4x0123 = vminq_f32(vacc4x0123, vmax);
    vacc5x0123 = vminq_f32(vacc5x0123, vmax);
    vacc6x0123 = vminq_f32(vacc6x0123, vmax);
    vacc7x0123 = vminq_f32(vacc7x0123, vmax);
    vacc0x4567 = vminq_f32(vacc0x4567, vmax);
    vacc1x4567 = vminq_f32(vacc1x4567, vmax);
    vacc2x4567 = vminq_f32(vacc2x4567, vmax);
    vacc3x4567 = vminq_f32(vacc3x4567, vmax);
    vacc4x4567 = vminq_f32(vacc4x4567, vmax);
    vacc5x4567 = vminq_f32(vacc5x4567, vmax);
    vacc6x4567 = vminq_f32(vacc6x4567, vmax);
    vacc7x4567 = vminq_f32(vacc7x4567, vmax);

    const float32x4_t vmin = vld1q_dup_f32(&params->scalar.min);
    vacc0x0123 = vmaxq_f32(vacc0x0123, vmin);
    vacc1x0123 = vmaxq_f32(vacc1x0123, vmin);
    vacc2x0123 = vmaxq_f32(vacc2x0123, vmin);
    vacc3x0123 = vmaxq_f32(vacc3x0123, vmin);
    vacc4x0123 = vmaxq_f32(vacc4x0123, vmin);
    vacc5x0123 = vmaxq_f32(vacc5x0123, vmin);
    vacc6x0123 = vmaxq_f32(vacc6x0123, vmin);
    vacc7x0123 = vmaxq_f32(vacc7x0123, vmin);
    vacc0x4567 = vmaxq_f32(vacc0x4567, vmin);
    vacc1x4567 = vmaxq_f32(vacc1x4567, vmin);
    vacc2x4567 = vmaxq_f32(vacc2x4567, vmin);
    vacc3x4567 = vmaxq_f32(vacc3x4567, vmin);
    vacc4x4567 = vmaxq_f32(vacc4x4567, vmin);
    vacc5x4567 = vmaxq_f32(vacc5x4567, vmin);
    vacc6x4567 = vmaxq_f32(vacc6x4567, vmin);
    vacc7x4567 = vmaxq_f32(vacc7x4567, vmin);

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

      a7 = (const float*) ((uintptr_t) a7 - kc);
      a6 = (const float*) ((uintptr_t) a6 - kc);
      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) {
        vst1q_f32(c7, vacc7x0123); c7 += 4;
        vst1q_f32(c6, vacc6x0123); c6 += 4;
        vst1q_f32(c5, vacc5x0123); c5 += 4;
        vst1q_f32(c4, vacc4x0123); c4 += 4;
        vst1q_f32(c3, vacc3x0123); c3 += 4;
        vst1q_f32(c2, vacc2x0123); c2 += 4;
        vst1q_f32(c1, vacc1x0123); c1 += 4;
        vst1q_f32(c0, vacc0x0123); c0 += 4;

        vacc7x0123 = vacc7x4567;
        vacc6x0123 = vacc6x4567;
        vacc5x0123 = vacc5x4567;
        vacc4x0123 = vacc4x4567;
        vacc3x0123 = vacc3x4567;
        vacc2x0123 = vacc2x4567;
        vacc1x0123 = vacc1x4567;
        vacc0x0123 = vacc0x4567;
      }
      float32x2_t vacc7x01 = vget_low_f32(vacc7x0123);
      float32x2_t vacc6x01 = vget_low_f32(vacc6x0123);
      float32x2_t vacc5x01 = vget_low_f32(vacc5x0123);
      float32x2_t vacc4x01 = vget_low_f32(vacc4x0123);
      float32x2_t vacc3x01 = vget_low_f32(vacc3x0123);
      float32x2_t vacc2x01 = vget_low_f32(vacc2x0123);
      float32x2_t vacc1x01 = vget_low_f32(vacc1x0123);
      float32x2_t vacc0x01 = vget_low_f32(vacc0x0123);
      if (nc & 2) {
        vst1_f32(c7, vacc7x01); c7 += 2;
        vst1_f32(c6, vacc6x01); c6 += 2;
        vst1_f32(c5, vacc5x01); c5 += 2;
        vst1_f32(c4, vacc4x01); c4 += 2;
        vst1_f32(c3, vacc3x01); c3 += 2;
        vst1_f32(c2, vacc2x01); c2 += 2;
        vst1_f32(c1, vacc1x01); c1 += 2;
        vst1_f32(c0, vacc0x01); c0 += 2;

        vacc7x01 = vget_high_f32(vacc7x0123);
        vacc6x01 = vget_high_f32(vacc6x0123);
        vacc5x01 = vget_high_f32(vacc5x0123);
        vacc4x01 = vget_high_f32(vacc4x0123);
        vacc3x01 = vget_high_f32(vacc3x0123);
        vacc2x01 = vget_high_f32(vacc2x0123);
        vacc1x01 = vget_high_f32(vacc1x0123);
        vacc0x01 = vget_high_f32(vacc0x0123);
      }
      if (nc & 1) {
        vst1_lane_f32(c7, vacc7x01, 0);
        vst1_lane_f32(c6, vacc6x01, 0);
        vst1_lane_f32(c5, vacc5x01, 0);
        vst1_lane_f32(c4, vacc4x01, 0);
        vst1_lane_f32(c3, vacc3x01, 0);
        vst1_lane_f32(c2, vacc2x01, 0);
        vst1_lane_f32(c1, vacc1x01, 0);
        vst1_lane_f32(c0, vacc0x01, 0);
      }

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