/*
* MIPS o32 Linux syscall example
*
* http://www.linux-mips.org/wiki/RISC/os
* http://www.linux-mips.org/wiki/MIPSABIHistory
* http://www.linux.com/howtos/Assembly-HOWTO/mips.shtml
*
* mipsel-linux-gcc -nostdlib -mno-abicalls -fno-PIC -mabi=32 \
*                  -O2 -static -o hello-mips hello-mips.c
*
*/
#define __NR_SYSCALL_BASE	4000
#define __NR_exit			(__NR_SYSCALL_BASE+  1)
#define __NR_write			(__NR_SYSCALL_BASE+  4)

static inline void exit1(int status)
{
    register unsigned long __a0 asm("$4") = (unsigned long) status;

    __asm__ __volatile__ (
        "	.set push	\n"
        "	.set noreorder	\n"
        "	li	$2, %0	\n"
        "	syscall		\n"
        "	.set pop	"
        :
	: "i" (__NR_exit), "r" (__a0)
	: "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24",
	  "memory");
}

static inline int write(int fd, const char *buf, int len)
{
    register unsigned long __a0 asm("$4") = (unsigned long) fd;
    register unsigned long __a1 asm("$5") = (unsigned long) buf;
    register unsigned long __a2 asm("$6") = (unsigned long) len;
    register unsigned long __a3 asm("$7");
    unsigned long __v0;

    __asm__ __volatile__ (
        "	.set push	\n"
        "	.set noreorder	\n"
        "	li	$2, %2	\n"
        "	syscall		\n"
        "	move	%0, $2	\n"
        "	.set pop	"
        : "=r" (__v0), "=r" (__a3)
        : "i" (__NR_write), "r" (__a0), "r" (__a1), "r" (__a2)
	: "$2", "$8", "$9", "$10", "$11", "$12", "$13", "$14", "$15", "$24",
	  "memory");

/*    if (__a3 == 0) */
        return (int) __v0;
/*
    errno = __v0;
    return -1;
 */
}

void __start(void)
{
    write (1, "Hello, World!\n", 14);
    exit1 (42);
}
