]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/valgrind/src/valgrind-3.6.0-svn/none/tests/s390x/srst.c
update
[l4.git] / l4 / pkg / valgrind / src / valgrind-3.6.0-svn / none / tests / s390x / srst.c
1 #include "test.h"
2 char buffer[24] ="0123456789abcdefghijklmn";
3 char *buflong = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.,}[]"
4                 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.,}[]"
5                 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.,}[]"
6                 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.,}[]"
7                 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.,}[]"
8                 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.,}[]"
9                 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS%UVWXYZ0123456789_.,}[]";
10
11 static char * srst3(char *__next, char *__start, char __what, int *__cc)
12 {
13         register unsigned long what asm ("0") = __what;
14         register char *next asm ("2") = __next;
15         register char *start asm ("4") = __start;
16         int cc;
17
18         asm volatile(   "0: srst 2,4\n"
19                         "jo 0b\n"
20                         "ipm %2\n"
21                         "srl %2,28\n"
22                         :"+d" (start), "+d" (next), "=d" (cc) :"d" (what): "cc");
23         *__cc = cc;
24         return next;
25 }
26
27 static char * srst2(char *__start, char __what,  int *__cc)
28 {
29         register unsigned long what asm ("0") = __what;
30         register char *start asm ("4") = __start;
31         int cc;
32
33         asm volatile(   "0: srst 0,4\n"
34                         "jo 0b\n"
35                         "ipm %2\n"
36                         "srl %2,28\n"
37                         :"+d" (start), "+d" (what), "=d" (cc) :: "cc");
38         *__cc = cc;
39         return (char *) what;
40 }
41
42 int main()
43 {
44         char *buf;
45         int cc;
46
47
48         /* len=0 and start== next should not fault */
49         srst3((char *)0x12345678,(char *)0x12345678,'0', &cc);
50         printf("(cc=%d)\n", cc);
51
52         buf = srst3(&buffer[23], &buffer[23], '0', &cc);
53         dump_field(buf, 1);
54         printf("(cc=%d)\n", cc);
55
56         buf = srst3(&buffer[23], &buffer[0], '0', &cc);
57         dump_field(buf, 1);
58         printf("(cc=%d)\n", cc);
59
60         buf = srst3(&buffer[23], &buffer[0], 'a', &cc);
61         dump_field(buf, 1);
62         printf("(cc=%d)\n", cc);
63
64         buf = srst3(&buffer[23], &buffer[0], 'm', &cc);
65         dump_field(buf, 1);
66         printf("(cc=%d)\n", cc);
67
68         buf = srst3(&buffer[23], &buffer[0], 'n', &cc);
69         dump_field(buf, 1);
70         printf("(cc=%d)\n", cc);
71
72         buf = srst2(&buffer[0], '0', &cc);
73         dump_field(buf, 1);
74         printf("(cc=%d)\n", cc);
75
76         buf = srst2(&buffer[0], 'a', &cc);
77         dump_field(buf, 1);
78         printf("(cc=%d)\n", cc);
79
80         buf = srst2(&buffer[0], 'm', &cc);
81         dump_field(buf, 1);
82         printf("(cc=%d)\n", cc);
83
84         buf = srst2(&buffer[0], 'n', &cc);
85         dump_field(buf, 1);
86         printf("(cc=%d)\n", cc);
87
88         buf = srst3(buflong + 469, buflong, '%', &cc);
89         dump_field(buf, 1);
90         printf("(cc=%d)\n", cc);
91         return 0;
92 }
93