// Copyright 2022 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 >= 1
#include <assert.h>
#include <stddef.h>
#include <stdint.h>

#include <xnnpack/math.h>
#include <xnnpack/vsquareabs.h>


void xnn_cs16_vsquareabs_ukernel__scalar_x${BATCH_TILE}(
    size_t batch,
    const int16_t* input,
    uint32_t* output) {

  assert(batch != 0);
  assert(input != NULL);
  assert(output != NULL);

  $if BATCH_TILE > 1:
    for (; batch >= ${BATCH_TILE}; batch -= ${BATCH_TILE}) {
      $for C in range(BATCH_TILE):
        const int32_t vr${C} = (int32_t) input[${C * 2}];
        const int32_t vi${C} = (int32_t) input[${C * 2 + 1}];
      input += ${BATCH_TILE} * 2;

      $for C in range(BATCH_TILE):
        const uint32_t vrsquare${C} = (uint32_t) (vr${C} * vr${C});
        const uint32_t visquare${C} = (uint32_t) (vi${C} * vi${C});

      $for C in range(BATCH_TILE):
        const uint32_t vout${C} = vrsquare${C} + visquare${C};

      $for C in range(BATCH_TILE):
        output[${C}] = vout${C};
      output += ${BATCH_TILE};
    }

  if XNN_UNLIKELY(batch != 0) {
    do {
      const int32_t vr = (int32_t) input[0];
      const int32_t vi = (int32_t) input[1];
      input += 2;

      const uint32_t vrsquare = (uint32_t) (vr * vr);
      const uint32_t visquare = (uint32_t) (vi * vi);

      const uint32_t vout = vrsquare + visquare;

      *output++ = vout;
    } while (--batch != 0);
  }
}
