Home | History | Annotate | Download | only in s390x
      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 
     94