#include <stdio.h> | |
#include <stdlib.h> | |
#include <unistd.h> | |
static inline int mystrlen(char *s) { | |
int i = 0; | |
while (s[i]) | |
i++; | |
return i; | |
} | |
void pass(void) { | |
char s[] = "passed.\n"; | |
write (1, s, sizeof (s) - 1); | |
exit (0); | |
} | |
void _fail(char *reason) { | |
char s[] = "\nfailed: "; | |
int len = mystrlen(reason); | |
write (1, s, sizeof (s) - 1); | |
write (1, reason, len); | |
write (1, "\n", 1); | |
// exit (1); | |
} | |
void *memset (void *s, int c, size_t n) { | |
char *p = s; | |
int i; | |
for (i = 0; i < n; i++) | |
p[i] = c; | |
return p; | |
} | |
void exit (int status) { | |
asm volatile ("moveq 1, $r9\n" /* NR_exit. */ | |
"break 13\n"); | |
while(1) | |
; | |
} | |
ssize_t write (int fd, const void *buf, size_t count) { | |
int r; | |
asm ("move.d %0, $r10\n" | |
"move.d %1, $r11\n" | |
"move.d %2, $r12\n" | |
"moveq 4, $r9\n" /* NR_write. */ | |
"break 13\n" : : "r" (fd), "r" (buf), "r" (count) : "memory"); | |
asm ("move.d $r10, %0\n" : "=r" (r)); | |
return r; | |
} |