blob: 2b8d9cb8b0780fc96a6cf4cfecb172064099bfee [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
Ard Biesheuvela257e022018-03-06 17:15:33 +000046 .align 12
47 .space 0xff8
Ard Biesheuvel214fad52017-03-31 08:55:33 +010048ENTRY(relative_adrp)
49 adrp x0, sym64_rel
50 add x0, x0, #:lo12:sym64_rel
51 ret
52ENDPROC(relative_adrp)
53
Ard Biesheuvela257e022018-03-06 17:15:33 +000054 .align 12
55 .space 0xffc
56ENTRY(relative_adrp_far)
Arnd Bergmannbd99f9a2018-03-13 12:41:41 +010057 adrp x0, memstart_addr
58 add x0, x0, #:lo12:memstart_addr
Ard Biesheuvela257e022018-03-06 17:15:33 +000059 ret
60ENDPROC(relative_adrp_far)
Ard Biesheuvel214fad52017-03-31 08:55:33 +010061
62ENTRY(relative_adr)
63 adr x0, sym64_rel
64 ret
65ENDPROC(relative_adr)
66
67ENTRY(relative_data64)
68 adr x1, 0f
69 ldr x0, [x1]
70 add x0, x0, x1
71 ret
720: .quad sym64_rel - .
73ENDPROC(relative_data64)
74
75ENTRY(relative_data32)
76 adr x1, 0f
77 ldr w0, [x1]
78 add x0, x0, x1
79 ret
800: .long sym64_rel - .
81ENDPROC(relative_data32)
82
83ENTRY(relative_data16)
84 adr x1, 0f
85 ldrsh w0, [x1]
86 add x0, x0, x1
87 ret
880: .short sym64_rel - ., 0
89ENDPROC(relative_data16)