"Fossies" - the Fresh Open Source Software Archive

Member "ffmpeg-3.4.2/libavcodec/arm/aac.h" (29 Mar 2016, 5922 Bytes) of package /linux/misc/ffmpeg-3.4.2.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "aac.h" see the Fossies "Dox" file reference documentation.

    1 /*
    2  * Copyright (c) 2010 Mans Rullgard <mans@mansr.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 AVCODEC_ARM_AAC_H
   22 #define AVCODEC_ARM_AAC_H
   23 
   24 #include "config.h"
   25 
   26 #if HAVE_NEON_INLINE
   27 
   28 #define VMUL2 VMUL2
   29 static inline float *VMUL2(float *dst, const float *v, unsigned idx,
   30                            const float *scale)
   31 {
   32     unsigned v0, v1;
   33     __asm__ ("ubfx     %0,  %6,  #0, #4      \n\t"
   34              "ubfx     %1,  %6,  #4, #4      \n\t"
   35              "ldr      %0,  [%5, %0, lsl #2] \n\t"
   36              "ldr      %1,  [%5, %1, lsl #2] \n\t"
   37              "vld1.32  {d1[]},   [%7,:32]    \n\t"
   38              "vmov     d0,  %0,  %1          \n\t"
   39              "vmul.f32 d0,  d0,  d1          \n\t"
   40              "vst1.32  {d0},     [%2,:64]!   \n\t"
   41              : "=&r"(v0), "=&r"(v1), "+r"(dst), "=m"(dst[0]), "=m"(dst[1])
   42              : "r"(v), "r"(idx), "r"(scale)
   43              : "d0", "d1");
   44     return dst;
   45 }
   46 
   47 #define VMUL4 VMUL4
   48 static inline float *VMUL4(float *dst, const float *v, unsigned idx,
   49                            const float *scale)
   50 {
   51     unsigned v0, v1, v2, v3;
   52     __asm__ ("ubfx     %0,  %10, #0, #2      \n\t"
   53              "ubfx     %1,  %10, #2, #2      \n\t"
   54              "ldr      %0,  [%9, %0, lsl #2] \n\t"
   55              "ubfx     %2,  %10, #4, #2      \n\t"
   56              "ldr      %1,  [%9, %1, lsl #2] \n\t"
   57              "ubfx     %3,  %10, #6, #2      \n\t"
   58              "ldr      %2,  [%9, %2, lsl #2] \n\t"
   59              "vmov     d0,  %0,  %1          \n\t"
   60              "ldr      %3,  [%9, %3, lsl #2] \n\t"
   61              "vld1.32  {d2[],d3[]},[%11,:32] \n\t"
   62              "vmov     d1,  %2,  %3          \n\t"
   63              "vmul.f32 q0,  q0,  q1          \n\t"
   64              "vst1.32  {q0},     [%4,:128]!  \n\t"
   65              : "=&r"(v0), "=&r"(v1), "=&r"(v2), "=&r"(v3), "+r"(dst),
   66                "=m"(dst[0]), "=m"(dst[1]), "=m"(dst[2]), "=m"(dst[3])
   67              : "r"(v), "r"(idx), "r"(scale)
   68              : "d0", "d1", "d2", "d3");
   69     return dst;
   70 }
   71 
   72 #define VMUL2S VMUL2S
   73 static inline float *VMUL2S(float *dst, const float *v, unsigned idx,
   74                             unsigned sign, const float *scale)
   75 {
   76     unsigned v0, v1, v2, v3;
   77     __asm__ ("ubfx     %0,  %8,  #0, #4      \n\t"
   78              "ubfx     %1,  %8,  #4, #4      \n\t"
   79              "ldr      %0,  [%7, %0, lsl #2] \n\t"
   80              "lsl      %2,  %10, #30         \n\t"
   81              "ldr      %1,  [%7, %1, lsl #2] \n\t"
   82              "lsl      %3,  %10, #31         \n\t"
   83              "vmov     d0,  %0,  %1          \n\t"
   84              "bic      %2,  %2,  #1<<30      \n\t"
   85              "vld1.32  {d1[]},   [%9,:32]    \n\t"
   86              "vmov     d2,  %2,  %3          \n\t"
   87              "veor     d0,  d0,  d2          \n\t"
   88              "vmul.f32 d0,  d0,  d1          \n\t"
   89              "vst1.32  {d0},     [%4,:64]!   \n\t"
   90              : "=&r"(v0), "=&r"(v1), "=&r"(v2), "=&r"(v3), "+r"(dst),
   91                "=m"(dst[0]), "=m"(dst[1])
   92              : "r"(v), "r"(idx), "r"(scale), "r"(sign)
   93              : "d0", "d1", "d2");
   94     return dst;
   95 }
   96 
   97 #define VMUL4S VMUL4S
   98 static inline float *VMUL4S(float *dst, const float *v, unsigned idx,
   99                             unsigned sign, const float *scale)
  100 {
  101     unsigned v0, v1, v2, v3, nz;
  102     __asm__ ("vld1.32  {d2[],d3[]},[%13,:32] \n\t"
  103              "ubfx     %0,  %12, #0, #2      \n\t"
  104              "ubfx     %1,  %12, #2, #2      \n\t"
  105              "ldr      %0,  [%11,%0, lsl #2] \n\t"
  106              "ubfx     %2,  %12, #4, #2      \n\t"
  107              "ldr      %1,  [%11,%1, lsl #2] \n\t"
  108              "ubfx     %3,  %12, #6, #2      \n\t"
  109              "ldr      %2,  [%11,%2, lsl #2] \n\t"
  110              "vmov     d0,  %0,  %1          \n\t"
  111              "ldr      %3,  [%11,%3, lsl #2] \n\t"
  112              "lsr      %6,  %12, #12         \n\t"
  113              "rbit     %6,  %6               \n\t"
  114              "vmov     d1,  %2,  %3          \n\t"
  115              "lsls     %6,  %6,  #1          \n\t"
  116              "and      %0,  %5,  #1<<31      \n\t"
  117              "it       cs                    \n\t"
  118              "lslcs    %5,  %5,  #1          \n\t"
  119              "lsls     %6,  %6,  #1          \n\t"
  120              "and      %1,  %5,  #1<<31      \n\t"
  121              "it       cs                    \n\t"
  122              "lslcs    %5,  %5,  #1          \n\t"
  123              "lsls     %6,  %6,  #1          \n\t"
  124              "and      %2,  %5,  #1<<31      \n\t"
  125              "it       cs                    \n\t"
  126              "lslcs    %5,  %5,  #1          \n\t"
  127              "vmov     d4,  %0,  %1          \n\t"
  128              "and      %3,  %5,  #1<<31      \n\t"
  129              "vmov     d5,  %2,  %3          \n\t"
  130              "veor     q0,  q0,  q2          \n\t"
  131              "vmul.f32 q0,  q0,  q1          \n\t"
  132              "vst1.32  {q0},     [%4,:128]!  \n\t"
  133              : "=&r"(v0), "=&r"(v1), "=&r"(v2), "=&r"(v3), "+r"(dst),
  134                "+r"(sign), "=r"(nz),
  135                "=m"(dst[0]), "=m"(dst[1]), "=m"(dst[2]), "=m"(dst[3])
  136              : "r"(v), "r"(idx), "r"(scale)
  137              : "cc", "d0", "d1", "d2", "d3", "d4", "d5");
  138     return dst;
  139 }
  140 
  141 #endif /* HAVE_NEON_INLINE */
  142 
  143 #endif /* AVCODEC_ARM_AAC_H */