libSerial/include/asm.h

30 lines
728 B
C

#ifndef _SYSCALL_H_
#define _SYSCALL_H_
/* template for generic functions with global name */
/*#define _C_LABEL(x) _ ## x*/ /* prefix fn name with _ */
#define _C_LABEL(x) x
#define _ENTRY(name) \
.text; .align 2; .global name; name:
#define ENTRY(name) \
_ENTRY(_C_LABEL(name))
/* template for syscalls */
#define SYSCALL_BARE(name, x) \
ENTRY(name) \
mov.l sc_addr, r2; \
mov.l 1f, r0; \
jmp @r2; \
nop; \
1: .long x
/* allow to have several calls in one object, by specifying
* the SYSCALL_ADDRESS separately at the end */
#define SYSCALL_ADDRESS \
sc_addr: .long 0x80020070
#define SYSCALL(name, x) \
SYSCALL_BARE(name, x) ; \
SYSCALL_ADDRESS
#endif