annotate test/test_align.h @ 23:e26874655738

*: huge refactor, new major release (hahaha) I keep finding things that are broken... The problem NOW was that vec would unintentionally build some functions with extended instruction sets, which is Bad and would mean that for all intents and purposes the CPU detection was completely broken. Now vec is no longer header only either. Boohoo. However this gives a lot more flexibility to vec since we no longer want or need to care about C++ crap. The NEON and Altivec implementations have not been updated which means they won't compile hence why they're commented out in the cmake build file.
author Paper <paper@tflc.us>
date Sun, 24 Nov 2024 02:52:40 -0500
parents 41dd962abdd1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
1 static int test_align(void)
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
2 {
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
3 int ret = 0;
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
4
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
5 #define RUN_TEST(sign, csign, bits, size) \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
6 do { \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
7 /* allocate the aligned array */ \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
8 V##csign##INT##bits##x##size##_ALIGNED_ARRAY(vec_arr); \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
9 \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
10 /* fill the values */ \
13
53197dbf4e8e vec.h: initial refactor for runtime SSE and stuff
Paper <paper@tflc.us>
parents: 9
diff changeset
11 for (int i = 0; i < size; i++) \
3
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
12 vec_arr[i] = i; \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
13 \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
14 /* try to load it */ \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
15 v##sign##int##bits##x##size vec = v##sign##int##bits##x##size##_load_aligned(vec_arr); \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
16 \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
17 /* now allocate an output array */ \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
18 V##csign##INT##bits##x##size##_ALIGNED_ARRAY(vec_arr_out); \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
19 \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
20 /* try storing it */ \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
21 v##sign##int##bits##x##size##_store_aligned(vec, vec_arr_out); \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
22 \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
23 /* mark success or failure */ \
13
53197dbf4e8e vec.h: initial refactor for runtime SSE and stuff
Paper <paper@tflc.us>
parents: 9
diff changeset
24 ret |= !!memcmp(vec_arr, vec_arr_out, size * sizeof(*vec_arr)); \
4
75ab77f874e2 *: aligned generics, fixed altivec, aligned tests...
Paper <paper@tflc.us>
parents: 3
diff changeset
25 \
75ab77f874e2 *: aligned generics, fixed altivec, aligned tests...
Paper <paper@tflc.us>
parents: 3
diff changeset
26 ret |= !V##csign##INT##bits##x##size##_PTR_ALIGNED(vec_arr); \
75ab77f874e2 *: aligned generics, fixed altivec, aligned tests...
Paper <paper@tflc.us>
parents: 3
diff changeset
27 ret |= !V##csign##INT##bits##x##size##_PTR_ALIGNED(vec_arr_out); \
3
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
28 } while (0);
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
29
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
30 #define RUN_TESTS(bits, size) \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
31 RUN_TEST( , , bits, size) \
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
32 RUN_TEST(u, U, bits, size)
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
33
17
41dd962abdd1 *: allow compiling vec in a C++ translation unit
Paper <paper@tflc.us>
parents: 15
diff changeset
34 RUN_TESTS(8, 2)
41dd962abdd1 *: allow compiling vec in a C++ translation unit
Paper <paper@tflc.us>
parents: 15
diff changeset
35
41dd962abdd1 *: allow compiling vec in a C++ translation unit
Paper <paper@tflc.us>
parents: 15
diff changeset
36 RUN_TESTS(8, 4)
41dd962abdd1 *: allow compiling vec in a C++ translation unit
Paper <paper@tflc.us>
parents: 15
diff changeset
37 RUN_TESTS(16, 2)
41dd962abdd1 *: allow compiling vec in a C++ translation unit
Paper <paper@tflc.us>
parents: 15
diff changeset
38
15
e05c257c6a23 *: huge refactor, add many new x86 intrinsics and the like
Paper <paper@tflc.us>
parents: 13
diff changeset
39 RUN_TESTS(8, 8)
e05c257c6a23 *: huge refactor, add many new x86 intrinsics and the like
Paper <paper@tflc.us>
parents: 13
diff changeset
40 RUN_TESTS(16, 4)
e05c257c6a23 *: huge refactor, add many new x86 intrinsics and the like
Paper <paper@tflc.us>
parents: 13
diff changeset
41 RUN_TESTS(32, 2)
e05c257c6a23 *: huge refactor, add many new x86 intrinsics and the like
Paper <paper@tflc.us>
parents: 13
diff changeset
42
3
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
43 RUN_TESTS(8, 16)
15
e05c257c6a23 *: huge refactor, add many new x86 intrinsics and the like
Paper <paper@tflc.us>
parents: 13
diff changeset
44 RUN_TESTS(16, 8)
e05c257c6a23 *: huge refactor, add many new x86 intrinsics and the like
Paper <paper@tflc.us>
parents: 13
diff changeset
45 RUN_TESTS(32, 4)
e05c257c6a23 *: huge refactor, add many new x86 intrinsics and the like
Paper <paper@tflc.us>
parents: 13
diff changeset
46 RUN_TESTS(64, 2)
e05c257c6a23 *: huge refactor, add many new x86 intrinsics and the like
Paper <paper@tflc.us>
parents: 13
diff changeset
47
e05c257c6a23 *: huge refactor, add many new x86 intrinsics and the like
Paper <paper@tflc.us>
parents: 13
diff changeset
48 RUN_TESTS(8, 32)
e05c257c6a23 *: huge refactor, add many new x86 intrinsics and the like
Paper <paper@tflc.us>
parents: 13
diff changeset
49 RUN_TESTS(16, 16)
e05c257c6a23 *: huge refactor, add many new x86 intrinsics and the like
Paper <paper@tflc.us>
parents: 13
diff changeset
50 RUN_TESTS(32, 8)
e05c257c6a23 *: huge refactor, add many new x86 intrinsics and the like
Paper <paper@tflc.us>
parents: 13
diff changeset
51 RUN_TESTS(64, 4)
e05c257c6a23 *: huge refactor, add many new x86 intrinsics and the like
Paper <paper@tflc.us>
parents: 13
diff changeset
52
e05c257c6a23 *: huge refactor, add many new x86 intrinsics and the like
Paper <paper@tflc.us>
parents: 13
diff changeset
53 RUN_TESTS(8, 64)
e05c257c6a23 *: huge refactor, add many new x86 intrinsics and the like
Paper <paper@tflc.us>
parents: 13
diff changeset
54 RUN_TESTS(16, 32)
e05c257c6a23 *: huge refactor, add many new x86 intrinsics and the like
Paper <paper@tflc.us>
parents: 13
diff changeset
55 RUN_TESTS(32, 16)
e05c257c6a23 *: huge refactor, add many new x86 intrinsics and the like
Paper <paper@tflc.us>
parents: 13
diff changeset
56 RUN_TESTS(64, 8)
9
6ff0b7a44bb6 generic: add initial support for 256-bit and 512-bit types
Paper <paper@tflc.us>
parents: 4
diff changeset
57
3
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
58 #undef RUN_TESTS
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
59 #undef RUN_TEST
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
60
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
61 return ret;
3c5545b1568f *: much better alignment support & tests
Paper <paper@tflc.us>
parents:
diff changeset
62 }