LIBXSMM_API void libxsmm_generator_pgemm_kernel( libxsmm_generated_code* io_generated_code, const libxsmm_pgemm_descriptor* i_packed_pgemm_desc, int i_arch, ... ) { const char *const cpuid = libxsmm_cpuid_name( i_arch ); /* add instruction set mismatch check to code, header */ libxsmm_generator_isa_check_header( io_generated_code, cpuid ); /* generate kernel */ if ( LIBXSMM_X86_AVX <= i_arch ) { #if defined(GARBAGE_PARAMETERS) unsigned int iunroll, junroll, loopi, loopj; va_list args; va_start(args, i_arch); iunroll = va_arg(args, unsigned int); junroll = va_arg(args, unsigned int); loopi = va_arg(args, unsigned int); loopj = va_arg(args, unsigned int); va_end(args); libxsmm_generator_packed_gemm_avx_avx512_kernel( io_generated_code, i_packed_pgemm_desc, cpuid, iunroll, junroll, loopi, loopj ); #else libxsmm_generator_packed_gemm_avx_avx512_kernel( io_generated_code, i_packed_pgemm_desc, cpuid ); #endif } else { /* TODO fix this error */
/* @TODO change int based architecture value */ LIBXSMM_API void libxsmm_generator_transpose_kernel( libxsmm_generated_code* io_generated_code, const libxsmm_trans_descriptor* i_trans_desc, const char* i_arch ) { /* add instruction set mismatch check to code, header */ libxsmm_generator_isa_check_header( io_generated_code, i_arch ); /* generate kernel */ if ( (strcmp(i_arch, "skx") == 0) || (strcmp(i_arch, "knm") == 0) || (strcmp(i_arch, "knl") == 0) || (strcmp(i_arch, "hsw") == 0) || (strcmp(i_arch, "snb") == 0) ) { libxsmm_generator_transpose_avx_avx512_kernel( io_generated_code, i_trans_desc, i_arch ); } else { /* TODO fix this error */ LIBXSMM_HANDLE_ERROR( io_generated_code, LIBXSMM_ERR_ARCH ); return; } /* add instruction set mismatch check to code, footer */ libxsmm_generator_isa_check_footer( io_generated_code, i_arch ); }