@img/sharp-libvips-dev 1.2.1 → 1.2.2-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/include/aom/aom_decoder.h +1 -1
- package/include/aom/aom_encoder.h +2 -0
- package/include/aom/aomcx.h +106 -25
- package/include/ffi.h +3 -3
- package/include/freetype2/freetype/config/ftconfig.h +1 -1
- package/include/freetype2/freetype/config/ftheader.h +1 -1
- package/include/freetype2/freetype/config/ftoption.h +37 -12
- package/include/freetype2/freetype/config/ftstdlib.h +1 -1
- package/include/freetype2/freetype/config/integer-types.h +29 -2
- package/include/freetype2/freetype/config/mac-support.h +1 -1
- package/include/freetype2/freetype/config/public-macros.h +3 -3
- package/include/freetype2/freetype/freetype.h +51 -47
- package/include/freetype2/freetype/ftadvanc.h +1 -1
- package/include/freetype2/freetype/ftbbox.h +1 -1
- package/include/freetype2/freetype/ftbdf.h +1 -1
- package/include/freetype2/freetype/ftbitmap.h +1 -1
- package/include/freetype2/freetype/ftbzip2.h +1 -1
- package/include/freetype2/freetype/ftcache.h +1 -1
- package/include/freetype2/freetype/ftcid.h +1 -1
- package/include/freetype2/freetype/ftcolor.h +13 -4
- package/include/freetype2/freetype/ftdriver.h +3 -3
- package/include/freetype2/freetype/fterrdef.h +1 -1
- package/include/freetype2/freetype/fterrors.h +1 -1
- package/include/freetype2/freetype/ftfntfmt.h +1 -1
- package/include/freetype2/freetype/ftgasp.h +1 -1
- package/include/freetype2/freetype/ftglyph.h +1 -1
- package/include/freetype2/freetype/ftgxval.h +1 -1
- package/include/freetype2/freetype/ftgzip.h +1 -1
- package/include/freetype2/freetype/ftimage.h +6 -2
- package/include/freetype2/freetype/ftincrem.h +1 -1
- package/include/freetype2/freetype/ftlcdfil.h +1 -1
- package/include/freetype2/freetype/ftlist.h +1 -1
- package/include/freetype2/freetype/ftlogging.h +184 -0
- package/include/freetype2/freetype/ftlzw.h +1 -1
- package/include/freetype2/freetype/ftmac.h +1 -1
- package/include/freetype2/freetype/ftmm.h +159 -103
- package/include/freetype2/freetype/ftmodapi.h +1 -1
- package/include/freetype2/freetype/ftmoderr.h +1 -1
- package/include/freetype2/freetype/ftotval.h +1 -1
- package/include/freetype2/freetype/ftoutln.h +1 -1
- package/include/freetype2/freetype/ftparams.h +1 -1
- package/include/freetype2/freetype/ftpfr.h +1 -1
- package/include/freetype2/freetype/ftrender.h +1 -1
- package/include/freetype2/freetype/ftsizes.h +1 -1
- package/include/freetype2/freetype/ftsnames.h +1 -1
- package/include/freetype2/freetype/ftstroke.h +1 -1
- package/include/freetype2/freetype/ftsynth.h +1 -1
- package/include/freetype2/freetype/ftsystem.h +1 -1
- package/include/freetype2/freetype/fttrigon.h +1 -1
- package/include/freetype2/freetype/fttypes.h +1 -1
- package/include/freetype2/freetype/ftwinfnt.h +2 -3
- package/include/freetype2/freetype/otsvg.h +1 -1
- package/include/freetype2/freetype/t1tables.h +1 -1
- package/include/freetype2/freetype/ttnameid.h +129 -129
- package/include/freetype2/freetype/tttables.h +8 -5
- package/include/freetype2/freetype/tttags.h +1 -1
- package/include/freetype2/ft2build.h +1 -1
- package/include/glib-2.0/gio/gdbuserror.h +9 -8
- package/include/glib-2.0/gio/ginetaddress.h +12 -0
- package/include/glib-2.0/gio/gioenums.h +9 -2
- package/include/glib-2.0/glib/gstring.h +2 -2
- package/include/glib-2.0/glib/gunicode.h +1 -1
- package/include/glib-2.0/gobject/glib-types.h +1 -1
- package/include/glib-2.0/gobject/gparam.h +1 -1
- package/include/glib-2.0/gobject/gvalue.h +78 -35
- package/include/harfbuzz/hb-script-list.h +12 -0
- package/include/harfbuzz/hb-version.h +3 -3
- package/include/hwy/abort.h +2 -19
- package/include/hwy/aligned_allocator.h +11 -7
- package/include/hwy/auto_tune.h +504 -0
- package/include/hwy/base.h +425 -104
- package/include/hwy/cache_control.h +16 -0
- package/include/hwy/detect_compiler_arch.h +32 -1
- package/include/hwy/detect_targets.h +251 -67
- package/include/hwy/foreach_target.h +35 -0
- package/include/hwy/highway.h +185 -76
- package/include/hwy/nanobenchmark.h +1 -19
- package/include/hwy/ops/arm_neon-inl.h +969 -458
- package/include/hwy/ops/arm_sve-inl.h +1137 -359
- package/include/hwy/ops/emu128-inl.h +97 -11
- package/include/hwy/ops/generic_ops-inl.h +1222 -34
- package/include/hwy/ops/loongarch_lasx-inl.h +4664 -0
- package/include/hwy/ops/loongarch_lsx-inl.h +5933 -0
- package/include/hwy/ops/ppc_vsx-inl.h +306 -126
- package/include/hwy/ops/rvv-inl.h +546 -51
- package/include/hwy/ops/scalar-inl.h +77 -22
- package/include/hwy/ops/set_macros-inl.h +138 -17
- package/include/hwy/ops/shared-inl.h +50 -10
- package/include/hwy/ops/wasm_128-inl.h +137 -92
- package/include/hwy/ops/x86_128-inl.h +773 -214
- package/include/hwy/ops/x86_256-inl.h +712 -255
- package/include/hwy/ops/x86_512-inl.h +429 -753
- package/include/hwy/ops/x86_avx3-inl.h +501 -0
- package/include/hwy/per_target.h +2 -1
- package/include/hwy/profiler.h +622 -486
- package/include/hwy/targets.h +62 -20
- package/include/hwy/timer-inl.h +8 -160
- package/include/hwy/timer.h +170 -3
- package/include/hwy/x86_cpuid.h +81 -0
- package/include/libheif/heif_cxx.h +25 -5
- package/include/libheif/heif_regions.h +5 -5
- package/include/libheif/heif_version.h +2 -2
- package/include/librsvg-2.0/librsvg/rsvg-version.h +3 -3
- package/include/libxml2/libxml/valid.h +0 -3
- package/include/libxml2/libxml/xmlerror.h +1 -1
- package/include/libxml2/libxml/xmlversion.h +4 -4
- package/include/pango-1.0/pango/pango-enum-types.h +3 -0
- package/include/pango-1.0/pango/pango-features.h +3 -3
- package/include/pango-1.0/pango/pango-font.h +30 -0
- package/include/pango-1.0/pango/pango-version-macros.h +26 -0
- package/include/vips/connection.h +4 -4
- package/include/vips/version.h +4 -4
- package/include/zlib.h +3 -3
- package/package.json +1 -1
- package/versions.json +13 -13
package/include/hwy/highway.h
CHANGED
|
@@ -61,217 +61,305 @@ namespace hwy {
|
|
|
61
61
|
//------------------------------------------------------------------------------
|
|
62
62
|
// Export user functions for static/dynamic dispatch
|
|
63
63
|
|
|
64
|
+
// The static target is the best baseline. When using foreach_target.h, this is
|
|
65
|
+
// the last target compiled. Otherwise, it is the only target.
|
|
66
|
+
|
|
64
67
|
// Evaluates to 0 inside a translation unit if it is generating anything but the
|
|
65
|
-
// static target
|
|
66
|
-
//
|
|
67
|
-
//
|
|
68
|
+
// static target. Used to prevent redefinitions of HWY_EXPORT. Unless
|
|
69
|
+
// foreach_target.h is included, we only compile once anyway, so this is 1
|
|
70
|
+
// unless it is or has been included.
|
|
68
71
|
#ifndef HWY_ONCE
|
|
69
72
|
#define HWY_ONCE 1
|
|
70
73
|
#endif
|
|
71
74
|
|
|
72
|
-
//
|
|
73
|
-
// HWY_STATIC_TARGET (the only defined namespace unless HWY_TARGET_INCLUDE is
|
|
74
|
-
// defined), and can be used to deduce the return type of Choose*.
|
|
75
|
+
// `HWY_STATIC_NAMESPACE` expands to its namespace name, e.g. `N_AVX2`.
|
|
75
76
|
#if HWY_STATIC_TARGET == HWY_SCALAR
|
|
76
|
-
#define
|
|
77
|
+
#define HWY_STATIC_NAMESPACE N_SCALAR
|
|
77
78
|
#elif HWY_STATIC_TARGET == HWY_EMU128
|
|
78
|
-
#define
|
|
79
|
-
#elif HWY_STATIC_TARGET == HWY_RVV
|
|
80
|
-
#define HWY_STATIC_DISPATCH(FUNC_NAME) N_RVV::FUNC_NAME
|
|
81
|
-
#elif HWY_STATIC_TARGET == HWY_WASM_EMU256
|
|
82
|
-
#define HWY_STATIC_DISPATCH(FUNC_NAME) N_WASM_EMU256::FUNC_NAME
|
|
79
|
+
#define HWY_STATIC_NAMESPACE N_EMU128
|
|
83
80
|
#elif HWY_STATIC_TARGET == HWY_WASM
|
|
84
|
-
#define
|
|
81
|
+
#define HWY_STATIC_NAMESPACE N_WASM
|
|
82
|
+
#elif HWY_STATIC_TARGET == HWY_WASM_EMU256
|
|
83
|
+
#define HWY_STATIC_NAMESPACE N_WASM_EMU256
|
|
84
|
+
#elif HWY_STATIC_TARGET == HWY_Z14
|
|
85
|
+
#define HWY_STATIC_NAMESPACE N_Z14
|
|
86
|
+
#elif HWY_STATIC_TARGET == HWY_Z15
|
|
87
|
+
#define HWY_STATIC_NAMESPACE N_Z15
|
|
88
|
+
#elif HWY_STATIC_TARGET == HWY_PPC8
|
|
89
|
+
#define HWY_STATIC_NAMESPACE N_PPC8
|
|
90
|
+
#elif HWY_STATIC_TARGET == HWY_PPC9
|
|
91
|
+
#define HWY_STATIC_NAMESPACE N_PPC9
|
|
92
|
+
#elif HWY_STATIC_TARGET == HWY_PPC10
|
|
93
|
+
#define HWY_STATIC_NAMESPACE N_PPC10
|
|
94
|
+
#elif HWY_STATIC_TARGET == HWY_LSX
|
|
95
|
+
#define HWY_STATIC_NAMESPACE N_LSX
|
|
96
|
+
#elif HWY_STATIC_TARGET == HWY_LASX
|
|
97
|
+
#define HWY_STATIC_NAMESPACE N_LASX
|
|
98
|
+
#elif HWY_STATIC_TARGET == HWY_RVV
|
|
99
|
+
#define HWY_STATIC_NAMESPACE N_RVV
|
|
85
100
|
#elif HWY_STATIC_TARGET == HWY_NEON_WITHOUT_AES
|
|
86
|
-
#define
|
|
101
|
+
#define HWY_STATIC_NAMESPACE N_NEON_WITHOUT_AES
|
|
87
102
|
#elif HWY_STATIC_TARGET == HWY_NEON
|
|
88
|
-
#define
|
|
103
|
+
#define HWY_STATIC_NAMESPACE N_NEON
|
|
89
104
|
#elif HWY_STATIC_TARGET == HWY_NEON_BF16
|
|
90
|
-
#define
|
|
105
|
+
#define HWY_STATIC_NAMESPACE N_NEON_BF16
|
|
91
106
|
#elif HWY_STATIC_TARGET == HWY_SVE
|
|
92
|
-
#define
|
|
107
|
+
#define HWY_STATIC_NAMESPACE N_SVE
|
|
93
108
|
#elif HWY_STATIC_TARGET == HWY_SVE2
|
|
94
|
-
#define
|
|
109
|
+
#define HWY_STATIC_NAMESPACE N_SVE2
|
|
95
110
|
#elif HWY_STATIC_TARGET == HWY_SVE_256
|
|
96
|
-
#define
|
|
111
|
+
#define HWY_STATIC_NAMESPACE N_SVE_256
|
|
97
112
|
#elif HWY_STATIC_TARGET == HWY_SVE2_128
|
|
98
|
-
#define
|
|
99
|
-
#elif HWY_STATIC_TARGET == HWY_PPC8
|
|
100
|
-
#define HWY_STATIC_DISPATCH(FUNC_NAME) N_PPC8::FUNC_NAME
|
|
101
|
-
#elif HWY_STATIC_TARGET == HWY_PPC9
|
|
102
|
-
#define HWY_STATIC_DISPATCH(FUNC_NAME) N_PPC9::FUNC_NAME
|
|
103
|
-
#elif HWY_STATIC_TARGET == HWY_PPC10
|
|
104
|
-
#define HWY_STATIC_DISPATCH(FUNC_NAME) N_PPC10::FUNC_NAME
|
|
105
|
-
#elif HWY_STATIC_TARGET == HWY_Z14
|
|
106
|
-
#define HWY_STATIC_DISPATCH(FUNC_NAME) N_Z14::FUNC_NAME
|
|
107
|
-
#elif HWY_STATIC_TARGET == HWY_Z15
|
|
108
|
-
#define HWY_STATIC_DISPATCH(FUNC_NAME) N_Z15::FUNC_NAME
|
|
113
|
+
#define HWY_STATIC_NAMESPACE N_SVE2_128
|
|
109
114
|
#elif HWY_STATIC_TARGET == HWY_SSE2
|
|
110
|
-
#define
|
|
115
|
+
#define HWY_STATIC_NAMESPACE N_SSE2
|
|
111
116
|
#elif HWY_STATIC_TARGET == HWY_SSSE3
|
|
112
|
-
#define
|
|
117
|
+
#define HWY_STATIC_NAMESPACE N_SSSE3
|
|
113
118
|
#elif HWY_STATIC_TARGET == HWY_SSE4
|
|
114
|
-
#define
|
|
119
|
+
#define HWY_STATIC_NAMESPACE N_SSE4
|
|
115
120
|
#elif HWY_STATIC_TARGET == HWY_AVX2
|
|
116
|
-
#define
|
|
121
|
+
#define HWY_STATIC_NAMESPACE N_AVX2
|
|
117
122
|
#elif HWY_STATIC_TARGET == HWY_AVX3
|
|
118
|
-
#define
|
|
123
|
+
#define HWY_STATIC_NAMESPACE N_AVX3
|
|
119
124
|
#elif HWY_STATIC_TARGET == HWY_AVX3_DL
|
|
120
|
-
#define
|
|
125
|
+
#define HWY_STATIC_NAMESPACE N_AVX3_DL
|
|
121
126
|
#elif HWY_STATIC_TARGET == HWY_AVX3_ZEN4
|
|
122
|
-
#define
|
|
127
|
+
#define HWY_STATIC_NAMESPACE N_AVX3_ZEN4
|
|
123
128
|
#elif HWY_STATIC_TARGET == HWY_AVX3_SPR
|
|
124
|
-
#define
|
|
129
|
+
#define HWY_STATIC_NAMESPACE N_AVX3_SPR
|
|
130
|
+
#elif HWY_STATIC_TARGET == HWY_AVX10_2
|
|
131
|
+
#define HWY_STATIC_NAMESPACE N_AVX10_2
|
|
125
132
|
#endif
|
|
126
133
|
|
|
127
|
-
//
|
|
128
|
-
//
|
|
134
|
+
// `HWY_STATIC_DISPATCH(FUNC_NAME)` is the namespace-qualified FUNC_NAME for
|
|
135
|
+
// `HWY_STATIC_TARGET`, and can be used to deduce the return type of Choose*.
|
|
136
|
+
#define HWY_STATIC_DISPATCH(FUNC_NAME) HWY_STATIC_NAMESPACE::FUNC_NAME
|
|
137
|
+
|
|
138
|
+
// `HWY_CHOOSE_*(FUNC_NAME)` expands to the function pointer for that target or
|
|
139
|
+
// nullptr if that target was not compiled.
|
|
140
|
+
// `HWY_VISIT_*(VISITOR)` expands to `VISITOR(TARGET, NAMESPACE)` or nothing if
|
|
141
|
+
// that target was not compiled.
|
|
129
142
|
#if HWY_TARGETS & HWY_EMU128
|
|
130
143
|
#define HWY_CHOOSE_FALLBACK(FUNC_NAME) &N_EMU128::FUNC_NAME
|
|
144
|
+
#define HWY_VISIT_FALLBACK(VISITOR) VISITOR(HWY_EMU128, N_EMU128)
|
|
131
145
|
#elif HWY_TARGETS & HWY_SCALAR
|
|
132
146
|
#define HWY_CHOOSE_FALLBACK(FUNC_NAME) &N_SCALAR::FUNC_NAME
|
|
147
|
+
#define HWY_VISIT_FALLBACK(VISITOR) VISITOR(HWY_SCALAR, N_SCALAR)
|
|
133
148
|
#else
|
|
134
149
|
// When HWY_SCALAR/HWY_EMU128 are not present and other targets were disabled at
|
|
135
150
|
// runtime, fall back to the baseline with HWY_STATIC_DISPATCH().
|
|
136
151
|
#define HWY_CHOOSE_FALLBACK(FUNC_NAME) &HWY_STATIC_DISPATCH(FUNC_NAME)
|
|
152
|
+
#define HWY_VISIT_FALLBACK(VISITOR) \
|
|
153
|
+
VISITOR(HWY_STATIC_TARGET, HWY_STATIC_NAMESPACE)
|
|
154
|
+
#endif
|
|
155
|
+
|
|
156
|
+
#if HWY_TARGETS & HWY_WASM
|
|
157
|
+
#define HWY_CHOOSE_WASM(FUNC_NAME) &N_WASM::FUNC_NAME
|
|
158
|
+
#define HWY_VISIT_WASM(VISITOR) VISITOR(HWY_WASM, N_WASM)
|
|
159
|
+
#else
|
|
160
|
+
#define HWY_CHOOSE_WASM(FUNC_NAME) nullptr
|
|
161
|
+
#define HWY_VISIT_WASM(VISITOR)
|
|
137
162
|
#endif
|
|
138
163
|
|
|
139
164
|
#if HWY_TARGETS & HWY_WASM_EMU256
|
|
140
165
|
#define HWY_CHOOSE_WASM_EMU256(FUNC_NAME) &N_WASM_EMU256::FUNC_NAME
|
|
166
|
+
#define HWY_VISIT_WASM_EMU256(VISITOR) VISITOR(HWY_WASM_EMU256, N_WASM_EMU256)
|
|
141
167
|
#else
|
|
142
168
|
#define HWY_CHOOSE_WASM_EMU256(FUNC_NAME) nullptr
|
|
169
|
+
#define HWY_VISIT_WASM_EMU256(VISITOR)
|
|
143
170
|
#endif
|
|
144
171
|
|
|
145
|
-
#if HWY_TARGETS &
|
|
146
|
-
#define
|
|
172
|
+
#if HWY_TARGETS & HWY_Z14
|
|
173
|
+
#define HWY_CHOOSE_Z14(FUNC_NAME) &N_Z14::FUNC_NAME
|
|
174
|
+
#define HWY_VISIT_Z14(VISITOR) VISITOR(HWY_Z14, N_Z14)
|
|
147
175
|
#else
|
|
148
|
-
#define
|
|
176
|
+
#define HWY_CHOOSE_Z14(FUNC_NAME) nullptr
|
|
177
|
+
#define HWY_VISIT_Z14(VISITOR)
|
|
178
|
+
#endif
|
|
179
|
+
|
|
180
|
+
#if HWY_TARGETS & HWY_Z15
|
|
181
|
+
#define HWY_CHOOSE_Z15(FUNC_NAME) &N_Z15::FUNC_NAME
|
|
182
|
+
#define HWY_VISIT_Z15(VISITOR) VISITOR(HWY_Z15, N_Z15)
|
|
183
|
+
#else
|
|
184
|
+
#define HWY_CHOOSE_Z15(FUNC_NAME) nullptr
|
|
185
|
+
#define HWY_VISIT_Z15(VISITOR)
|
|
186
|
+
#endif
|
|
187
|
+
|
|
188
|
+
#if HWY_TARGETS & HWY_PPC8
|
|
189
|
+
#define HWY_CHOOSE_PPC8(FUNC_NAME) &N_PPC8::FUNC_NAME
|
|
190
|
+
#define HWY_VISIT_PPC8(VISITOR) VISITOR(HWY_PPC8, N_PPC8)
|
|
191
|
+
#else
|
|
192
|
+
#define HWY_CHOOSE_PPC8(FUNC_NAME) nullptr
|
|
193
|
+
#define HWY_VISIT_PPC8(VISITOR)
|
|
194
|
+
#endif
|
|
195
|
+
|
|
196
|
+
#if HWY_TARGETS & HWY_PPC9
|
|
197
|
+
#define HWY_CHOOSE_PPC9(FUNC_NAME) &N_PPC9::FUNC_NAME
|
|
198
|
+
#define HWY_VISIT_PPC9(VISITOR) VISITOR(HWY_PPC9, N_PPC9)
|
|
199
|
+
#else
|
|
200
|
+
#define HWY_CHOOSE_PPC9(FUNC_NAME) nullptr
|
|
201
|
+
#define HWY_VISIT_PPC9(VISITOR)
|
|
202
|
+
#endif
|
|
203
|
+
|
|
204
|
+
#if HWY_TARGETS & HWY_LSX
|
|
205
|
+
#define HWY_CHOOSE_LSX(FUNC_NAME) &N_LSX::FUNC_NAME
|
|
206
|
+
#define HWY_VISIT_LSX(VISITOR) VISITOR(HWY_LSX, N_LSX)
|
|
207
|
+
#else
|
|
208
|
+
#define HWY_CHOOSE_LSX(FUNC_NAME) nullptr
|
|
209
|
+
#define HWY_VISIT_LSX(VISITOR)
|
|
210
|
+
#endif
|
|
211
|
+
|
|
212
|
+
#if HWY_TARGETS & HWY_LASX
|
|
213
|
+
#define HWY_CHOOSE_LASX(FUNC_NAME) &N_LASX::FUNC_NAME
|
|
214
|
+
#define HWY_VISIT_LASX(VISITOR) VISITOR(HWY_LASX, N_LASX)
|
|
215
|
+
#else
|
|
216
|
+
#define HWY_CHOOSE_LASX(FUNC_NAME) nullptr
|
|
217
|
+
#define HWY_VISIT_LASX(VISITOR)
|
|
218
|
+
#endif
|
|
219
|
+
|
|
220
|
+
#if HWY_TARGETS & HWY_PPC10
|
|
221
|
+
#define HWY_CHOOSE_PPC10(FUNC_NAME) &N_PPC10::FUNC_NAME
|
|
222
|
+
#define HWY_VISIT_PPC10(VISITOR) VISITOR(HWY_PPC10, N_PPC10)
|
|
223
|
+
#else
|
|
224
|
+
#define HWY_CHOOSE_PPC10(FUNC_NAME) nullptr
|
|
225
|
+
#define HWY_VISIT_PPC10(VISITOR)
|
|
149
226
|
#endif
|
|
150
227
|
|
|
151
228
|
#if HWY_TARGETS & HWY_RVV
|
|
152
229
|
#define HWY_CHOOSE_RVV(FUNC_NAME) &N_RVV::FUNC_NAME
|
|
230
|
+
#define HWY_VISIT_RVV(VISITOR) VISITOR(HWY_RVV, N_RVV)
|
|
153
231
|
#else
|
|
154
232
|
#define HWY_CHOOSE_RVV(FUNC_NAME) nullptr
|
|
233
|
+
#define HWY_VISIT_RVV(VISITOR)
|
|
155
234
|
#endif
|
|
156
235
|
|
|
157
236
|
#if HWY_TARGETS & HWY_NEON_WITHOUT_AES
|
|
158
237
|
#define HWY_CHOOSE_NEON_WITHOUT_AES(FUNC_NAME) &N_NEON_WITHOUT_AES::FUNC_NAME
|
|
238
|
+
#define HWY_VISIT_NEON_WITHOUT_AES(VISITOR) \
|
|
239
|
+
VISITOR(HWY_NEON_WITHOUT_AES, N_NEON_WITHOUT_AES)
|
|
159
240
|
#else
|
|
160
241
|
#define HWY_CHOOSE_NEON_WITHOUT_AES(FUNC_NAME) nullptr
|
|
242
|
+
#define HWY_VISIT_NEON_WITHOUT_AES(VISITOR)
|
|
161
243
|
#endif
|
|
162
244
|
|
|
163
245
|
#if HWY_TARGETS & HWY_NEON
|
|
164
246
|
#define HWY_CHOOSE_NEON(FUNC_NAME) &N_NEON::FUNC_NAME
|
|
247
|
+
#define HWY_VISIT_NEON(VISITOR) VISITOR(HWY_NEON, N_NEON)
|
|
165
248
|
#else
|
|
166
249
|
#define HWY_CHOOSE_NEON(FUNC_NAME) nullptr
|
|
250
|
+
#define HWY_VISIT_NEON(VISITOR)
|
|
167
251
|
#endif
|
|
168
252
|
|
|
169
253
|
#if HWY_TARGETS & HWY_NEON_BF16
|
|
170
254
|
#define HWY_CHOOSE_NEON_BF16(FUNC_NAME) &N_NEON_BF16::FUNC_NAME
|
|
255
|
+
#define HWY_VISIT_NEON_BF16(VISITOR) VISITOR(HWY_NEON_BF16, N_NEON_BF16)
|
|
171
256
|
#else
|
|
172
257
|
#define HWY_CHOOSE_NEON_BF16(FUNC_NAME) nullptr
|
|
258
|
+
#define HWY_VISIT_NEON_BF16(VISITOR)
|
|
173
259
|
#endif
|
|
174
260
|
|
|
175
261
|
#if HWY_TARGETS & HWY_SVE
|
|
176
262
|
#define HWY_CHOOSE_SVE(FUNC_NAME) &N_SVE::FUNC_NAME
|
|
263
|
+
#define HWY_VISIT_SVE(VISITOR) VISITOR(HWY_SVE, N_SVE)
|
|
177
264
|
#else
|
|
178
265
|
#define HWY_CHOOSE_SVE(FUNC_NAME) nullptr
|
|
266
|
+
#define HWY_VISIT_SVE(VISITOR)
|
|
179
267
|
#endif
|
|
180
268
|
|
|
181
269
|
#if HWY_TARGETS & HWY_SVE2
|
|
182
270
|
#define HWY_CHOOSE_SVE2(FUNC_NAME) &N_SVE2::FUNC_NAME
|
|
271
|
+
#define HWY_VISIT_SVE2(VISITOR) VISITOR(HWY_SVE2, N_SVE2)
|
|
183
272
|
#else
|
|
184
273
|
#define HWY_CHOOSE_SVE2(FUNC_NAME) nullptr
|
|
274
|
+
#define HWY_VISIT_SVE2(VISITOR)
|
|
185
275
|
#endif
|
|
186
276
|
|
|
187
277
|
#if HWY_TARGETS & HWY_SVE_256
|
|
188
278
|
#define HWY_CHOOSE_SVE_256(FUNC_NAME) &N_SVE_256::FUNC_NAME
|
|
279
|
+
#define HWY_VISIT_SVE_256(VISITOR) VISITOR(HWY_SVE_256, N_SVE_256)
|
|
189
280
|
#else
|
|
190
281
|
#define HWY_CHOOSE_SVE_256(FUNC_NAME) nullptr
|
|
282
|
+
#define HWY_VISIT_SVE_256(VISITOR)
|
|
191
283
|
#endif
|
|
192
284
|
|
|
193
285
|
#if HWY_TARGETS & HWY_SVE2_128
|
|
194
286
|
#define HWY_CHOOSE_SVE2_128(FUNC_NAME) &N_SVE2_128::FUNC_NAME
|
|
287
|
+
#define HWY_VISIT_SVE2_128(VISITOR) VISITOR(HWY_SVE2_128, N_SVE2_128)
|
|
195
288
|
#else
|
|
196
289
|
#define HWY_CHOOSE_SVE2_128(FUNC_NAME) nullptr
|
|
197
|
-
#
|
|
198
|
-
|
|
199
|
-
#if HWY_TARGETS & HWY_PPC8
|
|
200
|
-
#define HWY_CHOOSE_PPC8(FUNC_NAME) &N_PPC8::FUNC_NAME
|
|
201
|
-
#else
|
|
202
|
-
#define HWY_CHOOSE_PPC8(FUNC_NAME) nullptr
|
|
203
|
-
#endif
|
|
204
|
-
|
|
205
|
-
#if HWY_TARGETS & HWY_PPC9
|
|
206
|
-
#define HWY_CHOOSE_PPC9(FUNC_NAME) &N_PPC9::FUNC_NAME
|
|
207
|
-
#else
|
|
208
|
-
#define HWY_CHOOSE_PPC9(FUNC_NAME) nullptr
|
|
209
|
-
#endif
|
|
210
|
-
|
|
211
|
-
#if HWY_TARGETS & HWY_PPC10
|
|
212
|
-
#define HWY_CHOOSE_PPC10(FUNC_NAME) &N_PPC10::FUNC_NAME
|
|
213
|
-
#else
|
|
214
|
-
#define HWY_CHOOSE_PPC10(FUNC_NAME) nullptr
|
|
215
|
-
#endif
|
|
216
|
-
|
|
217
|
-
#if HWY_TARGETS & HWY_Z14
|
|
218
|
-
#define HWY_CHOOSE_Z14(FUNC_NAME) &N_Z14::FUNC_NAME
|
|
219
|
-
#else
|
|
220
|
-
#define HWY_CHOOSE_Z14(FUNC_NAME) nullptr
|
|
221
|
-
#endif
|
|
222
|
-
|
|
223
|
-
#if HWY_TARGETS & HWY_Z15
|
|
224
|
-
#define HWY_CHOOSE_Z15(FUNC_NAME) &N_Z15::FUNC_NAME
|
|
225
|
-
#else
|
|
226
|
-
#define HWY_CHOOSE_Z15(FUNC_NAME) nullptr
|
|
290
|
+
#define HWY_VISIT_SVE2_128(VISITOR)
|
|
227
291
|
#endif
|
|
228
292
|
|
|
229
293
|
#if HWY_TARGETS & HWY_SSE2
|
|
230
294
|
#define HWY_CHOOSE_SSE2(FUNC_NAME) &N_SSE2::FUNC_NAME
|
|
295
|
+
#define HWY_VISIT_SSE2(VISITOR) VISITOR(HWY_SSE2, N_SSE2)
|
|
231
296
|
#else
|
|
232
297
|
#define HWY_CHOOSE_SSE2(FUNC_NAME) nullptr
|
|
298
|
+
#define HWY_VISIT_SSE2(VISITOR)
|
|
233
299
|
#endif
|
|
234
300
|
|
|
235
301
|
#if HWY_TARGETS & HWY_SSSE3
|
|
236
302
|
#define HWY_CHOOSE_SSSE3(FUNC_NAME) &N_SSSE3::FUNC_NAME
|
|
303
|
+
#define HWY_VISIT_SSSE3(VISITOR) VISITOR(HWY_SSSE3, N_SSSE3)
|
|
237
304
|
#else
|
|
238
305
|
#define HWY_CHOOSE_SSSE3(FUNC_NAME) nullptr
|
|
306
|
+
#define HWY_VISIT_SSSE3(VISITOR)
|
|
239
307
|
#endif
|
|
240
308
|
|
|
241
309
|
#if HWY_TARGETS & HWY_SSE4
|
|
242
310
|
#define HWY_CHOOSE_SSE4(FUNC_NAME) &N_SSE4::FUNC_NAME
|
|
311
|
+
#define HWY_VISIT_SSE4(VISITOR) VISITOR(HWY_SSE4, N_SSE4)
|
|
243
312
|
#else
|
|
244
313
|
#define HWY_CHOOSE_SSE4(FUNC_NAME) nullptr
|
|
314
|
+
#define HWY_VISIT_SSE4(VISITOR)
|
|
245
315
|
#endif
|
|
246
316
|
|
|
247
317
|
#if HWY_TARGETS & HWY_AVX2
|
|
248
318
|
#define HWY_CHOOSE_AVX2(FUNC_NAME) &N_AVX2::FUNC_NAME
|
|
319
|
+
#define HWY_VISIT_AVX2(VISITOR) VISITOR(HWY_AVX2, N_AVX2)
|
|
249
320
|
#else
|
|
250
321
|
#define HWY_CHOOSE_AVX2(FUNC_NAME) nullptr
|
|
322
|
+
#define HWY_VISIT_AVX2(VISITOR)
|
|
251
323
|
#endif
|
|
252
324
|
|
|
253
325
|
#if HWY_TARGETS & HWY_AVX3
|
|
254
326
|
#define HWY_CHOOSE_AVX3(FUNC_NAME) &N_AVX3::FUNC_NAME
|
|
327
|
+
#define HWY_VISIT_AVX3(VISITOR) VISITOR(HWY_AVX3, N_AVX3)
|
|
255
328
|
#else
|
|
256
329
|
#define HWY_CHOOSE_AVX3(FUNC_NAME) nullptr
|
|
330
|
+
#define HWY_VISIT_AVX3(VISITOR)
|
|
257
331
|
#endif
|
|
258
332
|
|
|
259
333
|
#if HWY_TARGETS & HWY_AVX3_DL
|
|
260
334
|
#define HWY_CHOOSE_AVX3_DL(FUNC_NAME) &N_AVX3_DL::FUNC_NAME
|
|
335
|
+
#define HWY_VISIT_AVX3_DL(VISITOR) VISITOR(HWY_AVX3_DL, N_AVX3_DL)
|
|
261
336
|
#else
|
|
262
337
|
#define HWY_CHOOSE_AVX3_DL(FUNC_NAME) nullptr
|
|
338
|
+
#define HWY_VISIT_AVX3_DL(VISITOR)
|
|
263
339
|
#endif
|
|
264
340
|
|
|
265
341
|
#if HWY_TARGETS & HWY_AVX3_ZEN4
|
|
266
342
|
#define HWY_CHOOSE_AVX3_ZEN4(FUNC_NAME) &N_AVX3_ZEN4::FUNC_NAME
|
|
343
|
+
#define HWY_VISIT_AVX3_ZEN4(VISITOR) VISITOR(HWY_AVX3_ZEN4, N_AVX3_ZEN4)
|
|
267
344
|
#else
|
|
268
345
|
#define HWY_CHOOSE_AVX3_ZEN4(FUNC_NAME) nullptr
|
|
346
|
+
#define HWY_VISIT_AVX3_ZEN4(VISITOR)
|
|
269
347
|
#endif
|
|
270
348
|
|
|
271
349
|
#if HWY_TARGETS & HWY_AVX3_SPR
|
|
272
350
|
#define HWY_CHOOSE_AVX3_SPR(FUNC_NAME) &N_AVX3_SPR::FUNC_NAME
|
|
351
|
+
#define HWY_VISIT_AVX3_SPR(VISITOR) VISITOR(HWY_AVX3_SPR, N_AVX3_SPR)
|
|
273
352
|
#else
|
|
274
353
|
#define HWY_CHOOSE_AVX3_SPR(FUNC_NAME) nullptr
|
|
354
|
+
#define HWY_VISIT_AVX3_SPR(VISITOR)
|
|
355
|
+
#endif
|
|
356
|
+
|
|
357
|
+
#if HWY_TARGETS & HWY_AVX10_2
|
|
358
|
+
#define HWY_CHOOSE_AVX10_2(FUNC_NAME) &N_AVX10_2::FUNC_NAME
|
|
359
|
+
#define HWY_VISIT_AVX10_2(VISITOR) VISITOR(HWY_AVX10_2, N_AVX10_2)
|
|
360
|
+
#else
|
|
361
|
+
#define HWY_CHOOSE_AVX10_2(FUNC_NAME) nullptr
|
|
362
|
+
#define HWY_VISIT_AVX10_2(VISITOR)
|
|
275
363
|
#endif
|
|
276
364
|
|
|
277
365
|
// MSVC 2017 workaround: the non-type template parameter to ChooseAndCall
|
|
@@ -535,8 +623,24 @@ struct AddExport {
|
|
|
535
623
|
(HWY_DISPATCH_TABLE(FUNC_NAME)[hwy::GetChosenTarget().GetIndex()])
|
|
536
624
|
|
|
537
625
|
// Calls the function pointer for the chosen target.
|
|
626
|
+
#if HWY_COMPILER_GCC || HWY_COMPILER_CLANG
|
|
627
|
+
|
|
628
|
+
// On GCC or Clang, we call hwy::PreventElision(...) to work around a compiler
|
|
629
|
+
// crash where the LLVM inliner crashes due to inlining incompatible intrinsics.
|
|
630
|
+
|
|
631
|
+
#define HWY_DYNAMIC_DISPATCH(FUNC_NAME) \
|
|
632
|
+
__extension__({ \
|
|
633
|
+
auto HWY_CONCAT(hwy_tmp_, __LINE__) = *(HWY_DYNAMIC_POINTER(FUNC_NAME)); \
|
|
634
|
+
hwy::PreventElision(HWY_CONCAT(hwy_tmp_, __LINE__)); \
|
|
635
|
+
HWY_CONCAT(hwy_tmp_, __LINE__); \
|
|
636
|
+
})
|
|
637
|
+
|
|
638
|
+
#else // !(HWY_COMPILER_GCC || HWY_COMPILER_CLANG)
|
|
639
|
+
|
|
538
640
|
#define HWY_DYNAMIC_DISPATCH(FUNC_NAME) (*(HWY_DYNAMIC_POINTER(FUNC_NAME)))
|
|
539
641
|
|
|
642
|
+
#endif // HWY_COMPILER_GCC || HWY_COMPILER_CLANG
|
|
643
|
+
|
|
540
644
|
// Same as DISPATCH, but provide a different arg name to clarify usage.
|
|
541
645
|
#define HWY_DYNAMIC_DISPATCH_T(TABLE_NAME) HWY_DYNAMIC_DISPATCH(TABLE_NAME)
|
|
542
646
|
#define HWY_DYNAMIC_POINTER_T(TABLE_NAME) HWY_DYNAMIC_POINTER(TABLE_NAME)
|
|
@@ -578,9 +682,10 @@ struct AddExport {
|
|
|
578
682
|
#include "hwy/ops/x86_128-inl.h"
|
|
579
683
|
#elif HWY_TARGET == HWY_AVX2
|
|
580
684
|
#include "hwy/ops/x86_256-inl.h"
|
|
581
|
-
#elif HWY_TARGET == HWY_AVX3 || HWY_TARGET == HWY_AVX3_DL ||
|
|
582
|
-
HWY_TARGET == HWY_AVX3_ZEN4 || HWY_TARGET == HWY_AVX3_SPR
|
|
583
|
-
|
|
685
|
+
#elif HWY_TARGET == HWY_AVX3 || HWY_TARGET == HWY_AVX3_DL || \
|
|
686
|
+
HWY_TARGET == HWY_AVX3_ZEN4 || HWY_TARGET == HWY_AVX3_SPR || \
|
|
687
|
+
HWY_TARGET == HWY_AVX10_2
|
|
688
|
+
#include "hwy/ops/x86_avx3-inl.h"
|
|
584
689
|
#elif HWY_TARGET == HWY_Z14 || HWY_TARGET == HWY_Z15 || \
|
|
585
690
|
(HWY_TARGET & HWY_ALL_PPC)
|
|
586
691
|
#include "hwy/ops/ppc_vsx-inl.h"
|
|
@@ -594,6 +699,10 @@ struct AddExport {
|
|
|
594
699
|
#include "hwy/ops/wasm_128-inl.h"
|
|
595
700
|
#elif HWY_TARGET == HWY_RVV
|
|
596
701
|
#include "hwy/ops/rvv-inl.h"
|
|
702
|
+
#elif HWY_TARGET == HWY_LSX
|
|
703
|
+
#include "hwy/ops/loongarch_lsx-inl.h"
|
|
704
|
+
#elif HWY_TARGET == HWY_LASX
|
|
705
|
+
#include "hwy/ops/loongarch_lasx-inl.h"
|
|
597
706
|
#elif HWY_TARGET == HWY_EMU128
|
|
598
707
|
#include "hwy/ops/emu128-inl.h"
|
|
599
708
|
#elif HWY_TARGET == HWY_SCALAR
|
|
@@ -49,25 +49,7 @@
|
|
|
49
49
|
#include <stdint.h>
|
|
50
50
|
|
|
51
51
|
#include "hwy/highway_export.h"
|
|
52
|
-
#include "hwy/timer.h"
|
|
53
|
-
|
|
54
|
-
// Enables sanity checks that verify correct operation at the cost of
|
|
55
|
-
// longer benchmark runs.
|
|
56
|
-
#ifndef NANOBENCHMARK_ENABLE_CHECKS
|
|
57
|
-
#define NANOBENCHMARK_ENABLE_CHECKS 0
|
|
58
|
-
#endif
|
|
59
|
-
|
|
60
|
-
#define NANOBENCHMARK_CHECK_ALWAYS(condition) \
|
|
61
|
-
while (!(condition)) { \
|
|
62
|
-
fprintf(stderr, "Nanobenchmark check failed at line %d\n", __LINE__); \
|
|
63
|
-
abort(); \
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
#if NANOBENCHMARK_ENABLE_CHECKS
|
|
67
|
-
#define NANOBENCHMARK_CHECK(condition) NANOBENCHMARK_CHECK_ALWAYS(condition)
|
|
68
|
-
#else
|
|
69
|
-
#define NANOBENCHMARK_CHECK(condition)
|
|
70
|
-
#endif
|
|
52
|
+
#include "hwy/timer.h" // IWYU pragma: export
|
|
71
53
|
|
|
72
54
|
namespace hwy {
|
|
73
55
|
|