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

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2010 Alexander Strange <astrange@ithinksw.com>
       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             : #ifndef AVUTIL_X86_INTREADWRITE_H
      22             : #define AVUTIL_X86_INTREADWRITE_H
      23             : 
      24             : #include <stdint.h>
      25             : #include "config.h"
      26             : #include "libavutil/attributes.h"
      27             : 
      28             : #if HAVE_MMX
      29             : 
      30             : #if !HAVE_FAST_64BIT && defined(__MMX__)
      31             : 
      32             : #define AV_COPY64 AV_COPY64
      33             : static av_always_inline void AV_COPY64(void *d, const void *s)
      34             : {
      35             :     __asm__("movq   %1, %%mm0  \n\t"
      36             :             "movq   %%mm0, %0  \n\t"
      37             :             : "=m"(*(uint64_t*)d)
      38             :             : "m" (*(const uint64_t*)s)
      39             :             : "mm0");
      40             : }
      41             : 
      42             : #define AV_SWAP64 AV_SWAP64
      43             : static av_always_inline void AV_SWAP64(void *a, void *b)
      44             : {
      45             :     __asm__("movq   %1, %%mm0  \n\t"
      46             :             "movq   %0, %%mm1  \n\t"
      47             :             "movq   %%mm0, %0  \n\t"
      48             :             "movq   %%mm1, %1  \n\t"
      49             :             : "+m"(*(uint64_t*)a), "+m"(*(uint64_t*)b)
      50             :             ::"mm0", "mm1");
      51             : }
      52             : 
      53             : #define AV_ZERO64 AV_ZERO64
      54             : static av_always_inline void AV_ZERO64(void *d)
      55             : {
      56             :     __asm__("pxor %%mm0, %%mm0  \n\t"
      57             :             "movq %%mm0, %0     \n\t"
      58             :             : "=m"(*(uint64_t*)d)
      59             :             :: "mm0");
      60             : }
      61             : 
      62             : #endif /* !HAVE_FAST_64BIT && defined(__MMX__) */
      63             : 
      64             : #ifdef __SSE__
      65             : 
      66             : #define AV_COPY128 AV_COPY128
      67   177168741 : static av_always_inline void AV_COPY128(void *d, const void *s)
      68             : {
      69             :     struct v {uint64_t v[2];};
      70             : 
      71   177168741 :     __asm__("movaps   %1, %%xmm0  \n\t"
      72             :             "movaps   %%xmm0, %0  \n\t"
      73             :             : "=m"(*(struct v*)d)
      74             :             : "m" (*(const struct v*)s)
      75             :             : "xmm0");
      76   177168741 : }
      77             : 
      78             : #endif /* __SSE__ */
      79             : 
      80             : #ifdef __SSE2__
      81             : 
      82             : #define AV_ZERO128 AV_ZERO128
      83     8405617 : static av_always_inline void AV_ZERO128(void *d)
      84             : {
      85             :     struct v {uint64_t v[2];};
      86             : 
      87     8405617 :     __asm__("pxor %%xmm0, %%xmm0  \n\t"
      88             :             "movdqa   %%xmm0, %0  \n\t"
      89             :             : "=m"(*(struct v*)d)
      90             :             :: "xmm0");
      91     8405617 : }
      92             : 
      93             : #endif /* __SSE2__ */
      94             : 
      95             : #endif /* HAVE_MMX */
      96             : 
      97             : #endif /* AVUTIL_X86_INTREADWRITE_H */

Generated by: LCOV version 1.13