aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2024-10-04 12:01:41 +0200
committerSebastiano Tronto <sebastiano@tronto.net>2024-10-04 12:01:41 +0200
commit80b065f757240af7920862b3e09f32a6dc06d392 (patch)
treec0223ba1f0a3254305f59637b3fb25bd58698cf8 /src
parentfd111a1a51b8293f79db6284331af50824df92b9 (diff)
downloadnissy-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.h42
-rw-r--r--src/arch/common.h7
-rw-r--r--src/arch/neon.h57
-rw-r--r--src/arch/portable.h49
-rw-r--r--src/core/constant_cubes.h456
-rw-r--r--src/core/core.h2
-rw-r--r--src/core/cube.h19
-rw-r--r--src/core/io_cube.h6
-rw-r--r--src/core/moves.h4
-rw-r--r--src/core/transform.h208
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
19STATIC void 9STATIC void
20pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12]) 10pieces(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
19STATIC_INLINE cube_t
20cubefrompieces(
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
29STATIC_INLINE bool 51STATIC_INLINE bool
30equal(cube_t c1, cube_t c2) 52equal(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)
1STATIC void pieces(cube_t *, uint8_t [static 8], uint8_t [static 12]); 5STATIC void pieces(cube_t *, uint8_t [static 8], uint8_t [static 12]);
6STATIC_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);
2STATIC_INLINE bool equal(cube_t, cube_t); 9STATIC_INLINE bool equal(cube_t, cube_t);
3STATIC_INLINE cube_t invertco(cube_t); 10STATIC_INLINE cube_t invertco(cube_t);
4STATIC_INLINE cube_t compose_epcpeo(cube_t, cube_t); 11STATIC_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 @@
7STATIC_INLINE uint8x16_t compose_edges_slim(uint8x16_t, uint8x16_t); 7STATIC_INLINE uint8x16_t compose_edges_slim(uint8x16_t, uint8x16_t);
8STATIC_INLINE uint8x16_t compose_corners_slim(uint8x16_t, uint8x16_t); 8STATIC_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
29STATIC void 10STATIC void
30pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12]) 11pieces(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
23STATIC_INLINE cube_t
24cubefrompieces(
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
42STATIC_INLINE bool 61STATIC_INLINE bool
43equal(cube_t c1, cube_t c2) 62equal(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
12STATIC void 1STATIC void
13pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12]) 2pieces(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
8STATIC_INLINE cube_t
9cubefrompieces(
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
19STATIC_INLINE bool 46STATIC_INLINE bool
20equal(cube_t c1, cube_t c2) 47equal(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 @@
1STATIC cube_t solvecube(void); 1STATIC cube_t solvecube(void);
2STATIC cube_t cubefromarray(uint8_t [static 8], uint8_t [static 12]); 2STATIC_INLINE cube_t cubefromarray_ce(uint8_t [static 8], uint8_t [static 12]);
3STATIC_INLINE cube_t cubefromarray_single(uint8_t [static 20]);
3STATIC bool isconsistent(cube_t); 4STATIC bool isconsistent(cube_t);
4STATIC bool issolvable(cube_t); 5STATIC bool issolvable(cube_t);
5STATIC bool issolved(cube_t); 6STATIC bool issolved(cube_t);
@@ -14,15 +15,23 @@ solvedcube(void)
14 return SOLVED_CUBE; 15 return SOLVED_CUBE;
15} 16}
16 17
17STATIC cube_t 18STATIC_INLINE cube_t
18cubefromarray(uint8_t c[static 8], uint8_t e[static 12]) 19cubefromarray_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
27STATIC_INLINE cube_t
28cubefromarray_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
26STATIC bool 35STATIC bool
27isconsistent(cube_t cube) 36isconsistent(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
149STATIC cube_t 149STATIC 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
184STATIC uint8_t 184STATIC 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
216STATIC int 216STATIC 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
4STATIC_INLINE bool allowednextmove(uint8_t *, uint8_t); 4STATIC_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);
3STATIC cube_t transform(cube_t, uint8_t); 3STATIC cube_t transform(cube_t, uint8_t);
4STATIC cube_t applytrans(cube_t, const char *); 4STATIC cube_t applytrans(cube_t, const char *);
5 5
6static cube_t cube_trans_table[48] = { 6static 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
57static cube_t cube_trans_table_inverse[48] = { 57static 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
108STATIC cube_t 108STATIC 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);

Generated with cgit - Back to sebastiano.tronto.net