/* * Copyright (c) 2009 Loren Merritt * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "config.h" #define GLUE(a, b) a ## b #define JOIN(a, b) GLUE(a, b) #define X(s) JOIN(EXTERN_ASM, s) #if ARCH_PPC64 #define PTR .quad #define lp ld #define lpx ldx #define stp std #define stpu stdu #define PS 8 #define L(s) JOIN(., s) .macro extfunc name .global X(\name) #if _CALL_ELF == 2 .text X(\name): addis %r2, %r12, .TOC.-X(\name)@ha addi %r2, %r2, .TOC.-X(\name)@l .localentry X(\name), .-X(\name) #else .section .opd, "aw" X(\name): .quad L(\name), .TOC.@tocbase, 0 .previous .type X(\name), STT_FUNC L(\name): #endif .endm .macro movrel rd, sym, gp ld \rd, \sym@got(r2) .endm .macro get_got rd .endm #else /* ARCH_PPC64 */ #define PTR .int #define lp lwz #define lpx lwzx #define stp stw #define stpu stwu #define PS 4 #define L(s) s .macro extfunc name .global X(\name) .type X(\name), STT_FUNC X(\name): \name: .endm .macro movrel rd, sym, gp #if CONFIG_PIC lwz \rd, \sym@got(\gp) #else lis \rd, \sym@ha la \rd, \sym@l(\rd) #endif .endm .macro get_got rd #if CONFIG_PIC bcl 20, 31, .Lgot\@ .Lgot\@: mflr \rd addis \rd, \rd, _GLOBAL_OFFSET_TABLE_ - .Lgot\@@ha addi \rd, \rd, _GLOBAL_OFFSET_TABLE_ - .Lgot\@@l #endif .endm #endif /* ARCH_PPC64 */ #if HAVE_IBM_ASM .macro DEFINE_REG n .equiv r\n, \n .equiv f\n, \n .equiv v\n, \n .endm DEFINE_REG 0 DEFINE_REG 1 DEFINE_REG 2 DEFINE_REG 3 DEFINE_REG 4 DEFINE_REG 5 DEFINE_REG 6 DEFINE_REG 7 DEFINE_REG 8 DEFINE_REG 9 DEFINE_REG 10 DEFINE_REG 11 DEFINE_REG 12 DEFINE_REG 13 DEFINE_REG 14 DEFINE_REG 15 DEFINE_REG 16 DEFINE_REG 17 DEFINE_REG 18 DEFINE_REG 19 DEFINE_REG 20 DEFINE_REG 21 DEFINE_REG 22 DEFINE_REG 23 DEFINE_REG 24 DEFINE_REG 25 DEFINE_REG 26 DEFINE_REG 27 DEFINE_REG 28 DEFINE_REG 29 DEFINE_REG 30 DEFINE_REG 31 #endif /* HAVE_IBM_ASM */