mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-11 18:06:21 +00:00
94 lines
2.4 KiB
C
94 lines
2.4 KiB
C
#include "test.h"
|
|
char buffer[24] ="0123456789abcdefghijklmn";
|
|
char *buflong = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.,}[]"
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.,}[]"
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.,}[]"
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.,}[]"
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.,}[]"
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_.,}[]"
|
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRS%UVWXYZ0123456789_.,}[]";
|
|
|
|
static char * srst3(char *__next, char *__start, char __what, int *__cc)
|
|
{
|
|
register unsigned long what asm ("0") = __what;
|
|
register char *next asm ("2") = __next;
|
|
register char *start asm ("4") = __start;
|
|
int cc;
|
|
|
|
asm volatile( "0: srst 2,4\n"
|
|
"jo 0b\n"
|
|
"ipm %2\n"
|
|
"srl %2,28\n"
|
|
:"+d" (start), "+d" (next), "=d" (cc) :"d" (what): "cc");
|
|
*__cc = cc;
|
|
return next;
|
|
}
|
|
|
|
static char * srst2(char *__start, char __what, int *__cc)
|
|
{
|
|
register unsigned long what asm ("0") = __what;
|
|
register char *start asm ("4") = __start;
|
|
int cc;
|
|
|
|
asm volatile( "0: srst 0,4\n"
|
|
"jo 0b\n"
|
|
"ipm %2\n"
|
|
"srl %2,28\n"
|
|
:"+d" (start), "+d" (what), "=d" (cc) :: "cc");
|
|
*__cc = cc;
|
|
return (char *) what;
|
|
}
|
|
|
|
int main()
|
|
{
|
|
char *buf;
|
|
int cc;
|
|
|
|
|
|
/* len=0 and start== next should not fault */
|
|
srst3((char *)0x12345678,(char *)0x12345678,'0', &cc);
|
|
printf("(cc=%d)\n", cc);
|
|
|
|
buf = srst3(&buffer[23], &buffer[23], '0', &cc);
|
|
dump_field(buf, 1);
|
|
printf("(cc=%d)\n", cc);
|
|
|
|
buf = srst3(&buffer[23], &buffer[0], '0', &cc);
|
|
dump_field(buf, 1);
|
|
printf("(cc=%d)\n", cc);
|
|
|
|
buf = srst3(&buffer[23], &buffer[0], 'a', &cc);
|
|
dump_field(buf, 1);
|
|
printf("(cc=%d)\n", cc);
|
|
|
|
buf = srst3(&buffer[23], &buffer[0], 'm', &cc);
|
|
dump_field(buf, 1);
|
|
printf("(cc=%d)\n", cc);
|
|
|
|
buf = srst3(&buffer[23], &buffer[0], 'n', &cc);
|
|
dump_field(buf, 1);
|
|
printf("(cc=%d)\n", cc);
|
|
|
|
buf = srst2(&buffer[0], '0', &cc);
|
|
dump_field(buf, 1);
|
|
printf("(cc=%d)\n", cc);
|
|
|
|
buf = srst2(&buffer[0], 'a', &cc);
|
|
dump_field(buf, 1);
|
|
printf("(cc=%d)\n", cc);
|
|
|
|
buf = srst2(&buffer[0], 'm', &cc);
|
|
dump_field(buf, 1);
|
|
printf("(cc=%d)\n", cc);
|
|
|
|
buf = srst2(&buffer[0], 'n', &cc);
|
|
dump_field(buf, 1);
|
|
printf("(cc=%d)\n", cc);
|
|
|
|
buf = srst3(buflong + 469, buflong, '%', &cc);
|
|
dump_field(buf, 1);
|
|
printf("(cc=%d)\n", cc);
|
|
return 0;
|
|
}
|
|
|