Skip to content

Commit 18f9582

Browse files
authored
Add VORTEXM4
1 parent 4e2a8c1 commit 18f9582

1 file changed

Lines changed: 27 additions & 13 deletions

File tree

driver/others/dynamic_arm64.c

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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
132138
extern gotoblas_t gotoblas_CORTEXA55;
133139
#else
@@ -155,17 +161,22 @@ extern gotoblas_t gotoblas_NEOVERSEV1;
155161
extern gotoblas_t gotoblas_NEOVERSEN2;
156162
extern gotoblas_t gotoblas_ARMV8SVE;
157163
extern 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

171182
extern 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

Comments
 (0)