1570af302Sopenharmony_ci	.global __cp_begin
2570af302Sopenharmony_ci	.hidden __cp_begin
3570af302Sopenharmony_ci	.global __cp_end
4570af302Sopenharmony_ci	.hidden __cp_end
5570af302Sopenharmony_ci	.global __cp_cancel
6570af302Sopenharmony_ci	.hidden __cp_cancel
7570af302Sopenharmony_ci	.hidden __cancel
8570af302Sopenharmony_ci	.global __syscall_cp_asm
9570af302Sopenharmony_ci	.hidden __syscall_cp_asm
10570af302Sopenharmony_ci	.text
11570af302Sopenharmony_ci	.type   __syscall_cp_asm,%function
12570af302Sopenharmony_ci__syscall_cp_asm:
13570af302Sopenharmony_ci	# at enter: r3 = pointer to self->cancel, r4: syscall no, r5: first arg, r6: 2nd, r7: 3rd, r8: 4th, r9: 5th, r10: 6th
14570af302Sopenharmony_ci__cp_begin:
15570af302Sopenharmony_ci	# if (self->cancel) goto __cp_cancel
16570af302Sopenharmony_ci	lwz   0, 0(3)
17570af302Sopenharmony_ci	cmpwi cr7, 0, 0
18570af302Sopenharmony_ci	bne-  cr7, __cp_cancel
19570af302Sopenharmony_ci
20570af302Sopenharmony_ci	# make syscall
21570af302Sopenharmony_ci	mr    0,  4
22570af302Sopenharmony_ci	mr    3,  5
23570af302Sopenharmony_ci	mr    4,  6
24570af302Sopenharmony_ci	mr    5,  7
25570af302Sopenharmony_ci	mr    6,  8
26570af302Sopenharmony_ci	mr    7,  9
27570af302Sopenharmony_ci	mr    8, 10
28570af302Sopenharmony_ci	sc
29570af302Sopenharmony_ci
30570af302Sopenharmony_ci__cp_end:
31570af302Sopenharmony_ci	# return error ? -r3 : r3
32570af302Sopenharmony_ci	bnslr+
33570af302Sopenharmony_ci	neg 3, 3
34570af302Sopenharmony_ci	blr
35570af302Sopenharmony_ci
36570af302Sopenharmony_ci__cp_cancel:
37570af302Sopenharmony_ci	mflr 0
38570af302Sopenharmony_ci	bl 1f
39570af302Sopenharmony_ci	.long .TOC.-.
40570af302Sopenharmony_ci1:	mflr 3
41570af302Sopenharmony_ci	lwa 2, 0(3)
42570af302Sopenharmony_ci	add 2, 2, 3
43570af302Sopenharmony_ci	mtlr 0
44570af302Sopenharmony_ci	b __cancel
45