/* { dg-do run } */
/* { dg-require-effective-target p8vector_hw } */
/* { dg-require-effective-target int128 } */
/* { dg-options "-mdejagnu-cpu=power8 -O3" } */

#include <stdint.h>
#include <stdio.h>
#include <inttypes.h>
#include <altivec.h>

#define TRUE 1
#define FALSE 0

#ifdef DEBUG
#include <stdio.h>
#endif

void abort (void);

int result_wrong_sc (vector signed char vec_expected,
		     vector signed char vec_actual)
{
  int i;

  for (i = 0; i < 16; i++)
    if (vec_expected[i] != vec_actual[i])
      return TRUE;

  return FALSE;
}

void print_sc (vector signed char vec_expected,
	       vector signed char vec_actual)
{
  int i;

  printf("expected signed char data\n");
  for (i = 0; i < 16; i++)
    printf(" %d,", vec_expected[i]);

  printf("\nactual signed char data\n");
  for (i = 0; i < 16; i++)
    printf(" %d,", vec_actual[i]);
  printf("\n");
}

int result_wrong_uc (vector unsigned char vec_expected,
		     vector unsigned char vec_actual)
{
  int i;

  for (i = 0; i < 16; i++)
    if (vec_expected[i] != vec_actual[i])
      return TRUE;

  return FALSE;
}

void print_uc (vector unsigned char vec_expected,
	       vector unsigned char vec_actual)
{
  int i;

  printf("expected unsigned char data\n");
  for (i = 0; i < 16; i++)
    printf(" %d,", vec_expected[i]);

  printf("\nactual unsigned char data\n");
  for (i = 0; i < 16; i++)
    printf(" %d,", vec_actual[i]);
  printf("\n");
}

int result_wrong_us (vector unsigned short vec_expected,
		     vector unsigned short vec_actual)
{
  int i;

  for (i = 0; i < 8; i++)
    if (vec_expected[i] != vec_actual[i])
      return TRUE;

  return FALSE;
}

void print_us (vector unsigned short vec_expected,
	       vector unsigned short vec_actual)
{
  int i;

  printf("expected unsigned short data\n");
  for (i = 0; i < 8; i++)
    printf(" %d,", vec_expected[i]);

  printf("\nactual unsigned short data\n");
  for (i = 0; i < 8; i++)
    printf(" %d,", vec_actual[i]);
  printf("\n");
}

int result_wrong_ss (vector signed short vec_expected,
		     vector signed short vec_actual)
{
  int i;

  for (i = 0; i < 8; i++)
    if (vec_expected[i] != vec_actual[i])
      return TRUE;

  return FALSE;
}

void print_ss (vector signed short vec_expected,
	       vector signed short vec_actual)
{
  int i;

  printf("expected signed short data\n");
  for (i = 0; i < 8; i++)
    printf(" %d,", vec_expected[i]);

  printf("\nactual signed short data\n");
  for (i = 0; i < 8; i++)
    printf(" %d,", vec_actual[i]);
  printf("\n");
}

int result_wrong_ui (vector unsigned int vec_expected,
		     vector unsigned int vec_actual)
{
  int i;

  for (i = 0; i < 4; i++)
    if (vec_expected[i] != vec_actual[i])
      return TRUE;

  return FALSE;
}

void print_ui (vector unsigned int vec_expected,
	       vector unsigned int vec_actual)
{
  int i;

  printf("expected unsigned int data\n");
  for (i = 0; i < 4; i++)
    printf(" %d,", vec_expected[i]);

  printf("\nactual unsigned int data\n");
  for (i = 0; i < 4; i++)
    printf(" %d,", vec_actual[i]);
  printf("\n");
}

int result_wrong_si (vector signed int vec_expected,
		     vector signed int vec_actual)
{
  int i;

  for (i = 0; i < 4; i++)
    if (vec_expected[i] != vec_actual[i])
      return TRUE;

  return FALSE;
}

