swar64-4x16b-pragma.c 1.06 KB
////A: --has-swar
//C: -daiteq-swar-enable

//#include <stdio.h>

typedef unsigned long s4x16b __attribute__((subword(16)));

#define LEN 10

unsigned long data_a[LEN] = {1,2,3,4,5,6,7,8,9,10};
unsigned long data_b[LEN] = {10,20,30,40,50,60,70,80,90,100};
unsigned long data_z[LEN] = {0,0,0,0,0,0,0,0,0,0};


void do_4x16b_add(void)
{
//  #pragma swar saturate
  s4x16b *a = (s4x16b *)data_a;
  s4x16b *b = (s4x16b *)data_b;
  s4x16b *z = (s4x16b *)data_z;

  for (int i=0;i<LEN;++i)
  {
    z[i] = a[i] + b[i];
  }
}

void do_4x16b_add_2(void)
{
  #pragma swar saturate
  s4x16b *a = (s4x16b *)data_a;
  s4x16b *b = (s4x16b *)data_b;
  s4x16b *z = (s4x16b *)data_z;

  z[1] = a[1] + b[1];

  __builtin_swarctrl(5);
}

int main(void)
{
  volatile unsigned long a;

  //__builtin_swarctrl(0);

  a = __builtin_swaraccum(0);
  a = __builtin_swaraccum(1);
  a = __builtin_swaraccum(2);
  a = __builtin_swaraccum(3);

  do_4x16b_add();
  do_4x16b_add_2();

  a = __builtin_swaraccum(0);
  a = __builtin_swaraccum(1);
  a = __builtin_swaraccum(2);
  a = __builtin_swaraccum(3);

  return 0;
}