xref: /original-bsd/lib/libc/tahoe/sys/syscall.s (revision 5cf7f382)
1/*
2 * Copyright (c) 1983 Regents of the University of California.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms are permitted
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley.  The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16 */
17
18#if defined(SYSLIBC_SCCS) && !defined(lint)
19	.asciz "@(#)syscall.s	5.3 (Berkeley) 06/27/88"
20#endif /* SYSLIBC_SCCS and not lint */
21
22#include "SYS.h"
23
24ENTRY(syscall)
25	pushl	4(fp)		# syscall number
26	movl	fp,r0		# point to the arg list
27	movl	-4(fp),r1	# (arg_count + 1) (bytes) | mask
28	andl2	$0xFFFF,r1	# clear the mask bits
29	shrl	$2,r1,r1	# convert to words
30	subl2	$2,r1		# don't count the first arg
311:
32	addl2	$4,r0		# point to the next arg
33	movl	4(r0),(r0)	# move an arg down
34	decl	r1		# count it
35	jgtr	1b		# any more?
36	movl	(sp)+,r0	# no, get the syscall number back
37	kcall	r0
38	jcs	1f
39	ret
401:
41	jmp	cerror
42