Browse code

ARM: Move asm.S from libavcodec to libavutil

This will allow for easier implementation of ARM-optimized functions in
libraries other than libavcodec.

Justin Ruggles authored on 2012/05/22 04:46:23
Showing 40 changed files
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 
23 23
 function ff_ps_add_squares_neon, export=1
24 24
         mov             r3,  r0
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 
23 23
 function ff_ac3_update_bap_counts_arm, export=1
24 24
         push            {lr}
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 
23 23
 function ff_ac3_bit_alloc_calc_bap_armv6, export=1
24 24
         ldr             r12, [sp]
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 
23 23
 function ff_ac3_max_msb_abs_int16_neon, export=1
24 24
         vmov.i16        q0,  #0
25 25
deleted file mode 100644
... ...
@@ -1,231 +0,0 @@
1
-/*
2
- * Copyright (c) 2008 Mans Rullgard <mans@mansr.com>
3
- *
4
- * This file is part of Libav.
5
- *
6
- * Libav is free software; you can redistribute it and/or
7
- * modify it under the terms of the GNU Lesser General Public
8
- * License as published by the Free Software Foundation; either
9
- * version 2.1 of the License, or (at your option) any later version.
10
- *
11
- * Libav is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
- * Lesser General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU Lesser General Public
17
- * License along with Libav; if not, write to the Free Software
18
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
- */
20
-
21
-#include "config.h"
22
-
23
-#ifdef __ELF__
24
-#   define ELF
25
-#else
26
-#   define ELF @
27
-#endif
28
-
29
-#if CONFIG_THUMB
30
-#   define A @
31
-#   define T
32
-#else
33
-#   define A
34
-#   define T @
35
-#endif
36
-
37
-#if   HAVE_NEON
38
-        .arch           armv7-a
39
-#elif HAVE_ARMV6T2
40
-        .arch           armv6t2
41
-#elif HAVE_ARMV6
42
-        .arch           armv6
43
-#elif HAVE_ARMV5TE
44
-        .arch           armv5te
45
-#endif
46
-
47
-#if   HAVE_NEON
48
-        .fpu            neon
49
-#elif HAVE_ARMVFP
50
-        .fpu            vfp
51
-#endif
52
-
53
-        .syntax unified
54
-T       .thumb
55
-
56
-.macro  require8 val=1
57
-ELF     .eabi_attribute 24, \val
58
-.endm
59
-
60
-.macro  preserve8 val=1
61
-ELF     .eabi_attribute 25, \val
62
-.endm
63
-
64
-.macro  function name, export=0
65
-    .macro endfunc
66
-ELF     .size   \name, . - \name
67
-        .endfunc
68
-        .purgem endfunc
69
-    .endm
70
-        .text
71
-        .align          2
72
-    .if \export
73
-        .global EXTERN_ASM\name
74
-EXTERN_ASM\name:
75
-    .endif
76
-ELF     .type   \name, %function
77
-        .func   \name
78
-\name:
79
-.endm
80
-
81
-.macro  const   name, align=2
82
-    .macro endconst
83
-ELF     .size   \name, . - \name
84
-        .purgem endconst
85
-    .endm
86
-        .section        .rodata
87
-        .align          \align
88
-\name:
89
-.endm
90
-
91
-#if !HAVE_ARMV6T2
92
-.macro  movw    rd, val
93
-        mov     \rd, \val &  255
94
-        orr     \rd, \val & ~255
95
-.endm
96
-#endif
97
-
98
-.macro  mov32   rd, val
99
-#if HAVE_ARMV6T2
100
-        movw            \rd, #(\val) & 0xffff
101
-    .if (\val) >> 16
102
-        movt            \rd, #(\val) >> 16
103
-    .endif
104
-#else
105
-        ldr             \rd, =\val
106
-#endif
107
-.endm
108
-
109
-.macro  movrel rd, val
110
-#if HAVE_ARMV6T2 && !CONFIG_PIC && !defined(__APPLE__)
111
-        movw            \rd, #:lower16:\val
112
-        movt            \rd, #:upper16:\val
113
-#else
114
-        ldr             \rd, =\val
115
-#endif
116
-.endm
117
-
118
-.macro  ldr_pre         rt,  rn,  rm:vararg
119
-A       ldr             \rt, [\rn, \rm]!
120
-T       add             \rn, \rn, \rm
121
-T       ldr             \rt, [\rn]
122
-.endm
123
-
124
-.macro  ldr_dpre        rt,  rn,  rm:vararg
125
-A       ldr             \rt, [\rn, -\rm]!
126
-T       sub             \rn, \rn, \rm
127
-T       ldr             \rt, [\rn]
128
-.endm
129
-
130
-.macro  ldr_nreg        rt,  rn,  rm:vararg
131
-A       ldr             \rt, [\rn, -\rm]
132
-T       sub             \rt, \rn, \rm
133
-T       ldr             \rt, [\rt]
134
-.endm
135
-
136
-.macro  ldr_post        rt,  rn,  rm:vararg
137
-A       ldr             \rt, [\rn], \rm
138
-T       ldr             \rt, [\rn]
139
-T       add             \rn, \rn, \rm
140
-.endm
141
-
142
-.macro  ldrd_reg        rt,  rt2, rn,  rm
143
-A       ldrd            \rt, \rt2, [\rn, \rm]
144
-T       add             \rt, \rn, \rm
145
-T       ldrd            \rt, \rt2, [\rt]
146
-.endm
147
-
148
-.macro  ldrd_post       rt,  rt2, rn,  rm
149
-A       ldrd            \rt, \rt2, [\rn], \rm
150
-T       ldrd            \rt, \rt2, [\rn]
151
-T       add             \rn, \rn, \rm
152
-.endm
153
-
154
-.macro  ldrh_pre        rt,  rn,  rm
155
-A       ldrh            \rt, [\rn, \rm]!
156
-T       add             \rn, \rn, \rm
157
-T       ldrh            \rt, [\rn]
158
-.endm
159
-
160
-.macro  ldrh_dpre       rt,  rn,  rm
161
-A       ldrh            \rt, [\rn, -\rm]!
162
-T       sub             \rn, \rn, \rm
163
-T       ldrh            \rt, [\rn]
164
-.endm
165
-
166
-.macro  ldrh_post       rt,  rn,  rm
167
-A       ldrh            \rt, [\rn], \rm
168
-T       ldrh            \rt, [\rn]
169
-T       add             \rn, \rn, \rm
170
-.endm
171
-
172
-.macro  ldrb_post       rt,  rn,  rm
173
-A       ldrb            \rt, [\rn], \rm
174
-T       ldrb            \rt, [\rn]
175
-T       add             \rn, \rn, \rm
176
-.endm
177
-
178
-.macro  str_post       rt,  rn,  rm:vararg
179
-A       str             \rt, [\rn], \rm
180
-T       str             \rt, [\rn]
181
-T       add             \rn, \rn, \rm
182
-.endm
183
-
184
-.macro  strb_post       rt,  rn,  rm:vararg
185
-A       strb            \rt, [\rn], \rm
186
-T       strb            \rt, [\rn]
187
-T       add             \rn, \rn, \rm
188
-.endm
189
-
190
-.macro  strd_post       rt,  rt2, rn,  rm
191
-A       strd            \rt, \rt2, [\rn], \rm
192
-T       strd            \rt, \rt2, [\rn]
193
-T       add             \rn, \rn, \rm
194
-.endm
195
-
196
-.macro  strh_pre        rt,  rn,  rm
197
-A       strh            \rt, [\rn, \rm]!
198
-T       add             \rn, \rn, \rm
199
-T       strh            \rt, [\rn]
200
-.endm
201
-
202
-.macro  strh_dpre       rt,  rn,  rm
203
-A       strh            \rt, [\rn, -\rm]!
204
-T       sub             \rn, \rn, \rm
205
-T       strh            \rt, [\rn]
206
-.endm
207
-
208
-.macro  strh_post       rt,  rn,  rm
209
-A       strh            \rt, [\rn], \rm
210
-T       strh            \rt, [\rn]
211
-T       add             \rn, \rn, \rm
212
-.endm
213
-
214
-.macro  strh_dpost       rt,  rn,  rm
215
-A       strh            \rt, [\rn], -\rm
216
-T       strh            \rt, [\rn]
217
-T       sub             \rn, \rn, \rm
218
-.endm
219
-
220
-#if HAVE_VFP_ARGS
221
-        .eabi_attribute 28, 1
222
-#   define VFP
223
-#   define NOVFP @
224
-#else
225
-#   define VFP   @
226
-#   define NOVFP
227
-#endif
228
-
229
-#define GLUE(a, b) a ## b
230
-#define JOIN(a, b) GLUE(a, b)
231
-#define X(s) JOIN(EXTERN_ASM, s)
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 
23 23
 function ff_dca_lfe_fir_neon, export=1
