aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2023-11-17 19:14:26 +0100
committerSebastiano Tronto <sebastiano@tronto.net>2023-11-17 19:14:26 +0100
commitd6fdf14d5c320bdca455f910d58d652c5a7827da (patch)
tree15642a013e719e81526cf02b6656ce22adb8a3cf
parenta26ae103faf8fa53b65f7757fb8b4255a37fcd22 (diff)
downloadnissy-core-d6fdf14d5c320bdca455f910d58d652c5a7827da.tar.gz
nissy-core-d6fdf14d5c320bdca455f910d58d652c5a7827da.zip
Simplified move and transform code
Diffstat (limited to '')
-rw-r--r--.gitignore1
-rw-r--r--cube.c3212
-rwxr-xr-xold/moves_trans/genmovecode.sh19
-rwxr-xr-xold/moves_trans/gentranscode.sh42
-rw-r--r--old/moves_trans/moves_src.c264
-rw-r--r--transavx384
-rwxr-xr-xutils/genmovecode.sh16
-rwxr-xr-xutils/genmoveswitch.sh8
-rwxr-xr-xutils/gentranscode.sh38
-rwxr-xr-xutils/gentransswitch.sh8
-rw-r--r--utils/h48_to_avx.c4
-rw-r--r--utils/h48_to_src.c4
-rw-r--r--utils/invert.c4
13 files changed, 1513 insertions, 2491 deletions
diff --git a/.gitignore b/.gitignore
index ec1e51b..d47841b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
1generated
1config.mk 2config.mk
2benchmark/results 3benchmark/results
3old/benchmark/results 4old/benchmark/results
diff --git a/cube.c b/cube.c
index 23c5132..9fd1949 100644
--- a/cube.c
+++ b/cube.c
@@ -265,6 +265,350 @@ typedef __m256i cube_fast_t;
265 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 5, 4, 3, 2, 1, 0 \ 265 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 5, 4, 3, 2, 1, 0 \
266) 266)
267 267
268#define _move_cube_U _mm256_set_epi8( \
269 0, 0, 0, 0, 11, 10, 9, 8, 7, 6, 0, 1, 3, 2, 5, 4, \
270 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 1, 0, 3, 2, 4, 5)
271#define _move_cube_U2 _mm256_set_epi8( \
272 0, 0, 0, 0, 11, 10, 9, 8, 7, 6, 4, 5, 3, 2, 0, 1, \
273 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 4, 5, 3, 2, 0, 1)
274#define _move_cube_U3 _mm256_set_epi8( \
275 0, 0, 0, 0, 11, 10, 9, 8, 7, 6, 1, 0, 3, 2, 4, 5, \
276 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 0, 1, 3, 2, 5, 4)
277#define _move_cube_D _mm256_set_epi8( \
278 0, 0, 0, 0, 11, 10, 9, 8, 3, 2, 5, 4, 6, 7, 1, 0, \
279 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 5, 4, 6, 7, 1, 0)
280#define _move_cube_D2 _mm256_set_epi8( \
281 0, 0, 0, 0, 11, 10, 9, 8, 6, 7, 5, 4, 2, 3, 1, 0, \
282 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 5, 4, 2, 3, 1, 0)
283#define _move_cube_D3 _mm256_set_epi8( \
284 0, 0, 0, 0, 11, 10, 9, 8, 2, 3, 5, 4, 7, 6, 1, 0, \
285 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 4, 7, 6, 1, 0)
286#define _move_cube_R _mm256_set_epi8( \
287 0, 0, 0, 0, 4, 10, 9, 7, 11, 6, 5, 8, 3, 2, 1, 0, \
288 0, 0, 0, 0, 0, 0, 0, 0, 7, 35, 32, 4, 69, 2, 1, 70)
289#define _move_cube_R2 _mm256_set_epi8( \
290 0, 0, 0, 0, 8, 10, 9, 11, 4, 6, 5, 7, 3, 2, 1, 0, \
291 0, 0, 0, 0, 0, 0, 0, 0, 7, 5, 6, 4, 0, 2, 1, 3)
292#define _move_cube_R3 _mm256_set_epi8( \
293 0, 0, 0, 0, 7, 10, 9, 4, 8, 6, 5, 11, 3, 2, 1, 0, \
294 0, 0, 0, 0, 0, 0, 0, 0, 7, 32, 35, 4, 70, 2, 1, 69)
295#define _move_cube_L _mm256_set_epi8( \
296 0, 0, 0, 0, 11, 6, 5, 8, 7, 9, 10, 4, 3, 2, 1, 0, \
297 0, 0, 0, 0, 0, 0, 0, 0, 34, 6, 5, 33, 3, 68, 71, 0)
298#define _move_cube_L2 _mm256_set_epi8( \
299 0, 0, 0, 0, 11, 9, 10, 8, 7, 5, 6, 4, 3, 2, 1, 0, \
300 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 5, 7, 3, 1, 2, 0)
301#define _move_cube_L3 _mm256_set_epi8( \
302 0, 0, 0, 0, 11, 5, 6, 8, 7, 10, 9, 4, 3, 2, 1, 0, \
303 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 5, 34, 3, 71, 68, 0)
304#define _move_cube_F _mm256_set_epi8( \
305 0, 0, 0, 0, 11, 10, 19, 16, 7, 6, 5, 4, 24, 2, 1, 25, \
306 0, 0, 0, 0, 0, 0, 0, 0, 7, 64, 5, 66, 3, 38, 1, 36)
307#define _move_cube_F2 _mm256_set_epi8( \
308 0, 0, 0, 0, 11, 10, 8, 9, 7, 6, 5, 4, 0, 2, 1, 3, \
309 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 5, 6, 3, 0, 1, 2)
310#define _move_cube_F3 _mm256_set_epi8( \
311 0, 0, 0, 0, 11, 10, 16, 19, 7, 6, 5, 4, 25, 2, 1, 24, \
312 0, 0, 0, 0, 0, 0, 0, 0, 7, 66, 5, 64, 3, 36, 1, 38)
313#define _move_cube_B _mm256_set_epi8( \
314 0, 0, 0, 0, 18, 17, 9, 8, 7, 6, 5, 4, 3, 26, 27, 0, \
315 0, 0, 0, 0, 0, 0, 0, 0, 65, 6, 67, 4, 39, 2, 37, 0)
316#define _move_cube_B2 _mm256_set_epi8( \
317 0, 0, 0, 0, 10, 11, 9, 8, 7, 6, 5, 4, 3, 1, 2, 0, \
318 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 4, 1, 2, 3, 0)
319#define _move_cube_B3 _mm256_set_epi8( \
320 0, 0, 0, 0, 17, 18, 9, 8, 7, 6, 5, 4, 3, 27, 26, 0, \
321 0, 0, 0, 0, 0, 0, 0, 0, 67, 6, 65, 4, 37, 2, 39, 0)
322
323#define _trans_cube_UFr _mm256_set_epi8( \
324 0, 0, 0, 0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, \
325 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 5, 4, 3, 2, 1, 0)
326#define _trans_cube_UFr_inverse _mm256_set_epi8( \
327 0, 0, 0, 0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, \
328 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 5, 4, 3, 2, 1, 0)
329#define _trans_cube_ULr _mm256_set_epi8( \
330 0, 0, 0, 0, 24, 27, 26, 25, 3, 2, 1, 0, 6, 7, 4, 5, \
331 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 1, 6, 7, 5, 4)
332#define _trans_cube_ULr_inverse _mm256_set_epi8( \
333 0, 0, 0, 0, 26, 25, 24, 27, 2, 3, 0, 1, 7, 6, 5, 4, \
334 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0, 7, 6, 4, 5)
335#define _trans_cube_UBr _mm256_set_epi8( \
336 0, 0, 0, 0, 9, 8, 11, 10, 6, 7, 4, 5, 2, 3, 0, 1, \
337 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 4, 5, 2, 3, 0, 1)
338#define _trans_cube_UBr_inverse _mm256_set_epi8( \
339 0, 0, 0, 0, 9, 8, 11, 10, 6, 7, 4, 5, 2, 3, 0, 1, \
340 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 4, 5, 2, 3, 0, 1)
341#define _trans_cube_URr _mm256_set_epi8( \
342 0, 0, 0, 0, 26, 25, 24, 27, 2, 3, 0, 1, 7, 6, 5, 4, \
343 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0, 7, 6, 4, 5)
344#define _trans_cube_URr_inverse _mm256_set_epi8( \
345 0, 0, 0, 0, 24, 27, 26, 25, 3, 2, 1, 0, 6, 7, 4, 5, \
346 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 1, 6, 7, 5, 4)
347#define _trans_cube_DFr _mm256_set_epi8( \
348 0, 0, 0, 0, 10, 11, 8, 9, 5, 4, 7, 6, 0, 1, 2, 3, \
349 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 7, 6, 1, 0, 3, 2)
350#define _trans_cube_DFr_inverse _mm256_set_epi8( \
351 0, 0, 0, 0, 10, 11, 8, 9, 5, 4, 7, 6, 0, 1, 2, 3, \
352 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 7, 6, 1, 0, 3, 2)
353#define _trans_cube_DLr _mm256_set_epi8( \
354 0, 0, 0, 0, 27, 24, 25, 26, 1, 0, 3, 2, 5, 4, 7, 6, \
355 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 5, 4, 6, 7)
356#define _trans_cube_DLr_inverse _mm256_set_epi8( \
357 0, 0, 0, 0, 27, 24, 25, 26, 1, 0, 3, 2, 5, 4, 7, 6, \
358 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 5, 4, 6, 7)
359#define _trans_cube_DBr _mm256_set_epi8( \
360 0, 0, 0, 0, 8, 9, 10, 11, 4, 5, 6, 7, 1, 0, 3, 2, \
361 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 0, 1, 2, 3)
362#define _trans_cube_DBr_inverse _mm256_set_epi8( \
363 0, 0, 0, 0, 8, 9, 10, 11, 4, 5, 6, 7, 1, 0, 3, 2, \
364 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 0, 1, 2, 3)
365#define _trans_cube_DRr _mm256_set_epi8( \
366 0, 0, 0, 0, 25, 26, 27, 24, 0, 1, 2, 3, 4, 5, 6, 7, \
367 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 3, 4, 5, 7, 6)
368#define _trans_cube_DRr_inverse _mm256_set_epi8( \
369 0, 0, 0, 0, 25, 26, 27, 24, 0, 1, 2, 3, 4, 5, 6, 7, \
370 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 3, 4, 5, 7, 6)
371#define _trans_cube_RUr _mm256_set_epi8( \
372 0, 0, 0, 0, 3, 2, 1, 0, 25, 26, 27, 24, 21, 22, 23, 20, \
373 0, 0, 0, 0, 0, 0, 0, 0, 39, 36, 38, 37, 66, 65, 67, 64)
374#define _trans_cube_RUr_inverse _mm256_set_epi8( \
375 0, 0, 0, 0, 21, 22, 23, 20, 17, 18, 19, 16, 11, 10, 9, 8, \
376 0, 0, 0, 0, 0, 0, 0, 0, 71, 69, 68, 70, 33, 35, 34, 32)
377#define _trans_cube_RFr _mm256_set_epi8( \
378 0, 0, 0, 0, 18, 17, 16, 19, 22, 21, 20, 23, 25, 26, 27, 24, \
379 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 64, 39, 36, 37, 38)
380#define _trans_cube_RFr_inverse _mm256_set_epi8( \
381 0, 0, 0, 0, 17, 18, 19, 16, 20, 23, 22, 21, 24, 27, 26, 25, \
382 0, 0, 0, 0, 0, 0, 0, 0, 67, 64, 65, 66, 37, 38, 39, 36)
383#define _trans_cube_RDr _mm256_set_epi8( \
384 0, 0, 0, 0, 1, 0, 3, 2, 26, 25, 24, 27, 22, 21, 20, 23, \
385 0, 0, 0, 0, 0, 0, 0, 0, 36, 39, 37, 38, 65, 66, 64, 67)
386#define _trans_cube_RDr_inverse _mm256_set_epi8( \
387 0, 0, 0, 0, 20, 23, 22, 21, 16, 19, 18, 17, 9, 8, 11, 10, \
388 0, 0, 0, 0, 0, 0, 0, 0, 70, 68, 69, 71, 32, 34, 35, 33)
389#define _trans_cube_RBr _mm256_set_epi8( \
390 0, 0, 0, 0, 16, 19, 18, 17, 21, 22, 23, 20, 26, 25, 24, 27, \
391 0, 0, 0, 0, 0, 0, 0, 0, 66, 65, 64, 67, 36, 39, 38, 37)
392#define _trans_cube_RBr_inverse _mm256_set_epi8( \
393 0, 0, 0, 0, 16, 19, 18, 17, 21, 22, 23, 20, 26, 25, 24, 27, \
394 0, 0, 0, 0, 0, 0, 0, 0, 66, 65, 64, 67, 36, 39, 38, 37)
395#define _trans_cube_LUr _mm256_set_epi8( \
396 0, 0, 0, 0, 2, 3, 0, 1, 27, 24, 25, 26, 20, 23, 22, 21, \
397 0, 0, 0, 0, 0, 0, 0, 0, 38, 37, 39, 36, 67, 64, 66, 65)
398#define _trans_cube_LUr_inverse _mm256_set_epi8( \
399 0, 0, 0, 0, 23, 20, 21, 22, 18, 17, 16, 19, 10, 11, 8, 9, \
400 0, 0, 0, 0, 0, 0, 0, 0, 69, 71, 70, 68, 35, 33, 32, 34)
401#define _trans_cube_LFr _mm256_set_epi8( \
402 0, 0, 0, 0, 17, 18, 19, 16, 20, 23, 22, 21, 24, 27, 26, 25, \
403 0, 0, 0, 0, 0, 0, 0, 0, 67, 64, 65, 66, 37, 38, 39, 36)
404#define _trans_cube_LFr_inverse _mm256_set_epi8( \
405 0, 0, 0, 0, 18, 17, 16, 19, 22, 21, 20, 23, 25, 26, 27, 24, \
406 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 64, 39, 36, 37, 38)
407#define _trans_cube_LDr _mm256_set_epi8( \
408 0, 0, 0, 0, 0, 1, 2, 3, 24, 27, 26, 25, 23, 20, 21, 22, \
409 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 36, 39, 64, 67, 65, 66)
410#define _trans_cube_LDr_inverse _mm256_set_epi8( \
411 0, 0, 0, 0, 22, 21, 20, 23, 19, 16, 17, 18, 8, 9, 10, 11, \
412 0, 0, 0, 0, 0, 0, 0, 0, 68, 70, 71, 69, 34, 32, 33, 35)
413#define _trans_cube_LBr _mm256_set_epi8( \
414 0, 0, 0, 0, 19, 16, 17, 18, 23, 20, 21, 22, 27, 24, 25, 26, \
415 0, 0, 0, 0, 0, 0, 0, 0, 64, 67, 66, 65, 38, 37, 36, 39)
416#define _trans_cube_LBr_inverse _mm256_set_epi8( \
417 0, 0, 0, 0, 19, 16, 17, 18, 23, 20, 21, 22, 27, 24, 25, 26, \
418 0, 0, 0, 0, 0, 0, 0, 0, 64, 67, 66, 65, 38, 37, 36, 39)
419#define _trans_cube_FUr _mm256_set_epi8( \
420 0, 0, 0, 0, 6, 7, 4, 5, 10, 11, 8, 9, 17, 18, 19, 16, \
421 0, 0, 0, 0, 0, 0, 0, 0, 35, 33, 34, 32, 71, 69, 70, 68)
422#define _trans_cube_FUr_inverse _mm256_set_epi8( \
423 0, 0, 0, 0, 6, 7, 4, 5, 10, 11, 8, 9, 17, 18, 19, 16, \
424 0, 0, 0, 0, 0, 0, 0, 0, 35, 33, 34, 32, 71, 69, 70, 68)
425#define _trans_cube_FRr _mm256_set_epi8( \
426 0, 0, 0, 0, 21, 22, 23, 20, 17, 18, 19, 16, 11, 10, 9, 8, \
427 0, 0, 0, 0, 0, 0, 0, 0, 71, 69, 68, 70, 33, 35, 34, 32)
428#define _trans_cube_FRr_inverse _mm256_set_epi8( \
429 0, 0, 0, 0, 3, 2, 1, 0, 25, 26, 27, 24, 21, 22, 23, 20, \
430 0, 0, 0, 0, 0, 0, 0, 0, 39, 36, 38, 37, 66, 65, 67, 64)
431#define _trans_cube_FDr _mm256_set_epi8( \
432 0, 0, 0, 0, 4, 5, 6, 7, 11, 10, 9, 8, 18, 17, 16, 19, \
433 0, 0, 0, 0, 0, 0, 0, 0, 33, 35, 32, 34, 69, 71, 68, 70)
434#define _trans_cube_FDr_inverse _mm256_set_epi8( \
435 0, 0, 0, 0, 7, 6, 5, 4, 8, 9, 10, 11, 16, 19, 18, 17, \
436 0, 0, 0, 0, 0, 0, 0, 0, 34, 32, 35, 33, 70, 68, 71, 69)
437#define _trans_cube_FLr _mm256_set_epi8( \
438 0, 0, 0, 0, 23, 20, 21, 22, 18, 17, 16, 19, 10, 11, 8, 9, \
439 0, 0, 0, 0, 0, 0, 0, 0, 69, 71, 70, 68, 35, 33, 32, 34)
440#define _trans_cube_FLr_inverse _mm256_set_epi8( \
441 0, 0, 0, 0, 2, 3, 0, 1, 27, 24, 25, 26, 20, 23, 22, 21, \
442 0, 0, 0, 0, 0, 0, 0, 0, 38, 37, 39, 36, 67, 64, 66, 65)
443#define _trans_cube_BUr _mm256_set_epi8( \
444 0, 0, 0, 0, 7, 6, 5, 4, 8, 9, 10, 11, 16, 19, 18, 17, \
445 0, 0, 0, 0, 0, 0, 0, 0, 34, 32, 35, 33, 70, 68, 71, 69)
446#define _trans_cube_BUr_inverse _mm256_set_epi8( \
447 0, 0, 0, 0, 4, 5, 6, 7, 11, 10, 9, 8, 18, 17, 16, 19, \
448 0, 0, 0, 0, 0, 0, 0, 0, 33, 35, 32, 34, 69, 71, 68, 70)
449#define _trans_cube_BRr _mm256_set_epi8( \
450 0, 0, 0, 0, 22, 21, 20, 23, 19, 16, 17, 18, 8, 9, 10, 11, \
451 0, 0, 0, 0, 0, 0, 0, 0, 68, 70, 71, 69, 34, 32, 33, 35)
452#define _trans_cube_BRr_inverse _mm256_set_epi8( \
453 0, 0, 0, 0, 0, 1, 2, 3, 24, 27, 26, 25, 23, 20, 21, 22, \
454 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 36, 39, 64, 67, 65, 66)
455#define _trans_cube_BDr _mm256_set_epi8( \
456 0, 0, 0, 0, 5, 4, 7, 6, 9, 8, 11, 10, 19, 16, 17, 18, \
457 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 33, 35, 68, 70, 69, 71)
458#define _trans_cube_BDr_inverse _mm256_set_epi8( \
459 0, 0, 0, 0, 5, 4, 7, 6, 9, 8, 11, 10, 19, 16, 17, 18, \
460 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 33, 35, 68, 70, 69, 71)
461#define _trans_cube_BLr _mm256_set_epi8( \
462 0, 0, 0, 0, 20, 23, 22, 21, 16, 19, 18, 17, 9, 8, 11, 10, \
463 0, 0, 0, 0, 0, 0, 0, 0, 70, 68, 69, 71, 32, 34, 35, 33)
464#define _trans_cube_BLr_inverse _mm256_set_epi8( \
465 0, 0, 0, 0, 1, 0, 3, 2, 26, 25, 24, 27, 22, 21, 20, 23, \
466 0, 0, 0, 0, 0, 0, 0, 0, 36, 39, 37, 38, 65, 66, 64, 67)
467#define _trans_cube_UFm _mm256_set_epi8( \
468 0, 0, 0, 0, 10, 11, 8, 9, 6, 7, 4, 5, 3, 2, 1, 0, \
469 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 1, 0, 7, 6, 5, 4)
470#define _trans_cube_UFm_inverse _mm256_set_epi8( \
471 0, 0, 0, 0, 10, 11, 8, 9, 6, 7, 4, 5, 3, 2, 1, 0, \
472 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 1, 0, 7, 6, 5, 4)
473#define _trans_cube_ULm _mm256_set_epi8( \
474 0, 0, 0, 0, 25, 26, 27, 24, 3, 2, 1, 0, 7, 6, 5, 4, \
475 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 4, 5, 2, 3, 1, 0)
476#define _trans_cube_ULm_inverse _mm256_set_epi8( \
477 0, 0, 0, 0, 25, 26, 27, 24, 3, 2, 1, 0, 7, 6, 5, 4, \
478 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 4, 5, 2, 3, 1, 0)
479#define _trans_cube_UBm _mm256_set_epi8( \
480 0, 0, 0, 0, 8, 9, 10, 11, 7, 6, 5, 4, 2, 3, 0, 1, \
481 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 1, 6, 7, 4, 5)
482#define _trans_cube_UBm_inverse _mm256_set_epi8( \
483 0, 0, 0, 0, 8, 9, 10, 11, 7, 6, 5, 4, 2, 3, 0, 1, \
484 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 1, 6, 7, 4, 5)
485#define _trans_cube_URm _mm256_set_epi8( \
486 0, 0, 0, 0, 27, 24, 25, 26, 2, 3, 0, 1, 6, 7, 4, 5, \
487 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 5, 4, 3, 2, 0, 1)
488#define _trans_cube_URm_inverse _mm256_set_epi8( \
489 0, 0, 0, 0, 27, 24, 25, 26, 2, 3, 0, 1, 6, 7, 4, 5, \
490 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 5, 4, 3, 2, 0, 1)
491#define _trans_cube_DFm _mm256_set_epi8( \
492 0, 0, 0, 0, 11, 10, 9, 8, 4, 5, 6, 7, 0, 1, 2, 3, \
493 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 5, 4, 7, 6)
494#define _trans_cube_DFm_inverse _mm256_set_epi8( \
495 0, 0, 0, 0, 11, 10, 9, 8, 4, 5, 6, 7, 0, 1, 2, 3, \
496 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 5, 4, 7, 6)
497#define _trans_cube_DLm _mm256_set_epi8( \
498 0, 0, 0, 0, 26, 25, 24, 27, 1, 0, 3, 2, 4, 5, 6, 7, \
499 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 7, 6, 1, 0, 2, 3)
500#define _trans_cube_DLm_inverse _mm256_set_epi8( \
501 0, 0, 0, 0, 24, 27, 26, 25, 0, 1, 2, 3, 5, 4, 7, 6, \
502 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 6, 7, 0, 1, 3, 2)
503#define _trans_cube_DBm _mm256_set_epi8( \
504 0, 0, 0, 0, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2, \
505 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7)
506#define _trans_cube_DBm_inverse _mm256_set_epi8( \
507 0, 0, 0, 0, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2, \
508 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7)
509#define _trans_cube_DRm _mm256_set_epi8( \
510 0, 0, 0, 0, 24, 27, 26, 25, 0, 1, 2, 3, 5, 4, 7, 6, \
511 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 6, 7, 0, 1, 3, 2)
512#define _trans_cube_DRm_inverse _mm256_set_epi8( \
513 0, 0, 0, 0, 26, 25, 24, 27, 1, 0, 3, 2, 4, 5, 6, 7, \
514 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 7, 6, 1, 0, 2, 3)
515#define _trans_cube_RUm _mm256_set_epi8( \
516 0, 0, 0, 0, 3, 2, 1, 0, 24, 27, 26, 25, 20, 23, 22, 21, \
517 0, 0, 0, 0, 0, 0, 0, 0, 35, 32, 34, 33, 70, 69, 71, 68)
518#define _trans_cube_RUm_inverse _mm256_set_epi8( \
519 0, 0, 0, 0, 22, 21, 20, 23, 18, 17, 16, 19, 11, 10, 9, 8, \
520 0, 0, 0, 0, 0, 0, 0, 0, 33, 35, 34, 32, 71, 69, 68, 70)
521#define _trans_cube_RFm _mm256_set_epi8( \
522 0, 0, 0, 0, 18, 17, 16, 19, 23, 20, 21, 22, 24, 27, 26, 25, \
523 0, 0, 0, 0, 0, 0, 0, 0, 69, 70, 71, 68, 35, 32, 33, 34)
524#define _trans_cube_RFm_inverse _mm256_set_epi8( \
525 0, 0, 0, 0, 18, 17, 16, 19, 23, 20, 21, 22, 24, 27, 26, 25, \
526 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 39, 36, 67, 64, 65, 66)
527#define _trans_cube_RDm _mm256_set_epi8( \
528 0, 0, 0, 0, 1, 0, 3, 2, 27, 24, 25, 26, 23, 20, 21, 22, \
529 0, 0, 0, 0, 0, 0, 0, 0, 32, 35, 33, 34, 69, 70, 68, 71)
530#define _trans_cube_RDm_inverse _mm256_set_epi8( \
531 0, 0, 0, 0, 23, 20, 21, 22, 19, 16, 17, 18, 9, 8, 11, 10, \
532 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 35, 33, 70, 68, 69, 71)
533#define _trans_cube_RBm _mm256_set_epi8( \
534 0, 0, 0, 0, 16, 19, 18, 17, 20, 23, 22, 21, 27, 24, 25, 26, \
535 0, 0, 0, 0, 0, 0, 0, 0, 70, 69, 68, 71, 32, 35, 34, 33)
536#define _trans_cube_RBm_inverse _mm256_set_epi8( \
537 0, 0, 0, 0, 19, 16, 17, 18, 22, 21, 20, 23, 26, 25, 24, 27, \
538 0, 0, 0, 0, 0, 0, 0, 0, 36, 39, 38, 37, 66, 65, 64, 67)
539#define _trans_cube_LUm _mm256_set_epi8( \
540 0, 0, 0, 0, 2, 3, 0, 1, 26, 25, 24, 27, 21, 22, 23, 20, \
541 0, 0, 0, 0, 0, 0, 0, 0, 34, 33, 35, 32, 71, 68, 70, 69)
542#define _trans_cube_LUm_inverse _mm256_set_epi8( \
543 0, 0, 0, 0, 20, 23, 22, 21, 17, 18, 19, 16, 10, 11, 8, 9, \
544 0, 0, 0, 0, 0, 0, 0, 0, 35, 33, 32, 34, 69, 71, 70, 68)
545#define _trans_cube_LFm _mm256_set_epi8( \
546 0, 0, 0, 0, 17, 18, 19, 16, 21, 22, 23, 20, 25, 26, 27, 24, \
547 0, 0, 0, 0, 0, 0, 0, 0, 71, 68, 69, 70, 33, 34, 35, 32)
548#define _trans_cube_LFm_inverse _mm256_set_epi8( \
549 0, 0, 0, 0, 17, 18, 19, 16, 21, 22, 23, 20, 25, 26, 27, 24, \
550 0, 0, 0, 0, 0, 0, 0, 0, 39, 36, 37, 38, 65, 66, 67, 64)
551#define _trans_cube_LDm _mm256_set_epi8( \
552 0, 0, 0, 0, 0, 1, 2, 3, 25, 26, 27, 24, 22, 21, 20, 23, \
553 0, 0, 0, 0, 0, 0, 0, 0, 33, 34, 32, 35, 68, 71, 69, 70)
554#define _trans_cube_LDm_inverse _mm256_set_epi8( \
555 0, 0, 0, 0, 21, 22, 23, 20, 16, 19, 18, 17, 8, 9, 10, 11, \
556 0, 0, 0, 0, 0, 0, 0, 0, 34, 32, 33, 35, 68, 70, 71, 69)
557#define _trans_cube_LBm _mm256_set_epi8( \
558 0, 0, 0, 0, 19, 16, 17, 18, 22, 21, 20, 23, 26, 25, 24, 27, \
559 0, 0, 0, 0, 0, 0, 0, 0, 68, 71, 70, 69, 34, 33, 32, 35)
560#define _trans_cube_LBm_inverse _mm256_set_epi8( \
561 0, 0, 0, 0, 16, 19, 18, 17, 20, 23, 22, 21, 27, 24, 25, 26, \
562 0, 0, 0, 0, 0, 0, 0, 0, 38, 37, 36, 39, 64, 67, 66, 65)
563#define _trans_cube_FUm _mm256_set_epi8( \
564 0, 0, 0, 0, 7, 6, 5, 4, 11, 10, 9, 8, 17, 18, 19, 16, \
565 0, 0, 0, 0, 0, 0, 0, 0, 39, 37, 38, 36, 67, 65, 66, 64)
566#define _trans_cube_FUm_inverse _mm256_set_epi8( \
567 0, 0, 0, 0, 7, 6, 5, 4, 11, 10, 9, 8, 17, 18, 19, 16, \
568 0, 0, 0, 0, 0, 0, 0, 0, 71, 69, 70, 68, 35, 33, 34, 32)
569#define _trans_cube_FRm _mm256_set_epi8( \
570 0, 0, 0, 0, 20, 23, 22, 21, 17, 18, 19, 16, 10, 11, 8, 9, \
571 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 64, 66, 37, 39, 38, 36)
572#define _trans_cube_FRm_inverse _mm256_set_epi8( \
573 0, 0, 0, 0, 2, 3, 0, 1, 26, 25, 24, 27, 21, 22, 23, 20, \
574 0, 0, 0, 0, 0, 0, 0, 0, 66, 65, 67, 64, 39, 36, 38, 37)
575#define _trans_cube_FDm _mm256_set_epi8( \
576 0, 0, 0, 0, 5, 4, 7, 6, 10, 11, 8, 9, 18, 17, 16, 19, \
577 0, 0, 0, 0, 0, 0, 0, 0, 37, 39, 36, 38, 65, 67, 64, 66)
578#define _trans_cube_FDm_inverse _mm256_set_epi8( \
579 0, 0, 0, 0, 6, 7, 4, 5, 9, 8, 11, 10, 16, 19, 18, 17, \
580 0, 0, 0, 0, 0, 0, 0, 0, 70, 68, 71, 69, 34, 32, 35, 33)
581#define _trans_cube_FLm _mm256_set_epi8( \
582 0, 0, 0, 0, 22, 21, 20, 23, 18, 17, 16, 19, 11, 10, 9, 8, \
583 0, 0, 0, 0, 0, 0, 0, 0, 65, 67, 66, 64, 39, 37, 36, 38)
584#define _trans_cube_FLm_inverse _mm256_set_epi8( \
585 0, 0, 0, 0, 3, 2, 1, 0, 24, 27, 26, 25, 20, 23, 22, 21, \
586 0, 0, 0, 0, 0, 0, 0, 0, 67, 64, 66, 65, 38, 37, 39, 36)
587#define _trans_cube_BUm _mm256_set_epi8( \
588 0, 0, 0, 0, 6, 7, 4, 5, 9, 8, 11, 10, 16, 19, 18, 17, \
589 0, 0, 0, 0, 0, 0, 0, 0, 38, 36, 39, 37, 66, 64, 67, 65)
590#define _trans_cube_BUm_inverse _mm256_set_epi8( \
591 0, 0, 0, 0, 5, 4, 7, 6, 10, 11, 8, 9, 18, 17, 16, 19, \
592 0, 0, 0, 0, 0, 0, 0, 0, 69, 71, 68, 70, 33, 35, 32, 34)
593#define _trans_cube_BRm _mm256_set_epi8( \
594 0, 0, 0, 0, 23, 20, 21, 22, 19, 16, 17, 18, 9, 8, 11, 10, \
595 0, 0, 0, 0, 0, 0, 0, 0, 64, 66, 67, 65, 38, 36, 37, 39)
596#define _trans_cube_BRm_inverse _mm256_set_epi8( \
597 0, 0, 0, 0, 1, 0, 3, 2, 27, 24, 25, 26, 23, 20, 21, 22, \
598 0, 0, 0, 0, 0, 0, 0, 0, 64, 67, 65, 66, 37, 38, 36, 39)
599#define _trans_cube_BDm _mm256_set_epi8( \
600 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 19, 16, 17, 18, \
601 0, 0, 0, 0, 0, 0, 0, 0, 36, 38, 37, 39, 64, 66, 65, 67)
602#define _trans_cube_BDm_inverse _mm256_set_epi8( \
603 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 19, 16, 17, 18, \
604 0, 0, 0, 0, 0, 0, 0, 0, 68, 70, 69, 71, 32, 34, 33, 35)
605#define _trans_cube_BLm _mm256_set_epi8( \
606 0, 0, 0, 0, 21, 22, 23, 20, 16, 19, 18, 17, 8, 9, 10, 11, \
607 0, 0, 0, 0, 0, 0, 0, 0, 66, 64, 65, 67, 36, 38, 39, 37)
608#define _trans_cube_BLm_inverse _mm256_set_epi8( \
609 0, 0, 0, 0, 0, 1, 2, 3, 25, 26, 27, 24, 22, 21, 20, 23, \
610 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 64, 67, 36, 39, 37, 38)
611
268_static cube_fast_t cubetofast(cube_t); 612_static cube_fast_t cubetofast(cube_t);
269_static cube_t fasttocube(cube_fast_t); 613_static cube_t fasttocube(cube_fast_t);
270_static_inline bool equal_fast(cube_fast_t, cube_fast_t); 614_static_inline bool equal_fast(cube_fast_t, cube_fast_t);
@@ -275,1188 +619,6 @@ _static_inline cube_fast_t inverse_fast(cube_fast_t);
275_static_inline cube_fast_t compose_fast(cube_fast_t, cube_fast_t); 619_static_inline cube_fast_t compose_fast(cube_fast_t, cube_fast_t);
276_static_inline int64_t coord_fast_eo(cube_fast_t); 620_static_inline int64_t coord_fast_eo(cube_fast_t);
277 621
278_static_inline cube_fast_t
279_move_U(cube_fast_t c)
280{
281 cube_fast_t m = _mm256_set_epi8(
282 0, 0, 0, 0, 11, 10, 9, 8, 7, 6, 0, 1, 3, 2, 5, 4,
283 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 1, 0, 3, 2, 4, 5
284 );
285
286 return compose_fast(c, m);
287}
288
289_static_inline cube_fast_t
290_move_U2(cube_fast_t c)
291{
292 cube_fast_t m = _mm256_set_epi8(
293 0, 0, 0, 0, 11, 10, 9, 8, 7, 6, 4, 5, 3, 2, 0, 1,
294 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 4, 5, 3, 2, 0, 1
295 );
296
297 return compose_fast(c, m);
298}
299
300_static_inline cube_fast_t
301_move_U3(cube_fast_t c)
302{
303 cube_fast_t m = _mm256_set_epi8(
304 0, 0, 0, 0, 11, 10, 9, 8, 7, 6, 1, 0, 3, 2, 4, 5,
305 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 0, 1, 3, 2, 5, 4
306 );
307
308 return compose_fast(c, m);
309}
310
311_static_inline cube_fast_t
312_move_D(cube_fast_t c)
313{
314 cube_fast_t m = _mm256_set_epi8(
315 0, 0, 0, 0, 11, 10, 9, 8, 3, 2, 5, 4, 6, 7, 1, 0,
316 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 5, 4, 6, 7, 1, 0
317 );
318
319 return compose_fast(c, m);
320}
321
322_static_inline cube_fast_t
323_move_D2(cube_fast_t c)
324{
325 cube_fast_t m = _mm256_set_epi8(
326 0, 0, 0, 0, 11, 10, 9, 8, 6, 7, 5, 4, 2, 3, 1, 0,
327 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 5, 4, 2, 3, 1, 0
328 );
329
330 return compose_fast(c, m);
331}
332
333_static_inline cube_fast_t
334_move_D3(cube_fast_t c)
335{
336 cube_fast_t m = _mm256_set_epi8(
337 0, 0, 0, 0, 11, 10, 9, 8, 2, 3, 5, 4, 7, 6, 1, 0,
338 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 5, 4, 7, 6, 1, 0
339 );
340
341 return compose_fast(c, m);
342}
343
344_static_inline cube_fast_t
345_move_R(cube_fast_t c)
346{
347 cube_fast_t m = _mm256_set_epi8(
348 0, 0, 0, 0, 4, 10, 9, 7, 11, 6, 5, 8, 3, 2, 1, 0,
349 0, 0, 0, 0, 0, 0, 0, 0, 7, 35, 32, 4, 69, 2, 1, 70
350 );
351
352 return compose_fast(c, m);
353}
354
355_static_inline cube_fast_t
356_move_R2(cube_fast_t c)
357{
358 cube_fast_t m = _mm256_set_epi8(
359 0, 0, 0, 0, 8, 10, 9, 11, 4, 6, 5, 7, 3, 2, 1, 0,
360 0, 0, 0, 0, 0, 0, 0, 0, 7, 5, 6, 4, 0, 2, 1, 3
361 );
362
363 return compose_fast(c, m);
364}
365
366_static_inline cube_fast_t
367_move_R3(cube_fast_t c)
368{
369 cube_fast_t m = _mm256_set_epi8(
370 0, 0, 0, 0, 7, 10, 9, 4, 8, 6, 5, 11, 3, 2, 1, 0,
371 0, 0, 0, 0, 0, 0, 0, 0, 7, 32, 35, 4, 70, 2, 1, 69
372 );
373
374 return compose_fast(c, m);
375}
376
377_static_inline cube_fast_t
378_move_L(cube_fast_t c)
379{
380 cube_fast_t m = _mm256_set_epi8(
381 0, 0, 0, 0, 11, 6, 5, 8, 7, 9, 10, 4, 3, 2, 1, 0,
382 0, 0, 0, 0, 0, 0, 0, 0, 34, 6, 5, 33, 3, 68, 71, 0
383 );
384
385 return compose_fast(c, m);
386}
387
388_static_inline cube_fast_t
389_move_L2(cube_fast_t c)
390{
391 cube_fast_t m = _mm256_set_epi8(
392 0, 0, 0, 0, 11, 9, 10, 8, 7, 5, 6, 4, 3, 2, 1, 0,
393 0, 0, 0, 0, 0, 0, 0, 0, 4, 6, 5, 7, 3, 1, 2, 0
394 );
395
396 return compose_fast(c, m);
397}
398
399_static_inline cube_fast_t
400_move_L3(cube_fast_t c)
401{
402 cube_fast_t m = _mm256_set_epi8(
403 0, 0, 0, 0, 11, 5, 6, 8, 7, 10, 9, 4, 3, 2, 1, 0,
404 0, 0, 0, 0, 0, 0, 0, 0, 33, 6, 5, 34, 3, 71, 68, 0
405 );
406
407 return compose_fast(c, m);
408}
409
410_static_inline cube_fast_t
411_move_F(cube_fast_t c)
412{
413 cube_fast_t m = _mm256_set_epi8(
414 0, 0, 0, 0, 11, 10, 19, 16, 7, 6, 5, 4, 24, 2, 1, 25,
415 0, 0, 0, 0, 0, 0, 0, 0, 7, 64, 5, 66, 3, 38, 1, 36
416 );
417
418 return compose_fast(c, m);
419}
420
421_static_inline cube_fast_t
422_move_F2(cube_fast_t c)
423{
424 cube_fast_t m = _mm256_set_epi8(
425 0, 0, 0, 0, 11, 10, 8, 9, 7, 6, 5, 4, 0, 2, 1, 3,
426 0, 0, 0, 0, 0, 0, 0, 0, 7, 4, 5, 6, 3, 0, 1, 2
427 );
428
429 return compose_fast(c, m);
430}
431
432_static_inline cube_fast_t
433_move_F3(cube_fast_t c)
434{
435 cube_fast_t m = _mm256_set_epi8(
436 0, 0, 0, 0, 11, 10, 16, 19, 7, 6, 5, 4, 25, 2, 1, 24,
437 0, 0, 0, 0, 0, 0, 0, 0, 7, 66, 5, 64, 3, 36, 1, 38
438 );
439
440 return compose_fast(c, m);
441}
442
443_static_inline cube_fast_t
444_move_B(cube_fast_t c)
445{
446 cube_fast_t m = _mm256_set_epi8(
447 0, 0, 0, 0, 18, 17, 9, 8, 7, 6, 5, 4, 3, 26, 27, 0,
448 0, 0, 0, 0, 0, 0, 0, 0, 65, 6, 67, 4, 39, 2, 37, 0
449 );
450
451 return compose_fast(c, m);
452}
453
454_static_inline cube_fast_t
455_move_B2(cube_fast_t c)
456{
457 cube_fast_t m = _mm256_set_epi8(
458 0, 0, 0, 0, 10, 11, 9, 8, 7, 6, 5, 4, 3, 1, 2, 0,
459 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 4, 1, 2, 3, 0
460 );
461
462 return compose_fast(c, m);
463}
464
465_static_inline cube_fast_t
466_move_B3(cube_fast_t c)
467{
468 cube_fast_t m = _mm256_set_epi8(
469 0, 0, 0, 0, 17, 18, 9, 8, 7, 6, 5, 4, 3, 27, 26, 0,
470 0, 0, 0, 0, 0, 0, 0, 0, 67, 6, 65, 4, 37, 2, 39, 0
471 );
472
473 return compose_fast(c, m);
474}
475
476_static_inline cube_fast_t
477_trans_UFr(cube_fast_t c)
478{
479 cube_fast_t ret;
480
481 cube_fast_t tn = _mm256_set_epi8(
482 0, 0, 0, 0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0,
483 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 5, 4, 3, 2, 1, 0
484 );
485 cube_fast_t ti = _mm256_set_epi8(
486 0, 0, 0, 0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0,
487 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 5, 4, 3, 2, 1, 0
488 );
489
490 ret = compose_fast(tn, c);
491 ret = compose_fast(ret, ti);
492
493 return ret;
494}
495
496_static_inline cube_fast_t
497_trans_ULr(cube_fast_t c)
498{
499 cube_fast_t ret;
500
501 cube_fast_t tn = _mm256_set_epi8(
502 0, 0, 0, 0, 24, 27, 26, 25, 3, 2, 1, 0, 6, 7, 4, 5,
503 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 1, 6, 7, 5, 4
504 );
505 cube_fast_t ti = _mm256_set_epi8(
506 0, 0, 0, 0, 26, 25, 24, 27, 2, 3, 0, 1, 7, 6, 5, 4,
507 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0, 7, 6, 4, 5
508 );
509
510 ret = compose_fast(tn, c);
511 ret = compose_fast(ret, ti);
512
513 return ret;
514}
515
516_static_inline cube_fast_t
517_trans_UBr(cube_fast_t c)
518{
519 cube_fast_t ret;
520
521 cube_fast_t tn = _mm256_set_epi8(
522 0, 0, 0, 0, 9, 8, 11, 10, 6, 7, 4, 5, 2, 3, 0, 1,
523 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 4, 5, 2, 3, 0, 1
524 );
525 cube_fast_t ti = _mm256_set_epi8(
526 0, 0, 0, 0, 9, 8, 11, 10, 6, 7, 4, 5, 2, 3, 0, 1,
527 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 4, 5, 2, 3, 0, 1
528 );
529
530 ret = compose_fast(tn, c);
531 ret = compose_fast(ret, ti);
532
533 return ret;
534}
535
536_static_inline cube_fast_t
537_trans_URr(cube_fast_t c)
538{
539 cube_fast_t ret;
540
541 cube_fast_t tn = _mm256_set_epi8(
542 0, 0, 0, 0, 26, 25, 24, 27, 2, 3, 0, 1, 7, 6, 5, 4,
543 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0, 7, 6, 4, 5
544 );
545 cube_fast_t ti = _mm256_set_epi8(
546 0, 0, 0, 0, 24, 27, 26, 25, 3, 2, 1, 0, 6, 7, 4, 5,
547 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 1, 6, 7, 5, 4
548 );
549
550 ret = compose_fast(tn, c);
551 ret = compose_fast(ret, ti);
552
553 return ret;
554}
555
556_static_inline cube_fast_t
557_trans_DFr(cube_fast_t c)
558{
559 cube_fast_t ret;
560
561 cube_fast_t tn = _mm256_set_epi8(
562 0, 0, 0, 0, 10, 11, 8, 9, 5, 4, 7, 6, 0, 1, 2, 3,
563 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 7, 6, 1, 0, 3, 2
564 );
565 cube_fast_t ti = _mm256_set_epi8(
566 0, 0, 0, 0, 10, 11, 8, 9, 5, 4, 7, 6, 0, 1, 2, 3,
567 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 7, 6, 1, 0, 3, 2
568 );
569
570 ret = compose_fast(tn, c);
571 ret = compose_fast(ret, ti);
572
573 return ret;
574}
575
576_static_inline cube_fast_t
577_trans_DLr(cube_fast_t c)
578{
579 cube_fast_t ret;
580
581 cube_fast_t tn = _mm256_set_epi8(
582 0, 0, 0, 0, 27, 24, 25, 26, 1, 0, 3, 2, 5, 4, 7, 6,
583 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 5, 4, 6, 7
584 );
585 cube_fast_t ti = _mm256_set_epi8(
586 0, 0, 0, 0, 27, 24, 25, 26, 1, 0, 3, 2, 5, 4, 7, 6,
587 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 5, 4, 6, 7
588 );
589
590 ret = compose_fast(tn, c);
591 ret = compose_fast(ret, ti);
592
593 return ret;
594}
595
596_static_inline cube_fast_t
597_trans_DBr(cube_fast_t c)
598{
599 cube_fast_t ret;
600
601 cube_fast_t tn = _mm256_set_epi8(
602 0, 0, 0, 0, 8, 9, 10, 11, 4, 5, 6, 7, 1, 0, 3, 2,
603 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 0, 1, 2, 3
604 );
605 cube_fast_t ti = _mm256_set_epi8(
606 0, 0, 0, 0, 8, 9, 10, 11, 4, 5, 6, 7, 1, 0, 3, 2,
607 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 0, 1, 2, 3
608 );
609
610 ret = compose_fast(tn, c);
611 ret = compose_fast(ret, ti);
612
613 return ret;
614}
615
616_static_inline cube_fast_t
617_trans_DRr(cube_fast_t c)
618{
619 cube_fast_t ret;
620
621 cube_fast_t tn = _mm256_set_epi8(
622 0, 0, 0, 0, 25, 26, 27, 24, 0, 1, 2, 3, 4, 5, 6, 7,
623 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 3, 4, 5, 7, 6
624 );
625 cube_fast_t ti = _mm256_set_epi8(
626 0, 0, 0, 0, 25, 26, 27, 24, 0, 1, 2, 3, 4, 5, 6, 7,
627 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 3, 4, 5, 7, 6
628 );
629
630 ret = compose_fast(tn, c);
631 ret = compose_fast(ret, ti);
632
633 return ret;
634}
635
636_static_inline cube_fast_t
637_trans_RUr(cube_fast_t c)
638{
639 cube_fast_t ret;
640
641 cube_fast_t tn = _mm256_set_epi8(
642 0, 0, 0, 0, 3, 2, 1, 0, 25, 26, 27, 24, 21, 22, 23, 20,
643 0, 0, 0, 0, 0, 0, 0, 0, 39, 36, 38, 37, 66, 65, 67, 64
644 );
645 cube_fast_t ti = _mm256_set_epi8(
646 0, 0, 0, 0, 21, 22, 23, 20, 17, 18, 19, 16, 11, 10, 9, 8,
647 0, 0, 0, 0, 0, 0, 0, 0, 71, 69, 68, 70, 33, 35, 34, 32
648 );
649
650 ret = compose_fast(tn, c);
651 ret = compose_fast(ret, ti);
652
653 return ret;
654}
655
656_static_inline cube_fast_t
657_trans_RFr(cube_fast_t c)
658{
659 cube_fast_t ret;
660
661 cube_fast_t tn = _mm256_set_epi8(
662 0, 0, 0, 0, 18, 17, 16, 19, 22, 21, 20, 23, 25, 26, 27, 24,
663 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 64, 39, 36, 37, 38
664 );
665 cube_fast_t ti = _mm256_set_epi8(
666 0, 0, 0, 0, 17, 18, 19, 16, 20, 23, 22, 21, 24, 27, 26, 25,
667 0, 0, 0, 0, 0, 0, 0, 0, 67, 64, 65, 66, 37, 38, 39, 36
668 );
669
670 ret = compose_fast(tn, c);
671 ret = compose_fast(ret, ti);
672
673 return ret;
674}
675
676_static_inline cube_fast_t
677_trans_RDr(cube_fast_t c)
678{
679 cube_fast_t ret;
680
681 cube_fast_t tn = _mm256_set_epi8(
682 0, 0, 0, 0, 1, 0, 3, 2, 26, 25, 24, 27, 22, 21, 20, 23,
683 0, 0, 0, 0, 0, 0, 0, 0, 36, 39, 37, 38, 65, 66, 64, 67
684 );
685 cube_fast_t ti = _mm256_set_epi8(
686 0, 0, 0, 0, 20, 23, 22, 21, 16, 19, 18, 17, 9, 8, 11, 10,
687 0, 0, 0, 0, 0, 0, 0, 0, 70, 68, 69, 71, 32, 34, 35, 33
688 );
689
690 ret = compose_fast(tn, c);
691 ret = compose_fast(ret, ti);
692
693 return ret;
694}
695
696_static_inline cube_fast_t
697_trans_RBr(cube_fast_t c)
698{
699 cube_fast_t ret;
700
701 cube_fast_t tn = _mm256_set_epi8(
702 0, 0, 0, 0, 16, 19, 18, 17, 21, 22, 23, 20, 26, 25, 24, 27,
703 0, 0, 0, 0, 0, 0, 0, 0, 66, 65, 64, 67, 36, 39, 38, 37
704 );
705 cube_fast_t ti = _mm256_set_epi8(
706 0, 0, 0, 0, 16, 19, 18, 17, 21, 22, 23, 20, 26, 25, 24, 27,
707 0, 0, 0, 0, 0, 0, 0, 0, 66, 65, 64, 67, 36, 39, 38, 37
708 );
709
710 ret = compose_fast(tn, c);
711 ret = compose_fast(ret, ti);
712
713 return ret;
714}
715
716_static_inline cube_fast_t
717_trans_LUr(cube_fast_t c)
718{
719 cube_fast_t ret;
720
721 cube_fast_t tn = _mm256_set_epi8(
722 0, 0, 0, 0, 2, 3, 0, 1, 27, 24, 25, 26, 20, 23, 22, 21,
723 0, 0, 0, 0, 0, 0, 0, 0, 38, 37, 39, 36, 67, 64, 66, 65
724 );
725 cube_fast_t ti = _mm256_set_epi8(
726 0, 0, 0, 0, 23, 20, 21, 22, 18, 17, 16, 19, 10, 11, 8, 9,
727 0, 0, 0, 0, 0, 0, 0, 0, 69, 71, 70, 68, 35, 33, 32, 34
728 );
729
730 ret = compose_fast(tn, c);
731 ret = compose_fast(ret, ti);
732
733 return ret;
734}
735
736_static_inline cube_fast_t
737_trans_LFr(cube_fast_t c)
738{
739 cube_fast_t ret;
740
741 cube_fast_t tn = _mm256_set_epi8(
742 0, 0, 0, 0, 17, 18, 19, 16, 20, 23, 22, 21, 24, 27, 26, 25,
743 0, 0, 0, 0, 0, 0, 0, 0, 67, 64, 65, 66, 37, 38, 39, 36
744 );
745 cube_fast_t ti = _mm256_set_epi8(
746 0, 0, 0, 0, 18, 17, 16, 19, 22, 21, 20, 23, 25, 26, 27, 24,
747 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 64, 39, 36, 37, 38
748 );
749
750 ret = compose_fast(tn, c);
751 ret = compose_fast(ret, ti);
752
753 return ret;
754}
755
756_static_inline cube_fast_t
757_trans_LDr(cube_fast_t c)
758{
759 cube_fast_t ret;
760
761 cube_fast_t tn = _mm256_set_epi8(
762 0, 0, 0, 0, 0, 1, 2, 3, 24, 27, 26, 25, 23, 20, 21, 22,
763 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 36, 39, 64, 67, 65, 66
764 );
765 cube_fast_t ti = _mm256_set_epi8(
766 0, 0, 0, 0, 22, 21, 20, 23, 19, 16, 17, 18, 8, 9, 10, 11,
767 0, 0, 0, 0, 0, 0, 0, 0, 68, 70, 71, 69, 34, 32, 33, 35
768 );
769
770 ret = compose_fast(tn, c);
771 ret = compose_fast(ret, ti);
772
773 return ret;
774}
775
776_static_inline cube_fast_t
777_trans_LBr(cube_fast_t c)
778{
779 cube_fast_t ret;
780
781 cube_fast_t tn = _mm256_set_epi8(
782 0, 0, 0, 0, 19, 16, 17, 18, 23, 20, 21, 22, 27, 24, 25, 26,
783 0, 0, 0, 0, 0, 0, 0, 0, 64, 67, 66, 65, 38, 37, 36, 39
784 );
785 cube_fast_t ti = _mm256_set_epi8(
786 0, 0, 0, 0, 19, 16, 17, 18, 23, 20, 21, 22, 27, 24, 25, 26,
787 0, 0, 0, 0, 0, 0, 0, 0, 64, 67, 66, 65, 38, 37, 36, 39
788 );
789
790 ret = compose_fast(tn, c);
791 ret = compose_fast(ret, ti);
792
793 return ret;
794}
795
796_static_inline cube_fast_t
797_trans_FUr(cube_fast_t c)
798{
799 cube_fast_t ret;
800
801 cube_fast_t tn = _mm256_set_epi8(
802 0, 0, 0, 0, 6, 7, 4, 5, 10, 11, 8, 9, 17, 18, 19, 16,
803 0, 0, 0, 0, 0, 0, 0, 0, 35, 33, 34, 32, 71, 69, 70, 68
804 );
805 cube_fast_t ti = _mm256_set_epi8(
806 0, 0, 0, 0, 6, 7, 4, 5, 10, 11, 8, 9, 17, 18, 19, 16,
807 0, 0, 0, 0, 0, 0, 0, 0, 35, 33, 34, 32, 71, 69, 70, 68
808 );
809
810 ret = compose_fast(tn, c);
811 ret = compose_fast(ret, ti);
812
813 return ret;
814}
815
816_static_inline cube_fast_t
817_trans_FRr(cube_fast_t c)
818{
819 cube_fast_t ret;
820
821 cube_fast_t tn = _mm256_set_epi8(
822 0, 0, 0, 0, 21, 22, 23, 20, 17, 18, 19, 16, 11, 10, 9, 8,
823 0, 0, 0, 0, 0, 0, 0, 0, 71, 69, 68, 70, 33, 35, 34, 32
824 );
825 cube_fast_t ti = _mm256_set_epi8(
826 0, 0, 0, 0, 3, 2, 1, 0, 25, 26, 27, 24, 21, 22, 23, 20,
827 0, 0, 0, 0, 0, 0, 0, 0, 39, 36, 38, 37, 66, 65, 67, 64
828 );
829
830 ret = compose_fast(tn, c);
831 ret = compose_fast(ret, ti);
832
833 return ret;
834}
835
836_static_inline cube_fast_t
837_trans_FDr(cube_fast_t c)
838{
839 cube_fast_t ret;
840
841 cube_fast_t tn = _mm256_set_epi8(
842 0, 0, 0, 0, 4, 5, 6, 7, 11, 10, 9, 8, 18, 17, 16, 19,
843 0, 0, 0, 0, 0, 0, 0, 0, 33, 35, 32, 34, 69, 71, 68, 70
844 );
845 cube_fast_t ti = _mm256_set_epi8(
846 0, 0, 0, 0, 7, 6, 5, 4, 8, 9, 10, 11, 16, 19, 18, 17,
847 0, 0, 0, 0, 0, 0, 0, 0, 34, 32, 35, 33, 70, 68, 71, 69
848 );
849
850 ret = compose_fast(tn, c);
851 ret = compose_fast(ret, ti);
852
853 return ret;
854}
855
856_static_inline cube_fast_t
857_trans_FLr(cube_fast_t c)
858{
859 cube_fast_t ret;
860
861 cube_fast_t tn = _mm256_set_epi8(
862 0, 0, 0, 0, 23, 20, 21, 22, 18, 17, 16, 19, 10, 11, 8, 9,
863 0, 0, 0, 0, 0, 0, 0, 0, 69, 71, 70, 68, 35, 33, 32, 34
864 );
865 cube_fast_t ti = _mm256_set_epi8(
866 0, 0, 0, 0, 2, 3, 0, 1, 27, 24, 25, 26, 20, 23, 22, 21,
867 0, 0, 0, 0, 0, 0, 0, 0, 38, 37, 39, 36, 67, 64, 66, 65
868 );
869
870 ret = compose_fast(tn, c);
871 ret = compose_fast(ret, ti);
872
873 return ret;
874}
875
876_static_inline cube_fast_t
877_trans_BUr(cube_fast_t c)
878{
879 cube_fast_t ret;
880
881 cube_fast_t tn = _mm256_set_epi8(
882 0, 0, 0, 0, 7, 6, 5, 4, 8, 9, 10, 11, 16, 19, 18, 17,
883 0, 0, 0, 0, 0, 0, 0, 0, 34, 32, 35, 33, 70, 68, 71, 69
884 );
885 cube_fast_t ti = _mm256_set_epi8(
886 0, 0, 0, 0, 4, 5, 6, 7, 11, 10, 9, 8, 18, 17, 16, 19,
887 0, 0, 0, 0, 0, 0, 0, 0, 33, 35, 32, 34, 69, 71, 68, 70
888 );
889
890 ret = compose_fast(tn, c);
891 ret = compose_fast(ret, ti);
892
893 return ret;
894}
895
896_static_inline cube_fast_t
897_trans_BRr(cube_fast_t c)
898{
899 cube_fast_t ret;
900
901 cube_fast_t tn = _mm256_set_epi8(
902 0, 0, 0, 0, 22, 21, 20, 23, 19, 16, 17, 18, 8, 9, 10, 11,
903 0, 0, 0, 0, 0, 0, 0, 0, 68, 70, 71, 69, 34, 32, 33, 35
904 );
905 cube_fast_t ti = _mm256_set_epi8(
906 0, 0, 0, 0, 0, 1, 2, 3, 24, 27, 26, 25, 23, 20, 21, 22,
907 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 36, 39, 64, 67, 65, 66
908 );
909
910 ret = compose_fast(tn, c);
911 ret = compose_fast(ret, ti);
912
913 return ret;
914}
915
916_static_inline cube_fast_t
917_trans_BDr(cube_fast_t c)
918{
919 cube_fast_t ret;
920
921 cube_fast_t tn = _mm256_set_epi8(
922 0, 0, 0, 0, 5, 4, 7, 6, 9, 8, 11, 10, 19, 16, 17, 18,
923 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 33, 35, 68, 70, 69, 71
924 );
925 cube_fast_t ti = _mm256_set_epi8(
926 0, 0, 0, 0, 5, 4, 7, 6, 9, 8, 11, 10, 19, 16, 17, 18,
927 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 33, 35, 68, 70, 69, 71
928 );
929
930 ret = compose_fast(tn, c);
931 ret = compose_fast(ret, ti);
932
933 return ret;
934}
935
936_static_inline cube_fast_t
937_trans_BLr(cube_fast_t c)
938{
939 cube_fast_t ret;
940
941 cube_fast_t tn = _mm256_set_epi8(
942 0, 0, 0, 0, 20, 23, 22, 21, 16, 19, 18, 17, 9, 8, 11, 10,
943 0, 0, 0, 0, 0, 0, 0, 0, 70, 68, 69, 71, 32, 34, 35, 33
944 );
945 cube_fast_t ti = _mm256_set_epi8(
946 0, 0, 0, 0, 1, 0, 3, 2, 26, 25, 24, 27, 22, 21, 20, 23,
947 0, 0, 0, 0, 0, 0, 0, 0, 36, 39, 37, 38, 65, 66, 64, 67
948 );
949
950 ret = compose_fast(tn, c);
951 ret = compose_fast(ret, ti);
952
953 return ret;
954}
955
956_static_inline cube_fast_t
957_trans_UFm(cube_fast_t c)
958{
959 cube_fast_t ret;
960
961 cube_fast_t tn = _mm256_set_epi8(
962 0, 0, 0, 0, 10, 11, 8, 9, 6, 7, 4, 5, 3, 2, 1, 0,
963 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 1, 0, 7, 6, 5, 4
964 );
965 cube_fast_t ti = _mm256_set_epi8(
966 0, 0, 0, 0, 10, 11, 8, 9, 6, 7, 4, 5, 3, 2, 1, 0,
967 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 1, 0, 7, 6, 5, 4
968 );
969
970 ret = compose_fast(tn, c);
971 ret = compose_fast(ret, ti);
972 ret = invertco_fast(ret);
973
974 return ret;
975}
976
977_static_inline cube_fast_t
978_trans_ULm(cube_fast_t c)
979{
980 cube_fast_t ret;
981
982 cube_fast_t tn = _mm256_set_epi8(
983 0, 0, 0, 0, 25, 26, 27, 24, 3, 2, 1, 0, 7, 6, 5, 4,
984 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 4, 5, 2, 3, 1, 0
985 );
986 cube_fast_t ti = _mm256_set_epi8(
987 0, 0, 0, 0, 25, 26, 27, 24, 3, 2, 1, 0, 7, 6, 5, 4,
988 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 4, 5, 2, 3, 1, 0
989 );
990
991 ret = compose_fast(tn, c);
992 ret = compose_fast(ret, ti);
993 ret = invertco_fast(ret);
994
995 return ret;
996}
997
998_static_inline cube_fast_t
999_trans_UBm(cube_fast_t c)
1000{
1001 cube_fast_t ret;
1002
1003 cube_fast_t tn = _mm256_set_epi8(
1004 0, 0, 0, 0, 8, 9, 10, 11, 7, 6, 5, 4, 2, 3, 0, 1,
1005 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 1, 6, 7, 4, 5
1006 );
1007 cube_fast_t ti = _mm256_set_epi8(
1008 0, 0, 0, 0, 8, 9, 10, 11, 7, 6, 5, 4, 2, 3, 0, 1,
1009 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 1, 6, 7, 4, 5
1010 );
1011
1012 ret = compose_fast(tn, c);
1013 ret = compose_fast(ret, ti);
1014 ret = invertco_fast(ret);
1015
1016 return ret;
1017}
1018
1019_static_inline cube_fast_t
1020_trans_URm(cube_fast_t c)
1021{
1022 cube_fast_t ret;
1023
1024 cube_fast_t tn = _mm256_set_epi8(
1025 0, 0, 0, 0, 27, 24, 25, 26, 2, 3, 0, 1, 6, 7, 4, 5,
1026 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 5, 4, 3, 2, 0, 1
1027 );
1028 cube_fast_t ti = _mm256_set_epi8(
1029 0, 0, 0, 0, 27, 24, 25, 26, 2, 3, 0, 1, 6, 7, 4, 5,
1030 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 5, 4, 3, 2, 0, 1
1031 );
1032
1033 ret = compose_fast(tn, c);
1034 ret = compose_fast(ret, ti);
1035 ret = invertco_fast(ret);
1036
1037 return ret;
1038}
1039
1040_static_inline cube_fast_t
1041_trans_DFm(cube_fast_t c)
1042{
1043 cube_fast_t ret;
1044
1045 cube_fast_t tn = _mm256_set_epi8(
1046 0, 0, 0, 0, 11, 10, 9, 8, 4, 5, 6, 7, 0, 1, 2, 3,
1047 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 5, 4, 7, 6
1048 );
1049 cube_fast_t ti = _mm256_set_epi8(
1050 0, 0, 0, 0, 11, 10, 9, 8, 4, 5, 6, 7, 0, 1, 2, 3,
1051 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 5, 4, 7, 6
1052 );
1053
1054 ret = compose_fast(tn, c);
1055 ret = compose_fast(ret, ti);
1056 ret = invertco_fast(ret);
1057
1058 return ret;
1059}
1060
1061_static_inline cube_fast_t
1062_trans_DLm(cube_fast_t c)
1063{
1064 cube_fast_t ret;
1065
1066 cube_fast_t tn = _mm256_set_epi8(
1067 0, 0, 0, 0, 26, 25, 24, 27, 1, 0, 3, 2, 4, 5, 6, 7,
1068 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 7, 6, 1, 0, 2, 3
1069 );
1070 cube_fast_t ti = _mm256_set_epi8(
1071 0, 0, 0, 0, 24, 27, 26, 25, 0, 1, 2, 3, 5, 4, 7, 6,
1072 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 6, 7, 0, 1, 3, 2
1073 );
1074
1075 ret = compose_fast(tn, c);
1076 ret = compose_fast(ret, ti);
1077 ret = invertco_fast(ret);
1078
1079 return ret;
1080}
1081
1082_static_inline cube_fast_t
1083_trans_DBm(cube_fast_t c)
1084{
1085 cube_fast_t ret;
1086
1087 cube_fast_t tn = _mm256_set_epi8(
1088 0, 0, 0, 0, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2,
1089 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7
1090 );
1091 cube_fast_t ti = _mm256_set_epi8(
1092 0, 0, 0, 0, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2,
1093 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7
1094 );
1095
1096 ret = compose_fast(tn, c);
1097 ret = compose_fast(ret, ti);
1098 ret = invertco_fast(ret);
1099
1100 return ret;
1101}
1102
1103_static_inline cube_fast_t
1104_trans_DRm(cube_fast_t c)
1105{
1106 cube_fast_t ret;
1107
1108 cube_fast_t tn = _mm256_set_epi8(
1109 0, 0, 0, 0, 24, 27, 26, 25, 0, 1, 2, 3, 5, 4, 7, 6,
1110 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 6, 7, 0, 1, 3, 2
1111 );
1112 cube_fast_t ti = _mm256_set_epi8(
1113 0, 0, 0, 0, 26, 25, 24, 27, 1, 0, 3, 2, 4, 5, 6, 7,
1114 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 7, 6, 1, 0, 2, 3
1115 );
1116
1117 ret = compose_fast(tn, c);
1118 ret = compose_fast(ret, ti);
1119 ret = invertco_fast(ret);
1120
1121 return ret;
1122}
1123
1124_static_inline cube_fast_t
1125_trans_RUm(cube_fast_t c)
1126{
1127 cube_fast_t ret;
1128
1129 cube_fast_t tn = _mm256_set_epi8(
1130 0, 0, 0, 0, 3, 2, 1, 0, 24, 27, 26, 25, 20, 23, 22, 21,
1131 0, 0, 0, 0, 0, 0, 0, 0, 35, 32, 34, 33, 70, 69, 71, 68
1132 );
1133 cube_fast_t ti = _mm256_set_epi8(
1134 0, 0, 0, 0, 22, 21, 20, 23, 18, 17, 16, 19, 11, 10, 9, 8,
1135 0, 0, 0, 0, 0, 0, 0, 0, 33, 35, 34, 32, 71, 69, 68, 70
1136 );
1137
1138 ret = compose_fast(tn, c);
1139 ret = compose_fast(ret, ti);
1140 ret = invertco_fast(ret);
1141
1142 return ret;
1143}
1144
1145_static_inline cube_fast_t
1146_trans_RFm(cube_fast_t c)
1147{
1148 cube_fast_t ret;
1149
1150 cube_fast_t tn = _mm256_set_epi8(
1151 0, 0, 0, 0, 18, 17, 16, 19, 23, 20, 21, 22, 24, 27, 26, 25,
1152 0, 0, 0, 0, 0, 0, 0, 0, 69, 70, 71, 68, 35, 32, 33, 34
1153 );
1154 cube_fast_t ti = _mm256_set_epi8(
1155 0, 0, 0, 0, 18, 17, 16, 19, 23, 20, 21, 22, 24, 27, 26, 25,
1156 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 39, 36, 67, 64, 65, 66
1157 );
1158
1159 ret = compose_fast(tn, c);
1160 ret = compose_fast(ret, ti);
1161 ret = invertco_fast(ret);
1162
1163 return ret;
1164}
1165
1166_static_inline cube_fast_t
1167_trans_RDm(cube_fast_t c)
1168{
1169 cube_fast_t ret;
1170
1171 cube_fast_t tn = _mm256_set_epi8(
1172 0, 0, 0, 0, 1, 0, 3, 2, 27, 24, 25, 26, 23, 20, 21, 22,
1173 0, 0, 0, 0, 0, 0, 0, 0, 32, 35, 33, 34, 69, 70, 68, 71
1174 );
1175 cube_fast_t ti = _mm256_set_epi8(
1176 0, 0, 0, 0, 23, 20, 21, 22, 19, 16, 17, 18, 9, 8, 11, 10,
1177 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 35, 33, 70, 68, 69, 71
1178 );
1179
1180 ret = compose_fast(tn, c);
1181 ret = compose_fast(ret, ti);
1182 ret = invertco_fast(ret);
1183
1184 return ret;
1185}
1186
1187_static_inline cube_fast_t
1188_trans_RBm(cube_fast_t c)
1189{
1190 cube_fast_t ret;
1191
1192 cube_fast_t tn = _mm256_set_epi8(
1193 0, 0, 0, 0, 16, 19, 18, 17, 20, 23, 22, 21, 27, 24, 25, 26,
1194 0, 0, 0, 0, 0, 0, 0, 0, 70, 69, 68, 71, 32, 35, 34, 33
1195 );
1196 cube_fast_t ti = _mm256_set_epi8(
1197 0, 0, 0, 0, 19, 16, 17, 18, 22, 21, 20, 23, 26, 25, 24, 27,
1198 0, 0, 0, 0, 0, 0, 0, 0, 36, 39, 38, 37, 66, 65, 64, 67
1199 );
1200
1201 ret = compose_fast(tn, c);
1202 ret = compose_fast(ret, ti);
1203 ret = invertco_fast(ret);
1204
1205 return ret;
1206}
1207
1208_static_inline cube_fast_t
1209_trans_LUm(cube_fast_t c)
1210{
1211 cube_fast_t ret;
1212
1213 cube_fast_t tn = _mm256_set_epi8(
1214 0, 0, 0, 0, 2, 3, 0, 1, 26, 25, 24, 27, 21, 22, 23, 20,
1215 0, 0, 0, 0, 0, 0, 0, 0, 34, 33, 35, 32, 71, 68, 70, 69
1216 );
1217 cube_fast_t ti = _mm256_set_epi8(
1218 0, 0, 0, 0, 20, 23, 22, 21, 17, 18, 19, 16, 10, 11, 8, 9,
1219 0, 0, 0, 0, 0, 0, 0, 0, 35, 33, 32, 34, 69, 71, 70, 68
1220 );
1221
1222 ret = compose_fast(tn, c);
1223 ret = compose_fast(ret, ti);
1224 ret = invertco_fast(ret);
1225
1226 return ret;
1227}
1228
1229_static_inline cube_fast_t
1230_trans_LFm(cube_fast_t c)
1231{
1232 cube_fast_t ret;
1233
1234 cube_fast_t tn = _mm256_set_epi8(
1235 0, 0, 0, 0, 17, 18, 19, 16, 21, 22, 23, 20, 25, 26, 27, 24,
1236 0, 0, 0, 0, 0, 0, 0, 0, 71, 68, 69, 70, 33, 34, 35, 32
1237 );
1238 cube_fast_t ti = _mm256_set_epi8(
1239 0, 0, 0, 0, 17, 18, 19, 16, 21, 22, 23, 20, 25, 26, 27, 24,
1240 0, 0, 0, 0, 0, 0, 0, 0, 39, 36, 37, 38, 65, 66, 67, 64
1241 );
1242
1243 ret = compose_fast(tn, c);
1244 ret = compose_fast(ret, ti);
1245 ret = invertco_fast(ret);
1246
1247 return ret;
1248}
1249
1250_static_inline cube_fast_t
1251_trans_LDm(cube_fast_t c)
1252{
1253 cube_fast_t ret;
1254
1255 cube_fast_t tn = _mm256_set_epi8(
1256 0, 0, 0, 0, 0, 1, 2, 3, 25, 26, 27, 24, 22, 21, 20, 23,
1257 0, 0, 0, 0, 0, 0, 0, 0, 33, 34, 32, 35, 68, 71, 69, 70
1258 );
1259 cube_fast_t ti = _mm256_set_epi8(
1260 0, 0, 0, 0, 21, 22, 23, 20, 16, 19, 18, 17, 8, 9, 10, 11,
1261 0, 0, 0, 0, 0, 0, 0, 0, 34, 32, 33, 35, 68, 70, 71, 69
1262 );
1263
1264 ret = compose_fast(tn, c);
1265 ret = compose_fast(ret, ti);
1266 ret = invertco_fast(ret);
1267
1268 return ret;
1269}
1270
1271_static_inline cube_fast_t
1272_trans_LBm(cube_fast_t c)
1273{
1274 cube_fast_t ret;
1275
1276 cube_fast_t tn = _mm256_set_epi8(
1277 0, 0, 0, 0, 19, 16, 17, 18, 22, 21, 20, 23, 26, 25, 24, 27,
1278 0, 0, 0, 0, 0, 0, 0, 0, 68, 71, 70, 69, 34, 33, 32, 35
1279 );
1280 cube_fast_t ti = _mm256_set_epi8(
1281 0, 0, 0, 0, 16, 19, 18, 17, 20, 23, 22, 21, 27, 24, 25, 26,
1282 0, 0, 0, 0, 0, 0, 0, 0, 38, 37, 36, 39, 64, 67, 66, 65
1283 );
1284
1285 ret = compose_fast(tn, c);
1286 ret = compose_fast(ret, ti);
1287 ret = invertco_fast(ret);
1288
1289 return ret;
1290}
1291
1292_static_inline cube_fast_t
1293_trans_FUm(cube_fast_t c)
1294{
1295 cube_fast_t ret;
1296
1297 cube_fast_t tn = _mm256_set_epi8(
1298 0, 0, 0, 0, 7, 6, 5, 4, 11, 10, 9, 8, 17, 18, 19, 16,
1299 0, 0, 0, 0, 0, 0, 0, 0, 39, 37, 38, 36, 67, 65, 66, 64
1300 );
1301 cube_fast_t ti = _mm256_set_epi8(
1302 0, 0, 0, 0, 7, 6, 5, 4, 11, 10, 9, 8, 17, 18, 19, 16,
1303 0, 0, 0, 0, 0, 0, 0, 0, 71, 69, 70, 68, 35, 33, 34, 32
1304 );
1305
1306 ret = compose_fast(tn, c);
1307 ret = compose_fast(ret, ti);
1308 ret = invertco_fast(ret);
1309
1310 return ret;
1311}
1312
1313_static_inline cube_fast_t
1314_trans_FRm(cube_fast_t c)
1315{
1316 cube_fast_t ret;
1317
1318 cube_fast_t tn = _mm256_set_epi8(
1319 0, 0, 0, 0, 20, 23, 22, 21, 17, 18, 19, 16, 10, 11, 8, 9,
1320 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 64, 66, 37, 39, 38, 36
1321 );
1322 cube_fast_t ti = _mm256_set_epi8(
1323 0, 0, 0, 0, 2, 3, 0, 1, 26, 25, 24, 27, 21, 22, 23, 20,
1324 0, 0, 0, 0, 0, 0, 0, 0, 66, 65, 67, 64, 39, 36, 38, 37
1325 );
1326
1327 ret = compose_fast(tn, c);
1328 ret = compose_fast(ret, ti);
1329 ret = invertco_fast(ret);
1330
1331 return ret;
1332}
1333
1334_static_inline cube_fast_t
1335_trans_FDm(cube_fast_t c)
1336{
1337 cube_fast_t ret;
1338
1339 cube_fast_t tn = _mm256_set_epi8(
1340 0, 0, 0, 0, 5, 4, 7, 6, 10, 11, 8, 9, 18, 17, 16, 19,
1341 0, 0, 0, 0, 0, 0, 0, 0, 37, 39, 36, 38, 65, 67, 64, 66
1342 );
1343 cube_fast_t ti = _mm256_set_epi8(
1344 0, 0, 0, 0, 6, 7, 4, 5, 9, 8, 11, 10, 16, 19, 18, 17,
1345 0, 0, 0, 0, 0, 0, 0, 0, 70, 68, 71, 69, 34, 32, 35, 33
1346 );
1347
1348 ret = compose_fast(tn, c);
1349 ret = compose_fast(ret, ti);
1350 ret = invertco_fast(ret);
1351
1352 return ret;
1353}
1354
1355_static_inline cube_fast_t
1356_trans_FLm(cube_fast_t c)
1357{
1358 cube_fast_t ret;
1359
1360 cube_fast_t tn = _mm256_set_epi8(
1361 0, 0, 0, 0, 22, 21, 20, 23, 18, 17, 16, 19, 11, 10, 9, 8,
1362 0, 0, 0, 0, 0, 0, 0, 0, 65, 67, 66, 64, 39, 37, 36, 38
1363 );
1364 cube_fast_t ti = _mm256_set_epi8(
1365 0, 0, 0, 0, 3, 2, 1, 0, 24, 27, 26, 25, 20, 23, 22, 21,
1366 0, 0, 0, 0, 0, 0, 0, 0, 67, 64, 66, 65, 38, 37, 39, 36
1367 );
1368
1369 ret = compose_fast(tn, c);
1370 ret = compose_fast(ret, ti);
1371 ret = invertco_fast(ret);
1372
1373 return ret;
1374}
1375
1376_static_inline cube_fast_t
1377_trans_BUm(cube_fast_t c)
1378{
1379 cube_fast_t ret;
1380
1381 cube_fast_t tn = _mm256_set_epi8(
1382 0, 0, 0, 0, 6, 7, 4, 5, 9, 8, 11, 10, 16, 19, 18, 17,
1383 0, 0, 0, 0, 0, 0, 0, 0, 38, 36, 39, 37, 66, 64, 67, 65
1384 );
1385 cube_fast_t ti = _mm256_set_epi8(
1386 0, 0, 0, 0, 5, 4, 7, 6, 10, 11, 8, 9, 18, 17, 16, 19,
1387 0, 0, 0, 0, 0, 0, 0, 0, 69, 71, 68, 70, 33, 35, 32, 34
1388 );
1389
1390 ret = compose_fast(tn, c);
1391 ret = compose_fast(ret, ti);
1392 ret = invertco_fast(ret);
1393
1394 return ret;
1395}
1396
1397_static_inline cube_fast_t
1398_trans_BRm(cube_fast_t c)
1399{
1400 cube_fast_t ret;
1401
1402 cube_fast_t tn = _mm256_set_epi8(
1403 0, 0, 0, 0, 23, 20, 21, 22, 19, 16, 17, 18, 9, 8, 11, 10,
1404 0, 0, 0, 0, 0, 0, 0, 0, 64, 66, 67, 65, 38, 36, 37, 39
1405 );
1406 cube_fast_t ti = _mm256_set_epi8(
1407 0, 0, 0, 0, 1, 0, 3, 2, 27, 24, 25, 26, 23, 20, 21, 22,
1408 0, 0, 0, 0, 0, 0, 0, 0, 64, 67, 65, 66, 37, 38, 36, 39
1409 );
1410
1411 ret = compose_fast(tn, c);
1412 ret = compose_fast(ret, ti);
1413 ret = invertco_fast(ret);
1414
1415 return ret;
1416}
1417
1418_static_inline cube_fast_t
1419_trans_BDm(cube_fast_t c)
1420{
1421 cube_fast_t ret;
1422
1423 cube_fast_t tn = _mm256_set_epi8(
1424 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 19, 16, 17, 18,
1425 0, 0, 0, 0, 0, 0, 0, 0, 36, 38, 37, 39, 64, 66, 65, 67
1426 );
1427 cube_fast_t ti = _mm256_set_epi8(
1428 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 19, 16, 17, 18,
1429 0, 0, 0, 0, 0, 0, 0, 0, 68, 70, 69, 71, 32, 34, 33, 35
1430 );
1431
1432 ret = compose_fast(tn, c);
1433 ret = compose_fast(ret, ti);
1434 ret = invertco_fast(ret);
1435
1436 return ret;
1437}
1438
1439_static_inline cube_fast_t
1440_trans_BLm(cube_fast_t c)
1441{
1442 cube_fast_t ret;
1443
1444 cube_fast_t tn = _mm256_set_epi8(
1445 0, 0, 0, 0, 21, 22, 23, 20, 16, 19, 18, 17, 8, 9, 10, 11,
1446 0, 0, 0, 0, 0, 0, 0, 0, 66, 64, 65, 67, 36, 38, 39, 37
1447 );
1448 cube_fast_t ti = _mm256_set_epi8(
1449 0, 0, 0, 0, 0, 1, 2, 3, 25, 26, 27, 24, 22, 21, 20, 23,
1450 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 64, 67, 36, 39, 37, 38
1451 );
1452
1453 ret = compose_fast(tn, c);
1454 ret = compose_fast(ret, ti);
1455 ret = invertco_fast(ret);
1456
1457 return ret;
1458}
1459
1460_static cube_fast_t 622_static cube_fast_t
1461cubetofast(cube_t a) 623cubetofast(cube_t a)
1462{ 624{
@@ -1618,41 +780,356 @@ in the previous section(s) for unsupported architectures.
1618 780
1619typedef cube_t cube_fast_t; 781typedef cube_t cube_fast_t;
1620 782
1621#define PERM4(r, i, j, k, l) \
1622 aux = r[i]; \
1623 r[i] = r[l]; \
1624 r[l] = r[k]; \
1625 r[k] = r[j]; \
1626 r[j] = aux;
1627#define PERM22(r, i, j, k, l) \
1628 aux = r[i]; \
1629 r[i] = r[j]; \
1630 r[j] = aux; \
1631 aux = r[k]; \
1632 r[k] = r[l]; \
1633 r[l] = aux;
1634#define CO(a, b) \
1635 aux = (a & _cobits) + (b & _cobits); \
1636 auy = (aux + _ctwist_cw) >> 2U; \
1637 auz = (aux + auy) & _cobits2; \
1638 a = (a & _pbits) | auz;
1639#define CO4(r, i, j, k, l) \
1640 CO(r[i], _ctwist_cw) \
1641 CO(r[j], _ctwist_cw) \
1642 CO(r[k], _ctwist_ccw) \
1643 CO(r[l], _ctwist_ccw)
1644#define EO4(r, i, j, k, l) \
1645 r[i] ^= _eobit; \
1646 r[j] ^= _eobit; \
1647 r[k] ^= _eobit; \
1648 r[l] ^= _eobit;
1649
1650_static cube_fast_t zero_fast = { .corner = {0}, .edge = {0} }; 783_static cube_fast_t zero_fast = { .corner = {0}, .edge = {0} };
1651_static cube_t solved_fast = { 784_static cube_t solved_fast = {
1652 .corner = {0, 1, 2, 3, 4, 5, 6, 7}, 785 .corner = {0, 1, 2, 3, 4, 5, 6, 7},
1653 .edge = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} 786 .edge = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
1654}; 787};
1655 788
789_static cube_fast_t _move_cube_U = {
790 .corner = {5, 4, 2, 3, 0, 1, 6, 7},
791 .edge = {4, 5, 2, 3, 1, 0, 6, 7, 8, 9, 10, 11} };
792_static cube_fast_t _move_cube_U2 = {
793 .corner = {1, 0, 2, 3, 5, 4, 6, 7},
794 .edge = {1, 0, 2, 3, 5, 4, 6, 7, 8, 9, 10, 11} };
795_static cube_fast_t _move_cube_U3 = {
796 .corner = {4, 5, 2, 3, 1, 0, 6, 7},
797 .edge = {5, 4, 2, 3, 0, 1, 6, 7, 8, 9, 10, 11} };
798_static cube_fast_t _move_cube_D = {
799 .corner = {0, 1, 7, 6, 4, 5, 2, 3},
800 .edge = {0, 1, 7, 6, 4, 5, 2, 3, 8, 9, 10, 11} };
801_static cube_fast_t _move_cube_D2 = {
802 .corner = {0, 1, 3, 2, 4, 5, 7, 6},
803 .edge = {0, 1, 3, 2, 4, 5, 7, 6, 8, 9, 10, 11} };
804_static cube_fast_t _move_cube_D3 = {
805 .corner = {0, 1, 6, 7, 4, 5, 3, 2},
806 .edge = {0, 1, 6, 7, 4, 5, 3, 2, 8, 9, 10, 11} };
807_static cube_fast_t _move_cube_R = {
808 .corner = {70, 1, 2, 69, 4, 32, 35, 7},
809 .edge = {0, 1, 2, 3, 8, 5, 6, 11, 7, 9, 10, 4} };
810_static cube_fast_t _move_cube_R2 = {
811 .corner = {3, 1, 2, 0, 4, 6, 5, 7},
812 .edge = {0, 1, 2, 3, 7, 5, 6, 4, 11, 9, 10, 8} };
813_static cube_fast_t _move_cube_R3 = {
814 .corner = {69, 1, 2, 70, 4, 35, 32, 7},
815 .edge = {0, 1, 2, 3, 11, 5, 6, 8, 4, 9, 10, 7} };
816_static cube_fast_t _move_cube_L = {
817 .corner = {0, 71, 68, 3, 33, 5, 6, 34},
818 .edge = {0, 1, 2, 3, 4, 10, 9, 7, 8, 5, 6, 11} };
819_static cube_fast_t _move_cube_L2 = {
820 .corner = {0, 2, 1, 3, 7, 5, 6, 4},
821 .edge = {0, 1, 2, 3, 4, 6, 5, 7, 8, 10, 9, 11} };
822_static cube_fast_t _move_cube_L3 = {
823 .corner = {0, 68, 71, 3, 34, 5, 6, 33},
824 .edge = {0, 1, 2, 3, 4, 9, 10, 7, 8, 6, 5, 11} };
825_static cube_fast_t _move_cube_F = {
826 .corner = {36, 1, 38, 3, 66, 5, 64, 7},
827 .edge = {25, 1, 2, 24, 4, 5, 6, 7, 16, 19, 10, 11} };
828_static cube_fast_t _move_cube_F2 = {
829 .corner = {2, 1, 0, 3, 6, 5, 4, 7},
830 .edge = {3, 1, 2, 0, 4, 5, 6, 7, 9, 8, 10, 11} };
831_static cube_fast_t _move_cube_F3 = {
832 .corner = {38, 1, 36, 3, 64, 5, 66, 7},
833 .edge = {24, 1, 2, 25, 4, 5, 6, 7, 19, 16, 10, 11} };
834_static cube_fast_t _move_cube_B = {
835 .corner = {0, 37, 2, 39, 4, 67, 6, 65},
836 .edge = {0, 27, 26, 3, 4, 5, 6, 7, 8, 9, 17, 18} };
837_static cube_fast_t _move_cube_B2 = {
838 .corner = {0, 3, 2, 1, 4, 7, 6, 5},
839 .edge = {0, 2, 1, 3, 4, 5, 6, 7, 8, 9, 11, 10} };
840_static cube_fast_t _move_cube_B3 = {
841 .corner = {0, 39, 2, 37, 4, 65, 6, 67},
842 .edge = {0, 26, 27, 3, 4, 5, 6, 7, 8, 9, 18, 17} };
843
844_static cube_fast_t _trans_cube_UFr = {
845 .corner = {0, 1, 2, 3, 4, 5, 6, 7},
846 .edge = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} };
847_static cube_fast_t _trans_cube_UFr_inverse = {
848 .corner = {0, 1, 2, 3, 4, 5, 6, 7},
849 .edge = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11} };
850_static cube_fast_t _trans_cube_ULr = {
851 .corner = {4, 5, 7, 6, 1, 0, 2, 3},
852 .edge = {5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24} };
853_static cube_fast_t _trans_cube_ULr_inverse = {
854 .corner = {5, 4, 6, 7, 0, 1, 3, 2},
855 .edge = {4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26} };
856_static cube_fast_t _trans_cube_UBr = {
857 .corner = {1, 0, 3, 2, 5, 4, 7, 6},
858 .edge = {1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9} };
859_static cube_fast_t _trans_cube_UBr_inverse = {
860 .corner = {1, 0, 3, 2, 5, 4, 7, 6},
861 .edge = {1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9} };
862_static cube_fast_t _trans_cube_URr = {
863 .corner = {5, 4, 6, 7, 0, 1, 3, 2},
864 .edge = {4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26} };
865_static cube_fast_t _trans_cube_URr_inverse = {
866 .corner = {4, 5, 7, 6, 1, 0, 2, 3},
867 .edge = {5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24} };
868_static cube_fast_t _trans_cube_DFr = {
869 .corner = {2, 3, 0, 1, 6, 7, 4, 5},
870 .edge = {3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10} };
871_static cube_fast_t _trans_cube_DFr_inverse = {
872 .corner = {2, 3, 0, 1, 6, 7, 4, 5},
873 .edge = {3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10} };
874_static cube_fast_t _trans_cube_DLr = {
875 .corner = {7, 6, 4, 5, 2, 3, 1, 0},
876 .edge = {6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27} };
877_static cube_fast_t _trans_cube_DLr_inverse = {
878 .corner = {7, 6, 4, 5, 2, 3, 1, 0},
879 .edge = {6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27} };
880_static cube_fast_t _trans_cube_DBr = {
881 .corner = {3, 2, 1, 0, 7, 6, 5, 4},
882 .edge = {2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8} };
883_static cube_fast_t _trans_cube_DBr_inverse = {
884 .corner = {3, 2, 1, 0, 7, 6, 5, 4},
885 .edge = {2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8} };
886_static cube_fast_t _trans_cube_DRr = {
887 .corner = {6, 7, 5, 4, 3, 2, 0, 1},
888 .edge = {7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25} };
889_static cube_fast_t _trans_cube_DRr_inverse = {
890 .corner = {6, 7, 5, 4, 3, 2, 0, 1},
891 .edge = {7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25} };
892_static cube_fast_t _trans_cube_RUr = {
893 .corner = {64, 67, 65, 66, 37, 38, 36, 39},
894 .edge = {20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3} };
895_static cube_fast_t _trans_cube_RUr_inverse = {
896 .corner = {32, 34, 35, 33, 70, 68, 69, 71},
897 .edge = {8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21} };
898_static cube_fast_t _trans_cube_RFr = {
899 .corner = {38, 37, 36, 39, 64, 67, 66, 65},
900 .edge = {24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18} };
901_static cube_fast_t _trans_cube_RFr_inverse = {
902 .corner = {36, 39, 38, 37, 66, 65, 64, 67},
903 .edge = {25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17} };
904_static cube_fast_t _trans_cube_RDr = {
905 .corner = {67, 64, 66, 65, 38, 37, 39, 36},
906 .edge = {23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1} };
907_static cube_fast_t _trans_cube_RDr_inverse = {
908 .corner = {33, 35, 34, 32, 71, 69, 68, 70},
909 .edge = {10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20} };
910_static cube_fast_t _trans_cube_RBr = {
911 .corner = {37, 38, 39, 36, 67, 64, 65, 66},
912 .edge = {27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16} };
913_static cube_fast_t _trans_cube_RBr_inverse = {
914 .corner = {37, 38, 39, 36, 67, 64, 65, 66},
915 .edge = {27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16} };
916_static cube_fast_t _trans_cube_LUr = {
917 .corner = {65, 66, 64, 67, 36, 39, 37, 38},
918 .edge = {21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2} };
919_static cube_fast_t _trans_cube_LUr_inverse = {
920 .corner = {34, 32, 33, 35, 68, 70, 71, 69},
921 .edge = {9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23} };
922_static cube_fast_t _trans_cube_LFr = {
923 .corner = {36, 39, 38, 37, 66, 65, 64, 67},
924 .edge = {25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17} };
925_static cube_fast_t _trans_cube_LFr_inverse = {
926 .corner = {38, 37, 36, 39, 64, 67, 66, 65},
927 .edge = {24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18} };
928_static cube_fast_t _trans_cube_LDr = {
929 .corner = {66, 65, 67, 64, 39, 36, 38, 37},
930 .edge = {22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0} };
931_static cube_fast_t _trans_cube_LDr_inverse = {
932 .corner = {35, 33, 32, 34, 69, 71, 70, 68},
933 .edge = {11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22} };
934_static cube_fast_t _trans_cube_LBr = {
935 .corner = {39, 36, 37, 38, 65, 66, 67, 64},
936 .edge = {26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19} };
937_static cube_fast_t _trans_cube_LBr_inverse = {
938 .corner = {39, 36, 37, 38, 65, 66, 67, 64},
939 .edge = {26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19} };
940_static cube_fast_t _trans_cube_FUr = {
941 .corner = {68, 70, 69, 71, 32, 34, 33, 35},
942 .edge = {16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6} };
943_static cube_fast_t _trans_cube_FUr_inverse = {
944 .corner = {68, 70, 69, 71, 32, 34, 33, 35},
945 .edge = {16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6} };
946_static cube_fast_t _trans_cube_FRr = {
947 .corner = {32, 34, 35, 33, 70, 68, 69, 71},
948 .edge = {8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21} };
949_static cube_fast_t _trans_cube_FRr_inverse = {
950 .corner = {64, 67, 65, 66, 37, 38, 36, 39},
951 .edge = {20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3} };
952_static cube_fast_t _trans_cube_FDr = {
953 .corner = {70, 68, 71, 69, 34, 32, 35, 33},
954 .edge = {19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4} };
955_static cube_fast_t _trans_cube_FDr_inverse = {
956 .corner = {69, 71, 68, 70, 33, 35, 32, 34},
957 .edge = {17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7} };
958_static cube_fast_t _trans_cube_FLr = {
959 .corner = {34, 32, 33, 35, 68, 70, 71, 69},
960 .edge = {9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23} };
961_static cube_fast_t _trans_cube_FLr_inverse = {
962 .corner = {65, 66, 64, 67, 36, 39, 37, 38},
963 .edge = {21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2} };
964_static cube_fast_t _trans_cube_BUr = {
965 .corner = {69, 71, 68, 70, 33, 35, 32, 34},
966 .edge = {17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7} };
967_static cube_fast_t _trans_cube_BUr_inverse = {
968 .corner = {70, 68, 71, 69, 34, 32, 35, 33},
969 .edge = {19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4} };
970_static cube_fast_t _trans_cube_BRr = {
971 .corner = {35, 33, 32, 34, 69, 71, 70, 68},
972 .edge = {11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22} };
973_static cube_fast_t _trans_cube_BRr_inverse = {
974 .corner = {66, 65, 67, 64, 39, 36, 38, 37},
975 .edge = {22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0} };
976_static cube_fast_t _trans_cube_BDr = {
977 .corner = {71, 69, 70, 68, 35, 33, 34, 32},
978 .edge = {18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5} };
979_static cube_fast_t _trans_cube_BDr_inverse = {
980 .corner = {71, 69, 70, 68, 35, 33, 34, 32},
981 .edge = {18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5} };
982_static cube_fast_t _trans_cube_BLr = {
983 .corner = {33, 35, 34, 32, 71, 69, 68, 70},
984 .edge = {10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20} };
985_static cube_fast_t _trans_cube_BLr_inverse = {
986 .corner = {67, 64, 66, 65, 38, 37, 39, 36},
987 .edge = {23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1} };
988_static cube_fast_t _trans_cube_UFm = {
989 .corner = {4, 5, 6, 7, 0, 1, 2, 3},
990 .edge = {0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10} };
991_static cube_fast_t _trans_cube_UFm_inverse = {
992 .corner = {4, 5, 6, 7, 0, 1, 2, 3},
993 .edge = {0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10} };
994_static cube_fast_t _trans_cube_ULm = {
995 .corner = {0, 1, 3, 2, 5, 4, 6, 7},
996 .edge = {4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25} };
997_static cube_fast_t _trans_cube_ULm_inverse = {
998 .corner = {0, 1, 3, 2, 5, 4, 6, 7},
999 .edge = {4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25} };
1000_static cube_fast_t _trans_cube_UBm = {
1001 .corner = {5, 4, 7, 6, 1, 0, 3, 2},
1002 .edge = {1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8} };
1003_static cube_fast_t _trans_cube_UBm_inverse = {
1004 .corner = {5, 4, 7, 6, 1, 0, 3, 2},
1005 .edge = {1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8} };
1006_static cube_fast_t _trans_cube_URm = {
1007 .corner = {1, 0, 2, 3, 4, 5, 7, 6},
1008 .edge = {5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27} };
1009_static cube_fast_t _trans_cube_URm_inverse = {
1010 .corner = {1, 0, 2, 3, 4, 5, 7, 6},
1011 .edge = {5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27} };
1012_static cube_fast_t _trans_cube_DFm = {
1013 .corner = {6, 7, 4, 5, 2, 3, 0, 1},
1014 .edge = {3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11} };
1015_static cube_fast_t _trans_cube_DFm_inverse = {
1016 .corner = {6, 7, 4, 5, 2, 3, 0, 1},
1017 .edge = {3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11} };
1018_static cube_fast_t _trans_cube_DLm = {
1019 .corner = {3, 2, 0, 1, 6, 7, 5, 4},
1020 .edge = {7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26} };
1021_static cube_fast_t _trans_cube_DLm_inverse = {
1022 .corner = {2, 3, 1, 0, 7, 6, 4, 5},
1023 .edge = {6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24} };
1024_static cube_fast_t _trans_cube_DBm = {
1025 .corner = {7, 6, 5, 4, 3, 2, 1, 0},
1026 .edge = {2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9} };
1027_static cube_fast_t _trans_cube_DBm_inverse = {
1028 .corner = {7, 6, 5, 4, 3, 2, 1, 0},
1029 .edge = {2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9} };
1030_static cube_fast_t _trans_cube_DRm = {
1031 .corner = {2, 3, 1, 0, 7, 6, 4, 5},
1032 .edge = {6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24} };
1033_static cube_fast_t _trans_cube_DRm_inverse = {
1034 .corner = {3, 2, 0, 1, 6, 7, 5, 4},
1035 .edge = {7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26} };
1036_static cube_fast_t _trans_cube_RUm = {
1037 .corner = {68, 71, 69, 70, 33, 34, 32, 35},
1038 .edge = {21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3} };
1039_static cube_fast_t _trans_cube_RUm_inverse = {
1040 .corner = {70, 68, 69, 71, 32, 34, 35, 33},
1041 .edge = {8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22} };
1042_static cube_fast_t _trans_cube_RFm = {
1043 .corner = {34, 33, 32, 35, 68, 71, 70, 69},
1044 .edge = {25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18} };
1045_static cube_fast_t _trans_cube_RFm_inverse = {
1046 .corner = {66, 65, 64, 67, 36, 39, 38, 37},
1047 .edge = {25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18} };
1048_static cube_fast_t _trans_cube_RDm = {
1049 .corner = {71, 68, 70, 69, 34, 33, 35, 32},
1050 .edge = {22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1} };
1051_static cube_fast_t _trans_cube_RDm_inverse = {
1052 .corner = {71, 69, 68, 70, 33, 35, 34, 32},
1053 .edge = {10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23} };
1054_static cube_fast_t _trans_cube_RBm = {
1055 .corner = {33, 34, 35, 32, 71, 68, 69, 70},
1056 .edge = {26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16} };
1057_static cube_fast_t _trans_cube_RBm_inverse = {
1058 .corner = {67, 64, 65, 66, 37, 38, 39, 36},
1059 .edge = {27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19} };
1060_static cube_fast_t _trans_cube_LUm = {
1061 .corner = {69, 70, 68, 71, 32, 35, 33, 34},
1062 .edge = {20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2} };
1063_static cube_fast_t _trans_cube_LUm_inverse = {
1064 .corner = {68, 70, 71, 69, 34, 32, 33, 35},
1065 .edge = {9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20} };
1066_static cube_fast_t _trans_cube_LFm = {
1067 .corner = {32, 35, 34, 33, 70, 69, 68, 71},
1068 .edge = {24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17} };
1069_static cube_fast_t _trans_cube_LFm_inverse = {
1070 .corner = {64, 67, 66, 65, 38, 37, 36, 39},
1071 .edge = {24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17} };
1072_static cube_fast_t _trans_cube_LDm = {
1073 .corner = {70, 69, 71, 68, 35, 32, 34, 33},
1074 .edge = {23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0} };
1075_static cube_fast_t _trans_cube_LDm_inverse = {
1076 .corner = {69, 71, 70, 68, 35, 33, 32, 34},
1077 .edge = {11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21} };
1078_static cube_fast_t _trans_cube_LBm = {
1079 .corner = {35, 32, 33, 34, 69, 70, 71, 68},
1080 .edge = {27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19} };
1081_static cube_fast_t _trans_cube_LBm_inverse = {
1082 .corner = {65, 66, 67, 64, 39, 36, 37, 38},
1083 .edge = {26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16} };
1084_static cube_fast_t _trans_cube_FUm = {
1085 .corner = {64, 66, 65, 67, 36, 38, 37, 39},
1086 .edge = {16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7} };
1087_static cube_fast_t _trans_cube_FUm_inverse = {
1088 .corner = {32, 34, 33, 35, 68, 70, 69, 71},
1089 .edge = {16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7} };
1090_static cube_fast_t _trans_cube_FRm = {
1091 .corner = {36, 38, 39, 37, 66, 64, 65, 67},
1092 .edge = {9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20} };
1093_static cube_fast_t _trans_cube_FRm_inverse = {
1094 .corner = {37, 38, 36, 39, 64, 67, 65, 66},
1095 .edge = {20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2} };
1096_static cube_fast_t _trans_cube_FDm = {
1097 .corner = {66, 64, 67, 65, 38, 36, 39, 37},
1098 .edge = {19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5} };
1099_static cube_fast_t _trans_cube_FDm_inverse = {
1100 .corner = {33, 35, 32, 34, 69, 71, 68, 70},
1101 .edge = {17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6} };
1102_static cube_fast_t _trans_cube_FLm = {
1103 .corner = {38, 36, 37, 39, 64, 66, 67, 65},
1104 .edge = {8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22} };
1105_static cube_fast_t _trans_cube_FLm_inverse = {
1106 .corner = {36, 39, 37, 38, 65, 66, 64, 67},
1107 .edge = {21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3} };
1108_static cube_fast_t _trans_cube_BUm = {
1109 .corner = {65, 67, 64, 66, 37, 39, 36, 38},
1110 .edge = {17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6} };
1111_static cube_fast_t _trans_cube_BUm_inverse = {
1112 .corner = {34, 32, 35, 33, 70, 68, 71, 69},
1113 .edge = {19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5} };
1114_static cube_fast_t _trans_cube_BRm = {
1115 .corner = {39, 37, 36, 38, 65, 67, 66, 64},
1116 .edge = {10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23} };
1117_static cube_fast_t _trans_cube_BRm_inverse = {
1118 .corner = {39, 36, 38, 37, 66, 65, 67, 64},
1119 .edge = {22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1} };
1120_static cube_fast_t _trans_cube_BDm = {
1121 .corner = {67, 65, 66, 64, 39, 37, 38, 36},
1122 .edge = {18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4} };
1123_static cube_fast_t _trans_cube_BDm_inverse = {
1124 .corner = {35, 33, 34, 32, 71, 69, 70, 68},
1125 .edge = {18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4} };
1126_static cube_fast_t _trans_cube_BLm = {
1127 .corner = {37, 39, 38, 36, 67, 65, 64, 66},
1128 .edge = {11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21} };
1129_static cube_fast_t _trans_cube_BLm_inverse = {
1130 .corner = {38, 37, 39, 36, 67, 64, 66, 65},
1131 .edge = {23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0} };
1132
1656_static cube_fast_t cubetofast(cube_t); 1133_static cube_fast_t cubetofast(cube_t);
1657_static cube_t fasttocube(cube_fast_t); 1134_static cube_t fasttocube(cube_fast_t);
1658_static_inline bool equal_fast(cube_fast_t, cube_fast_t); 1135_static_inline bool equal_fast(cube_fast_t, cube_fast_t);
@@ -1662,1178 +1139,6 @@ _static_inline cube_fast_t inverse_fast(cube_fast_t);
1662_static_inline cube_fast_t compose_fast(cube_fast_t, cube_fast_t); 1139_static_inline cube_fast_t compose_fast(cube_fast_t, cube_fast_t);
1663_static_inline int64_t coord_fast_eo(cube_fast_t); 1140_static_inline int64_t coord_fast_eo(cube_fast_t);
1664 1141
1665_static_inline cube_fast_t
1666_move_U(cube_fast_t c)
1667{
1668 uint8_t aux;
1669 cube_fast_t ret = c;
1670
1671 PERM4(ret.edge, _e_uf, _e_ul, _e_ub, _e_ur)
1672 PERM4(ret.corner, _c_ufr, _c_ufl, _c_ubl, _c_ubr)
1673
1674 return ret;
1675}
1676
1677_static_inline cube_fast_t
1678_move_U2(cube_fast_t c)
1679{
1680 uint8_t aux;
1681 cube_fast_t ret = c;
1682
1683 PERM22(ret.edge, _e_uf, _e_ub, _e_ul, _e_ur)
1684 PERM22(ret.corner, _c_ufr, _c_ubl, _c_ufl, _c_ubr)
1685
1686 return ret;
1687}
1688
1689_static_inline cube_fast_t
1690_move_U3(cube_fast_t c)
1691{
1692 uint8_t aux;
1693 cube_fast_t ret = c;
1694
1695 PERM4(ret.edge, _e_uf, _e_ur, _e_ub, _e_ul)
1696 PERM4(ret.corner, _c_ufr, _c_ubr, _c_ubl, _c_ufl)
1697
1698 return ret;
1699}
1700
1701_static_inline cube_fast_t
1702_move_D(cube_fast_t c)
1703{
1704 uint8_t aux;
1705 cube_fast_t ret = c;
1706
1707 PERM4(ret.edge, _e_df, _e_dr, _e_db, _e_dl)
1708 PERM4(ret.corner, _c_dfr, _c_dbr, _c_dbl, _c_dfl)
1709
1710 return ret;
1711}
1712
1713_static_inline cube_fast_t
1714_move_D2(cube_fast_t c)
1715{
1716 uint8_t aux;
1717 cube_fast_t ret = c;
1718
1719 PERM22(ret.edge, _e_df, _e_db, _e_dr, _e_dl)
1720 PERM22(ret.corner, _c_dfr, _c_dbl, _c_dbr, _c_dfl)
1721
1722 return ret;
1723}
1724
1725_static_inline cube_fast_t
1726_move_D3(cube_fast_t c)
1727{
1728 uint8_t aux;
1729 cube_fast_t ret = c;
1730
1731 PERM4(ret.edge, _e_df, _e_dl, _e_db, _e_dr)
1732 PERM4(ret.corner, _c_dfr, _c_dfl, _c_dbl, _c_dbr)
1733
1734 return ret;
1735}
1736
1737_static_inline cube_fast_t
1738_move_R(cube_fast_t c)
1739{
1740 uint8_t aux, auy, auz;
1741 cube_fast_t ret = c;
1742
1743 PERM4(ret.edge, _e_ur, _e_br, _e_dr, _e_fr)
1744 PERM4(ret.corner, _c_ufr, _c_ubr, _c_dbr, _c_dfr)
1745
1746 CO4(ret.corner, _c_ubr, _c_dfr, _c_ufr, _c_dbr)
1747
1748 return ret;
1749}
1750
1751_static_inline cube_fast_t
1752_move_R2(cube_fast_t c)
1753{
1754 uint8_t aux;
1755 cube_fast_t ret = c;
1756
1757 PERM22(ret.edge, _e_ur, _e_dr, _e_fr, _e_br)
1758 PERM22(ret.corner, _c_ufr, _c_dbr, _c_ubr, _c_dfr)
1759
1760 return ret;
1761}
1762
1763_static_inline cube_fast_t
1764_move_R3(cube_fast_t c)
1765{
1766 uint8_t aux, auy, auz;
1767 cube_fast_t ret = c;
1768
1769 PERM4(ret.edge, _e_ur, _e_fr, _e_dr, _e_br)
1770 PERM4(ret.corner, _c_ufr, _c_dfr, _c_dbr, _c_ubr)
1771
1772 CO4(ret.corner, _c_ubr, _c_dfr, _c_ufr, _c_dbr)
1773
1774 return ret;
1775}
1776
1777_static_inline cube_fast_t
1778_move_L(cube_fast_t c)
1779{
1780 uint8_t aux, auy, auz;
1781 cube_fast_t ret = c;
1782
1783 PERM4(ret.edge, _e_ul, _e_fl, _e_dl, _e_bl)
1784 PERM4(ret.corner, _c_ufl, _c_dfl, _c_dbl, _c_ubl)
1785
1786 CO4(ret.corner, _c_ufl, _c_dbl, _c_dfl, _c_ubl)
1787
1788 return ret;
1789}
1790
1791_static_inline cube_fast_t
1792_move_L2(cube_fast_t c)
1793{
1794 uint8_t aux;
1795 cube_fast_t ret = c;
1796
1797 PERM22(ret.edge, _e_ul, _e_dl, _e_fl, _e_bl)
1798 PERM22(ret.corner, _c_ufl, _c_dbl, _c_ubl, _c_dfl)
1799
1800 return ret;
1801}
1802
1803_static_inline cube_fast_t
1804_move_L3(cube_fast_t c)
1805{
1806 uint8_t aux, auy, auz;
1807 cube_fast_t ret = c;
1808
1809 PERM4(ret.edge, _e_ul, _e_bl, _e_dl, _e_fl)
1810 PERM4(ret.corner, _c_ufl, _c_ubl, _c_dbl, _c_dfl)
1811
1812 CO4(ret.corner, _c_ufl, _c_dbl, _c_dfl, _c_ubl)
1813
1814 return ret;
1815}
1816
1817_static_inline cube_fast_t
1818_move_F(cube_fast_t c)
1819{
1820 uint8_t aux, auy, auz;
1821 cube_fast_t ret = c;
1822
1823 PERM4(ret.edge, _e_uf, _e_fr, _e_df, _e_fl)
1824 PERM4(ret.corner, _c_ufr, _c_dfr, _c_dfl, _c_ufl)
1825
1826 EO4(ret.edge, _e_uf, _e_fr, _e_df, _e_fl)
1827 CO4(ret.corner, _c_ufr, _c_dfl, _c_dfr, _c_ufl)
1828
1829 return ret;
1830}
1831
1832_static_inline cube_fast_t
1833_move_F2(cube_fast_t c)
1834{
1835 uint8_t aux;
1836 cube_fast_t ret = c;
1837
1838 PERM22(ret.edge, _e_uf, _e_df, _e_fr, _e_fl)
1839 PERM22(ret.corner, _c_ufr, _c_dfl, _c_ufl, _c_dfr)
1840
1841 return ret;
1842}
1843
1844_static_inline cube_fast_t
1845_move_F3(cube_fast_t c)
1846{
1847 uint8_t aux, auy, auz;
1848 cube_fast_t ret = c;
1849
1850 PERM4(ret.edge, _e_uf, _e_fl, _e_df, _e_fr)
1851 PERM4(ret.corner, _c_ufr, _c_ufl, _c_dfl, _c_dfr)
1852
1853 EO4(ret.edge, _e_uf, _e_fr, _e_df, _e_fl)
1854 CO4(ret.corner, _c_ufr, _c_dfl, _c_dfr, _c_ufl)
1855
1856 return ret;
1857}
1858
1859_static_inline cube_fast_t
1860_move_B(cube_fast_t c)
1861{
1862 uint8_t aux, auy, auz;
1863 cube_fast_t ret = c;
1864
1865 PERM4(ret.edge, _e_ub, _e_bl, _e_db, _e_br)
1866 PERM4(ret.corner, _c_ubr, _c_ubl, _c_dbl, _c_dbr)
1867
1868 EO4(ret.edge, _e_ub, _e_br, _e_db, _e_bl)
1869 CO4(ret.corner, _c_ubl, _c_dbr, _c_dbl, _c_ubr)
1870
1871 return ret;
1872}
1873
1874_static_inline cube_fast_t
1875_move_B2(cube_fast_t c)
1876{
1877 uint8_t aux;
1878 cube_fast_t ret = c;
1879
1880 PERM22(ret.edge, _e_ub, _e_db, _e_br, _e_bl)
1881 PERM22(ret.corner, _c_ubr, _c_dbl, _c_ubl, _c_dbr)
1882
1883 return ret;
1884}
1885
1886_static_inline cube_fast_t
1887_move_B3(cube_fast_t c)
1888{
1889 uint8_t aux, auy, auz;
1890 cube_fast_t ret = c;
1891
1892 PERM4(ret.edge, _e_ub, _e_br, _e_db, _e_bl)
1893 PERM4(ret.corner, _c_ubr, _c_dbr, _c_dbl, _c_ubl)
1894
1895 EO4(ret.edge, _e_ub, _e_br, _e_db, _e_bl)
1896 CO4(ret.corner, _c_ubl, _c_dbr, _c_dbl, _c_ubr)
1897
1898 return ret;
1899}
1900
1901_static_inline cube_fast_t
1902_trans_UFr(cube_fast_t c)
1903{
1904 cube_fast_t ret;
1905 cube_fast_t tn = {
1906 .corner = {0, 1, 2, 3, 4, 5, 6, 7},
1907 .edge = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
1908 };
1909 cube_fast_t ti = {
1910 .corner = {0, 1, 2, 3, 4, 5, 6, 7},
1911 .edge = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
1912 };
1913
1914 ret = compose_fast(tn, c);
1915 ret = compose_fast(ret, ti);
1916
1917 return ret;
1918}
1919
1920_static_inline cube_fast_t
1921_trans_ULr(cube_fast_t c)
1922{
1923 cube_fast_t ret;
1924 cube_fast_t tn = {
1925 .corner = {4, 5, 7, 6, 1, 0, 2, 3},
1926 .edge = {5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24}
1927 };
1928 cube_fast_t ti = {
1929 .corner = {5, 4, 6, 7, 0, 1, 3, 2},
1930 .edge = {4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26}
1931 };
1932
1933 ret = compose_fast(tn, c);
1934 ret = compose_fast(ret, ti);
1935
1936 return ret;
1937}
1938
1939_static_inline cube_fast_t
1940_trans_UBr(cube_fast_t c)
1941{
1942 cube_fast_t ret;
1943 cube_fast_t tn = {
1944 .corner = {1, 0, 3, 2, 5, 4, 7, 6},
1945 .edge = {1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9}
1946 };
1947 cube_fast_t ti = {
1948 .corner = {1, 0, 3, 2, 5, 4, 7, 6},
1949 .edge = {1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9}
1950 };
1951
1952 ret = compose_fast(tn, c);
1953 ret = compose_fast(ret, ti);
1954
1955 return ret;
1956}
1957
1958_static_inline cube_fast_t
1959_trans_URr(cube_fast_t c)
1960{
1961 cube_fast_t ret;
1962 cube_fast_t tn = {
1963 .corner = {5, 4, 6, 7, 0, 1, 3, 2},
1964 .edge = {4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26}
1965 };
1966 cube_fast_t ti = {
1967 .corner = {4, 5, 7, 6, 1, 0, 2, 3},
1968 .edge = {5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24}
1969 };
1970
1971 ret = compose_fast(tn, c);
1972 ret = compose_fast(ret, ti);
1973
1974 return ret;
1975}
1976
1977_static_inline cube_fast_t
1978_trans_DFr(cube_fast_t c)
1979{
1980 cube_fast_t ret;
1981 cube_fast_t tn = {
1982 .corner = {2, 3, 0, 1, 6, 7, 4, 5},
1983 .edge = {3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10}
1984 };
1985 cube_fast_t ti = {
1986 .corner = {2, 3, 0, 1, 6, 7, 4, 5},
1987 .edge = {3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10}
1988 };
1989
1990 ret = compose_fast(tn, c);
1991 ret = compose_fast(ret, ti);
1992
1993 return ret;
1994}
1995
1996_static_inline cube_fast_t
1997_trans_DLr(cube_fast_t c)
1998{
1999 cube_fast_t ret;
2000 cube_fast_t tn = {
2001 .corner = {7, 6, 4, 5, 2, 3, 1, 0},
2002 .edge = {6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27}
2003 };
2004 cube_fast_t ti = {
2005 .corner = {7, 6, 4, 5, 2, 3, 1, 0},
2006 .edge = {6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27}
2007 };
2008
2009 ret = compose_fast(tn, c);
2010 ret = compose_fast(ret, ti);
2011
2012 return ret;
2013}
2014
2015_static_inline cube_fast_t
2016_trans_DBr(cube_fast_t c)
2017{
2018 cube_fast_t ret;
2019 cube_fast_t tn = {
2020 .corner = {3, 2, 1, 0, 7, 6, 5, 4},
2021 .edge = {2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8}
2022 };
2023 cube_fast_t ti = {
2024 .corner = {3, 2, 1, 0, 7, 6, 5, 4},
2025 .edge = {2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8}
2026 };
2027
2028 ret = compose_fast(tn, c);
2029 ret = compose_fast(ret, ti);
2030
2031 return ret;
2032}
2033
2034_static_inline cube_fast_t
2035_trans_DRr(cube_fast_t c)
2036{
2037 cube_fast_t ret;
2038 cube_fast_t tn = {
2039 .corner = {6, 7, 5, 4, 3, 2, 0, 1},
2040 .edge = {7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25}
2041 };
2042 cube_fast_t ti = {
2043 .corner = {6, 7, 5, 4, 3, 2, 0, 1},
2044 .edge = {7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25}
2045 };
2046
2047 ret = compose_fast(tn, c);
2048 ret = compose_fast(ret, ti);
2049
2050 return ret;
2051}
2052
2053_static_inline cube_fast_t
2054_trans_RUr(cube_fast_t c)
2055{
2056 cube_fast_t ret;
2057 cube_fast_t tn = {
2058 .corner = {64, 67, 65, 66, 37, 38, 36, 39},
2059 .edge = {20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3}
2060 };
2061 cube_fast_t ti = {
2062 .corner = {32, 34, 35, 33, 70, 68, 69, 71},
2063 .edge = {8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21}
2064 };
2065
2066 ret = compose_fast(tn, c);
2067 ret = compose_fast(ret, ti);
2068
2069 return ret;
2070}
2071
2072_static_inline cube_fast_t
2073_trans_RFr(cube_fast_t c)
2074{
2075 cube_fast_t ret;
2076 cube_fast_t tn = {
2077 .corner = {38, 37, 36, 39, 64, 67, 66, 65},
2078 .edge = {24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18}
2079 };
2080 cube_fast_t ti = {
2081 .corner = {36, 39, 38, 37, 66, 65, 64, 67},
2082 .edge = {25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17}
2083 };
2084
2085 ret = compose_fast(tn, c);
2086 ret = compose_fast(ret, ti);
2087
2088 return ret;
2089}
2090
2091_static_inline cube_fast_t
2092_trans_RDr(cube_fast_t c)
2093{
2094 cube_fast_t ret;
2095 cube_fast_t tn = {
2096 .corner = {67, 64, 66, 65, 38, 37, 39, 36},
2097 .edge = {23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1}
2098 };
2099 cube_fast_t ti = {
2100 .corner = {33, 35, 34, 32, 71, 69, 68, 70},
2101 .edge = {10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20}
2102 };
2103
2104 ret = compose_fast(tn, c);
2105 ret = compose_fast(ret, ti);
2106
2107 return ret;
2108}
2109
2110_static_inline cube_fast_t
2111_trans_RBr(cube_fast_t c)
2112{
2113 cube_fast_t ret;
2114 cube_fast_t tn = {
2115 .corner = {37, 38, 39, 36, 67, 64, 65, 66},
2116 .edge = {27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16}
2117 };
2118 cube_fast_t ti = {
2119 .corner = {37, 38, 39, 36, 67, 64, 65, 66},
2120 .edge = {27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16}
2121 };
2122
2123 ret = compose_fast(tn, c);
2124 ret = compose_fast(ret, ti);
2125
2126 return ret;
2127}
2128
2129_static_inline cube_fast_t
2130_trans_LUr(cube_fast_t c)
2131{
2132 cube_fast_t ret;
2133 cube_fast_t tn = {
2134 .corner = {65, 66, 64, 67, 36, 39, 37, 38},
2135 .edge = {21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2}
2136 };
2137 cube_fast_t ti = {
2138 .corner = {34, 32, 33, 35, 68, 70, 71, 69},
2139 .edge = {9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23}
2140 };
2141
2142 ret = compose_fast(tn, c);
2143 ret = compose_fast(ret, ti);
2144
2145 return ret;
2146}
2147
2148_static_inline cube_fast_t
2149_trans_LFr(cube_fast_t c)
2150{
2151 cube_fast_t ret;
2152 cube_fast_t tn = {
2153 .corner = {36, 39, 38, 37, 66, 65, 64, 67},
2154 .edge = {25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17}
2155 };
2156 cube_fast_t ti = {
2157 .corner = {38, 37, 36, 39, 64, 67, 66, 65},
2158 .edge = {24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18}
2159 };
2160
2161 ret = compose_fast(tn, c);
2162 ret = compose_fast(ret, ti);
2163
2164 return ret;
2165}
2166
2167_static_inline cube_fast_t
2168_trans_LDr(cube_fast_t c)
2169{
2170 cube_fast_t ret;
2171 cube_fast_t tn = {
2172 .corner = {66, 65, 67, 64, 39, 36, 38, 37},
2173 .edge = {22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0}
2174 };
2175 cube_fast_t ti = {
2176 .corner = {35, 33, 32, 34, 69, 71, 70, 68},
2177 .edge = {11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22}
2178 };
2179
2180 ret = compose_fast(tn, c);
2181 ret = compose_fast(ret, ti);
2182
2183 return ret;
2184}
2185
2186_static_inline cube_fast_t
2187_trans_LBr(cube_fast_t c)
2188{
2189 cube_fast_t ret;
2190 cube_fast_t tn = {
2191 .corner = {39, 36, 37, 38, 65, 66, 67, 64},
2192 .edge = {26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19}
2193 };
2194 cube_fast_t ti = {
2195 .corner = {39, 36, 37, 38, 65, 66, 67, 64},
2196 .edge = {26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19}
2197 };
2198
2199 ret = compose_fast(tn, c);
2200 ret = compose_fast(ret, ti);
2201
2202 return ret;
2203}
2204
2205_static_inline cube_fast_t
2206_trans_FUr(cube_fast_t c)
2207{
2208 cube_fast_t ret;
2209 cube_fast_t tn = {
2210 .corner = {68, 70, 69, 71, 32, 34, 33, 35},
2211 .edge = {16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6}
2212 };
2213 cube_fast_t ti = {
2214 .corner = {68, 70, 69, 71, 32, 34, 33, 35},
2215 .edge = {16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6}
2216 };
2217
2218 ret = compose_fast(tn, c);
2219 ret = compose_fast(ret, ti);
2220
2221 return ret;
2222}
2223
2224_static_inline cube_fast_t
2225_trans_FRr(cube_fast_t c)
2226{
2227 cube_fast_t ret;
2228 cube_fast_t tn = {
2229 .corner = {32, 34, 35, 33, 70, 68, 69, 71},
2230 .edge = {8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21}
2231 };
2232 cube_fast_t ti = {
2233 .corner = {64, 67, 65, 66, 37, 38, 36, 39},
2234 .edge = {20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3}
2235 };
2236
2237 ret = compose_fast(tn, c);
2238 ret = compose_fast(ret, ti);
2239
2240 return ret;
2241}
2242
2243_static_inline cube_fast_t
2244_trans_FDr(cube_fast_t c)
2245{
2246 cube_fast_t ret;
2247 cube_fast_t tn = {
2248 .corner = {70, 68, 71, 69, 34, 32, 35, 33},
2249 .edge = {19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4}
2250 };
2251 cube_fast_t ti = {
2252 .corner = {69, 71, 68, 70, 33, 35, 32, 34},
2253 .edge = {17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7}
2254 };
2255
2256 ret = compose_fast(tn, c);
2257 ret = compose_fast(ret, ti);
2258
2259 return ret;
2260}
2261
2262_static_inline cube_fast_t
2263_trans_FLr(cube_fast_t c)
2264{
2265 cube_fast_t ret;
2266 cube_fast_t tn = {
2267 .corner = {34, 32, 33, 35, 68, 70, 71, 69},
2268 .edge = {9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23}
2269 };
2270 cube_fast_t ti = {
2271 .corner = {65, 66, 64, 67, 36, 39, 37, 38},
2272 .edge = {21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2}
2273 };
2274
2275 ret = compose_fast(tn, c);
2276 ret = compose_fast(ret, ti);
2277
2278 return ret;
2279}
2280
2281_static_inline cube_fast_t
2282_trans_BUr(cube_fast_t c)
2283{
2284 cube_fast_t ret;
2285 cube_fast_t tn = {
2286 .corner = {69, 71, 68, 70, 33, 35, 32, 34},
2287 .edge = {17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7}
2288 };
2289 cube_fast_t ti = {
2290 .corner = {70, 68, 71, 69, 34, 32, 35, 33},
2291 .edge = {19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4}
2292 };
2293
2294 ret = compose_fast(tn, c);
2295 ret = compose_fast(ret, ti);
2296
2297 return ret;
2298}
2299
2300_static_inline cube_fast_t
2301_trans_BRr(cube_fast_t c)
2302{
2303 cube_fast_t ret;
2304 cube_fast_t tn = {
2305 .corner = {35, 33, 32, 34, 69, 71, 70, 68},
2306 .edge = {11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22}
2307 };
2308 cube_fast_t ti = {
2309 .corner = {66, 65, 67, 64, 39, 36, 38, 37},
2310 .edge = {22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0}
2311 };
2312
2313 ret = compose_fast(tn, c);
2314 ret = compose_fast(ret, ti);
2315
2316 return ret;
2317}
2318
2319_static_inline cube_fast_t
2320_trans_BDr(cube_fast_t c)
2321{
2322 cube_fast_t ret;
2323 cube_fast_t tn = {
2324 .corner = {71, 69, 70, 68, 35, 33, 34, 32},
2325 .edge = {18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5}
2326 };
2327 cube_fast_t ti = {
2328 .corner = {71, 69, 70, 68, 35, 33, 34, 32},
2329 .edge = {18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5}
2330 };
2331
2332 ret = compose_fast(tn, c);
2333 ret = compose_fast(ret, ti);
2334
2335 return ret;
2336}
2337
2338_static_inline cube_fast_t
2339_trans_BLr(cube_fast_t c)
2340{
2341 cube_fast_t ret;
2342 cube_fast_t tn = {
2343 .corner = {33, 35, 34, 32, 71, 69, 68, 70},
2344 .edge = {10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20}
2345 };
2346 cube_fast_t ti = {
2347 .corner = {67, 64, 66, 65, 38, 37, 39, 36},
2348 .edge = {23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1}
2349 };
2350
2351 ret = compose_fast(tn, c);
2352 ret = compose_fast(ret, ti);
2353
2354 return ret;
2355}
2356
2357_static_inline cube_fast_t
2358_trans_UFm(cube_fast_t c)
2359{
2360 cube_fast_t ret;
2361 cube_fast_t tn = {
2362 .corner = {4, 5, 6, 7, 0, 1, 2, 3},
2363 .edge = {0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10}
2364 };
2365 cube_fast_t ti = {
2366 .corner = {4, 5, 6, 7, 0, 1, 2, 3},
2367 .edge = {0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10}
2368 };
2369
2370 ret = compose_fast(tn, c);
2371 ret = compose_fast(ret, ti);
2372 ret = invertco_fast(ret);
2373
2374 return ret;
2375}
2376
2377_static_inline cube_fast_t
2378_trans_ULm(cube_fast_t c)
2379{
2380 cube_fast_t ret;
2381 cube_fast_t tn = {
2382 .corner = {0, 1, 3, 2, 5, 4, 6, 7},
2383 .edge = {4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25}
2384 };
2385 cube_fast_t ti = {
2386 .corner = {0, 1, 3, 2, 5, 4, 6, 7},
2387 .edge = {4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25}
2388 };
2389
2390 ret = compose_fast(tn, c);
2391 ret = compose_fast(ret, ti);
2392 ret = invertco_fast(ret);
2393
2394 return ret;
2395}
2396
2397_static_inline cube_fast_t
2398_trans_UBm(cube_fast_t c)
2399{
2400 cube_fast_t ret;
2401 cube_fast_t tn = {
2402 .corner = {5, 4, 7, 6, 1, 0, 3, 2},
2403 .edge = {1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8}
2404 };
2405 cube_fast_t ti = {
2406 .corner = {5, 4, 7, 6, 1, 0, 3, 2},
2407 .edge = {1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8}
2408 };
2409
2410 ret = compose_fast(tn, c);
2411 ret = compose_fast(ret, ti);
2412 ret = invertco_fast(ret);
2413
2414 return ret;
2415}
2416
2417_static_inline cube_fast_t
2418_trans_URm(cube_fast_t c)
2419{
2420 cube_fast_t ret;
2421 cube_fast_t tn = {
2422 .corner = {1, 0, 2, 3, 4, 5, 7, 6},
2423 .edge = {5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27}
2424 };
2425 cube_fast_t ti = {
2426 .corner = {1, 0, 2, 3, 4, 5, 7, 6},
2427 .edge = {5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27}
2428 };
2429
2430 ret = compose_fast(tn, c);
2431 ret = compose_fast(ret, ti);
2432 ret = invertco_fast(ret);
2433
2434 return ret;
2435}
2436
2437_static_inline cube_fast_t
2438_trans_DFm(cube_fast_t c)
2439{
2440 cube_fast_t ret;
2441 cube_fast_t tn = {
2442 .corner = {6, 7, 4, 5, 2, 3, 0, 1},
2443 .edge = {3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11}
2444 };
2445 cube_fast_t ti = {
2446 .corner = {6, 7, 4, 5, 2, 3, 0, 1},
2447 .edge = {3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11}
2448 };
2449
2450 ret = compose_fast(tn, c);
2451 ret = compose_fast(ret, ti);
2452 ret = invertco_fast(ret);
2453
2454 return ret;
2455}
2456
2457_static_inline cube_fast_t
2458_trans_DLm(cube_fast_t c)
2459{
2460 cube_fast_t ret;
2461 cube_fast_t tn = {
2462 .corner = {3, 2, 0, 1, 6, 7, 5, 4},
2463 .edge = {7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26}
2464 };
2465 cube_fast_t ti = {
2466 .corner = {2, 3, 1, 0, 7, 6, 4, 5},
2467 .edge = {6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24}
2468 };
2469
2470 ret = compose_fast(tn, c);
2471 ret = compose_fast(ret, ti);
2472 ret = invertco_fast(ret);
2473
2474 return ret;
2475}
2476
2477_static_inline cube_fast_t
2478_trans_DBm(cube_fast_t c)
2479{
2480 cube_fast_t ret;
2481 cube_fast_t tn = {
2482 .corner = {7, 6, 5, 4, 3, 2, 1, 0},
2483 .edge = {2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9}
2484 };
2485 cube_fast_t ti = {
2486 .corner = {7, 6, 5, 4, 3, 2, 1, 0},
2487 .edge = {2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9}
2488 };
2489
2490 ret = compose_fast(tn, c);
2491 ret = compose_fast(ret, ti);
2492 ret = invertco_fast(ret);
2493
2494 return ret;
2495}
2496
2497_static_inline cube_fast_t
2498_trans_DRm(cube_fast_t c)
2499{
2500 cube_fast_t ret;
2501 cube_fast_t tn = {
2502 .corner = {2, 3, 1, 0, 7, 6, 4, 5},
2503 .edge = {6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24}
2504 };
2505 cube_fast_t ti = {
2506 .corner = {3, 2, 0, 1, 6, 7, 5, 4},
2507 .edge = {7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26}
2508 };
2509
2510 ret = compose_fast(tn, c);
2511 ret = compose_fast(ret, ti);
2512 ret = invertco_fast(ret);
2513
2514 return ret;
2515}
2516
2517_static_inline cube_fast_t
2518_trans_RUm(cube_fast_t c)
2519{
2520 cube_fast_t ret;
2521 cube_fast_t tn = {
2522 .corner = {68, 71, 69, 70, 33, 34, 32, 35},
2523 .edge = {21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3}
2524 };
2525 cube_fast_t ti = {
2526 .corner = {70, 68, 69, 71, 32, 34, 35, 33},
2527 .edge = {8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22}
2528 };
2529
2530 ret = compose_fast(tn, c);
2531 ret = compose_fast(ret, ti);
2532 ret = invertco_fast(ret);
2533
2534 return ret;
2535}
2536
2537_static_inline cube_fast_t
2538_trans_RFm(cube_fast_t c)
2539{
2540 cube_fast_t ret;
2541 cube_fast_t tn = {
2542 .corner = {34, 33, 32, 35, 68, 71, 70, 69},
2543 .edge = {25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18}
2544 };
2545 cube_fast_t ti = {
2546 .corner = {66, 65, 64, 67, 36, 39, 38, 37},
2547 .edge = {25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18}
2548 };
2549
2550 ret = compose_fast(tn, c);
2551 ret = compose_fast(ret, ti);
2552 ret = invertco_fast(ret);
2553
2554 return ret;
2555}
2556
2557_static_inline cube_fast_t
2558_trans_RDm(cube_fast_t c)
2559{
2560 cube_fast_t ret;
2561 cube_fast_t tn = {
2562 .corner = {71, 68, 70, 69, 34, 33, 35, 32},
2563 .edge = {22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1}
2564 };
2565 cube_fast_t ti = {
2566 .corner = {71, 69, 68, 70, 33, 35, 34, 32},
2567 .edge = {10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23}
2568 };
2569
2570 ret = compose_fast(tn, c);
2571 ret = compose_fast(ret, ti);
2572 ret = invertco_fast(ret);
2573
2574 return ret;
2575}
2576
2577_static_inline cube_fast_t
2578_trans_RBm(cube_fast_t c)
2579{
2580 cube_fast_t ret;
2581 cube_fast_t tn = {
2582 .corner = {33, 34, 35, 32, 71, 68, 69, 70},
2583 .edge = {26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16}
2584 };
2585 cube_fast_t ti = {
2586 .corner = {67, 64, 65, 66, 37, 38, 39, 36},
2587 .edge = {27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19}
2588 };
2589
2590 ret = compose_fast(tn, c);
2591 ret = compose_fast(ret, ti);
2592 ret = invertco_fast(ret);
2593
2594 return ret;
2595}
2596
2597_static_inline cube_fast_t
2598_trans_LUm(cube_fast_t c)
2599{
2600 cube_fast_t ret;
2601 cube_fast_t tn = {
2602 .corner = {69, 70, 68, 71, 32, 35, 33, 34},
2603 .edge = {20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2}
2604 };
2605 cube_fast_t ti = {
2606 .corner = {68, 70, 71, 69, 34, 32, 33, 35},
2607 .edge = {9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20}
2608 };
2609
2610 ret = compose_fast(tn, c);
2611 ret = compose_fast(ret, ti);
2612 ret = invertco_fast(ret);
2613
2614 return ret;
2615}
2616
2617_static_inline cube_fast_t
2618_trans_LFm(cube_fast_t c)
2619{
2620 cube_fast_t ret;
2621 cube_fast_t tn = {
2622 .corner = {32, 35, 34, 33, 70, 69, 68, 71},
2623 .edge = {24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17}
2624 };
2625 cube_fast_t ti = {
2626 .corner = {64, 67, 66, 65, 38, 37, 36, 39},
2627 .edge = {24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17}
2628 };
2629
2630 ret = compose_fast(tn, c);
2631 ret = compose_fast(ret, ti);
2632 ret = invertco_fast(ret);
2633
2634 return ret;
2635}
2636
2637_static_inline cube_fast_t
2638_trans_LDm(cube_fast_t c)
2639{
2640 cube_fast_t ret;
2641 cube_fast_t tn = {
2642 .corner = {70, 69, 71, 68, 35, 32, 34, 33},
2643 .edge = {23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0}
2644 };
2645 cube_fast_t ti = {
2646 .corner = {69, 71, 70, 68, 35, 33, 32, 34},
2647 .edge = {11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21}
2648 };
2649
2650 ret = compose_fast(tn, c);
2651 ret = compose_fast(ret, ti);
2652 ret = invertco_fast(ret);
2653
2654 return ret;
2655}
2656
2657_static_inline cube_fast_t
2658_trans_LBm(cube_fast_t c)
2659{
2660 cube_fast_t ret;
2661 cube_fast_t tn = {
2662 .corner = {35, 32, 33, 34, 69, 70, 71, 68},
2663 .edge = {27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19}
2664 };
2665 cube_fast_t ti = {
2666 .corner = {65, 66, 67, 64, 39, 36, 37, 38},
2667 .edge = {26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16}
2668 };
2669
2670 ret = compose_fast(tn, c);
2671 ret = compose_fast(ret, ti);
2672 ret = invertco_fast(ret);
2673
2674 return ret;
2675}
2676
2677_static_inline cube_fast_t
2678_trans_FUm(cube_fast_t c)
2679{
2680 cube_fast_t ret;
2681 cube_fast_t tn = {
2682 .corner = {64, 66, 65, 67, 36, 38, 37, 39},
2683 .edge = {16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7}
2684 };
2685 cube_fast_t ti = {
2686 .corner = {32, 34, 33, 35, 68, 70, 69, 71},
2687 .edge = {16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7}
2688 };
2689
2690 ret = compose_fast(tn, c);
2691 ret = compose_fast(ret, ti);
2692 ret = invertco_fast(ret);
2693
2694 return ret;
2695}
2696
2697_static_inline cube_fast_t
2698_trans_FRm(cube_fast_t c)
2699{
2700 cube_fast_t ret;
2701 cube_fast_t tn = {
2702 .corner = {36, 38, 39, 37, 66, 64, 65, 67},
2703 .edge = {9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20}
2704 };
2705 cube_fast_t ti = {
2706 .corner = {37, 38, 36, 39, 64, 67, 65, 66},
2707 .edge = {20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2}
2708 };
2709
2710 ret = compose_fast(tn, c);
2711 ret = compose_fast(ret, ti);
2712 ret = invertco_fast(ret);
2713
2714 return ret;
2715}
2716
2717_static_inline cube_fast_t
2718_trans_FDm(cube_fast_t c)
2719{
2720 cube_fast_t ret;
2721 cube_fast_t tn = {
2722 .corner = {66, 64, 67, 65, 38, 36, 39, 37},
2723 .edge = {19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5}
2724 };
2725 cube_fast_t ti = {
2726 .corner = {33, 35, 32, 34, 69, 71, 68, 70},
2727 .edge = {17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6}
2728 };
2729
2730 ret = compose_fast(tn, c);
2731 ret = compose_fast(ret, ti);
2732 ret = invertco_fast(ret);
2733
2734 return ret;
2735}
2736
2737_static_inline cube_fast_t
2738_trans_FLm(cube_fast_t c)
2739{
2740 cube_fast_t ret;
2741 cube_fast_t tn = {
2742 .corner = {38, 36, 37, 39, 64, 66, 67, 65},
2743 .edge = {8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22}
2744 };
2745 cube_fast_t ti = {
2746 .corner = {36, 39, 37, 38, 65, 66, 64, 67},
2747 .edge = {21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3}
2748 };
2749
2750 ret = compose_fast(tn, c);
2751 ret = compose_fast(ret, ti);
2752 ret = invertco_fast(ret);
2753
2754 return ret;
2755}
2756
2757_static_inline cube_fast_t
2758_trans_BUm(cube_fast_t c)
2759{
2760 cube_fast_t ret;
2761 cube_fast_t tn = {
2762 .corner = {65, 67, 64, 66, 37, 39, 36, 38},
2763 .edge = {17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6}
2764 };
2765 cube_fast_t ti = {
2766 .corner = {34, 32, 35, 33, 70, 68, 71, 69},
2767 .edge = {19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5}
2768 };
2769
2770 ret = compose_fast(tn, c);
2771 ret = compose_fast(ret, ti);
2772 ret = invertco_fast(ret);
2773
2774 return ret;
2775}
2776
2777_static_inline cube_fast_t
2778_trans_BRm(cube_fast_t c)
2779{
2780 cube_fast_t ret;
2781 cube_fast_t tn = {
2782 .corner = {39, 37, 36, 38, 65, 67, 66, 64},
2783 .edge = {10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23}
2784 };
2785 cube_fast_t ti = {
2786 .corner = {39, 36, 38, 37, 66, 65, 67, 64},
2787 .edge = {22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1}
2788 };
2789
2790 ret = compose_fast(tn, c);
2791 ret = compose_fast(ret, ti);
2792 ret = invertco_fast(ret);
2793
2794 return ret;
2795}
2796
2797_static_inline cube_fast_t
2798_trans_BDm(cube_fast_t c)
2799{
2800 cube_fast_t ret;
2801 cube_fast_t tn = {
2802 .corner = {67, 65, 66, 64, 39, 37, 38, 36},
2803 .edge = {18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4}
2804 };
2805 cube_fast_t ti = {
2806 .corner = {35, 33, 34, 32, 71, 69, 70, 68},
2807 .edge = {18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4}
2808 };
2809
2810 ret = compose_fast(tn, c);
2811 ret = compose_fast(ret, ti);
2812 ret = invertco_fast(ret);
2813
2814 return ret;
2815}
2816
2817_static_inline cube_fast_t
2818_trans_BLm(cube_fast_t c)
2819{
2820 cube_fast_t ret;
2821 cube_fast_t tn = {
2822 .corner = {37, 39, 38, 36, 67, 65, 64, 66},
2823 .edge = {11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21}
2824 };
2825 cube_fast_t ti = {
2826 .corner = {38, 37, 39, 36, 67, 64, 66, 65},
2827 .edge = {23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0}
2828 };
2829
2830 ret = compose_fast(tn, c);
2831 ret = compose_fast(ret, ti);
2832 ret = invertco_fast(ret);
2833
2834 return ret;
2835}
2836
2837_static cube_fast_t 1142_static cube_fast_t
2838cubetofast(cube_t cube) 1143cubetofast(cube_t cube)
2839{ 1144{
@@ -2962,6 +1267,15 @@ Some of these routines depend on the efficient functions implemented in the
2962previous sections, while some other operate directly on the cube. 1267previous sections, while some other operate directly on the cube.
2963******************************************************************************/ 1268******************************************************************************/
2964 1269
1270#define _move(M, c) compose_fast(c, _move_cube_ ## M)
1271#define _premove(M, c) compose_fast(_move_cube_ ## M, c)
1272#define _trans_rotation(T, c) \
1273 compose_fast(compose_fast(_trans_cube_ ## T, c), \
1274 _trans_cube_ ## T ## _inverse)
1275#define _trans_mirrored(T, c) \
1276 invertco_fast(compose_fast(compose_fast(_trans_cube_ ## T, c), \
1277 _trans_cube_ ## T ## _inverse))
1278
2965_static cube_t zero = { .corner = {0}, .edge = {0} }; 1279_static cube_t zero = { .corner = {0}, .edge = {0} };
2966_static cube_t solved = { 1280_static cube_t solved = {
2967 .corner = {0, 1, 2, 3, 4, 5, 6, 7}, 1281 .corner = {0, 1, 2, 3, 4, 5, 6, 7},
@@ -3534,41 +1848,41 @@ move(cube_fast_t c, uint8_t m)
3534{ 1848{
3535 switch (m) { 1849 switch (m) {
3536 case U: 1850 case U:
3537 return _move_U(c); 1851 return _move(U, c);
3538 case U2: 1852 case U2:
3539 return _move_U2(c); 1853 return _move(U2, c);
3540 case U3: 1854 case U3:
3541 return _move_U3(c); 1855 return _move(U3, c);
3542 case D: 1856 case D:
3543 return _move_D(c); 1857 return _move(D, c);
3544 case D2: 1858 case D2:
3545 return _move_D2(c); 1859 return _move(D2, c);
3546 case D3: 1860 case D3:
3547 return _move_D3(c); 1861 return _move(D3, c);
3548 case R: 1862 case R:
3549 return _move_R(c); 1863 return _move(R, c);
3550 case R2: 1864 case R2:
3551 return _move_R2(c); 1865 return _move(R2, c);
3552 case R3: 1866 case R3:
3553 return _move_R3(c); 1867 return _move(R3, c);
3554 case L: 1868 case L:
3555 return _move_L(c); 1869 return _move(L, c);
3556 case L2: 1870 case L2:
3557 return _move_L2(c); 1871 return _move(L2, c);
3558 case L3: 1872 case L3:
3559 return _move_L3(c); 1873 return _move(L3, c);
3560 case F: 1874 case F:
3561 return _move_F(c); 1875 return _move(F, c);
3562 case F2: 1876 case F2:
3563 return _move_F2(c); 1877 return _move(F2, c);
3564 case F3: 1878 case F3:
3565 return _move_F3(c); 1879 return _move(F3, c);
3566 case B: 1880 case B:
3567 return _move_B(c); 1881 return _move(B, c);
3568 case B2: 1882 case B2:
3569 return _move_B2(c); 1883 return _move(B2, c);
3570 case B3: 1884 case B3:
3571 return _move_B3(c); 1885 return _move(B3, c);
3572 default: 1886 default:
3573 DBG_LOG("mover error, unknown move\n"); 1887 DBG_LOG("mover error, unknown move\n");
3574 return zero_fast; 1888 return zero_fast;
@@ -3580,101 +1894,101 @@ transform(cube_fast_t c, uint8_t t)
3580{ 1894{
3581 switch (t) { 1895 switch (t) {
3582 case UFr: 1896 case UFr:
3583 return _trans_UFr(c); 1897 return _trans_rotation(UFr, c);
3584 case ULr: 1898 case ULr:
3585 return _trans_ULr(c); 1899 return _trans_rotation(ULr, c);
3586 case UBr: 1900 case UBr:
3587 return _trans_UBr(c); 1901 return _trans_rotation(UBr, c);
3588 case URr: 1902 case URr:
3589 return _trans_URr(c); 1903 return _trans_rotation(URr, c);
3590 case DFr: 1904 case DFr:
3591 return _trans_DFr(c); 1905 return _trans_rotation(DFr, c);
3592 case DLr: 1906 case DLr:
3593 return _trans_DLr(c); 1907 return _trans_rotation(DLr, c);
3594 case DBr: 1908 case DBr:
3595 return _trans_DBr(c); 1909 return _trans_rotation(DBr, c);
3596 case DRr: 1910 case DRr:
3597 return _trans_DRr(c); 1911 return _trans_rotation(DRr, c);
3598 case RUr: 1912 case RUr:
3599 return _trans_RUr(c); 1913 return _trans_rotation(RUr, c);
3600 case RFr: 1914 case RFr:
3601 return _trans_RFr(c); 1915 return _trans_rotation(RFr, c);
3602 case RDr: 1916 case RDr:
3603 return _trans_RDr(c); 1917 return _trans_rotation(RDr, c);
3604 case RBr: 1918 case RBr:
3605 return _trans_RBr(c); 1919 return _trans_rotation(RBr, c);
3606 case LUr: 1920 case LUr:
3607 return _trans_LUr(c); 1921 return _trans_rotation(LUr, c);
3608 case LFr: 1922 case LFr:
3609 return _trans_LFr(c); 1923 return _trans_rotation(LFr, c);
3610 case LDr: 1924 case LDr:
3611 return _trans_LDr(c); 1925 return _trans_rotation(LDr, c);
3612 case LBr: 1926 case LBr:
3613 return _trans_LBr(c); 1927 return _trans_rotation(LBr, c);
3614 case FUr: 1928 case FUr:
3615 return _trans_FUr(c); 1929 return _trans_rotation(FUr, c);
3616 case FRr: 1930 case FRr:
3617 return _trans_FRr(c); 1931 return _trans_rotation(FRr, c);
3618 case FDr: 1932 case FDr:
3619 return _trans_FDr(c); 1933 return _trans_rotation(FDr, c);
3620 case FLr: 1934 case FLr:
3621 return _trans_FLr(c); 1935 return _trans_rotation(FLr, c);
3622 case BUr: 1936 case BUr:
3623 return _trans_BUr(c); 1937 return _trans_rotation(BUr, c);
3624 case BRr: 1938 case BRr:
3625 return _trans_BRr(c); 1939 return _trans_rotation(BRr, c);
3626 case BDr: 1940 case BDr:
3627 return _trans_BDr(c); 1941 return _trans_rotation(BDr, c);
3628 case BLr: 1942 case BLr:
3629 return _trans_BLr(c); 1943 return _trans_rotation(BLr, c);
3630 case UFm: 1944 case UFm:
3631 return _trans_UFm(c); 1945 return _trans_mirrored(UFm, c);
3632 case ULm: 1946 case ULm:
3633 return _trans_ULm(c); 1947 return _trans_mirrored(ULm, c);
3634 case UBm: 1948 case UBm:
3635 return _trans_UBm(c); 1949 return _trans_mirrored(UBm, c);
3636 case URm: 1950 case URm:
3637 return _trans_URm(c); 1951 return _trans_mirrored(URm, c);
3638 case DFm: 1952 case DFm:
3639 return _trans_DFm(c); 1953 return _trans_mirrored(DFm, c);
3640 case DLm: 1954 case DLm:
3641 return _trans_DLm(c); 1955 return _trans_mirrored(DLm, c);
3642 case DBm: 1956 case DBm:
3643 return _trans_DBm(c); 1957 return _trans_mirrored(DBm, c);
3644 case DRm: 1958 case DRm:
3645 return _trans_DRm(c); 1959 return _trans_mirrored(DRm, c);
3646 case RUm: 1960 case RUm:
3647 return _trans_RUm(c); 1961 return _trans_mirrored(RUm, c);
3648 case RFm: 1962 case RFm:
3649 return _trans_RFm(c); 1963 return _trans_mirrored(RFm, c);
3650 case RDm: 1964 case RDm:
3651 return _trans_RDm(c); 1965 return _trans_mirrored(RDm, c);
3652 case RBm: 1966 case RBm:
3653 return _trans_RBm(c); 1967 return _trans_mirrored(RBm, c);
3654 case LUm: 1968 case LUm:
3655 return _trans_LUm(c); 1969 return _trans_mirrored(LUm, c);
3656 case LFm: 1970 case LFm:
3657 return _trans_LFm(c); 1971 return _trans_mirrored(LFm, c);
3658 case LDm: 1972 case LDm:
3659 return _trans_LDm(c); 1973 return _trans_mirrored(LDm, c);
3660 case LBm: 1974 case LBm:
3661 return _trans_LBm(c); 1975 return _trans_mirrored(LBm, c);
3662 case FUm: 1976 case FUm:
3663 return _trans_FUm(c); 1977 return _trans_mirrored(FUm, c);
3664 case FRm: 1978 case FRm:
3665 return _trans_FRm(c); 1979 return _trans_mirrored(FRm, c);
3666 case FDm: 1980 case FDm:
3667 return _trans_FDm(c); 1981 return _trans_mirrored(FDm, c);
3668 case FLm: 1982 case FLm:
3669 return _trans_FLm(c); 1983 return _trans_mirrored(FLm, c);
3670 case BUm: 1984 case BUm:
3671 return _trans_BUm(c); 1985 return _trans_mirrored(BUm, c);
3672 case BRm: 1986 case BRm:
3673 return _trans_BRm(c); 1987 return _trans_mirrored(BRm, c);
3674 case BDm: 1988 case BDm:
3675 return _trans_BDm(c); 1989 return _trans_mirrored(BDm, c);
3676 case BLm: 1990 case BLm:
3677 return _trans_BLm(c); 1991 return _trans_mirrored(BLm, c);
3678 default: 1992 default:
3679 DBG_LOG("transform error, unknown transformation\n"); 1993 DBG_LOG("transform error, unknown transformation\n");
3680 return zero_fast; 1994 return zero_fast;
diff --git a/old/moves_trans/genmovecode.sh b/old/moves_trans/genmovecode.sh
new file mode 100755
index 0000000..0857f31
--- /dev/null
+++ b/old/moves_trans/genmovecode.sh
@@ -0,0 +1,19 @@
1#!/bin/sh
2
3type="${1:-src}"
4
5gcc -DDEBUG h48_to_"$type".c ../cube.c -o h48_to_"$type"
6
7genfuncs() {
8 for f in move_??_*.txt; do
9 move="$(echo $f | sed 's/.*_// ; s/\.txt//')"
10 printf 'static inline cube_fast_t\n_move_%s' "$move"
11 printf '(cube_fast_t c)\n{\n'
12 printf '\tcube_fast_t m = '
13 ./h48_to_"$type" <"$f" | sed '2,4s/^/\t/'
14 printf ';\n\n\treturn compose_fast(c, m);\n}\n\n'
15 done
16}
17
18genfuncs
19rm -f h48_to_"$type" invert
diff --git a/old/moves_trans/gentranscode.sh b/old/moves_trans/gentranscode.sh
new file mode 100755
index 0000000..198ac93
--- /dev/null
+++ b/old/moves_trans/gentranscode.sh
@@ -0,0 +1,42 @@
1#!/bin/sh
2
3type="${1:-src}"
4
5gcc -DDEBUG h48_to_"$type".c ../cube.c -o h48_to_"$type"
6gcc -DDEBUG invert.c ../cube.c -o invert
7
8# Old version
9genarray() {
10 for f in transform_??_???.txt; do
11 trans="$(echo $f | sed 's/.*_// ; s/\.txt//')"
12 printf '[%s] = ' "$trans"
13 if [ "$1" = "-i" ]; then
14 ./invert <"$f" | ./h48_to_"$type"
15 else
16 ./h48_to_"$type" <"$f"
17 fi
18 printf ',\n'
19 done
20}
21
22genfuncs() {
23 for f in transform_??_???.txt; do
24 trans="$(echo $f | sed 's/.*_// ; s/\.txt//')"
25 printf 'static inline cube_fast_t\n_trans_%s' "$trans"
26 printf '(cube_fast_t c)\n{\n'
27 printf '\tcube_fast_t ret;\n\n'
28 printf '\tcube_fast_t tn = '
29 ./h48_to_"$type" <"$f" | sed '2,4s/^/\t/'
30 printf ';\n\tcube_fast_t ti = '
31 ./invert <"$f" | ./h48_to_"$type" | sed '2,4 s/^/\t/'
32 printf ';\n\n\tret = compose_fast(tn, c);\n'
33 printf '\tret = compose_fast(ret, ti);\n'
34 if [ -n "$(echo "$trans" | grep "m")" ]; then
35 printf '\tret = invertco_fast(ret);\n'
36 fi
37 printf '\n\treturn ret;\n}\n\n'
38 done
39}
40
41genfuncs
42rm -f h48_to_"$type" invert
diff --git a/old/moves_trans/moves_src.c b/old/moves_trans/moves_src.c
new file mode 100644
index 0000000..faf4729
--- /dev/null
+++ b/old/moves_trans/moves_src.c
@@ -0,0 +1,264 @@
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
30_static_inline cube_fast_t
31_move_U(cube_fast_t c)
32{
33 uint8_t aux;
34 cube_fast_t ret = c;
35
36 PERM4(ret.edge, _e_uf, _e_ul, _e_ub, _e_ur)
37 PERM4(ret.corner, _c_ufr, _c_ufl, _c_ubl, _c_ubr)
38
39 return ret;
40}
41
42_static_inline cube_fast_t
43_move_U2(cube_fast_t c)
44{
45 uint8_t aux;
46 cube_fast_t ret = c;
47
48 PERM22(ret.edge, _e_uf, _e_ub, _e_ul, _e_ur)
49 PERM22(ret.corner, _c_ufr, _c_ubl, _c_ufl, _c_ubr)
50
51 return ret;
52}
53
54_static_inline cube_fast_t
55_move_U3(cube_fast_t c)
56{
57 uint8_t aux;
58 cube_fast_t ret = c;
59
60 PERM4(ret.edge, _e_uf, _e_ur, _e_ub, _e_ul)
61 PERM4(ret.corner, _c_ufr, _c_ubr, _c_ubl, _c_ufl)
62
63 return ret;
64}
65
66_static_inline cube_fast_t
67_move_D(cube_fast_t c)
68{
69 uint8_t aux;
70 cube_fast_t ret = c;
71
72 PERM4(ret.edge, _e_df, _e_dr, _e_db, _e_dl)
73 PERM4(ret.corner, _c_dfr, _c_dbr, _c_dbl, _c_dfl)
74
75 return ret;
76}
77
78_static_inline cube_fast_t
79_move_D2(cube_fast_t c)
80{
81 uint8_t aux;
82 cube_fast_t ret = c;
83
84 PERM22(ret.edge, _e_df, _e_db, _e_dr, _e_dl)
85 PERM22(ret.corner, _c_dfr, _c_dbl, _c_dbr, _c_dfl)
86
87 return ret;
88}
89
90_static_inline cube_fast_t
91_move_D3(cube_fast_t c)
92{
93 uint8_t aux;
94 cube_fast_t ret = c;
95
96 PERM4(ret.edge, _e_df, _e_dl, _e_db, _e_dr)
97 PERM4(ret.corner, _c_dfr, _c_dfl, _c_dbl, _c_dbr)
98
99 return ret;
100}
101
102_static_inline cube_fast_t
103_move_R(cube_fast_t c)
104{
105 uint8_t aux, auy, auz;
106 cube_fast_t ret = c;
107
108 PERM4(ret.edge, _e_ur, _e_br, _e_dr, _e_fr)
109 PERM4(ret.corner, _c_ufr, _c_ubr, _c_dbr, _c_dfr)
110
111 CO4(ret.corner, _c_ubr, _c_dfr, _c_ufr, _c_dbr)
112
113 return ret;
114}
115
116_static_inline cube_fast_t
117_move_R2(cube_fast_t c)
118{
119 uint8_t aux;
120 cube_fast_t ret = c;
121
122 PERM22(ret.edge, _e_ur, _e_dr, _e_fr, _e_br)
123 PERM22(ret.corner, _c_ufr, _c_dbr, _c_ubr, _c_dfr)
124
125 return ret;
126}
127
128_static_inline cube_fast_t
129_move_R3(cube_fast_t c)
130{
131 uint8_t aux, auy, auz;
132 cube_fast_t ret = c;
133
134 PERM4(ret.edge, _e_ur, _e_fr, _e_dr, _e_br)
135 PERM4(ret.corner, _c_ufr, _c_dfr, _c_dbr, _c_ubr)
136
137 CO4(ret.corner, _c_ubr, _c_dfr, _c_ufr, _c_dbr)
138
139 return ret;
140}
141
142_static_inline cube_fast_t
143_move_L(cube_fast_t c)
144{
145 uint8_t aux, auy, auz;
146 cube_fast_t ret = c;
147
148 PERM4(ret.edge, _e_ul, _e_fl, _e_dl, _e_bl)
149 PERM4(ret.corner, _c_ufl, _c_dfl, _c_dbl, _c_ubl)
150
151 CO4(ret.corner, _c_ufl, _c_dbl, _c_dfl, _c_ubl)
152
153 return ret;
154}
155
156_static_inline cube_fast_t
157_move_L2(cube_fast_t c)
158{
159 uint8_t aux;
160 cube_fast_t ret = c;
161
162 PERM22(ret.edge, _e_ul, _e_dl, _e_fl, _e_bl)
163 PERM22(ret.corner, _c_ufl, _c_dbl, _c_ubl, _c_dfl)
164
165 return ret;
166}
167
168_static_inline cube_fast_t
169_move_L3(cube_fast_t c)
170{
171 uint8_t aux, auy, auz;
172 cube_fast_t ret = c;
173
174 PERM4(ret.edge, _e_ul, _e_bl, _e_dl, _e_fl)
175 PERM4(ret.corner, _c_ufl, _c_ubl, _c_dbl, _c_dfl)
176
177 CO4(ret.corner, _c_ufl, _c_dbl, _c_dfl, _c_ubl)
178
179 return ret;
180}
181
182_static_inline cube_fast_t
183_move_F(cube_fast_t c)
184{
185 uint8_t aux, auy, auz;
186 cube_fast_t ret = c;
187
188 PERM4(ret.edge, _e_uf, _e_fr, _e_df, _e_fl)
189 PERM4(ret.corner, _c_ufr, _c_dfr, _c_dfl, _c_ufl)
190
191 EO4(ret.edge, _e_uf, _e_fr, _e_df, _e_fl)
192 CO4(ret.corner, _c_ufr, _c_dfl, _c_dfr, _c_ufl)
193
194 return ret;
195}
196
197_static_inline cube_fast_t
198_move_F2(cube_fast_t c)
199{
200 uint8_t aux;
201 cube_fast_t ret = c;
202
203 PERM22(ret.edge, _e_uf, _e_df, _e_fr, _e_fl)
204 PERM22(ret.corner, _c_ufr, _c_dfl, _c_ufl, _c_dfr)
205
206 return ret;
207}
208
209_static_inline cube_fast_t
210_move_F3(cube_fast_t c)
211{
212 uint8_t aux, auy, auz;
213 cube_fast_t ret = c;
214
215 PERM4(ret.edge, _e_uf, _e_fl, _e_df, _e_fr)
216 PERM4(ret.corner, _c_ufr, _c_ufl, _c_dfl, _c_dfr)
217
218 EO4(ret.edge, _e_uf, _e_fr, _e_df, _e_fl)
219 CO4(ret.corner, _c_ufr, _c_dfl, _c_dfr, _c_ufl)
220
221 return ret;
222}
223
224_static_inline cube_fast_t
225_move_B(cube_fast_t c)
226{
227 uint8_t aux, auy, auz;
228 cube_fast_t ret = c;
229
230 PERM4(ret.edge, _e_ub, _e_bl, _e_db, _e_br)
231 PERM4(ret.corner, _c_ubr, _c_ubl, _c_dbl, _c_dbr)
232
233 EO4(ret.edge, _e_ub, _e_br, _e_db, _e_bl)
234 CO4(ret.corner, _c_ubl, _c_dbr, _c_dbl, _c_ubr)
235
236 return ret;
237}
238
239_static_inline cube_fast_t
240_move_B2(cube_fast_t c)
241{
242 uint8_t aux;
243 cube_fast_t ret = c;
244
245 PERM22(ret.edge, _e_ub, _e_db, _e_br, _e_bl)
246 PERM22(ret.corner, _c_ubr, _c_dbl, _c_ubl, _c_dbr)
247
248 return ret;
249}
250
251_static_inline cube_fast_t
252_move_B3(cube_fast_t c)
253{
254 uint8_t aux, auy, auz;
255 cube_fast_t ret = c;
256
257 PERM4(ret.edge, _e_ub, _e_br, _e_db, _e_bl)
258 PERM4(ret.corner, _c_ubr, _c_dbr, _c_dbl, _c_ubl)
259
260 EO4(ret.edge, _e_ub, _e_br, _e_db, _e_bl)
261 CO4(ret.corner, _c_ubl, _c_dbr, _c_dbl, _c_ubr)
262
263 return ret;
264}
diff --git a/transavx b/transavx
new file mode 100644
index 0000000..3f72103
--- /dev/null
+++ b/transavx
@@ -0,0 +1,384 @@
1#define _trans_cube_UFr _mm256_set_epi8( \
2 0, 0, 0, 0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, \
3 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 5, 4, 3, 2, 1, 0 \
4)
5#define _trans_cube_UFr_inverse _mm256_set_epi8( \
6 0, 0, 0, 0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, \
7 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 5, 4, 3, 2, 1, 0 \
8)
9#define _trans_cube_ULr _mm256_set_epi8( \
10 0, 0, 0, 0, 24, 27, 26, 25, 3, 2, 1, 0, 6, 7, 4, 5, \
11 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 1, 6, 7, 5, 4 \
12)
13#define _trans_cube_ULr_inverse _mm256_set_epi8( \
14 0, 0, 0, 0, 26, 25, 24, 27, 2, 3, 0, 1, 7, 6, 5, 4, \
15 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0, 7, 6, 4, 5 \
16)
17#define _trans_cube_UBr _mm256_set_epi8( \
18 0, 0, 0, 0, 9, 8, 11, 10, 6, 7, 4, 5, 2, 3, 0, 1, \
19 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 4, 5, 2, 3, 0, 1 \
20)
21#define _trans_cube_UBr_inverse _mm256_set_epi8( \
22 0, 0, 0, 0, 9, 8, 11, 10, 6, 7, 4, 5, 2, 3, 0, 1, \
23 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 4, 5, 2, 3, 0, 1 \
24)
25#define _trans_cube_URr _mm256_set_epi8( \
26 0, 0, 0, 0, 26, 25, 24, 27, 2, 3, 0, 1, 7, 6, 5, 4, \
27 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0, 7, 6, 4, 5 \
28)
29#define _trans_cube_URr_inverse _mm256_set_epi8( \
30 0, 0, 0, 0, 24, 27, 26, 25, 3, 2, 1, 0, 6, 7, 4, 5, \
31 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 0, 1, 6, 7, 5, 4 \
32)
33#define _trans_cube_DFr _mm256_set_epi8( \
34 0, 0, 0, 0, 10, 11, 8, 9, 5, 4, 7, 6, 0, 1, 2, 3, \
35 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 7, 6, 1, 0, 3, 2 \
36)
37#define _trans_cube_DFr_inverse _mm256_set_epi8( \
38 0, 0, 0, 0, 10, 11, 8, 9, 5, 4, 7, 6, 0, 1, 2, 3, \
39 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 7, 6, 1, 0, 3, 2 \
40)
41#define _trans_cube_DLr _mm256_set_epi8( \
42 0, 0, 0, 0, 27, 24, 25, 26, 1, 0, 3, 2, 5, 4, 7, 6, \
43 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 5, 4, 6, 7 \
44)
45#define _trans_cube_DLr_inverse _mm256_set_epi8( \
46 0, 0, 0, 0, 27, 24, 25, 26, 1, 0, 3, 2, 5, 4, 7, 6, \
47 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 5, 4, 6, 7 \
48)
49#define _trans_cube_DBr _mm256_set_epi8( \
50 0, 0, 0, 0, 8, 9, 10, 11, 4, 5, 6, 7, 1, 0, 3, 2, \
51 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 0, 1, 2, 3 \
52)
53#define _trans_cube_DBr_inverse _mm256_set_epi8( \
54 0, 0, 0, 0, 8, 9, 10, 11, 4, 5, 6, 7, 1, 0, 3, 2, \
55 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 7, 0, 1, 2, 3 \
56)
57#define _trans_cube_DRr _mm256_set_epi8( \
58 0, 0, 0, 0, 25, 26, 27, 24, 0, 1, 2, 3, 4, 5, 6, 7, \
59 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 3, 4, 5, 7, 6 \
60)
61#define _trans_cube_DRr_inverse _mm256_set_epi8( \
62 0, 0, 0, 0, 25, 26, 27, 24, 0, 1, 2, 3, 4, 5, 6, 7, \
63 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 3, 4, 5, 7, 6 \
64)
65#define _trans_cube_RUr _mm256_set_epi8( \
66 0, 0, 0, 0, 3, 2, 1, 0, 25, 26, 27, 24, 21, 22, 23, 20, \
67 0, 0, 0, 0, 0, 0, 0, 0, 39, 36, 38, 37, 66, 65, 67, 64 \
68)
69#define _trans_cube_RUr_inverse _mm256_set_epi8( \
70 0, 0, 0, 0, 21, 22, 23, 20, 17, 18, 19, 16, 11, 10, 9, 8, \
71 0, 0, 0, 0, 0, 0, 0, 0, 71, 69, 68, 70, 33, 35, 34, 32 \
72)
73#define _trans_cube_RFr _mm256_set_epi8( \
74 0, 0, 0, 0, 18, 17, 16, 19, 22, 21, 20, 23, 25, 26, 27, 24, \
75 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 64, 39, 36, 37, 38 \
76)
77#define _trans_cube_RFr_inverse _mm256_set_epi8( \
78 0, 0, 0, 0, 17, 18, 19, 16, 20, 23, 22, 21, 24, 27, 26, 25, \
79 0, 0, 0, 0, 0, 0, 0, 0, 67, 64, 65, 66, 37, 38, 39, 36 \
80)
81#define _trans_cube_RDr _mm256_set_epi8( \
82 0, 0, 0, 0, 1, 0, 3, 2, 26, 25, 24, 27, 22, 21, 20, 23, \
83 0, 0, 0, 0, 0, 0, 0, 0, 36, 39, 37, 38, 65, 66, 64, 67 \
84)
85#define _trans_cube_RDr_inverse _mm256_set_epi8( \
86 0, 0, 0, 0, 20, 23, 22, 21, 16, 19, 18, 17, 9, 8, 11, 10, \
87 0, 0, 0, 0, 0, 0, 0, 0, 70, 68, 69, 71, 32, 34, 35, 33 \
88)
89#define _trans_cube_RBr _mm256_set_epi8( \
90 0, 0, 0, 0, 16, 19, 18, 17, 21, 22, 23, 20, 26, 25, 24, 27, \
91 0, 0, 0, 0, 0, 0, 0, 0, 66, 65, 64, 67, 36, 39, 38, 37 \
92)
93#define _trans_cube_RBr_inverse _mm256_set_epi8( \
94 0, 0, 0, 0, 16, 19, 18, 17, 21, 22, 23, 20, 26, 25, 24, 27, \
95 0, 0, 0, 0, 0, 0, 0, 0, 66, 65, 64, 67, 36, 39, 38, 37 \
96)
97#define _trans_cube_LUr _mm256_set_epi8( \
98 0, 0, 0, 0, 2, 3, 0, 1, 27, 24, 25, 26, 20, 23, 22, 21, \
99 0, 0, 0, 0, 0, 0, 0, 0, 38, 37, 39, 36, 67, 64, 66, 65 \
100)
101#define _trans_cube_LUr_inverse _mm256_set_epi8( \
102 0, 0, 0, 0, 23, 20, 21, 22, 18, 17, 16, 19, 10, 11, 8, 9, \
103 0, 0, 0, 0, 0, 0, 0, 0, 69, 71, 70, 68, 35, 33, 32, 34 \
104)
105#define _trans_cube_LFr _mm256_set_epi8( \
106 0, 0, 0, 0, 17, 18, 19, 16, 20, 23, 22, 21, 24, 27, 26, 25, \
107 0, 0, 0, 0, 0, 0, 0, 0, 67, 64, 65, 66, 37, 38, 39, 36 \
108)
109#define _trans_cube_LFr_inverse _mm256_set_epi8( \
110 0, 0, 0, 0, 18, 17, 16, 19, 22, 21, 20, 23, 25, 26, 27, 24, \
111 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 67, 64, 39, 36, 37, 38 \
112)
113#define _trans_cube_LDr _mm256_set_epi8( \
114 0, 0, 0, 0, 0, 1, 2, 3, 24, 27, 26, 25, 23, 20, 21, 22, \
115 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 36, 39, 64, 67, 65, 66 \
116)
117#define _trans_cube_LDr_inverse _mm256_set_epi8( \
118 0, 0, 0, 0, 22, 21, 20, 23, 19, 16, 17, 18, 8, 9, 10, 11, \
119 0, 0, 0, 0, 0, 0, 0, 0, 68, 70, 71, 69, 34, 32, 33, 35 \
120)
121#define _trans_cube_LBr _mm256_set_epi8( \
122 0, 0, 0, 0, 19, 16, 17, 18, 23, 20, 21, 22, 27, 24, 25, 26, \
123 0, 0, 0, 0, 0, 0, 0, 0, 64, 67, 66, 65, 38, 37, 36, 39 \
124)
125#define _trans_cube_LBr_inverse _mm256_set_epi8( \
126 0, 0, 0, 0, 19, 16, 17, 18, 23, 20, 21, 22, 27, 24, 25, 26, \
127 0, 0, 0, 0, 0, 0, 0, 0, 64, 67, 66, 65, 38, 37, 36, 39 \
128)
129#define _trans_cube_FUr _mm256_set_epi8( \
130 0, 0, 0, 0, 6, 7, 4, 5, 10, 11, 8, 9, 17, 18, 19, 16, \
131 0, 0, 0, 0, 0, 0, 0, 0, 35, 33, 34, 32, 71, 69, 70, 68 \
132)
133#define _trans_cube_FUr_inverse _mm256_set_epi8( \
134 0, 0, 0, 0, 6, 7, 4, 5, 10, 11, 8, 9, 17, 18, 19, 16, \
135 0, 0, 0, 0, 0, 0, 0, 0, 35, 33, 34, 32, 71, 69, 70, 68 \
136)
137#define _trans_cube_FRr _mm256_set_epi8( \
138 0, 0, 0, 0, 21, 22, 23, 20, 17, 18, 19, 16, 11, 10, 9, 8, \
139 0, 0, 0, 0, 0, 0, 0, 0, 71, 69, 68, 70, 33, 35, 34, 32 \
140)
141#define _trans_cube_FRr_inverse _mm256_set_epi8( \
142 0, 0, 0, 0, 3, 2, 1, 0, 25, 26, 27, 24, 21, 22, 23, 20, \
143 0, 0, 0, 0, 0, 0, 0, 0, 39, 36, 38, 37, 66, 65, 67, 64 \
144)
145#define _trans_cube_FDr _mm256_set_epi8( \
146 0, 0, 0, 0, 4, 5, 6, 7, 11, 10, 9, 8, 18, 17, 16, 19, \
147 0, 0, 0, 0, 0, 0, 0, 0, 33, 35, 32, 34, 69, 71, 68, 70 \
148)
149#define _trans_cube_FDr_inverse _mm256_set_epi8( \
150 0, 0, 0, 0, 7, 6, 5, 4, 8, 9, 10, 11, 16, 19, 18, 17, \
151 0, 0, 0, 0, 0, 0, 0, 0, 34, 32, 35, 33, 70, 68, 71, 69 \
152)
153#define _trans_cube_FLr _mm256_set_epi8( \
154 0, 0, 0, 0, 23, 20, 21, 22, 18, 17, 16, 19, 10, 11, 8, 9, \
155 0, 0, 0, 0, 0, 0, 0, 0, 69, 71, 70, 68, 35, 33, 32, 34 \
156)
157#define _trans_cube_FLr_inverse _mm256_set_epi8( \
158 0, 0, 0, 0, 2, 3, 0, 1, 27, 24, 25, 26, 20, 23, 22, 21, \
159 0, 0, 0, 0, 0, 0, 0, 0, 38, 37, 39, 36, 67, 64, 66, 65 \
160)
161#define _trans_cube_BUr _mm256_set_epi8( \
162 0, 0, 0, 0, 7, 6, 5, 4, 8, 9, 10, 11, 16, 19, 18, 17, \
163 0, 0, 0, 0, 0, 0, 0, 0, 34, 32, 35, 33, 70, 68, 71, 69 \
164)
165#define _trans_cube_BUr_inverse _mm256_set_epi8( \
166 0, 0, 0, 0, 4, 5, 6, 7, 11, 10, 9, 8, 18, 17, 16, 19, \
167 0, 0, 0, 0, 0, 0, 0, 0, 33, 35, 32, 34, 69, 71, 68, 70 \
168)
169#define _trans_cube_BRr _mm256_set_epi8( \
170 0, 0, 0, 0, 22, 21, 20, 23, 19, 16, 17, 18, 8, 9, 10, 11, \
171 0, 0, 0, 0, 0, 0, 0, 0, 68, 70, 71, 69, 34, 32, 33, 35 \
172)
173#define _trans_cube_BRr_inverse _mm256_set_epi8( \
174 0, 0, 0, 0, 0, 1, 2, 3, 24, 27, 26, 25, 23, 20, 21, 22, \
175 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 36, 39, 64, 67, 65, 66 \
176)
177#define _trans_cube_BDr _mm256_set_epi8( \
178 0, 0, 0, 0, 5, 4, 7, 6, 9, 8, 11, 10, 19, 16, 17, 18, \
179 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 33, 35, 68, 70, 69, 71 \
180)
181#define _trans_cube_BDr_inverse _mm256_set_epi8( \
182 0, 0, 0, 0, 5, 4, 7, 6, 9, 8, 11, 10, 19, 16, 17, 18, \
183 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 33, 35, 68, 70, 69, 71 \
184)
185#define _trans_cube_BLr _mm256_set_epi8( \
186 0, 0, 0, 0, 20, 23, 22, 21, 16, 19, 18, 17, 9, 8, 11, 10, \
187 0, 0, 0, 0, 0, 0, 0, 0, 70, 68, 69, 71, 32, 34, 35, 33 \
188)
189#define _trans_cube_BLr_inverse _mm256_set_epi8( \
190 0, 0, 0, 0, 1, 0, 3, 2, 26, 25, 24, 27, 22, 21, 20, 23, \
191 0, 0, 0, 0, 0, 0, 0, 0, 36, 39, 37, 38, 65, 66, 64, 67 \
192)
193#define _trans_cube_UFm _mm256_set_epi8( \
194 0, 0, 0, 0, 10, 11, 8, 9, 6, 7, 4, 5, 3, 2, 1, 0, \
195 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 1, 0, 7, 6, 5, 4 \
196)
197#define _trans_cube_UFm_inverse _mm256_set_epi8( \
198 0, 0, 0, 0, 10, 11, 8, 9, 6, 7, 4, 5, 3, 2, 1, 0, \
199 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 1, 0, 7, 6, 5, 4 \
200)
201#define _trans_cube_ULm _mm256_set_epi8( \
202 0, 0, 0, 0, 25, 26, 27, 24, 3, 2, 1, 0, 7, 6, 5, 4, \
203 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 4, 5, 2, 3, 1, 0 \
204)
205#define _trans_cube_ULm_inverse _mm256_set_epi8( \
206 0, 0, 0, 0, 25, 26, 27, 24, 3, 2, 1, 0, 7, 6, 5, 4, \
207 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 4, 5, 2, 3, 1, 0 \
208)
209#define _trans_cube_UBm _mm256_set_epi8( \
210 0, 0, 0, 0, 8, 9, 10, 11, 7, 6, 5, 4, 2, 3, 0, 1, \
211 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 1, 6, 7, 4, 5 \
212)
213#define _trans_cube_UBm_inverse _mm256_set_epi8( \
214 0, 0, 0, 0, 8, 9, 10, 11, 7, 6, 5, 4, 2, 3, 0, 1, \
215 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 0, 1, 6, 7, 4, 5 \
216)
217#define _trans_cube_URm _mm256_set_epi8( \
218 0, 0, 0, 0, 27, 24, 25, 26, 2, 3, 0, 1, 6, 7, 4, 5, \
219 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 5, 4, 3, 2, 0, 1 \
220)
221#define _trans_cube_URm_inverse _mm256_set_epi8( \
222 0, 0, 0, 0, 27, 24, 25, 26, 2, 3, 0, 1, 6, 7, 4, 5, \
223 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 5, 4, 3, 2, 0, 1 \
224)
225#define _trans_cube_DFm _mm256_set_epi8( \
226 0, 0, 0, 0, 11, 10, 9, 8, 4, 5, 6, 7, 0, 1, 2, 3, \
227 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 5, 4, 7, 6 \
228)
229#define _trans_cube_DFm_inverse _mm256_set_epi8( \
230 0, 0, 0, 0, 11, 10, 9, 8, 4, 5, 6, 7, 0, 1, 2, 3, \
231 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 2, 5, 4, 7, 6 \
232)
233#define _trans_cube_DLm _mm256_set_epi8( \
234 0, 0, 0, 0, 26, 25, 24, 27, 1, 0, 3, 2, 4, 5, 6, 7, \
235 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 7, 6, 1, 0, 2, 3 \
236)
237#define _trans_cube_DLm_inverse _mm256_set_epi8( \
238 0, 0, 0, 0, 24, 27, 26, 25, 0, 1, 2, 3, 5, 4, 7, 6, \
239 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 6, 7, 0, 1, 3, 2 \
240)
241#define _trans_cube_DBm _mm256_set_epi8( \
242 0, 0, 0, 0, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2, \
243 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7 \
244)
245#define _trans_cube_DBm_inverse _mm256_set_epi8( \
246 0, 0, 0, 0, 9, 8, 11, 10, 5, 4, 7, 6, 1, 0, 3, 2, \
247 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7 \
248)
249#define _trans_cube_DRm _mm256_set_epi8( \
250 0, 0, 0, 0, 24, 27, 26, 25, 0, 1, 2, 3, 5, 4, 7, 6, \
251 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 6, 7, 0, 1, 3, 2 \
252)
253#define _trans_cube_DRm_inverse _mm256_set_epi8( \
254 0, 0, 0, 0, 26, 25, 24, 27, 1, 0, 3, 2, 4, 5, 6, 7, \
255 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 7, 6, 1, 0, 2, 3 \
256)
257#define _trans_cube_RUm _mm256_set_epi8( \
258 0, 0, 0, 0, 3, 2, 1, 0, 24, 27, 26, 25, 20, 23, 22, 21, \
259 0, 0, 0, 0, 0, 0, 0, 0, 35, 32, 34, 33, 70, 69, 71, 68 \
260)
261#define _trans_cube_RUm_inverse _mm256_set_epi8( \
262 0, 0, 0, 0, 22, 21, 20, 23, 18, 17, 16, 19, 11, 10, 9, 8, \
263 0, 0, 0, 0, 0, 0, 0, 0, 33, 35, 34, 32, 71, 69, 68, 70 \
264)
265#define _trans_cube_RFm _mm256_set_epi8( \
266 0, 0, 0, 0, 18, 17, 16, 19, 23, 20, 21, 22, 24, 27, 26, 25, \
267 0, 0, 0, 0, 0, 0, 0, 0, 69, 70, 71, 68, 35, 32, 33, 34 \
268)
269#define _trans_cube_RFm_inverse _mm256_set_epi8( \
270 0, 0, 0, 0, 18, 17, 16, 19, 23, 20, 21, 22, 24, 27, 26, 25, \
271 0, 0, 0, 0, 0, 0, 0, 0, 37, 38, 39, 36, 67, 64, 65, 66 \
272)
273#define _trans_cube_RDm _mm256_set_epi8( \
274 0, 0, 0, 0, 1, 0, 3, 2, 27, 24, 25, 26, 23, 20, 21, 22, \
275 0, 0, 0, 0, 0, 0, 0, 0, 32, 35, 33, 34, 69, 70, 68, 71 \
276)
277#define _trans_cube_RDm_inverse _mm256_set_epi8( \
278 0, 0, 0, 0, 23, 20, 21, 22, 19, 16, 17, 18, 9, 8, 11, 10, \
279 0, 0, 0, 0, 0, 0, 0, 0, 32, 34, 35, 33, 70, 68, 69, 71 \
280)
281#define _trans_cube_RBm _mm256_set_epi8( \
282 0, 0, 0, 0, 16, 19, 18, 17, 20, 23, 22, 21, 27, 24, 25, 26, \
283 0, 0, 0, 0, 0, 0, 0, 0, 70, 69, 68, 71, 32, 35, 34, 33 \
284)
285#define _trans_cube_RBm_inverse _mm256_set_epi8( \
286 0, 0, 0, 0, 19, 16, 17, 18, 22, 21, 20, 23, 26, 25, 24, 27, \
287 0, 0, 0, 0, 0, 0, 0, 0, 36, 39, 38, 37, 66, 65, 64, 67 \
288)
289#define _trans_cube_LUm _mm256_set_epi8( \
290 0, 0, 0, 0, 2, 3, 0, 1, 26, 25, 24, 27, 21, 22, 23, 20, \
291 0, 0, 0, 0, 0, 0, 0, 0, 34, 33, 35, 32, 71, 68, 70, 69 \
292)
293#define _trans_cube_LUm_inverse _mm256_set_epi8( \
294 0, 0, 0, 0, 20, 23, 22, 21, 17, 18, 19, 16, 10, 11, 8, 9, \
295 0, 0, 0, 0, 0, 0, 0, 0, 35, 33, 32, 34, 69, 71, 70, 68 \
296)
297#define _trans_cube_LFm _mm256_set_epi8( \
298 0, 0, 0, 0, 17, 18, 19, 16, 21, 22, 23, 20, 25, 26, 27, 24, \
299 0, 0, 0, 0, 0, 0, 0, 0, 71, 68, 69, 70, 33, 34, 35, 32 \
300)
301#define _trans_cube_LFm_inverse _mm256_set_epi8( \
302 0, 0, 0, 0, 17, 18, 19, 16, 21, 22, 23, 20, 25, 26, 27, 24, \
303 0, 0, 0, 0, 0, 0, 0, 0, 39, 36, 37, 38, 65, 66, 67, 64 \
304)
305#define _trans_cube_LDm _mm256_set_epi8( \
306 0, 0, 0, 0, 0, 1, 2, 3, 25, 26, 27, 24, 22, 21, 20, 23, \
307 0, 0, 0, 0, 0, 0, 0, 0, 33, 34, 32, 35, 68, 71, 69, 70 \
308)
309#define _trans_cube_LDm_inverse _mm256_set_epi8( \
310 0, 0, 0, 0, 21, 22, 23, 20, 16, 19, 18, 17, 8, 9, 10, 11, \
311 0, 0, 0, 0, 0, 0, 0, 0, 34, 32, 33, 35, 68, 70, 71, 69 \
312)
313#define _trans_cube_LBm _mm256_set_epi8( \
314 0, 0, 0, 0, 19, 16, 17, 18, 22, 21, 20, 23, 26, 25, 24, 27, \
315 0, 0, 0, 0, 0, 0, 0, 0, 68, 71, 70, 69, 34, 33, 32, 35 \
316)
317#define _trans_cube_LBm_inverse _mm256_set_epi8( \
318 0, 0, 0, 0, 16, 19, 18, 17, 20, 23, 22, 21, 27, 24, 25, 26, \
319 0, 0, 0, 0, 0, 0, 0, 0, 38, 37, 36, 39, 64, 67, 66, 65 \
320)
321#define _trans_cube_FUm _mm256_set_epi8( \
322 0, 0, 0, 0, 7, 6, 5, 4, 11, 10, 9, 8, 17, 18, 19, 16, \
323 0, 0, 0, 0, 0, 0, 0, 0, 39, 37, 38, 36, 67, 65, 66, 64 \
324)
325#define _trans_cube_FUm_inverse _mm256_set_epi8( \
326 0, 0, 0, 0, 7, 6, 5, 4, 11, 10, 9, 8, 17, 18, 19, 16, \
327 0, 0, 0, 0, 0, 0, 0, 0, 71, 69, 70, 68, 35, 33, 34, 32 \
328)
329#define _trans_cube_FRm _mm256_set_epi8( \
330 0, 0, 0, 0, 20, 23, 22, 21, 17, 18, 19, 16, 10, 11, 8, 9, \
331 0, 0, 0, 0, 0, 0, 0, 0, 67, 65, 64, 66, 37, 39, 38, 36 \
332)
333#define _trans_cube_FRm_inverse _mm256_set_epi8( \
334 0, 0, 0, 0, 2, 3, 0, 1, 26, 25, 24, 27, 21, 22, 23, 20, \
335 0, 0, 0, 0, 0, 0, 0, 0, 66, 65, 67, 64, 39, 36, 38, 37 \
336)
337#define _trans_cube_FDm _mm256_set_epi8( \
338 0, 0, 0, 0, 5, 4, 7, 6, 10, 11, 8, 9, 18, 17, 16, 19, \
339 0, 0, 0, 0, 0, 0, 0, 0, 37, 39, 36, 38, 65, 67, 64, 66 \
340)
341#define _trans_cube_FDm_inverse _mm256_set_epi8( \
342 0, 0, 0, 0, 6, 7, 4, 5, 9, 8, 11, 10, 16, 19, 18, 17, \
343 0, 0, 0, 0, 0, 0, 0, 0, 70, 68, 71, 69, 34, 32, 35, 33 \
344)
345#define _trans_cube_FLm _mm256_set_epi8( \
346 0, 0, 0, 0, 22, 21, 20, 23, 18, 17, 16, 19, 11, 10, 9, 8, \
347 0, 0, 0, 0, 0, 0, 0, 0, 65, 67, 66, 64, 39, 37, 36, 38 \
348)
349#define _trans_cube_FLm_inverse _mm256_set_epi8( \
350 0, 0, 0, 0, 3, 2, 1, 0, 24, 27, 26, 25, 20, 23, 22, 21, \
351 0, 0, 0, 0, 0, 0, 0, 0, 67, 64, 66, 65, 38, 37, 39, 36 \
352)
353#define _trans_cube_BUm _mm256_set_epi8( \
354 0, 0, 0, 0, 6, 7, 4, 5, 9, 8, 11, 10, 16, 19, 18, 17, \
355 0, 0, 0, 0, 0, 0, 0, 0, 38, 36, 39, 37, 66, 64, 67, 65 \
356)
357#define _trans_cube_BUm_inverse _mm256_set_epi8( \
358 0, 0, 0, 0, 5, 4, 7, 6, 10, 11, 8, 9, 18, 17, 16, 19, \
359 0, 0, 0, 0, 0, 0, 0, 0, 69, 71, 68, 70, 33, 35, 32, 34 \
360)
361#define _trans_cube_BRm _mm256_set_epi8( \
362 0, 0, 0, 0, 23, 20, 21, 22, 19, 16, 17, 18, 9, 8, 11, 10, \
363 0, 0, 0, 0, 0, 0, 0, 0, 64, 66, 67, 65, 38, 36, 37, 39 \
364)
365#define _trans_cube_BRm_inverse _mm256_set_epi8( \
366 0, 0, 0, 0, 1, 0, 3, 2, 27, 24, 25, 26, 23, 20, 21, 22, \
367 0, 0, 0, 0, 0, 0, 0, 0, 64, 67, 65, 66, 37, 38, 36, 39 \
368)
369#define _trans_cube_BDm _mm256_set_epi8( \
370 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 19, 16, 17, 18, \
371 0, 0, 0, 0, 0, 0, 0, 0, 36, 38, 37, 39, 64, 66, 65, 67 \
372)
373#define _trans_cube_BDm_inverse _mm256_set_epi8( \
374 0, 0, 0, 0, 4, 5, 6, 7, 8, 9, 10, 11, 19, 16, 17, 18, \
375 0, 0, 0, 0, 0, 0, 0, 0, 68, 70, 69, 71, 32, 34, 33, 35 \
376)
377#define _trans_cube_BLm _mm256_set_epi8( \
378 0, 0, 0, 0, 21, 22, 23, 20, 16, 19, 18, 17, 8, 9, 10, 11, \
379 0, 0, 0, 0, 0, 0, 0, 0, 66, 64, 65, 67, 36, 38, 39, 37 \
380)
381#define _trans_cube_BLm_inverse _mm256_set_epi8( \
382 0, 0, 0, 0, 0, 1, 2, 3, 25, 26, 27, 24, 22, 21, 20, 23, \
383 0, 0, 0, 0, 0, 0, 0, 0, 65, 66, 64, 67, 36, 39, 37, 38 \
384)
diff --git a/utils/genmovecode.sh b/utils/genmovecode.sh
index 0857f31..9d5fa7a 100755
--- a/utils/genmovecode.sh
+++ b/utils/genmovecode.sh
@@ -4,16 +4,18 @@ type="${1:-src}"
4 4
5gcc -DDEBUG h48_to_"$type".c ../cube.c -o h48_to_"$type" 5gcc -DDEBUG h48_to_"$type".c ../cube.c -o h48_to_"$type"
6 6
7genfuncs() { 7lineavx() { printf '#define _move_cube_%s ' "$1"; }
8linesrc() { printf '_static cube_fast_t _move_cube_%s = ' "$1"; }
9sedavx() { sed '1,2s/$/ \\/ ; 3s/$/)/ ; 3q'; }
10sedsrc() { sed '3s/$/ };/ ; 3q'; }
11
12gen() {
8 for f in move_??_*.txt; do 13 for f in move_??_*.txt; do
9 move="$(echo $f | sed 's/.*_// ; s/\.txt//')" 14 move="$(echo $f | sed 's/.*_// ; s/\.txt//')"
10 printf 'static inline cube_fast_t\n_move_%s' "$move" 15 line$type "$move"
11 printf '(cube_fast_t c)\n{\n' 16 ./h48_to_"$type" <"$f" | sed$type
12 printf '\tcube_fast_t m = '
13 ./h48_to_"$type" <"$f" | sed '2,4s/^/\t/'
14 printf ';\n\n\treturn compose_fast(c, m);\n}\n\n'
15 done 17 done
16} 18}
17 19
18genfuncs 20gen
19rm -f h48_to_"$type" invert 21rm -f h48_to_"$type" invert
diff --git a/utils/genmoveswitch.sh b/utils/genmoveswitch.sh
new file mode 100755
index 0000000..cce18fc
--- /dev/null
+++ b/utils/genmoveswitch.sh
@@ -0,0 +1,8 @@
1#!/bin/sh
2
3printf '\tswitch (m) {\n'
4for f in move_??_*.txt; do
5 t="$(echo $f | sed 's/.*_// ; s/\.txt//')"
6 printf '\tcase %s:\n\t\treturn _move(%s, c);\n' "$t" "$t"
7done
8printf '\t}\n'
diff --git a/utils/gentranscode.sh b/utils/gentranscode.sh
index 198ac93..b9d41b6 100755
--- a/utils/gentranscode.sh
+++ b/utils/gentranscode.sh
@@ -5,38 +5,20 @@ type="${1:-src}"
5gcc -DDEBUG h48_to_"$type".c ../cube.c -o h48_to_"$type" 5gcc -DDEBUG h48_to_"$type".c ../cube.c -o h48_to_"$type"
6gcc -DDEBUG invert.c ../cube.c -o invert 6gcc -DDEBUG invert.c ../cube.c -o invert
7 7
8# Old version 8lineavx() { printf '#define _trans_cube_%s ' "$1"; }
9genarray() { 9linesrc() { printf '_static cube_fast_t _trans_cube_%s = ' "$1"; }
10 for f in transform_??_???.txt; do 10sedavx() { sed '1,2s/$/ \\/ ; 3s/$/)/ ; 3q'; }
11 trans="$(echo $f | sed 's/.*_// ; s/\.txt//')" 11sedsrc() { sed '3s/$/ };/ ; 3q'; }
12 printf '[%s] = ' "$trans"
13 if [ "$1" = "-i" ]; then
14 ./invert <"$f" | ./h48_to_"$type"
15 else
16 ./h48_to_"$type" <"$f"
17 fi
18 printf ',\n'
19 done
20}
21 12
22genfuncs() { 13gen() {
23 for f in transform_??_???.txt; do 14 for f in transform_??_???.txt; do
24 trans="$(echo $f | sed 's/.*_// ; s/\.txt//')" 15 trans="$(echo $f | sed 's/.*_// ; s/\.txt//')"
25 printf 'static inline cube_fast_t\n_trans_%s' "$trans" 16 line$type "$trans"
26 printf '(cube_fast_t c)\n{\n' 17 ./h48_to_"$type" <"$f" | sed$type
27 printf '\tcube_fast_t ret;\n\n' 18 line$type "${trans}_inverse"
28 printf '\tcube_fast_t tn = ' 19 ./invert <"$f" | ./h48_to_"$type" | sed$type
29 ./h48_to_"$type" <"$f" | sed '2,4s/^/\t/'
30 printf ';\n\tcube_fast_t ti = '
31 ./invert <"$f" | ./h48_to_"$type" | sed '2,4 s/^/\t/'
32 printf ';\n\n\tret = compose_fast(tn, c);\n'
33 printf '\tret = compose_fast(ret, ti);\n'
34 if [ -n "$(echo "$trans" | grep "m")" ]; then
35 printf '\tret = invertco_fast(ret);\n'
36 fi
37 printf '\n\treturn ret;\n}\n\n'
38 done 20 done
39} 21}
40 22
41genfuncs 23gen
42rm -f h48_to_"$type" invert 24rm -f h48_to_"$type" invert
diff --git a/utils/gentransswitch.sh b/utils/gentransswitch.sh
index a08dff9..42726ce 100755
--- a/utils/gentransswitch.sh
+++ b/utils/gentransswitch.sh
@@ -3,6 +3,12 @@
3printf '\tswitch (t) {\n' 3printf '\tswitch (t) {\n'
4for f in transform_??_???.txt; do 4for f in transform_??_???.txt; do
5 t="$(echo $f | sed 's/.*_// ; s/\.txt//')" 5 t="$(echo $f | sed 's/.*_// ; s/\.txt//')"
6 printf '\tcase %s:\n\t\treturn _trans_%s(c);\n' "$t" "$t" 6 mirror_or_rotation="$(echo $t | grep m)"
7 if [ -z "$mirror_or_rotation" ]; then
8 m="rotation"
9 else
10 m="mirrored"
11 fi
12 printf '\tcase %s:\n\t\treturn _trans_%s(%s, c);\n' "$t" "$m" "$t"
7done 13done
8printf '\t}\n' 14printf '\t}\n'
diff --git a/utils/h48_to_avx.c b/utils/h48_to_avx.c
index e5df2aa..ba82366 100644
--- a/utils/h48_to_avx.c
+++ b/utils/h48_to_avx.c
@@ -11,8 +11,8 @@ int main() {
11 cube_t cube; 11 cube_t cube;
12 12
13 fgets(str, STRLENMAX, stdin); 13 fgets(str, STRLENMAX, stdin);
14 cube = readcube(H48, str); 14 cube = readcube("H48", str);
15 writecube(AVX, cube, str); 15 writecube("AVX", cube, str);
16 fputs(str, stdout); 16 fputs(str, stdout);
17 17
18 return 0; 18 return 0;
diff --git a/utils/h48_to_src.c b/utils/h48_to_src.c
index a8fda00..6fdea5c 100644
--- a/utils/h48_to_src.c
+++ b/utils/h48_to_src.c
@@ -11,8 +11,8 @@ int main() {
11 cube_t cube; 11 cube_t cube;
12 12
13 fgets(str, STRLENMAX, stdin); 13 fgets(str, STRLENMAX, stdin);
14 cube = readcube(H48, str); 14 cube = readcube("H48", str);
15 writecube(SRC, cube, str); 15 writecube("SRC", cube, str);
16 fputs(str, stdout); 16 fputs(str, stdout);
17 17
18 return 0; 18 return 0;
diff --git a/utils/invert.c b/utils/invert.c
index aa912e5..cd54a87 100644
--- a/utils/invert.c
+++ b/utils/invert.c
@@ -11,8 +11,8 @@ int main() {
11 cube_t cube; 11 cube_t cube;
12 12
13 fgets(str, STRLENMAX, stdin); 13 fgets(str, STRLENMAX, stdin);
14 cube = readcube(H48, str); 14 cube = readcube("H48", str);
15 writecube(H48, inverse(cube), str); 15 writecube("H48", inverse(cube), str);
16 fputs(str, stdout); 16 fputs(str, stdout);
17 17
18 return 0; 18 return 0;

Generated with cgit - Back to sebastiano.tronto.net