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
8ENTRY(absolute_data64)
9	ldr	x0, 0f
10	ret
110:	.quad	sym64_abs
12ENDPROC(absolute_data64)
13
14ENTRY(absolute_data32)
15	ldr	w0, 0f
16	ret
170:	.long	sym32_abs
18ENDPROC(absolute_data32)
19
20ENTRY(absolute_data16)
21	adr	x0, 0f
22	ldrh	w0, [x0]
23	ret
240:	.short	sym16_abs, 0
25ENDPROC(absolute_data16)
26
27ENTRY(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
32ENDPROC(signed_movw)
33
34ENTRY(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
40ENDPROC(unsigned_movw)
41
42	.align	12
43	.space	0xff8
44ENTRY(relative_adrp)
45	adrp	x0, sym64_rel
46	add	x0, x0, #:lo12:sym64_rel
47	ret
48ENDPROC(relative_adrp)
49
50	.align	12
51	.space	0xffc
52ENTRY(relative_adrp_far)
53	adrp	x0, memstart_addr
54	add	x0, x0, #:lo12:memstart_addr
55	ret
56ENDPROC(relative_adrp_far)
57
58ENTRY(relative_adr)
59	adr	x0, sym64_rel
60	ret
61ENDPROC(relative_adr)
62
63ENTRY(relative_data64)
64	adr	x1, 0f
65	ldr	x0, [x1]
66	add	x0, x0, x1
67	ret
680:	.quad	sym64_rel - .
69ENDPROC(relative_data64)
70
71ENTRY(relative_data32)
72	adr	x1, 0f
73	ldr	w0, [x1]
74	add	x0, x0, x1
75	ret
760:	.long	sym64_rel - .
77ENDPROC(relative_data32)
78
79ENTRY(relative_data16)
80	adr	x1, 0f
81	ldrsh	w0, [x1]
82	add	x0, x0, x1
83	ret
840:	.short	sym64_rel - ., 0
85ENDPROC(relative_data16)
86