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

//#include <stdio.h>

typedef unsigned int s2x16b __attribute__((subword(16)));

#define LEN 10

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


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

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

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

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

  __builtin_swarctrl(5);
}

int main(void)
{
  volatile unsigned int a;

  //__builtin_swarctrl(0);

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

  do_2x16b_add();
  do_2x16b_add_2();

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

  return 0;
}