|  | #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; | 
|  | } |