xref: /openbsd/lib/libc/arch/powerpc/sys/sigprocmask.S (revision 78b63d65)
1/* sigprocmask(int how, const sigset_t *set, sigset_t *oset); */
2
3#include "SYS.h"
4
5	.text
6PREFIX(sigprocmask)
7	stwu	1, -16(1)
8	stw	5, 12(1)
9
10	/* check set (new mask value) for null, in which case
11	   fiddle arguments */
12	cmpwi	4, 0
13	bne+	.L_load_set
14	addi	3, 0, 1	/* how = SIG_BLOCK, new mask already 0 */
15	b .L_do_call
16.L_load_set:
17	lwz	4, 0(4)	/* get new mask */
18.L_do_call:
19
20	sc
21
22	/* didnt work? */
23	cmpwi	0, 0
24	beq+	.L_sigprocmask_ok
25	b	PIC_PLT(_ASM_LABEL(cerror))
26
27.L_sigprocmask_ok:
28	lwz	5, 12(1)
29	cmpwi	5, 0
30	beq+	.L_sigprocmask_done
31	stw	3, 0(5)
32.L_sigprocmask_done:
33	addi	1, 1, 16
34	blr
35