24 24
         push            {r4-r6,lr}
... ...
@@ -20,7 +20,7 @@
20 20
 @
21 21
 
22 22
 #include "config.h"
23
-#include "asm.S"
23
+#include "libavutil/arm/asm.S"
24 24
 
25 25
         preserve8
26 26
 
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 
23 23
         preserve8
24 24
 
... ...
@@ -20,7 +20,7 @@
20 20
  */
21 21
 
22 22
 #include "config.h"
23
-#include "asm.S"
23
+#include "libavutil/arm/asm.S"
24 24
 
25 25
         preserve8
26 26
 
... ...
@@ -19,7 +19,7 @@
19 19
  */
20 20
 
21 21
 #include "config.h"
22
-#include "asm.S"
22
+#include "libavutil/arm/asm.S"
23 23
 
24 24
 /*
25 25
  * VFP is a floating point coprocessor used in some ARM cores. VFP11 has 1 cycle
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 
23 23
 .macro  bflies          d0,  d1,  r0,  r1
24 24
         vrev64.32       \r0, \d1                @ t5, t6, t1, t2
... ...
@@ -24,7 +24,7 @@
24 24
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 25
  */
26 26
 
27
-#include "asm.S"
27
+#include "libavutil/arm/asm.S"
28 28
 
29 29
 #define M_SQRT1_2 0.70710678118654752440
