summaryrefslogtreecommitdiff
path: root/src/signal/powerpc64/sigsetjmp.s
blob: 410c2831918f276202bd8d4b50908d160ec1e012 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
	.global sigsetjmp
	.global __sigsetjmp
	.type sigsetjmp,%function
	.type __sigsetjmp,%function
	.hidden __setjmp_toc
sigsetjmp:
__sigsetjmp:
	addis 2, 12, .TOC.-__sigsetjmp@ha
	addi  2,  2, .TOC.-__sigsetjmp@l
	ld    5, 24(1)   # load from the TOC slot in the caller's stack frame
	b     1f

	.localentry sigsetjmp,.-sigsetjmp
	.localentry __sigsetjmp,.-__sigsetjmp
	mr    5,  2

1:
	cmpwi cr7, 4, 0
	beq-  cr7, __setjmp_toc

	mflr  6
	std   6, 512(3)
	std   2, 512+16(3)
	std  16, 512+24(3)
	mr   16, 3

	bl __setjmp_toc

	mr   4,  3
	mr   3, 16
	ld   5, 512(3)
	mtlr 5
	ld   2, 512+16(3)
	ld  16, 512+24(3)

.hidden __sigsetjmp_tail
	b __sigsetjmp_tail