swar-sub-4x8b.c
1.75 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
61
62
63
64
65
66
67
68
69
70
71
72
73
/* Assembler needs option --has-swar */
//A: '--has-swar'
#include <stdint.h>
typedef unsigned int s4x8b __attribute__((subword(8)));
#define ALEN 40
uint8_t input_a[ALEN] = { 111, 91, 82, 178, 12, 161, 183, 93,
214, 179, 173, 247, 121, 253, 143, 139,
45, 28, 246, 117, 103, 205, 231, 240,
68, 221, 150, 5, 81, 47, 78, 74,
167, 203, 230, 184, 190, 65, 113, 199};
uint8_t input_b[ALEN] = { 191, 122, 238, 38, 8, 130, 249, 86,
62, 179, 56, 250, 193, 51, 174, 221,
228, 84, 25, 18, 180, 252, 125, 67,
119, 154, 169, 109, 148, 73, 46, 103,
29, 44, 247, 200, 95, 23, 192, 236};
uint8_t output_zU8[ALEN];
uint8_t output_zS4x8b[ALEN];
void do_as_uint8(void)
{
uint8_t *pa = input_a;
uint8_t *pb = input_b;
uint8_t *pz = output_zU8;
for(int i=0;i<ALEN;++i) {
pz[i] = pa[i] - pb[i];
}
}
void do_as_s4x8b(void)
{
s4x8b *pa = (s4x8b *)input_a;
s4x8b *pb = (s4x8b *)input_b;
s4x8b *pz = (s4x8b *)output_zS4x8b;
for(int i=0;i<ALEN/4;++i) {
pz[i] = pa[i] - pb[i];
}
}
int main(void)
{
int fail = 0;
/* clear results */
for(int i=0;i<ALEN;++i) {
output_zU8[i] = 0;
output_zS4x8b[i] = 0;
}
/* compute as separated U8 */
do_as_uint8();
/* compute as swar s4x8b */
do_as_s4x8b();
/* display variables */
// printf("Data before (a,b, z1, z2):\n");
// for(int i=0;i<ALEN;++i) {
// printf(" #%d: %u , %u , %u , %u\n", i, input_a[i], input_b[i], output_zU8[i], output_zS4x8b[i]);
// }
for(int i=0;i<ALEN;++i) {
if (output_zU8[i]!=output_zS4x8b[i]) {
fail++;
}
}
return fail;
}