|
From: <sv...@va...> - 2012-10-07 04:03:21
|
florian 2012-10-07 05:00:48 +0100 (Sun, 07 Oct 2012)
New Revision: 13027
Log:
s390: Add a few more test from olden times.
Added files:
trunk/none/tests/s390x/clst.c
trunk/none/tests/s390x/clst.stderr.exp
trunk/none/tests/s390x/clst.stdout.exp
trunk/none/tests/s390x/clst.vgtest
trunk/none/tests/s390x/mvc.c
trunk/none/tests/s390x/mvc.stderr.exp
trunk/none/tests/s390x/mvc.stdout.exp
trunk/none/tests/s390x/mvc.vgtest
trunk/none/tests/s390x/spechelper-algr.c
trunk/none/tests/s390x/spechelper-algr.stderr.exp
trunk/none/tests/s390x/spechelper-algr.stdout.exp
trunk/none/tests/s390x/spechelper-algr.vgtest
trunk/none/tests/s390x/spechelper-alr.c
trunk/none/tests/s390x/spechelper-alr.stderr.exp
trunk/none/tests/s390x/spechelper-alr.stdout.exp
trunk/none/tests/s390x/spechelper-alr.vgtest
trunk/none/tests/s390x/spechelper-clr.c
trunk/none/tests/s390x/spechelper-clr.stderr.exp
trunk/none/tests/s390x/spechelper-clr.stdout.exp
trunk/none/tests/s390x/spechelper-clr.vgtest
trunk/none/tests/s390x/spechelper-cr.c
trunk/none/tests/s390x/spechelper-cr.stderr.exp
trunk/none/tests/s390x/spechelper-cr.stdout.exp
trunk/none/tests/s390x/spechelper-cr.vgtest
trunk/none/tests/s390x/spechelper-icm-1.c
trunk/none/tests/s390x/spechelper-icm-1.stderr.exp
trunk/none/tests/s390x/spechelper-icm-1.stdout.exp
trunk/none/tests/s390x/spechelper-icm-1.vgtest
trunk/none/tests/s390x/spechelper-icm-2.c
trunk/none/tests/s390x/spechelper-icm-2.stderr.exp
trunk/none/tests/s390x/spechelper-icm-2.stdout.exp
trunk/none/tests/s390x/spechelper-icm-2.vgtest
trunk/none/tests/s390x/spechelper-ltr.c
trunk/none/tests/s390x/spechelper-ltr.stderr.exp
trunk/none/tests/s390x/spechelper-ltr.stdout.exp
trunk/none/tests/s390x/spechelper-ltr.vgtest
trunk/none/tests/s390x/spechelper-or.c
trunk/none/tests/s390x/spechelper-or.stderr.exp
trunk/none/tests/s390x/spechelper-or.stdout.exp
trunk/none/tests/s390x/spechelper-or.vgtest
trunk/none/tests/s390x/spechelper-slgr.c
trunk/none/tests/s390x/spechelper-slgr.stderr.exp
trunk/none/tests/s390x/spechelper-slgr.stdout.exp
trunk/none/tests/s390x/spechelper-slgr.vgtest
trunk/none/tests/s390x/spechelper-slr.c
trunk/none/tests/s390x/spechelper-slr.stderr.exp
trunk/none/tests/s390x/spechelper-slr.stdout.exp
trunk/none/tests/s390x/spechelper-slr.vgtest
trunk/none/tests/s390x/spechelper-tm.c
trunk/none/tests/s390x/spechelper-tm.stderr.exp
trunk/none/tests/s390x/spechelper-tm.stdout.exp
trunk/none/tests/s390x/spechelper-tm.vgtest
trunk/none/tests/s390x/spechelper-tmll.c
trunk/none/tests/s390x/spechelper-tmll.stderr.exp
trunk/none/tests/s390x/spechelper-tmll.stdout.exp
trunk/none/tests/s390x/spechelper-tmll.vgtest
trunk/none/tests/s390x/svc.h
trunk/none/tests/s390x/test_clone.c
trunk/none/tests/s390x/test_clone.stderr.exp
trunk/none/tests/s390x/test_clone.stdout.exp
trunk/none/tests/s390x/test_clone.vgtest
trunk/none/tests/s390x/test_fork.c
trunk/none/tests/s390x/test_fork.stderr.exp
trunk/none/tests/s390x/test_fork.stdout.exp
trunk/none/tests/s390x/test_fork.vgtest
trunk/none/tests/s390x/test_sig.c
trunk/none/tests/s390x/test_sig.stderr.exp
trunk/none/tests/s390x/test_sig.stdout.exp
trunk/none/tests/s390x/test_sig.vgtest
Modified directories:
trunk/none/tests/s390x/
Modified files:
trunk/none/tests/s390x/Makefile.am
trunk/none/tests/s390x/test.h
Modified: trunk/none/tests/s390x/
Added: trunk/none/tests/s390x/spechelper-alr.vgtest (+1 -0)
===================================================================
--- trunk/none/tests/s390x/spechelper-alr.vgtest 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/spechelper-alr.vgtest 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1 @@
+prog: spechelper-alr
Property changed: trunk/none/tests/s390x (+0 -0)
___________________________________________________________________
Name: svn:ignore
- .deps
add
add_EI
add_GE
allexec
and
and_EI
clc
clcle
cvb
cvd
div
ex_clone
ex_sig
flogr
icm
insert
insert_EI
lam_stam
lpr
Makefile
Makefile.in
mul
mul_GE
mvst
or
or_EI
srst
sub
sub_EI
tcxb
xc
xor
xor_EI
stck
stcke
stckf
op_exception
fgx
condloadstore
fold_And16
stfle
op00
cksm
clcl
mvcl
troo
trot
trto
trtt
tr
tre
clrj
clgrj
crj
cgrj
clij
clgij
cij
cgij
cs
csg
cds
cdsg
cu21
cu21_1
cu24
cu24_1
cu42
cu12
cu12_1
cu14
cu14_1
cu41
ecag
fpext
fpext_warn
fpconv
rounding-1
rounding-2
rounding-3
rounding-4
rounding-5
bfp-1
bfp-2
bfp-3
bfp-4
srnm
srnmb
comp-1
comp-2
ex
exrl
tm
tmll
stmg
+ .deps
add
add_EI
add_GE
allexec
and
and_EI
clc
clcle
cvb
cvd
div
ex_clone
ex_sig
flogr
icm
insert
insert_EI
lam_stam
lpr
Makefile
Makefile.in
mul
mul_GE
mvst
or
or_EI
srst
sub
sub_EI
tcxb
xc
xor
xor_EI
stck
stcke
stckf
op_exception
fgx
condloadstore
fold_And16
stfle
op00
cksm
clcl
mvcl
troo
trot
trto
trtt
tr
tre
clrj
clgrj
crj
cgrj
clij
clgij
cij
cgij
cs
csg
cds
cdsg
cu21
cu21_1
cu24
cu24_1
cu42
cu12
cu12_1
cu14
cu14_1
cu41
ecag
fpext
fpext_warn
fpconv
rounding-1
rounding-2
rounding-3
rounding-4
rounding-5
bfp-1
bfp-2
bfp-3
bfp-4
srnm
srnmb
comp-1
comp-2
ex
exrl
tm
tmll
stmg
test_sig
test_clone
test_fork
clst
mvc
spechelper-algr
spechelper-tmll
spechelper-icm-1
spechelper-icm-2
spechelper-cr
spechelper-ltr
spechelper-alr
spechelper-clr
spechelper-slr
spechelper-slgr
spechelper-or
spechelper-tm
Added: trunk/none/tests/s390x/spechelper-or.vgtest (+1 -0)
===================================================================
--- trunk/none/tests/s390x/spechelper-or.vgtest 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/spechelper-or.vgtest 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1 @@
+prog: spechelper-or
Added: trunk/none/tests/s390x/mvc.stderr.exp (+2 -0)
===================================================================
--- trunk/none/tests/s390x/mvc.stderr.exp 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/mvc.stderr.exp 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1,2 @@
+
+
Added: trunk/none/tests/s390x/spechelper-icm-1.vgtest (+1 -0)
===================================================================
--- trunk/none/tests/s390x/spechelper-icm-1.vgtest 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/spechelper-icm-1.vgtest 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1 @@
+prog: spechelper-icm-1
Added: trunk/none/tests/s390x/test_sig.stderr.exp (+2 -0)
===================================================================
--- trunk/none/tests/s390x/test_sig.stderr.exp 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/test_sig.stderr.exp 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1,2 @@
+
+
Added: trunk/none/tests/s390x/mvc.c (+62 -0)
===================================================================
--- trunk/none/tests/s390x/mvc.c 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/mvc.c 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1,62 @@
+#include <stdio.h>
+#include <assert.h>
+#include <string.h>
+
+char buffer[] = "0123456789abcdefXXXXX";
+char target[] = "---------------------";
+char overlap[]= "012345678901234567890";
+char full[300];
+
+int main(void)
+{
+ int i;
+
+ /* Normal copy */
+ printf("------- Copy 17 bytes from BUFFER to TARGET\n");
+ printf("before: buffer = |%s|\n", buffer);
+ printf("before: target = |%s|\n", target);
+ asm volatile( "mvc 0(17,%0),0(%1)\n"
+ ::"a" (target),"a" (buffer): "memory");
+ printf("after: buffer = |%s|\n", buffer);
+ printf("after: target = |%s|\n", target);
+ printf("\n");
+
+ /* Destructive overlap #1 */
+ printf("------- Destructive overlap #1\n");
+ printf("before: |%s|\n", overlap);
+ asm volatile( "mvc 1(17,%0),0(%1)\n"
+ ::"a" (overlap),"a" (overlap): "memory");
+ printf("after: |%s|\n", overlap);
+
+ /* Destructive overlap #2 */
+ printf("------- Destructive overlap #2\n");
+ memset(target, '-', sizeof target - 1); // restore initial state
+ printf("before: target = |%s|\n", target);
+ asm volatile( "mvi 0(%0),'x'\n\t" // target[1] = 'x'
+ "mvc 1(2,%0),0(%0)\n\t" // target[2:3] = target[1]
+ :: "a" (target+1));
+ printf("after: target = |%s|\n", target);
+
+ /* Destructive overlap #3 */
+ printf("------- Destructive overlap #3 (max length)\n");
+ memset(full, '-', sizeof full);
+ full[0] = 'x';
+ asm volatile( "mvc 1(256,%0),0(%0)\n\t" // full[1:256] = full[0]
+ :: "a" (full));
+ /* Verify: the first 256+1 characters should be 'x' followed by '-' */
+ for (i = 0; i <= 256; ++i)
+ assert(full[i] == 'x');
+ for ( ; i < sizeof full; ++i)
+ assert(full[i] == '-');
+ printf("\n");
+
+ /* Non-destructive overlap */
+ printf("------- Non-destructive overlap buf[0:4] = buf[10:14]\n");
+ char buf[] = "0123456789abcde";
+ printf("before: buf = |%s|\n", buf);
+ asm volatile( "mvc 0(5,%0),10(%1)\n"
+ ::"a" (buf),"a" (buf): "memory");
+ printf("after: buf = |%s|\n", buf);
+
+ return 0;
+}
Added: trunk/none/tests/s390x/spechelper-ltr.c (+120 -0)
===================================================================
--- trunk/none/tests/s390x/spechelper-ltr.c 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/spechelper-ltr.c 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1,120 @@
+#include <stdio.h>
+
+#define branch(mask,_v1) \
+ ({ \
+ unsigned char taken; \
+ unsigned b1 = _v1; \
+ asm volatile( " ltr %[b1],%[b1]\n\t" \
+ " brc " #mask " ,1f\n\t" \
+ " mvi %[taken],0\n\t" \
+ " j 0f\n\t" \
+ "1: mvi %[taken],1\n\t" \
+ "0: bcr 0,0 /* nop */\n\t" \
+ : [taken] "=Q" (taken), [b1] "+d"(b1) \
+ : \
+ : "cc"); \
+ taken; \
+ })
+
+void
+ltr_1(void)
+{
+ int wrong, ok, v1;
+
+ printf("Test #1 value = 0\n");
+
+ v1 = 0;
+ wrong = ok = 0;
+ if (branch(0, v1)) ++wrong; else ++ok;
+ if (branch(1, v1)) ++wrong; else ++ok;
+ if (branch(2, v1)) ++wrong; else ++ok;
+ if (branch(3, v1)) ++wrong; else ++ok;
+ if (branch(4, v1)) ++wrong; else ++ok;
+ if (branch(5, v1)) ++wrong; else ++ok;
+ if (branch(6, v1)) ++wrong; else ++ok;
+ if (branch(7, v1)) ++wrong; else ++ok;
+ if (branch(8, v1)) ++ok; else ++wrong;
+ if (branch(9, v1)) ++ok; else ++wrong;
+ if (branch(10, v1)) ++ok; else ++wrong;
+ if (branch(11, v1)) ++ok; else ++wrong;
+ if (branch(12, v1)) ++ok; else ++wrong;
+ if (branch(13, v1)) ++ok; else ++wrong;
+ if (branch(14, v1)) ++ok; else ++wrong;
+ if (branch(15, v1)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 16)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+void
+ltr_2(void)
+{
+ int wrong, ok, v1;
+
+ printf("Test #2 value > 0\n");
+ v1 = 42;
+ wrong = ok = 0;
+ if (branch(0, v1)) ++wrong; else ++ok;
+ if (branch(1, v1)) ++wrong; else ++ok;
+ if (branch(2, v1)) ++ok; else ++wrong;
+ if (branch(3, v1)) ++ok; else ++wrong;
+ if (branch(4, v1)) ++wrong; else ++ok;
+ if (branch(5, v1)) ++wrong; else ++ok;
+ if (branch(6, v1)) ++ok; else ++wrong;
+ if (branch(7, v1)) ++ok; else ++wrong;
+ if (branch(8, v1)) ++wrong; else ++ok;
+ if (branch(9, v1)) ++wrong; else ++ok;
+ if (branch(10, v1)) ++ok; else ++wrong;
+ if (branch(11, v1)) ++ok; else ++wrong;
+ if (branch(12, v1)) ++wrong; else ++ok;
+ if (branch(13, v1)) ++wrong; else ++ok;
+ if (branch(14, v1)) ++ok; else ++wrong;
+ if (branch(15, v1)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 16)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+void
+ltr_3(void)
+{
+ int wrong, ok, v1;
+
+ printf("Test #3 value < 0\n");
+
+ v1 = -100;
+ wrong = ok = 0;
+ if (branch(0, v1)) ++wrong; else ++ok;
+ if (branch(1, v1)) ++wrong; else ++ok;
+ if (branch(2, v1)) ++wrong; else ++ok;
+ if (branch(3, v1)) ++wrong; else ++ok;
+ if (branch(4, v1)) ++ok; else ++wrong;
+ if (branch(5, v1)) ++ok; else ++wrong;
+ if (branch(6, v1)) ++ok; else ++wrong;
+ if (branch(7, v1)) ++ok; else ++wrong;
+ if (branch(8, v1)) ++wrong; else ++ok;
+ if (branch(9, v1)) ++wrong; else ++ok;
+ if (branch(10, v1)) ++wrong; else ++ok;
+ if (branch(11, v1)) ++wrong; else ++ok;
+ if (branch(12, v1)) ++ok; else ++wrong;
+ if (branch(13, v1)) ++ok; else ++wrong;
+ if (branch(14, v1)) ++ok; else ++wrong;
+ if (branch(15, v1)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 16)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+int main()
+{
+ ltr_1();
+ ltr_2();
+ ltr_3();
+ return 0;
+}
Added: trunk/none/tests/s390x/mvc.vgtest (+1 -0)
===================================================================
--- trunk/none/tests/s390x/mvc.vgtest 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/mvc.vgtest 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1 @@
+prog: mvc
Added: trunk/none/tests/s390x/spechelper-slgr.c (+138 -0)
===================================================================
--- trunk/none/tests/s390x/spechelper-slgr.c 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/spechelper-slgr.c 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1,138 @@
+#include <stdio.h>
+
+#define branch(mask,_v1,_v2) \
+ ({ \
+ unsigned char taken; \
+ unsigned long b1 = _v1; \
+ unsigned long b2 = _v2; \
+ asm volatile(" slgr %[b1],%[b2]\n\t" \
+ " brc " #mask " ,1f\n\t" \
+ " mvi %[taken],0\n\t" \
+ " j 0f\n\t" \
+ "1: mvi %[taken],1\n\t" \
+ "0: bcr 0,0 /* nop */\n\t" \
+ : [taken] "=Q" (taken), [b1] "+d"(b1) \
+ : [b2] "d"(b2) \
+ : "cc"); \
+ taken; \
+ })
+
+
+/* cc = (op1 == op2) ? 2
+ : (op1 > op2) ? 3 : 1; */
+
+
+void
+slgr_equal(void)
+{
+ unsigned long v1, v2;
+ int wrong, ok;
+
+ printf("Test #1 op1 == op2\n");
+
+ v1 = v2 = 42;
+ wrong = ok = 0;
+
+ if (branch(0, v1, v2)) ++wrong; else ++ok;
+ if (branch(1, v1, v2)) ++wrong; else ++ok;
+ if (branch(2, v1, v2)) ++ok; else ++wrong;
+ if (branch(3, v1, v2)) ++ok; else ++wrong;
+ if (branch(4, v1, v2)) ++wrong; else ++ok;
+ if (branch(5, v1, v2)) ++wrong; else ++ok;
+ if (branch(6, v1, v2)) ++ok; else ++wrong;
+ if (branch(7, v1, v2)) ++ok; else ++wrong;
+ if (branch(8, v1, v2)) ++wrong; else ++ok;
+ if (branch(9, v1, v2)) ++wrong; else ++ok;
+ if (branch(10, v1, v2)) ++ok; else ++wrong;
+ if (branch(11, v1, v2)) ++ok; else ++wrong;
+ if (branch(12, v1, v2)) ++wrong; else ++ok;
+ if (branch(13, v1, v2)) ++wrong; else ++ok;
+ if (branch(14, v1, v2)) ++ok; else ++wrong;
+ if (branch(15, v1, v2)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 16)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+void
+slgr_less(void)
+{
+ unsigned long v1, v2;
+ int wrong, ok;
+
+ printf("Test #2 op1 < op2\n");
+
+ v1 = 100;
+ v2 = 1000;
+
+ wrong = ok = 0;
+
+ if (branch(0, v1, v2)) ++wrong; else ++ok;
+ if (branch(1, v1, v2)) ++wrong; else ++ok;
+ if (branch(2, v1, v2)) ++wrong; else ++ok;
+ if (branch(3, v1, v2)) ++wrong; else ++ok;
+ if (branch(4, v1, v2)) ++ok; else ++wrong;
+ if (branch(5, v1, v2)) ++ok; else ++wrong;
+ if (branch(6, v1, v2)) ++ok; else ++wrong;
+ if (branch(7, v1, v2)) ++ok; else ++wrong;
+ if (branch(8, v1, v2)) ++wrong; else ++ok;
+ if (branch(9, v1, v2)) ++wrong; else ++ok;
+ if (branch(10, v1, v2)) ++wrong; else ++ok;
+ if (branch(11, v1, v2)) ++wrong; else ++ok;
+ if (branch(12, v1, v2)) ++ok; else ++wrong;
+ if (branch(13, v1, v2)) ++ok; else ++wrong;
+ if (branch(14, v1, v2)) ++ok; else ++wrong;
+ if (branch(15, v1, v2)) ++ok; else ++wrong;
+
+ if (wrong != 0 /* || ok != 16 */)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+void
+slgr_greater(void)
+{
+ unsigned long v1, v2;
+ int wrong, ok;
+
+ printf("Test #3 op1 > op2\n");
+
+ v1 = 10000;
+ v2 = 1000;
+
+ wrong = ok = 0;
+
+ if (branch(0, v1, v2)) ++wrong; else ++ok;
+ if (branch(1, v1, v2)) ++ok; else ++wrong;
+ if (branch(2, v1, v2)) ++wrong; else ++ok;
+ if (branch(3, v1, v2)) ++ok; else ++wrong;
+ if (branch(4, v1, v2)) ++wrong; else ++ok;
+ if (branch(5, v1, v2)) ++ok; else ++wrong;
+ if (branch(6, v1, v2)) ++wrong; else ++ok;
+ if (branch(7, v1, v2)) ++ok; else ++wrong;
+ if (branch(8, v1, v2)) ++wrong; else ++ok;
+ if (branch(9, v1, v2)) ++ok; else ++wrong;
+ if (branch(10, v1, v2)) ++wrong; else ++ok;
+ if (branch(11, v1, v2)) ++ok; else ++wrong;
+ if (branch(12, v1, v2)) ++wrong; else ++ok;
+ if (branch(13, v1, v2)) ++ok; else ++wrong;
+ if (branch(14, v1, v2)) ++wrong; else ++ok;
+ if (branch(15, v1, v2)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 16)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+int main()
+{
+ slgr_equal();
+ slgr_less();
+ slgr_greater();
+
+ return 0;
+}
Added: trunk/none/tests/s390x/clst.vgtest (+1 -0)
===================================================================
--- trunk/none/tests/s390x/clst.vgtest 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/clst.vgtest 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1 @@
+prog: clst
Added: trunk/none/tests/s390x/spechelper-clr.stdout.exp (+6 -0)
===================================================================
--- trunk/none/tests/s390x/spechelper-clr.stdout.exp 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/spechelper-clr.stdout.exp 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1,6 @@
+Test #1 op1 == op2
+OK
+Test #2 op1 > op2
+OK
+Test #3 op1 < op2
+OK
Added: trunk/none/tests/s390x/spechelper-clr.stderr.exp (+2 -0)
===================================================================
--- trunk/none/tests/s390x/spechelper-clr.stderr.exp 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/spechelper-clr.stderr.exp 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1,2 @@
+
+
Added: trunk/none/tests/s390x/test_clone.stderr.exp (+3 -0)
===================================================================
--- trunk/none/tests/s390x/test_clone.stderr.exp 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/test_clone.stderr.exp 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1,3 @@
+
+
+
Added: trunk/none/tests/s390x/clst.c (+53 -0)
===================================================================
--- trunk/none/tests/s390x/clst.c 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/clst.c 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1,53 @@
+#include <stdio.h>
+#include <ctype.h>
+#include "test.h"
+
+#define LOOPBACK "jo 0b \n\t"
+
+typedef struct {
+ const char *str1;
+ const char *str2;
+ int cc;
+} clst_t;
+
+static clst_t
+do_clst(const char *__string1, const char *__string2, char __end)
+{
+ register char end asm ("0") = __end;
+ register const char *string1 asm ("2") = __string1;
+ register const char *string2 asm ("4") = __string2;
+
+ asm volatile( "0: clst 2,4\n\t"
+ LOOPBACK
+ :"+d" (string1), "+d" (string2) :"d" (end): "cc");
+
+ return (clst_t) { .str1 = string1, .str2 = string2, .cc = get_cc() };
+}
+
+void
+clst(const char *str1, const char *str2, int sentinel)
+{
+ clst_t res;
+
+ printf("comparing: %s with %s sentinel = %d", str1, str2, sentinel);
+ if (isprint(sentinel))
+ printf(" (%c)", sentinel);
+ printf("\n");
+ res = do_clst(str1, str2, sentinel);
+ printf("str1 = %s\nstr2 = %s\ncc = %d\n", res.str1, res.str2, res.cc);
+ printf("\n");
+}
+
+int main(void)
+{
+ clst("lower123", "lowerabc", '\0');
+ clst("higher234", "higher123", '\0');
+ clst("equal", "equal", '\0');
+
+ clst("equal", "equallong", '\0');
+ clst("equallong", "equal", '\0');
+
+ clst("lower1", "lower2", 'w'); // will compare equal
+
+ return 0;
+}
Added: trunk/none/tests/s390x/spechelper-algr.c (+168 -0)
===================================================================
--- trunk/none/tests/s390x/spechelper-algr.c 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/spechelper-algr.c 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1,168 @@
+#include <stdio.h>
+
+#define branch(mask,_v1,_v2) \
+ ({ \
+ unsigned char taken; \
+ unsigned long b1 = _v1; \
+ unsigned long b2 = _v2; \
+ asm volatile( " algr %[b1],%[b2]\n\t" \
+ " brc " #mask " ,1f\n\t" \
+ " mvi %[taken],0\n\t" \
+ " j 0f\n\t" \
+ "1: mvi %[taken],1\n\t" \
+ "0: bcr 0,0 /* nop */\n\t" \
+ : [taken] "=Q" (taken), [b1] "+d"(b1) \
+ : [b2] "d"(b2) \
+ : "cc"); \
+ taken; \
+ })
+
+
+void
+algr_cc_0(void)
+{
+ unsigned long v1, v2;
+ int wrong, ok;
+
+ printf("Test #1 cc == 0\n");
+
+ v1 = v2 = 0;
+ wrong = ok = 0;
+ if (branch(0, v1, v2)) ++wrong; else ++ok;
+ if (branch(1, v1, v2)) ++wrong; else ++ok;
+ if (branch(2, v1, v2)) ++wrong; else ++ok;
+ if (branch(3, v1, v2)) ++wrong; else ++ok;
+ if (branch(4, v1, v2)) ++wrong; else ++ok;
+ if (branch(5, v1, v2)) ++wrong; else ++ok;
+ if (branch(6, v1, v2)) ++wrong; else ++ok;
+ if (branch(7, v1, v2)) ++wrong; else ++ok;
+ if (branch(8, v1, v2)) ++ok; else ++wrong;
+ if (branch(9, v1, v2)) ++ok; else ++wrong;
+ if (branch(10, v1, v2)) ++ok; else ++wrong;
+ if (branch(11, v1, v2)) ++ok; else ++wrong;
+ if (branch(12, v1, v2)) ++ok; else ++wrong;
+ if (branch(13, v1, v2)) ++ok; else ++wrong;
+ if (branch(14, v1, v2)) ++ok; else ++wrong;
+ if (branch(15, v1, v2)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 16)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+void
+algr_cc_1(void)
+{
+ unsigned long v1, v2;
+ int wrong, ok;
+
+ printf("Test #2 cc == 1\n");
+
+ v1 = v2 = 42;
+ wrong = ok = 0;
+
+ if (branch(0, v1, v2)) ++wrong; else ++ok;
+ if (branch(1, v1, v2)) ++wrong; else ++ok;
+ if (branch(2, v1, v2)) ++wrong; else ++ok;
+ if (branch(3, v1, v2)) ++wrong; else ++ok;
+ if (branch(4, v1, v2)) ++ok; else ++wrong;
+ if (branch(5, v1, v2)) ++ok; else ++wrong;
+ if (branch(6, v1, v2)) ++ok; else ++wrong;
+ if (branch(7, v1, v2)) ++ok; else ++wrong;
+ if (branch(8, v1, v2)) ++wrong; else ++ok;
+ if (branch(9, v1, v2)) ++wrong; else ++ok;
+ if (branch(10, v1, v2)) ++wrong; else ++ok;
+ if (branch(11, v1, v2)) ++wrong; else ++ok;
+ if (branch(12, v1, v2)) ++ok; else ++wrong;
+ if (branch(13, v1, v2)) ++ok; else ++wrong;
+ if (branch(14, v1, v2)) ++ok; else ++wrong;
+ if (branch(15, v1, v2)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 16)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+void
+algr_cc_2(void)
+{
+ unsigned long v1, v2;
+ int wrong, ok;
+
+ printf("Test #3 cc == 2\n");
+
+ v1 = ~0ULL;
+ v2 = 1;
+
+ wrong = ok = 0;
+
+ if (branch(0, v1, v2)) ++wrong; else ++ok;
+ if (branch(1, v1, v2)) ++wrong; else ++ok;
+ if (branch(2, v1, v2)) ++ok; else ++wrong;
+ if (branch(3, v1, v2)) ++ok; else ++wrong;
+ if (branch(4, v1, v2)) ++wrong; else ++ok;
+ if (branch(5, v1, v2)) ++wrong; else ++ok;
+ if (branch(6, v1, v2)) ++ok; else ++wrong;
+ if (branch(7, v1, v2)) ++ok; else ++wrong;
+ if (branch(8, v1, v2)) ++wrong; else ++ok;
+ if (branch(9, v1, v2)) ++wrong; else ++ok;
+ if (branch(10, v1, v2)) ++ok; else ++wrong;
+ if (branch(11, v1, v2)) ++ok; else ++wrong;
+ if (branch(12, v1, v2)) ++wrong; else ++ok;
+ if (branch(13, v1, v2)) ++wrong; else ++ok;
+ if (branch(14, v1, v2)) ++ok; else ++wrong;
+ if (branch(15, v1, v2)) ++ok; else ++wrong;
+
+ if (wrong != 0 /* || ok != 16 */)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+void
+algr_cc_3(void)
+{
+ unsigned long v1, v2;
+ int wrong, ok;
+
+ printf("Test #4 cc == 3\n");
+
+ v1 = ~0ULL;
+ v2 = 100;
+
+ wrong = ok = 0;
+
+ if (branch(0, v1, v2)) ++wrong; else ++ok;
+ if (branch(1, v1, v2)) ++ok; else ++wrong;
+ if (branch(2, v1, v2)) ++wrong; else ++ok;
+ if (branch(3, v1, v2)) ++ok; else ++wrong;
+ if (branch(4, v1, v2)) ++wrong; else ++ok;
+ if (branch(5, v1, v2)) ++ok; else ++wrong;
+ if (branch(6, v1, v2)) ++wrong; else ++ok;
+ if (branch(7, v1, v2)) ++ok; else ++wrong;
+ if (branch(8, v1, v2)) ++wrong; else ++ok;
+ if (branch(9, v1, v2)) ++ok; else ++wrong;
+ if (branch(10, v1, v2)) ++wrong; else ++ok;
+ if (branch(11, v1, v2)) ++ok; else ++wrong;
+ if (branch(12, v1, v2)) ++wrong; else ++ok;
+ if (branch(13, v1, v2)) ++ok; else ++wrong;
+ if (branch(14, v1, v2)) ++wrong; else ++ok;
+ if (branch(15, v1, v2)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 16)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+int main()
+{
+ algr_cc_0();
+ algr_cc_1();
+ algr_cc_2();
+ algr_cc_3();
+
+ return 0;
+}
Added: trunk/none/tests/s390x/spechelper-slr.stdout.exp (+6 -0)
===================================================================
--- trunk/none/tests/s390x/spechelper-slr.stdout.exp 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/spechelper-slr.stdout.exp 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1,6 @@
+Test #1 op1 == op2
+OK
+Test #2 op1 < op2
+OK
+Test #3 op1 > op2
+OK
Added: trunk/none/tests/s390x/spechelper-icm-1.stderr.exp (+2 -0)
===================================================================
--- trunk/none/tests/s390x/spechelper-icm-1.stderr.exp 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/spechelper-icm-1.stderr.exp 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1,2 @@
+
+
Added: trunk/none/tests/s390x/spechelper-tmll.stdout.exp (+12 -0)
===================================================================
--- trunk/none/tests/s390x/spechelper-tmll.stdout.exp 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/spechelper-tmll.stdout.exp 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1,12 @@
+Test #1 mask == 0, value == ~0 --> cc == 0
+OK
+Test #2 mask == 0xFFF, value == 0 --> cc == 0
+OK
+Test #3 mask == 0xFFFF, value == 0xFFFF --> cc == 3
+OK
+Test #4 mask == 0x8000, value == 0x8000 --> cc == 3
+OK
+Test #5 mask == 0xF000, value == 0x9000 --> cc == 2
+OK
+Test #6 mask == 0xF000, value == 0x3000 --> cc == 1
+OK
Added: trunk/none/tests/s390x/test_sig.vgtest (+1 -0)
===================================================================
--- trunk/none/tests/s390x/test_sig.vgtest 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/test_sig.vgtest 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1 @@
+prog: test_sig
Added: trunk/none/tests/s390x/spechelper-tm.c (+233 -0)
===================================================================
--- trunk/none/tests/s390x/spechelper-tm.c 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/spechelper-tm.c 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1,233 @@
+#include <stdio.h>
+
+#define branch(mask,i2,_v1) \
+ ({ \
+ unsigned char taken; \
+ unsigned char v1 = _v1; \
+ asm volatile( " tm %[v]," #i2 "\n\t" \
+ " brc " #mask " ,1f\n\t" \
+ " mvi %[taken],0\n\t" \
+ " j 0f\n\t" \
+ "1: mvi %[taken],1\n\t" \
+ "0: bcr 0,0 /* nop */\n\t" \
+ : [taken] "=Q" (taken) \
+ : [v] "Q"(v1) \
+ : "cc"); \
+ taken; \
+ })
+
+void
+tm_mask_0(void)
+{
+ int wrong, ok;
+ unsigned char v;
+
+ printf("Test #1 mask == 0, value == ~0 --> cc == 0\n");
+
+ v = ~0;
+ wrong = ok = 0;
+
+ if (branch(0, 0, v)) ++wrong; else ++ok;
+ if (branch(1, 0, v)) ++wrong; else ++ok;
+ if (branch(2, 0, v)) ++wrong; else ++ok;
+ if (branch(3, 0, v)) ++wrong; else ++ok;
+ if (branch(4, 0, v)) ++wrong; else ++ok;
+ if (branch(5, 0, v)) ++wrong; else ++ok;
+ if (branch(6, 0, v)) ++wrong; else ++ok;
+ if (branch(7, 0, v)) ++wrong; else ++ok;
+ if (branch(8, 0, v)) ++ok; else ++wrong;
+ if (branch(9, 0, v)) ++ok; else ++wrong;
+ if (branch(10, 0, v)) ++ok; else ++wrong;
+ if (branch(11, 0, v)) ++ok; else ++wrong;
+ if (branch(12, 0, v)) ++ok; else ++wrong;
+ if (branch(13, 0, v)) ++ok; else ++wrong;
+ if (branch(14, 0, v)) ++ok; else ++wrong;
+ if (branch(15, 0, v)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 16)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+void
+tm_value_0(void)
+{
+ int wrong, ok;
+ unsigned char v;
+
+ printf("Test #2 mask == 0xFF, value == 0 --> cc == 0\n");
+
+ v = 0;
+ wrong = ok = 0;
+
+ if (branch(0, 0xFF, v)) ++wrong; else ++ok;
+ if (branch(1, 0xFF, v)) ++wrong; else ++ok;
+ if (branch(2, 0xFF, v)) ++wrong; else ++ok;
+ if (branch(3, 0xFF, v)) ++wrong; else ++ok;
+ if (branch(4, 0xFF, v)) ++wrong; else ++ok;
+ if (branch(5, 0xFF, v)) ++wrong; else ++ok;
+ if (branch(6, 0xFF, v)) ++wrong; else ++ok;
+ if (branch(7, 0xFF, v)) ++wrong; else ++ok;
+ if (branch(8, 0xFF, v)) ++ok; else ++wrong;
+ if (branch(9, 0xFF, v)) ++ok; else ++wrong;
+ if (branch(10, 0xFF, v)) ++ok; else ++wrong;
+ if (branch(11, 0xFF, v)) ++ok; else ++wrong;
+ if (branch(12, 0xFF, v)) ++ok; else ++wrong;
+ if (branch(13, 0xFF, v)) ++ok; else ++wrong;
+ if (branch(14, 0xFF, v)) ++ok; else ++wrong;
+ if (branch(15, 0xFF, v)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 16)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+void
+tm_all_selected_bits_set_1(void)
+{
+ int wrong, ok;
+ unsigned char v;
+
+ printf("Test #3 mask == 0xFF, value == 0xFF --> cc == 3\n");
+
+ v = 0xFF;
+ wrong = ok = 0;
+
+ if (branch(0, 0xFF, v)) ++wrong; else ++ok;
+ if (branch(1, 0xFF, v)) ++ok; else ++wrong;
+ if (branch(2, 0xFF, v)) ++wrong; else ++ok;
+ if (branch(3, 0xFF, v)) ++ok; else ++wrong;
+ if (branch(4, 0xFF, v)) ++wrong; else ++ok;
+ if (branch(5, 0xFF, v)) ++ok; else ++wrong;
+ if (branch(6, 0xFF, v)) ++wrong; else ++ok;
+ if (branch(7, 0xFF, v)) ++ok; else ++wrong;
+ if (branch(8, 0xFF, v)) ++wrong; else ++ok;
+ if (branch(9, 0xFF, v)) ++ok; else ++wrong;
+ if (branch(10, 0xFF, v)) ++wrong; else ++ok;
+ if (branch(11, 0xFF, v)) ++ok; else ++wrong;
+ if (branch(12, 0xFF, v)) ++wrong; else ++ok;
+ if (branch(13, 0xFF, v)) ++ok; else ++wrong;
+ if (branch(14, 0xFF, v)) ++wrong; else ++ok;
+ if (branch(15, 0xFF, v)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 16)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+void
+tm_all_selected_bits_set_2(void)
+{
+ int wrong, ok;
+ unsigned char v;
+
+ printf("Test #4 mask == 0x80, value == 0x80 --> cc == 3\n");
+
+ v = 0x80;
+ wrong = ok = 0;
+
+ if (branch(0, 0x80, v)) ++wrong; else ++ok;
+ if (branch(1, 0x80, v)) ++ok; else ++wrong;
+ if (branch(2, 0x80, v)) ++wrong; else ++ok;
+ if (branch(3, 0x80, v)) ++ok; else ++wrong;
+ if (branch(4, 0x80, v)) ++wrong; else ++ok;
+ if (branch(5, 0x80, v)) ++ok; else ++wrong;
+ if (branch(6, 0x80, v)) ++wrong; else ++ok;
+ if (branch(7, 0x80, v)) ++ok; else ++wrong;
+ if (branch(8, 0x80, v)) ++wrong; else ++ok;
+ if (branch(9, 0x80, v)) ++ok; else ++wrong;
+ if (branch(10, 0x80, v)) ++wrong; else ++ok;
+ if (branch(11, 0x80, v)) ++ok; else ++wrong;
+ if (branch(12, 0x80, v)) ++wrong; else ++ok;
+ if (branch(13, 0x80, v)) ++ok; else ++wrong;
+ if (branch(14, 0x80, v)) ++wrong; else ++ok;
+ if (branch(15, 0x80, v)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 16)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+void
+tm_some_selected_bits_set_msb_set(void)
+{
+ int wrong, ok;
+ unsigned char v;
+
+ printf("Test #5 mask == 0xF0, value == 0x90 --> cc == 1\n");
+
+ v = 0x90;
+ wrong = ok = 0;
+
+ if (branch(0, 0xF0, v)) ++wrong; else ++ok;
+ if (branch(1, 0xF0, v)) ++wrong; else ++ok;
+ if (branch(2, 0xF0, v)) ++wrong; else ++ok;
+ if (branch(3, 0xF0, v)) ++wrong; else ++ok;
+ if (branch(4, 0xF0, v)) ++ok; else ++wrong;
+ if (branch(5, 0xF0, v)) ++ok; else ++wrong;
+ if (branch(6, 0xF0, v)) ++ok; else ++wrong;
+ if (branch(7, 0xF0, v)) ++ok; else ++wrong;
+ if (branch(8, 0xF0, v)) ++wrong; else ++ok;
+ if (branch(9, 0xF0, v)) ++wrong; else ++ok;
+ if (branch(10, 0xF0, v)) ++wrong; else ++ok;
+ if (branch(11, 0xF0, v)) ++wrong; else ++ok;
+ if (branch(12, 0xF0, v)) ++ok; else ++wrong;
+ if (branch(13, 0xF0, v)) ++ok; else ++wrong;
+ if (branch(14, 0xF0, v)) ++ok; else ++wrong;
+ if (branch(15, 0xF0, v)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 16)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+void
+tm_some_selected_bits_set_msb_not_set(void)
+{
+ int wrong, ok;
+ unsigned char v;
+
+ printf("Test #6 mask == 0xF0, value == 0x30 --> cc == 1\n");
+
+ v = 0x30;
+ wrong = ok = 0;
+
+ if (branch(0, 0xF0, v)) ++wrong; else ++ok;
+ if (branch(1, 0xF0, v)) ++wrong; else ++ok;
+ if (branch(2, 0xF0, v)) ++wrong; else ++ok;
+ if (branch(3, 0xF0, v)) ++wrong; else ++ok;
+ if (branch(4, 0xF0, v)) ++ok; else ++wrong;
+ if (branch(5, 0xF0, v)) ++ok; else ++wrong;
+ if (branch(6, 0xF0, v)) ++ok; else ++wrong;
+ if (branch(7, 0xF0, v)) ++ok; else ++wrong;
+ if (branch(8, 0xF0, v)) ++wrong; else ++ok;
+ if (branch(9, 0xF0, v)) ++wrong; else ++ok;
+ if (branch(10, 0xF0, v)) ++wrong; else ++ok;
+ if (branch(11, 0xF0, v)) ++wrong; else ++ok;
+ if (branch(12, 0xF0, v)) ++ok; else ++wrong;
+ if (branch(13, 0xF0, v)) ++ok; else ++wrong;
+ if (branch(14, 0xF0, v)) ++ok; else ++wrong;
+ if (branch(15, 0xF0, v)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 16)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+int main()
+{
+ tm_mask_0();
+ tm_value_0();
+ tm_all_selected_bits_set_1();
+ tm_all_selected_bits_set_2();
+ tm_some_selected_bits_set_msb_set();
+ tm_some_selected_bits_set_msb_not_set();
+
+ return 0;
+}
Added: trunk/none/tests/s390x/spechelper-tm.stderr.exp (+2 -0)
===================================================================
--- trunk/none/tests/s390x/spechelper-tm.stderr.exp 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/spechelper-tm.stderr.exp 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1,2 @@
+
+
Added: trunk/none/tests/s390x/spechelper-icm-2.c (+761 -0)
===================================================================
--- trunk/none/tests/s390x/spechelper-icm-2.c 2012-10-06 19:02:46 +01:00 (rev 13026)
+++ trunk/none/tests/s390x/spechelper-icm-2.c 2012-10-07 05:00:48 +01:00 (rev 13027)
@@ -0,0 +1,761 @@
+#include <stdio.h>
+
+#define branch(mask,icmm,_v1) \
+ ({ \
+ unsigned char taken; \
+ unsigned b1 = _v1; \
+ asm volatile( " larl 1, 2f\n\t" \
+ " l 0, 0(1)\n\t" \
+ " icm 0," #icmm",%[b1]\n\t" \
+ " brc " #mask " ,1f\n\t" \
+ " mvi %[taken],0\n\t" \
+ " j 0f\n\t" \
+ "1: mvi %[taken],1\n\t" \
+ " j 0f\n\t" \
+ "2: .long 0xffffffff\n\t" \
+ "0: bcr 0,0 /* nop */\n\t" \
+ : [taken] "=Q" (taken) \
+ : [b1] "Q"(b1) \
+ : "cc", "0","1"); \
+ taken; \
+ })
+
+void
+icm_mask_0(void)
+{
+ int wrong, ok;
+ unsigned v1;
+
+ printf("Test #1 mask == 0, value == 0xFFFFFFFF --> cc == 0\n");
+
+ v1 = 0xFFFFFFFF;
+ wrong = ok = 0;
+
+ if (branch(0, 0, v1)) ++wrong; else ++ok;
+ if (branch(1, 0, v1)) ++wrong; else ++ok;
+ if (branch(2, 0, v1)) ++wrong; else ++ok;
+ if (branch(3, 0, v1)) ++wrong; else ++ok;
+ if (branch(4, 0, v1)) ++wrong; else ++ok;
+ if (branch(5, 0, v1)) ++wrong; else ++ok;
+ if (branch(6, 0, v1)) ++wrong; else ++ok;
+ if (branch(7, 0, v1)) ++wrong; else ++ok;
+ if (branch(8, 0, v1)) ++ok; else ++wrong;
+ if (branch(9, 0, v1)) ++ok; else ++wrong;
+ if (branch(10, 0, v1)) ++ok; else ++wrong;
+ if (branch(11, 0, v1)) ++ok; else ++wrong;
+ if (branch(12, 0, v1)) ++ok; else ++wrong;
+ if (branch(13, 0, v1)) ++ok; else ++wrong;
+ if (branch(14, 0, v1)) ++ok; else ++wrong;
+ if (branch(15, 0, v1)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 16)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+void
+icm_value_0(void)
+{
+ int wrong, ok;
+ unsigned v1;
+
+ printf("Test #2 mask == 0xF, value == 0 --> cc == 0\n");
+
+ v1 = 0;
+ wrong = ok = 0;
+
+ if (branch(0, 15, v1)) ++wrong; else ++ok;
+ if (branch(1, 15, v1)) ++wrong; else ++ok;
+ if (branch(2, 15, v1)) ++wrong; else ++ok;
+ if (branch(3, 15, v1)) ++wrong; else ++ok;
+ if (branch(4, 15, v1)) ++wrong; else ++ok;
+ if (branch(5, 15, v1)) ++wrong; else ++ok;
+ if (branch(6, 15, v1)) ++wrong; else ++ok;
+ if (branch(7, 15, v1)) ++wrong; else ++ok;
+ if (branch(8, 15, v1)) ++ok; else ++wrong;
+ if (branch(9, 15, v1)) ++ok; else ++wrong;
+ if (branch(10, 15, v1)) ++ok; else ++wrong;
+ if (branch(11, 15, v1)) ++ok; else ++wrong;
+ if (branch(12, 15, v1)) ++ok; else ++wrong;
+ if (branch(13, 15, v1)) ++ok; else ++wrong;
+ if (branch(14, 15, v1)) ++ok; else ++wrong;
+ if (branch(15, 15, v1)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 16)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+/* loads one byte */
+void
+icm_one_byte_msb_set(void)
+{
+ int wrong, ok;
+ unsigned v1;
+
+ printf("Test #3 load one byte, msb set --> cc == 1\n");
+
+ v1 = 0x80000000;
+ wrong = ok = 0;
+
+ if (branch(0, 8, v1)) ++wrong; else ++ok;
+ if (branch(1, 8, v1)) ++wrong; else ++ok;
+ if (branch(2, 8, v1)) ++wrong; else ++ok;
+ if (branch(3, 8, v1)) ++wrong; else ++ok;
+ if (branch(4, 8, v1)) ++ok; else ++wrong;
+ if (branch(5, 8, v1)) ++ok; else ++wrong;
+ if (branch(6, 8, v1)) ++ok; else ++wrong;
+ if (branch(7, 8, v1)) ++ok; else ++wrong;
+ if (branch(8, 8, v1)) ++wrong; else ++ok;
+ if (branch(9, 8, v1)) ++wrong; else ++ok;
+ if (branch(10, 8, v1)) ++wrong; else ++ok;
+ if (branch(11, 8, v1)) ++wrong; else ++ok;
+ if (branch(12, 8, v1)) ++ok; else ++wrong;
+ if (branch(13, 8, v1)) ++ok; else ++wrong;
+ if (branch(14, 8, v1)) ++ok; else ++wrong;
+ if (branch(15, 8, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 4, v1)) ++wrong; else ++ok;
+ if (branch(1, 4, v1)) ++wrong; else ++ok;
+ if (branch(2, 4, v1)) ++wrong; else ++ok;
+ if (branch(3, 4, v1)) ++wrong; else ++ok;
+ if (branch(4, 4, v1)) ++ok; else ++wrong;
+ if (branch(5, 4, v1)) ++ok; else ++wrong;
+ if (branch(6, 4, v1)) ++ok; else ++wrong;
+ if (branch(7, 4, v1)) ++ok; else ++wrong;
+ if (branch(8, 4, v1)) ++wrong; else ++ok;
+ if (branch(9, 4, v1)) ++wrong; else ++ok;
+ if (branch(10, 4, v1)) ++wrong; else ++ok;
+ if (branch(11, 4, v1)) ++wrong; else ++ok;
+ if (branch(12, 4, v1)) ++ok; else ++wrong;
+ if (branch(13, 4, v1)) ++ok; else ++wrong;
+ if (branch(14, 4, v1)) ++ok; else ++wrong;
+ if (branch(15, 4, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 2, v1)) ++wrong; else ++ok;
+ if (branch(1, 2, v1)) ++wrong; else ++ok;
+ if (branch(2, 2, v1)) ++wrong; else ++ok;
+ if (branch(3, 2, v1)) ++wrong; else ++ok;
+ if (branch(4, 2, v1)) ++ok; else ++wrong;
+ if (branch(5, 2, v1)) ++ok; else ++wrong;
+ if (branch(6, 2, v1)) ++ok; else ++wrong;
+ if (branch(7, 2, v1)) ++ok; else ++wrong;
+ if (branch(8, 2, v1)) ++wrong; else ++ok;
+ if (branch(9, 2, v1)) ++wrong; else ++ok;
+ if (branch(10, 2, v1)) ++wrong; else ++ok;
+ if (branch(11, 2, v1)) ++wrong; else ++ok;
+ if (branch(12, 2, v1)) ++ok; else ++wrong;
+ if (branch(13, 2, v1)) ++ok; else ++wrong;
+ if (branch(14, 2, v1)) ++ok; else ++wrong;
+ if (branch(15, 2, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 1, v1)) ++wrong; else ++ok;
+ if (branch(1, 1, v1)) ++wrong; else ++ok;
+ if (branch(2, 1, v1)) ++wrong; else ++ok;
+ if (branch(3, 1, v1)) ++wrong; else ++ok;
+ if (branch(4, 1, v1)) ++ok; else ++wrong;
+ if (branch(5, 1, v1)) ++ok; else ++wrong;
+ if (branch(6, 1, v1)) ++ok; else ++wrong;
+ if (branch(7, 1, v1)) ++ok; else ++wrong;
+ if (branch(8, 1, v1)) ++wrong; else ++ok;
+ if (branch(9, 1, v1)) ++wrong; else ++ok;
+ if (branch(10, 1, v1)) ++wrong; else ++ok;
+ if (branch(11, 1, v1)) ++wrong; else ++ok;
+ if (branch(12, 1, v1)) ++ok; else ++wrong;
+ if (branch(13, 1, v1)) ++ok; else ++wrong;
+ if (branch(14, 1, v1)) ++ok; else ++wrong;
+ if (branch(15, 1, v1)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 64)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+/* loads two bytes */
+void
+icm_two_bytes_msb_set(void)
+{
+ int wrong, ok;
+ unsigned v1;
+
+ printf("Test #4 load two bytes, msb set --> cc == 1\n");
+
+ v1 = 0x80000000;
+ wrong = ok = 0;
+
+ if (branch(0, 12, v1)) ++wrong; else ++ok;
+ if (branch(1, 12, v1)) ++wrong; else ++ok;
+ if (branch(2, 12, v1)) ++wrong; else ++ok;
+ if (branch(3, 12, v1)) ++wrong; else ++ok;
+ if (branch(4, 12, v1)) ++ok; else ++wrong;
+ if (branch(5, 12, v1)) ++ok; else ++wrong;
+ if (branch(6, 12, v1)) ++ok; else ++wrong;
+ if (branch(7, 12, v1)) ++ok; else ++wrong;
+ if (branch(8, 12, v1)) ++wrong; else ++ok;
+ if (branch(9, 12, v1)) ++wrong; else ++ok;
+ if (branch(10, 12, v1)) ++wrong; else ++ok;
+ if (branch(11, 12, v1)) ++wrong; else ++ok;
+ if (branch(12, 12, v1)) ++ok; else ++wrong;
+ if (branch(13, 12, v1)) ++ok; else ++wrong;
+ if (branch(14, 12, v1)) ++ok; else ++wrong;
+ if (branch(15, 12, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 10, v1)) ++wrong; else ++ok;
+ if (branch(1, 10, v1)) ++wrong; else ++ok;
+ if (branch(2, 10, v1)) ++wrong; else ++ok;
+ if (branch(3, 10, v1)) ++wrong; else ++ok;
+ if (branch(4, 10, v1)) ++ok; else ++wrong;
+ if (branch(5, 10, v1)) ++ok; else ++wrong;
+ if (branch(6, 10, v1)) ++ok; else ++wrong;
+ if (branch(7, 10, v1)) ++ok; else ++wrong;
+ if (branch(8, 10, v1)) ++wrong; else ++ok;
+ if (branch(9, 10, v1)) ++wrong; else ++ok;
+ if (branch(10, 10, v1)) ++wrong; else ++ok;
+ if (branch(11, 10, v1)) ++wrong; else ++ok;
+ if (branch(12, 10, v1)) ++ok; else ++wrong;
+ if (branch(13, 10, v1)) ++ok; else ++wrong;
+ if (branch(14, 10, v1)) ++ok; else ++wrong;
+ if (branch(15, 10, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 9, v1)) ++wrong; else ++ok;
+ if (branch(1, 9, v1)) ++wrong; else ++ok;
+ if (branch(2, 9, v1)) ++wrong; else ++ok;
+ if (branch(3, 9, v1)) ++wrong; else ++ok;
+ if (branch(4, 9, v1)) ++ok; else ++wrong;
+ if (branch(5, 9, v1)) ++ok; else ++wrong;
+ if (branch(6, 9, v1)) ++ok; else ++wrong;
+ if (branch(7, 9, v1)) ++ok; else ++wrong;
+ if (branch(8, 9, v1)) ++wrong; else ++ok;
+ if (branch(9, 9, v1)) ++wrong; else ++ok;
+ if (branch(10, 9, v1)) ++wrong; else ++ok;
+ if (branch(11, 9, v1)) ++wrong; else ++ok;
+ if (branch(12, 9, v1)) ++ok; else ++wrong;
+ if (branch(13, 9, v1)) ++ok; else ++wrong;
+ if (branch(14, 9, v1)) ++ok; else ++wrong;
+ if (branch(15, 9, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 6, v1)) ++wrong; else ++ok;
+ if (branch(1, 6, v1)) ++wrong; else ++ok;
+ if (branch(2, 6, v1)) ++wrong; else ++ok;
+ if (branch(3, 6, v1)) ++wrong; else ++ok;
+ if (branch(4, 6, v1)) ++ok; else ++wrong;
+ if (branch(5, 6, v1)) ++ok; else ++wrong;
+ if (branch(6, 6, v1)) ++ok; else ++wrong;
+ if (branch(7, 6, v1)) ++ok; else ++wrong;
+ if (branch(8, 6, v1)) ++wrong; else ++ok;
+ if (branch(9, 6, v1)) ++wrong; else ++ok;
+ if (branch(10, 6, v1)) ++wrong; else ++ok;
+ if (branch(11, 6, v1)) ++wrong; else ++ok;
+ if (branch(12, 6, v1)) ++ok; else ++wrong;
+ if (branch(13, 6, v1)) ++ok; else ++wrong;
+ if (branch(14, 6, v1)) ++ok; else ++wrong;
+ if (branch(15, 6, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 5, v1)) ++wrong; else ++ok;
+ if (branch(1, 5, v1)) ++wrong; else ++ok;
+ if (branch(2, 5, v1)) ++wrong; else ++ok;
+ if (branch(3, 5, v1)) ++wrong; else ++ok;
+ if (branch(4, 5, v1)) ++ok; else ++wrong;
+ if (branch(5, 5, v1)) ++ok; else ++wrong;
+ if (branch(6, 5, v1)) ++ok; else ++wrong;
+ if (branch(7, 5, v1)) ++ok; else ++wrong;
+ if (branch(8, 5, v1)) ++wrong; else ++ok;
+ if (branch(9, 5, v1)) ++wrong; else ++ok;
+ if (branch(10, 5, v1)) ++wrong; else ++ok;
+ if (branch(11, 5, v1)) ++wrong; else ++ok;
+ if (branch(12, 5, v1)) ++ok; else ++wrong;
+ if (branch(13, 5, v1)) ++ok; else ++wrong;
+ if (branch(14, 5, v1)) ++ok; else ++wrong;
+ if (branch(15, 5, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 3, v1)) ++wrong; else ++ok;
+ if (branch(1, 3, v1)) ++wrong; else ++ok;
+ if (branch(2, 3, v1)) ++wrong; else ++ok;
+ if (branch(3, 3, v1)) ++wrong; else ++ok;
+ if (branch(4, 3, v1)) ++ok; else ++wrong;
+ if (branch(5, 3, v1)) ++ok; else ++wrong;
+ if (branch(6, 3, v1)) ++ok; else ++wrong;
+ if (branch(7, 3, v1)) ++ok; else ++wrong;
+ if (branch(8, 3, v1)) ++wrong; else ++ok;
+ if (branch(9, 3, v1)) ++wrong; else ++ok;
+ if (branch(10, 3, v1)) ++wrong; else ++ok;
+ if (branch(11, 3, v1)) ++wrong; else ++ok;
+ if (branch(12, 3, v1)) ++ok; else ++wrong;
+ if (branch(13, 3, v1)) ++ok; else ++wrong;
+ if (branch(14, 3, v1)) ++ok; else ++wrong;
+ if (branch(15, 3, v1)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 96)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+/* loads three bytes */
+void
+icm_three_bytes_msb_set(void)
+{
+ int wrong, ok;
+ unsigned v1;
+
+ printf("Test #5 load three bytes, msb set --> cc == 1\n");
+
+ v1 = 0x80000000;
+ wrong = ok = 0;
+
+ if (branch(0, 14, v1)) ++wrong; else ++ok;
+ if (branch(1, 14, v1)) ++wrong; else ++ok;
+ if (branch(2, 14, v1)) ++wrong; else ++ok;
+ if (branch(3, 14, v1)) ++wrong; else ++ok;
+ if (branch(4, 14, v1)) ++ok; else ++wrong;
+ if (branch(5, 14, v1)) ++ok; else ++wrong;
+ if (branch(6, 14, v1)) ++ok; else ++wrong;
+ if (branch(7, 14, v1)) ++ok; else ++wrong;
+ if (branch(8, 14, v1)) ++wrong; else ++ok;
+ if (branch(9, 14, v1)) ++wrong; else ++ok;
+ if (branch(10, 14, v1)) ++wrong; else ++ok;
+ if (branch(11, 14, v1)) ++wrong; else ++ok;
+ if (branch(12, 14, v1)) ++ok; else ++wrong;
+ if (branch(13, 14, v1)) ++ok; else ++wrong;
+ if (branch(14, 14, v1)) ++ok; else ++wrong;
+ if (branch(15, 14, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 13, v1)) ++wrong; else ++ok;
+ if (branch(1, 13, v1)) ++wrong; else ++ok;
+ if (branch(2, 13, v1)) ++wrong; else ++ok;
+ if (branch(3, 13, v1)) ++wrong; else ++ok;
+ if (branch(4, 13, v1)) ++ok; else ++wrong;
+ if (branch(5, 13, v1)) ++ok; else ++wrong;
+ if (branch(6, 13, v1)) ++ok; else ++wrong;
+ if (branch(7, 13, v1)) ++ok; else ++wrong;
+ if (branch(8, 13, v1)) ++wrong; else ++ok;
+ if (branch(9, 13, v1)) ++wrong; else ++ok;
+ if (branch(10, 13, v1)) ++wrong; else ++ok;
+ if (branch(11, 13, v1)) ++wrong; else ++ok;
+ if (branch(12, 13, v1)) ++ok; else ++wrong;
+ if (branch(13, 13, v1)) ++ok; else ++wrong;
+ if (branch(14, 13, v1)) ++ok; else ++wrong;
+ if (branch(15, 13, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 11, v1)) ++wrong; else ++ok;
+ if (branch(1, 11, v1)) ++wrong; else ++ok;
+ if (branch(2, 11, v1)) ++wrong; else ++ok;
+ if (branch(3, 11, v1)) ++wrong; else ++ok;
+ if (branch(4, 11, v1)) ++ok; else ++wrong;
+ if (branch(5, 11, v1)) ++ok; else ++wrong;
+ if (branch(6, 11, v1)) ++ok; else ++wrong;
+ if (branch(7, 11, v1)) ++ok; else ++wrong;
+ if (branch(8, 11, v1)) ++wrong; else ++ok;
+ if (branch(9, 11, v1)) ++wrong; else ++ok;
+ if (branch(10, 11, v1)) ++wrong; else ++ok;
+ if (branch(11, 11, v1)) ++wrong; else ++ok;
+ if (branch(12, 11, v1)) ++ok; else ++wrong;
+ if (branch(13, 11, v1)) ++ok; else ++wrong;
+ if (branch(14, 11, v1)) ++ok; else ++wrong;
+ if (branch(15, 11, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 7, v1)) ++wrong; else ++ok;
+ if (branch(1, 7, v1)) ++wrong; else ++ok;
+ if (branch(2, 7, v1)) ++wrong; else ++ok;
+ if (branch(3, 7, v1)) ++wrong; else ++ok;
+ if (branch(4, 7, v1)) ++ok; else ++wrong;
+ if (branch(5, 7, v1)) ++ok; else ++wrong;
+ if (branch(6, 7, v1)) ++ok; else ++wrong;
+ if (branch(7, 7, v1)) ++ok; else ++wrong;
+ if (branch(8, 7, v1)) ++wrong; else ++ok;
+ if (branch(9, 7, v1)) ++wrong; else ++ok;
+ if (branch(10, 7, v1)) ++wrong; else ++ok;
+ if (branch(11, 7, v1)) ++wrong; else ++ok;
+ if (branch(12, 7, v1)) ++ok; else ++wrong;
+ if (branch(13, 7, v1)) ++ok; else ++wrong;
+ if (branch(14, 7, v1)) ++ok; else ++wrong;
+ if (branch(15, 7, v1)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 64)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+/* loads four bytes */
+void
+icm_four_bytes_msb_set(void)
+{
+ int wrong, ok;
+ unsigned v1;
+
+ printf("Test #6 load four bytes, msb set --> cc == 1\n");
+
+ v1 = 0x80000000;
+ wrong = ok = 0;
+
+ if (branch(0, 15, v1)) ++wrong; else ++ok;
+ if (branch(1, 15, v1)) ++wrong; else ++ok;
+ if (branch(2, 15, v1)) ++wrong; else ++ok;
+ if (branch(3, 15, v1)) ++wrong; else ++ok;
+ if (branch(4, 15, v1)) ++ok; else ++wrong;
+ if (branch(5, 15, v1)) ++ok; else ++wrong;
+ if (branch(6, 15, v1)) ++ok; else ++wrong;
+ if (branch(7, 15, v1)) ++ok; else ++wrong;
+ if (branch(8, 15, v1)) ++wrong; else ++ok;
+ if (branch(9, 15, v1)) ++wrong; else ++ok;
+ if (branch(10, 15, v1)) ++wrong; else ++ok;
+ if (branch(11, 15, v1)) ++wrong; else ++ok;
+ if (branch(12, 15, v1)) ++ok; else ++wrong;
+ if (branch(13, 15, v1)) ++ok; else ++wrong;
+ if (branch(14, 15, v1)) ++ok; else ++wrong;
+ if (branch(15, 15, v1)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 16)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+/* loads one byte */
+void
+icm_one_byte_msb_not_set(void)
+{
+ int wrong, ok, v1;
+
+ printf("Test #7 load one byte, msb not set --> cc == 2\n");
+
+ v1 = 0x7FFFFFFF;
+ wrong = ok = 0;
+
+ if (branch(0, 8, v1)) ++wrong; else ++ok;
+ if (branch(1, 8, v1)) ++wrong; else ++ok;
+ if (branch(2, 8, v1)) ++ok; else ++wrong;
+ if (branch(3, 8, v1)) ++ok; else ++wrong;
+ if (branch(4, 8, v1)) ++wrong; else ++ok;
+ if (branch(5, 8, v1)) ++wrong; else ++ok;
+ if (branch(6, 8, v1)) ++ok; else ++wrong;
+ if (branch(7, 8, v1)) ++ok; else ++wrong;
+ if (branch(8, 8, v1)) ++wrong; else ++ok;
+ if (branch(9, 8, v1)) ++wrong; else ++ok;
+ if (branch(10, 8, v1)) ++ok; else ++wrong;
+ if (branch(11, 8, v1)) ++ok; else ++wrong;
+ if (branch(12, 8, v1)) ++wrong; else ++ok;
+ if (branch(13, 8, v1)) ++wrong; else ++ok;
+ if (branch(14, 8, v1)) ++ok; else ++wrong;
+ if (branch(15, 8, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 4, v1)) ++wrong; else ++ok;
+ if (branch(1, 4, v1)) ++wrong; else ++ok;
+ if (branch(2, 4, v1)) ++ok; else ++wrong;
+ if (branch(3, 4, v1)) ++ok; else ++wrong;
+ if (branch(4, 4, v1)) ++wrong; else ++ok;
+ if (branch(5, 4, v1)) ++wrong; else ++ok;
+ if (branch(6, 4, v1)) ++ok; else ++wrong;
+ if (branch(7, 4, v1)) ++ok; else ++wrong;
+ if (branch(8, 4, v1)) ++wrong; else ++ok;
+ if (branch(9, 4, v1)) ++wrong; else ++ok;
+ if (branch(10, 4, v1)) ++ok; else ++wrong;
+ if (branch(11, 4, v1)) ++ok; else ++wrong;
+ if (branch(12, 4, v1)) ++wrong; else ++ok;
+ if (branch(13, 4, v1)) ++wrong; else ++ok;
+ if (branch(14, 4, v1)) ++ok; else ++wrong;
+ if (branch(15, 4, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 2, v1)) ++wrong; else ++ok;
+ if (branch(1, 2, v1)) ++wrong; else ++ok;
+ if (branch(2, 2, v1)) ++ok; else ++wrong;
+ if (branch(3, 2, v1)) ++ok; else ++wrong;
+ if (branch(4, 2, v1)) ++wrong; else ++ok;
+ if (branch(5, 2, v1)) ++wrong; else ++ok;
+ if (branch(6, 2, v1)) ++ok; else ++wrong;
+ if (branch(7, 2, v1)) ++ok; else ++wrong;
+ if (branch(8, 2, v1)) ++wrong; else ++ok;
+ if (branch(9, 2, v1)) ++wrong; else ++ok;
+ if (branch(10, 2, v1)) ++ok; else ++wrong;
+ if (branch(11, 2, v1)) ++ok; else ++wrong;
+ if (branch(12, 2, v1)) ++wrong; else ++ok;
+ if (branch(13, 2, v1)) ++wrong; else ++ok;
+ if (branch(14, 2, v1)) ++ok; else ++wrong;
+ if (branch(15, 2, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 1, v1)) ++wrong; else ++ok;
+ if (branch(1, 1, v1)) ++wrong; else ++ok;
+ if (branch(2, 1, v1)) ++ok; else ++wrong;
+ if (branch(3, 1, v1)) ++ok; else ++wrong;
+ if (branch(4, 1, v1)) ++wrong; else ++ok;
+ if (branch(5, 1, v1)) ++wrong; else ++ok;
+ if (branch(6, 1, v1)) ++ok; else ++wrong;
+ if (branch(7, 1, v1)) ++ok; else ++wrong;
+ if (branch(8, 1, v1)) ++wrong; else ++ok;
+ if (branch(9, 1, v1)) ++wrong; else ++ok;
+ if (branch(10, 1, v1)) ++ok; else ++wrong;
+ if (branch(11, 1, v1)) ++ok; else ++wrong;
+ if (branch(12, 1, v1)) ++wrong; else ++ok;
+ if (branch(13, 1, v1)) ++wrong; else ++ok;
+ if (branch(14, 1, v1)) ++ok; else ++wrong;
+ if (branch(15, 1, v1)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 64)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+/* loads two bytes */
+void
+icm_two_bytes_msb_not_set(void)
+{
+ int wrong, ok;
+ unsigned v1;
+
+ printf("Test #8 load two bytes, msb not set --> cc == 2\n");
+
+ v1 = 0x7FFFFFFF;
+ wrong = ok = 0;
+
+ if (branch(0, 12, v1)) ++wrong; else ++ok;
+ if (branch(1, 12, v1)) ++wrong; else ++ok;
+ if (branch(2, 12, v1)) ++ok; else ++wrong;
+ if (branch(3, 12, v1)) ++ok; else ++wrong;
+ if (branch(4, 12, v1)) ++wrong; else ++ok;
+ if (branch(5, 12, v1)) ++wrong; else ++ok;
+ if (branch(6, 12, v1)) ++ok; else ++wrong;
+ if (branch(7, 12, v1)) ++ok; else ++wrong;
+ if (branch(8, 12, v1)) ++wrong; else ++ok;
+ if (branch(9, 12, v1)) ++wrong; else ++ok;
+ if (branch(10, 12, v1)) ++ok; else ++wrong;
+ if (branch(11, 12, v1)) ++ok; else ++wrong;
+ if (branch(12, 12, v1)) ++wrong; else ++ok;
+ if (branch(13, 12, v1)) ++wrong; else ++ok;
+ if (branch(14, 12, v1)) ++ok; else ++wrong;
+ if (branch(15, 12, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 10, v1)) ++wrong; else ++ok;
+ if (branch(1, 10, v1)) ++wrong; else ++ok;
+ if (branch(2, 10, v1)) ++ok; else ++wrong;
+ if (branch(3, 10, v1)) ++ok; else ++wrong;
+ if (branch(4, 10, v1)) ++wrong; else ++ok;
+ if (branch(5, 10, v1)) ++wrong; else ++ok;
+ if (branch(6, 10, v1)) ++ok; else ++wrong;
+ if (branch(7, 10, v1)) ++ok; else ++wrong;
+ if (branch(8, 10, v1)) ++wrong; else ++ok;
+ if (branch(9, 10, v1)) ++wrong; else ++ok;
+ if (branch(10, 10, v1)) ++ok; else ++wrong;
+ if (branch(11, 10, v1)) ++ok; else ++wrong;
+ if (branch(12, 10, v1)) ++wrong; else ++ok;
+ if (branch(13, 10, v1)) ++wrong; else ++ok;
+ if (branch(14, 10, v1)) ++ok; else ++wrong;
+ if (branch(15, 10, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 9, v1)) ++wrong; else ++ok;
+ if (branch(1, 9, v1)) ++wrong; else ++ok;
+ if (branch(2, 9, v1)) ++ok; else ++wrong;
+ if (branch(3, 9, v1)) ++ok; else ++wrong;
+ if (branch(4, 9, v1)) ++wrong; else ++ok;
+ if (branch(5, 9, v1)) ++wrong; else ++ok;
+ if (branch(6, 9, v1)) ++ok; else ++wrong;
+ if (branch(7, 9, v1)) ++ok; else ++wrong;
+ if (branch(8, 9, v1)) ++wrong; else ++ok;
+ if (branch(9, 9, v1)) ++wrong; else ++ok;
+ if (branch(10, 9, v1)) ++ok; else ++wrong;
+ if (branch(11, 9, v1)) ++ok; else ++wrong;
+ if (branch(12, 9, v1)) ++wrong; else ++ok;
+ if (branch(13, 9, v1)) ++wrong; else ++ok;
+ if (branch(14, 9, v1)) ++ok; else ++wrong;
+ if (branch(15, 9, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 6, v1)) ++wrong; else ++ok;
+ if (branch(1, 6, v1)) ++wrong; else ++ok;
+ if (branch(2, 6, v1)) ++ok; else ++wrong;
+ if (branch(3, 6, v1)) ++ok; else ++wrong;
+ if (branch(4, 6, v1)) ++wrong; else ++ok;
+ if (branch(5, 6, v1)) ++wrong; else ++ok;
+ if (branch(6, 6, v1)) ++ok; else ++wrong;
+ if (branch(7, 6, v1)) ++ok; else ++wrong;
+ if (branch(8, 6, v1)) ++wrong; else ++ok;
+ if (branch(9, 6, v1)) ++wrong; else ++ok;
+ if (branch(10, 6, v1)) ++ok; else ++wrong;
+ if (branch(11, 6, v1)) ++ok; else ++wrong;
+ if (branch(12, 6, v1)) ++wrong; else ++ok;
+ if (branch(13, 6, v1)) ++wrong; else ++ok;
+ if (branch(14, 6, v1)) ++ok; else ++wrong;
+ if (branch(15, 6, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 5, v1)) ++wrong; else ++ok;
+ if (branch(1, 5, v1)) ++wrong; else ++ok;
+ if (branch(2, 5, v1)) ++ok; else ++wrong;
+ if (branch(3, 5, v1)) ++ok; else ++wrong;
+ if (branch(4, 5, v1)) ++wrong; else ++ok;
+ if (branch(5, 5, v1)) ++wrong; else ++ok;
+ if (branch(6, 5, v1)) ++ok; else ++wrong;
+ if (branch(7, 5, v1)) ++ok; else ++wrong;
+ if (branch(8, 5, v1)) ++wrong; else ++ok;
+ if (branch(9, 5, v1)) ++wrong; else ++ok;
+ if (branch(10, 5, v1)) ++ok; else ++wrong;
+ if (branch(11, 5, v1)) ++ok; else ++wrong;
+ if (branch(12, 5, v1)) ++wrong; else ++ok;
+ if (branch(13, 5, v1)) ++wrong; else ++ok;
+ if (branch(14, 5, v1)) ++ok; else ++wrong;
+ if (branch(15, 5, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 3, v1)) ++wrong; else ++ok;
+ if (branch(1, 3, v1)) ++wrong; else ++ok;
+ if (branch(2, 3, v1)) ++ok; else ++wrong;
+ if (branch(3, 3, v1)) ++ok; else ++wrong;
+ if (branch(4, 3, v1)) ++wrong; else ++ok;
+ if (branch(5, 3, v1)) ++wrong; else ++ok;
+ if (branch(6, 3, v1)) ++ok; else ++wrong;
+ if (branch(7, 3, v1)) ++ok; else ++wrong;
+ if (branch(8, 3, v1)) ++wrong; else ++ok;
+ if (branch(9, 3, v1)) ++wrong; else ++ok;
+ if (branch(10, 3, v1)) ++ok; else ++wrong;
+ if (branch(11, 3, v1)) ++ok; else ++wrong;
+ if (branch(12, 3, v1)) ++wrong; else ++ok;
+ if (branch(13, 3, v1)) ++wrong; else ++ok;
+ if (branch(14, 3, v1)) ++ok; else ++wrong;
+ if (branch(15, 3, v1)) ++ok; else ++wrong;
+
+ if (wrong != 0 || ok != 96)
+ printf("FAILED\n");
+ else
+ printf("OK\n");
+}
+
+
+/* loads three bytes */
+void
+icm_three_bytes_msb_not_set(void)
+{
+ int wrong, ok;
+ unsigned v1;
+
+ printf("Test #9 load three bytes, msb not set --> cc == 2\n");
+
+ v1 = 0x7FFFFFFF;
+ wrong = ok = 0;
+
+ if (branch(0, 14, v1)) ++wrong; else ++ok;
+ if (branch(1, 14, v1)) ++wrong; else ++ok;
+ if (branch(2, 14, v1)) ++ok; else ++wrong;
+ if (branch(3, 14, v1)) ++ok; else ++wrong;
+ if (branch(4, 14, v1)) ++wrong; else ++ok;
+ if (branch(5, 14, v1)) ++wrong; else ++ok;
+ if (branch(6, 14, v1)) ++ok; else ++wrong;
+ if (branch(7, 14, v1)) ++ok; else ++wrong;
+ if (branch(8, 14, v1)) ++wrong; else ++ok;
+ if (branch(9, 14, v1)) ++wrong; else ++ok;
+ if (branch(10, 14, v1)) ++ok; else ++wrong;
+ if (branch(11, 14, v1)) ++ok; else ++wrong;
+ if (branch(12, 14, v1)) ++wrong; else ++ok;
+ if (branch(13, 14, v1)) ++wrong; else ++ok;
+ if (branch(14, 14, v1)) ++ok; else ++wrong;
+ if (branch(15, 14, v1)) ++ok; else ++wrong;
+
+ if (branch(0, 13, v1)) ++wrong; else ++ok;
+ if (branch(1, 13, v1)) ++wrong; else ++ok;
+ if (branch(2, 13, v1)) ++ok; else ++wrong;
+ if (branch(3, 13, v1)) ++ok; else ++wrong;
+ if (branch(4, 13, v1)) ++wrong; else ++ok;
+ if (branch(5, 13, v1)) ++wrong; else ++ok;
+ if (branch(6, 13, v1)) ++ok; else ++wrong;
+ if (branch(7, 13, v1)) ++ok; else ++wrong;
+ if (branch(8, 13, v1)) ++wrong; else ++ok;
+ if (branch(9, 13, v1)) ++wrong; else ++ok;
+ if (branch(10, 13, v1)) ++ok; else ++wro...
[truncated message content] |