/*****************************************************************************
-Copyright (c) 2011, Lab of Parallel Software and Computational Science,ICSAS
+Copyright (c) 2011-2014, The OpenBLAS Project
All rights reserved.
Redistribution and use in source and binary forms, with or without
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 ISCAS 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
+ 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.
-
**********************************************************************************/
/*********************************************************************/
#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;};
+static inline unsigned int rpcc(void){
+ unsigned long ret;
- __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");
+ // 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");
- } while (ret);
+ return ret;
}
-
-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;
-#else
- __asm__ __volatile__(".set push \n"
- ".set mips32r2\n"
- "rdhwr %0, $30 \n"
- ".set pop" : "=r"(ret) : : "memory");
-#endif
+#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;
#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
#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)
.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
#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)
#define MAP_ANONYMOUS MAP_ANON
#endif
-#if defined(LOONGSON3A)
+#if defined(LOONGSON3A) || defined(LOONGSON3B)
#define PREFETCHD_(x) ld $0, x
-#define PREFETCHD(x) PREFETCHD_(x)
+#define PREFETCHD(x) PREFETCHD_(x)
#else
-#define PREFETCHD(x)
+#define PREFETCHD(x)
#endif
#endif