xref: /netbsd-src/lib/libc/arch/powerpc/SYS.h (revision 38dcdc34d982bf8ab9a66b4b5b2e99311457ea36)
1*38dcdc34Smatt /*	$NetBSD: SYS.h,v 1.13 2014/08/23 02:24:22 matt Exp $	*/
25ef4bdf6Sthorpej 
35ef4bdf6Sthorpej #include <machine/asm.h>
45ef4bdf6Sthorpej #include <sys/syscall.h>
55ef4bdf6Sthorpej 
6*38dcdc34Smatt #define	BRANCH_TO_CERROR()	b	_C_LABEL(__cerror)
7*38dcdc34Smatt 
81cddd41eSmatt #define	_DOSYSCALL(x)		li	%r0,(SYS_ ## x)		;\
92913a7a8Skleink 				sc
105ef4bdf6Sthorpej 
1191969428Sthorpej #define	_SYSCALL_NOERROR(x,y)	.text				;\
12*38dcdc34Smatt 				.p2align 2			;\
1391969428Sthorpej 			ENTRY(x)				;\
1491969428Sthorpej 				_DOSYSCALL(y)
155ef4bdf6Sthorpej 
162913a7a8Skleink #define _SYSCALL(x,y)		.text				;\
17*38dcdc34Smatt 				.p2align 2			;\
18*38dcdc34Smatt 			2:	BRANCH_TO_CERROR()		;\
192913a7a8Skleink 				_SYSCALL_NOERROR(x,y)		;\
205ef4bdf6Sthorpej 				bso	2b
215ef4bdf6Sthorpej 
222913a7a8Skleink #define SYSCALL_NOERROR(x)	_SYSCALL_NOERROR(x,x)
232913a7a8Skleink 
242913a7a8Skleink #define SYSCALL(x)		_SYSCALL(x,x)
252913a7a8Skleink 
262913a7a8Skleink #define PSEUDO_NOERROR(x,y)	_SYSCALL_NOERROR(x,y)		;\
27cf88c389Smatt 				blr				;\
28cf88c389Smatt 				END(x)
292913a7a8Skleink 
302913a7a8Skleink #define PSEUDO(x,y)		_SYSCALL_NOERROR(x,y)		;\
31c5f0b614Skleink 				bnslr				;\
32*38dcdc34Smatt 				BRANCH_TO_CERROR()		;\
33cf88c389Smatt 				END(x)
342913a7a8Skleink 
352913a7a8Skleink #define RSYSCALL_NOERROR(x)	PSEUDO_NOERROR(x,x)
362913a7a8Skleink 
372913a7a8Skleink #define RSYSCALL(x)		PSEUDO(x,x)
38ac8c1c29Sthorpej 
39ac8c1c29Sthorpej #define	WSYSCALL(weak,strong)	WEAK_ALIAS(weak,strong)		;\
40ac8c1c29Sthorpej 				PSEUDO(strong,weak)
41