From 38014615238a51f1c0c1f2f96d37cbfbf765520a Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Tue, 29 Jul 2025 10:00:56 +0200 Subject: Optimized some coordinates --- src/arch/portable.h | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'src/arch/portable.h') diff --git a/src/arch/portable.h b/src/arch/portable.h index bd67c18..ec992a8 100644 --- a/src/arch/portable.h +++ b/src/arch/portable.h @@ -290,3 +290,47 @@ set_eo(cube_t cube[static 1], int64_t eo) } cube->edge[0] = (cube->edge[0] & ~EOBIT) | (EOBIT * (sum % 2)); } + +STATIC_INLINE int64_t +coord_cp(cube_t cube) +{ + int i; + + for (i = 0; i < 8; i++) + cube.corner[i] &= PBITS; + + return permtoindex(8, cube.corner); +} + +STATIC_INLINE cube_t +invcoord_cp(int64_t i) +{ + uint8_t c[8]; + + indextoperm(i, 8, c); + + return STATIC_CUBE(c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7], + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); +} + +STATIC_INLINE int64_t +coord_epud(cube_t cube) +{ + int i; + + for (i = 0; i < 8; i++) + cube.edge[i] &= PBITS; + + return permtoindex(8, cube.edge); +} + +STATIC_INLINE cube_t +invcoord_epud(int64_t i) +{ + uint8_t e[8]; + + indextoperm(i, 8, e); + + return STATIC_CUBE(0, 1, 2, 3, 4, 5, 6, 7, + e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], 8, 9, 10, 11); +} -- cgit v1.3