You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
1
(3) |
2
|
3
(2) |
4
(3) |
5
|
6
(1) |
7
|
|
8
|
9
(4) |
10
(1) |
11
(2) |
12
(1) |
13
(8) |
14
|
|
15
|
16
|
17
|
18
(2) |
19
(1) |
20
|
21
|
|
22
|
23
|
24
|
25
|
26
|
27
(1) |
28
(2) |
|
29
(6) |
30
|
31
|
|
|
|
|
|
From: Julian S. <se...@so...> - 2020-03-11 14:08:10
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=1e1b7976938956ef709d7537ffaa723b76103c05 commit 1e1b7976938956ef709d7537ffaa723b76103c05 Author: Julian Seward <js...@ac...> Date: Wed Mar 11 15:07:32 2020 +0100 Bug 418702 - ARMv8.1 Paired register compare-and-swap instructions are not supported. These are the test cases. Patch by Assad Hashmi <ass...@li...>. Diff: --- none/tests/arm64/atomics_v81.c | 2041 +++++++++++++++ none/tests/arm64/atomics_v81.stdout.exp | 4296 +++++++++++++++++++++++++++++++ 2 files changed, 6337 insertions(+) diff --git a/none/tests/arm64/atomics_v81.c b/none/tests/arm64/atomics_v81.c index f0c5b8f01d..ed111bf2fb 100644 --- a/none/tests/arm64/atomics_v81.c +++ b/none/tests/arm64/atomics_v81.c @@ -99,6 +99,51 @@ CHECK(eor, ^, 64); printf("\n\n"); \ } +#define ATOMIC_TEST_CASP(instruction, rsz, base_addr, mem_val0_, mem_val1_, rs0_, rs1_, rt0_, rt1_) \ +{ \ + ULong rs0 = (ULong)rs0_; \ + ULong rs1 = (ULong)rs1_; \ + ULong rt0 = (ULong)rt0_; \ + ULong rt1 = (ULong)rt1_; \ + ULong mem_val0 = (ULong)mem_val0_; \ + ULong mem_val1 = (ULong)mem_val1_; \ + \ + ULong mem_val_after0, mem_val_after1; \ + mem_val_after0 = mem_val_after1 = 0ULL; \ + \ + int pad = (strcmp(#rsz, "w") == 0) ? 8 : 16; \ + printf("%s :: rs %0*llx %0*llx rt %0*llx %0*llx rn mem %0*llx %0*llx\n", \ + instruction, pad, rs0, pad, rs1, pad, rt0, pad, rt1, pad, mem_val0, pad, mem_val1); \ + \ + Int swap = (rs0 == mem_val0 && rs1 == mem_val1) ? 1 : 0; \ + __asm__ __volatile__( \ + "mov " #rsz "5, %" #rsz "2;" \ + "mov " #rsz "13, %" #rsz "3;" \ + "mov " #rsz "14, %" #rsz "4;" \ + "stp " #rsz "13, " #rsz "14, [x5, #0];" \ + "mov " #rsz "8, %" #rsz "5;" \ + "mov " #rsz "9, %" #rsz "6;" \ + "mov " #rsz "10, %" #rsz "7;" \ + "mov " #rsz "11, %" #rsz "8;" \ + instruction ";" \ + "ldp %" #rsz "0, %" #rsz "1, [x5, #0];" \ + : "=&r" (mem_val_after0), "=&r" (mem_val_after1) \ + : "r" (base_addr), "r" (mem_val0), "r" (mem_val1), "r" (rs0), "r" (rs1), "r" (rt0), "r" (rt1) \ + : #rsz "5", #rsz "8", #rsz "9", #rsz "10", #rsz "11", #rsz "13", #rsz "14", "memory" \ + ); \ + printf("%s :: rs %0*llx %0*llx rt %0*llx %0*llx rn mem %0*llx %0*llx", \ + instruction, pad, rs0, pad, rs1, pad, rt0, pad, rt1, pad, mem_val_after0, pad, mem_val_after1); \ + if (swap == 1) { \ + if (mem_val_after0 != rt0 || mem_val_after1 != rt1 ) \ + printf("FAIL: swapped but mem after != rt"); \ + } \ + else { \ + if (mem_val_after0 != mem_val0 || mem_val_after1 != mem_val1) \ + printf("FAIL: no swap but mem after != mem before"); \ + } \ + printf("\n\n"); \ +} + // Test patterns #define ALL5s_64 0x5555555555555555ULL @@ -5540,6 +5585,2002 @@ static __attribute((noinline)) void test_atomics ( void ) ATOMIC_TEST_CAS("caslh w11, w12, [x5]", w, mem, DOWN_32, DOWN_32, 0, 0xFFFF); free(mem); + + ULong *memp = (ULong *)malloc(sizeof(ULong) * 2); + + printf("CASP <Ws>, <W(s+1)>, <Wt>, <W(t+1)>, [<Xn|SP>{,#0}]\n\n"); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, 0, 0, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, 0, 0, 1, 1); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, 1, 1, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, 1, 1, 1, 1); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 1, 1, 0, 0, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 1, 1, 0, 0, 1, 1); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 1, 1, 1, 1, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 1, 1, 1, 1, 1, 1); + + printf("Combinations of ALL5s_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, UP_32, UP_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, PI_32, PI_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, E_32, E_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, E_32, E_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, 0, 0); + + printf("Combinations of ALLas_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, UP_32, UP_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, PI_32, PI_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, E_32, E_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, E_32, E_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, 0, 0); + + printf("Combinations of ALLfs_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, UP_32, UP_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, PI_32, PI_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, E_32, E_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, E_32, E_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, 0, 0); + + printf("Combinations of UP_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, UP_32, UP_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, PI_32, PI_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, E_32, E_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, E_32, E_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, 0, 0); + + printf("Combinations of DOWN_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, UP_32, UP_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, PI_32, PI_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, E_32, E_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, E_32, E_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, 0, 0); + + printf("Combinations of PI_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, UP_32, UP_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, PI_32, PI_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, E_32, E_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, E_32, E_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, 0, 0); + + printf("Combinations of E_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, UP_32, UP_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, PI_32, PI_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, E_32, E_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, E_32, E_32); + + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("casp w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, 0, 0); + + printf("CASPA <Ws>, <W(s+1)>, <Wt>, <W(t+1)>, [<Xn|SP>{,#0}]\n\n"); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, 0, 0, 1, 1); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, 1, 1, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, 1, 1, 1, 1); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 1, 1, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 1, 1, 0, 0, 1, 1); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 1, 1, 1, 1, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 1, 1, 1, 1, 1, 1); + + printf("Combinations of ALL5s_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, UP_32, UP_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, PI_32, PI_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, E_32, E_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, E_32, E_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, 0, 0); + + printf("Combinations of ALLas_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, UP_32, UP_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, PI_32, PI_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, E_32, E_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, E_32, E_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, 0, 0); + + printf("Combinations of ALLfs_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, UP_32, UP_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, PI_32, PI_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, E_32, E_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, E_32, E_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, 0, 0); + + printf("Combinations of UP_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, UP_32, UP_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, PI_32, PI_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, E_32, E_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, E_32, E_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, 0, 0); + + printf("Combinations of DOWN_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, UP_32, UP_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, PI_32, PI_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, E_32, E_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, E_32, E_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, 0, 0); + + printf("Combinations of PI_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, UP_32, UP_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, PI_32, PI_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, E_32, E_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, E_32, E_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, 0, 0); + + printf("Combinations of E_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, UP_32, UP_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, PI_32, PI_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, E_32, E_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, E_32, E_32); + + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspa w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, 0, 0); + + printf("CASPAL <Ws>, <W(s+1)>, <Wt>, <W(t+1)>, [<Xn|SP>{,#0}]\n\n"); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, 0, 0, 1, 1); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, 1, 1, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, 1, 1, 1, 1); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 1, 1, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 1, 1, 0, 0, 1, 1); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 1, 1, 1, 1, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 1, 1, 1, 1, 1, 1); + + printf("Combinations of ALL5s_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, UP_32, UP_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, PI_32, PI_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, E_32, E_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, E_32, E_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s_32, ALL5s_32, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALL5s_32, ALL5s_32, ALL5s_32, ALL5s_32, 0, 0); + + printf("Combinations of ALLas_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, UP_32, UP_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, PI_32, PI_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, E_32, E_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, E_32, E_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLas_32, ALLas_32, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLas_32, ALLas_32, ALLas_32, ALLas_32, 0, 0); + + printf("Combinations of ALLfs_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, UP_32, UP_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, PI_32, PI_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, E_32, E_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, E_32, E_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALLfs_32, ALLfs_32, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, ALLfs_32, ALLfs_32, ALLfs_32, ALLfs_32, 0, 0); + + printf("Combinations of UP_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, UP_32, UP_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, PI_32, PI_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, E_32, E_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, E_32, E_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, UP_32, UP_32, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, UP_32, UP_32, UP_32, UP_32, 0, 0); + + printf("Combinations of DOWN_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, UP_32, UP_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, PI_32, PI_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, E_32, E_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, E_32, E_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, DOWN_32, DOWN_32, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, DOWN_32, DOWN_32, DOWN_32, DOWN_32, 0, 0); + + printf("Combinations of PI_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, UP_32, UP_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, PI_32, PI_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, E_32, E_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, E_32, E_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, PI_32, PI_32, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, PI_32, PI_32, PI_32, PI_32, 0, 0); + + printf("Combinations of E_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, ALL5s_32, ALL5s_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, ALL5s_32, ALL5s_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, ALLas_32, ALLas_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, ALLas_32, ALLas_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, ALLfs_32, ALLfs_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, ALLfs_32, ALLfs_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, UP_32, UP_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, UP_32, UP_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, UP_32, UP_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, DOWN_32, DOWN_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, DOWN_32, DOWN_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, PI_32, PI_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, PI_32, PI_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, PI_32, PI_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, E_32, E_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, E_32, E_32); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, E_32, E_32); + + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, 0, 0, E_32, E_32, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspal w8, w9, w10, w11, [x5]", w, memp, E_32, E_32, E_32, E_32, 0, 0); + + printf("CASPL <Ws>, <W(s+1)>, <Wt>, <W(t+1)>, [<Xn|SP>{,#0}]\n\n"); + + ATOMIC_TEST_CASP("caspl w8, w9, w10, w11, [x5]", w, memp, 0, 0, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspl w8, w9, w10, w11, [x5]", w, memp, 0, 0, 0, 0, 1, 1); + ATOMIC_TEST_CASP("caspl w8, w9, w10, w11, [x5]", w, memp, 0, 0, 1, 1, 0, 0); + ATOMIC_TEST_CASP("caspl w8, w9, w10, w11, [x5]", w, memp, 0, 0, 1, 1, 1, 1); + ATOMIC_TEST_CASP("caspl w8, w9, w10, w11, [x5]", w, memp, 1, 1, 0, 0, 0, 0); + ATOMIC_TEST_CASP("caspl w8, w9, w10, w11, [x5]", w, memp, 1, 1, 0, 0, 1, 1); + ATOMIC_TEST_CASP("caspl w8, w9, w10, w11, [x5]", w, memp, 1, 1, 1, 1, 0, 0); + ATOMIC_TEST_CASP("caspl w8, w9, w10, w11, [x5]", w, memp, 1, 1, 1, 1, 1, 1); + + printf("Combinations of ALL5s_32 and all other patterns\n"); + + ATOMIC_TEST_CASP("caspl w8, w9, w10, w11, [x5]", w, memp, 0, 0, ALL5s... [truncated message content] |
|
From: Julian S. <se...@so...> - 2020-03-11 14:06:16
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=9608e801932b8c76f0c23e40b384a08c59b368f0 commit 9608e801932b8c76f0c23e40b384a08c59b368f0 Author: Julian Seward <js...@ac...> Date: Wed Mar 11 15:05:02 2020 +0100 Bug 418702 - ARMv8.1 Paired register compare-and-swap instructions are not supported. Implementation only; tests to follow. Patch by Assad Hashmi <ass...@li...>. Diff: --- VEX/priv/guest_arm64_toIR.c | 47 +++++++++++++++++++++++++ VEX/priv/host_arm64_defs.c | 86 +++++++++++++++++++++++++++++++++++++++++++++ VEX/priv/host_arm64_defs.h | 5 +++ VEX/priv/host_arm64_isel.c | 45 ++++++++++++++++++++++++ 4 files changed, 183 insertions(+) diff --git a/VEX/priv/guest_arm64_toIR.c b/VEX/priv/guest_arm64_toIR.c index c8bfd1888f..fe80e593c4 100644 --- a/VEX/priv/guest_arm64_toIR.c +++ b/VEX/priv/guest_arm64_toIR.c @@ -6907,6 +6907,53 @@ Bool dis_ARM64_load_store(/*MB_OUT*/DisResult* dres, UInt insn, return True; } + /* ---------------- ARMv8.1-LSE: Compare-and-Swap Pair --------------- */ + /* 31 30 29 22 21 20 15 14 9 4 + 0 sz 0010000 A 1 s R 11111 n t CASP{,A}{,L} <Rs>, <Rt>, [<Xn|SP>] + */ + if (INSN(31,31) == 0 + && INSN(29,23) == BITS7(0,0,1,0,0,0,0) + && INSN(21,21) == 1 + && INSN(14,10) == BITS5(1,1,1,1,1)) { + UInt is64 = INSN(30,30); + Bool isAcq = INSN(22,22) == 1; + Bool isRel = INSN(15,15) == 1; + UInt ss = INSN(20,16); + UInt nn = INSN(9,5); + UInt tt = INSN(4,0); + + if ((ss & 0x1) || (tt & 0x1)) { + /* undefined; fall through */ + } else { + IRExpr *expLo = getIRegOrZR(is64, ss); + IRExpr *expHi = getIRegOrZR(is64, ss + 1); + IRExpr *newLo = getIRegOrZR(is64, tt); + IRExpr *newHi = getIRegOrZR(is64, tt + 1); + IRTemp oldLo = newTemp(is64 ? Ity_I64 : Ity_I32); + IRTemp oldHi = newTemp(is64 ? Ity_I64 : Ity_I32); + + if (isAcq) + stmt(IRStmt_MBE(Imbe_Fence)); + + stmt( IRStmt_CAS(mkIRCAS(oldHi, oldLo, + Iend_LE, getIReg64orSP(nn), + expHi, expLo, + newHi, newLo)) ); + + if (isRel) + stmt(IRStmt_MBE(Imbe_Fence)); + + putIRegOrZR(is64, ss, mkexpr(oldLo)); + putIRegOrZR(is64, ss+1, mkexpr(oldHi)); + DIP("casp%s%s %s, %s, %s, %s, [%s]\n", + isAcq ? "a" : "", isRel ? "l" : "", + nameIRegOrZR(is64, ss), nameIRegOrZR(is64, ss+1), + nameIRegOrZR(is64, tt), nameIRegOrZR(is64, tt+1), + nameIReg64orSP(nn)); + return True; + } + } + if (sigill_diag) { vex_printf("ARM64 front end: load_store\n"); } diff --git a/VEX/priv/host_arm64_defs.c b/VEX/priv/host_arm64_defs.c index 13a61b0bd4..e4ef569868 100644 --- a/VEX/priv/host_arm64_defs.c +++ b/VEX/priv/host_arm64_defs.c @@ -1020,6 +1020,13 @@ ARM64Instr* ARM64Instr_CAS ( Int szB ) { vassert(szB == 8 || szB == 4 || szB == 2 || szB == 1); return i; } +ARM64Instr* ARM64Instr_CASP ( Int szB ) { + ARM64Instr* i = LibVEX_Alloc_inline(sizeof(ARM64Instr)); + i->tag = ARM64in_CASP; + i->ARM64in.CASP.szB = szB; + vassert(szB == 8 || szB == 4); + return i; +} ARM64Instr* ARM64Instr_MFence ( void ) { ARM64Instr* i = LibVEX_Alloc_inline(sizeof(ARM64Instr)); i->tag = ARM64in_MFence; @@ -1593,6 +1600,10 @@ void ppARM64Instr ( const ARM64Instr* i ) { vex_printf("x1 = cas(%dbit)(x3, x5 -> x7)", 8 * i->ARM64in.CAS.szB); return; } + case ARM64in_CASP: { + vex_printf("x0,x1 = casp(%dbit)(x2, x4,x5 -> x6,x7)", 8 * i->ARM64in.CASP.szB); + return; + } case ARM64in_MFence: vex_printf("(mfence) dsb sy; dmb sy; isb"); return; @@ -2102,6 +2113,17 @@ void getRegUsage_ARM64Instr ( HRegUsage* u, const ARM64Instr* i, Bool mode64 ) /* Pointless to state this since X8 is not available to RA. */ addHRegUse(u, HRmWrite, hregARM64_X8()); break; + case ARM64in_CASP: + addHRegUse(u, HRmRead, hregARM64_X2()); + addHRegUse(u, HRmRead, hregARM64_X4()); + addHRegUse(u, HRmRead, hregARM64_X5()); + addHRegUse(u, HRmRead, hregARM64_X6()); + addHRegUse(u, HRmRead, hregARM64_X7()); + addHRegUse(u, HRmWrite, hregARM64_X0()); + addHRegUse(u, HRmWrite, hregARM64_X1()); + addHRegUse(u, HRmWrite, hregARM64_X9()); + addHRegUse(u, HRmWrite, hregARM64_X8()); + break; case ARM64in_MFence: return; case ARM64in_ClrEX: @@ -2372,6 +2394,8 @@ void mapRegs_ARM64Instr ( HRegRemap* m, ARM64Instr* i, Bool mode64 ) return; case ARM64in_CAS: return; + case ARM64in_CASP: + return; case ARM64in_MFence: return; case ARM64in_ClrEX: @@ -3910,6 +3934,68 @@ Int emit_ARM64Instr ( /*MB_MOD*/Bool* is_profInc, *p++ = 0x35FFFF68; goto done; } + case ARM64in_CASP: { + /* Generate: + CASP <Xs>, <X(s+1)>, <Xt>, <X(t+1)>, [<Xn|SP>{,#0}] + + Register allocation (see ARM64in_CASP in getRegUsage_ARM64Instr): + Xn: memory address + -> X2 (INPUT) + Xs, X(s+1): values to be compared with value read from address + -> X4,X5 (INPUTS) + -> X0,X1 (OUTPUTS) loaded from memory and compared with + scratch registers X8,X9 (CLOBBERED) which contain + contents of X4,X5 + Xt, X(t+1): values to be stored to memory if X0,X1==X8,X9 + -> X6,X7 (INPUT) + + loop: + -- two of: + mov x8, x4 // AA0403E8 + mov x9, x5 // AA0503E9 + and x8, x4, #0xFFFFFFFF // 92407C88 + and x9, x5, #0xFFFFFFFF // 92407CA9 + + -- one of: + ldxp x0,x1, [x2] // C87F0440 + ldxp w0,w1, [x2] // 887F0440 + + -- always: + cmp x0, x8 // EB08001F + bne out // 540000E1 (b.ne #28 <out>) + cmp x1, x9 // EB09003F + bne out // 540000A1 (b.ne #20 <out>) + + -- one of: + stxp w1, x6, x7, [x2] // C8211C46 + stxp w1, w6, w7, [x2] // 88211C46 + + -- always: + cbnz w1, loop // 35FFFE81 (cbnz w1, #-48 <loop>) + out: + */ + switch (i->ARM64in.CASP.szB) { + case 8: *p++ = 0xAA0403E8; *p++ = 0xAA0503E9; break; + case 4: *p++ = 0x92407C88; *p++ = 0x92407CA9; break; + default: vassert(0); + } + switch (i->ARM64in.CASP.szB) { + case 8: *p++ = 0xC87F0440; break; + case 4: *p++ = 0x887F0440; break; + default: vassert(0); + } + *p++ = 0xEB08001F; + *p++ = 0x540000E1; + *p++ = 0xEB09003F; + *p++ = 0x540000A1; + switch (i->ARM64in.CASP.szB) { + case 8: *p++ = 0xC8211C46; break; + case 4: *p++ = 0x88211C46; break; + default: vassert(0); + } + *p++ = 0x35FFFE81; + goto done; + } case ARM64in_MFence: { *p++ = 0xD5033F9F; /* DSB sy */ *p++ = 0xD5033FBF; /* DMB sy */ diff --git a/VEX/priv/host_arm64_defs.h b/VEX/priv/host_arm64_defs.h index 63cf2bb790..05dba7ab8b 100644 --- a/VEX/priv/host_arm64_defs.h +++ b/VEX/priv/host_arm64_defs.h @@ -481,6 +481,7 @@ typedef ARM64in_LdrEX, ARM64in_StrEX, ARM64in_CAS, + ARM64in_CASP, ARM64in_MFence, ARM64in_ClrEX, /* ARM64in_V*: scalar ops involving vector registers */ @@ -700,6 +701,9 @@ typedef struct { Int szB; /* 1, 2, 4 or 8 */ } CAS; + struct { + Int szB; /* 4 or 8 */ + } CASP; /* Mem fence. An insn which fences all loads and stores as much as possible before continuing. On ARM64 we emit the sequence "dsb sy ; dmb sy ; isb sy", which is probably @@ -946,6 +950,7 @@ extern ARM64Instr* ARM64Instr_Mul ( HReg dst, HReg argL, HReg argR, extern ARM64Instr* ARM64Instr_LdrEX ( Int szB ); extern ARM64Instr* ARM64Instr_StrEX ( Int szB ); extern ARM64Instr* ARM64Instr_CAS ( Int szB ); +extern ARM64Instr* ARM64Instr_CASP ( Int szB ); extern ARM64Instr* ARM64Instr_MFence ( void ); extern ARM64Instr* ARM64Instr_ClrEX ( void ); extern ARM64Instr* ARM64Instr_VLdStH ( Bool isLoad, HReg sD, HReg rN, diff --git a/VEX/priv/host_arm64_isel.c b/VEX/priv/host_arm64_isel.c index d19b19fcf8..2f19eab814 100644 --- a/VEX/priv/host_arm64_isel.c +++ b/VEX/priv/host_arm64_isel.c @@ -4003,6 +4003,51 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt ) addInstr(env, ARM64Instr_MovI(rOld, rResult)); return; } + else { + /* Paired register CAS, i.e. CASP */ + UChar sz; + IRCAS* cas = stmt->Ist.CAS.details; + IRType ty = typeOfIRExpr(env->type_env, cas->dataLo); + switch (ty) { + case Ity_I64: sz = 8; break; + case Ity_I32: sz = 4; break; + default: goto unhandled_cas; + } + HReg rAddr = iselIntExpr_R(env, cas->addr); + + HReg rExpd0 = iselIntExpr_R(env, cas->expdLo); + vassert(cas->expdHi != NULL); + HReg rExpd1 = iselIntExpr_R(env, cas->expdHi); + + HReg rData0 = iselIntExpr_R(env, cas->dataLo); + vassert(cas->dataHi != NULL); + HReg rData1 = iselIntExpr_R(env, cas->dataHi); + + addInstr(env, ARM64Instr_MovI(hregARM64_X2(), rAddr)); + + addInstr(env, ARM64Instr_MovI(hregARM64_X4(), rExpd0)); + addInstr(env, ARM64Instr_MovI(hregARM64_X5(), rExpd1)); + + addInstr(env, ARM64Instr_MovI(hregARM64_X6(), rData0)); + addInstr(env, ARM64Instr_MovI(hregARM64_X7(), rData1)); + + addInstr(env, ARM64Instr_CASP(sz)); + + HReg rResult0 = hregARM64_X0(); + HReg rResult1 = hregARM64_X1(); + switch (sz) { + case 8: break; + case 4: rResult0 = widen_z_32_to_64(env, rResult0); + rResult1 = widen_z_32_to_64(env, rResult1); + break; + default: vassert(0); + } + HReg rOldLo = lookupIRTemp(env, cas->oldLo); + HReg rOldHi = lookupIRTemp(env, cas->oldHi); + addInstr(env, ARM64Instr_MovI(rOldLo, rResult0)); + addInstr(env, ARM64Instr_MovI(rOldHi, rResult1)); + return; + } unhandled_cas: break; } |