aboutsummaryrefslogtreecommitdiff
path: root/old/inverse_fast.c
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2023-11-19 10:45:37 +0100
committerSebastiano Tronto <sebastiano@tronto.net>2023-11-19 10:45:37 +0100
commit15ceee3a7c72d174305fff9b4fe9886cb3f7204d (patch)
treefc2dc7280ccb581f49d8b123e5d7ea32673293a3 /old/inverse_fast.c
parent13275a4bb8696e730a4fffdd05b8e1d046e489c6 (diff)
downloadnissy-core-15ceee3a7c72d174305fff9b4fe9886cb3f7204d.tar.gz
nissy-core-15ceee3a7c72d174305fff9b4fe9886cb3f7204d.zip
Removed inverse_fast, probably not going to use it in tight loops
Diffstat (limited to 'old/inverse_fast.c')
-rw-r--r--old/inverse_fast.c51
1 files changed, 51 insertions, 0 deletions
diff --git a/old/inverse_fast.c b/old/inverse_fast.c
new file mode 100644
index 0000000..13ace58
--- /dev/null
+++ b/old/inverse_fast.c
@@ -0,0 +1,51 @@
1_static_inline cube_fast_t
2cleanaftershuffle(cube_fast_t c)
3{
4 __m256i b;
5
6 b = _mm256_set_epi8(
7 ~0, ~0, ~0, ~0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
8 ~0, ~0, ~0, ~0, ~0, ~0, ~0, ~0, 0, 0, 0, 0, 0, 0, 0, 0
9 );
10
11 return _mm256_andnot_si256(b, c);
12}
13
14_static_inline cube_fast_t
15inverse_fast(cube_fast_t c)
16{
17 /* Method taken from Andrew Skalski's vcube[1]. The addition sequence
18 * was generated using [2].
19 * [1] https://github.com/Voltara/vcube
20 * [2] http://wwwhomes.uni-bielefeld.de/achim/addition_chain.html
21 */
22 cube_fast_t v3, vi, vo, vp, ret;
23
24 v3 = _mm256_shuffle_epi8(c, c);
25 v3 = _mm256_shuffle_epi8(v3, c);
26 vi = _mm256_shuffle_epi8(v3, v3);
27 vi = _mm256_shuffle_epi8(vi, vi);
28 vi = _mm256_shuffle_epi8(vi, vi);
29 vi = _mm256_shuffle_epi8(vi, v3);
30 vi = _mm256_shuffle_epi8(vi, vi);
31 vi = _mm256_shuffle_epi8(vi, vi);
32 vi = _mm256_shuffle_epi8(vi, vi);
33 vi = _mm256_shuffle_epi8(vi, vi);
34 vi = _mm256_shuffle_epi8(vi, c);
35 vi = _mm256_shuffle_epi8(vi, vi);
36 vi = _mm256_shuffle_epi8(vi, vi);
37 vi = _mm256_shuffle_epi8(vi, vi);
38 vi = _mm256_shuffle_epi8(vi, vi);
39 vi = _mm256_shuffle_epi8(vi, vi);
40 vi = _mm256_shuffle_epi8(vi, v3);
41 vi = _mm256_shuffle_epi8(vi, vi);
42 vi = _mm256_shuffle_epi8(vi, c);
43
44 vo = _mm256_and_si256(c, _mm256_or_si256(_eo_avx2, _co2_avx2));
45 vo = _mm256_shuffle_epi8(vo, vi);
46 vp = _mm256_andnot_si256(_mm256_or_si256(_eo_avx2, _co2_avx2), vi);
47 ret = _mm256_or_si256(vp, vo);
48 ret = cleanaftershuffle(ret);
49
50 return invertco_fast(ret);
51}

Generated with cgit - Back to sebastiano.tronto.net