30 30
 
... ...
@@ -20,7 +20,7 @@
20 20
  */
21 21
 
22 22
 #include "config.h"
23
-#include "asm.S"
23
+#include "libavutil/arm/asm.S"
24 24
 
25 25
         preserve8
26 26
 
... ...
@@ -19,7 +19,7 @@
19 19
  */
20 20
 
21 21
 #include "config.h"
22
-#include "asm.S"
22
+#include "libavutil/arm/asm.S"
23 23
 
24 24
 /**
25 25
  * ARM VFP optimized float to int16 conversion.
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 
23 23
 /* chroma_mc8(uint8_t *dst, uint8_t *src, int stride, int h, int x, int y) */
24 24
 .macro  h264_chroma_mc8 type, codec=h264
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 #include "neon.S"
23 23
 
24 24
         /* H.264 loop filter */
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 
23 23
         preserve8
24 24
 
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 
23 23
         .macro ldcol.8  rd,  rs,  rt,  n=8,  hi=0
24 24
 .if \n == 8 || \hi == 0
... ...
@@ -19,7 +19,7 @@
19 19
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 20
  */
21 21
 
22
-#include "asm.S"
22
+#include "libavutil/arm/asm.S"
23 23
 
24 24
         preserve8
25 25
         .fpu neon
... ...
@@ -25,7 +25,7 @@
25 25
 
26 26
 */
27 27
 
28
-#include "asm.S"
28
+#include "libavutil/arm/asm.S"
29 29
 
30 30
 #define FIX_0_298631336 2446
31 31
 #define FIX_0_541196100 4433
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 
23 23
         preserve8
24 24
 
... ...
@@ -19,7 +19,7 @@
19 19
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 20
  */
