1129202Scognet/*	$NetBSD: Ovfork.S,v 1.6 2003/08/07 16:42:03 agc Exp $	*/
2129202Scognet
3129202Scognet/*-
4129202Scognet * Copyright (c) 1990 The Regents of the University of California.
5129202Scognet * All rights reserved.
6129202Scognet *
7129202Scognet * Redistribution and use in source and binary forms, with or without
8129202Scognet * modification, are permitted provided that the following conditions
9129202Scognet * are met:
10129202Scognet * 1. Redistributions of source code must retain the above copyright
11129202Scognet *    notice, this list of conditions and the following disclaimer.
12129202Scognet * 2. Redistributions in binary form must reproduce the above copyright
13129202Scognet *    notice, this list of conditions and the following disclaimer in the
14129202Scognet *    documentation and/or other materials provided with the distribution.
15129202Scognet * 3. Neither the name of the University nor the names of its contributors
16129202Scognet *    may be used to endorse or promote products derived from this software
17129202Scognet *    without specific prior written permission.
18129202Scognet *
19129202Scognet * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20129202Scognet * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21129202Scognet * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22129202Scognet * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23129202Scognet * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24129202Scognet * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25129202Scognet * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26129202Scognet * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27129202Scognet * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28129202Scognet * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29129202Scognet * SUCH DAMAGE.
30129202Scognet *
31129202Scognet *	from: @(#)Ovfork.s	5.1 (Berkeley) 4/23/90
32129202Scognet */
33129202Scognet
34129202Scognet#include <machine/asm.h>
35129202Scognet__FBSDID("$FreeBSD$");
36129202Scognet#include "SYS.h"
37129202Scognet
38129202Scognet/*
39129202Scognet * pid = vfork();
40129202Scognet *
41129202Scognet * On return from the SWI:
42129202Scognet * r1 == 0 in parent process, r1 == 1 in child process.
43129202Scognet * r0 == pid of child in parent, r0 == pid of parent in child.
44129202Scognet */
45129202Scognet	.text
46129202Scognet	.align	0
47129202Scognet
48129202ScognetENTRY(vfork)
49129202Scognet	mov	r2, r14
50129202Scognet	SYSTRAP(vfork)
51129202Scognet	bcs	PIC_SYM(CERROR, PLT)
52129202Scognet	sub	r1, r1, #1	/* r1 == 0xffffffff if parent, 0 if child */
53129202Scognet	and	r0, r0, r1	/* r0 == 0 if child, else unchanged */
54129202Scognet	mov	r15, r2
55271337SianEND(vfork)
56