fix build error
[platform/upstream/openblas.git] / common_mips64.h
index 332af3e..1163413 100644 (file)
@@ -1,3 +1,35 @@
+/*****************************************************************************
+Copyright (c) 2011-2014, The OpenBLAS Project
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   1. Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+   2. Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in
+      the documentation and/or other materials provided with the
+      distribution.
+   3. Neither the name of the OpenBLAS project nor the names of 
+      its contributors may be used to endorse or promote products 
+      derived from this software without specific prior written 
+      permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+**********************************************************************************/
+
 /*********************************************************************/
 /* Copyright 2009, 2010 The University of Texas at Austin.           */
 /* All rights reserved.                                              */
 #ifndef COMMON_MIPS64
 #define COMMON_MIPS64
 
-#define MB
-#define WMB
+#define MB  __sync_synchronize()
+#define WMB __sync_synchronize()
 
 #define INLINE inline
 
 #ifndef ASSEMBLER
 
-static void INLINE blas_lock(volatile unsigned long *address){
-
-  long int ret, val = 1;
-
-  do {
-    while (*address) {YIELDING;};
-
-    __asm__ __volatile__(
-                        "1:    ll      %0, %3\n"
-                        "      ori     %2, %0, 1\n"
-                        "      sc      %2, %1\n"
-                        "      beqz    %2, 1b\n"
-                        "       andi   %2, %0, 1\n"
-                        "      sync\n"
-                        : "=&r" (val), "=m" (address), "=&r" (ret)
-                        : "m" (address)
-                        : "memory");
-
-  } while (ret);
-}
-
 static inline unsigned int rpcc(void){
   unsigned long ret;
 
-  __asm__ __volatile__(".set   push    \n"                                     
-          ".set   mips32r2\n"                                                  
-          "rdhwr %0, $30  \n"                                                  
-          ".set pop" : "=r"(ret) : : "memory");
+  //  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");
 
   return ret;
 }
+#define RPCC_DEFINED
+
+#ifndef NO_AFFINITY
+//#define WHEREAMI
+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;
@@ -116,6 +144,7 @@ static inline int blas_quickdivide(blasint x, blasint y){
 #define CMPEQ  c.eq.d
 #define CMPLE  c.le.d
 #define CMPLT  c.lt.d
+#define        NEG     neg.d
 #else
 #define LD     lwc1
 #define ST     swc1
@@ -134,6 +163,14 @@ static inline int blas_quickdivide(blasint x, blasint y){
 #define CMPEQ  c.eq.s
 #define CMPLE  c.le.s
 #define CMPLT  c.lt.s
+#define PLU     plu.ps
+#define PLL     pll.ps
+#define PUU     puu.ps
+#define PUL     pul.ps
+#define MADPS   madd.ps
+#define CVTU    cvt.s.pu
+#define CVTL    cvt.s.pl
+#define        NEG     neg.s
 #endif
 
 #if   defined(__64BIT__) &&  defined(USE64BITINT)
@@ -170,10 +207,17 @@ REALNAME: ;\
        .set    noreorder ;\
        .set    nomacro
 
+#if defined(__linux__) && defined(__ELF__)
+#define GNUSTACK .section .note.GNU-stack,"",@progbits
+#else
+#define GNUSTACK
+#endif
+
 #define EPILOGUE \
        .set    macro ;\
        .set    reorder ;\
-       .end    REALNAME
+       .end    REALNAME ;\
+       GNUSTACK
 
 #define PROFCODE
 #endif
@@ -182,7 +226,17 @@ REALNAME: ;\
 
 #define SEEK_ADDRESS
 
-#define BUFFER_SIZE     ( 8 << 20)
+#define BUFFER_SIZE     ( 32 << 20)
+
+#if defined(LOONGSON3A)
+#define PAGESIZE       (16UL << 10)
+#define FIXED_PAGESIZE (16UL << 10)
+#endif
+
+#if defined(LOONGSON3B)
+#define PAGESIZE       (16UL << 10)
+#define FIXED_PAGESIZE (16UL << 10)
+#endif
 
 #ifndef PAGESIZE
 #define PAGESIZE       (64UL << 10)
@@ -194,4 +248,12 @@ REALNAME: ;\
 #ifndef MAP_ANONYMOUS
 #define MAP_ANONYMOUS MAP_ANON
 #endif
+
+#if defined(LOONGSON3A) || defined(LOONGSON3B)
+#define PREFETCHD_(x) ld $0, x
+#define PREFETCHD(x)  PREFETCHD_(x)
+#else
+#define PREFETCHD(x)
+#endif
+
 #endif