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