tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

aom_neon_sve2_bridge.h (1630B)


      1 /*
      2 * Copyright (c) 2024, Alliance for Open Media. All rights reserved.
      3 *
      4 * This source code is subject to the terms of the BSD 2 Clause License and
      5 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
      6 * was not distributed with this source code in the LICENSE file, you can
      7 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
      8 * Media Patent License 1.0 was not distributed with this source code in the
      9 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
     10 */
     11 
     12 #ifndef AOM_AOM_DSP_ARM_AOM_NEON_SVE2_BRIDGE_H_
     13 #define AOM_AOM_DSP_ARM_AOM_NEON_SVE2_BRIDGE_H_
     14 
     15 #include <arm_neon_sve_bridge.h>
     16 
     17 #include "config/aom_dsp_rtcd.h"
     18 #include "config/aom_config.h"
     19 
     20 // We can access instructions exclusive to the SVE2 instruction set from a
     21 // predominantly Neon context by making use of the Neon-SVE bridge intrinsics
     22 // to reinterpret Neon vectors as SVE vectors - with the high part of the SVE
     23 // vector (if it's longer than 128 bits) being "don't care".
     24 
     25 // While sub-optimal on machines that have SVE vector length > 128-bit - as the
     26 // remainder of the vector is unused - this approach is still beneficial when
     27 // compared to a Neon-only solution.
     28 
     29 static inline int16x8_t aom_tbl2_s16(int16x8_t s0, int16x8_t s1,
     30                                     uint16x8_t tbl) {
     31  svint16x2_t samples = svcreate2_s16(svset_neonq_s16(svundef_s16(), s0),
     32                                      svset_neonq_s16(svundef_s16(), s1));
     33  return svget_neonq_s16(
     34      svtbl2_s16(samples, svset_neonq_u16(svundef_u16(), tbl)));
     35 }
     36 
     37 #endif  // AOM_AOM_DSP_ARM_AOM_NEON_SVE2_BRIDGE_H_