blob: 99ef5fe10346c3e4a88ca7ac5df6e68b729cdf6e [file] [log] [blame]
/*
* arch/parisc/syscall.c
*
* This function is called from a stub with %r20 already set up.
* Compile this function with -ffixed-r20 so that it doesn't clobber
* this register by mistake.
*/
#include <klibc/compiler.h>
#include <errno.h>
long __syscall_common(long a0, long a1, long a2, long a3, long a4, long a5)
{
register unsigned long rv asm ("r28");
asm volatile("\tble 0x100(%%sr2, %%r0)\n"
: "=r" (rv)
: "r" (a0), "r" (a1), "r" (a2), "r" (a3), "r" (a4), "r" (a5)
: "%r1", "%r2", "%r29", "%r31");
if ( __unlikely(rv >= -4095UL) ) {
errno = -rv;
return -1L;
} else {
return (long)rv;
}
}