xref: /aosp_15_r20/external/XNNPACK/src/xnnpack/ibilinear.h (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
1*4bdc9457SAndroid Build Coastguard Worker // Copyright 2019 Google LLC
2*4bdc9457SAndroid Build Coastguard Worker //
3*4bdc9457SAndroid Build Coastguard Worker // This source code is licensed under the BSD-style license found in the
4*4bdc9457SAndroid Build Coastguard Worker // LICENSE file in the root directory of this source tree.
5*4bdc9457SAndroid Build Coastguard Worker 
6*4bdc9457SAndroid Build Coastguard Worker #pragma once
7*4bdc9457SAndroid Build Coastguard Worker 
8*4bdc9457SAndroid Build Coastguard Worker #include <stddef.h>
9*4bdc9457SAndroid Build Coastguard Worker #include <stdint.h>
10*4bdc9457SAndroid Build Coastguard Worker 
11*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/common.h>
12*4bdc9457SAndroid Build Coastguard Worker 
13*4bdc9457SAndroid Build Coastguard Worker #ifdef __cplusplus
14*4bdc9457SAndroid Build Coastguard Worker extern "C" {
15*4bdc9457SAndroid Build Coastguard Worker #endif
16*4bdc9457SAndroid Build Coastguard Worker 
17*4bdc9457SAndroid Build Coastguard Worker 
18*4bdc9457SAndroid Build Coastguard Worker #define DECLARE_F16_IBILINEAR_UKERNEL_FUNCTION(fn_name) \
19*4bdc9457SAndroid Build Coastguard Worker   XNN_INTERNAL void fn_name(                            \
20*4bdc9457SAndroid Build Coastguard Worker       size_t output_pixels,                             \
21*4bdc9457SAndroid Build Coastguard Worker       size_t channels,                                  \
22*4bdc9457SAndroid Build Coastguard Worker       const void** input,                               \
23*4bdc9457SAndroid Build Coastguard Worker       size_t input_offset,                              \
24*4bdc9457SAndroid Build Coastguard Worker       const void* weights,                              \
25*4bdc9457SAndroid Build Coastguard Worker       void* output,                                     \
26*4bdc9457SAndroid Build Coastguard Worker       size_t output_increment);
27*4bdc9457SAndroid Build Coastguard Worker 
28*4bdc9457SAndroid Build Coastguard Worker DECLARE_F16_IBILINEAR_UKERNEL_FUNCTION(xnn_f16_ibilinear_ukernel__fma3_c8)
29*4bdc9457SAndroid Build Coastguard Worker DECLARE_F16_IBILINEAR_UKERNEL_FUNCTION(xnn_f16_ibilinear_ukernel__fma3_c16)
30*4bdc9457SAndroid Build Coastguard Worker 
31*4bdc9457SAndroid Build Coastguard Worker DECLARE_F16_IBILINEAR_UKERNEL_FUNCTION(xnn_f16_ibilinear_ukernel__neonfp16arith_c8)
32*4bdc9457SAndroid Build Coastguard Worker DECLARE_F16_IBILINEAR_UKERNEL_FUNCTION(xnn_f16_ibilinear_ukernel__neonfp16arith_c16)
33*4bdc9457SAndroid Build Coastguard Worker 
34*4bdc9457SAndroid Build Coastguard Worker 
35*4bdc9457SAndroid Build Coastguard Worker #define DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(fn_name) \
36*4bdc9457SAndroid Build Coastguard Worker   XNN_INTERNAL void fn_name(                            \
37*4bdc9457SAndroid Build Coastguard Worker       size_t output_pixels,                             \
38*4bdc9457SAndroid Build Coastguard Worker       size_t channels,                                  \
39*4bdc9457SAndroid Build Coastguard Worker       const float** input,                              \
40*4bdc9457SAndroid Build Coastguard Worker       size_t input_offset,                              \
41*4bdc9457SAndroid Build Coastguard Worker       const float* weights,                             \
42*4bdc9457SAndroid Build Coastguard Worker       float* output,                                    \
43*4bdc9457SAndroid Build Coastguard Worker       size_t output_increment);
44*4bdc9457SAndroid Build Coastguard Worker 
45*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__scalar_c1)
46*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__scalar_c2)
47*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__scalar_c4)
48*4bdc9457SAndroid Build Coastguard Worker 
49*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__neon_c4)
50*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__neon_c8)
51*4bdc9457SAndroid Build Coastguard Worker 
52*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__neonfma_c4)
53*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__neonfma_c8)
54*4bdc9457SAndroid Build Coastguard Worker 
55*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__sse_c4)
56*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__sse_c8)
57*4bdc9457SAndroid Build Coastguard Worker 
58*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__wasmsimd_c4)
59*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_UKERNEL_FUNCTION(xnn_f32_ibilinear_ukernel__wasmsimd_c8)
60*4bdc9457SAndroid Build Coastguard Worker 
61*4bdc9457SAndroid Build Coastguard Worker 
62*4bdc9457SAndroid Build Coastguard Worker #define DECLARE_S8_IBILINEAR_UKERNEL_FUNCTION(fn_name) \
63*4bdc9457SAndroid Build Coastguard Worker   XNN_INTERNAL void fn_name(                           \
64*4bdc9457SAndroid Build Coastguard Worker       size_t output_pixels,                            \
65*4bdc9457SAndroid Build Coastguard Worker       size_t channels,                                 \
66*4bdc9457SAndroid Build Coastguard Worker       const int8_t** input,                            \
67*4bdc9457SAndroid Build Coastguard Worker       size_t input_offset,                             \
68*4bdc9457SAndroid Build Coastguard Worker       const int16_t* weights,                          \
69*4bdc9457SAndroid Build Coastguard Worker       int8_t* output,                                  \
70*4bdc9457SAndroid Build Coastguard Worker       size_t output_increment);
71*4bdc9457SAndroid Build Coastguard Worker 
72*4bdc9457SAndroid Build Coastguard Worker DECLARE_S8_IBILINEAR_UKERNEL_FUNCTION(xnn_s8_ibilinear_ukernel__scalar_c1)
73*4bdc9457SAndroid Build Coastguard Worker DECLARE_S8_IBILINEAR_UKERNEL_FUNCTION(xnn_s8_ibilinear_ukernel__scalar_c2)
74*4bdc9457SAndroid Build Coastguard Worker DECLARE_S8_IBILINEAR_UKERNEL_FUNCTION(xnn_s8_ibilinear_ukernel__scalar_c4)
75*4bdc9457SAndroid Build Coastguard Worker 
76*4bdc9457SAndroid Build Coastguard Worker DECLARE_S8_IBILINEAR_UKERNEL_FUNCTION(xnn_s8_ibilinear_ukernel__neon_c8)
77*4bdc9457SAndroid Build Coastguard Worker DECLARE_S8_IBILINEAR_UKERNEL_FUNCTION(xnn_s8_ibilinear_ukernel__neon_c16)
78*4bdc9457SAndroid Build Coastguard Worker 
79*4bdc9457SAndroid Build Coastguard Worker DECLARE_S8_IBILINEAR_UKERNEL_FUNCTION(xnn_s8_ibilinear_ukernel__sse2_c8)
80*4bdc9457SAndroid Build Coastguard Worker DECLARE_S8_IBILINEAR_UKERNEL_FUNCTION(xnn_s8_ibilinear_ukernel__sse2_c16)
81*4bdc9457SAndroid Build Coastguard Worker 
82*4bdc9457SAndroid Build Coastguard Worker DECLARE_S8_IBILINEAR_UKERNEL_FUNCTION(xnn_s8_ibilinear_ukernel__sse41_c8)
83*4bdc9457SAndroid Build Coastguard Worker DECLARE_S8_IBILINEAR_UKERNEL_FUNCTION(xnn_s8_ibilinear_ukernel__sse41_c16)
84*4bdc9457SAndroid Build Coastguard Worker 
85*4bdc9457SAndroid Build Coastguard Worker DECLARE_S8_IBILINEAR_UKERNEL_FUNCTION(xnn_s8_ibilinear_ukernel__wasmsimd_dot16x2_c8)
86*4bdc9457SAndroid Build Coastguard Worker DECLARE_S8_IBILINEAR_UKERNEL_FUNCTION(xnn_s8_ibilinear_ukernel__wasmsimd_dot16x2_c16)
87*4bdc9457SAndroid Build Coastguard Worker 
88*4bdc9457SAndroid Build Coastguard Worker DECLARE_S8_IBILINEAR_UKERNEL_FUNCTION(xnn_s8_ibilinear_ukernel__wasmsimd_mul32_c8)
89*4bdc9457SAndroid Build Coastguard Worker DECLARE_S8_IBILINEAR_UKERNEL_FUNCTION(xnn_s8_ibilinear_ukernel__wasmsimd_mul32_c16)
90*4bdc9457SAndroid Build Coastguard Worker 
91*4bdc9457SAndroid Build Coastguard Worker #define DECLARE_U8_IBILINEAR_UKERNEL_FUNCTION(fn_name) \
92*4bdc9457SAndroid Build Coastguard Worker   XNN_INTERNAL void fn_name(                           \
93*4bdc9457SAndroid Build Coastguard Worker       size_t output_pixels,                            \
94*4bdc9457SAndroid Build Coastguard Worker       size_t channels,                                 \
95*4bdc9457SAndroid Build Coastguard Worker       const uint8_t** input,                           \
96*4bdc9457SAndroid Build Coastguard Worker       size_t input_offset,                             \
97*4bdc9457SAndroid Build Coastguard Worker       const int16_t* weights,                          \
98*4bdc9457SAndroid Build Coastguard Worker       uint8_t* output,                                 \
99*4bdc9457SAndroid Build Coastguard Worker       size_t output_increment);
100*4bdc9457SAndroid Build Coastguard Worker 
101*4bdc9457SAndroid Build Coastguard Worker 
102*4bdc9457SAndroid Build Coastguard Worker DECLARE_U8_IBILINEAR_UKERNEL_FUNCTION(xnn_u8_ibilinear_ukernel__scalar_c1)
103*4bdc9457SAndroid Build Coastguard Worker DECLARE_U8_IBILINEAR_UKERNEL_FUNCTION(xnn_u8_ibilinear_ukernel__scalar_c2)
104*4bdc9457SAndroid Build Coastguard Worker DECLARE_U8_IBILINEAR_UKERNEL_FUNCTION(xnn_u8_ibilinear_ukernel__scalar_c4)
105*4bdc9457SAndroid Build Coastguard Worker 
106*4bdc9457SAndroid Build Coastguard Worker DECLARE_U8_IBILINEAR_UKERNEL_FUNCTION(xnn_u8_ibilinear_ukernel__neon_c8)
107*4bdc9457SAndroid Build Coastguard Worker DECLARE_U8_IBILINEAR_UKERNEL_FUNCTION(xnn_u8_ibilinear_ukernel__neon_c16)
108*4bdc9457SAndroid Build Coastguard Worker 
109*4bdc9457SAndroid Build Coastguard Worker DECLARE_U8_IBILINEAR_UKERNEL_FUNCTION(xnn_u8_ibilinear_ukernel__sse2_c8)
110*4bdc9457SAndroid Build Coastguard Worker DECLARE_U8_IBILINEAR_UKERNEL_FUNCTION(xnn_u8_ibilinear_ukernel__sse2_c16)
111*4bdc9457SAndroid Build Coastguard Worker 
112*4bdc9457SAndroid Build Coastguard Worker DECLARE_U8_IBILINEAR_UKERNEL_FUNCTION(xnn_u8_ibilinear_ukernel__sse41_c8)
113*4bdc9457SAndroid Build Coastguard Worker DECLARE_U8_IBILINEAR_UKERNEL_FUNCTION(xnn_u8_ibilinear_ukernel__sse41_c16)
114*4bdc9457SAndroid Build Coastguard Worker 
115*4bdc9457SAndroid Build Coastguard Worker DECLARE_U8_IBILINEAR_UKERNEL_FUNCTION(xnn_u8_ibilinear_ukernel__wasmsimd_dot16x2_c8)
116*4bdc9457SAndroid Build Coastguard Worker DECLARE_U8_IBILINEAR_UKERNEL_FUNCTION(xnn_u8_ibilinear_ukernel__wasmsimd_dot16x2_c16)
117*4bdc9457SAndroid Build Coastguard Worker 
118*4bdc9457SAndroid Build Coastguard Worker DECLARE_U8_IBILINEAR_UKERNEL_FUNCTION(xnn_u8_ibilinear_ukernel__wasmsimd_mul32_c8)
119*4bdc9457SAndroid Build Coastguard Worker DECLARE_U8_IBILINEAR_UKERNEL_FUNCTION(xnn_u8_ibilinear_ukernel__wasmsimd_mul32_c16)
120*4bdc9457SAndroid Build Coastguard Worker 
121*4bdc9457SAndroid Build Coastguard Worker #define DECLARE_F32_IBILINEAR_CHW_UKERNEL_FUNCTION(fn_name) \
122*4bdc9457SAndroid Build Coastguard Worker   XNN_INTERNAL void fn_name(                                \
123*4bdc9457SAndroid Build Coastguard Worker       size_t output_pixels,                                 \
124*4bdc9457SAndroid Build Coastguard Worker       size_t channels,                                      \
125*4bdc9457SAndroid Build Coastguard Worker       const float** input,                                  \
126*4bdc9457SAndroid Build Coastguard Worker       size_t input_offset,                                  \
127*4bdc9457SAndroid Build Coastguard Worker       const float* weights,                                 \
128*4bdc9457SAndroid Build Coastguard Worker       float* output,                                        \
129*4bdc9457SAndroid Build Coastguard Worker       size_t input_increment);
130*4bdc9457SAndroid Build Coastguard Worker 
131*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_CHW_UKERNEL_FUNCTION(xnn_f32_ibilinear_chw_ukernel__scalar_p1)
132*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_CHW_UKERNEL_FUNCTION(xnn_f32_ibilinear_chw_ukernel__scalar_p2)
133*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_CHW_UKERNEL_FUNCTION(xnn_f32_ibilinear_chw_ukernel__scalar_p4)
134*4bdc9457SAndroid Build Coastguard Worker 
135*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_CHW_UKERNEL_FUNCTION(xnn_f32_ibilinear_chw_ukernel__wasmsimd_p4)
136*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_CHW_UKERNEL_FUNCTION(xnn_f32_ibilinear_chw_ukernel__wasmsimd_p8)
137*4bdc9457SAndroid Build Coastguard Worker 
138*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_CHW_UKERNEL_FUNCTION(xnn_f32_ibilinear_chw_ukernel__neon_p4)
139*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_CHW_UKERNEL_FUNCTION(xnn_f32_ibilinear_chw_ukernel__neon_p8)
140*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_CHW_UKERNEL_FUNCTION(xnn_f32_ibilinear_chw_ukernel__neon_p16)
141*4bdc9457SAndroid Build Coastguard Worker 
142*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_CHW_UKERNEL_FUNCTION(xnn_f32_ibilinear_chw_ukernel__neonfma_p4)
143*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_CHW_UKERNEL_FUNCTION(xnn_f32_ibilinear_chw_ukernel__neonfma_p8)
144*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_CHW_UKERNEL_FUNCTION(xnn_f32_ibilinear_chw_ukernel__neonfma_p16)
145*4bdc9457SAndroid Build Coastguard Worker 
146*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_CHW_UKERNEL_FUNCTION(xnn_f32_ibilinear_chw_ukernel__sse_p4)
147*4bdc9457SAndroid Build Coastguard Worker DECLARE_F32_IBILINEAR_CHW_UKERNEL_FUNCTION(xnn_f32_ibilinear_chw_ukernel__sse_p8)
148*4bdc9457SAndroid Build Coastguard Worker 
149*4bdc9457SAndroid Build Coastguard Worker 
150*4bdc9457SAndroid Build Coastguard Worker #define DECLARE_F16_IBILINEAR_CHW_UKERNEL_FUNCTION(fn_name) \
151*4bdc9457SAndroid Build Coastguard Worker   XNN_INTERNAL void fn_name(                                \
152*4bdc9457SAndroid Build Coastguard Worker       size_t output_pixels,                                 \
153*4bdc9457SAndroid Build Coastguard Worker       size_t channels,                                      \
154*4bdc9457SAndroid Build Coastguard Worker       const void** input,                                   \
155*4bdc9457SAndroid Build Coastguard Worker       size_t input_offset,                                  \
156*4bdc9457SAndroid Build Coastguard Worker       const void* weights,                                  \
157*4bdc9457SAndroid Build Coastguard Worker       void* output,                                         \
158*4bdc9457SAndroid Build Coastguard Worker       size_t input_increment);
159*4bdc9457SAndroid Build Coastguard Worker 
160*4bdc9457SAndroid Build Coastguard Worker DECLARE_F16_IBILINEAR_CHW_UKERNEL_FUNCTION(xnn_f16_ibilinear_chw_ukernel__neonfp16arith_p4)
161*4bdc9457SAndroid Build Coastguard Worker DECLARE_F16_IBILINEAR_CHW_UKERNEL_FUNCTION(xnn_f16_ibilinear_chw_ukernel__neonfp16arith_p8)
162*4bdc9457SAndroid Build Coastguard Worker DECLARE_F16_IBILINEAR_CHW_UKERNEL_FUNCTION(xnn_f16_ibilinear_chw_ukernel__neonfp16arith_p16)
163*4bdc9457SAndroid Build Coastguard Worker 
164*4bdc9457SAndroid Build Coastguard Worker #ifdef __cplusplus
165*4bdc9457SAndroid Build Coastguard Worker }  // extern "C"
166*4bdc9457SAndroid Build Coastguard Worker #endif
167