21 21
 
22
-#include "asm.S"
22
+#include "libavutil/arm/asm.S"
23 23
 
24 24
         preserve8
25 25
 
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 
23 23
 .macro  skip            args:vararg
24 24
 .endm
... ...
@@ -20,7 +20,7 @@
20 20
  */
21 21
 
22 22
 #include "config.h"
23
-#include "asm.S"
23
+#include "libavutil/arm/asm.S"
24 24
 
25 25
 /*
26 26
  * Special optimized version of dct_unquantize_h263_helper_c, it
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 #include "asm-offsets.h"
23 23
 
24 24
 function ff_dct_unquantize_h263_inter_neon, export=1
... ...
@@ -19,7 +19,7 @@
19 19
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 20
  */
21 21
 
22
-#include "asm.S"
22
+#include "libavutil/arm/asm.S"
23 23
 
24 24
         preserve8
25 25
 
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 #include "neon.S"
23 23
 
24 24
 .macro rv34_inv_transform    r0
... ...
@@ -19,7 +19,7 @@
19 19
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 20
  */
21 21
 
22
-#include "asm.S"
22
+#include "libavutil/arm/asm.S"
23 23
 #include "neon.S"
24 24
 
25 25
 .macro  qpel_lowpass    r0,  r1,  rc1, rc2, shift
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 
23 23
 function ff_sbr_sum64x5_neon, export=1
24 24
         push            {lr}
... ...
@@ -23,7 +23,7 @@
23 23
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 24
  */
25 25
 
26
-#include "asm.S"
26
+#include "libavutil/arm/asm.S"
27 27
 
28 28
 /* useful constants for the algorithm, they are save in __constant_ptr__ at */
29 29
 /* the end of the source code.*/
... ...
@@ -21,7 +21,7 @@
21 21
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 22
  */
23 23
 
24
-#include "asm.S"
24
+#include "libavutil/arm/asm.S"
25 25
 
26 26
 #define W1  22725   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
27 27
 #define W2  21407   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
... ...
@@ -21,7 +21,7 @@
21 21
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 22
  */
23 23
 
24
-#include "asm.S"
24
+#include "libavutil/arm/asm.S"
25 25
 
26 26
 #define W1  22725   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
27 27
 #define W2  21407   /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */
... ...
@@ -23,7 +23,7 @@
23 23
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 24
  */
25 25
 
26
-#include "asm.S"
26
+#include "libavutil/arm/asm.S"
27 27
 
28 28
 #define W1  22725  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
29 29
 #define W2  21407  //cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 
23 23
         preserve8
24 24
 
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 
23 23
 const   vp3_idct_constants, align=4
24 24
 .short 64277, 60547, 54491, 46341, 36410, 25080, 12785
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 
23 23
 .macro  vp6_edge_filter
24 24
         vdup.16         q3,  r2                 @ t
... ...
@@ -18,7 +18,7 @@
18 18
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 19
  */
20 20
 
21
-#include "asm.S"
21
+#include "libavutil/arm/asm.S"
22 22
 
23 23
 .macro rac_get_prob     h, bs, buf, cw, pr, t0, t1
24 24
         adds            \bs, \bs, \t0
... ...
@@ -52,7 +52,7 @@
52 52
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
53 53
  */
54 54
 
55
-#include "asm.S"
55
+#include "libavutil/arm/asm.S"
56 56
 
57 57
 @ idct
58 58
 
... ...
@@ -21,7 +21,7 @@
21 21
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 22
  */
23 23
 
24
-#include "asm.S"
24
+#include "libavutil/arm/asm.S"
25 25
 #include "neon.S"
26 26
 
27 27
 function ff_vp8_luma_dc_wht_neon, export=1
