diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2024-10-04 12:01:41 +0200 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2024-10-04 12:01:41 +0200 |
| commit | 80b065f757240af7920862b3e09f32a6dc06d392 (patch) | |
| tree | c0223ba1f0a3254305f59637b3fb25bd58698cf8 /src | |
| parent | fd111a1a51b8293f79db6284331af50824df92b9 (diff) | |
| download | nissy-core-80b065f757240af7920862b3e09f32a6dc06d392.tar.gz nissy-core-80b065f757240af7920862b3e09f32a6dc06d392.zip | |
Table-based transformations (will revert immediately)
This commit changes transformations to being based on a lookup
table intead of a big switch. This is something I had planned for a long
time and the code is nicer with this change. But unfortunately the performance
is noticeably worse, so I'll revert all these changes in the next commit.
I wanted to push this anyway so we can keep track of this.
Diffstat (limited to 'src')
| -rw-r--r-- | src/arch/avx2.h | 42 | ||||
| -rw-r--r-- | src/arch/common.h | 7 | ||||
| -rw-r--r-- | src/arch/neon.h | 57 | ||||
| -rw-r--r-- | src/arch/portable.h | 49 | ||||
| -rw-r--r-- | src/core/constant_cubes.h | 456 | ||||
| -rw-r--r-- | src/core/core.h | 2 | ||||
| -rw-r--r-- | src/core/cube.h | 19 | ||||
| -rw-r--r-- | src/core/io_cube.h | 6 | ||||
| -rw-r--r-- | src/core/moves.h | 4 | ||||
| -rw-r--r-- | src/core/transform.h | 208 |
10 files changed, 467 insertions, 383 deletions
diff --git a/src/arch/avx2.h b/src/arch/avx2.h index 2c3371e..557ab49 100644 --- a/src/arch/avx2.h +++ b/src/arch/avx2.h | |||
| @@ -6,16 +6,6 @@ | |||
| 6 | #define EO_AVX2 \ | 6 | #define EO_AVX2 \ |
| 7 | _mm256_set_epi64x(INT64_C(0x10101010), INT64_C(0x1010101010101010), 0, 0) | 7 | _mm256_set_epi64x(INT64_C(0x10101010), INT64_C(0x1010101010101010), 0, 0) |
| 8 | 8 | ||
| 9 | #define STATIC_CUBE(c_ufr, c_ubl, c_dfl, c_dbr, c_ufl, c_ubr, c_dfr, c_dbl, \ | ||
| 10 | e_uf, e_ub, e_db, e_df, e_ur, e_ul, e_dl, e_dr, e_fr, e_fl, e_bl, e_br) \ | ||
| 11 | _mm256_set_epi8(0, 0, 0, 0, e_br, e_bl, e_fl, e_fr, \ | ||
| 12 | e_dr, e_dl, e_ul, e_ur, e_df, e_db, e_ub, e_uf, \ | ||
| 13 | 0, 0, 0, 0, 0, 0, 0, 0, \ | ||
| 14 | c_dbl, c_dfr, c_ubr, c_ufl, c_dbr, c_dfl, c_ubl, c_ufr) | ||
| 15 | #define ZERO_CUBE _mm256_set_epi64x(0, 0, 0, 0) | ||
| 16 | #define SOLVED_CUBE STATIC_CUBE( \ | ||
| 17 | 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) | ||
| 18 | |||
| 19 | STATIC void | 9 | STATIC void |
| 20 | pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12]) | 10 | pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12]) |
| 21 | { | 11 | { |
| @@ -26,6 +16,38 @@ pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12]) | |||
| 26 | memcpy(e, aux+16, 12); | 16 | memcpy(e, aux+16, 12); |
| 27 | } | 17 | } |
| 28 | 18 | ||
| 19 | STATIC_INLINE cube_t | ||
| 20 | cubefrompieces( | ||
| 21 | uint8_t c_ufr, | ||
| 22 | uint8_t c_ubl, | ||
| 23 | uint8_t c_dfl, | ||
| 24 | uint8_t c_dbr, | ||
| 25 | uint8_t c_ufl, | ||
| 26 | uint8_t c_ubr, | ||
| 27 | uint8_t c_dfr, | ||
| 28 | uint8_t c_dbl, | ||
| 29 | |||
| 30 | uint8_t e_uf, | ||
| 31 | uint8_t e_ub, | ||
| 32 | uint8_t e_db, | ||
| 33 | uint8_t e_df, | ||
| 34 | uint8_t e_ur, | ||
| 35 | uint8_t e_ul, | ||
| 36 | uint8_t e_dl, | ||
| 37 | uint8_t e_dr, | ||
| 38 | uint8_t e_fr, | ||
| 39 | uint8_t e_fl, | ||
| 40 | uint8_t e_bl, | ||
| 41 | uint8_t e_br | ||
| 42 | ) { | ||
| 43 | return _mm256_set_epi8( | ||
| 44 | 0, 0, 0, 0, e_br, e_bl, e_fl, e_fr, | ||
| 45 | e_dr, e_dl, e_ul, e_ur, e_df, e_db, e_ub, e_uf, | ||
| 46 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 47 | c_dbl, c_dfr, c_ubr, c_ufl, c_dbr, c_dfl, c_ubl, c_ufr | ||
| 48 | ); | ||
| 49 | } | ||
| 50 | |||
| 29 | STATIC_INLINE bool | 51 | STATIC_INLINE bool |
| 30 | equal(cube_t c1, cube_t c2) | 52 | equal(cube_t c1, cube_t c2) |
| 31 | { | 53 | { |
diff --git a/src/arch/common.h b/src/arch/common.h index 346403b..1469b30 100644 --- a/src/arch/common.h +++ b/src/arch/common.h | |||
| @@ -1,4 +1,11 @@ | |||
| 1 | #define ZERO_CUBE cubefrompieces( \ | ||
| 2 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) | ||
| 3 | #define SOLVED_CUBE cubefrompieces( \ | ||
| 4 | 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) | ||
| 1 | STATIC void pieces(cube_t *, uint8_t [static 8], uint8_t [static 12]); | 5 | STATIC void pieces(cube_t *, uint8_t [static 8], uint8_t [static 12]); |
| 6 | STATIC_INLINE cube_t cubefrompieces(uint8_t, uint8_t, uint8_t, uint8_t, | ||
| 7 | uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, | ||
| 8 | uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t); | ||
| 2 | STATIC_INLINE bool equal(cube_t, cube_t); | 9 | STATIC_INLINE bool equal(cube_t, cube_t); |
| 3 | STATIC_INLINE cube_t invertco(cube_t); | 10 | STATIC_INLINE cube_t invertco(cube_t); |
| 4 | STATIC_INLINE cube_t compose_epcpeo(cube_t, cube_t); | 11 | STATIC_INLINE cube_t compose_epcpeo(cube_t, cube_t); |
diff --git a/src/arch/neon.h b/src/arch/neon.h index acb75c3..9061422 100644 --- a/src/arch/neon.h +++ b/src/arch/neon.h | |||
| @@ -7,25 +7,6 @@ | |||
| 7 | STATIC_INLINE uint8x16_t compose_edges_slim(uint8x16_t, uint8x16_t); | 7 | STATIC_INLINE uint8x16_t compose_edges_slim(uint8x16_t, uint8x16_t); |
| 8 | STATIC_INLINE uint8x16_t compose_corners_slim(uint8x16_t, uint8x16_t); | 8 | STATIC_INLINE uint8x16_t compose_corners_slim(uint8x16_t, uint8x16_t); |
| 9 | 9 | ||
| 10 | // static cube | ||
| 11 | #define STATIC_CUBE(c_ufr, c_ubl, c_dfl, c_dbr, c_ufl, c_ubr, c_dfr, c_dbl, \ | ||
| 12 | e_uf, e_ub, e_db, e_df, e_ur, e_ul, e_dl, e_dr, e_fr, e_fl, e_bl, e_br) \ | ||
| 13 | ((cube_t){ \ | ||
| 14 | .corner = {c_ufr, c_ubl, c_dfl, c_dbr, c_ufl, c_ubr, c_dfr, c_dbl, 0, 0, 0, 0, 0, 0, 0, 0}, \ | ||
| 15 | .edge = {e_uf, e_ub, e_db, e_df, e_ur, e_ul, e_dl, e_dr, e_fr, e_fl, e_bl, e_br, 0, 0, 0, 0}}) | ||
| 16 | |||
| 17 | // zero cube | ||
| 18 | #define ZERO_CUBE \ | ||
| 19 | (cube_t) \ | ||
| 20 | { \ | ||
| 21 | .corner = vdupq_n_u8(0), \ | ||
| 22 | .edge = vdupq_n_u8(0) \ | ||
| 23 | } | ||
| 24 | |||
| 25 | // solved cube | ||
| 26 | #define SOLVED_CUBE STATIC_CUBE( \ | ||
| 27 | 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) | ||
| 28 | |||
| 29 | STATIC void | 10 | STATIC void |
| 30 | pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12]) | 11 | pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12]) |
| 31 | { | 12 | { |
| @@ -39,6 +20,44 @@ pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12]) | |||
| 39 | vst1_lane_u32((uint32_t *)(e + 8), vreinterpret_u32_u8(vget_high_u8(cube->edge)), 0); | 20 | vst1_lane_u32((uint32_t *)(e + 8), vreinterpret_u32_u8(vget_high_u8(cube->edge)), 0); |
| 40 | } | 21 | } |
| 41 | 22 | ||
| 23 | STATIC_INLINE cube_t | ||
| 24 | cubefrompieces( | ||
| 25 | uint8_t c_ufr, | ||
| 26 | uint8_t c_ubl, | ||
| 27 | uint8_t c_dfl, | ||
| 28 | uint8_t c_dbr, | ||
| 29 | uint8_t c_ufl, | ||
| 30 | uint8_t c_ubr, | ||
| 31 | uint8_t c_dfr, | ||
| 32 | uint8_t c_dbl, | ||
| 33 | |||
| 34 | uint8_t e_uf, | ||
| 35 | uint8_t e_ub, | ||
| 36 | uint8_t e_db, | ||
| 37 | uint8_t e_df, | ||
| 38 | uint8_t e_ur, | ||
| 39 | uint8_t e_ul, | ||
| 40 | uint8_t e_dl, | ||
| 41 | uint8_t e_dr, | ||
| 42 | uint8_t e_fr, | ||
| 43 | uint8_t e_fl, | ||
| 44 | uint8_t e_bl, | ||
| 45 | uint8_t e_br | ||
| 46 | ) { | ||
| 47 | cube_t ret = { | ||
| 48 | .corner = { | ||
| 49 | c_ufr, c_ubl, c_dfl, c_dbr, c_ufl, c_ubr, c_dfr, c_dbl, | ||
| 50 | 0, 0, 0, 0, 0, 0, 0, 0 | ||
| 51 | }, | ||
| 52 | .edge = { | ||
| 53 | e_uf, e_ub, e_db, e_df, e_ur, e_ul, e_dl, e_dr, e_fr, | ||
| 54 | e_fl, e_bl, e_br, 0, 0, 0, 0 | ||
| 55 | } | ||
| 56 | }; | ||
| 57 | |||
| 58 | return ret; | ||
| 59 | } | ||
| 60 | |||
| 42 | STATIC_INLINE bool | 61 | STATIC_INLINE bool |
| 43 | equal(cube_t c1, cube_t c2) | 62 | equal(cube_t c1, cube_t c2) |
| 44 | { | 63 | { |
diff --git a/src/arch/portable.h b/src/arch/portable.h index e9a8dd0..3776c90 100644 --- a/src/arch/portable.h +++ b/src/arch/portable.h | |||
| @@ -1,14 +1,3 @@ | |||
| 1 | #define STATIC_CUBE(c_ufr, c_ubl, c_dfl, c_dbr, c_ufl, c_ubr, c_dfr, c_dbl, \ | ||
| 2 | e_uf, e_ub, e_db, e_df, e_ur, e_ul, e_dl, e_dr, e_fr, e_fl, e_bl, e_br) \ | ||
| 3 | ((cube_t) { \ | ||
| 4 | .corner = { c_ufr, c_ubl, c_dfl, c_dbr, c_ufl, c_ubr, c_dfr, c_dbl }, \ | ||
| 5 | .edge = { e_uf, e_ub, e_db, e_df, e_ur, e_ul, \ | ||
| 6 | e_dl, e_dr, e_fr, e_fl, e_bl, e_br } }) | ||
| 7 | #define ZERO_CUBE STATIC_CUBE( \ | ||
| 8 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) | ||
| 9 | #define SOLVED_CUBE STATIC_CUBE( \ | ||
| 10 | 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) | ||
| 11 | |||
| 12 | STATIC void | 1 | STATIC void |
| 13 | pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12]) | 2 | pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12]) |
| 14 | { | 3 | { |
| @@ -16,6 +5,44 @@ pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12]) | |||
| 16 | memcpy(e, cube->edge, 12); | 5 | memcpy(e, cube->edge, 12); |
| 17 | } | 6 | } |
| 18 | 7 | ||
| 8 | STATIC_INLINE cube_t | ||
| 9 | cubefrompieces( | ||
| 10 | uint8_t c_ufr, | ||
| 11 | uint8_t c_ubl, | ||
| 12 | uint8_t c_dfl, | ||
| 13 | uint8_t c_dbr, | ||
| 14 | uint8_t c_ufl, | ||
| 15 | uint8_t c_ubr, | ||
| 16 | uint8_t c_dfr, | ||
| 17 | uint8_t c_dbl, | ||
| 18 | |||
| 19 | uint8_t e_uf, | ||
| 20 | uint8_t e_ub, | ||
| 21 | uint8_t e_db, | ||
| 22 | uint8_t e_df, | ||
| 23 | uint8_t e_ur, | ||
| 24 | uint8_t e_ul, | ||
| 25 | uint8_t e_dl, | ||
| 26 | uint8_t e_dr, | ||
| 27 | uint8_t e_fr, | ||
| 28 | uint8_t e_fl, | ||
| 29 | uint8_t e_bl, | ||
| 30 | uint8_t e_br | ||
| 31 | ) { | ||
| 32 | cube_t ret = { | ||
| 33 | .corner = { | ||
| 34 | 0, 0, 0, 0, 0, 0, 0, 0, | ||
| 35 | c_dbl, c_dfr, c_ubr, c_ufl, c_dbr, c_dfl, c_ubl, c_ufr | ||
| 36 | }, | ||
| 37 | .edge = { | ||
| 38 | 0, 0, 0, 0, e_br, e_bl, e_fl, e_fr, | ||
| 39 | e_dr, e_dl, e_ul, e_ur, e_df, e_db, e_ub, e_uf | ||
| 40 | } | ||
| 41 | }; | ||
| 42 | |||
| 43 | return ret; | ||
| 44 | } | ||
| 45 | |||
| 19 | STATIC_INLINE bool | 46 | STATIC_INLINE bool |
| 20 | equal(cube_t c1, cube_t c2) | 47 | equal(cube_t c1, cube_t c2) |
| 21 | { | 48 | { |
diff --git a/src/core/constant_cubes.h b/src/core/constant_cubes.h index 9657e1a..f48597c 100644 --- a/src/core/constant_cubes.h +++ b/src/core/constant_cubes.h | |||
| @@ -1,229 +1,229 @@ | |||
| 1 | #define MOVE_CUBE_U STATIC_CUBE( \ | 1 | #define MOVE_CUBE_U \ |
| 2 | 5, 4, 2, 3, 0, 1, 6, 7, 4, 5, 2, 3, 1, 0, 6, 7, 8, 9, 10, 11) | 2 | 5, 4, 2, 3, 0, 1, 6, 7, 4, 5, 2, 3, 1, 0, 6, 7, 8, 9, 10, 11 |
| 3 | #define MOVE_CUBE_U2 STATIC_CUBE( \ | 3 | #define MOVE_CUBE_U2 \ |
| 4 | 1, 0, 2, 3, 5, 4, 6, 7, 1, 0, 2, 3, 5, 4, 6, 7, 8, 9, 10, 11) | 4 | 1, 0, 2, 3, 5, 4, 6, 7, 1, 0, 2, 3, 5, 4, 6, 7, 8, 9, 10, 11 |
| 5 | #define MOVE_CUBE_U3 STATIC_CUBE( \ | 5 | #define MOVE_CUBE_U3 \ |
| 6 | 4, 5, 2, 3, 1, 0, 6, 7, 5, 4, 2, 3, 0, 1, 6, 7, 8, 9, 10, 11) | 6 | 4, 5, 2, 3, 1, 0, 6, 7, 5, 4, 2, 3, 0, 1, 6, 7, 8, 9, 10, 11 |
| 7 | #define MOVE_CUBE_D STATIC_CUBE( \ | 7 | #define MOVE_CUBE_D \ |
| 8 | 0, 1, 7, 6, 4, 5, 2, 3, 0, 1, 7, 6, 4, 5, 2, 3, 8, 9, 10, 11) | 8 | 0, 1, 7, 6, 4, 5, 2, 3, 0, 1, 7, 6, 4, 5, 2, 3, 8, 9, 10, 11 |
| 9 | #define MOVE_CUBE_D2 STATIC_CUBE( \ | 9 | #define MOVE_CUBE_D2 \ |
| 10 | 0, 1, 3, 2, 4, 5, 7, 6, 0, 1, 3, 2, 4, 5, 7, 6, 8, 9, 10, 11) | 10 | 0, 1, 3, 2, 4, 5, 7, 6, 0, 1, 3, 2, 4, 5, 7, 6, 8, 9, 10, 11 |
| 11 | #define MOVE_CUBE_D3 STATIC_CUBE( \ | 11 | #define MOVE_CUBE_D3 \ |
| 12 | 0, 1, 6, 7, 4, 5, 3, 2, 0, 1, 6, 7, 4, 5, 3, 2, 8, 9, 10, 11) | 12 | 0, 1, 6, 7, 4, 5, 3, 2, 0, 1, 6, 7, 4, 5, 3, 2, 8, 9, 10, 11 |
| 13 | #define MOVE_CUBE_R STATIC_CUBE( \ | 13 | #define MOVE_CUBE_R \ |
| 14 | 70, 1, 2, 69, 4, 32, 35, 7, 0, 1, 2, 3, 8, 5, 6, 11, 7, 9, 10, 4) | 14 | 70, 1, 2, 69, 4, 32, 35, 7, 0, 1, 2, 3, 8, 5, 6, 11, 7, 9, 10, 4 |
| 15 | #define MOVE_CUBE_R2 STATIC_CUBE( \ | 15 | #define MOVE_CUBE_R2 \ |
| 16 | 3, 1, 2, 0, 4, 6, 5, 7, 0, 1, 2, 3, 7, 5, 6, 4, 11, 9, 10, 8) | 16 | 3, 1, 2, 0, 4, 6, 5, 7, 0, 1, 2, 3, 7, 5, 6, 4, 11, 9, 10, 8 |
| 17 | #define MOVE_CUBE_R3 STATIC_CUBE( \ | 17 | #define MOVE_CUBE_R3 \ |
| 18 | 69, 1, 2, 70, 4, 35, 32, 7, 0, 1, 2, 3, 11, 5, 6, 8, 4, 9, 10, 7) | 18 | 69, 1, 2, 70, 4, 35, 32, 7, 0, 1, 2, 3, 11, 5, 6, 8, 4, 9, 10, 7 |
| 19 | #define MOVE_CUBE_L STATIC_CUBE( \ | 19 | #define MOVE_CUBE_L \ |
| 20 | 0, 71, 68, 3, 33, 5, 6, 34, 0, 1, 2, 3, 4, 10, 9, 7, 8, 5, 6, 11) | 20 | 0, 71, 68, 3, 33, 5, 6, 34, 0, 1, 2, 3, 4, 10, 9, 7, 8, 5, 6, 11 |
| 21 | #define MOVE_CUBE_L2 STATIC_CUBE( \ | 21 | #define MOVE_CUBE_L2 \ |
| 22 | 0, 2, 1, 3, 7, 5, 6, 4, 0, 1, 2, 3, 4, 6, 5, 7, 8, 10, 9, 11) | 22 | 0, 2, 1, 3, 7, 5, 6, 4, 0, 1, 2, 3, 4, 6, 5, 7, 8, 10, 9, 11 |
| 23 | #define MOVE_CUBE_L3 STATIC_CUBE( \ | 23 | #define MOVE_CUBE_L3 \ |
| 24 | 0, 68, 71, 3, 34, 5, 6, 33, 0, 1, 2, 3, 4, 9, 10, 7, 8, 6, 5, 11) | 24 | 0, 68, 71, 3, 34, 5, 6, 33, 0, 1, 2, 3, 4, 9, 10, 7, 8, 6, 5, 11 |
| 25 | #define MOVE_CUBE_F STATIC_CUBE( \ | 25 | #define MOVE_CUBE_F \ |
| 26 | 36, 1, 38, 3, 66, 5, 64, 7, 25, 1, 2, 24, 4, 5, 6, 7, 16, 19, 10, 11) | 26 | 36, 1, 38, 3, 66, 5, 64, 7, 25, 1, 2, 24, 4, 5, 6, 7, 16, 19, 10, 11 |
| 27 | #define MOVE_CUBE_F2 STATIC_CUBE( \ | 27 | #define MOVE_CUBE_F2 \ |
| 28 | 2, 1, 0, 3, 6, 5, 4, 7, 3, 1, 2, 0, 4, 5, 6, 7, 9, 8, 10, 11) | 28 | 2, 1, 0, 3, 6, 5, 4, 7, 3, 1, 2, 0, 4, 5, 6, 7, 9, 8, 10, 11 |
| 29 | #define MOVE_CUBE_F3 STATIC_CUBE( \ | 29 | #define MOVE_CUBE_F3 \ |
| 30 | 38, 1, 36, 3, 64, 5, 66, 7, 24, 1, 2, 25, 4, 5, 6, 7, 19, 16, 10, 11) | 30 | 38, 1, 36, 3, 64, 5, 66, 7, 24, 1, 2, 25, 4, 5, 6, 7, 19, 16, 10, 11 |
| 31 | #define MOVE_CUBE_B STATIC_CUBE( \ | 31 | #define MOVE_CUBE_B \ |
| 32 | 0, 37, 2, 39, 4, 67, 6, 65, 0, 27, 26, 3, 4, 5, 6, 7, 8, 9, 17, 18) | 32 | 0, 37, 2, 39, 4, 67, 6, 65, 0, 27, 26, 3, 4, 5, 6, 7, 8, 9, 17, 18 |
| 33 | #define MOVE_CUBE_B2 STATIC_CUBE( \ | 33 | #define MOVE_CUBE_B2 \ |
| 34 | 0, 3, 2, 1, 4, 7, 6, 5, 0, 2, 1, 3, 4, 5, 6, 7, 8, 9, 11, 10) | 34 | 0, 3, 2, 1, 4, 7, 6, 5, 0, 2, 1, 3, 4, 5, 6, 7, 8, 9, 11, 10 |
| 35 | #define MOVE_CUBE_B3 STATIC_CUBE( \ | 35 | #define MOVE_CUBE_B3 \ |
| 36 | 0, 39, 2, 37, 4, 65, 6, 67, 0, 26, 27, 3, 4, 5, 6, 7, 8, 9, 18, 17) | 36 | 0, 39, 2, 37, 4, 65, 6, 67, 0, 26, 27, 3, 4, 5, 6, 7, 8, 9, 18, 17 |
| 37 | 37 | ||
| 38 | #define TRANS_CUBE_UFr STATIC_CUBE( \ | 38 | #define TRANS_CUBE_UFr \ |
| 39 | 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) | 39 | 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 |
| 40 | #define TRANS_CUBE_UFr_INVERSE STATIC_CUBE( \ | 40 | #define TRANS_CUBE_UFr_INVERSE \ |
| 41 | 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) | 41 | 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 |
| 42 | #define TRANS_CUBE_ULr STATIC_CUBE( \ | 42 | #define TRANS_CUBE_ULr \ |
| 43 | 4, 5, 7, 6, 1, 0, 2, 3, 5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24) | 43 | 4, 5, 7, 6, 1, 0, 2, 3, 5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24 |
| 44 | #define TRANS_CUBE_ULr_INVERSE STATIC_CUBE( \ | 44 | #define TRANS_CUBE_ULr_INVERSE \ |
| 45 | 5, 4, 6, 7, 0, 1, 3, 2, 4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26) | 45 | 5, 4, 6, 7, 0, 1, 3, 2, 4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26 |
| 46 | #define TRANS_CUBE_UBr STATIC_CUBE( \ | 46 | #define TRANS_CUBE_UBr \ |
| 47 | 1, 0, 3, 2, 5, 4, 7, 6, 1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9) | 47 | 1, 0, 3, 2, 5, 4, 7, 6, 1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9 |
| 48 | #define TRANS_CUBE_UBr_INVERSE STATIC_CUBE( \ | 48 | #define TRANS_CUBE_UBr_INVERSE \ |
| 49 | 1, 0, 3, 2, 5, 4, 7, 6, 1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9) | 49 | 1, 0, 3, 2, 5, 4, 7, 6, 1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9 |
| 50 | #define TRANS_CUBE_URr STATIC_CUBE( \ | 50 | #define TRANS_CUBE_URr \ |
| 51 | 5, 4, 6, 7, 0, 1, 3, 2, 4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26) | 51 | 5, 4, 6, 7, 0, 1, 3, 2, 4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26 |
| 52 | #define TRANS_CUBE_URr_INVERSE STATIC_CUBE( \ | 52 | #define TRANS_CUBE_URr_INVERSE \ |
| 53 | 4, 5, 7, 6, 1, 0, 2, 3, 5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24) | 53 | 4, 5, 7, 6, 1, 0, 2, 3, 5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24 |
| 54 | #define TRANS_CUBE_DFr STATIC_CUBE( \ | 54 | #define TRANS_CUBE_DFr \ |
| 55 | 2, 3, 0, 1, 6, 7, 4, 5, 3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10) | 55 | 2, 3, 0, 1, 6, 7, 4, 5, 3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10 |
| 56 | #define TRANS_CUBE_DFr_INVERSE STATIC_CUBE( \ | 56 | #define TRANS_CUBE_DFr_INVERSE \ |
| 57 | 2, 3, 0, 1, 6, 7, 4, 5, 3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10) | 57 | 2, 3, 0, 1, 6, 7, 4, 5, 3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10 |
| 58 | #define TRANS_CUBE_DLr STATIC_CUBE( \ | 58 | #define TRANS_CUBE_DLr \ |
| 59 | 7, 6, 4, 5, 2, 3, 1, 0, 6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27) | 59 | 7, 6, 4, 5, 2, 3, 1, 0, 6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27 |
| 60 | #define TRANS_CUBE_DLr_INVERSE STATIC_CUBE( \ | 60 | #define TRANS_CUBE_DLr_INVERSE \ |
| 61 | 7, 6, 4, 5, 2, 3, 1, 0, 6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27) | 61 | 7, 6, 4, 5, 2, 3, 1, 0, 6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27 |
| 62 | #define TRANS_CUBE_DBr STATIC_CUBE( \ | 62 | #define TRANS_CUBE_DBr \ |
| 63 | 3, 2, 1, 0, 7, 6, 5, 4, 2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8) | 63 | 3, 2, 1, 0, 7, 6, 5, 4, 2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8 |
| 64 | #define TRANS_CUBE_DBr_INVERSE STATIC_CUBE( \ | 64 | #define TRANS_CUBE_DBr_INVERSE \ |
| 65 | 3, 2, 1, 0, 7, 6, 5, 4, 2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8) | 65 | 3, 2, 1, 0, 7, 6, 5, 4, 2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8 |
| 66 | #define TRANS_CUBE_DRr STATIC_CUBE( \ | 66 | #define TRANS_CUBE_DRr \ |
| 67 | 6, 7, 5, 4, 3, 2, 0, 1, 7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25) | 67 | 6, 7, 5, 4, 3, 2, 0, 1, 7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25 |
| 68 | #define TRANS_CUBE_DRr_INVERSE STATIC_CUBE( \ | 68 | #define TRANS_CUBE_DRr_INVERSE \ |
| 69 | 6, 7, 5, 4, 3, 2, 0, 1, 7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25) | 69 | 6, 7, 5, 4, 3, 2, 0, 1, 7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25 |
| 70 | #define TRANS_CUBE_RUr STATIC_CUBE( \ | 70 | #define TRANS_CUBE_RUr \ |
| 71 | 64, 67, 65, 66, 37, 38, 36, 39, 20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3) | 71 | 64, 67, 65, 66, 37, 38, 36, 39, 20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3 |
| 72 | #define TRANS_CUBE_RUr_INVERSE STATIC_CUBE( \ | 72 | #define TRANS_CUBE_RUr_INVERSE \ |
| 73 | 32, 34, 35, 33, 70, 68, 69, 71, 8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21) | 73 | 32, 34, 35, 33, 70, 68, 69, 71, 8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21 |
| 74 | #define TRANS_CUBE_RFr STATIC_CUBE( \ | 74 | #define TRANS_CUBE_RFr \ |
| 75 | 38, 37, 36, 39, 64, 67, 66, 65, 24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18) | 75 | 38, 37, 36, 39, 64, 67, 66, 65, 24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18 |
| 76 | #define TRANS_CUBE_RFr_INVERSE STATIC_CUBE( \ | 76 | #define TRANS_CUBE_RFr_INVERSE \ |
| 77 | 36, 39, 38, 37, 66, 65, 64, 67, 25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17) | 77 | 36, 39, 38, 37, 66, 65, 64, 67, 25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17 |
| 78 | #define TRANS_CUBE_RDr STATIC_CUBE( \ | 78 | #define TRANS_CUBE_RDr \ |
| 79 | 67, 64, 66, 65, 38, 37, 39, 36, 23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1) | 79 | 67, 64, 66, 65, 38, 37, 39, 36, 23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1 |
| 80 | #define TRANS_CUBE_RDr_INVERSE STATIC_CUBE( \ | 80 | #define TRANS_CUBE_RDr_INVERSE \ |
| 81 | 33, 35, 34, 32, 71, 69, 68, 70, 10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20) | 81 | 33, 35, 34, 32, 71, 69, 68, 70, 10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20 |
| 82 | #define TRANS_CUBE_RBr STATIC_CUBE( \ | 82 | #define TRANS_CUBE_RBr \ |
| 83 | 37, 38, 39, 36, 67, 64, 65, 66, 27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16) | 83 | 37, 38, 39, 36, 67, 64, 65, 66, 27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16 |
| 84 | #define TRANS_CUBE_RBr_INVERSE STATIC_CUBE( \ | 84 | #define TRANS_CUBE_RBr_INVERSE \ |
| 85 | 37, 38, 39, 36, 67, 64, 65, 66, 27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16) | 85 | 37, 38, 39, 36, 67, 64, 65, 66, 27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16 |
| 86 | #define TRANS_CUBE_LUr STATIC_CUBE( \ | 86 | #define TRANS_CUBE_LUr \ |
| 87 | 65, 66, 64, 67, 36, 39, 37, 38, 21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2) | 87 | 65, 66, 64, 67, 36, 39, 37, 38, 21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2 |
| 88 | #define TRANS_CUBE_LUr_INVERSE STATIC_CUBE( \ | 88 | #define TRANS_CUBE_LUr_INVERSE \ |
| 89 | 34, 32, 33, 35, 68, 70, 71, 69, 9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23) | 89 | 34, 32, 33, 35, 68, 70, 71, 69, 9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23 |
| 90 | #define TRANS_CUBE_LFr STATIC_CUBE( \ | 90 | #define TRANS_CUBE_LFr \ |
| 91 | 36, 39, 38, 37, 66, 65, 64, 67, 25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17) | 91 | 36, 39, 38, 37, 66, 65, 64, 67, 25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17 |
| 92 | #define TRANS_CUBE_LFr_INVERSE STATIC_CUBE( \ | 92 | #define TRANS_CUBE_LFr_INVERSE \ |
| 93 | 38, 37, 36, 39, 64, 67, 66, 65, 24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18) | 93 | 38, 37, 36, 39, 64, 67, 66, 65, 24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18 |
| 94 | #define TRANS_CUBE_LDr STATIC_CUBE( \ | 94 | #define TRANS_CUBE_LDr \ |
| 95 | 66, 65, 67, 64, 39, 36, 38, 37, 22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0) | 95 | 66, 65, 67, 64, 39, 36, 38, 37, 22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0 |
| 96 | #define TRANS_CUBE_LDr_INVERSE STATIC_CUBE( \ | 96 | #define TRANS_CUBE_LDr_INVERSE \ |
| 97 | 35, 33, 32, 34, 69, 71, 70, 68, 11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22) | 97 | 35, 33, 32, 34, 69, 71, 70, 68, 11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22 |
| 98 | #define TRANS_CUBE_LBr STATIC_CUBE( \ | 98 | #define TRANS_CUBE_LBr \ |
| 99 | 39, 36, 37, 38, 65, 66, 67, 64, 26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19) | 99 | 39, 36, 37, 38, 65, 66, 67, 64, 26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19 |
| 100 | #define TRANS_CUBE_LBr_INVERSE STATIC_CUBE( \ | 100 | #define TRANS_CUBE_LBr_INVERSE \ |
| 101 | 39, 36, 37, 38, 65, 66, 67, 64, 26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19) | 101 | 39, 36, 37, 38, 65, 66, 67, 64, 26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19 |
| 102 | #define TRANS_CUBE_FUr STATIC_CUBE( \ | 102 | #define TRANS_CUBE_FUr \ |
| 103 | 68, 70, 69, 71, 32, 34, 33, 35, 16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6) | 103 | 68, 70, 69, 71, 32, 34, 33, 35, 16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6 |
| 104 | #define TRANS_CUBE_FUr_INVERSE STATIC_CUBE( \ | 104 | #define TRANS_CUBE_FUr_INVERSE \ |
| 105 | 68, 70, 69, 71, 32, 34, 33, 35, 16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6) | 105 | 68, 70, 69, 71, 32, 34, 33, 35, 16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6 |
| 106 | #define TRANS_CUBE_FRr STATIC_CUBE( \ | 106 | #define TRANS_CUBE_FRr \ |
| 107 | 32, 34, 35, 33, 70, 68, 69, 71, 8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21) | 107 | 32, 34, 35, 33, 70, 68, 69, 71, 8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21 |
| 108 | #define TRANS_CUBE_FRr_INVERSE STATIC_CUBE( \ | 108 | #define TRANS_CUBE_FRr_INVERSE \ |
| 109 | 64, 67, 65, 66, 37, 38, 36, 39, 20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3) | 109 | 64, 67, 65, 66, 37, 38, 36, 39, 20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3 |
| 110 | #define TRANS_CUBE_FDr STATIC_CUBE( \ | 110 | #define TRANS_CUBE_FDr \ |
| 111 | 70, 68, 71, 69, 34, 32, 35, 33, 19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4) | 111 | 70, 68, 71, 69, 34, 32, 35, 33, 19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4 |
| 112 | #define TRANS_CUBE_FDr_INVERSE STATIC_CUBE( \ | 112 | #define TRANS_CUBE_FDr_INVERSE \ |
| 113 | 69, 71, 68, 70, 33, 35, 32, 34, 17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7) | 113 | 69, 71, 68, 70, 33, 35, 32, 34, 17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7 |
| 114 | #define TRANS_CUBE_FLr STATIC_CUBE( \ | 114 | #define TRANS_CUBE_FLr \ |
| 115 | 34, 32, 33, 35, 68, 70, 71, 69, 9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23) | 115 | 34, 32, 33, 35, 68, 70, 71, 69, 9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23 |
| 116 | #define TRANS_CUBE_FLr_INVERSE STATIC_CUBE( \ | 116 | #define TRANS_CUBE_FLr_INVERSE \ |
| 117 | 65, 66, 64, 67, 36, 39, 37, 38, 21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2) | 117 | 65, 66, 64, 67, 36, 39, 37, 38, 21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2 |
| 118 | #define TRANS_CUBE_BUr STATIC_CUBE( \ | 118 | #define TRANS_CUBE_BUr \ |
| 119 | 69, 71, 68, 70, 33, 35, 32, 34, 17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7) | 119 | 69, 71, 68, 70, 33, 35, 32, 34, 17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7 |
| 120 | #define TRANS_CUBE_BUr_INVERSE STATIC_CUBE( \ | 120 | #define TRANS_CUBE_BUr_INVERSE \ |
| 121 | 70, 68, 71, 69, 34, 32, 35, 33, 19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4) | 121 | 70, 68, 71, 69, 34, 32, 35, 33, 19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4 |
| 122 | #define TRANS_CUBE_BRr STATIC_CUBE( \ | 122 | #define TRANS_CUBE_BRr \ |
| 123 | 35, 33, 32, 34, 69, 71, 70, 68, 11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22) | 123 | 35, 33, 32, 34, 69, 71, 70, 68, 11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22 |
| 124 | #define TRANS_CUBE_BRr_INVERSE STATIC_CUBE( \ | 124 | #define TRANS_CUBE_BRr_INVERSE \ |
| 125 | 66, 65, 67, 64, 39, 36, 38, 37, 22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0) | 125 | 66, 65, 67, 64, 39, 36, 38, 37, 22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0 |
| 126 | #define TRANS_CUBE_BDr STATIC_CUBE( \ | 126 | #define TRANS_CUBE_BDr \ |
| 127 | 71, 69, 70, 68, 35, 33, 34, 32, 18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5) | 127 | 71, 69, 70, 68, 35, 33, 34, 32, 18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5 |
| 128 | #define TRANS_CUBE_BDr_INVERSE STATIC_CUBE( \ | 128 | #define TRANS_CUBE_BDr_INVERSE \ |
| 129 | 71, 69, 70, 68, 35, 33, 34, 32, 18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5) | 129 | 71, 69, 70, 68, 35, 33, 34, 32, 18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5 |
| 130 | #define TRANS_CUBE_BLr STATIC_CUBE( \ | 130 | #define TRANS_CUBE_BLr \ |
| 131 | 33, 35, 34, 32, 71, 69, 68, 70, 10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20) | 131 | 33, 35, 34, 32, 71, 69, 68, 70, 10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20 |
| 132 | #define TRANS_CUBE_BLr_INVERSE STATIC_CUBE( \ | 132 | #define TRANS_CUBE_BLr_INVERSE \ |
| 133 | 67, 64, 66, 65, 38, 37, 39, 36, 23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1) | 133 | 67, 64, 66, 65, 38, 37, 39, 36, 23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1 |
| 134 | #define TRANS_CUBE_UFm STATIC_CUBE( \ | 134 | #define TRANS_CUBE_UFm \ |
| 135 | 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10) | 135 | 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10 |
| 136 | #define TRANS_CUBE_UFm_INVERSE STATIC_CUBE( \ | 136 | #define TRANS_CUBE_UFm_INVERSE \ |
| 137 | 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10) | 137 | 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10 |
| 138 | #define TRANS_CUBE_ULm STATIC_CUBE( \ | 138 | #define TRANS_CUBE_ULm \ |
| 139 | 0, 1, 3, 2, 5, 4, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25) | 139 | 0, 1, 3, 2, 5, 4, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25 |
| 140 | #define TRANS_CUBE_ULm_INVERSE STATIC_CUBE( \ | 140 | #define TRANS_CUBE_ULm_INVERSE \ |
| 141 | 0, 1, 3, 2, 5, 4, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25) | 141 | 0, 1, 3, 2, 5, 4, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25 |
| 142 | #define TRANS_CUBE_UBm STATIC_CUBE( \ | 142 | #define TRANS_CUBE_UBm \ |
| 143 | 5, 4, 7, 6, 1, 0, 3, 2, 1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8) | 143 | 5, 4, 7, 6, 1, 0, 3, 2, 1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8 |
| 144 | #define TRANS_CUBE_UBm_INVERSE STATIC_CUBE( \ | 144 | #define TRANS_CUBE_UBm_INVERSE \ |
| 145 | 5, 4, 7, 6, 1, 0, 3, 2, 1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8) | 145 | 5, 4, 7, 6, 1, 0, 3, 2, 1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8 |
| 146 | #define TRANS_CUBE_URm STATIC_CUBE( \ | 146 | #define TRANS_CUBE_URm \ |
| 147 | 1, 0, 2, 3, 4, 5, 7, 6, 5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27) | 147 | 1, 0, 2, 3, 4, 5, 7, 6, 5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27 |
| 148 | #define TRANS_CUBE_URm_INVERSE STATIC_CUBE( \ | 148 | #define TRANS_CUBE_URm_INVERSE \ |
| 149 | 1, 0, 2, 3, 4, 5, 7, 6, 5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27) | 149 | 1, 0, 2, 3, 4, 5, 7, 6, 5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27 |
| 150 | #define TRANS_CUBE_DFm STATIC_CUBE( \ | 150 | #define TRANS_CUBE_DFm \ |
| 151 | 6, 7, 4, 5, 2, 3, 0, 1, 3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11) | 151 | 6, 7, 4, 5, 2, 3, 0, 1, 3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11 |
| 152 | #define TRANS_CUBE_DFm_INVERSE STATIC_CUBE( \ | 152 | #define TRANS_CUBE_DFm_INVERSE \ |
| 153 | 6, 7, 4, 5, 2, 3, 0, 1, 3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11) | 153 | 6, 7, 4, 5, 2, 3, 0, 1, 3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11 |
| 154 | #define TRANS_CUBE_DLm STATIC_CUBE( \ | 154 | #define TRANS_CUBE_DLm \ |
| 155 | 3, 2, 0, 1, 6, 7, 5, 4, 7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26) | 155 | 3, 2, 0, 1, 6, 7, 5, 4, 7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26 |
| 156 | #define TRANS_CUBE_DLm_INVERSE STATIC_CUBE( \ | 156 | #define TRANS_CUBE_DLm_INVERSE \ |
| 157 | 2, 3, 1, 0, 7, 6, 4, 5, 6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24) | 157 | 2, 3, 1, 0, 7, 6, 4, 5, 6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24 |
| 158 | #define TRANS_CUBE_DBm STATIC_CUBE( \ | 158 | #define TRANS_CUBE_DBm \ |
| 159 | 7, 6, 5, 4, 3, 2, 1, 0, 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9) | 159 | 7, 6, 5, 4, 3, 2, 1, 0, 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9 |
| 160 | #define TRANS_CUBE_DBm_INVERSE STATIC_CUBE( \ | 160 | #define TRANS_CUBE_DBm_INVERSE \ |
| 161 | 7, 6, 5, 4, 3, 2, 1, 0, 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9) | 161 | 7, 6, 5, 4, 3, 2, 1, 0, 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9 |
| 162 | #define TRANS_CUBE_DRm STATIC_CUBE( \ | 162 | #define TRANS_CUBE_DRm \ |
| 163 | 2, 3, 1, 0, 7, 6, 4, 5, 6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24) | 163 | 2, 3, 1, 0, 7, 6, 4, 5, 6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24 |
| 164 | #define TRANS_CUBE_DRm_INVERSE STATIC_CUBE( \ | 164 | #define TRANS_CUBE_DRm_INVERSE \ |
| 165 | 3, 2, 0, 1, 6, 7, 5, 4, 7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26) | 165 | 3, 2, 0, 1, 6, 7, 5, 4, 7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26 |
| 166 | #define TRANS_CUBE_RUm STATIC_CUBE( \ | 166 | #define TRANS_CUBE_RUm \ |
| 167 | 68, 71, 69, 70, 33, 34, 32, 35, 21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3) | 167 | 68, 71, 69, 70, 33, 34, 32, 35, 21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3 |
| 168 | #define TRANS_CUBE_RUm_INVERSE STATIC_CUBE( \ | 168 | #define TRANS_CUBE_RUm_INVERSE \ |
| 169 | 70, 68, 69, 71, 32, 34, 35, 33, 8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22) | 169 | 70, 68, 69, 71, 32, 34, 35, 33, 8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22 |
| 170 | #define TRANS_CUBE_RFm STATIC_CUBE( \ | 170 | #define TRANS_CUBE_RFm \ |
| 171 | 34, 33, 32, 35, 68, 71, 70, 69, 25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18) | 171 | 34, 33, 32, 35, 68, 71, 70, 69, 25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18 |
| 172 | #define TRANS_CUBE_RFm_INVERSE STATIC_CUBE( \ | 172 | #define TRANS_CUBE_RFm_INVERSE \ |
| 173 | 66, 65, 64, 67, 36, 39, 38, 37, 25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18) | 173 | 66, 65, 64, 67, 36, 39, 38, 37, 25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18 |
| 174 | #define TRANS_CUBE_RDm STATIC_CUBE( \ | 174 | #define TRANS_CUBE_RDm \ |
| 175 | 71, 68, 70, 69, 34, 33, 35, 32, 22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1) | 175 | 71, 68, 70, 69, 34, 33, 35, 32, 22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1 |
| 176 | #define TRANS_CUBE_RDm_INVERSE STATIC_CUBE( \ | 176 | #define TRANS_CUBE_RDm_INVERSE \ |
| 177 | 71, 69, 68, 70, 33, 35, 34, 32, 10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23) | 177 | 71, 69, 68, 70, 33, 35, 34, 32, 10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23 |
| 178 | #define TRANS_CUBE_RBm STATIC_CUBE( \ | 178 | #define TRANS_CUBE_RBm \ |
| 179 | 33, 34, 35, 32, 71, 68, 69, 70, 26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16) | 179 | 33, 34, 35, 32, 71, 68, 69, 70, 26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16 |
| 180 | #define TRANS_CUBE_RBm_INVERSE STATIC_CUBE( \ | 180 | #define TRANS_CUBE_RBm_INVERSE \ |
| 181 | 67, 64, 65, 66, 37, 38, 39, 36, 27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19) | 181 | 67, 64, 65, 66, 37, 38, 39, 36, 27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19 |
| 182 | #define TRANS_CUBE_LUm STATIC_CUBE( \ | 182 | #define TRANS_CUBE_LUm \ |
| 183 | 69, 70, 68, 71, 32, 35, 33, 34, 20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2) | 183 | 69, 70, 68, 71, 32, 35, 33, 34, 20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2 |
| 184 | #define TRANS_CUBE_LUm_INVERSE STATIC_CUBE( \ | 184 | #define TRANS_CUBE_LUm_INVERSE \ |
| 185 | 68, 70, 71, 69, 34, 32, 33, 35, 9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20) | 185 | 68, 70, 71, 69, 34, 32, 33, 35, 9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20 |
| 186 | #define TRANS_CUBE_LFm STATIC_CUBE( \ | 186 | #define TRANS_CUBE_LFm \ |
| 187 | 32, 35, 34, 33, 70, 69, 68, 71, 24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17) | 187 | 32, 35, 34, 33, 70, 69, 68, 71, 24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17 |
| 188 | #define TRANS_CUBE_LFm_INVERSE STATIC_CUBE( \ | 188 | #define TRANS_CUBE_LFm_INVERSE \ |
| 189 | 64, 67, 66, 65, 38, 37, 36, 39, 24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17) | 189 | 64, 67, 66, 65, 38, 37, 36, 39, 24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17 |
| 190 | #define TRANS_CUBE_LDm STATIC_CUBE( \ | 190 | #define TRANS_CUBE_LDm \ |
| 191 | 70, 69, 71, 68, 35, 32, 34, 33, 23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0) | 191 | 70, 69, 71, 68, 35, 32, 34, 33, 23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0 |
| 192 | #define TRANS_CUBE_LDm_INVERSE STATIC_CUBE( \ | 192 | #define TRANS_CUBE_LDm_INVERSE \ |
| 193 | 69, 71, 70, 68, 35, 33, 32, 34, 11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21) | 193 | 69, 71, 70, 68, 35, 33, 32, 34, 11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21 |
| 194 | #define TRANS_CUBE_LBm STATIC_CUBE( \ | 194 | #define TRANS_CUBE_LBm \ |
| 195 | 35, 32, 33, 34, 69, 70, 71, 68, 27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19) | 195 | 35, 32, 33, 34, 69, 70, 71, 68, 27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19 |
| 196 | #define TRANS_CUBE_LBm_INVERSE STATIC_CUBE( \ | 196 | #define TRANS_CUBE_LBm_INVERSE \ |
| 197 | 65, 66, 67, 64, 39, 36, 37, 38, 26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16) | 197 | 65, 66, 67, 64, 39, 36, 37, 38, 26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16 |
| 198 | #define TRANS_CUBE_FUm STATIC_CUBE( \ | 198 | #define TRANS_CUBE_FUm \ |
| 199 | 64, 66, 65, 67, 36, 38, 37, 39, 16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7) | 199 | 64, 66, 65, 67, 36, 38, 37, 39, 16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7 |
| 200 | #define TRANS_CUBE_FUm_INVERSE STATIC_CUBE( \ | 200 | #define TRANS_CUBE_FUm_INVERSE \ |
| 201 | 32, 34, 33, 35, 68, 70, 69, 71, 16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7) | 201 | 32, 34, 33, 35, 68, 70, 69, 71, 16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7 |
| 202 | #define TRANS_CUBE_FRm STATIC_CUBE( \ | 202 | #define TRANS_CUBE_FRm \ |
| 203 | 36, 38, 39, 37, 66, 64, 65, 67, 9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20) | 203 | 36, 38, 39, 37, 66, 64, 65, 67, 9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20 |
| 204 | #define TRANS_CUBE_FRm_INVERSE STATIC_CUBE( \ | 204 | #define TRANS_CUBE_FRm_INVERSE \ |
| 205 | 37, 38, 36, 39, 64, 67, 65, 66, 20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2) | 205 | 37, 38, 36, 39, 64, 67, 65, 66, 20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2 |
| 206 | #define TRANS_CUBE_FDm STATIC_CUBE( \ | 206 | #define TRANS_CUBE_FDm \ |
| 207 | 66, 64, 67, 65, 38, 36, 39, 37, 19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5) | 207 | 66, 64, 67, 65, 38, 36, 39, 37, 19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5 |
| 208 | #define TRANS_CUBE_FDm_INVERSE STATIC_CUBE( \ | 208 | #define TRANS_CUBE_FDm_INVERSE \ |
| 209 | 33, 35, 32, 34, 69, 71, 68, 70, 17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6) | 209 | 33, 35, 32, 34, 69, 71, 68, 70, 17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6 |
| 210 | #define TRANS_CUBE_FLm STATIC_CUBE( \ | 210 | #define TRANS_CUBE_FLm \ |
| 211 | 38, 36, 37, 39, 64, 66, 67, 65, 8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22) | 211 | 38, 36, 37, 39, 64, 66, 67, 65, 8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22 |
| 212 | #define TRANS_CUBE_FLm_INVERSE STATIC_CUBE( \ | 212 | #define TRANS_CUBE_FLm_INVERSE \ |
| 213 | 36, 39, 37, 38, 65, 66, 64, 67, 21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3) | 213 | 36, 39, 37, 38, 65, 66, 64, 67, 21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3 |
| 214 | #define TRANS_CUBE_BUm STATIC_CUBE( \ | 214 | #define TRANS_CUBE_BUm \ |
| 215 | 65, 67, 64, 66, 37, 39, 36, 38, 17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6) | 215 | 65, 67, 64, 66, 37, 39, 36, 38, 17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6 |
| 216 | #define TRANS_CUBE_BUm_INVERSE STATIC_CUBE( \ | 216 | #define TRANS_CUBE_BUm_INVERSE \ |
| 217 | 34, 32, 35, 33, 70, 68, 71, 69, 19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5) | 217 | 34, 32, 35, 33, 70, 68, 71, 69, 19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5 |
| 218 | #define TRANS_CUBE_BRm STATIC_CUBE( \ | 218 | #define TRANS_CUBE_BRm \ |
| 219 | 39, 37, 36, 38, 65, 67, 66, 64, 10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23) | 219 | 39, 37, 36, 38, 65, 67, 66, 64, 10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23 |
| 220 | #define TRANS_CUBE_BRm_INVERSE STATIC_CUBE( \ | 220 | #define TRANS_CUBE_BRm_INVERSE \ |
| 221 | 39, 36, 38, 37, 66, 65, 67, 64, 22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1) | 221 | 39, 36, 38, 37, 66, 65, 67, 64, 22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1 |
| 222 | #define TRANS_CUBE_BDm STATIC_CUBE( \ | 222 | #define TRANS_CUBE_BDm \ |
| 223 | 67, 65, 66, 64, 39, 37, 38, 36, 18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4) | 223 | 67, 65, 66, 64, 39, 37, 38, 36, 18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4 |
| 224 | #define TRANS_CUBE_BDm_INVERSE STATIC_CUBE( \ | 224 | #define TRANS_CUBE_BDm_INVERSE \ |
| 225 | 35, 33, 34, 32, 71, 69, 70, 68, 18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4) | 225 | 35, 33, 34, 32, 71, 69, 70, 68, 18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4 |
| 226 | #define TRANS_CUBE_BLm STATIC_CUBE( \ | 226 | #define TRANS_CUBE_BLm \ |
| 227 | 37, 39, 38, 36, 67, 65, 64, 66, 11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21) | 227 | 37, 39, 38, 36, 67, 65, 64, 66, 11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21 |
| 228 | #define TRANS_CUBE_BLm_INVERSE STATIC_CUBE( \ | 228 | #define TRANS_CUBE_BLm_INVERSE \ |
| 229 | 38, 37, 39, 36, 67, 64, 66, 65, 23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0) | 229 | 38, 37, 39, 36, 67, 64, 66, 65, 23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0 |
diff --git a/src/core/core.h b/src/core/core.h index 6ffd76f..429039c 100644 --- a/src/core/core.h +++ b/src/core/core.h | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | #include "moves.h" | 6 | #include "moves.h" |
| 7 | 7 | ||
| 8 | /* TODO: work in progress */ | 8 | /* TODO: work in progress */ |
| 9 | #if 0 | 9 | #if 1 |
| 10 | #include "transform.h" | 10 | #include "transform.h" |
| 11 | #else | 11 | #else |
| 12 | #include "transform_with_switch.h" | 12 | #include "transform_with_switch.h" |
diff --git a/src/core/cube.h b/src/core/cube.h index 2252a85..560d113 100644 --- a/src/core/cube.h +++ b/src/core/cube.h | |||
| @@ -1,5 +1,6 @@ | |||
| 1 | STATIC cube_t solvecube(void); | 1 | STATIC cube_t solvecube(void); |
| 2 | STATIC cube_t cubefromarray(uint8_t [static 8], uint8_t [static 12]); | 2 | STATIC_INLINE cube_t cubefromarray_ce(uint8_t [static 8], uint8_t [static 12]); |
| 3 | STATIC_INLINE cube_t cubefromarray_single(uint8_t [static 20]); | ||
| 3 | STATIC bool isconsistent(cube_t); | 4 | STATIC bool isconsistent(cube_t); |
| 4 | STATIC bool issolvable(cube_t); | 5 | STATIC bool issolvable(cube_t); |
| 5 | STATIC bool issolved(cube_t); | 6 | STATIC bool issolved(cube_t); |
| @@ -14,15 +15,23 @@ solvedcube(void) | |||
| 14 | return SOLVED_CUBE; | 15 | return SOLVED_CUBE; |
| 15 | } | 16 | } |
| 16 | 17 | ||
| 17 | STATIC cube_t | 18 | STATIC_INLINE cube_t |
| 18 | cubefromarray(uint8_t c[static 8], uint8_t e[static 12]) | 19 | cubefromarray_ce(uint8_t c[static 8], uint8_t e[static 12]) |
| 19 | { | 20 | { |
| 20 | return STATIC_CUBE( | 21 | return cubefrompieces( |
| 21 | c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7], | 22 | c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7], |
| 22 | e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], | 23 | e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], |
| 23 | e[8], e[9], e[10], e[11]); | 24 | e[8], e[9], e[10], e[11]); |
| 24 | } | 25 | } |
| 25 | 26 | ||
| 27 | STATIC_INLINE cube_t | ||
| 28 | cubefromarray_single(uint8_t p[static 20]) | ||
| 29 | { | ||
| 30 | return cubefrompieces( | ||
| 31 | p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9], p[10], | ||
| 32 | p[11], p[12], p[13], p[14], p[15], p[16], p[17], p[18], p[19]); | ||
| 33 | } | ||
| 34 | |||
| 26 | STATIC bool | 35 | STATIC bool |
| 27 | isconsistent(cube_t cube) | 36 | isconsistent(cube_t cube) |
| 28 | { | 37 | { |
| @@ -178,5 +187,5 @@ getcube(int64_t ep, int64_t eo, int64_t cp, int64_t co) | |||
| 178 | for (i = 0; i < 8; i++) | 187 | for (i = 0; i < 8; i++) |
| 179 | carr[i] |= coarr[i] << COSHIFT; | 188 | carr[i] |= coarr[i] << COSHIFT; |
| 180 | 189 | ||
| 181 | return cubefromarray(carr, earr); | 190 | return cubefromarray_ce(carr, earr); |
| 182 | } | 191 | } |
diff --git a/src/core/io_cube.h b/src/core/io_cube.h index 9ae82d7..58b332c 100644 --- a/src/core/io_cube.h +++ b/src/core/io_cube.h | |||
| @@ -143,7 +143,7 @@ readcube_B32(const char *buf) | |||
| 143 | "Error reading B32 edge %d (char %d)\n", i, i+9); | 143 | "Error reading B32 edge %d (char %d)\n", i, i+9); |
| 144 | } | 144 | } |
| 145 | 145 | ||
| 146 | return cubefromarray(c, e); | 146 | return cubefromarray_ce(c, e); |
| 147 | } | 147 | } |
| 148 | 148 | ||
| 149 | STATIC cube_t | 149 | STATIC cube_t |
| @@ -178,7 +178,7 @@ readcube_H48(const char *buf) | |||
| 178 | c[i] = piece | orient; | 178 | c[i] = piece | orient; |
| 179 | } | 179 | } |
| 180 | 180 | ||
| 181 | return cubefromarray(c, e); | 181 | return cubefromarray_ce(c, e); |
| 182 | } | 182 | } |
| 183 | 183 | ||
| 184 | STATIC uint8_t | 184 | STATIC uint8_t |
| @@ -210,7 +210,7 @@ readcube_LST(const char *buf) | |||
| 210 | for (i = 0; i < 12; i++) | 210 | for (i = 0; i < 12; i++) |
| 211 | e[i] = readpiece_LST(&buf); | 211 | e[i] = readpiece_LST(&buf); |
| 212 | 212 | ||
| 213 | return cubefromarray(c, e); | 213 | return cubefromarray_ce(c, e); |
| 214 | } | 214 | } |
| 215 | 215 | ||
| 216 | STATIC int | 216 | STATIC int |
diff --git a/src/core/moves.h b/src/core/moves.h index f0d7646..4847f03 100644 --- a/src/core/moves.h +++ b/src/core/moves.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | #define MOVE(M, c) compose(c, MOVE_CUBE_ ## M) | 1 | #define MOVE(M, c) compose(c, cubefrompieces(MOVE_CUBE_ ## M)) |
| 2 | #define PREMOVE(M, c) compose(MOVE_CUBE_ ## M, c) | 2 | #define PREMOVE(M, c) compose(cubefrompieces(MOVE_CUBE_ ## M), c) |
| 3 | 3 | ||
| 4 | STATIC_INLINE bool allowednextmove(uint8_t *, uint8_t); | 4 | STATIC_INLINE bool allowednextmove(uint8_t *, uint8_t); |
| 5 | 5 | ||
diff --git a/src/core/transform.h b/src/core/transform.h index 37de46b..f72e2af 100644 --- a/src/core/transform.h +++ b/src/core/transform.h | |||
| @@ -3,106 +3,106 @@ STATIC cube_t transform_corners(cube_t, uint8_t); | |||
| 3 | STATIC cube_t transform(cube_t, uint8_t); | 3 | STATIC cube_t transform(cube_t, uint8_t); |
| 4 | STATIC cube_t applytrans(cube_t, const char *); | 4 | STATIC cube_t applytrans(cube_t, const char *); |
| 5 | 5 | ||
| 6 | static cube_t cube_trans_table[48] = { | 6 | static uint8_t cube_trans_table[48][20] = { |
| 7 | [TRANS_UFr] = TRANS_CUBE_UFr, | 7 | [TRANS_UFr] = { TRANS_CUBE_UFr }, |
| 8 | [TRANS_UFm] = TRANS_CUBE_UFm, | 8 | [TRANS_UFm] = { TRANS_CUBE_UFm }, |
| 9 | [TRANS_ULr] = TRANS_CUBE_URr, | 9 | [TRANS_ULr] = { TRANS_CUBE_ULr }, |
| 10 | [TRANS_ULm] = TRANS_CUBE_ULm, | 10 | [TRANS_ULm] = { TRANS_CUBE_ULm }, |
| 11 | [TRANS_UBr] = TRANS_CUBE_UBr, | 11 | [TRANS_UBr] = { TRANS_CUBE_UBr }, |
| 12 | [TRANS_UBm] = TRANS_CUBE_UBm, | 12 | [TRANS_UBm] = { TRANS_CUBE_UBm }, |
| 13 | [TRANS_URr] = TRANS_CUBE_ULr, | 13 | [TRANS_URr] = { TRANS_CUBE_URr }, |
| 14 | [TRANS_URm] = TRANS_CUBE_URm, | 14 | [TRANS_URm] = { TRANS_CUBE_URm }, |
| 15 | [TRANS_DFr] = TRANS_CUBE_DFr, | 15 | [TRANS_DFr] = { TRANS_CUBE_DFr }, |
| 16 | [TRANS_DFm] = TRANS_CUBE_DFm, | 16 | [TRANS_DFm] = { TRANS_CUBE_DFm }, |
| 17 | [TRANS_DLr] = TRANS_CUBE_DLr, | 17 | [TRANS_DLr] = { TRANS_CUBE_DLr }, |
| 18 | [TRANS_DLm] = TRANS_CUBE_DRm, | 18 | [TRANS_DLm] = { TRANS_CUBE_DLm }, |
| 19 | [TRANS_DBr] = TRANS_CUBE_DBr, | 19 | [TRANS_DBr] = { TRANS_CUBE_DBr }, |
| 20 | [TRANS_DBm] = TRANS_CUBE_DBm, | 20 | [TRANS_DBm] = { TRANS_CUBE_DBm }, |
| 21 | [TRANS_DRr] = TRANS_CUBE_DRr, | 21 | [TRANS_DRr] = { TRANS_CUBE_DRr }, |
| 22 | [TRANS_DRm] = TRANS_CUBE_DLm, | 22 | [TRANS_DRm] = { TRANS_CUBE_DRm }, |
| 23 | [TRANS_RUr] = TRANS_CUBE_FRr, | 23 | [TRANS_RUr] = { TRANS_CUBE_RUr }, |
| 24 | [TRANS_RUm] = TRANS_CUBE_FLm, | 24 | [TRANS_RUm] = { TRANS_CUBE_RUm }, |
| 25 | [TRANS_RFr] = TRANS_CUBE_LFr, | 25 | [TRANS_RFr] = { TRANS_CUBE_RFr }, |
| 26 | [TRANS_RFm] = TRANS_CUBE_RFm, | 26 | [TRANS_RFm] = { TRANS_CUBE_RFm }, |
| 27 | [TRANS_RDr] = TRANS_CUBE_BLr, | 27 | [TRANS_RDr] = { TRANS_CUBE_RDr }, |
| 28 | [TRANS_RDm] = TRANS_CUBE_BRm, | 28 | [TRANS_RDm] = { TRANS_CUBE_RDm }, |
| 29 | [TRANS_RBr] = TRANS_CUBE_RBr, | 29 | [TRANS_RBr] = { TRANS_CUBE_RBr }, |
| 30 | [TRANS_RBm] = TRANS_CUBE_LBm, | 30 | [TRANS_RBm] = { TRANS_CUBE_RBm }, |
| 31 | [TRANS_LUr] = TRANS_CUBE_FLr, | 31 | [TRANS_LUr] = { TRANS_CUBE_LUr }, |
| 32 | [TRANS_LUm] = TRANS_CUBE_FRm, | 32 | [TRANS_LUm] = { TRANS_CUBE_LUm }, |
| 33 | [TRANS_LFr] = TRANS_CUBE_RFr, | 33 | [TRANS_LFr] = { TRANS_CUBE_LFr }, |
| 34 | [TRANS_LFm] = TRANS_CUBE_LFm, | 34 | [TRANS_LFm] = { TRANS_CUBE_LFm }, |
| 35 | [TRANS_LDr] = TRANS_CUBE_BRr, | 35 | [TRANS_LDr] = { TRANS_CUBE_LDr }, |
| 36 | [TRANS_LDm] = TRANS_CUBE_BLm, | 36 | [TRANS_LDm] = { TRANS_CUBE_LDm }, |
| 37 | [TRANS_LBr] = TRANS_CUBE_LBr, | 37 | [TRANS_LBr] = { TRANS_CUBE_LBr }, |
| 38 | [TRANS_LBm] = TRANS_CUBE_RBm, | 38 | [TRANS_LBm] = { TRANS_CUBE_LBm }, |
| 39 | [TRANS_FUr] = TRANS_CUBE_FUr, | 39 | [TRANS_FUr] = { TRANS_CUBE_FUr }, |
| 40 | [TRANS_FUm] = TRANS_CUBE_FUm, | 40 | [TRANS_FUm] = { TRANS_CUBE_FUm }, |
| 41 | [TRANS_FRr] = TRANS_CUBE_RUr, | 41 | [TRANS_FRr] = { TRANS_CUBE_FRr }, |
| 42 | [TRANS_FRm] = TRANS_CUBE_LUm, | 42 | [TRANS_FRm] = { TRANS_CUBE_FRm }, |
| 43 | [TRANS_FDr] = TRANS_CUBE_BUr, | 43 | [TRANS_FDr] = { TRANS_CUBE_FDr }, |
| 44 | [TRANS_FDm] = TRANS_CUBE_BUm, | 44 | [TRANS_FDm] = { TRANS_CUBE_FDm }, |
| 45 | [TRANS_FLr] = TRANS_CUBE_LUr, | 45 | [TRANS_FLr] = { TRANS_CUBE_FLr }, |
| 46 | [TRANS_FLm] = TRANS_CUBE_RUm, | 46 | [TRANS_FLm] = { TRANS_CUBE_FLm }, |
| 47 | [TRANS_BUr] = TRANS_CUBE_FDr, | 47 | [TRANS_BUr] = { TRANS_CUBE_BUr }, |
| 48 | [TRANS_BUm] = TRANS_CUBE_FDm, | 48 | [TRANS_BUm] = { TRANS_CUBE_BUm }, |
| 49 | [TRANS_BRr] = TRANS_CUBE_LDr, | 49 | [TRANS_BRr] = { TRANS_CUBE_BRr }, |
| 50 | [TRANS_BRm] = TRANS_CUBE_RDm, | 50 | [TRANS_BRm] = { TRANS_CUBE_BRm }, |
| 51 | [TRANS_BDr] = TRANS_CUBE_BDr, | 51 | [TRANS_BDr] = { TRANS_CUBE_BDr }, |
| 52 | [TRANS_BDm] = TRANS_CUBE_BDm, | 52 | [TRANS_BDm] = { TRANS_CUBE_BDm }, |
| 53 | [TRANS_BLr] = TRANS_CUBE_RDr, | 53 | [TRANS_BLr] = { TRANS_CUBE_BLr }, |
| 54 | [TRANS_BLm] = TRANS_CUBE_LDm, | 54 | [TRANS_BLm] = { TRANS_CUBE_BLm }, |
| 55 | }; | 55 | }; |
| 56 | 56 | ||
| 57 | static cube_t cube_trans_table_inverse[48] = { | 57 | static uint8_t cube_trans_table_inverse[48][20] = { |
| 58 | [TRANS_UFr] = TRANS_CUBE_UFr_inverse, | 58 | [TRANS_UFr] = { TRANS_CUBE_UFr_INVERSE }, |
| 59 | [TRANS_UFm] = TRANS_CUBE_UFm_inverse, | 59 | [TRANS_UFm] = { TRANS_CUBE_UFm_INVERSE }, |
| 60 | [TRANS_ULr] = TRANS_CUBE_URr_inverse, | 60 | [TRANS_ULr] = { TRANS_CUBE_ULr_INVERSE }, |
| 61 | [TRANS_ULm] = TRANS_CUBE_ULm_inverse, | 61 | [TRANS_ULm] = { TRANS_CUBE_ULm_INVERSE }, |
| 62 | [TRANS_UBr] = TRANS_CUBE_UBr_inverse, | 62 | [TRANS_UBr] = { TRANS_CUBE_UBr_INVERSE }, |
| 63 | [TRANS_UBm] = TRANS_CUBE_UBm_inverse, | 63 | [TRANS_UBm] = { TRANS_CUBE_UBm_INVERSE }, |
| 64 | [TRANS_URr] = TRANS_CUBE_ULr_inverse, | 64 | [TRANS_URr] = { TRANS_CUBE_URr_INVERSE }, |
| 65 | [TRANS_URm] = TRANS_CUBE_URm_inverse, | 65 | [TRANS_URm] = { TRANS_CUBE_URm_INVERSE }, |
| 66 | [TRANS_DFr] = TRANS_CUBE_DFr_inverse, | 66 | [TRANS_DFr] = { TRANS_CUBE_DFr_INVERSE }, |
| 67 | [TRANS_DFm] = TRANS_CUBE_DFm_inverse, | 67 | [TRANS_DFm] = { TRANS_CUBE_DFm_INVERSE }, |
| 68 | [TRANS_DLr] = TRANS_CUBE_DLr_inverse, | 68 | [TRANS_DLr] = { TRANS_CUBE_DLr_INVERSE }, |
| 69 | [TRANS_DLm] = TRANS_CUBE_DRm_inverse, | 69 | [TRANS_DLm] = { TRANS_CUBE_DLm_INVERSE }, |
| 70 | [TRANS_DBr] = TRANS_CUBE_DBr_inverse, | 70 | [TRANS_DBr] = { TRANS_CUBE_DBr_INVERSE }, |
| 71 | [TRANS_DBm] = TRANS_CUBE_DBm_inverse, | 71 | [TRANS_DBm] = { TRANS_CUBE_DBm_INVERSE }, |
| 72 | [TRANS_DRr] = TRANS_CUBE_DRr_inverse, | 72 | [TRANS_DRr] = { TRANS_CUBE_DRr_INVERSE }, |
| 73 | [TRANS_DRm] = TRANS_CUBE_DLm_inverse, | 73 | [TRANS_DRm] = { TRANS_CUBE_DRm_INVERSE }, |
| 74 | [TRANS_RUr] = TRANS_CUBE_FRr_inverse, | 74 | [TRANS_RUr] = { TRANS_CUBE_RUr_INVERSE }, |
| 75 | [TRANS_RUm] = TRANS_CUBE_FLm_inverse, | 75 | [TRANS_RUm] = { TRANS_CUBE_RUm_INVERSE }, |
| 76 | [TRANS_RFr] = TRANS_CUBE_LFr_inverse, | 76 | [TRANS_RFr] = { TRANS_CUBE_RFr_INVERSE }, |
| 77 | [TRANS_RFm] = TRANS_CUBE_RFm_inverse, | 77 | [TRANS_RFm] = { TRANS_CUBE_RFm_INVERSE }, |
| 78 | [TRANS_RDr] = TRANS_CUBE_BLr_inverse, | 78 | [TRANS_RDr] = { TRANS_CUBE_RDr_INVERSE }, |
| 79 | [TRANS_RDm] = TRANS_CUBE_BRm_inverse, | 79 | [TRANS_RDm] = { TRANS_CUBE_RDm_INVERSE }, |
| 80 | [TRANS_RBr] = TRANS_CUBE_RBr_inverse, | 80 | [TRANS_RBr] = { TRANS_CUBE_RBr_INVERSE }, |
| 81 | [TRANS_RBm] = TRANS_CUBE_LBm_inverse, | 81 | [TRANS_RBm] = { TRANS_CUBE_RBm_INVERSE }, |
| 82 | [TRANS_LUr] = TRANS_CUBE_FLr_inverse, | 82 | [TRANS_LUr] = { TRANS_CUBE_LUr_INVERSE }, |
| 83 | [TRANS_LUm] = TRANS_CUBE_FRm_inverse, | 83 | [TRANS_LUm] = { TRANS_CUBE_LUm_INVERSE }, |
| 84 | [TRANS_LFr] = TRANS_CUBE_RFr_inverse, | 84 | [TRANS_LFr] = { TRANS_CUBE_LFr_INVERSE }, |
| 85 | [TRANS_LFm] = TRANS_CUBE_LFm_inverse, | 85 | [TRANS_LFm] = { TRANS_CUBE_LFm_INVERSE }, |
| 86 | [TRANS_LDr] = TRANS_CUBE_BRr_inverse, | 86 | [TRANS_LDr] = { TRANS_CUBE_LDr_INVERSE }, |
| 87 | [TRANS_LDm] = TRANS_CUBE_BLm_inverse, | 87 | [TRANS_LDm] = { TRANS_CUBE_LDm_INVERSE }, |
| 88 | [TRANS_LBr] = TRANS_CUBE_LBr_inverse, | 88 | [TRANS_LBr] = { TRANS_CUBE_LBr_INVERSE }, |
| 89 | [TRANS_LBm] = TRANS_CUBE_RBm_inverse, | 89 | [TRANS_LBm] = { TRANS_CUBE_LBm_INVERSE }, |
| 90 | [TRANS_FUr] = TRANS_CUBE_FUr_inverse, | 90 | [TRANS_FUr] = { TRANS_CUBE_FUr_INVERSE }, |
| 91 | [TRANS_FUm] = TRANS_CUBE_FUm_inverse, | 91 | [TRANS_FUm] = { TRANS_CUBE_FUm_INVERSE }, |
| 92 | [TRANS_FRr] = TRANS_CUBE_RUr_inverse, | 92 | [TRANS_FRr] = { TRANS_CUBE_FRr_INVERSE }, |
| 93 | [TRANS_FRm] = TRANS_CUBE_LUm_inverse, | 93 | [TRANS_FRm] = { TRANS_CUBE_FRm_INVERSE }, |
| 94 | [TRANS_FDr] = TRANS_CUBE_BUr_inverse, | 94 | [TRANS_FDr] = { TRANS_CUBE_FDr_INVERSE }, |
| 95 | [TRANS_FDm] = TRANS_CUBE_BUm_inverse, | 95 | [TRANS_FDm] = { TRANS_CUBE_FDm_INVERSE }, |
| 96 | [TRANS_FLr] = TRANS_CUBE_LUr_inverse, | 96 | [TRANS_FLr] = { TRANS_CUBE_FLr_INVERSE }, |
| 97 | [TRANS_FLm] = TRANS_CUBE_RUm_inverse, | 97 | [TRANS_FLm] = { TRANS_CUBE_FLm_INVERSE }, |
| 98 | [TRANS_BUr] = TRANS_CUBE_FDr_inverse, | 98 | [TRANS_BUr] = { TRANS_CUBE_BUr_INVERSE }, |
| 99 | [TRANS_BUm] = TRANS_CUBE_FDm_inverse, | 99 | [TRANS_BUm] = { TRANS_CUBE_BUm_INVERSE }, |
| 100 | [TRANS_BRr] = TRANS_CUBE_LDr_inverse, | 100 | [TRANS_BRr] = { TRANS_CUBE_BRr_INVERSE }, |
| 101 | [TRANS_BRm] = TRANS_CUBE_RDm_inverse, | 101 | [TRANS_BRm] = { TRANS_CUBE_BRm_INVERSE }, |
| 102 | [TRANS_BDr] = TRANS_CUBE_BDr_inverse, | 102 | [TRANS_BDr] = { TRANS_CUBE_BDr_INVERSE }, |
| 103 | [TRANS_BDm] = TRANS_CUBE_BDm_inverse, | 103 | [TRANS_BDm] = { TRANS_CUBE_BDm_INVERSE }, |
| 104 | [TRANS_BLr] = TRANS_CUBE_RDr_inverse, | 104 | [TRANS_BLr] = { TRANS_CUBE_BLr_INVERSE }, |
| 105 | [TRANS_BLm] = TRANS_CUBE_LDm_inverse, | 105 | [TRANS_BLm] = { TRANS_CUBE_BLm_INVERSE }, |
| 106 | }; | 106 | }; |
| 107 | 107 | ||
| 108 | STATIC cube_t | 108 | STATIC cube_t |
| @@ -114,8 +114,8 @@ transform_edges(cube_t c, uint8_t t) | |||
| 114 | "transform: invalid transformation %" PRIu8 | 114 | "transform: invalid transformation %" PRIu8 |
| 115 | ", must be between 0 and 47\n", t); | 115 | ", must be between 0 and 47\n", t); |
| 116 | 116 | ||
| 117 | trans_cube = cube_trans_table[t]; | 117 | trans_cube = cubefromarray_single(cube_trans_table[t]); |
| 118 | trans_inv = cube_trans_table_inverse[t]; | 118 | trans_inv = cubefromarray_single(cube_trans_table_inverse[t]); |
| 119 | 119 | ||
| 120 | ret = compose_edges(trans_cube, c); | 120 | ret = compose_edges(trans_cube, c); |
| 121 | ret = compose_edges(ret, trans_inv); | 121 | ret = compose_edges(ret, trans_inv); |
| @@ -132,8 +132,8 @@ transform_corners(cube_t c, uint8_t t) | |||
| 132 | "transform: invalid transformation %" PRIu8 | 132 | "transform: invalid transformation %" PRIu8 |
| 133 | ", must be between 0 and 47\n", t); | 133 | ", must be between 0 and 47\n", t); |
| 134 | 134 | ||
| 135 | trans_cube = cube_trans_table[t]; | 135 | trans_cube = cubefromarray_single(cube_trans_table[t]); |
| 136 | trans_inv = cube_trans_table_inverse[t]; | 136 | trans_inv = cubefromarray_single(cube_trans_table_inverse[t]); |
| 137 | 137 | ||
| 138 | ret = compose_corners(trans_cube, c); | 138 | ret = compose_corners(trans_cube, c); |
| 139 | ret = compose_corners(ret, trans_inv); | 139 | ret = compose_corners(ret, trans_inv); |
| @@ -150,8 +150,8 @@ transform(cube_t c, uint8_t t) | |||
| 150 | "transform: invalid transformation %" PRIu8 | 150 | "transform: invalid transformation %" PRIu8 |
| 151 | ", must be between 0 and 47\n", t); | 151 | ", must be between 0 and 47\n", t); |
| 152 | 152 | ||
| 153 | trans_cube = cube_trans_table[t]; | 153 | trans_cube = cubefromarray_single(cube_trans_table[t]); |
| 154 | trans_inv = cube_trans_table_inverse[t]; | 154 | trans_inv = cubefromarray_single(cube_trans_table_inverse[t]); |
| 155 | 155 | ||
| 156 | ret = compose(trans_cube, c); | 156 | ret = compose(trans_cube, c); |
| 157 | ret = compose(ret, trans_inv); | 157 | ret = compose(ret, trans_inv); |
