#include <assert.h>
#include <stddef.h>
#if _WIN32
#include <windows.h>
#else
#include <pthread.h>
#endif
#if XNN_ENABLE_CPUINFO
#include <cpuinfo.h>
#endif
#include "xnnpack/common.h"
#include "xnnpack/config.h"
#include "xnnpack/dwconv.h"
#include "xnnpack/microfnptr.h"
#include "xnnpack/microparams-init.h"
static struct xnn_dwconv_config f16_dwconv_config[XNN_MAX_F16_DWCONV_UKERNELS] = …;
static struct xnn_dwconv_config f32_dwconv_config[XNN_MAX_F32_DWCONV_UKERNELS] = …;
static struct xnn_dwconv_config qs8_qc8w_dwconv_config[XNN_MAX_QC8_DWCONV_UKERNELS] = …;
static struct xnn_dwconv_config qs8_dwconv_config[XNN_MAX_QS8_DWCONV_UKERNELS] = …;
static struct xnn_dwconv_config qu8_dwconv_config[XNN_MAX_QU8_DWCONV_UKERNELS] = …;
#if XNN_PLATFORM_WINDOWS
static INIT_ONCE init_guard_f16_dwconv = INIT_ONCE_STATIC_INIT;
static INIT_ONCE init_guard_f32_dwconv = INIT_ONCE_STATIC_INIT;
static INIT_ONCE init_guard_qs8_qc8w_dwconv = INIT_ONCE_STATIC_INIT;
static INIT_ONCE init_guard_qs8_dwconv = INIT_ONCE_STATIC_INIT;
static INIT_ONCE init_guard_qu8_dwconv = INIT_ONCE_STATIC_INIT;
#else
static pthread_once_t init_guard_f16_dwconv = …;
static pthread_once_t init_guard_f32_dwconv = …;
static pthread_once_t init_guard_qs8_qc8w_dwconv = …;
static pthread_once_t init_guard_qs8_dwconv = …;
static pthread_once_t init_guard_qu8_dwconv = …;
#endif
static void init_f16_dwconv_config(void) { … }
static void init_f32_dwconv_config(void) { … }
static void init_qs8_qc8w_dwconv_config(void) { … }
static void init_qs8_dwconv_config(void) { … }
static void init_qu8_dwconv_config(void) { … }
#if XNN_PLATFORM_WINDOWS
static BOOL CALLBACK init_f16_dwconv_config_windows(PINIT_ONCE init_once, PVOID parameter, PVOID* context) {
init_f16_dwconv_config();
return TRUE;
}
static BOOL CALLBACK init_f32_dwconv_config_windows(PINIT_ONCE init_once, PVOID parameter, PVOID* context) {
init_f32_dwconv_config();
return TRUE;
}
static BOOL CALLBACK init_qs8_qc8w_dwconv_config_windows(PINIT_ONCE init_once, PVOID parameter, PVOID* context) {
init_qs8_qc8w_dwconv_config();
return TRUE;
}
static BOOL CALLBACK init_qs8_dwconv_config_windows(PINIT_ONCE init_once, PVOID parameter, PVOID* context) {
init_qs8_dwconv_config();
return TRUE;
}
static BOOL CALLBACK init_qu8_dwconv_config_windows(PINIT_ONCE init_once, PVOID parameter, PVOID* context) {
init_qu8_dwconv_config();
return TRUE;
}
#endif
struct xnn_dwconv_config* xnn_init_f16_dwconv_config() { … }
struct xnn_dwconv_config* xnn_init_f32_dwconv_config() { … }
struct xnn_dwconv_config* xnn_init_qs8_qc8w_dwconv_config() { … }
struct xnn_dwconv_config* xnn_init_qs8_dwconv_config() { … }
struct xnn_dwconv_config* xnn_init_qu8_dwconv_config() { … }