xref: /aosp_15_r20/external/libgav1/src/dsp/x86/common_avx2.h (revision 095378508e87ed692bf8dfeb34008b65b3735891)
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