• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
srst3(char * __next,char * __start,char __what,int * __cc)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 
srst2(char * __start,char __what,int * __cc)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 
main()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