Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4349 Serge 1
/*
2
 * Copyright (c) 2008 Mans Rullgard 
3
 *
4
 * This file is part of FFmpeg.
5
 *
6
 * FFmpeg 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
 * FFmpeg 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 FFmpeg; 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_VFP
50
        .fpu            vfp
51
#endif
52
 
53
        .syntax unified
54
T       .thumb
55
ELF     .eabi_attribute 25, 1           @ Tag_ABI_align_preserved
56
 
57
.macro  function name, export=0
58
        .set            .Lpic_idx, 0
59
        .set            .Lpic_gp, 0
60
    .macro endfunc
61
      .if .Lpic_idx
62
        .align          2
63
        .altmacro
64
        put_pic         %(.Lpic_idx - 1)
65
        .noaltmacro
66
      .endif
67
ELF     .size   \name, . - \name
68
        .endfunc
69
        .purgem endfunc
70
    .endm
71
        .text
72
        .align          2
73
    .if \export
74
        .global EXTERN_ASM\name
75
EXTERN_ASM\name:
76
    .endif
77
ELF     .type   \name, %function
78
        .func   \name
79
\name:
80
.endm
81
 
82
.macro  const   name, align=2
83
    .macro endconst
84
ELF     .size   \name, . - \name
85
        .purgem endconst
86
    .endm
87
        .section        .rodata
88
        .align          \align
89
\name:
90
.endm
91
 
92
#if !HAVE_ARMV6T2_EXTERNAL
93
.macro  movw    rd, val
94
        mov     \rd, \val &  255
95
        orr     \rd, \val & ~255
96
.endm
97
#endif
98
 
99
.macro  mov32   rd, val
100
#if HAVE_ARMV6T2_EXTERNAL
101
        movw            \rd, #(\val) & 0xffff
102
    .if (\val) >> 16
103
        movt            \rd, #(\val) >> 16
104
    .endif
105
#else
106
        ldr             \rd, =\val
107
#endif
108
.endm
109
 
110
.macro  put_pic         num
111
        put_pic_\num
112
.endm
113
 
114
.macro  do_def_pic      num, val, label
115
    .macro put_pic_\num
116
      .if \num
117
        .altmacro
118
        put_pic         %(\num - 1)
119
        .noaltmacro
120
      .endif
121
\label: .word           \val
122
        .purgem         put_pic_\num
123
    .endm
124
.endm
125
 
126
.macro  def_pic         val, label
127
        .altmacro
128
        do_def_pic      %.Lpic_idx, \val, \label
129
        .noaltmacro
130
        .set            .Lpic_idx, .Lpic_idx + 1
131
.endm
132
 
133
.macro  ldpic           rd,  val, indir=0
134
        ldr             \rd, .Lpicoff\@
135
.Lpic\@:
136
    .if \indir
137
A       ldr             \rd, [pc, \rd]
138
T       add             \rd, pc
139
T       ldr             \rd, [\rd]
140
    .else
141
        add             \rd, pc
142
    .endif
143
        def_pic         \val - (.Lpic\@ + (8 >> CONFIG_THUMB)), .Lpicoff\@
144
.endm
145
 
146
.macro  movrel rd, val
147
#if CONFIG_PIC
148
        ldpic           \rd, \val
149
#elif HAVE_ARMV6T2_EXTERNAL && !defined(__APPLE__)
150
        movw            \rd, #:lower16:\val
151
        movt            \rd, #:upper16:\val
152
#else
153
        ldr             \rd, =\val
154
#endif
155
.endm
156
 
157
.macro  movrelx         rd,  val, gp
158
#if CONFIG_PIC && defined(__ELF__)
159
    .ifnb \gp
160
      .if .Lpic_gp
161
        .unreq          gp
162
      .endif
163
        gp      .req    \gp
164
        ldpic           gp,  _GLOBAL_OFFSET_TABLE_
165
    .elseif !.Lpic_gp
166
        gp      .req    r12
167
        ldpic           gp,  _GLOBAL_OFFSET_TABLE_
168
    .endif
169
        .set            .Lpic_gp, 1
170
        ldr             \rd, .Lpicoff\@
171
        ldr             \rd, [gp, \rd]
172
        def_pic         \val(GOT), .Lpicoff\@
173
#elif CONFIG_PIC && defined(__APPLE__)
174
        ldpic           \rd, .Lpic\@, indir=1
175
        .non_lazy_symbol_pointer
176
.Lpic\@:
177
        .indirect_symbol \val
178
        .word           0
179
        .text
180
#else
181
        movrel          \rd, \val
182
#endif
183
.endm
184
 
185
.macro  add_sh          rd,  rn,  rm,  sh:vararg
186
A       add             \rd, \rn, \rm, \sh
187
T       mov             \rm, \rm, \sh
188
T       add             \rd, \rn, \rm
189
.endm
190
 
191
.macro  ldr_pre         rt,  rn,  rm:vararg
192
A       ldr             \rt, [\rn, \rm]!
193
T       add             \rn, \rn, \rm
194
T       ldr             \rt, [\rn]
195
.endm
196
 
197
.macro  ldr_dpre        rt,  rn,  rm:vararg
198
A       ldr             \rt, [\rn, -\rm]!
199
T       sub             \rn, \rn, \rm
200
T       ldr             \rt, [\rn]
201
.endm
202
 
203
.macro  ldr_nreg        rt,  rn,  rm:vararg
204
A       ldr             \rt, [\rn, -\rm]
205
T       sub             \rt, \rn, \rm
206
T       ldr             \rt, [\rt]
207
.endm
208
 
209
.macro  ldr_post        rt,  rn,  rm:vararg
210
A       ldr             \rt, [\rn], \rm
211
T       ldr             \rt, [\rn]
212
T       add             \rn, \rn, \rm
213
.endm
214
 
215
.macro  ldrd_reg        rt,  rt2, rn,  rm
216
A       ldrd            \rt, \rt2, [\rn, \rm]
217
T       add             \rt, \rn, \rm
218
T       ldrd            \rt, \rt2, [\rt]
219
.endm
220
 
221
.macro  ldrd_post       rt,  rt2, rn,  rm
222
A       ldrd            \rt, \rt2, [\rn], \rm
223
T       ldrd            \rt, \rt2, [\rn]
224
T       add             \rn, \rn, \rm
225
.endm
226
 
227
.macro  ldrh_pre        rt,  rn,  rm
228
A       ldrh            \rt, [\rn, \rm]!
229
T       add             \rn, \rn, \rm
230
T       ldrh            \rt, [\rn]
231
.endm
232
 
233
.macro  ldrh_dpre       rt,  rn,  rm
234
A       ldrh            \rt, [\rn, -\rm]!
235
T       sub             \rn, \rn, \rm
236
T       ldrh            \rt, [\rn]
237
.endm
238
 
239
.macro  ldrh_post       rt,  rn,  rm
240
A       ldrh            \rt, [\rn], \rm
241
T       ldrh            \rt, [\rn]
242
T       add             \rn, \rn, \rm
243
.endm
244
 
245
.macro  ldrb_post       rt,  rn,  rm
246
A       ldrb            \rt, [\rn], \rm
247
T       ldrb            \rt, [\rn]
248
T       add             \rn, \rn, \rm
249
.endm
250
 
251
.macro  str_post       rt,  rn,  rm:vararg
252
A       str             \rt, [\rn], \rm
253
T       str             \rt, [\rn]
254
T       add             \rn, \rn, \rm
255
.endm
256
 
257
.macro  strb_post       rt,  rn,  rm:vararg
258
A       strb            \rt, [\rn], \rm
259
T       strb            \rt, [\rn]
260
T       add             \rn, \rn, \rm
261
.endm
262
 
263
.macro  strd_post       rt,  rt2, rn,  rm
264
A       strd            \rt, \rt2, [\rn], \rm
265
T       strd            \rt, \rt2, [\rn]
266
T       add             \rn, \rn, \rm
267
.endm
268
 
269
.macro  strh_pre        rt,  rn,  rm
270
A       strh            \rt, [\rn, \rm]!
271
T       add             \rn, \rn, \rm
272
T       strh            \rt, [\rn]
273
.endm
274
 
275
.macro  strh_dpre       rt,  rn,  rm
276
A       strh            \rt, [\rn, -\rm]!
277
T       sub             \rn, \rn, \rm
278
T       strh            \rt, [\rn]
279
.endm
280
 
281
.macro  strh_post       rt,  rn,  rm
282
A       strh            \rt, [\rn], \rm
283
T       strh            \rt, [\rn]
284
T       add             \rn, \rn, \rm
285
.endm
286
 
287
.macro  strh_dpost       rt,  rn,  rm
288
A       strh            \rt, [\rn], -\rm
289
T       strh            \rt, [\rn]
290
T       sub             \rn, \rn, \rm
291
.endm
292
 
293
#if HAVE_VFP_ARGS
294
ELF     .eabi_attribute 28, 1
295
#   define VFP
296
#   define NOVFP @
297
#else
298
#   define VFP   @
299
#   define NOVFP
300
#endif
301
 
302
#define GLUE(a, b) a ## b
303
#define JOIN(a, b) GLUE(a, b)
304
#define X(s) JOIN(EXTERN_ASM, s)