swar-add.c 853 Bytes
////A: --has-swar
//C: -daiteq-swar-enable

// array of subword

#include <stdint.h>

#define DATA_SIZE        4

typedef unsigned int s10x3b __attribute__((subword(3)));


void do_10x3b_add(int n, s10x3b a[], s10x3b b[], s10x3b z[])
{
  for (int i=0;i<n;++i)
  {
    z[i] = a[i] + b[i];
  }
}

uint32_t data_a[DATA_SIZE] = {012345671234,011223344556,011111111111,037777777777};
uint32_t data_b[DATA_SIZE] = {013572460123,034567012345,023456712345,012345670123};
uint32_t data_z[DATA_SIZE];


void add_saturate(s10x3b a[], s10x3b b[], s10x3b z[])
{
  #pragma swar saturate
  for (int i=0;i<DATA_SIZE;++i) {
    z[i] = a[i] + b[i];
  }
}


int main(void)
{
  s10x3b *a, *b, *z;

  a = (s10x3b *)data_a;
  b = (s10x3b *)data_b;
  z = (s10x3b *)data_z;

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

  add_saturate(a,b,z);

  return 0;
}