1/* SPDX-License-Identifier: GPL-2.0-only */
2/*
3 * Copyright (C) 2017 Linaro, Ltd. <ard.biesheuvel@linaro.org>
4 */
5
6#include <linux/linkage.h>
7
8SYM_FUNC_START(absolute_data64)
9	ldr	x0, 0f
10	ret
110:	.quad	sym64_abs
12SYM_FUNC_END(absolute_data64)
13
14SYM_FUNC_START(absolute_data32)
15	ldr	w0, 0f
16	ret
170:	.long	sym32_abs
18SYM_FUNC_END(absolute_data32)
19
20SYM_FUNC_START(absolute_data16)
21	adr	x0, 0f
22	ldrh	w0, [x0]
23	ret
240:	.short	sym16_abs, 0
25SYM_FUNC_END(absolute_data16)
26
27SYM_FUNC_START(signed_movw)
28	movz	x0, #:abs_g2_s:sym64_abs
29	movk	x0, #:abs_g1_nc:sym64_abs
30	movk	x0, #:abs_g0_nc:sym64_abs
31	ret
32SYM_FUNC_END(signed_movw)
33
34SYM_FUNC_START(unsigned_movw)
35	movz	x0, #:abs_g3:sym64_abs
36	movk	x0, #:abs_g2_nc:sym64_abs
37	movk	x0, #:abs_g1_nc:sym64_abs
38	movk	x0, #:abs_g0_nc:sym64_abs
39	ret
40SYM_FUNC_END(unsigned_movw)
41
42	.align	12
43	.space	0xff8
44SYM_FUNC_START(relative_adrp)
45	adrp	x0, sym64_rel
46	add	x0, x0, #:lo12:sym64_rel
47	ret
48SYM_FUNC_END(relative_adrp)
49
50	.align	12
51	.space	0xffc
52SYM_FUNC_START(relative_adrp_far)
53	adrp	x0, memstart_addr
54	add	x0, x0, #:lo12:memstart_addr
55	ret
56SYM_FUNC_END(relative_adrp_far)
57
58SYM_FUNC_START(relative_adr)
59	adr	x0, sym64_rel
60	ret
61SYM_FUNC_END(relative_adr)
62
63SYM_FUNC_START(relative_data64)
64	adr	x1, 0f
65	ldr	x0, [x1]
66	add	x0, x0, x1
67	ret
680:	.quad	sym64_rel - .
69SYM_FUNC_END(relative_data64)
70
71SYM_FUNC_START(relative_data32)
72	adr	x1, 0f
73	ldr	w0, [x1]
74	add	x0, x0, x1
75	ret
760:	.long	sym64_rel - .
77SYM_FUNC_END(relative_data32)
78
79SYM_FUNC_START(relative_data16)
80	adr	x1, 0f
81	ldrsh	w0, [x1]
82	add	x0, x0, x1
83	ret
840:	.short	sym64_rel - ., 0
85SYM_FUNC_END(relative_data16)
86