diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2023-12-26 18:29:25 +0100 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2023-12-26 18:29:25 +0100 |
| commit | 0083a7eb4677542aced3ea2fa335bc9cf1f7b419 (patch) | |
| tree | 048c901f6620e49f60badac77c92324fadd6b6ef /cube.c | |
| parent | 861a8a5fc4b62e5f70081f8e72b0854889a6cec6 (diff) | |
| download | nissy-core-0083a7eb4677542aced3ea2fa335bc9cf1f7b419.tar.gz nissy-core-0083a7eb4677542aced3ea2fa335bc9cf1f7b419.zip | |
Added coord_co
Diffstat (limited to 'cube.c')
| -rw-r--r-- | cube.c | 45 |
1 files changed, 41 insertions, 4 deletions
| @@ -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 |
| 642 | coord_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 | ||
| 640 | coord_fast_eo(cube_fast_t c) | 658 | coord_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 |
| 815 | coord_fast_eo(cube_fast_t cube) | 835 | coord_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 | ||
| 847 | coord_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 | /****************************************************************************** |
| 1634 | Section: auxiliary procedures for H48 optimal solver (temporary) | ||
| 1635 | ******************************************************************************/ | ||
| 1636 | |||
| 1637 | |||
| 1638 | |||
| 1639 | /****************************************************************************** | ||
| 1603 | Section: solvers | 1640 | Section: solvers |
| 1604 | 1641 | ||
| 1605 | Here you can find the implementation of all the solving algorithms. | 1642 | Here you can find the implementation of all the solving algorithms. |
