• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
47X(\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"
53X(\name):
54    .quad L(\name), .TOC.@tocbase, 0
55    .previous
56    .type X(\name), STT_FUNC
57L(\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
81X(\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
114DEFINE_REG 0
115DEFINE_REG 1
116DEFINE_REG 2
117DEFINE_REG 3
118DEFINE_REG 4
119DEFINE_REG 5
120DEFINE_REG 6
121DEFINE_REG 7
122DEFINE_REG 8
123DEFINE_REG 9
124DEFINE_REG 10
125DEFINE_REG 11
126DEFINE_REG 12
127DEFINE_REG 13
128DEFINE_REG 14
129DEFINE_REG 15
130DEFINE_REG 16
131DEFINE_REG 17
132DEFINE_REG 18
133DEFINE_REG 19
134DEFINE_REG 20
135DEFINE_REG 21
136DEFINE_REG 22
137DEFINE_REG 23
138DEFINE_REG 24
139DEFINE_REG 25
140DEFINE_REG 26
141DEFINE_REG 27
142DEFINE_REG 28
143DEFINE_REG 29
144DEFINE_REG 30
145DEFINE_REG 31
146
147#endif /* HAVE_IBM_ASM */
148