1d2912cb1SThomas Gleixner/* SPDX-License-Identifier: GPL-2.0-only */
2214fad55SArd Biesheuvel/*
3214fad55SArd Biesheuvel * Copyright (C) 2017 Linaro, Ltd. <ard.biesheuvel@linaro.org>
4214fad55SArd Biesheuvel */
5214fad55SArd Biesheuvel
6214fad55SArd Biesheuvel#include <linux/linkage.h>
7214fad55SArd Biesheuvel
80343a7e4SMark BrownSYM_FUNC_START(absolute_data64)
9214fad55SArd Biesheuvel	ldr	x0, 0f
10214fad55SArd Biesheuvel	ret
11214fad55SArd Biesheuvel0:	.quad	sym64_abs
120343a7e4SMark BrownSYM_FUNC_END(absolute_data64)
13214fad55SArd Biesheuvel
140343a7e4SMark BrownSYM_FUNC_START(absolute_data32)
15214fad55SArd Biesheuvel	ldr	w0, 0f
16214fad55SArd Biesheuvel	ret
17214fad55SArd Biesheuvel0:	.long	sym32_abs
180343a7e4SMark BrownSYM_FUNC_END(absolute_data32)
19214fad55SArd Biesheuvel
200343a7e4SMark BrownSYM_FUNC_START(absolute_data16)
21214fad55SArd Biesheuvel	adr	x0, 0f
22214fad55SArd Biesheuvel	ldrh	w0, [x0]
23214fad55SArd Biesheuvel	ret
24214fad55SArd Biesheuvel0:	.short	sym16_abs, 0
250343a7e4SMark BrownSYM_FUNC_END(absolute_data16)
26214fad55SArd Biesheuvel
270343a7e4SMark BrownSYM_FUNC_START(signed_movw)
28214fad55SArd Biesheuvel	movz	x0, #:abs_g2_s:sym64_abs
29214fad55SArd Biesheuvel	movk	x0, #:abs_g1_nc:sym64_abs
30214fad55SArd Biesheuvel	movk	x0, #:abs_g0_nc:sym64_abs
31214fad55SArd Biesheuvel	ret
320343a7e4SMark BrownSYM_FUNC_END(signed_movw)
33214fad55SArd Biesheuvel
340343a7e4SMark BrownSYM_FUNC_START(unsigned_movw)
35214fad55SArd Biesheuvel	movz	x0, #:abs_g3:sym64_abs
36214fad55SArd Biesheuvel	movk	x0, #:abs_g2_nc:sym64_abs
37214fad55SArd Biesheuvel	movk	x0, #:abs_g1_nc:sym64_abs
38214fad55SArd Biesheuvel	movk	x0, #:abs_g0_nc:sym64_abs
39214fad55SArd Biesheuvel	ret
400343a7e4SMark BrownSYM_FUNC_END(unsigned_movw)
41214fad55SArd Biesheuvel
42a257e025SArd Biesheuvel	.align	12
43a257e025SArd Biesheuvel	.space	0xff8
440343a7e4SMark BrownSYM_FUNC_START(relative_adrp)
45214fad55SArd Biesheuvel	adrp	x0, sym64_rel
46214fad55SArd Biesheuvel	add	x0, x0, #:lo12:sym64_rel
47214fad55SArd Biesheuvel	ret
480343a7e4SMark BrownSYM_FUNC_END(relative_adrp)
49214fad55SArd Biesheuvel
50a257e025SArd Biesheuvel	.align	12
51a257e025SArd Biesheuvel	.space	0xffc
520343a7e4SMark BrownSYM_FUNC_START(relative_adrp_far)
53bd99f9a1SArnd Bergmann	adrp	x0, memstart_addr
54bd99f9a1SArnd Bergmann	add	x0, x0, #:lo12:memstart_addr
55a257e025SArd Biesheuvel	ret
560343a7e4SMark BrownSYM_FUNC_END(relative_adrp_far)
57214fad55SArd Biesheuvel
580343a7e4SMark BrownSYM_FUNC_START(relative_adr)
59214fad55SArd Biesheuvel	adr	x0, sym64_rel
60214fad55SArd Biesheuvel	ret
610343a7e4SMark BrownSYM_FUNC_END(relative_adr)
62214fad55SArd Biesheuvel
630343a7e4SMark BrownSYM_FUNC_START(relative_data64)
64214fad55SArd Biesheuvel	adr	x1, 0f
65214fad55SArd Biesheuvel	ldr	x0, [x1]
66214fad55SArd Biesheuvel	add	x0, x0, x1
67214fad55SArd Biesheuvel	ret
68214fad55SArd Biesheuvel0:	.quad	sym64_rel - .
690343a7e4SMark BrownSYM_FUNC_END(relative_data64)
70214fad55SArd Biesheuvel
710343a7e4SMark BrownSYM_FUNC_START(relative_data32)
72214fad55SArd Biesheuvel	adr	x1, 0f
73214fad55SArd Biesheuvel	ldr	w0, [x1]
74214fad55SArd Biesheuvel	add	x0, x0, x1
75214fad55SArd Biesheuvel	ret
76214fad55SArd Biesheuvel0:	.long	sym64_rel - .
770343a7e4SMark BrownSYM_FUNC_END(relative_data32)
78214fad55SArd Biesheuvel
790343a7e4SMark BrownSYM_FUNC_START(relative_data16)
80214fad55SArd Biesheuvel	adr	x1, 0f
81214fad55SArd Biesheuvel	ldrsh	w0, [x1]
82214fad55SArd Biesheuvel	add	x0, x0, x1
83214fad55SArd Biesheuvel	ret
84214fad55SArd Biesheuvel0:	.short	sym64_rel - ., 0
850343a7e4SMark BrownSYM_FUNC_END(relative_data16)
86