aboutsummaryrefslogtreecommitdiff
path: root/cube.c
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2023-12-26 18:29:25 +0100
committerSebastiano Tronto <sebastiano@tronto.net>2023-12-26 18:29:25 +0100
commit0083a7eb4677542aced3ea2fa335bc9cf1f7b419 (patch)
tree048c901f6620e49f60badac77c92324fadd6b6ef /cube.c
parent861a8a5fc4b62e5f70081f8e72b0854889a6cec6 (diff)
downloadnissy-core-0083a7eb4677542aced3ea2fa335bc9cf1f7b419.tar.gz
nissy-core-0083a7eb4677542aced3ea2fa335bc9cf1f7b419.zip
Added coord_co
Diffstat (limited to 'cube.c')
-rw-r--r--cube.c45
1 files changed, 41 insertions, 4 deletions
diff --git a/cube.c b/cube.c
index e150765..b6e1a4e 100644
--- a/cube.c
+++ b/cube.c
@@ -509,6 +509,8 @@ _static_inline bool equal_fast(cube_fast_t, cube_fast_t);
509_static_inline bool issolved_fast(cube_fast_t); 509_static_inline bool issolved_fast(cube_fast_t);
510_static_inline cube_fast_t invertco_fast(cube_fast_t); 510_static_inline cube_fast_t invertco_fast(cube_fast_t);
511_static_inline cube_fast_t compose_fast(cube_fast_t, cube_fast_t); 511_static_inline cube_fast_t compose_fast(cube_fast_t, cube_fast_t);
512
513_static_inline int64_t coord_fast_co(cube_fast_t);
512_static_inline int64_t coord_fast_eo(cube_fast_t); 514_static_inline int64_t coord_fast_eo(cube_fast_t);
513 515
514_static_inline cube_fast_t 516_static_inline cube_fast_t
@@ -637,6 +639,22 @@ compose_fast(cube_fast_t c1, cube_fast_t c2)
637} 639}
638 640
639_static_inline int64_t 641_static_inline int64_t
642coord_fast_co(cube_fast_t c)
643{
644 cube_fast_t co, shifted;
645 int64_t mem[4], ret, i, p;
646
647 co = _mm256_and_si256(c, _co2_avx2);
648 _mm256_storeu_si256((__m256i *)mem, co);
649
650 mem[0] >>= 5L;
651 for (i = 0, ret = 0, p = 1; i < 7; i++, mem[0] >>= 8L, p *= 3)
652 ret += (mem[0] & 3L) * p;
653
654 return ret;
655}
656
657_static_inline int64_t
640coord_fast_eo(cube_fast_t c) 658coord_fast_eo(cube_fast_t c)
641{ 659{
642 cube_fast_t eo, shifted; 660 cube_fast_t eo, shifted;
@@ -689,6 +707,8 @@ _static_inline bool equal_fast(cube_fast_t, cube_fast_t);
689_static_inline bool issolved_fast(cube_fast_t); 707_static_inline bool issolved_fast(cube_fast_t);
690_static_inline cube_fast_t invertco_fast(cube_fast_t); 708_static_inline cube_fast_t invertco_fast(cube_fast_t);
691_static_inline cube_fast_t compose_fast(cube_fast_t, cube_fast_t); 709_static_inline cube_fast_t compose_fast(cube_fast_t, cube_fast_t);
710
711_static_inline int64_t coord_fast_co(cube_fast_t);
692_static_inline int64_t coord_fast_eo(cube_fast_t); 712_static_inline int64_t coord_fast_eo(cube_fast_t);
693 713
694_static_inline cube_fast_t 714_static_inline cube_fast_t
@@ -812,14 +832,25 @@ compose_fast(cube_fast_t c1, cube_fast_t c2)
812} 832}
813 833
814_static_inline int64_t 834_static_inline int64_t
815coord_fast_eo(cube_fast_t cube) 835coord_fast_co(cube_fast_t c)
816{ 836{
817 int i, p; 837 int i, p;
818 int64_t ret; 838 int64_t ret;
819 839
820 ret = 0; 840 for (ret = 0, i = 0, p = 1; i < 7; i++, p *= 3)
821 for (i = 1, p = 1; i < 12; i++, p *= 2) 841 ret += p * (c.corner[i] >> _coshift);
822 ret += p * (cube.edge[i] >> 4); 842
843 return ret;
844}
845
846_static_inline int64_t
847coord_fast_eo(cube_fast_t c)
848{
849 int i, p;
850 int64_t ret;
851
852 for (ret = 0, i = 1, p = 1; i < 12; i++, p *= 2)
853 ret += p * (c.edge[i] >> _eoshift);
823 854
824 return ret; 855 return ret;
825} 856}
@@ -1600,6 +1631,12 @@ moveaxis(uint8_t move)
1600} 1631}
1601 1632
1602/****************************************************************************** 1633/******************************************************************************
1634Section: auxiliary procedures for H48 optimal solver (temporary)
1635******************************************************************************/
1636
1637
1638
1639/******************************************************************************
1603Section: solvers 1640Section: solvers
1604 1641
1605Here you can find the implementation of all the solving algorithms. 1642Here you can find the implementation of all the solving algorithms.

Generated with cgit - Back to sebastiano.tronto.net