swar-2x16b-pragma.c
1.06 KB
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
55
56
57
58
59
60
//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;
}