blob: e1edcefeb02d5d7086d00f2ac8ce74dfb12da546 [file] [log] [blame]
Ard Biesheuvel214fad52017-03-31 08:55:33 +01001/*
2 * Copyright (C) 2017 Linaro, Ltd. <ard.biesheuvel@linaro.org>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 */
9
10#include <linux/linkage.h>
11
12ENTRY(absolute_data64)
13 ldr x0, 0f
14 ret
150: .quad sym64_abs
16ENDPROC(absolute_data64)
17
18ENTRY(absolute_data32)
19 ldr w0, 0f
20 ret
210: .long sym32_abs
22ENDPROC(absolute_data32)
23
24ENTRY(absolute_data16)
25 adr x0, 0f
26 ldrh w0, [x0]
27 ret
280: .short sym16_abs, 0
29ENDPROC(absolute_data16)
30
31ENTRY(signed_movw)
32 movz x0, #:abs_g2_s:sym64_abs
33 movk x0, #:abs_g1_nc:sym64_abs
34 movk x0, #:abs_g0_nc:sym64_abs
35 ret
36ENDPROC(signed_movw)
37
38ENTRY(unsigned_movw)
39 movz x0, #:abs_g3:sym64_abs
40 movk x0, #:abs_g2_nc:sym64_abs
41 movk x0, #:abs_g1_nc:sym64_abs
42 movk x0, #:abs_g0_nc:sym64_abs
43 ret
44ENDPROC(unsigned_movw)
45
46#ifndef CONFIG_ARM64_ERRATUM_843419
47
48ENTRY(relative_adrp)
49 adrp x0, sym64_rel
50 add x0, x0, #:lo12:sym64_rel
51 ret
52ENDPROC(relative_adrp)
53
54#endif
55
56ENTRY(relative_adr)
57 adr x0, sym64_rel
58 ret
59ENDPROC(relative_adr)
60
61ENTRY(relative_data64)
62 adr x1, 0f
63 ldr x0, [x1]
64 add x0, x0, x1
65 ret
660: .quad sym64_rel - .
67ENDPROC(relative_data64)
68
69ENTRY(relative_data32)
70 adr x1, 0f
71 ldr w0, [x1]
72 add x0, x0, x1
73 ret
740: .long sym64_rel - .
75ENDPROC(relative_data32)
76
77ENTRY(relative_data16)
78 adr x1, 0f
79 ldrsh w0, [x1]
80 add x0, x0, x1
81 ret
820: .short sym64_rel - ., 0
83ENDPROC(relative_data16)