/*

Copyright (c) 2009, 2010, 2011 STMicroelectronics
Written by Christophe Lyon

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

*/

#define INSN_NAME vqadd
#define TEST_MSG "VQADD/VQADDQ"

/* Extra tests for functions requiring types larger than 64 bits to
   compute saturation */
void vqadd_64(void);
#define EXTRA_TESTS vqadd_64

#include "ref_v_binary_sat_op.c"

void vqadd_64(void)
{
  int i;

  DECL_VARIABLE_ALL_VARIANTS(vector1);
  DECL_VARIABLE_ALL_VARIANTS(vector2);
  DECL_VARIABLE_ALL_VARIANTS(vector_res);

  /* Initialize input "vector1" from "buffer"  */
  TEST_MACRO_ALL_VARIANTS_2_5(TEST_VLOAD, vector1, buffer);

  TEST_VDUP(vector2, , int, s, 64, 1, 0x0);
  TEST_VDUP(vector2, , uint, u, 64, 1, 0x0);
  TEST_VDUP(vector2, q, int, s, 64, 2, 0x0);
  TEST_VDUP(vector2, q, uint, u, 64, 2, 0x0);

  fprintf(ref_file, "\n%s 64 bits saturation overflow output:\n", TEST_MSG);
  TEST_BINARY_SAT_OP(INSN_NAME, , int, s, 64, 1);
  TEST_BINARY_SAT_OP(INSN_NAME, , uint, u, 64, 1);
  TEST_BINARY_SAT_OP(INSN_NAME, q, int, s, 64, 2);
  TEST_BINARY_SAT_OP(INSN_NAME, q, uint, u, 64, 2);

  fprintf(ref_file, "\n64 bits saturation:\n");
  DUMP(TEST_MSG, int, 64, 1, PRIx64);
  DUMP(TEST_MSG, uint, 64, 1, PRIx64);
  DUMP(TEST_MSG, int, 64, 2, PRIx64);
  DUMP(TEST_MSG, uint, 64, 2, PRIx64);

  /* Another set of tests */
  TEST_VDUP(vector2, , int, s, 64, 1, 0x44);
  TEST_VDUP(vector2, , uint, u, 64, 1, 0x88);
  TEST_VDUP(vector2, q, int, s, 64, 2, 0x44);
  TEST_VDUP(vector2, q, uint, u, 64, 2, 0x88);

  fprintf(ref_file, "\n%s 64 bits saturation overflow output:\n", TEST_MSG);
  TEST_BINARY_SAT_OP(INSN_NAME, , int, s, 64, 1);
  TEST_BINARY_SAT_OP(INSN_NAME, , uint, u, 64, 1);
  TEST_BINARY_SAT_OP(INSN_NAME, q, int, s, 64, 2);
  TEST_BINARY_SAT_OP(INSN_NAME, q, uint, u, 64, 2);

  DUMP(TEST_MSG, int, 64, 1, PRIx64);
  DUMP(TEST_MSG, uint, 64, 1, PRIx64);
  DUMP(TEST_MSG, int, 64, 2, PRIx64);
  DUMP(TEST_MSG, uint, 64, 2, PRIx64);

  /* Another set of tests */
  TEST_VDUP(vector2, , int, s, 64, 1, 0x8000000000000003LL);
  TEST_VDUP(vector2, , uint, u, 64, 1, 0x88);

  TEST_VDUP(vector1, q, int, s, 64, 2, 0x4000000000000000LL);
  TEST_VDUP(vector2, q, int, s, 64, 2, 0x4000000000000000LL);

  TEST_VDUP(vector2, q, uint, u, 64, 2, 0x22);

  fprintf(ref_file, "\n%s 64 bits saturation overflow output:\n", TEST_MSG);
  TEST_BINARY_SAT_OP(INSN_NAME, , int, s, 64, 1);
  TEST_BINARY_SAT_OP(INSN_NAME, , uint, u, 64, 1);
  TEST_BINARY_SAT_OP(INSN_NAME, q, int, s, 64, 2);
  TEST_BINARY_SAT_OP(INSN_NAME, q, uint, u, 64, 2);

  DUMP(TEST_MSG, int, 64, 1, PRIx64);
  DUMP(TEST_MSG, uint, 64, 1, PRIx64);
  DUMP(TEST_MSG, int, 64, 2, PRIx64);
  DUMP(TEST_MSG, uint, 64, 2, PRIx64);

  /* To improve coverage, check saturation with less than 64 bits too */
  TEST_VDUP(vector2, , int, s, 8, 8, 0x81);
  TEST_VDUP(vector2, , int, s, 16, 4, 0x8001);
  TEST_VDUP(vector2, , int, s, 32, 2, 0x80000001);
  TEST_VDUP(vector2, q, int, s, 8, 16, 0x81);
  TEST_VDUP(vector2, q, int, s, 16, 8, 0x8001);
  TEST_VDUP(vector2, q, int, s, 32, 4, 0x80000001);

  fprintf(ref_file, "\nless than 64 bits saturation:\n");
  TEST_BINARY_SAT_OP(INSN_NAME, , int, s, 8, 8);
  TEST_BINARY_SAT_OP(INSN_NAME, , int, s, 16, 4);
  TEST_BINARY_SAT_OP(INSN_NAME, , int, s, 32, 2);
  TEST_BINARY_SAT_OP(INSN_NAME, q, int, s, 8, 16);
  TEST_BINARY_SAT_OP(INSN_NAME, q, int, s, 16, 8);
  TEST_BINARY_SAT_OP(INSN_NAME, q, int, s, 32, 4);

  DUMP(TEST_MSG, int, 8, 8, PRIx8);
  DUMP(TEST_MSG, int, 16, 4, PRIx16);
  DUMP(TEST_MSG, int, 32, 2, PRIx32);
  DUMP(TEST_MSG, int, 8, 16, PRIx8);
  DUMP(TEST_MSG, int, 16, 8, PRIx16);
  DUMP(TEST_MSG, int, 32, 4, PRIx32);

  TEST_VDUP(vector1, , uint, u, 8, 8, 0xF0);
  TEST_VDUP(vector1, , uint, u, 16, 4, 0xFFF0);
  TEST_VDUP(vector1, , uint, u, 32, 2, 0xFFFFFFF0);
  TEST_VDUP(vector1, q, uint, u, 8, 16, 0xF0);
  TEST_VDUP(vector1, q, uint, u, 16, 8, 0xFFF0);
  TEST_VDUP(vector1, q, uint, u, 32, 4, 0xFFFFFFF0);

  TEST_VDUP(vector2, , uint, u, 8, 8, 0x20);
  TEST_VDUP(vector2, , uint, u, 16, 4, 0x20);
  TEST_VDUP(vector2, , uint, u, 32, 2, 0x20);
  TEST_VDUP(vector2, q, uint, u, 8, 16, 0x20);
  TEST_VDUP(vector2, q, uint, u, 16, 8, 0x20);
  TEST_VDUP(vector2, q, uint, u, 32, 4, 0x20);

  fprintf(ref_file, "\n%s less than 64 bits saturation overflow output:\n",
	  TEST_MSG);
  TEST_BINARY_SAT_OP(INSN_NAME, , uint, u, 8, 8);
  TEST_BINARY_SAT_OP(INSN_NAME, , uint, u, 16, 4);
  TEST_BINARY_SAT_OP(INSN_NAME, , uint, u, 32, 2);
  TEST_BINARY_SAT_OP(INSN_NAME, q, uint, u, 8, 16);
  TEST_BINARY_SAT_OP(INSN_NAME, q, uint, u, 16, 8);
  TEST_BINARY_SAT_OP(INSN_NAME, q, uint, u, 32, 4);

  DUMP(TEST_MSG, uint, 8, 8, PRIx8);
  DUMP(TEST_MSG, uint, 16, 4, PRIx16);
  DUMP(TEST_MSG, uint, 32, 2, PRIx32);
  DUMP(TEST_MSG, uint, 8, 16, PRIx8);
  DUMP(TEST_MSG, uint, 16, 8, PRIx16);
  DUMP(TEST_MSG, uint, 32, 4, PRIx32);
}
