@@ -128,6 +128,12 @@ extern gotoblas_t gotoblas_ARMV9SME;
128128#else
129129#define gotoblas_ARMV9SME gotoblas_ARMV8
130130#endif
131+ #ifdef DYN_VORTEXM4
132+ extern gotoblas_t gotoblas_VORTEXM4 ;
133+ #else
134+ #error "dont have vortexm4"
135+ #define gotoblas_VORTEXM4 gotoblas_ARMV8
136+ #endif
131137#ifdef DYN_CORTEXA55
132138extern gotoblas_t gotoblas_CORTEXA55 ;
133139#else
@@ -155,17 +161,22 @@ extern gotoblas_t gotoblas_NEOVERSEV1;
155161extern gotoblas_t gotoblas_NEOVERSEN2 ;
156162extern gotoblas_t gotoblas_ARMV8SVE ;
157163extern gotoblas_t gotoblas_A64FX ;
158- #ifndef NO_SME
159- extern gotoblas_t gotoblas_ARMV9SME ;
160- #else
161- #define gotoblas_ARMV9SME gotoblas_ARMV8SVE
162- #endif
163164#else
164165#define gotoblas_NEOVERSEV1 gotoblas_ARMV8
165166#define gotoblas_NEOVERSEN2 gotoblas_ARMV8
166167#define gotoblas_ARMV8SVE gotoblas_ARMV8
167168#define gotoblas_A64FX gotoblas_ARMV8
168- #define gotoblas_ARMV9SME gotoblas_ARMV8
169+ #endif
170+ #ifndef NO_SME
171+ extern gotoblas_t gotoblas_ARMV9SME ;
172+ extern gotoblas_t gotoblas_VORTEXM4 ;
173+ #else
174+ #ifndef NO_SVE
175+ #define gotoblas_ARMV9SME gotoblas_ARMV8SVE
176+ #else
177+ #define gotoblas_ARMV9SME gotoblas_NEOVERSEN1
178+ #endif
179+ #define gotoblas_VORTEXM4 gotoblas_NEOVERSEN1
169180#endif
170181
171182extern gotoblas_t gotoblas_THUNDERX3T110 ;
@@ -176,7 +187,7 @@ extern void openblas_warning(int verbose, const char * msg);
176187#define FALLBACK_VERBOSE 1
177188#define NEOVERSEN1_FALLBACK "OpenBLAS : Your OS does not support SVE instructions. OpenBLAS is using Neoverse N1 kernels as a fallback, which may give poorer performance.\n"
178189
179- #define NUM_CORETYPES 19
190+ #define NUM_CORETYPES 20
180191
181192/*
182193 * In case asm/hwcap.h is outdated on the build system, make sure
@@ -216,6 +227,7 @@ static char *corename[] = {
216227 "armv8sve" ,
217228 "a64fx" ,
218229 "armv9sme" ,
230+ "vortexm4" ,
219231 "unknown"
220232};
221233
@@ -239,6 +251,7 @@ char *gotoblas_corename(void) {
239251 if (gotoblas == & gotoblas_ARMV8SVE ) return corename [16 ];
240252 if (gotoblas == & gotoblas_A64FX ) return corename [17 ];
241253 if (gotoblas == & gotoblas_ARMV9SME ) return corename [18 ];
254+ if (gotoblas == & gotoblas_VORTEXM4 ) return corename [19 ];
242255 return corename [NUM_CORETYPES ];
243256}
244257
@@ -277,6 +290,7 @@ static gotoblas_t *force_coretype(char *coretype) {
277290 case 16 : return (& gotoblas_ARMV8SVE );
278291 case 17 : return (& gotoblas_A64FX );
279292 case 18 : return (& gotoblas_ARMV9SME );
293+ case 19 : return (& gotoblas_VORTEXM4 );
280294 }
281295 snprintf (message , 128 , "Core not found: %s\n" , coretype );
282296 openblas_warning (1 , message );
@@ -288,11 +302,11 @@ static gotoblas_t *get_coretype(void) {
288302 char coremsg [128 ];
289303
290304#if defined (OS_DARWIN )
291- //future #if !defined(NO_SME)
292- // if (support_sme1()) {
293- // return &gotoblas_ARMV9SME ;
294- // }
295- // #endif
305+ #if !defined(NO_SME )
306+ if (support_sme1 ()) {
307+ return & gotoblas_VORTEXM4 ;
308+ }
309+ #endif
296310 return & gotoblas_NEOVERSEN1 ;
297311#endif
298312
@@ -463,7 +477,7 @@ static gotoblas_t *get_coretype(void) {
463477 }
464478 break ;
465479 case 0x61 : // Apple
466- //future if (support_sme1()) return &gotoblas_ARMV9SME ;
480+ if (support_sme1 ()) return & gotoblas_VORTEXM4 ;
467481 return & gotoblas_NEOVERSEN1 ;
468482 break ;
469483 default :
0 commit comments