]> git.sesse.net Git - ffmpeg/blob - libavcodec/ppc/asm.S
Merge commit '8bb9824fcbc5a6ebf68391d70a2c4f03447990d2'
[ffmpeg] / libavcodec / ppc / asm.S
1 /*
2  * Copyright (c) 2009 Loren Merritt
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 #define GLUE(a, b) a ## b
24 #define JOIN(a, b) GLUE(a, b)
25 #define X(s) JOIN(EXTERN_ASM, s)
26
27 #if __APPLE__
28 #define R(n) r ## n
29 #else
30 #define R(n) n
31 #endif
32
33 #if ARCH_PPC64
34
35 #define PTR  .quad
36 #define lp   ld
37 #define lpx  ldx
38 #define stp  std
39 #define stpu stdu
40 #define PS   8
41 #define L(s) JOIN(., s)
42
43 .macro extfunc name
44     .global X(\name)
45 #if _CALL_ELF == 2
46     .text
47 X(\name):
48     addis %r2, %r12, .TOC.-X(\name)@ha
49     addi %r2, %r2, .TOC.-X(\name)@l
50     .localentry X(\name), .-X(\name)
51 #else
52     .section .opd, "aw"
53 X(\name):
54     .quad L(\name), .TOC.@tocbase, 0
55     .previous
56     .type X(\name), STT_FUNC
57 L(\name):
58 #endif
59 .endm
60
61 .macro movrel rd, sym, gp
62     ld      \rd, \sym@got(R(2))
63 .endm
64
65 .macro get_got rd
66 .endm
67
68 #else /* ARCH_PPC64 */
69
70 #define PTR  .int
71 #define lp   lwz
72 #define lpx  lwzx
73 #define stp  stw
74 #define stpu stwu
75 #define PS   4
76 #define L(s) s
77
78 .macro extfunc name
79     .global X(\name)
80     .type   X(\name), STT_FUNC
81 X(\name):
82 \name:
83 .endm
84
85 .macro movrel rd, sym, gp
86 #if CONFIG_PIC
87     lwz     \rd, \sym@got(\gp)
88 #else
89     lis     \rd, \sym@ha
90     la      \rd, \sym@l(\rd)
91 #endif
92 .endm
93
94 .macro get_got rd
95 #if CONFIG_PIC
96     bcl     20, 31, .Lgot\@
97 .Lgot\@:
98     mflr    \rd
99     addis   \rd, \rd, _GLOBAL_OFFSET_TABLE_ - .Lgot\@@ha
100     addi    \rd, \rd, _GLOBAL_OFFSET_TABLE_ - .Lgot\@@l
101 #endif
102 .endm
103
104 #endif /* ARCH_PPC64 */
105
106 #if HAVE_IBM_ASM
107
108 .macro DEFINE_REG n
109     .equiv r\n, \n
110     .equiv f\n, \n
111     .equiv v\n, \n
112 .endm
113
114 DEFINE_REG 0
115 DEFINE_REG 1
116 DEFINE_REG 2
117 DEFINE_REG 3
118 DEFINE_REG 4
119 DEFINE_REG 5
120 DEFINE_REG 6
121 DEFINE_REG 7
122 DEFINE_REG 8
123 DEFINE_REG 9
124 DEFINE_REG 10
125 DEFINE_REG 11
126 DEFINE_REG 12
127 DEFINE_REG 13
128 DEFINE_REG 14
129 DEFINE_REG 15
130 DEFINE_REG 16
131 DEFINE_REG 17
132 DEFINE_REG 18
133 DEFINE_REG 19
134 DEFINE_REG 20
135 DEFINE_REG 21
136 DEFINE_REG 22
137 DEFINE_REG 23
138 DEFINE_REG 24
139 DEFINE_REG 25
140 DEFINE_REG 26
141 DEFINE_REG 27
142 DEFINE_REG 28
143 DEFINE_REG 29
144 DEFINE_REG 30
145 DEFINE_REG 31
146
147 #endif /* HAVE_IBM_ASM */