aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2025-08-08 10:18:43 +0200
committerSebastiano Tronto <sebastiano@tronto.net>2025-08-08 10:18:43 +0200
commit8af57b2ffd92daa9a40384ec8b6c49ffabc474d1 (patch)
tree26a873c3fe008b0af1623fa42fe88115905c2386
parent82904137aff5a7de8b9aee55485c1b0217e0b2e6 (diff)
downloadnissy-core-8af57b2ffd92daa9a40384ec8b6c49ffabc474d1.tar.gz
nissy-core-8af57b2ffd92daa9a40384ec8b6c49ffabc474d1.zip
Fix bug and make avx load consistent
-rw-r--r--src/arch/avx2.h18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/arch/avx2.h b/src/arch/avx2.h
index 1c7248b..5a62213 100644
--- a/src/arch/avx2.h
+++ b/src/arch/avx2.h
@@ -39,7 +39,7 @@ pieces(cube_t cube[static 1], uint8_t c[static 8], uint8_t e[static 12])
39{ 39{
40 uint8_t aux[32]; 40 uint8_t aux[32];
41 41
42 _mm256_storeu_si256((__m256i_u *)aux, *cube); 42 _mm256_storeu_si256((__m256i *)aux, *cube);
43 memcpy(c, aux, 8); 43 memcpy(c, aux, 8);
44 memcpy(e, aux+16, 12); 44 memcpy(e, aux+16, 12);
45} 45}
@@ -172,7 +172,7 @@ invcoord_co(uint64_t coord)
172 mem[0] |= (uint64_t)(i + (co << COSHIFT)) << (uint64_t)(8 * i); 172 mem[0] |= (uint64_t)(i + (co << COSHIFT)) << (uint64_t)(8 * i);
173 } 173 }
174 174
175 cc = _mm256_loadu_si256((const __m256i *)mem); 175 cc = _mm256_loadu_si256((__m256i *)mem);
176 cube = SOLVED_CUBE; 176 cube = SOLVED_CUBE;
177 copy_corners(&cube, cc); 177 copy_corners(&cube, cc);
178 178
@@ -251,7 +251,7 @@ invcoord_esep(uint64_t esep)
251 invcoord_esep_array(esep % UINT64_C(70), esep / UINT64_C(70), mem+16); 251 invcoord_esep_array(esep % UINT64_C(70), esep / UINT64_C(70), mem+16);
252 252
253 ret = SOLVED_CUBE; 253 ret = SOLVED_CUBE;
254 eee = _mm256_loadu_si256((__m256i_u *)&mem); 254 eee = _mm256_loadu_si256((__m256i *)mem);
255 copy_edges(&ret, eee); 255 copy_edges(&ret, eee);
256 256
257 return ret; 257 return ret;
@@ -372,7 +372,7 @@ coord_cp(cube_t cube)
372 int64_t aux[4]; 372 int64_t aux[4];
373 373
374 cp = _mm256_and_si256(cube, CP_AVX2); 374 cp = _mm256_and_si256(cube, CP_AVX2);
375 _mm256_storeu_si256((__m256i_u *)aux, cp); 375 _mm256_storeu_si256((__m256i *)aux, cp);
376 376
377 return permtoindex_Nx8(8, aux[0]); 377 return permtoindex_Nx8(8, aux[0]);
378} 378}
@@ -390,7 +390,7 @@ coord_epud(cube_t cube)
390 int64_t aux[4]; 390 int64_t aux[4];
391 391
392 ep = _mm256_and_si256(cube, EP_AVX2); 392 ep = _mm256_and_si256(cube, EP_AVX2);
393 _mm256_storeu_si256((__m256i_u *)aux, ep); 393 _mm256_storeu_si256((__m256i *)aux, ep);
394 394
395 return permtoindex_Nx8(8, aux[2]); 395 return permtoindex_Nx8(8, aux[2]);
396} 396}
@@ -409,7 +409,7 @@ coord_epe(cube_t cube)
409 409
410 ep = _mm256_and_si256(cube, EP_AVX2); 410 ep = _mm256_and_si256(cube, EP_AVX2);
411 ep = _mm256_xor_si256(ep, _mm256_set1_epi8(8)); 411 ep = _mm256_xor_si256(ep, _mm256_set1_epi8(8));
412 _mm256_storeu_si256((__m256i_u *)aux, ep); 412 _mm256_storeu_si256((__m256i *)aux, ep);
413 413
414 return permtoindex_Nx8(4, aux[3]); 414 return permtoindex_Nx8(4, aux[3]);
415} 415}
@@ -445,7 +445,7 @@ coord_epudsep(cube_t cube)
445{ 445{
446 uint8_t aux[32]; 446 uint8_t aux[32];
447 447
448 _mm256_storeu_si256((__m256i_u *)aux, cube); 448 _mm256_storeu_si256((__m256i *)aux, cube);
449 return coord_epudsep_array(aux + 16); 449 return coord_epudsep_array(aux + 16);
450} 450}
451 451
@@ -453,10 +453,10 @@ STATIC_INLINE cube_t
453invcoord_epudsep(uint64_t i) 453invcoord_epudsep(uint64_t i)
454{ 454{
455 cube_t cube, elow; 455 cube_t cube, elow;
456 uint8_t e[32]; 456 uint8_t e[32] = {0};
457 457
458 invcoord_epudsep_array(i, e+16); 458 invcoord_epudsep_array(i, e+16);
459 elow = _mm256_load_si256((__m256i *)e); 459 elow = _mm256_loadu_si256((__m256i *)e);
460 cube = _mm256_set_epi64x(SOLVED_H, 0, 0, SOLVED_L); 460 cube = _mm256_set_epi64x(SOLVED_H, 0, 0, SOLVED_L);
461 461
462 return _mm256_or_si256(elow, cube); 462 return _mm256_or_si256(elow, cube);

Generated with cgit - Back to sebastiano.tronto.net