]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/valgrind/src/valgrind-3.6.0-svn/none/tests/s390x/clcle.c
update
[l4.git] / l4 / pkg / valgrind / src / valgrind-3.6.0-svn / none / tests / s390x / clcle.c
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 char b1[23] ="0123456789abcdefghijklm";
5 char b2[23] ="mlkjihgfedcba9876543210";
6 char b3[23] ="mmmmmmmmmmmmmmmmmmmmmmm";
7 char b4[23] ="00000000000000000000000";
8 char longbuf[17000000];
9
10 static int clcle(unsigned long *_a1, unsigned long *_l1, unsigned long *_a3, unsigned long *_l3, char _pad)
11 {
12         register unsigned long a1 asm ("2") = *_a1;
13         register unsigned long l1 asm ("3") = *_l1;
14         register unsigned long a3 asm ("4") = *_a3;
15         register unsigned long l3 asm ("5") = *_l3;
16         register unsigned long pad asm ("6") = _pad;
17         register unsigned long cc asm ("7");
18
19         asm volatile(   "0: clcle 2,4,0(6)\n\t"
20                         "jo 0b\n\t"
21                         "ipm %0\n\t"
22                         "srl %0,28\n\t"
23                         :"=d" (cc), "+d" (a1),"+d" (l1), "+d" (a3), "+d" (l3)
24                         : "d" (pad)
25                         : "memory", "cc");
26         *_a1 = a1;
27         *_a3 = a3;
28         *_l1 = l1;
29         *_l3 = l3;
30
31         return cc;
32 }
33
34
35 void testrun(void *_a1, unsigned long _l1, void *_a3, unsigned long _l3, char pad)
36 {
37         unsigned long a1,a3,l1,l3;
38         int cc;
39
40         a1 = (unsigned long) _a1; l1 = _l1; a3 = (unsigned long) _a3; l3 = _l3;
41         cc = clcle(&a1, &l1,  &a3, &l3, pad);
42         printf("cc: %d, l1: %lu(%lu) l3: %lu(%lu) diff1: %lu diff3: %lu\n",
43                 cc, l1, _l1, l3, _l3, a1-(unsigned long) _a1, a3-(unsigned long) _a3);
44 }
45
46
47 void multiplex(unsigned long l1, unsigned long l3, char pad)
48 {
49         testrun(b1, l1, b1, l3, pad);
50         testrun(b1, l1, b2, l3, pad);
51         testrun(b1, l1, b3, l3, pad);
52         testrun(b1, l1, b4, l3, pad);
53         testrun(b2, l1, b2, l3, pad);
54         testrun(b2, l1, b3, l3, pad);
55         testrun(b2, l1, b4, l3, pad);
56         testrun(b3, l1, b3, l3, pad);
57         testrun(b3, l1, b4, l3, pad);
58         testrun(b4, l1, b4, l3, pad);
59 }
60
61 int main()
62 {
63         multiplex(0,0,9);
64         multiplex(1,0,9);
65         multiplex(0,1,9);
66         multiplex(1,1,9);
67         multiplex(5,23,9);
68         multiplex(23,5,9);
69         testrun(longbuf,10000,longbuf,100000,0);
70         testrun(longbuf,10000,longbuf,100000,128);
71         testrun(longbuf,10000,longbuf,100000,255);
72         exit(0);
73 }
74