#endif
*/
-#define MB
-#define WMB
+#ifdef __GNUC__
+#define MB do { __asm__ __volatile__("": : :"memory"); } while (0)
+#define WMB do { __asm__ __volatile__("": : :"memory"); } while (0)
+#else
+#define MB do {} while (0)
+#define WMB do {} while (0)
+#endif
static void __inline blas_lock(volatile BLASULONG *address){
} while (ret);
}
+#define BLAS_LOCK_DEFINED
static __inline BLASULONG rpcc(void){
#ifdef C_MSVC
return ((BLASULONG)a + ((BLASULONG)d << 32));
#endif
}
+#define RPCC_DEFINED
#define RPCC64BIT
*ecx=cpuinfo[2];
*edx=cpuinfo[3];
#else
- __asm__ __volatile__("cpuid"
+ __asm__ __volatile__("mov $0, %%ecx;"
+ "cpuid"
: "=a" (*eax),
"=b" (*ebx),
"=c" (*ecx),
if (y <= 1) return x;
+#if (MAX_CPU_NUMBER > 64)
+ if (y > 64) {
+ result = x / y;
+ return result;
+ }
+#endif
+
y = blas_quick_divide_table[y];
- __asm__ __volatile__ ("mull %0" :"=d" (result) :"a"(x), "0" (y));
+ __asm__ __volatile__ ("mull %0" :"=d" (result), "+a"(x) : "0" (y));
return result;
}
#define RETURN_BY_STACK
#endif
+#ifdef F_INTERFACE_FLANG
+#define RETURN_BY_STACK
+#endif
+
#ifdef F_INTERFACE_PGI
#define RETURN_BY_STACK
#endif
#ifdef ASSEMBLER
#if defined(PILEDRIVER) || defined(BULLDOZER) || defined(STEAMROLLER) || defined(EXCAVATOR)
-//Enable some optimazation for barcelona.
+//Enable some optimization for barcelona.
#define BARCELONA_OPTIMIZATION
#endif
#define PROFCODE
-#define EPILOGUE .end REALNAME
+#define EPILOGUE .end
#endif
-#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_NETBSD) || defined(__ELF__) || defined(C_PGI)
+#if defined(OS_LINUX) || defined(OS_FREEBSD) || defined(OS_NETBSD) || defined(OS_OPENBSD) || defined(OS_DRAGONFLY) || defined(__ELF__) || defined(C_PGI)
#define PROLOGUE \
.text; \
.align 512; \