static inline unsigned int rpcc(void){
unsigned long ret;
-#if defined(LOONGSON3A)
- unsigned long long tmp;
- __asm__ __volatile__("dmfc0 %0, $25, 1": "=r"(tmp):: "memory");
- ret=tmp;
-#elif defined(LOONGSON3B)
- //Temp Implementation.
- return 1;
+#if defined(LOONGSON3A) || defined(LOONGSON3B)
+ // unsigned long long tmp;
+ //__asm__ __volatile__("dmfc0 %0, $25, 1": "=r"(tmp):: "memory");
+ //ret=tmp;
+ __asm__ __volatile__(".set push \n"
+ ".set mips32r2\n"
+ "rdhwr %0, $2\n"
+ ".set pop": "=r"(ret):: "memory");
+
#else
__asm__ __volatile__(".set push \n"
".set mips32r2\n"
return ret;
}
+//#if defined(LOONGSON3A) || defined(LOONGSON3B)
+static inline int WhereAmI(void){
+ int ret=0;
+ __asm__ __volatile__(".set push \n"
+ ".set mips32r2\n"
+ "rdhwr %0, $0\n"
+ ".set pop": "=r"(ret):: "memory");
+ return ret;
+
+}
+//#endif
+
static inline int blas_quickdivide(blasint x, blasint y){
return x / y;
}