1/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * (C) Copyright 2007 Semihalf
4 *
5 * Written by: Rafal Jaworowski <raj@semihalf.com>
6 */
7
8#if defined(CONFIG_PPC)
9
10	.text
11	.globl _start
12_start:
13	lis	%r11, search_hint@ha
14	addi	%r11, %r11, search_hint@l
15	stw	%r1, 0(%r11)
16	b	main
17
18
19	.globl syscall
20syscall:
21	lis	%r11, syscall_ptr@ha
22	addi	%r11, %r11, syscall_ptr@l
23	lwz	%r11, 0(%r11)
24	mtctr	%r11
25	bctr
26
27#elif defined(CONFIG_ARM) && !defined(CONFIG_ARM64)
28
29	.text
30	.globl _start
31_start:
32	ldr	r4, =search_hint
33	mov	r5, sp
34	str	r5, [r4]
35	b	main
36
37
38	.globl syscall
39syscall:
40	ldr	r4, =syscall_ptr
41	ldr	r4, [r4]
42	bx	r4
43
44#elif defined(CONFIG_ARM64)
45
46	.text
47	.globl _start
48_start:
49	ldr	x17, =search_hint
50	mov	x16, sp
51	str	x16, [x17]
52	b	main
53
54	.globl syscall
55syscall:
56	ldr	x16, =syscall_ptr
57	ldr	x16, [x16]
58	br	x16
59
60#elif defined(CONFIG_MIPS)
61#include <asm/asm.h>
62	.text
63	.globl __start
64	.ent __start
65__start:
66	PTR_S	$sp, search_hint
67	b	main
68	.end __start
69
70	.globl syscall
71	.ent syscall
72syscall:
73	PTR_S	$ra, return_addr
74	PTR_L	$t9, syscall_ptr
75	jalr	$t9
76	nop
77	PTR_L	$ra, return_addr
78	jr	$ra
79	nop
80	.end syscall
81
82return_addr:
83	.align 8
84	.long 0
85#elif defined(CONFIG_ARCH_RV32I)
86
87	.text
88	.globl _start
89_start:
90	la	t0, search_hint
91	sw	sp, 0(t0)
92	la	t0, main
93	jalr	x0, t0
94
95	.globl syscall
96syscall:
97	la	t0, syscall_ptr
98	lw	t0, 0(t0)
99	jalr	x0, t0
100
101#elif defined(CONFIG_ARCH_RV64I)
102
103	.text
104	.globl _start
105_start:
106	la	t0, search_hint
107	sd	sp, 0(t0)
108	la	t0, main
109	jalr	x0, t0
110
111	.globl syscall
112syscall:
113	la	t0, syscall_ptr
114	ld	t0, 0(t0)
115	jalr	x0, t0
116
117#else
118#error No support for this arch!
119#endif
120
121.section .data
122
123	.globl syscall_ptr
124syscall_ptr:
125	.align	8
126	.long	0
127
128	.globl search_hint
129search_hint:
130	.long	0
131