xref: /linux/tools/testing/selftests/powerpc/benchmarks/exec_target.c (revision 3a39d672e7f48b8d6b91a09afa4b55352773b4b5)
1dd40c5b4SNicholas Piggin // SPDX-License-Identifier: GPL-2.0+
2dd40c5b4SNicholas Piggin 
3dd40c5b4SNicholas Piggin /*
4dd40c5b4SNicholas Piggin  * Part of fork context switch microbenchmark.
5dd40c5b4SNicholas Piggin  *
6dd40c5b4SNicholas Piggin  * Copyright 2018, Anton Blanchard, IBM Corp.
7dd40c5b4SNicholas Piggin  */
8dd40c5b4SNicholas Piggin 
9c906d2c7SNicholas Piggin #define _GNU_SOURCE
10c906d2c7SNicholas Piggin #include <sys/syscall.h>
11c906d2c7SNicholas Piggin 
_start(void)12dd40c5b4SNicholas Piggin void _start(void)
13dd40c5b4SNicholas Piggin {
14*8c9c01ceSMadhavan Srinivasan 	asm volatile (
15*8c9c01ceSMadhavan Srinivasan 		"li %%r0, %[sys_exit];"
16*8c9c01ceSMadhavan Srinivasan 		"li %%r3, 0;"
17*8c9c01ceSMadhavan Srinivasan 		"sc;"
18*8c9c01ceSMadhavan Srinivasan 		:
19*8c9c01ceSMadhavan Srinivasan 		: [sys_exit] "i" (SYS_exit)
20*8c9c01ceSMadhavan Srinivasan 		/*
21*8c9c01ceSMadhavan Srinivasan 		 * "sc" will clobber r0, r3-r13, cr0, ctr, xer and memory.
22*8c9c01ceSMadhavan Srinivasan 		 * Even though sys_exit never returns, handle clobber
23*8c9c01ceSMadhavan Srinivasan 		 * registers.
24*8c9c01ceSMadhavan Srinivasan 		 */
25*8c9c01ceSMadhavan Srinivasan 		: "r0", "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10",
26*8c9c01ceSMadhavan Srinivasan 		  "r11", "r12", "r13", "cr0", "ctr", "xer", "memory"
27*8c9c01ceSMadhavan Srinivasan 	);
28dd40c5b4SNicholas Piggin }
29