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