28 28
new file mode 100644
... ...
@@ -0,0 +1,231 @@
0
+/*
1
+ * Copyright (c) 2008 Mans Rullgard <mans@mansr.com>
2
+ *
3
+ * This file is part of Libav.
4
+ *
5
+ * Libav is free software; you can redistribute it and/or
6
+ * modify it under the terms of the GNU Lesser General Public
7
+ * License as published by the Free Software Foundation; either
8
+ * version 2.1 of the License, or (at your option) any later version.
9
+ *
10
+ * Libav is distributed in the hope that it will be useful,
11
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13
+ * Lesser General Public License for more details.
14
+ *
15
+ * You should have received a copy of the GNU Lesser General Public
16
+ * License along with Libav; if not, write to the Free Software
17
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+ */
19
+
20
+#include "config.h"
21
+
22
+#ifdef __ELF__
23
+#   define ELF
24
+#else
25
+#   define ELF @
26
+#endif
27
+
28
+#if CONFIG_THUMB
29
+#   define A @
30
+#   define T
31
+#else
32
+#   define A
33
+#   define T @
34
+#endif
35
+
36
+#if   HAVE_NEON
37
+        .arch           armv7-a
38
+#elif HAVE_ARMV6T2
39
+        .arch           armv6t2
40
+#elif HAVE_ARMV6
41
+        .arch           armv6
42
+#elif HAVE_ARMV5TE
43
+        .arch           armv5te
44
+#endif
45
+
46
+#if   HAVE_NEON
47
+        .fpu            neon
48
+#elif HAVE_ARMVFP
49
+        .fpu            vfp
50
+#endif
51
+
52
+        .syntax unified
53
+T       .thumb
54
+
55
+.macro  require8 val=1
56
+ELF     .eabi_attribute 24, \val
57
+.endm
58
+
59
+.macro  preserve8 val=1
60
+ELF     .eabi_attribute 25, \val
61
+.endm
62
+
63
+.macro  function name, export=0
64
+    .macro endfunc
65
+ELF     .size   \name, . - \name
66
+        .endfunc
67
+        .purgem endfunc
68
+    .endm
69
+        .text
70
+        .align          2
71
+    .if \export
72
+        .global EXTERN_ASM\name
73
+EXTERN_ASM\name:
74
+    .endif
75
+ELF     .type   \name, %function
76
+        .func   \name
77
+\name:
78
+.endm
79
+
80
+.macro  const   name, align=2
81
+    .macro endconst
82
+ELF     .size   \name, . - \name
83
+        .purgem endconst
84
+    .endm
85
+        .section        .rodata
86
+        .align          \align
87
+\name:
88
+.endm
89
+
90
+#if !HAVE_ARMV6T2
91
+.macro  movw    rd, val
92
+        mov     \rd, \val &  255
93
+        orr     \rd, \val & ~255
94
+.endm
95
+#endif
96
+
97
+.macro  mov32   rd, val
98
+#if HAVE_ARMV6T2
99
+        movw            \rd, #(\val) & 0xffff
100
+    .if (\val) >> 16
101
+        movt            \rd, #(\val) >> 16
102
+    .endif
103
+#else
104
+        ldr             \rd, =\val
105
+#endif
106
+.endm
107
+
108
+.macro  movrel rd, val
109
+#if HAVE_ARMV6T2 && !CONFIG_PIC && !defined(__APPLE__)
110
+        movw            \rd, #:lower16:\val
111
+        movt            \rd, #:upper16:\val
112
+#else
113
+        ldr             \rd, =\val
114
+#endif
115
+.endm
116
+
117
+.macro  ldr_pre         rt,  rn,  rm:vararg
118
+A       ldr             \rt, [\rn, \rm]!
119
+T       add             \rn, \rn, \rm
120
+T       ldr             \rt, [\rn]
121
+.endm
122
+
123
+.macro  ldr_dpre        rt,  rn,  rm:vararg
124
+A       ldr             \rt, [\rn, -\rm]!
125
+T       sub             \rn, \rn, \rm
126
+T       ldr             \rt, [\rn]
127
+.endm
128
+
129
+.macro  ldr_nreg        rt,  rn,  rm:vararg
130
+A       ldr             \rt, [\rn, -\rm]
131
+T       sub             \rt, \rn, \rm
132
+T       ldr             \rt, [\rt]
133
+.endm
134
+
135
+.macro  ldr_post        rt,  rn,  rm:vararg
136
+A       ldr             \rt, [\rn], \rm
137
+T       ldr             \rt, [\rn]
138
+T       add             \rn, \rn, \rm
139
+.endm
140
+
141
+.macro  ldrd_reg        rt,  rt2, rn,  rm
142
+A       ldrd            \rt, \rt2, [\rn, \rm]
143
+T       add             \rt, \rn, \rm
144
+T       ldrd            \rt, \rt2, [\rt]
145
+.endm
146
+
147
+.macro  ldrd_post       rt,  rt2, rn,  rm
148
+A       ldrd            \rt, \rt2, [\rn], \rm
149
+T       ldrd            \rt, \rt2, [\rn]
150
+T       add             \rn, \rn, \rm
151
+.endm
152
+
153
+.macro  ldrh_pre        rt,  rn,  rm
154
+A       ldrh            \rt, [\rn, \rm]!
155
+T       add             \rn, \rn, \rm
156
+T       ldrh            \rt, [\rn]
157
+.endm
158
+
159
+.macro  ldrh_dpre       rt,  rn,  rm
160
+A       ldrh            \rt, [\rn, -\rm]!
161
+T       sub             \rn, \rn, \rm
162
+T       ldrh            \rt, [\rn]
163
+.endm
164
+
165
+.macro  ldrh_post       rt,  rn,  rm
166
+A       ldrh            \rt, [\rn], \rm
167
+T       ldrh            \rt, [\rn]
168
+T       add             \rn, \rn, \rm
169
+.endm
170
+
171
+.macro  ldrb_post       rt,  rn,  rm
172
+A       ldrb            \rt, [\rn], \rm
173
+T       ldrb            \rt, [\rn]
174
+T       add             \rn, \rn, \rm
175
+.endm
176
+
177
+.macro  str_post       rt,  rn,  rm:vararg
178
+A       str             \rt, [\rn], \rm
179
+T       str             \rt, [\rn]
180
+T       add             \rn, \rn, \rm
181
+.endm
182
+
183
+.macro  strb_post       rt,  rn,  rm:vararg
184
+A       strb            \rt, [\rn], \rm
185
+T       strb            \rt, [\rn]
186
+T       add             \rn, \rn, \rm
187
+.endm
188
+
189
+.macro  strd_post       rt,  rt2, rn,  rm
190
+A       strd            \rt, \rt2, [\rn], \rm
191
+T       strd            \rt, \rt2, [\rn]
192
+T       add             \rn, \rn, \rm
193
+.endm
194
+
195
+.macro  strh_pre        rt,  rn,  rm
196
+A       strh            \rt, [\rn, \rm]!
197
+T       add             \rn, \rn, \rm
198
+T       strh            \rt, [\rn]
199
+.endm
200
+
201
+.macro  strh_dpre       rt,  rn,  rm
202
+A       strh            \rt, [\rn, -\rm]!
203
+T       sub             \rn, \rn, \rm
204
+T       strh            \rt, [\rn]
205
+.endm
206
+
207
+.macro  strh_post       rt,  rn,  rm
208
+A       strh            \rt, [\rn], \rm
209
+T       strh            \rt, [\rn]
210
+T       add             \rn, \rn, \rm
211
+.endm
212
+
213
+.macro  strh_dpost       rt,  rn,  rm
214
+A       strh            \rt, [\rn], -\rm
215
+T       strh            \rt, [\rn]
216
+T       sub             \rn, \rn, \rm
217
+.endm
218
+
219
+#if HAVE_VFP_ARGS
220
+        .eabi_attribute 28, 1
221
+#   define VFP
222
+#   define NOVFP @
223
+#else
224
+#   define VFP   @
225
+#   define NOVFP
226
+#endif
227
+
228
+#define GLUE(a, b) a ## b
229
+#define JOIN(a, b) GLUE(a, b)
230
+#define X(s) JOIN(EXTERN_ASM, s)