1/* Save current context and install the given one.
2   Copyright (C) 2004-2022 Free Software Foundation, Inc.
3   This file is part of the GNU C Library.
4
5   The GNU C Library is free software; you can redistribute it and/or
6   modify it under the terms of the GNU Lesser General Public
7   License as published by the Free Software Foundation; either
8   version 2.1 of the License, or (at your option) any later version.
9
10   The GNU C Library is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13   Lesser General Public License for more details.
14
15   You should have received a copy of the GNU Lesser General Public
16   License along with the GNU C Library.  If not, see
17   <https://www.gnu.org/licenses/>.  */
18
19#include <sysdep.h>
20#include <ucontext-offsets.h>
21
22ENTRY(__swapcontext)
23
24#ifdef PROF
25	ldgp	$29, 0($27)
26	.set noat
27	lda     AT, _mcount
28	jsr     AT, (AT), _mcount
29	.set at
30	.prologue 1
31#elif defined PIC
32	.prologue 0
33#else
34	ldgp	$29, 0($27)
35	.prologue 1
36#endif
37
38#ifdef PIC
39	unop
40	bsr	$0, __getcontext_x	!samegp
41	mov	$17, $16
42	br	$31, __setcontext	!samegp
43#else
44	jsr	$0, __getcontext_x
45	mov	$17, $16
46	jmp	$31, __setcontext
47#endif
48
49END(__swapcontext)
50weak_alias (__swapcontext, swapcontext)
51