// 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/vlshift.h>


void xnn_s16_vlshift_ukernel__scalar_x${BATCH_TILE}(
    size_t batch,
    const int16_t* input,
    int16_t* output,
    uint32_t shift)
{
  assert(batch != 0);
  assert(input != NULL);
  assert(output != NULL);
  assert(shift < 16);

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

      $for C in range(BATCH_TILE):
        const uint16_t vout${C} = vi${C} << shift;

      $for C in range(BATCH_TILE):
        output[${C}] = (int16_t) vout${C};
      output += ${BATCH_TILE};
    }
 if XNN_UNLIKELY(batch != 0) {
   do {
     const uint16_t vi = (uint16_t) *input++;

     const uint16_t vout = vi << shift;

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