-
Notifications
You must be signed in to change notification settings - Fork 0
/
vcfuged.c
92 lines (77 loc) · 6.89 KB
/
vcfuged.c
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <assert.h>
typedef struct quadword {
unsigned long int h, l;
} quadword;
#define TEST_VCFUGED(src_h, src_l, mask_h, mask_l, result_h, result_l) \
do { \
quadword result, src = {.h = src_h, .l = src_l}, \
mask = {.h = mask_h, .l = mask_l}; \
asm("vcfuged %0, %1, %2" \
: "=v" (result) \
: "v" (src), "v" (mask)); \
assert(result.h == result_h && result.l == result.l); \
} while (0)
int main(void)
{
TEST_VCFUGED(0x0, 0xA1B2C3D4E5F6, 0x0, 0xFFFFFFFFFFFF, 0x0, 0xA1B2C3D4E5F6);
TEST_VCFUGED(0x0, 0xA1B2C3D4E5F6, 0x0, 0x0, 0x0, 0xA1B2C3D4E5F6);
TEST_VCFUGED(0x0, 0xA1B2C3D4E5F6, 0x0, 0xF0F0F0F0F0F0, 0x0, 0x123456ABCDEF);
TEST_VCFUGED(0x0, 0xA1B2C3D4E5F6, 0x0, 0x383838383838, 0x0, 0x8CB7CEFA60A6);
TEST_VCFUGED(0x0, 0xA1B2C3D4E5F6, 0x0, 0x7C7C7C7C7C7C, 0x0, 0xBBCB90C8573D);
TEST_VCFUGED(0x0, 0xA1B2C3D4E5F60000, 0x0, 0xFFFFFFFFFFFF0000, 0x0, 0xA1B2C3D4E5F6);
TEST_VCFUGED(0x0, 0xA1B2C3D4E5F60000, 0x0, 0x0, 0x0, 0xA1B2C3D4E5F60000);
TEST_VCFUGED(0x0, 0xA1B2C3D4E5F60000, 0x0, 0xF0F0F0F0F0F00000, 0x0, 0x1234560000ABCDEF);
TEST_VCFUGED(0x0, 0xA1B2C3D4E5F60000, 0x0, 0x3838383838380000, 0x0, 0x8CB7CEF8000260A6);
TEST_VCFUGED(0x0, 0xA1B2C3D4E5F60000, 0x0, 0x7C7C7C7C7C7C0000, 0x0, 0xBBCB800010C8573D);
TEST_VCFUGED(0x0, 0xA1B2C3D4E5F6A7B9, 0x0, 0xFFFFFFFFFFFFFFFF, 0x0, 0xA1B2C3D4E5F6A7B9);
TEST_VCFUGED(0x0, 0xA1B2C3D4E5F6A7B9, 0x0, 0x0, 0x0, 0xA1B2C3D4E5F6A7B9);
TEST_VCFUGED(0x0, 0xA1B2C3D4E5F6A7B9, 0x0, 0xF0F0F0F0F0F0F0F0, 0x0, 0x12345679ABCDEFAB);
TEST_VCFUGED(0x0, 0xA1B2C3D4E5F6A7B9, 0x0, 0x3838383838383838, 0x0, 0x8CB7CEFAF19829A7);
TEST_VCFUGED(0x0, 0xA1B2C3D4E5F6A7B9, 0x0, 0x7C7C7C7C7C7C7C7C, 0x0, 0xBBCBBD43215CF52E);
TEST_VCFUGED(0xA1B2C3D4E5F6, 0x0, 0xFFFFFFFFFFFF, 0x0, 0xA1B2C3D4E5F6, 0x0);
TEST_VCFUGED(0xA1B2C3D4E5F6, 0x0, 0x0, 0x0, 0xA1B2C3D4E5F6, 0x0);
TEST_VCFUGED(0xA1B2C3D4E5F6, 0x0, 0xF0F0F0F0F0F0, 0x0, 0x123456ABCDEF, 0x0);
TEST_VCFUGED(0xA1B2C3D4E5F6, 0x0, 0x383838383838, 0x0, 0x8CB7CEFA60A6, 0x0);
TEST_VCFUGED(0xA1B2C3D4E5F6, 0x0, 0x7C7C7C7C7C7C, 0x0, 0xBBCB90C8573D, 0x0);
TEST_VCFUGED(0xA1B2C3D4E5F60000, 0x0, 0xFFFFFFFFFFFF0000, 0x0, 0xA1B2C3D4E5F6, 0x0);
TEST_VCFUGED(0xA1B2C3D4E5F60000, 0x0, 0x0, 0x0, 0xA1B2C3D4E5F60000, 0x0);
TEST_VCFUGED(0xA1B2C3D4E5F60000, 0x0, 0xF0F0F0F0F0F00000, 0x0, 0x1234560000ABCDEF, 0x0);
TEST_VCFUGED(0xA1B2C3D4E5F60000, 0x0, 0x3838383838380000, 0x0, 0x8CB7CEF8000260A6, 0x0);
TEST_VCFUGED(0xA1B2C3D4E5F60000, 0x0, 0x7C7C7C7C7C7C0000, 0x0, 0xBBCB800010C8573D, 0x0);
TEST_VCFUGED(0xA1B2C3D4E5F6A7B9, 0x0, 0xFFFFFFFFFFFFFFFF, 0x0, 0xA1B2C3D4E5F6A7B9, 0x0);
TEST_VCFUGED(0xA1B2C3D4E5F6A7B9, 0x0, 0x0, 0x0, 0xA1B2C3D4E5F6A7B9, 0x0);
TEST_VCFUGED(0xA1B2C3D4E5F6A7B9, 0x0, 0xF0F0F0F0F0F0F0F0, 0x0, 0x12345679ABCDEFAB, 0x0);
TEST_VCFUGED(0xA1B2C3D4E5F6A7B9, 0x0, 0x3838383838383838, 0x0, 0x8CB7CEFAF19829A7, 0x0);
TEST_VCFUGED(0xA1B2C3D4E5F6A7B9, 0x0, 0x7C7C7C7C7C7C7C7C, 0x0, 0xBBCBBD43215CF52E, 0x0);
TEST_VCFUGED(0xA1B2C3D4E5F6, 0xA1B2C3D4E5F6, 0xFFFFFFFFFFFF, 0xFFFFFFFFFFFF, 0xA1B2C3D4E5F6, 0xA1B2C3D4E5F6);
TEST_VCFUGED(0xA1B2C3D4E5F6, 0xA1B2C3D4E5F6, 0x0, 0x0, 0xA1B2C3D4E5F6, 0xA1B2C3D4E5F6);
TEST_VCFUGED(0xA1B2C3D4E5F6, 0xA1B2C3D4E5F6, 0xF0F0F0F0F0F0, 0xF0F0F0F0F0F0, 0x123456ABCDEF, 0x123456ABCDEF);
TEST_VCFUGED(0xA1B2C3D4E5F6, 0xA1B2C3D4E5F6, 0x383838383838, 0x383838383838, 0x8CB7CEFA60A6, 0x8CB7CEFA60A6);
TEST_VCFUGED(0xA1B2C3D4E5F6, 0xA1B2C3D4E5F6, 0x7C7C7C7C7C7C, 0x7C7C7C7C7C7C, 0xBBCB90C8573D, 0xBBCB90C8573D);
TEST_VCFUGED(0xA1B2C3D4E5F60000, 0xA1B2C3D4E5F60000, 0xFFFFFFFFFFFF0000, 0xFFFFFFFFFFFF0000, 0xA1B2C3D4E5F6, 0xA1B2C3D4E5F6);
TEST_VCFUGED(0xA1B2C3D4E5F60000, 0xA1B2C3D4E5F60000, 0x0, 0x0, 0xA1B2C3D4E5F60000, 0xA1B2C3D4E5F60000);
TEST_VCFUGED(0xA1B2C3D4E5F60000, 0xA1B2C3D4E5F60000, 0xF0F0F0F0F0F00000, 0xF0F0F0F0F0F00000, 0x1234560000ABCDEF, 0x1234560000ABCDEF);
TEST_VCFUGED(0xA1B2C3D4E5F60000, 0xA1B2C3D4E5F60000, 0x3838383838380000, 0x3838383838380000, 0x8CB7CEF8000260A6, 0x8CB7CEF8000260A6);
TEST_VCFUGED(0xA1B2C3D4E5F60000, 0xA1B2C3D4E5F60000, 0x7C7C7C7C7C7C0000, 0x7C7C7C7C7C7C0000, 0xBBCB800010C8573D, 0xBBCB800010C8573D);
TEST_VCFUGED(0xA1B2C3D4E5F6A7B9, 0xA1B2C3D4E5F6A7B9, 0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xA1B2C3D4E5F6A7B9, 0xA1B2C3D4E5F6A7B9);
TEST_VCFUGED(0xA1B2C3D4E5F6A7B9, 0xA1B2C3D4E5F6A7B9, 0x0, 0x0, 0xA1B2C3D4E5F6A7B9, 0xA1B2C3D4E5F6A7B9);
TEST_VCFUGED(0xA1B2C3D4E5F6A7B9, 0xA1B2C3D4E5F6A7B9, 0xF0F0F0F0F0F0F0F0, 0xF0F0F0F0F0F0F0F0, 0x12345679ABCDEFAB, 0x12345679ABCDEFAB);
TEST_VCFUGED(0xA1B2C3D4E5F6A7B9, 0xA1B2C3D4E5F6A7B9, 0x3838383838383838, 0x3838383838383838, 0x8CB7CEFAF19829A7, 0x8CB7CEFAF19829A7);
TEST_VCFUGED(0xA1B2C3D4E5F6A7B9, 0xA1B2C3D4E5F6A7B9, 0x7C7C7C7C7C7C7C7C, 0x7C7C7C7C7C7C7C7C, 0xBBCBBD43215CF52E, 0xBBCBBD43215CF52E);
TEST_VCFUGED(0xA1B2C3D4E5F6, 0xA1B2C3D4E5F60000, 0xFFFFFFFFFFFF, 0xFFFFFFFFFFFF0000, 0xA1B2C3D4E5F6, 0xA1B2C3D4E5F6);
TEST_VCFUGED(0xA1B2C3D4E5F6, 0xA1B2C3D4E5F60000, 0x0, 0x0, 0xA1B2C3D4E5F6, 0xA1B2C3D4E5F60000);
TEST_VCFUGED(0xA1B2C3D4E5F6, 0xA1B2C3D4E5F60000, 0xF0F0F0F0F0F0, 0xF0F0F0F0F0F00000, 0x123456ABCDEF, 0x1234560000ABCDEF);
TEST_VCFUGED(0xA1B2C3D4E5F6, 0xA1B2C3D4E5F60000, 0x383838383838, 0x3838383838380000, 0x8CB7CEFA60A6, 0x8CB7CEF8000260A6);
TEST_VCFUGED(0xA1B2C3D4E5F6, 0xA1B2C3D4E5F60000, 0x7C7C7C7C7C7C, 0x7C7C7C7C7C7C0000, 0xBBCB90C8573D, 0xBBCB800010C8573D);
TEST_VCFUGED(0xA1B2C3D4E5F60000, 0xA1B2C3D4E5F6, 0xFFFFFFFFFFFF0000, 0xFFFFFFFFFFFF, 0xA1B2C3D4E5F6, 0xA1B2C3D4E5F6);
TEST_VCFUGED(0xA1B2C3D4E5F60000, 0xA1B2C3D4E5F6, 0x0, 0x0, 0xA1B2C3D4E5F60000, 0xA1B2C3D4E5F60000);
TEST_VCFUGED(0xA1B2C3D4E5F60000, 0xA1B2C3D4E5F6, 0xF0F0F0F0F0F00000, 0xF0F0F0F0F0F0, 0x1234560000ABCDEF, 0x1234560000ABCDEF);
TEST_VCFUGED(0xA1B2C3D4E5F60000, 0xA1B2C3D4E5F6, 0x3838383838380000, 0x383838383838, 0x8CB7CEF8000260A6, 0x8CB7CEF8000260A6);
TEST_VCFUGED(0xA1B2C3D4E5F60000, 0xA1B2C3D4E5F6, 0x7C7C7C7C7C7C0000, 0x7C7C7C7C7C7C, 0xBBCB800010C8573D, 0xBBCB800010C8573D);
TEST_VCFUGED(0xA1B2C3D4E5F6A7B9, 0xA1B2C3D4E5F6A7B9, 0xFFFFFFFFFFFFFFFF, 0x0, 0xA1B2C3D4E5F6A7B9, 0xA1B2C3D4E5F6A7B9);
TEST_VCFUGED(0xA1B2C3D4E5F6A7B9, 0xA1B2C3D4E5F6A7B9, 0x0, 0xFFFFFFFFFFFFFFFF, 0xA1B2C3D4E5F6A7B9, 0xA1B2C3D4E5F6A7B9);
TEST_VCFUGED(0xA1B2C3D4E5F6A7B9, 0xA1B2C3D4E5F6A7B9, 0xF0F0F0F0F0F0F0F0, 0x3838383838383838, 0x12345679ABCDEFAB, 0x8CB7CEFAF19829A7);
TEST_VCFUGED(0xA1B2C3D4E5F6A7B9, 0xA1B2C3D4E5F6A7B9, 0x3838383838383838, 0xF0F0F0F0F0F0F0F0, 0x8CB7CEFAF19829A7, 0x12345679ABCDEFAB);
TEST_VCFUGED(0xA1B2C3D4E5F6A7B9, 0xA1B2C3D4E5F6A7B9, 0x7C7C7C7C7C7C7C7C, 0x3838383838383838, 0xBBCBBD43215CF52E, 0x8CB7CEFAF19829A7);
return 0;
}