Spaces:
Runtime error
Runtime error
/* | |
* copyright (c) 2006 Michael Niedermayer <[email protected]> | |
* | |
* 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 | |
*/ | |
typedef struct xmm_reg { uint64_t a, b; } xmm_reg; | |
typedef struct ymm_reg { uint64_t a, b, c, d; } ymm_reg; | |
typedef int64_t x86_reg; | |
/* FF_REG_SP is defined in Solaris sys headers, so use FF_REG_sp */ | |
typedef int32_t x86_reg; | |
typedef int x86_reg; | |
/* | |
* If gcc is not set to support sse (-msse) it will not accept xmm registers | |
* in the clobber list for inline asm. XMM_CLOBBERS takes a list of xmm | |
* registers to be marked as clobbered and evaluates to nothing if they are | |
* not supported, or to the list itself if they are supported. Since a clobber | |
* list may not be empty, XMM_CLOBBERS_ONLY should be used if the xmm | |
* registers are the only in the clobber list. | |
* For example a list with "eax" and "xmm0" as clobbers should become: | |
* : XMM_CLOBBERS("xmm0",) "eax" | |
* and a list with only "xmm0" should become: | |
* XMM_CLOBBERS_ONLY("xmm0") | |
*/ | |
/* Use to export labels from asm. */ | |
// Use rip-relative addressing if compiling PIC code on x86-64. | |
/* When direct symbol references are used in code passed to a compiler that does not support them | |
* then these references need to be converted to named asm constraints instead. | |
* Instead of returning a direct symbol MANGLE now returns a named constraint for that specific symbol. | |
* In order for this to work there must also be a corresponding entry in the asm-interface. To add this | |
* entry use the macro NAMED_CONSTRAINTS() and pass in a list of each symbol reference used in the | |
* corresponding block of code. (e.g. NAMED_CONSTRAINTS(var1,var2,var3) where var1 is the first symbol etc. ). | |
* If there are already existing constraints then use NAMED_CONSTRAINTS_ADD to add to the existing constraint list. | |
*/ | |
// Intel/MSVC does not correctly expand va-args so we need a rather ugly hack in order to get it to work | |
// Parameters are a list of each symbol reference required | |
// Same but without comma for when there are no previously defined constraints | |
// Same as above NAMED_CONSTRAINTS except used for passing arrays/pointers instead of normal variables | |