diff options
| author | Waldemar Brodkorb <wbx@openadk.org> | 2015-02-14 23:04:02 -0600 | 
|---|---|---|
| committer | Waldemar Brodkorb <wbx@openadk.org> | 2015-02-14 23:04:02 -0600 | 
| commit | e1e46622ac0fce73d802fa4a8a2e83cc25cd9e7a (patch) | |
| tree | 2c8d14e4dcc733f4227f0984ed05da5826b13acd /libpthread/linuxthreads/sysdeps/m68k/pspinlock.c | |
| parent | 6b6ede3d15f04fe825cfa9f697507457e3640344 (diff) | |
Revert "resolve merge"
This reverts commit 6b6ede3d15f04fe825cfa9f697507457e3640344.
Diffstat (limited to 'libpthread/linuxthreads/sysdeps/m68k/pspinlock.c')
| -rw-r--r-- | libpthread/linuxthreads/sysdeps/m68k/pspinlock.c | 91 | 
1 files changed, 91 insertions, 0 deletions
| diff --git a/libpthread/linuxthreads/sysdeps/m68k/pspinlock.c b/libpthread/linuxthreads/sysdeps/m68k/pspinlock.c new file mode 100644 index 000000000..af77c2a9d --- /dev/null +++ b/libpthread/linuxthreads/sysdeps/m68k/pspinlock.c @@ -0,0 +1,91 @@ +/* POSIX spinlock implementation.  M68k version. +   Copyright (C) 2000 Free Software Foundation, Inc. +   This file is part of the GNU C Library. + +   The GNU C Library is free software; you can redistribute it and/or +   modify it under the terms of the GNU Lesser General Public License as +   published by the Free Software Foundation; either version 2.1 of the +   License, or (at your option) any later version. + +   The GNU C Library is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +   Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public +   License along with the GNU C Library; see the file COPYING.LIB.  If +   not, see <http://www.gnu.org/licenses/>.  */ + +#include <errno.h> +#include <pthread.h> +#include "internals.h" + + +int +__pthread_spin_lock (pthread_spinlock_t *lock) +{ +  unsigned int val; + +  do +    __asm__ __volatile__ ( +#if !defined(__mcoldfire__) && !defined(__mcf5200__) && !defined(__m68000) +		"tas %1; sne %0" +#else +		"bset #7,%1; sne %0" +#endif +		: "=dm" (val), "=m" (*lock) +		: "m" (*lock) +		: "cc"); +  while (val); + +  return 0; +} +weak_alias (__pthread_spin_lock, pthread_spin_lock) + + +int +__pthread_spin_trylock (pthread_spinlock_t *lock) +{ +  unsigned int val; + +  __asm__ __volatile__ ( +#if !defined(__mcoldfire__) && !defined(__mcf5200__) && !defined(__m68000) +		"tas %1; sne %0" +#else +		"bset #7,%1; sne %0" +#endif +		: "=dm" (val), "=m" (*lock) +		: "m" (*lock) +		: "cc"); + +  return val ? EBUSY : 0; +} +weak_alias (__pthread_spin_trylock, pthread_spin_trylock) + + +int +__pthread_spin_unlock (pthread_spinlock_t *lock) +{ +  return *lock = 0; +} +weak_alias (__pthread_spin_unlock, pthread_spin_unlock) + + +int +__pthread_spin_init (pthread_spinlock_t *lock, int pshared) +{ +  /* We can ignore the `pshared' parameter.  Since we are busy-waiting +     all processes which can access the memory location `lock' points +     to can use the spinlock.  */ +  return *lock = 0; +} +weak_alias (__pthread_spin_init, pthread_spin_init) + + +int +__pthread_spin_destroy (pthread_spinlock_t *lock) +{ +  /* Nothing to do.  */ +  return 0; +} +weak_alias (__pthread_spin_destroy, pthread_spin_destroy) | 
