xref: /aosp_15_r20/external/musl/src/thread/powerpc64/syscall_cp.s (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker	.global __cp_begin
2*c9945492SAndroid Build Coastguard Worker	.hidden __cp_begin
3*c9945492SAndroid Build Coastguard Worker	.global __cp_end
4*c9945492SAndroid Build Coastguard Worker	.hidden __cp_end
5*c9945492SAndroid Build Coastguard Worker	.global __cp_cancel
6*c9945492SAndroid Build Coastguard Worker	.hidden __cp_cancel
7*c9945492SAndroid Build Coastguard Worker	.hidden __cancel
8*c9945492SAndroid Build Coastguard Worker	.global __syscall_cp_asm
9*c9945492SAndroid Build Coastguard Worker	.hidden __syscall_cp_asm
10*c9945492SAndroid Build Coastguard Worker	.text
11*c9945492SAndroid Build Coastguard Worker	.type   __syscall_cp_asm,%function
12*c9945492SAndroid Build Coastguard Worker__syscall_cp_asm:
13*c9945492SAndroid Build Coastguard Worker	# at enter: r3 = pointer to self->cancel, r4: syscall no, r5: first arg, r6: 2nd, r7: 3rd, r8: 4th, r9: 5th, r10: 6th
14*c9945492SAndroid Build Coastguard Worker__cp_begin:
15*c9945492SAndroid Build Coastguard Worker	# if (self->cancel) goto __cp_cancel
16*c9945492SAndroid Build Coastguard Worker	lwz   0, 0(3)
17*c9945492SAndroid Build Coastguard Worker	cmpwi cr7, 0, 0
18*c9945492SAndroid Build Coastguard Worker	bne-  cr7, __cp_cancel
19*c9945492SAndroid Build Coastguard Worker
20*c9945492SAndroid Build Coastguard Worker	# make syscall
21*c9945492SAndroid Build Coastguard Worker	mr    0,  4
22*c9945492SAndroid Build Coastguard Worker	mr    3,  5
23*c9945492SAndroid Build Coastguard Worker	mr    4,  6
24*c9945492SAndroid Build Coastguard Worker	mr    5,  7
25*c9945492SAndroid Build Coastguard Worker	mr    6,  8
26*c9945492SAndroid Build Coastguard Worker	mr    7,  9
27*c9945492SAndroid Build Coastguard Worker	mr    8, 10
28*c9945492SAndroid Build Coastguard Worker	sc
29*c9945492SAndroid Build Coastguard Worker
30*c9945492SAndroid Build Coastguard Worker__cp_end:
31*c9945492SAndroid Build Coastguard Worker	# return error ? -r3 : r3
32*c9945492SAndroid Build Coastguard Worker	bnslr+
33*c9945492SAndroid Build Coastguard Worker	neg 3, 3
34*c9945492SAndroid Build Coastguard Worker	blr
35*c9945492SAndroid Build Coastguard Worker
36*c9945492SAndroid Build Coastguard Worker__cp_cancel:
37*c9945492SAndroid Build Coastguard Worker	mflr 0
38*c9945492SAndroid Build Coastguard Worker	bl 1f
39*c9945492SAndroid Build Coastguard Worker	.long .TOC.-.
40*c9945492SAndroid Build Coastguard Worker1:	mflr 3
41*c9945492SAndroid Build Coastguard Worker	lwa 2, 0(3)
42*c9945492SAndroid Build Coastguard Worker	add 2, 2, 3
43*c9945492SAndroid Build Coastguard Worker	mtlr 0
44*c9945492SAndroid Build Coastguard Worker	b __cancel
45