void print_si (vector signed int vec_expected,
	       vector signed int vec_actual)
{
  int i;

  printf("expected signed int data\n");
  for (i = 0; i < 4; i++)
    printf(" %d,", vec_expected[i]);

  printf("\nactual signed int data\n");
  for (i = 0; i < 4; i++)
    printf(" %d,", vec_actual[i]);
  printf("\n");
}

int result_wrong_ull (vector unsigned long long vec_expected,
		      vector unsigned long long vec_actual)
{
  int i;

  for (i = 0; i < 2; i++)
    if (vec_expected[i] != vec_actual[i])
      return TRUE;

  return FALSE;
}

void print_ull (vector unsigned long long vec_expected,
		vector unsigned long long vec_actual)
{
  int i;

  printf("expected unsigned long long data\n");
  for (i = 0; i < 2; i++)
    printf(" %llu,", vec_expected[i]);

  printf("\nactual unsigned long long data\n");
  for (i = 0; i < 2; i++)
    printf(" %llu,", vec_actual[i]);
  printf("\n");
}

int result_wrong_sll (vector signed long long vec_expected,
		      vector signed long long vec_actual)
{
  int i;

  for (i = 0; i < 2; i++)
    if (vec_expected[i] != vec_actual[i])
      return TRUE;

  return FALSE;
}

void print_sll (vector signed long long vec_expected,
		vector signed long long vec_actual)
{
  int i;

  printf("expected signed long long data\n");
  for (i = 0; i < 2; i++)
    printf(" %lld,", vec_expected[i]);

  printf("\nactual signed long long data\n");
  for (i = 0; i < 2; i++)
    printf(" %lld,", vec_actual[i]);
  printf("\n");
}

int result_wrong_u128 (vector __uint128_t vec_expected,
		       vector __uint128_t vec_actual)
{
  int i;

    if (vec_expected[0] != vec_actual[0])
      return TRUE;

  return FALSE;
}

void print_u128 (vector __uint128_t vec_expected,
		 vector __uint128_t vec_actual)
{
  printf("expected uint128 data\n");
  printf(" %llu%llu\n", (unsigned long long)(vec_expected[0] >> 64),
	 (unsigned long long)(vec_expected[0] & 0xFFFFFFFFFFFFFFFF));

  printf("\nactual uint128 data\n");
  printf(" %llu%llu\n", (unsigned long long)(vec_actual[0] >> 64),
	 (unsigned long long)(vec_actual[0] & 0xFFFFFFFFFFFFFFFF));
}


int result_wrong_s128 (vector __int128_t vec_expected,
		       vector __int128_t vec_actual)
{
  int i;

    if (vec_expected[0] != vec_actual[0])
      return TRUE;

  return FALSE;
}

void print_s128 (vector __int128 vec_expected,
		 vector __int128 vec_actual)
{
  printf("expected int128 data\n");
  printf(" %lld%llu\n", (signed long long)(vec_expected[0] >> 64),
	 (unsigned long long)(vec_expected[0] & 0xFFFFFFFFFFFFFFFF));

  printf("\nactual int128 data\n");
  printf(" %lld%llu\n", (signed long long)(vec_actual[0] >> 64),
	 (unsigned long long)(vec_actual[0] & 0xFFFFFFFFFFFFFFFF));
}

int result_wrong_d (vector double vec_expected,
		    vector double vec_actual)
{
  int i;

  for (i = 0; i < 2; i++)
    if (vec_expected[i] != vec_actual[i])
      return TRUE;

  return FALSE;
}

void print_d (vector double vec_expected,
	      vector double vec_actual)
{
  int i;

  printf("expected double data\n");
  for (i = 0; i < 2; i++)
    printf(" %f,", vec_expected[i]);

  printf("\nactual double data\n");
  for (i = 0; i < 2; i++)
    printf(" %f,", vec_actual[i]);
  printf("\n");
}

