aboutsummaryrefslogtreecommitdiff
path: root/src/_move_logic_arr.c
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2023-10-28 20:42:24 +0200
committerSebastiano Tronto <sebastiano@tronto.net>2023-10-28 20:42:24 +0200
commitb05fa355c49c619cce1226716a395381a944f578 (patch)
treeb46416e2fbbc70f3d780f4e0ea3de7763115efe0 /src/_move_logic_arr.c
parentfabb1ae495c4404af0f26380c97d0bca7e881a27 (diff)
downloadnissy-core-b05fa355c49c619cce1226716a395381a944f578.tar.gz
nissy-core-b05fa355c49c619cce1226716a395381a944f578.zip
Started working on AVX2 (not working yet)
Diffstat (limited to 'src/_move_logic_arr.c')
-rw-r--r--src/_move_logic_arr.c149
1 files changed, 149 insertions, 0 deletions
diff --git a/src/_move_logic_arr.c b/src/_move_logic_arr.c
new file mode 100644
index 0000000..d8aec10
--- /dev/null
+++ b/src/_move_logic_arr.c
@@ -0,0 +1,149 @@
1#define PERM4(r, i, j, k, l) \
2 aux = r[i]; \
3 r[i] = r[l]; \
4 r[l] = r[k]; \
5 r[k] = r[j]; \
6 r[j] = aux;
7#define PERM22(r, i, j, k, l) \
8 aux = r[i]; \
9 r[i] = r[j]; \
10 r[j] = aux; \
11 aux = r[k]; \
12 r[k] = r[l]; \
13 r[l] = aux;
14#define CO(a, b) \
15 aux = (a & _cobits) + (b & _cobits); \
16 auy = (aux + _ctwist_cw) >> 2U; \
17 auz = (aux + auy) & _cobits2; \
18 a = (a & _pbits) | auz;
19#define CO4(r, i, j, k, l) \
20 CO(r[i], _ctwist_cw) \
21 CO(r[j], _ctwist_cw) \
22 CO(r[k], _ctwist_ccw) \
23 CO(r[l], _ctwist_ccw)
24#define EO4(r, i, j, k, l) \
25 r[i] ^= _eobit; \
26 r[j] ^= _eobit; \
27 r[k] ^= _eobit; \
28 r[l] ^= _eobit;
29
30uint8_t aux, auy, auz;
31cube_t ret = c;
32
33switch (m) {
34case U:
35 PERM4(ret.e, _e_uf, _e_ul, _e_ub, _e_ur)
36 PERM4(ret.c, _c_ufr, _c_ufl, _c_ubl, _c_ubr)
37
38 return ret;
39case U2:
40 PERM22(ret.e, _e_uf, _e_ub, _e_ul, _e_ur)
41 PERM22(ret.c, _c_ufr, _c_ubl, _c_ufl, _c_ubr)
42
43 return ret;
44case U3:
45 PERM4(ret.e, _e_uf, _e_ur, _e_ub, _e_ul)
46 PERM4(ret.c, _c_ufr, _c_ubr, _c_ubl, _c_ufl)
47
48 return ret;
49case D:
50 PERM4(ret.e, _e_df, _e_dr, _e_db, _e_dl)
51 PERM4(ret.c, _c_dfr, _c_dbr, _c_dbl, _c_dfl)
52
53 return ret;
54case D2:
55 PERM22(ret.e, _e_df, _e_db, _e_dr, _e_dl)
56 PERM22(ret.c, _c_dfr, _c_dbl, _c_dbr, _c_dfl)
57
58 return ret;
59case D3:
60 PERM4(ret.e, _e_df, _e_dl, _e_db, _e_dr)
61 PERM4(ret.c, _c_dfr, _c_dfl, _c_dbl, _c_dbr)
62
63 return ret;
64case R:
65 PERM4(ret.e, _e_ur, _e_br, _e_dr, _e_fr)
66 PERM4(ret.c, _c_ufr, _c_ubr, _c_dbr, _c_dfr)
67
68 CO4(ret.c, _c_ubr, _c_dfr, _c_ufr, _c_dbr)
69
70 return ret;
71case R2:
72 PERM22(ret.e, _e_ur, _e_dr, _e_fr, _e_br)
73 PERM22(ret.c, _c_ufr, _c_dbr, _c_ubr, _c_dfr)
74
75 return ret;
76case R3:
77 PERM4(ret.e, _e_ur, _e_fr, _e_dr, _e_br)
78 PERM4(ret.c, _c_ufr, _c_dfr, _c_dbr, _c_ubr)
79
80 CO4(ret.c, _c_ubr, _c_dfr, _c_ufr, _c_dbr)
81
82 return ret;
83case L:
84 PERM4(ret.e, _e_ul, _e_fl, _e_dl, _e_bl)
85 PERM4(ret.c, _c_ufl, _c_dfl, _c_dbl, _c_ubl)
86
87 CO4(ret.c, _c_ufl, _c_dbl, _c_dfl, _c_ubl)
88
89 return ret;
90case L2:
91 PERM22(ret.e, _e_ul, _e_dl, _e_fl, _e_bl)
92 PERM22(ret.c, _c_ufl, _c_dbl, _c_ubl, _c_dfl)
93
94 return ret;
95case L3:
96 PERM4(ret.e, _e_ul, _e_bl, _e_dl, _e_fl)
97 PERM4(ret.c, _c_ufl, _c_ubl, _c_dbl, _c_dfl)
98
99 CO4(ret.c, _c_ufl, _c_dbl, _c_dfl, _c_ubl)
100
101 return ret;
102case F:
103 PERM4(ret.e, _e_uf, _e_fr, _e_df, _e_fl)
104 PERM4(ret.c, _c_ufr, _c_dfr, _c_dfl, _c_ufl)
105
106 EO4(ret.e, _e_uf, _e_fr, _e_df, _e_fl)
107 CO4(ret.c, _c_ufr, _c_dfl, _c_dfr, _c_ufl)
108
109 return ret;
110case F2:
111 PERM22(ret.e, _e_uf, _e_df, _e_fr, _e_fl)
112 PERM22(ret.c, _c_ufr, _c_dfl, _c_ufl, _c_dfr)
113
114 return ret;
115case F3:
116 PERM4(ret.e, _e_uf, _e_fl, _e_df, _e_fr)
117 PERM4(ret.c, _c_ufr, _c_ufl, _c_dfl, _c_dfr)
118
119 EO4(ret.e, _e_uf, _e_fr, _e_df, _e_fl)
120 CO4(ret.c, _c_ufr, _c_dfl, _c_dfr, _c_ufl)
121
122 return ret;
123case B:
124 PERM4(ret.e, _e_ub, _e_bl, _e_db, _e_br)
125 PERM4(ret.c, _c_ubr, _c_ubl, _c_dbl, _c_dbr)
126
127 EO4(ret.e, _e_ub, _e_br, _e_db, _e_bl)
128 CO4(ret.c, _c_ubl, _c_dbr, _c_dbl, _c_ubr)
129
130 return ret;
131case B2:
132 PERM22(ret.e, _e_ub, _e_db, _e_br, _e_bl)
133 PERM22(ret.c, _c_ubr, _c_dbl, _c_ubl, _c_dbr)
134
135 return ret;
136case B3:
137 PERM4(ret.e, _e_ub, _e_br, _e_db, _e_bl)
138 PERM4(ret.c, _c_ubr, _c_dbr, _c_dbl, _c_ubl)
139
140 EO4(ret.e, _e_ub, _e_br, _e_db, _e_bl)
141 CO4(ret.c, _c_ubl, _c_dbr, _c_dbl, _c_ubr)
142
143 return ret;
144default:
145#ifdef DEBUG
146 fprintf(stderr, "mover error, unknown move\n");
147#endif
148 goto move_error;
149}

Generated with cgit - Back to sebastiano.tronto.net