#include <asm/hwcap.h>
#include <sys/auxv.h>
#endif
+#ifdef OS_DARWIN
+#include <sys/sysctl.h>
+int32_t value;
+size_t length=sizeof(value);
+#endif
extern gotoblas_t gotoblas_ARMV8;
+#ifdef DYNAMIC_LIST
+#ifdef DYN_CORTEXA53
+extern gotoblas_t gotoblas_CORTEXA53;
+#else
+#define gotoblas_CORTEXA53 gotoblas_ARMV8
+#endif
+#ifdef DYN_CORTEXA57
+extern gotoblas_t gotoblas_CORTEXA57;
+#else
+#define gotoblas_CORTEXA57 gotoblas_ARMV8
+#endif
+#ifdef DYN_CORTEXA72
+extern gotoblas_t gotoblas_CORTEXA72;
+#else
+#define gotoblas_CORTEXA72 gotoblas_ARMV8
+#endif
+#ifdef DYN_CORTEXA73
+extern gotoblas_t gotoblas_CORTEXA73;
+#else
+#define gotoblas_CORTEXA73 gotoblas_ARMV8
+#endif
+#ifdef DYN_FALKOR
+extern gotoblas_t gotoblas_FALKOR;
+#else
+#define gotoblas_FALKOR gotoblas_ARMV8
+#endif
+#ifdef DYN_TSV110
+extern gotoblas_t gotoblas_TSV110;
+#else
+#define gotoblas_TSV110 gotoblas_ARMV8
+#endif
+#ifdef DYN_THUNDERX
+extern gotoblas_t gotoblas_THUNDERX;
+#else
+#define gotoblas_THUNDERX gotoblas_ARMV8
+#endif
+#ifdef DYN_THUNDERX2T99
+extern gotoblas_t gotoblas_THUNDERX2T99;
+#else
+#define gotoblas_THUNDERX2T99 gotoblas_ARMV8
+#endif
+#ifdef DYN_THUNDERX3T110
+extern gotoblas_t gotoblas_THUNDERX3T110;
+#else
+#define gotoblas_THUNDERX3T110 gotoblas_ARMV8
+#endif
+#ifdef DYN_EMAG8180
+extern gotoblas_t gotoblas_EMAG8180;
+#else
+#define gotoblas_EMAG8180 gotoblas_ARMV8
+#endif
+#ifdef DYN_NEOVERSEN1
+extern gotoblas_t gotoblas_NEOVERSEN1;
+#else
+#define gotoblas_NEOVERSEN1 gotoblas_ARMV8
+#endif
+#ifdef DYN_VORTEX
+extern gotoblas_t gotoblas_VORTEX;
+#else
+#define gotoblas_VORTEX gotoblas_ARMV8
+#endif
+#else
extern gotoblas_t gotoblas_CORTEXA53;
extern gotoblas_t gotoblas_CORTEXA57;
extern gotoblas_t gotoblas_CORTEXA72;
extern gotoblas_t gotoblas_EMAG8180;
extern gotoblas_t gotoblas_NEOVERSEN1;
extern gotoblas_t gotoblas_THUNDERX3T110;
+extern gotoblas_t gotoblas_VORTEX;
+#endif
extern void openblas_warning(int verbose, const char * msg);
-#define NUM_CORETYPES 12
+#define NUM_CORETYPES 13
/*
* In case asm/hwcap.h is outdated on the build system, make sure
#endif
#define get_cpu_ftr(id, var) ({ \
- __asm__ __volatile__("mrs %0, "#id : "=r" (var)); \
+ __asm__ ("mrs %0, "#id : "=r" (var)); \
})
static char *corename[] = {
"emag8180",
"neoversen1",
"thunderx3t110",
+ "vortex",
"unknown"
};
if (gotoblas == &gotoblas_EMAG8180) return corename[ 9];
if (gotoblas == &gotoblas_NEOVERSEN1) return corename[10];
if (gotoblas == &gotoblas_THUNDERX3T110) return corename[11];
+ if (gotoblas == &gotoblas_VORTEX) return corename[12];
return corename[NUM_CORETYPES];
}
case 9: return (&gotoblas_EMAG8180);
case 10: return (&gotoblas_NEOVERSEN1);
case 11: return (&gotoblas_THUNDERX3T110);
+ case 12: return (&gotoblas_VORTEX);
}
snprintf(message, 128, "Core not found: %s\n", coretype);
openblas_warning(1, message);
char coremsg[128];
#if (!defined OS_LINUX && !defined OS_ANDROID)
+#ifdef DARWIN
+ sysctlbyname("hw.cpufamily",&value,&length,NULL,0);
+ if (value ==131287967) return CPU_VORTEX;
+#endif
return NULL;
#else