1*09537850SAkhilesh Sanikop /* 2*09537850SAkhilesh Sanikop * Copyright 2020 The libgav1 Authors 3*09537850SAkhilesh Sanikop * 4*09537850SAkhilesh Sanikop * Licensed under the Apache License, Version 2.0 (the "License"); 5*09537850SAkhilesh Sanikop * you may not use this file except in compliance with the License. 6*09537850SAkhilesh Sanikop * You may obtain a copy of the License at 7*09537850SAkhilesh Sanikop * 8*09537850SAkhilesh Sanikop * http://www.apache.org/licenses/LICENSE-2.0 9*09537850SAkhilesh Sanikop * 10*09537850SAkhilesh Sanikop * Unless required by applicable law or agreed to in writing, software 11*09537850SAkhilesh Sanikop * distributed under the License is distributed on an "AS IS" BASIS, 12*09537850SAkhilesh Sanikop * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*09537850SAkhilesh Sanikop * See the License for the specific language governing permissions and 14*09537850SAkhilesh Sanikop * limitations under the License. 15*09537850SAkhilesh Sanikop */ 16*09537850SAkhilesh Sanikop 17*09537850SAkhilesh Sanikop #ifndef LIBGAV1_SRC_DSP_X86_COMMON_AVX2_H_ 18*09537850SAkhilesh Sanikop #define LIBGAV1_SRC_DSP_X86_COMMON_AVX2_H_ 19*09537850SAkhilesh Sanikop 20*09537850SAkhilesh Sanikop #include "src/utils/compiler_attributes.h" 21*09537850SAkhilesh Sanikop #include "src/utils/cpu.h" 22*09537850SAkhilesh Sanikop 23*09537850SAkhilesh Sanikop #if LIBGAV1_TARGETING_AVX2 24*09537850SAkhilesh Sanikop 25*09537850SAkhilesh Sanikop #include <immintrin.h> 26*09537850SAkhilesh Sanikop 27*09537850SAkhilesh Sanikop #include <cassert> 28*09537850SAkhilesh Sanikop #include <cstddef> 29*09537850SAkhilesh Sanikop #include <cstdint> 30*09537850SAkhilesh Sanikop #include <cstring> 31*09537850SAkhilesh Sanikop 32*09537850SAkhilesh Sanikop namespace libgav1 { 33*09537850SAkhilesh Sanikop namespace dsp { 34*09537850SAkhilesh Sanikop namespace avx2 { 35*09537850SAkhilesh Sanikop 36*09537850SAkhilesh Sanikop #include "src/dsp/x86/common_avx2.inc" 37*09537850SAkhilesh Sanikop #include "src/dsp/x86/common_sse4.inc" 38*09537850SAkhilesh Sanikop 39*09537850SAkhilesh Sanikop } // namespace avx2 40*09537850SAkhilesh Sanikop 41*09537850SAkhilesh Sanikop // NOLINTBEGIN(misc-unused-using-decls) 42*09537850SAkhilesh Sanikop // These function aliases shall not be visible to external code. They are 43*09537850SAkhilesh Sanikop // restricted to x86/*_avx2.cc files only. This scheme exists to distinguish two 44*09537850SAkhilesh Sanikop // possible implementations of common functions, which may differ based on 45*09537850SAkhilesh Sanikop // whether the compiler is permitted to use avx2 instructions. 46*09537850SAkhilesh Sanikop 47*09537850SAkhilesh Sanikop // common_sse4.inc 48*09537850SAkhilesh Sanikop using avx2::Load2; 49*09537850SAkhilesh Sanikop using avx2::Load2x2; 50*09537850SAkhilesh Sanikop using avx2::Load4; 51*09537850SAkhilesh Sanikop using avx2::Load4x2; 52*09537850SAkhilesh Sanikop using avx2::LoadAligned16; 53*09537850SAkhilesh Sanikop using avx2::LoadAligned16Msan; 54*09537850SAkhilesh Sanikop using avx2::LoadHi8; 55*09537850SAkhilesh Sanikop using avx2::LoadHi8Msan; 56*09537850SAkhilesh Sanikop using avx2::LoadLo8; 57*09537850SAkhilesh Sanikop using avx2::LoadLo8Msan; 58*09537850SAkhilesh Sanikop using avx2::LoadUnaligned16; 59*09537850SAkhilesh Sanikop using avx2::LoadUnaligned16Msan; 60*09537850SAkhilesh Sanikop using avx2::MaskHighNBytes; 61*09537850SAkhilesh Sanikop using avx2::RightShiftWithRounding_S16; 62*09537850SAkhilesh Sanikop using avx2::RightShiftWithRounding_S32; 63*09537850SAkhilesh Sanikop using avx2::RightShiftWithRounding_U16; 64*09537850SAkhilesh Sanikop using avx2::RightShiftWithRounding_U32; 65*09537850SAkhilesh Sanikop using avx2::Store2; 66*09537850SAkhilesh Sanikop using avx2::Store4; 67*09537850SAkhilesh Sanikop using avx2::StoreAligned16; 68*09537850SAkhilesh Sanikop using avx2::StoreHi8; 69*09537850SAkhilesh Sanikop using avx2::StoreLo8; 70*09537850SAkhilesh Sanikop using avx2::StoreUnaligned16; 71*09537850SAkhilesh Sanikop 72*09537850SAkhilesh Sanikop // common_avx2.inc 73*09537850SAkhilesh Sanikop using avx2::LoadAligned32; 74*09537850SAkhilesh Sanikop using avx2::LoadAligned32Msan; 75*09537850SAkhilesh Sanikop using avx2::LoadAligned64; 76*09537850SAkhilesh Sanikop using avx2::LoadAligned64Msan; 77*09537850SAkhilesh Sanikop using avx2::LoadUnaligned32; 78*09537850SAkhilesh Sanikop using avx2::LoadUnaligned32Msan; 79*09537850SAkhilesh Sanikop using avx2::SetrM128i; 80*09537850SAkhilesh Sanikop using avx2::StoreAligned32; 81*09537850SAkhilesh Sanikop using avx2::StoreAligned64; 82*09537850SAkhilesh Sanikop using avx2::StoreUnaligned32; 83*09537850SAkhilesh Sanikop // NOLINTEND 84*09537850SAkhilesh Sanikop 85*09537850SAkhilesh Sanikop } // namespace dsp 86*09537850SAkhilesh Sanikop } // namespace libgav1 87*09537850SAkhilesh Sanikop 88*09537850SAkhilesh Sanikop #endif // LIBGAV1_TARGETING_AVX2 89*09537850SAkhilesh Sanikop #endif // LIBGAV1_SRC_DSP_X86_COMMON_AVX2_H_ 90