aboutsummaryrefslogtreecommitdiff
path: root/src/cube_avx2.h
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2024-05-27 12:04:53 +0200
committerSebastiano Tronto <sebastiano@tronto.net>2024-05-27 12:04:53 +0200
commit49b9c4a516f72e03d53277075f4580e2df8f0e63 (patch)
treedea68649391d14d63a96e742b450c59681ac4305 /src/cube_avx2.h
parentfde8dfa9df8df1e3d42a9a8840836e33817cd498 (diff)
downloadnissy-core-49b9c4a516f72e03d53277075f4580e2df8f0e63.tar.gz
nissy-core-49b9c4a516f72e03d53277075f4580e2df8f0e63.zip
Some type fixes and some cleanup
Diffstat (limited to 'src/cube_avx2.h')
-rw-r--r--src/cube_avx2.h32
1 files changed, 17 insertions, 15 deletions
diff --git a/src/cube_avx2.h b/src/cube_avx2.h
index ad4aadb..233afed 100644
--- a/src/cube_avx2.h
+++ b/src/cube_avx2.h
@@ -1,10 +1,12 @@
1typedef __m256i cube_fast_t; 1typedef __m256i cube_fast_t;
2 2
3#define _co2_avx2 _mm256_set_epi64x(0, 0, 0, 0x6060606060606060) 3#define _co2_avx2 _mm256_set_epi64x(0, 0, 0, INT64_C(0x6060606060606060))
4#define _cocw_avx2 _mm256_set_epi64x(0, 0, 0, 0x2020202020202020) 4#define _cocw_avx2 _mm256_set_epi64x(0, 0, 0, INT64_C(0x2020202020202020))
5#define _cp_avx2 _mm256_set_epi64x(0, 0, 0, 0x0707070707070707) 5#define _cp_avx2 _mm256_set_epi64x(0, 0, 0, INT64_C(0x0707070707070707))
6#define _ep_avx2 _mm256_set_epi64x(0x0F0F0F0F, 0x0F0F0F0F0F0F0F0F, 0, 0) 6#define _ep_avx2 \
7#define _eo_avx2 _mm256_set_epi64x(0x10101010, 0x1010101010101010, 0, 0) 7 _mm256_set_epi64x(INT64_C(0x0F0F0F0F), INT64_C(0x0F0F0F0F0F0F0F0F), 0, 0)
8#define _eo_avx2 \
9 _mm256_set_epi64x(INT64_C(0x10101010), INT64_C(0x1010101010101010), 0, 0)
8 10
9_static_inline cube_fast_t fastcube( 11_static_inline cube_fast_t fastcube(
10 uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, 12 uint8_t, uint8_t, uint8_t, uint8_t, uint8_t,
@@ -194,9 +196,9 @@ coord_fast_co(cube_fast_t c)
194 co = _mm256_and_si256(c, _co2_avx2); 196 co = _mm256_and_si256(c, _co2_avx2);
195 _mm256_storeu_si256((__m256i *)mem, co); 197 _mm256_storeu_si256((__m256i *)mem, co);
196 198
197 mem[0] >>= 5L; 199 mem[0] >>= 5;
198 for (i = 0, ret = 0, p = 1; i < 7; i++, mem[0] >>= 8L, p *= 3) 200 for (i = 0, ret = 0, p = 1; i < 7; i++, mem[0] >>= 8, p *= 3)
199 ret += (mem[0] & 3L) * p; 201 ret += (mem[0] & 3) * p;
200 202
201 return ret; 203 return ret;
202} 204}
@@ -242,14 +244,14 @@ coord_fast_esep(cube_fast_t c)
242 ep = _mm256_and_si256(c, _ep_avx2); 244 ep = _mm256_and_si256(c, _ep_avx2);
243 _mm256_storeu_si256((__m256i *)mem, ep); 245 _mm256_storeu_si256((__m256i *)mem, ep);
244 246
245 mem[3] <<= 8L; 247 mem[3] <<= 8;
246 ret1 = ret2 = 0; 248 ret1 = ret2 = 0;
247 k = l = 4; 249 k = l = 4;
248 for (i = 0, j = 0; i < 12; i++, mem[i/8 + 2] >>= 8L) { 250 for (i = 0, j = 0; i < 12; i++, mem[i/8 + 2] >>= 8) {
249 e = mem[i/8 + 2]; 251 e = mem[i/8 + 2];
250 252
251 bit1 = (e & _esepbit1) >> 2L; 253 bit1 = (e & _esepbit1) >> 2;
252 bit2 = (e & _esepbit2) >> 3L; 254 bit2 = (e & _esepbit2) >> 3;
253 is1 = (1 - bit2) * bit1; 255 is1 = (1 - bit2) * bit1;
254 256
255 ret1 += bit2 * binomial[11-i][k]; 257 ret1 += bit2 * binomial[11-i][k];
@@ -305,8 +307,8 @@ _static_inline cube_fast_t
305invcoord_fast_esep(int64_t esep) 307invcoord_fast_esep(int64_t esep)
306{ 308{
307 cube_fast_t eee, ret; 309 cube_fast_t eee, ret;
308 int64_t i, j, jj, k, l, s, v, w, is1, set1, set2; 310 int64_t bit1, bit2, i, j, jj, k, l, s, v, w, is1, set1, set2;
309 uint8_t bit2, bit1, mem[32]; 311 uint8_t mem[32];
310 uint8_t slice[3] = {0}; 312 uint8_t slice[3] = {0};
311 313
312 set1 = esep % 70; 314 set1 = esep % 70;
@@ -327,7 +329,7 @@ invcoord_fast_esep(int64_t esep)
327 j += (1-bit2); 329 j += (1-bit2);
328 s = 2*bit2 + (1-bit2)*bit1; 330 s = 2*bit2 + (1-bit2)*bit1;
329 331
330 mem[i+16] = (slice[s]++) | (s << 2); 332 mem[i+16] = (slice[s]++) | (uint8_t)(s << 2);
331 } 333 }
332 334
333 ret = cubetofast(solved); 335 ret = cubetofast(solved);

Generated with cgit - Back to sebastiano.tronto.net