int result_wrong_f (vector float vec_expected,
		    vector float vec_actual)
{
  int i;

  for (i = 0; i < 4; i++)
    if (vec_expected[i] != vec_actual[i])
      return TRUE;

  return FALSE;
}

void print_f (vector float vec_expected,
	      vector float vec_actual)
{
  int i;

  printf("expected float data\n");
  for (i = 0; i < 4; i++)
    printf(" %f,", vec_expected[i]);

  printf("\nactual float data\n");
  for (i = 0; i < 4; i++)
    printf(" %f,", vec_actual[i]);
  printf("\n");
}

int main() {
   int i, j;
   size_t len;
   vector signed char store_data_sc;
   vector unsigned char store_data_uc;
   vector signed int store_data_si;
   vector unsigned int store_data_ui;
   vector __int128_t store_data_s128;
   vector __uint128_t store_data_u128;
   vector signed long long int store_data_sll;
   vector unsigned long long int store_data_ull;
   vector signed short store_data_ss;
   vector unsigned short store_data_us;
   vector double store_data_d;
   vector float store_data_f;

   signed char *address_sc;
   unsigned char *address_uc;
   signed int *address_si;
   unsigned int *address_ui;
   __int128_t *address_s128;
   __uint128_t *address_u128;
   signed long long int *address_sll;
   unsigned long long int *address_ull;
   signed short int *address_ss;
   unsigned short int *address_us;
   double *address_d;
   float *address_f;

   vector unsigned char *datap;

   vector unsigned char vec_uc_expected1, vec_uc_result1;
   vector signed char vec_sc_expected1, vec_sc_result1;
   vector signed int vec_si_expected1, vec_si_result1;
   vector unsigned int vec_ui_expected1, vec_ui_result1;
   vector __int128_t vec_s128_expected1, vec_s128_result1;
   vector __uint128_t vec_u128_expected1, vec_u128_result1;
   vector signed long long int vec_sll_expected1, vec_sll_result1;
   vector unsigned long long int vec_ull_expected1, vec_ull_result1;
   vector signed short int vec_ss_expected1, vec_ss_result1;
   vector unsigned short int vec_us_expected1, vec_us_result1;
   vector double vec_d_expected1, vec_d_result1;
   vector float vec_f_expected1, vec_f_result1;

   signed long long disp;

   /* VEC_XST */
   disp = 0;
   vec_sc_expected1 = (vector signed char){ -7, -6, -5, -4, -3, -2, -1, 0,
					    1, 2, 3, 4, 5, 6, 7, 8 };
   store_data_sc = (vector signed char){  -7, -6, -5, -4, -3, -2, -1, 0,
					  1, 2, 3, 4, 5, 6, 7, 8 };

   for (i=0; i<16; i++)
     vec_sc_result1[i] = 0;

   address_sc = &vec_sc_result1[0];

   vec_xst (store_data_sc, disp, address_sc);

   if (result_wrong_sc (vec_sc_expected1, vec_sc_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst, sc disp = 0, result does not match expected result\n");
       print_sc (vec_sc_expected1, vec_sc_result1);
#else
       abort();
#endif
     }

   disp = 2;
   vec_sc_expected1 = (vector signed char){  0, 0, -7, -6, -5, -4, -3, -2,
					     -1, 0, 1, 2, 3, 4, 5, 6 };
   store_data_sc = (vector signed char){ -7, -6, -5, -4, -3, -2, -1, 0,
					 1, 2, 3, 4, 5, 6, 7, 8 };

   for (i=0; i<16; i++)
     vec_sc_result1[i] = 0;

   address_sc = &vec_sc_result1[0];

   vec_xst (store_data_sc, disp, address_sc);

   if (result_wrong_sc (vec_sc_expected1, vec_sc_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst, sc disp = 2, result does not match expected result\n");
       print_sc (vec_sc_expected1, vec_sc_result1);
#else
       abort();
#endif
     }

   disp = 0;
   vec_uc_expected1 = (vector unsigned char){ 0, 1, 2, 3, 4, 5, 6, 7,
					      8, 9, 10, 11, 12, 13, 14, 15 };
   store_data_uc = (vector unsigned char){ 0, 1, 2, 3, 4, 5, 6, 7,
					   8, 9, 10, 11, 12, 13, 14, 15 };

   for (i=0; i<16; i++)
     vec_uc_result1[i] = 0;

   address_uc = &vec_uc_result1[0];

   vec_xst (store_data_uc, disp, address_uc);

   if (result_wrong_uc (vec_uc_expected1, vec_uc_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst, uc disp = 0, result does not match expected result\n");
       print_uc (vec_uc_expected1, vec_uc_result1);
#else
       abort();
#endif
     }

   disp = 0;
   vec_ss_expected1 = (vector signed short int){ -4, -3, -2, -1, 0, 1, 2, 3 };
   store_data_ss = (vector signed short int){ -4, -3, -2, -1, 0, 1, 2, 3 };

   for (i=0; i<8; i++)
     vec_ss_result1[i] = 0;

   address_ss = &vec_ss_result1[0];

   vec_xst (store_data_ss, disp, address_ss);

   if (result_wrong_ss (vec_ss_expected1, vec_ss_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst, ss disp = 0, result does not match expected result\n");
       print_ss (vec_ss_expected1, vec_ss_result1);
#else
       abort();
#endif
     }

   disp = 0;
   vec_us_expected1 = (vector unsigned short int){ 0, 1, 2, 3, 4, 5, 6, 7 };
   store_data_us = (vector unsigned short int){ 0, 1, 2, 3, 4, 5, 6, 7 };

   for (i=0; i<8; i++)
     vec_us_result1[i] = 0;

   address_us = &vec_us_result1[0];

   vec_xst (store_data_us, disp, address_us);

   if (result_wrong_us (vec_us_expected1, vec_us_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst, us disp = 0, result does not match expected result\n");
       print_us (vec_us_expected1, vec_us_result1);
#else
       abort();
#endif
     }

   disp = 0;
   vec_si_expected1 = (vector signed int){ -2, -1, 0, 1 };
   store_data_si = (vector signed int){ -2, -1, 0, 1 };

   for (i=0; i<4; i++)
     vec_si_result1[i] = 0;

   address_si = &vec_si_result1[0];

   vec_xst (store_data_si, disp, address_si);

   if (result_wrong_si (vec_si_expected1, vec_si_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst, si disp = 0, result does not match expected result\n");
       print_si (vec_si_expected1, vec_si_result1);
#else
       abort();
#endif
     }

   disp = 0;
   vec_ui_expected1 = (vector unsigned int){ -2, -1, 0, 1 };
   store_data_ui = (vector unsigned int){ -2, -1, 0, 1 };

   for (i=0; i<4; i++)
     vec_ui_result1[i] = 0;

   address_ui = &vec_ui_result1[0];

   vec_xst (store_data_ui, disp, address_ui);

   if (result_wrong_ui (vec_ui_expected1, vec_ui_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst, ui disp = 0, result does not match expected result\n");
       print_ui (vec_ui_expected1, vec_ui_result1);
#else
       abort();
#endif
     }

   disp = 0;
   vec_sll_expected1 = (vector signed long long){ -1, 0 };
   store_data_sll = (vector signed long long ){ -1, 0 };

   for (i=0; i<2; i++)
     vec_sll_result1[i] = 0;

   address_sll = (signed long long *)(&vec_sll_result1[0]);

   vec_xst (store_data_sll, disp, address_sll);

   if (result_wrong_sll (vec_sll_expected1, vec_sll_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst, sll disp = 0, result does not match expected result\n");
       print_sll (vec_sll_expected1, vec_sll_result1);
#else
       abort();
#endif
     }

   disp = 0;
   vec_ull_expected1 = (vector unsigned long long){ 0, 1 };
   store_data_ull = (vector unsigned long long){  0, 1 };

   for (i=0; i<2; i++)
     vec_ull_result1[i] = 0;

   address_ull = (unsigned long long int *)(&vec_ull_result1[0]);

   vec_xst (store_data_ull, disp, address_ull);

   if (result_wrong_ull (vec_ull_expected1, vec_ull_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst, ull disp = 0, result does not match expected result\n");
       print_ull (vec_ull_expected1, vec_ull_result1);
#else
       abort();
#endif
     }

   disp = 0;
   vec_s128_expected1 = (vector __int128_t){ 12345 };
   store_data_s128 = (vector __int128_t){  12345 };

   vec_s128_result1[0] = 0;

   address_s128 = (__int128_t *)(&vec_s128_result1[0]);

   vec_xst (store_data_s128, disp, address_s128);

   if (result_wrong_s128 (vec_s128_expected1, vec_s128_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst, s128 disp = 0, result does not match expected result\n");
       print_s128 (vec_s128_expected1, vec_s128_result1);
#else
       abort();
#endif
     }

   disp = 0;
   vec_u128_expected1 = (vector __uint128_t){ 12345 };
   store_data_u128 = (vector __uint128_t){  12345 };

   vec_u128_result1[0] = 0;

   address_u128 = (__int128_t *)(&vec_u128_result1[0]);

   vec_xst (store_data_u128, disp, address_u128);

   if (result_wrong_u128 (vec_u128_expected1, vec_u128_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst, u128 disp = 0, result does not match expected result\n");
       print_u128 (vec_u128_expected1, vec_u128_result1);
#else
       abort();
#endif
     }

   disp = 0;
   vec_d_expected1 = (vector double){ 0, 1 };
   store_data_d = (vector double){  0, 1 };

   for (i=0; i<2; i++)
     vec_d_result1[i] = 0;

   address_d = (double *)(&vec_d_result1[0]);

   vec_xst (store_data_d, disp, address_d);

   if (result_wrong_d (vec_d_expected1, vec_d_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst, double disp = 0, result does not match expected result\n");
       print_d (vec_d_expected1, vec_d_result1);
#else
       abort();
#endif
     }

   disp = 0;
   vec_f_expected1 = (vector float){ 0, 1 };
   store_data_f = (vector float){  0, 1 };

   for (i=0; i<4; i++)
     vec_f_result1[i] = 0;

   address_f = (float *)(&vec_f_result1[0]);

   vec_xst (store_data_f, disp, address_f);

   if (result_wrong_f (vec_f_expected1, vec_f_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst, float disp = 0, result does not match expected result\n");
       print_f (vec_f_expected1, vec_f_result1);
#else
       abort();
#endif
     }

   /* VEC_XST_BE, these always load in BE order regardless of
      machine endianess.  */
   disp = 0;
#ifdef __BIG_ENDIAN__
   vec_sc_expected1 = (vector signed char){ -7, -6, -5, -4, -3, -2, -1, 0,
					    1, 2, 3, 4, 5, 6, 7, 8 };
#else
   vec_sc_expected1 = (vector signed char){ 8, 7, 6, 5, 4, 3, 2, 1,
					    0, -1, -2, -3, -4, -5, -6, -7 };
#endif
   store_data_sc = (vector signed char){  -7, -6, -5, -4, -3, -2, -1, 0,
					  1, 2, 3, 4, 5, 6, 7, 8 };

   for (i=0; i<16; i++)
     vec_sc_result1[i] = 0;

   address_sc = &vec_sc_result1[0];

   vec_xst_be (store_data_sc, disp, address_sc);

   if (result_wrong_sc (vec_sc_expected1, vec_sc_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst_be, sc disp = 0, result does not match expected result\n");
       print_sc (vec_sc_expected1, vec_sc_result1);
#else
       abort();
#endif
     }

   disp = 2;
#ifdef __BIG_ENDIAN__
   vec_sc_expected1 = (vector signed char){  0, 0, -7, -6, -5, -4, -3, -2,
					     -1, 0, 1, 2, 3, 4, 5, 6 };
#else
   vec_sc_expected1 = (vector signed char){  0, 0, 8, 7, 6, 5, 4, 3,
					     2, 1, 0, -1, -2, -3, -4, -5 };
#endif
   store_data_sc = (vector signed char){ -7, -6, -5, -4, -3, -2, -1, 0,
					 1, 2, 3, 4, 5, 6, 7, 8 };

   for (i=0; i<16; i++)
     vec_sc_result1[i] = 0;

   address_sc = &vec_sc_result1[0];

   vec_xst_be (store_data_sc, disp, address_sc);

   if (result_wrong_sc (vec_sc_expected1, vec_sc_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst_be, sc disp = 2, result does not match expected result\n");
       print_sc (vec_sc_expected1, vec_sc_result1);
#else
       abort();
#endif
     }

   disp = 0;
#ifdef __BIG_ENDIAN__
   vec_uc_expected1 = (vector unsigned char){ 0, 1, 2, 3, 4, 5, 6, 7,
					      8, 9, 10, 11, 12, 13, 14, 15 };
#else
   vec_uc_expected1 = (vector unsigned char){ 15, 14, 13, 12, 11, 10, 9, 8,
					      7, 6, 5, 4, 3, 2, 1 };
#endif
   store_data_uc = (vector unsigned char){ 0, 1, 2, 3, 4, 5, 6, 7,
					   8, 9, 10, 11, 12, 13, 14, 15 };

   for (i=0; i<16; i++)
     vec_uc_result1[i] = 0;

   address_uc = &vec_uc_result1[0];

   vec_xst_be (store_data_uc, disp, address_uc);

   if (result_wrong_uc (vec_uc_expected1, vec_uc_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst_be, uc disp = 0, result does not match expected result\n");
       print_uc (vec_uc_expected1, vec_uc_result1);
#else
       abort();
#endif
     }

   disp = 8;
#ifdef __BIG_ENDIAN__
   vec_si_expected1 = (vector signed int){  0, 0, -8, -7 };
#else
   vec_si_expected1 = (vector signed int){  0, 0, -5, -6 };
#endif
   store_data_si = (vector signed int){ -8, -7, -6, -5 };

   for (i=0; i<4; i++)
     vec_si_result1[i] = 0;

   address_si = &vec_si_result1[0];

   vec_xst_be (store_data_si, disp, address_si);

   if (result_wrong_si (vec_si_expected1, vec_si_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst_be, si disp = %d, result does not match expected result\n", disp);
       print_si (vec_si_expected1, vec_si_result1);
#else
       abort();
#endif
     }

   disp = 0;
#ifdef __BIG_ENDIAN__
   vec_ui_expected1 = (vector unsigned int){ 0, 1, 2, 3 };
#else
   vec_ui_expected1 = (vector unsigned int){ 3, 2, 1, 0 };
#endif
   store_data_ui = (vector unsigned int){ 0, 1, 2, 3 };

   for (i=0; i<4; i++)
     vec_ui_result1[i] = 0;

   address_ui = &vec_ui_result1[0];

   vec_xst_be (store_data_ui, disp, address_ui);

   if (result_wrong_ui (vec_ui_expected1, vec_ui_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst_be, ui disp = 0, result does not match expected result\n");
       print_ui (vec_ui_expected1, vec_ui_result1);
#else
       abort();
#endif
     }

   disp = 0;
#ifdef __BIG_ENDIAN__
   vec_ss_expected1 = (vector signed short int){ -4, -3, -2, -1, 0, 1, 2, 3 };
#else
   vec_ss_expected1 = (vector signed short int){ 3, 2, 1, 0, -1, -2, -3, -4 };
#endif
   store_data_ss = (vector signed short int){ -4, -3, -2, -1, 0, 1, 2, 3 };

   for (i=0; i<8; i++)
     vec_ss_result1[i] = 0;

   address_ss = &vec_ss_result1[0];

   vec_xst_be (store_data_ss, disp, address_ss);

   if (result_wrong_ss (vec_ss_expected1, vec_ss_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst_be, ss disp = 0, result does not match expected result\n");
       print_ss (vec_ss_expected1, vec_ss_result1);
#else
       abort();
#endif
     }

   disp = 0;
#ifdef __BIG_ENDIAN__
   vec_us_expected1 = (vector unsigned short int){ 0, 1, 2, 3, 4, 5, 6, 7 };
#else
   vec_us_expected1 = (vector unsigned short int){ 7, 6, 5, 4, 3, 2, 1, 0 };
#endif
   store_data_us = (vector unsigned short int){ 0, 1, 2, 3, 4, 5, 6, 7 };

   for (i=0; i<8; i++)
     vec_us_result1[i] = 0;

   address_us = &vec_us_result1[0];

   vec_xst_be (store_data_us, disp, address_us);

   if (result_wrong_us (vec_us_expected1, vec_us_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst_be, us disp = 0, result does not match expected result\n");
       print_us (vec_us_expected1, vec_us_result1);
#else
       abort();
#endif
     }

#if 0
   disp = 0;
#ifdef __BIG_ENDIAN__
   vec_si_expected1 = (vector signed int){ -2, -1, 0, 1 };
#else
   vec_si_expected1 = (vector signed int){ 1, 0, -1, -2 };
#endif
   store_data_si = (vector signed int){ -2, -1, 0, 1 };

   for (i=0; i<4; i++)
     vec_si_result1[i] = 0;

   address_si = &vec_si_result1[0];

   vec_xst_be (store_data_si, disp, address_si);
   if (result_wrong_si (vec_si_expected1, vec_si_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst_be, si disp = 0, result does not match expected result\n");
       print_si (vec_si_expected1, vec_si_result1);
#else
       abort();
#endif
     }
#endif

#if 0
   disp = 0;
#ifdef __BIG_ENDIAN__
   vec_ui_expected1 = (vector unsigned int){ -2, -1, 0, 1 };
#else
   vec_ui_expected1 = (vector unsigned int){ 1, 0, -1, -2 };
#endif
   store_data_ui = (vector unsigned int){ -2, -1, 0, 1 };

   for (i=0; i<4; i++)
     vec_ui_result1[i] = 0;

   address_ui = &vec_ui_result1[0];

   vec_xst_be (store_data_ui, disp, address_ui);

   if (result_wrong_ui (vec_ui_expected1, vec_ui_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst_be, ui disp = 0, result does not match expected result\n");
       print_ui (vec_ui_expected1, vec_ui_result1);
#else
       abort();
#endif
     }
#endif
   
   disp = 0;
#ifdef __BIG_ENDIAN__
   vec_sll_expected1 = (vector signed long long){ -1, 0 };
#else
   vec_sll_expected1 = (vector signed long long){ 0, -1 };
#endif
   store_data_sll = (vector signed long long ){ -1, 0 };

   for (i=0; i<2; i++)
     vec_sll_result1[i] = 0;

   address_sll = (signed long long *)(&vec_sll_result1[0]);

   vec_xst_be (store_data_sll, disp, address_sll);

   if (result_wrong_sll (vec_sll_expected1, vec_sll_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst_be, sll disp = 0, result does not match expected result\n");
       print_sll (vec_sll_expected1, vec_sll_result1);
#else
       abort();
#endif
     }

   disp = 0;
#ifdef __BIG_ENDIAN__
   vec_ull_expected1 = (vector unsigned long long){ 0, 1234567890123456 };
#else
   vec_ull_expected1 = (vector unsigned long long){1234567890123456, 0 };
#endif   
   store_data_ull = (vector unsigned long long){  0, 1234567890123456 };

   for (i=0; i<2; i++)
     vec_ull_result1[i] = 0;

   address_ull = (unsigned long long int *)(&vec_ull_result1[0]);

   vec_xst_be (store_data_ull, disp, address_ull);

   if (result_wrong_ull (vec_ull_expected1, vec_ull_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst_be, ull disp = 0, result does not match expected result\n");
       print_ull (vec_ull_expected1, vec_ull_result1);
#else
       abort();
#endif
     }

   disp = 0;

#ifdef __BIG_ENDIAN__
   vec_s128_expected1 = (vector __int128_t){ (__uint128_t)12345678911121314 };
#else
   vec_s128_expected1 = (vector __int128_t){ (__uint128_t)12345678911121314 };
#endif
   store_data_s128 = (vector __int128_t)(__uint128_t){  12345678911121314 };

   vec_s128_result1[0] = 0;

   address_s128 = (__int128_t *)(&vec_s128_result1[0]);

   vec_xst_be (store_data_s128, disp, address_s128);

   if (result_wrong_s128 (vec_s128_expected1, vec_s128_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst_be, s128 disp = 0, result does not match expected result\n");
       print_s128 (vec_s128_expected1, vec_s128_result1);
#else
       abort();
#endif
     }

   disp = 0;
#ifdef __BIG_ENDIAN__
   vec_u128_expected1 = (vector __uint128_t){ (__uint128_t)1234567891112131415 };
#else
   vec_u128_expected1 = (vector __uint128_t){ (__uint128_t)1234567891112131415 };
#endif
   store_data_u128 = (vector __uint128_t){ (__uint128_t)1234567891112131415 };

   vec_u128_result1[0] = 0;

   address_u128 = (__int128_t *)(&vec_u128_result1[0]);

   vec_xst_be (store_data_u128, disp, address_u128);

   if (result_wrong_u128 (vec_u128_expected1, vec_u128_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst_be, u128 disp = 0, result does not match expected result\n");
       print_u128 (vec_u128_expected1, vec_u128_result1);
#else
       abort();
#endif
     }

   disp = 0;
#ifdef __BIG_ENDIAN__
   vec_d_expected1 = (vector double){ 0.0, 1.1 };
#else
   vec_d_expected1 = (vector double){ 1.1, 0.0 };
#endif
   store_data_d = (vector double){  0.0, 1.1 };

   for (i=0; i<2; i++)
     vec_d_result1[i] = 0;

   address_d = (double *)(&vec_d_result1[0]);

   vec_xst_be (store_data_d, disp, address_d);

   if (result_wrong_d (vec_d_expected1, vec_d_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst_be, double disp = 0, result does not match expected result\n");
       print_d (vec_d_expected1, vec_d_result1);
#else
       abort();
#endif
     }

   disp = 0;
#ifdef __BIG_ENDIAN__
   vec_f_expected1 = (vector float){ 0.0, 1.2, 2.3, 3.4 };
#else
   vec_f_expected1 = (vector float){ 3.4, 2.3, 1.2, 0.0 };
#endif
   store_data_f = (vector float){ 0.0, 1.2, 2.3, 3.4 };

   for (i=0; i<4; i++)
     vec_f_result1[i] = 0;

   address_f = (float *)(&vec_f_result1[0]);

   vec_xst_be (store_data_f, disp, address_f);

   if (result_wrong_f (vec_f_expected1, vec_f_result1))
     {
#ifdef DEBUG
       printf("Error: vec_xst_be, float disp = 0, result does not match expected result\n");
       print_f (vec_f_expected1, vec_f_result1);
#else
       abort();
#endif
     }
}
