Browse Source

add fallback blas_lock implementation

to be used on armv5 and new platforms
tags/v0.2.15^2
Grazvydas Ignotas 10 years ago
parent
commit
6b92204a7c
10 changed files with 27 additions and 0 deletions
  1. +14
    -0
      common.h
  2. +1
    -0
      common_alpha.h
  3. +4
    -0
      common_arm.h
  4. +1
    -0
      common_arm64.h
  5. +2
    -0
      common_ia64.h
  6. +1
    -0
      common_mips64.h
  7. +1
    -0
      common_power.h
  8. +1
    -0
      common_sparc.h
  9. +1
    -0
      common_x86.h
  10. +1
    -0
      common_x86_64.h

+ 14
- 0
common.h View File

@@ -435,9 +435,23 @@ static inline unsigned long long rpcc(void){
#define RPCC64BIT
#endif // !RPCC_DEFINED

#if !defined(BLAS_LOCK_DEFINED) && defined(__GNUC__)
static void __inline blas_lock(volatile BLASULONG *address){

do {
while (*address) {YIELDING;};

} while (!__sync_bool_compare_and_swap(address, 0, 1));
}
#define BLAS_LOCK_DEFINED
#endif

#ifndef RPCC_DEFINED
#error "rpcc() implementation is missing for your platform"
#endif
#ifndef BLAS_LOCK_DEFINED
#error "blas_lock() implementation is missing for your platform"
#endif
#endif // !ASSEMBLER

#ifdef OS_LINUX


+ 1
- 0
common_alpha.h View File

@@ -76,6 +76,7 @@ static void __inline blas_lock(unsigned long *address){
"30:", address);
#endif
}
#define BLAS_LOCK_DEFINED

static __inline unsigned int rpcc(void){



+ 4
- 0
common_arm.h View File

@@ -51,6 +51,8 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

#ifndef ASSEMBLER

#if defined(ARMV6) || defined(ARMV7) || defined(ARMV8)

static void __inline blas_lock(volatile BLASULONG *address){

int register ret;
@@ -71,6 +73,8 @@ static void __inline blas_lock(volatile BLASULONG *address){
MB;
}

#define BLAS_LOCK_DEFINED
#endif

static inline int blas_quickdivide(blasint x, blasint y){
return x / y;


+ 1
- 0
common_arm64.h View File

@@ -69,6 +69,7 @@ static void __inline blas_lock(volatile BLASULONG *address){
} while (ret);

}
#define BLAS_LOCK_DEFINED


static inline int blas_quickdivide(blasint x, blasint y){


+ 2
- 0
common_ia64.h View File

@@ -68,6 +68,7 @@ static __inline void blas_lock(volatile unsigned long *address){
: "ar.ccv", "memory");
} while (ret);
}
#define BLAS_LOCK_DEFINED

static __inline unsigned long rpcc(void) {
unsigned long clocks;
@@ -100,6 +101,7 @@ static __inline void blas_lock(volatile unsigned long *address){
while (*address || _InterlockedCompareExchange((volatile int *) address,1,0))
;
}
#define BLAS_LOCK_DEFINED

static __inline unsigned int rpcc(void) {
return __getReg(_IA64_REG_AR_ITC);


+ 1
- 0
common_mips64.h View File

@@ -98,6 +98,7 @@ static void INLINE blas_lock(volatile unsigned long *address){

} while (ret);
}
#define BLAS_LOCK_DEFINED

static inline unsigned int rpcc(void){
unsigned long ret;


+ 1
- 0
common_power.h View File

@@ -87,6 +87,7 @@ static void INLINE blas_lock(volatile unsigned long *address){
#endif
} while (ret);
}
#define BLAS_LOCK_DEFINED

static inline unsigned long rpcc(void){
unsigned long ret;


+ 1
- 0
common_sparc.h View File

@@ -58,6 +58,7 @@ static void __inline blas_lock(volatile unsigned long *address){
: "memory");
} while (ret);
}
#define BLAS_LOCK_DEFINED

static __inline unsigned long rpcc(void){
unsigned long clocks;


+ 1
- 0
common_x86.h View File

@@ -65,6 +65,7 @@ static void __inline blas_lock(volatile BLASULONG *address){
} while (ret);

}
#define BLAS_LOCK_DEFINED

static __inline unsigned long long rpcc(void){
unsigned int a, d;


+ 1
- 0
common_x86_64.h View File

@@ -74,6 +74,7 @@ static void __inline blas_lock(volatile BLASULONG *address){

} while (ret);
}
#define BLAS_LOCK_DEFINED

static __inline BLASULONG rpcc(void){
BLASULONG a, d;


Loading…
Cancel
Save