PageRenderTime 26ms CodeModel.GetById 16ms app.highlight 7ms RepoModel.GetById 1ms app.codeStats 0ms

/libavcodec/ppc/asm.S

http://github.com/FFmpeg/FFmpeg
Assembly | 147 lines | 129 code | 18 blank | 0 comment | 2 complexity | 2fdea1fcedcef0923cd6326b687a81bf MD5 | raw file
  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 */