LCOV - code coverage report
Current view: top level - libavutil/x86 - emms.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 3 3 100.0 %
Date: 2017-10-24 00:14:43 Functions: 1 1 100.0 %

          Line data    Source code
       1             : /*
       2             :  * This file is part of FFmpeg.
       3             :  *
       4             :  * FFmpeg is free software; you can redistribute it and/or
       5             :  * modify it under the terms of the GNU Lesser General Public
       6             :  * License as published by the Free Software Foundation; either
       7             :  * version 2.1 of the License, or (at your option) any later version.
       8             :  *
       9             :  * FFmpeg is distributed in the hope that it will be useful,
      10             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      11             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12             :  * Lesser General Public License for more details.
      13             :  *
      14             :  * You should have received a copy of the GNU Lesser General Public
      15             :  * License along with FFmpeg; if not, write to the Free Software
      16             :  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
      17             :  */
      18             : 
      19             : #ifndef AVUTIL_X86_EMMS_H
      20             : #define AVUTIL_X86_EMMS_H
      21             : 
      22             : #include "config.h"
      23             : #include "libavutil/attributes.h"
      24             : #include "libavutil/cpu.h"
      25             : 
      26             : void avpriv_emms_asm(void);
      27             : 
      28             : #if HAVE_MMX_INLINE
      29             : #   define emms_c emms_c
      30             : /**
      31             :  * Empty mmx state.
      32             :  * this must be called between any dsp function and float/double code.
      33             :  * for example sin(); dsp->idct_put(); emms_c(); cos()
      34             :  * Note, *alloc() and *free() also use float code in some libc implementations
      35             :  * thus this also applies to them or any function using them.
      36             :  */
      37     2104049 : static av_always_inline void emms_c(void)
      38             : {
      39             : /* Some inlined functions may also use mmx instructions regardless of
      40             :  * runtime cpuflags. With that in mind, we unconditionally empty the
      41             :  * mmx state if the target cpu chosen at configure time supports it.
      42             :  */
      43             : #if !defined(__MMX__)
      44             :     if(av_get_cpu_flags() & AV_CPU_FLAG_MMX)
      45             : #endif
      46     2104049 :         __asm__ volatile ("emms" ::: "memory");
      47     2104049 : }
      48             : #elif HAVE_MMX && HAVE_MM_EMPTY
      49             : #   include <mmintrin.h>
      50             : #   define emms_c _mm_empty
      51             : #elif HAVE_MMX_EXTERNAL
      52             : #   define emms_c avpriv_emms_asm
      53             : #endif /* HAVE_MMX_INLINE */
      54             : 
      55             : #endif /* AVUTIL_X86_EMMS_H */

Generated by: LCOV version 1.13