swar-c99-6.10.6-pragma.c
1009 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
//A: --has-swar
//C: -daiteq-swar-enable
//#include <stdio.h>
typedef unsigned int s4x8b __attribute__((subword(8)));
#define LEN 12
unsigned char data_a[LEN] = {1,2,3,4,5,6,7,8,9,10,11,12};
unsigned char data_b[LEN] = {10,20,30,40,50,60,70,80,90,100,110,120};
unsigned char data_z[LEN] = {0,0,0,0,0,0,0,0,0,0,0,0};
void do_4x8b_add(void)
{
s4x8b *a = (s4x8b *)data_a;
s4x8b *b = (s4x8b *)data_b;
s4x8b *z = (s4x8b *)data_z;
#pragma swar normalize
z[0] = a[0] + b[0];
z[2] = a[2] + b[4];
z[4] = a[4] + b[4];
{
#pragma swar saturate
z[6] = a[6] + b[6];
#pragma swar manual
z[8] = a[8] + b[8];
z[10] = a[10] + b[10];
}
}
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_4x8b_add();
a = __builtin_swaraccum(0);
a = __builtin_swaraccum(1);
a = __builtin_swaraccum(2);
a = __builtin_swaraccum(3);
return 0;
}