#define syscall_prolog \ register long __res __asm__("%r22"); \ register long __err __asm__("%r28"); #define syscall_epilog(type) \ if (__err == 0) \ return (type) __res; \ errno = __res; \ return -1; #define _syscall0(type,name) \ type name(void) \ { \ syscall_prolog; \ __asm__ volatile ("ldil L%%0xC0000004,%%r1\n\t" \ "ble R%%0xC0000004(%%sr7,%%r1)\n\t" \ "ldo %2,%%r22" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name)); \ syscall_epilog(type); \ } #define _syscall1(type,name,atype,a) \ type name(atype a) \ { \ syscall_prolog; \ __asm__ volatile ("ldo %2,%%arg0\n\t" \ "ldil L%%0xC0000004,%%r1\n\t" \ "ble R%%0xC0000004(%%sr7,%%r1)\n\t" \ "ldo %3,%%r22" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name), "r" ((long)a)); \ syscall_epilog(type); \ }