ack/mach/sparc/libsys/SYS.h
1991-09-20 18:14:05 +00:00

148 lines
1.8 KiB
C

/*
SYS.h
*/
#ifndef SYS_H
#define SYS_H
#include <syscall.h>
#define SYS_call_0(x) \
LABEL_(x); \
BODY(x)
#define _SYS_call_0(x) \
LABEL__(x); \
LABEL(x); \
BODY(x)
#define SYS_call_1(x) \
LABEL_(x); \
ENTRY1; \
BODY(x)
#define _SYS_call_1(x) \
LABEL__(x); \
ENTRY1; \
LABEL(x); \
BODY(x)
#define SYS_call_2(x) \
LABEL_(x); \
ENTRY2; \
BODY(x)
#define _SYS_call_2(x) \
LABEL__(x); \
ENTRY2; \
LABEL(x); \
BODY(x)
#define SYS_call_3(x) \
LABEL_(x); \
ENTRY3; \
BODY(x)
#define _SYS_call_3(x) \
LABEL__(x); \
ENTRY3; \
LABEL(x); \
BODY(x)
#define SYS_call_4(x) \
LABEL_(x); \
ENTRY4; \
BODY(x)
#define _SYS_call_4(x) \
LABEL__(x); \
ENTRY4; \
LABEL(x); \
BODY(x)
#define SYS_call_5(x) \
LABEL_(x); \
ENTRY5; \
BODY(x)
#define _SYS_call_5(x) \
LABEL__(x); \
ENTRY5; \
LABEL(x); \
BODY(x)
#define SYS_call_6(x) \
LABEL_(x); \
ENTRY6; \
BODY(x)
#define _SYS_call_6(x) \
LABEL__(x); \
ENTRY6; \
LABEL(x); \
BODY(x)
#define BODY(x) \
sys_call(x); \
ta %g0; \
bgeu 0f; \
sethi %hi(cerror), %o5; \
or %o5, %lo(cerror), %o5; \
jmp %o5; \
nop; \
0:; \
retl; \
nop
#if __STDC__
#define LABEL_(x) \
.global _ ## x; \
_ ## x:
#define LABEL__(x) \
.global __ ## x; \
__ ## x:
#else
#define LABEL_(x) \
.global _/**/x; \
_/**/x:
#define LABEL__(x) \
.global __/**/x; \
__/**/x:
#endif
#define LABEL(x) \
.global x; \
x:
#define ENTRY1 \
ld [%l0], %o0 \
#define ENTRY2 \
ENTRY1; \
ld [%l0+4], %o1 \
#define ENTRY3 \
ENTRY2; \
ld [%l0+8], %o2 \
#define ENTRY4 \
ENTRY3; \
ld [%l0+12], %o3 \
#define ENTRY5 \
ENTRY4; \
ld [%l0+16], %o4 \
#define ENTRY6 \
ENTRY5; \
ld [%l0+20], %o5 \
#if __STDC__
#define sys_call(x) \
mov SYS_ ## x, %g1
#else
#define sys_call(x) \
mov SYS_/**/x, %g1
#endif
#endif /* SYS_H */