// 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 BATCH_TILE % 4 == 0
$assert BATCH_TILE >= 4
$ABC = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
$assert OP in ["ABS", "NEG", "SQR"]
#include <assert.h>

#include <arm_neon.h>

#include <xnnpack/common.h>
#include <xnnpack/vunary.h>


$VOPQ_F32 = {
$  "ABS": lambda x: "vabsq_f32(%s)" % x,
$  "NEG": lambda x: "vnegq_f32(%s)" % x,
$  "SQR": lambda x: "vmulq_f32(%s, %s)" % (x, x),
$}[OP]
$PARAMS = {
$  "ABS": "const union xnn_f32_abs_params params[restrict XNN_MIN_ELEMENTS(1)]",
$  "NEG": "const union xnn_f32_neg_params params[restrict XNN_MIN_ELEMENTS(1)]",
$  "SQR": "const void* params",
$}[OP]
void xnn_f32_v${OP.lower()}_ukernel__neon_x${BATCH_TILE}(
    size_t n,
    const float* x,
    float* y,
    ${PARAMS}) XNN_DISABLE_TSAN
{
  assert(n != 0);
  assert(n % sizeof(float) == 0);
  assert(x != NULL);
  assert(y != NULL);

  for (; n >= ${BATCH_TILE} * sizeof(float); n -= ${BATCH_TILE} * sizeof(float)) {
    $for N in range(0, BATCH_TILE, 4):
      const float32x4_t vx${ABC[N:N+4]} = vld1q_f32(x); x += 4;

    $for N in range(0, BATCH_TILE, 4):
      const float32x4_t vy${ABC[N:N+4]} = ${VOPQ_F32("vx" + ABC[N:N+4])};

    $for N in range(0, BATCH_TILE, 4):
      vst1q_f32(y, vy${ABC[N:N+4]}); y += 4;
  }
  $if BATCH_TILE > 4:
    for (; n >= 4 * sizeof(float); n -= 4 * sizeof(float)) {
      const float32x4_t vx = vld1q_f32(x); x += 4;
      const float32x4_t vy = ${VOPQ_F32("vx")};
      vst1q_f32(y, vy); y += 4;
    }
  if XNN_UNLIKELY(n != 0) {
    const float32x4_t vx = vld1q_f32(x);
    const float32x4_t vy = ${VOPQ_F32("vx")};
    float32x2_t vy_lo = vget_low_f32(vy);
    if (n & (2 * sizeof(float))) {
      vst1_f32(y, vy_lo); y += 2;
      vy_lo = vget_high_f32(vy);
    }
    if (n & (1 * sizeof(float))) {
      vst1_lane_f32(y, vy_lo, 0);
    }
  }
}
