@@ -1,2 +1,2 @@ | |||||
MAINTAINERCLEANFILES = Makefile.in | MAINTAINERCLEANFILES = Makefile.in | ||||
DIST_SUBDIRS = alpha cris generic i386 i486 ia64 m68k mips powerpc s390 | |||||
DIST_SUBDIRS = generic i386 powerpc |
@@ -1,3 +0,0 @@ | |||||
MAINTAINERCLEANFILES = Makefile.in | |||||
noinst_HEADERS = atomicity.h cycles.h | |||||
@@ -1,76 +0,0 @@ | |||||
// Low-level functions for atomic operations: Alpha version -*- C++ -*- | |||||
// Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc. | |||||
// | |||||
// This file is part of the GNU ISO C++ Library. This library is free | |||||
// software; you can redistribute it and/or modify it under the | |||||
// terms of the GNU General Public License as published by the | |||||
// Free Software Foundation; either version 2, or (at your option) | |||||
// any later version. | |||||
// This 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 General Public License for more details. | |||||
// You should have received a copy of the GNU General Public License along | |||||
// with this library; see the file COPYING. If not, write to the Free | |||||
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, | |||||
// USA. | |||||
// As a special exception, you may use this file as part of a free software | |||||
// library without restriction. Specifically, if other files instantiate | |||||
// templates or use macros or inline functions from this file, or you compile | |||||
// this file and link it with other files to produce an executable, this | |||||
// file does not by itself cause the resulting executable to be covered by | |||||
// the GNU General Public License. This exception does not however | |||||
// invalidate any other reasons why the executable file might be covered by | |||||
// the GNU General Public License. | |||||
#ifndef _GLIBCXX_ATOMICITY_H | |||||
#define _GLIBCXX_ATOMICITY_H 1 | |||||
/* @@@ With gas we can play nice .subsection games to get the | |||||
non-predicted branch pointing forward. But Digital assemblers | |||||
don't understand those directives. This isn't a terribly | |||||
important issue, so just ignore it. */ | |||||
typedef int _Atomic_word; | |||||
static inline _Atomic_word | |||||
__attribute__ ((__unused__)) | |||||
__exchange_and_add (volatile _Atomic_word* __mem, int __val) | |||||
{ | |||||
register int __result, __tmp; | |||||
__asm__ __volatile__ ( | |||||
"\n$Lxadd_%=:\n\t" | |||||
"ldl_l %0,%3\n\t" | |||||
"addl %0,%4,%1\n\t" | |||||
"stl_c %1,%2\n\t" | |||||
"beq %1,$Lxadd_%=\n\t" | |||||
"mb" | |||||
: "=&r" (__result), "=&r" (__tmp), "=m" (*__mem) | |||||
: "m" (*__mem), "r" (__val)); | |||||
return __result; | |||||
} | |||||
static inline void | |||||
__attribute__ ((__unused__)) | |||||
__atomic_add (volatile _Atomic_word* __mem, int __val) | |||||
{ | |||||
register _Atomic_word __result; | |||||
__asm__ __volatile__ ( | |||||
"\n$Ladd_%=:\n\t" | |||||
"ldl_l %0,%2\n\t" | |||||
"addl %0,%3,%0\n\t" | |||||
"stl_c %0,%1\n\t" | |||||
"beq %0,$Ladd_%=\n\t" | |||||
"mb" | |||||
: "=&r" (__result), "=m" (*__mem) | |||||
: "m" (*__mem), "r" (__val)); | |||||
} | |||||
#endif /* atomicity.h */ |
@@ -1,35 +0,0 @@ | |||||
/* | |||||
Copyright (C) 2001 Paul Davis | |||||
Code derived from various headers from the Linux kernel | |||||
This program is free software; you can redistribute it and/or modify | |||||
it under the terms of the GNU General Public License as published by | |||||
the Free Software Foundation; either version 2 of the License, or | |||||
(at your option) any later version. | |||||
This program 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 General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with this program; if not, write to the Free Software | |||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
*/ | |||||
#ifndef __jack_cycles_h__ | |||||
#define __jack_cycles_h__ | |||||
/* alpha */ | |||||
typedef unsigned int cycles_t; | |||||
static inline cycles_t get_cycles (void) | |||||
{ | |||||
cycles_t ret; | |||||
__asm__ __volatile__ ("rpcc %0" : "=r" (ret)); | |||||
return ret; | |||||
} | |||||
#endif /* __jack_cycles_h__ */ |
@@ -1,3 +0,0 @@ | |||||
MAINTAINERCLEANFILES = Makefile.in | |||||
noinst_HEADERS = atomicity.h | |||||
@@ -1,78 +0,0 @@ | |||||
// Low-level functions for atomic operations: CRIS version -*- C++ -*- | |||||
// Copyright (C) 2001, 2003 Free Software Foundation, Inc. | |||||
// | |||||
// This file is part of the GNU ISO C++ Library. This library is free | |||||
// software; you can redistribute it and/or modify it under the | |||||
// terms of the GNU General Public License as published by the | |||||
// Free Software Foundation; either version 2, or (at your option) | |||||
// any later version. | |||||
// This 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 General Public License for more details. | |||||
// You should have received a copy of the GNU General Public License along | |||||
// with this library; see the file COPYING. If not, write to the Free | |||||
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, | |||||
// USA. | |||||
// As a special exception, you may use this file as part of a free software | |||||
// library without restriction. Specifically, if other files instantiate | |||||
// templates or use macros or inline functions from this file, or you compile | |||||
// this file and link it with other files to produce an executable, this | |||||
// file does not by itself cause the resulting executable to be covered by | |||||
// the GNU General Public License. This exception does not however | |||||
// invalidate any other reasons why the executable file might be covered by | |||||
// the GNU General Public License. | |||||
#ifndef _GLIBCXX_ATOMICITY_H | |||||
#define _GLIBCXX_ATOMICITY_H 1 | |||||
// This entity must not cross a page boundary. | |||||
typedef int _Atomic_word __attribute__ ((__aligned__ (4))); | |||||
static inline _Atomic_word | |||||
__attribute__ ((__unused__)) | |||||
__exchange_and_add (_Atomic_word* __mem, int __val) | |||||
{ | |||||
int __tmp; | |||||
_Atomic_word __result; | |||||
#if (__CRIS_arch_version >= 10) | |||||
__asm__ __volatile__ (" clearf \n" | |||||
"0: \n" | |||||
" move.d %4,%2 \n" | |||||
" move.d [%3],%0 \n" | |||||
" add.d %0,%2 \n" | |||||
" ax \n" | |||||
" move.d %2,[%3] \n" | |||||
" bwf 0b \n" | |||||
" clearf \n" | |||||
: "=&r" (__result), "=m" (*__mem), "=&r" (__tmp) | |||||
: "r" (__mem), "g" (__val), "m" (*__mem)); | |||||
#else | |||||
__asm__ __volatile__ (" move $ccr,$r9 \n" | |||||
" di \n" | |||||
" move.d %4,%2 \n" | |||||
" move.d [%3],%0 \n" | |||||
" add.d %0,%2 \n" | |||||
" move.d %2,[%3] \n" | |||||
" move $r9,$ccr \n" | |||||
: "=&r" (__result), "=m" (*__mem), "=&r" (__tmp) | |||||
: "r" (__mem), "g" (__val), "m" (*__mem) | |||||
: "r9"); | |||||
#endif | |||||
return __result; | |||||
} | |||||
static inline void | |||||
__attribute__ ((__unused__)) | |||||
__atomic_add (_Atomic_word* __mem, int __val) | |||||
{ | |||||
__exchange_and_add (__mem, __val); | |||||
} | |||||
#endif /* atomicity.h */ |
@@ -1,3 +1,3 @@ | |||||
MAINTAINERCLEANFILES = Makefile.in | MAINTAINERCLEANFILES = Makefile.in | ||||
noinst_HEADERS = atomicity.h cycles.h | |||||
noinst_HEADERS = atomicity.h | |||||
@@ -1,38 +0,0 @@ | |||||
/* | |||||
Copyright (C) 2001 Paul Davis | |||||
This program is free software; you can redistribute it and/or modify | |||||
it under the terms of the GNU General Public License as published by | |||||
the Free Software Foundation; either version 2 of the License, or | |||||
(at your option) any later version. | |||||
This program 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 General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with this program; if not, write to the Free Software | |||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
*/ | |||||
#ifndef __jack_cycles_h__ | |||||
#define __jack_cycles_h__ | |||||
/* generic solution that is not really a solution at all */ | |||||
#include <sys/time.h> | |||||
typedef long cycles_t; | |||||
static inline cycles_t get_cycles (void) | |||||
{ | |||||
struct timespec time; | |||||
clock_gettime (CLOCK_REALTIME, &time); | |||||
return ((cycles_t)time.tv_sec * 1000000) + time.tv_nsec * 1000; | |||||
} | |||||
#endif /* __jack_cycles_h__ */ |
@@ -1,3 +1,3 @@ | |||||
MAINTAINERCLEANFILES = Makefile.in | MAINTAINERCLEANFILES = Makefile.in | ||||
noinst_HEADERS = atomicity.h cycles.h | |||||
noinst_HEADERS = atomicity.h | |||||
@@ -1,34 +0,0 @@ | |||||
/* | |||||
Copyright (C) 2001 Paul Davis | |||||
Code derived from various headers from the Linux kernel | |||||
This program is free software; you can redistribute it and/or modify | |||||
it under the terms of the GNU General Public License as published by | |||||
the Free Software Foundation; either version 2 of the License, or | |||||
(at your option) any later version. | |||||
This program 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 General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with this program; if not, write to the Free Software | |||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
*/ | |||||
#ifndef __jack_cycles_h__ | |||||
#define __jack_cycles_h__ | |||||
typedef unsigned long long cycles_t; | |||||
static inline cycles_t get_cycles (void) | |||||
{ | |||||
unsigned long long ret; | |||||
__asm__ __volatile__ ("rdtsc" : "=A" (ret)); | |||||
return ret; | |||||
} | |||||
#endif /* __jack_cycles_h__ */ |
@@ -1,3 +0,0 @@ | |||||
MAINTAINERCLEANFILES = Makefile.in | |||||
noinst_HEADERS = cycles.h | |||||
@@ -1,3 +0,0 @@ | |||||
/* the i386 version of this header is compatible */ | |||||
#include <config/cpu/i386/cycles.h> |
@@ -1,3 +0,0 @@ | |||||
MAINTAINERCLEANFILES = Makefile.in | |||||
noinst_HEADERS = atomicity.h cycles.h ia64intrin.h | |||||
@@ -1,51 +0,0 @@ | |||||
// Low-level functions for atomic operations: IA64 version -*- C++ -*- | |||||
// Copyright (C) 2000, 2001, 2003 Free Software Foundation, Inc. | |||||
// | |||||
// This file is part of the GNU ISO C++ Library. This library is free | |||||
// software; you can redistribute it and/or modify it under the | |||||
// terms of the GNU General Public License as published by the | |||||
// Free Software Foundation; either version 2, or (at your option) | |||||
// any later version. | |||||
// This 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 General Public License for more details. | |||||
// You should have received a copy of the GNU General Public License along | |||||
// with this library; see the file COPYING. If not, write to the Free | |||||
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, | |||||
// USA. | |||||
// As a special exception, you may use this file as part of a free software | |||||
// library without restriction. Specifically, if other files instantiate | |||||
// templates or use macros or inline functions from this file, or you compile | |||||
// this file and link it with other files to produce an executable, this | |||||
// file does not by itself cause the resulting executable to be covered by | |||||
// the GNU General Public License. This exception does not however | |||||
// invalidate any other reasons why the executable file might be covered by | |||||
// the GNU General Public License. | |||||
#ifndef _GLIBCXX_ATOMICITY_H | |||||
#define _GLIBCXX_ATOMICITY_H 1 | |||||
#include <sysdeps/ia64intrin.h> | |||||
typedef int _Atomic_word; | |||||
static inline _Atomic_word | |||||
__attribute__ ((__unused__)) | |||||
__exchange_and_add (volatile _Atomic_word* __mem, int __val) | |||||
{ | |||||
return __sync_fetch_and_add (__mem, __val); | |||||
} | |||||
static inline void | |||||
__attribute__ ((__unused__)) | |||||
__atomic_add (volatile _Atomic_word* __mem, int __val) | |||||
{ | |||||
__sync_fetch_and_add (__mem, __val); | |||||
} | |||||
#endif /* atomicity.h */ |
@@ -1,36 +0,0 @@ | |||||
/* | |||||
Copyright (C) 2001 Paul Davis | |||||
Code derived from various headers from the Linux kernel | |||||
This program is free software; you can redistribute it and/or modify | |||||
it under the terms of the GNU General Public License as published by | |||||
the Free Software Foundation; either version 2 of the License, or | |||||
(at your option) any later version. | |||||
This program 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 General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with this program; if not, write to the Free Software | |||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
*/ | |||||
#ifndef __jack_cycles_h__ | |||||
#define __jack_cycles_h__ | |||||
/* ia64 */ | |||||
typedef unsigned long cycles_t; | |||||
static inline cycles_t | |||||
get_cycles (void) | |||||
{ | |||||
cycles_t ret; | |||||
__asm__ __volatile__ ("mov %0=ar.itc" : "=r" (ret)); | |||||
return ret; | |||||
} | |||||
#endif /* __jack_cycles_h__ */ |
@@ -1,130 +0,0 @@ | |||||
#ifndef _IA64INTRIN_H_INCLUDED | |||||
#define _IA64INTRIN_H_INCLUDED | |||||
/* Actually, everything is a compiler builtin, but just so | |||||
there's no confusion... */ | |||||
#ifdef __cplusplus | |||||
extern "C" { | |||||
#endif | |||||
extern void __sync_synchronize(void); | |||||
extern int __sync_val_compare_and_swap_si(int *, int, int); | |||||
extern long __sync_val_compare_and_swap_di(long *, long, long); | |||||
#define __sync_val_compare_and_swap(PTR, OLD, NEW) \ | |||||
((sizeof(*(PTR)) == sizeof(int)) \ | |||||
? (__typeof__(*(PTR))) \ | |||||
__sync_val_compare_and_swap_si ((int*)(PTR), (int)(OLD), (int)(NEW)) \ | |||||
: (__typeof__(*(PTR))) \ | |||||
__sync_val_compare_and_swap_di ((long*)(PTR), (long)(OLD), (long)(NEW))) | |||||
extern int __sync_bool_compare_and_swap_si(int *, int, int); | |||||
extern int __sync_bool_compare_and_swap_di(long *, long, long); | |||||
#define __sync_bool_compare_and_swap(PTR, OLD, NEW) \ | |||||
((sizeof(*(PTR)) == sizeof(int)) \ | |||||
? __sync_bool_compare_and_swap_si ((int*)(PTR), (int)(OLD), (int)(NEW)) \ | |||||
: __sync_bool_compare_and_swap_di ((long*)(PTR), (long)(OLD), (long)(NEW))) | |||||
extern void __sync_lock_release_si(int *); | |||||
extern void __sync_lock_release_di(long *); | |||||
#define __sync_lock_release(PTR) \ | |||||
((sizeof(*(PTR)) == sizeof(int)) \ | |||||
? __sync_lock_release_si ((int*)(PTR)) \ | |||||
: __sync_lock_release_di ((long*)(PTR))) | |||||
extern int __sync_lock_test_and_set_si(int *, int); | |||||
extern long __sync_lock_test_and_set_di(long *, long); | |||||
#define __sync_lock_test_and_set(PTR, VAL) \ | |||||
((sizeof(*(PTR)) == sizeof(int)) \ | |||||
? (__typeof__(*(PTR)))__sync_lock_test_and_set_si ((int*)(PTR), (int)(VAL)) \ | |||||
: (__typeof__(*(PTR)))__sync_lock_test_and_set_di ((long*)(PTR), (long)(VAL))) | |||||
extern int __sync_fetch_and_add_si(int *, int); | |||||
extern long __sync_fetch_and_add_di(long *, long); | |||||
#define __sync_fetch_and_add(PTR, VAL) \ | |||||
((sizeof(*(PTR)) == sizeof(int)) \ | |||||
? (__typeof__(*(PTR)))__sync_fetch_and_add_si ((int*)(PTR), (int)(VAL)) \ | |||||
: (__typeof__(*(PTR)))__sync_fetch_and_add_di ((long*)(PTR), (long)(VAL))) | |||||
extern int __sync_fetch_and_sub_si(int *, int); | |||||
extern long __sync_fetch_and_sub_di(long *, long); | |||||
#define __sync_fetch_and_sub(PTR, VAL) \ | |||||
((sizeof(*(PTR)) == sizeof(int)) \ | |||||
? (__typeof__(*(PTR)))__sync_fetch_and_sub_si ((int*)(PTR), (int)(VAL)) \ | |||||
: (__typeof__(*(PTR)))__sync_fetch_and_sub_di ((long*)(PTR), (long)(VAL))) | |||||
extern int __sync_fetch_and_and_si(int *, int); | |||||
extern long __sync_fetch_and_and_di(long *, long); | |||||
#define __sync_fetch_and_and(PTR, VAL) \ | |||||
((sizeof(*(PTR)) == sizeof(int)) \ | |||||
? (__typeof__(*(PTR)))__sync_fetch_and_and_si ((int*)(PTR), (int)(VAL)) \ | |||||
: (__typeof__(*(PTR)))__sync_fetch_and_and_di ((long*)(PTR), (long)(VAL))) | |||||
extern int __sync_fetch_and_or_si(int *, int); | |||||
extern long __sync_fetch_and_or_di(long *, long); | |||||
#define __sync_fetch_and_or(PTR, VAL) \ | |||||
((sizeof(*(PTR)) == sizeof(int)) \ | |||||
? (__typeof__(*(PTR)))__sync_fetch_and_or_si ((int*)(PTR), (int)(VAL)) \ | |||||
: (__typeof__(*(PTR)))__sync_fetch_and_or_di ((long*)(PTR), (long)(VAL))) | |||||
extern int __sync_fetch_and_xor_si(int *, int); | |||||
extern long __sync_fetch_and_xor_di(long *, long); | |||||
#define __sync_fetch_and_xor(PTR, VAL) \ | |||||
((sizeof(*(PTR)) == sizeof(int)) \ | |||||
? (__typeof__(*(PTR)))__sync_fetch_and_xor_si ((int*)(PTR), (int)(VAL)) \ | |||||
: (__typeof__(*(PTR)))__sync_fetch_and_xor_di ((long*)(PTR), (long)(VAL))) | |||||
extern int __sync_fetch_and_nand_si(int *, int); | |||||
extern long __sync_fetch_and_nand_di(long *, long); | |||||
#define __sync_fetch_and_nand(PTR, VAL) \ | |||||
((sizeof(*(PTR)) == sizeof(int)) \ | |||||
? (__typeof__(*(PTR)))__sync_fetch_and_nand_si ((int*)(PTR), (int)(VAL)) \ | |||||
: (__typeof__(*(PTR)))__sync_fetch_and_nand_di ((long*)(PTR), (long)(VAL))) | |||||
extern int __sync_add_and_fetch_si(int *, int); | |||||
extern long __sync_add_and_fetch_di(long *, long); | |||||
#define __sync_add_and_fetch(PTR, VAL) \ | |||||
((sizeof(*(PTR)) == sizeof(int)) \ | |||||
? (__typeof__(*(PTR)))__sync_add_and_fetch_si ((int*)(PTR), (int)(VAL)) \ | |||||
: (__typeof__(*(PTR)))__sync_add_and_fetch_di ((long*)(PTR), (long)(VAL))) | |||||
extern int __sync_sub_and_fetch_si(int *, int); | |||||
extern long __sync_sub_and_fetch_di(long *, long); | |||||
#define __sync_sub_and_fetch(PTR, VAL) \ | |||||
((sizeof(*(PTR)) == sizeof(int)) \ | |||||
? (__typeof__(*(PTR)))__sync_sub_and_fetch_si ((int*)(PTR), (int)(VAL)) \ | |||||
: (__typeof__(*(PTR)))__sync_sub_and_fetch_di ((long*)(PTR), (long)(VAL))) | |||||
extern int __sync_and_and_fetch_si(int *, int); | |||||
extern long __sync_and_and_fetch_di(long *, long); | |||||
#define __sync_and_and_fetch(PTR, VAL) \ | |||||
((sizeof(*(PTR)) == sizeof(int)) \ | |||||
? (__typeof__(*(PTR)))__sync_and_and_fetch_si ((int*)(PTR), (int)(VAL)) \ | |||||
: (__typeof__(*(PTR)))__sync_and_and_fetch_di ((long*)(PTR), (long)(VAL))) | |||||
extern int __sync_or_and_fetch_si(int *, int); | |||||
extern long __sync_or_and_fetch_di(long *, long); | |||||
#define __sync_or_and_fetch(PTR, VAL) \ | |||||
((sizeof(*(PTR)) == sizeof(int)) \ | |||||
? (__typeof__(*(PTR)))__sync_or_and_fetch_si ((int*)(PTR), (int)(VAL)) \ | |||||
: (__typeof__(*(PTR)))__sync_or_and_fetch_di ((long*)(PTR), (long)(VAL))) | |||||
extern int __sync_xor_and_fetch_si(int *, int); | |||||
extern long __sync_xor_and_fetch_di(long *, long); | |||||
#define __sync_xor_and_fetch(PTR, VAL) \ | |||||
((sizeof(*(PTR)) == sizeof(int)) \ | |||||
? (__typeof__(*(PTR)))__sync_xor_and_fetch_si ((int*)(PTR), (int)(VAL)) \ | |||||
: (__typeof__(*(PTR)))__sync_xor_and_fetch_di ((long*)(PTR), (long)(VAL))) | |||||
extern int __sync_nand_and_fetch_si(int *, int); | |||||
extern long __sync_nand_and_fetch_di(long *, long); | |||||
#define __sync_nand_and_fetch(PTR, VAL) \ | |||||
((sizeof(*(PTR)) == sizeof(int)) \ | |||||
? (__typeof__(*(PTR)))__sync_nand_and_fetch_si ((int*)(PTR), (int)(VAL)) \ | |||||
: (__typeof__(*(PTR)))__sync_nand_and_fetch_di ((long*)(PTR), (long)(VAL))) | |||||
#ifdef __cplusplus | |||||
} | |||||
#endif | |||||
#endif |
@@ -1,3 +0,0 @@ | |||||
MAINTAINERCLEANFILES = Makefile.in | |||||
noinst_HEADERS = atomicity.h | |||||
@@ -1,140 +0,0 @@ | |||||
// Low-level functions for atomic operations: m68k version -*- C++ -*- | |||||
// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. | |||||
// | |||||
// This file is part of the GNU ISO C++ Library. This library is free | |||||
// software; you can redistribute it and/or modify it under the | |||||
// terms of the GNU General Public License as published by the | |||||
// Free Software Foundation; either version 2, or (at your option) | |||||
// any later version. | |||||
// This 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 General Public License for more details. | |||||
// You should have received a copy of the GNU General Public License along | |||||
// with this library; see the file COPYING. If not, write to the Free | |||||
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, | |||||
// USA. | |||||
// As a special exception, you may use this file as part of a free software | |||||
// library without restriction. Specifically, if other files instantiate | |||||
// templates or use macros or inline functions from this file, or you compile | |||||
// this file and link it with other files to produce an executable, this | |||||
// file does not by itself cause the resulting executable to be covered by | |||||
// the GNU General Public License. This exception does not however | |||||
// invalidate any other reasons why the executable file might be covered by | |||||
// the GNU General Public License. | |||||
#ifndef _GLIBCXX_ATOMICITY_H | |||||
#define _GLIBCXX_ATOMICITY_H 1 | |||||
typedef int _Atomic_word; | |||||
#if ( defined(__mc68020__) || defined(__mc68030__) \ | |||||
|| defined(__mc68040__) || defined(__mc68060__) ) \ | |||||
&& !defined(__mcpu32__) | |||||
// These variants support compare-and-swap. | |||||
static inline _Atomic_word | |||||
__attribute__ ((__unused__)) | |||||
__exchange_and_add (volatile _Atomic_word* __mem, int __val) | |||||
{ | |||||
register _Atomic_word __result = *__mem; | |||||
register _Atomic_word __temp; | |||||
__asm__ __volatile__ ("1: move%.l %0,%1\n\t" | |||||
"add%.l %3,%1\n\t" | |||||
"cas%.l %0,%1,%2\n\t" | |||||
"jne 1b" | |||||
: "=d" (__result), "=&d" (__temp), "=m" (*__mem) | |||||
: "d" (__val), "0" (__result), "m" (*__mem)); | |||||
return __result; | |||||
} | |||||
#elif defined(__rtems__) | |||||
/* | |||||
* TAS/JBNE is unsafe on systems with strict priority-based scheduling. | |||||
* Disable interrupts, which we can do only from supervisor mode. | |||||
*/ | |||||
static inline _Atomic_word | |||||
__attribute__ ((__unused__)) | |||||
__exchange_and_add (volatile _Atomic_word* __mem, int __val) | |||||
{ | |||||
_Atomic_word __result; | |||||
short __level, __tmpsr; | |||||
__asm__ __volatile__ ("move%.w %%sr,%0\n\tor%.l %0,%1\n\tmove%.w %1,%%sr" | |||||
: "=d" (__level), "=d" (__tmpsr) : "1" (0x700)); | |||||
__result = *__mem; | |||||
*__mem = __result + __val; | |||||
__asm__ __volatile__ ("move%.w %0,%%sr" : : "d" (__level)); | |||||
return __result; | |||||
} | |||||
#else | |||||
template<int __inst> | |||||
struct __Atomicity_lock { | |||||
static volatile unsigned char _S_atomicity_lock; | |||||
}; | |||||
template<int __inst> | |||||
volatile unsigned char __Atomicity_lock<__inst>::_S_atomicity_lock = 0; | |||||
template volatile unsigned char __Atomicity_lock<0>::_S_atomicity_lock; | |||||
static inline _Atomic_word | |||||
__attribute__ ((__unused__)) | |||||
__exchange_and_add (volatile _Atomic_word* __mem, int __val) | |||||
{ | |||||
_Atomic_word __result; | |||||
// bset with no immediate addressing (not SMP-safe) | |||||
#if defined(__mcf5200__) || defined(__mcf5300__) | |||||
__asm__ __volatile__ ("1: bset.b #7,%0@\n\tjbne 1b" | |||||
: /* no outputs */ | |||||
: "a" (&__Atomicity_lock<0>::_S_atomicity_lock) | |||||
: "cc", "memory"); | |||||
// CPU32 and MCF5400 support test-and-set (SMP-safe). | |||||
#elif defined(__mcpu32__) || defined(__mcf5400__) | |||||
__asm__ __volatile__ ("1: tas %0\n\tjbne 1b" | |||||
: "+m" (__Atomicity_lock<0>::_S_atomicity_lock) | |||||
: /* none */ | |||||
: "cc"); | |||||
// Use bset with immediate addressing for 68000/68010 (not SMP-safe) | |||||
// NOTE: TAS is available on the 68000, but unsupported by some Amiga | |||||
// memory controllers. | |||||
#else | |||||
__asm__ __volatile__ ("1: bset.b #7,%0\n\tjbne 1b" | |||||
: "+m" (__Atomicity_lock<0>::_S_atomicity_lock) | |||||
: /* none */ | |||||
: "cc"); | |||||
#endif | |||||
__result = *__mem; | |||||
*__mem = __result + __val; | |||||
__Atomicity_lock<0>::_S_atomicity_lock = 0; | |||||
return __result; | |||||
} | |||||
#endif /* TAS / BSET */ | |||||
static inline void | |||||
__attribute__ ((__unused__)) | |||||
__atomic_add (volatile _Atomic_word* __mem, int __val) | |||||
{ | |||||
// Careful: using add.l with a memory destination is not | |||||
// architecturally guaranteed to be atomic. | |||||
(void)__exchange_and_add (__mem, __val); | |||||
} | |||||
#endif /* !_GLIBCXX_ATOMICITY_H */ |
@@ -1,3 +0,0 @@ | |||||
MAINTAINERCLEANFILES = Makefile.in | |||||
noinst_HEADERS = atomicity.h | |||||
@@ -1,83 +0,0 @@ | |||||
// Low-level functions for atomic operations. | |||||
// Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. | |||||
// | |||||
// This file is part of the GNU ISO C++ Library. This library is free | |||||
// software; you can redistribute it and/or modify it under the | |||||
// terms of the GNU General Public License as published by the | |||||
// Free Software Foundation; either version 2, or (at your option) | |||||
// any later version. | |||||
// This 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 General Public License for more details. | |||||
// You should have received a copy of the GNU General Public License along | |||||
// with this library; see the file COPYING. If not, write to the Free | |||||
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, | |||||
// USA. | |||||
// As a special exception, you may use this file as part of a free software | |||||
// library without restriction. Specifically, if other files instantiate | |||||
// templates or use macros or inline functions from this file, or you compile | |||||
// this file and link it with other files to produce an executable, this | |||||
// file does not by itself cause the resulting executable to be covered by | |||||
// the GNU General Public License. This exception does not however | |||||
// invalidate any other reasons why the executable file might be covered by | |||||
// the GNU General Public License. | |||||
#ifndef _GLIBCXX_ATOMICITY_H | |||||
#define _GLIBCXX_ATOMICITY_H 1 | |||||
typedef int _Atomic_word; | |||||
static inline int | |||||
__attribute__ ((__unused__)) | |||||
__exchange_and_add (volatile _Atomic_word* __mem, int __val) | |||||
{ | |||||
int __result, __tmp; | |||||
__asm__ __volatile__ | |||||
("/* Inline exchange & add */\n\t" | |||||
"1:\n\t" | |||||
".set push\n\t" | |||||
#if _MIPS_SIM == _ABIO32 | |||||
".set mips2\n\t" | |||||
#endif | |||||
"ll %0,%3\n\t" | |||||
"addu %1,%4,%0\n\t" | |||||
"sc %1,%2\n\t" | |||||
".set pop\n\t" | |||||
"beqz %1,1b\n\t" | |||||
"/* End exchange & add */" | |||||
: "=&r" (__result), "=&r" (__tmp), "=m" (*__mem) | |||||
: "m" (*__mem), "r" (__val)); | |||||
return __result; | |||||
} | |||||
static inline void | |||||
__attribute__ ((__unused__)) | |||||
__atomic_add (volatile _Atomic_word* __mem, int __val) | |||||
{ | |||||
int __result; | |||||
__asm__ __volatile__ | |||||
("/* Inline atomic add */\n\t" | |||||
"1:\n\t" | |||||
".set push\n\t" | |||||
#if _MIPS_SIM == _ABIO32 | |||||
".set mips2\n\t" | |||||
#endif | |||||
"ll %0,%2\n\t" | |||||
"addu %0,%3,%0\n\t" | |||||
"sc %0,%1\n\t" | |||||
".set pop\n\t" | |||||
"beqz %0,1b\n\t" | |||||
"/* End atomic add */" | |||||
: "=&r" (__result), "=m" (*__mem) | |||||
: "m" (*__mem), "r" (__val)); | |||||
} | |||||
#endif /* atomicity.h */ |
@@ -1,3 +1,3 @@ | |||||
MAINTAINERCLEANFILES = Makefile.in | MAINTAINERCLEANFILES = Makefile.in | ||||
noinst_HEADERS = atomicity.h cycles.h | |||||
noinst_HEADERS = atomicity.h | |||||
@@ -1,75 +0,0 @@ | |||||
/* | |||||
Copyright (C) 2001 Paul Davis | |||||
Code derived from various headers from the Linux kernel | |||||
This program is free software; you can redistribute it and/or modify | |||||
it under the terms of the GNU General Public License as published by | |||||
the Free Software Foundation; either version 2 of the License, or | |||||
(at your option) any later version. | |||||
This program 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 General Public License for more details. | |||||
You should have received a copy of the GNU General Public License | |||||
along with this program; if not, write to the Free Software | |||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |||||
*/ | |||||
#ifndef __jack_cycles_h__ | |||||
#define __jack_cycles_h__ | |||||
/* PowerPC */ | |||||
#define CPU_FTR_601 0x00000100 | |||||
#ifdef __powerpc64__ | |||||
#define CPU_FTR_CELL_TB_BUG 0x0000800000000000UL | |||||
#endif /* __powerpc64__ */ | |||||
typedef unsigned long cycles_t; | |||||
/* For the "cycle" counter we use the timebase lower half. */ | |||||
extern cycles_t cacheflush_time; | |||||
static inline cycles_t get_cycles (void) | |||||
{ | |||||
cycles_t ret = 0; | |||||
#ifdef __powerpc64__ | |||||
#ifdef ENABLE_CELLBE | |||||
asm volatile ( \ | |||||
"90: mftb %0;\n" \ | |||||
"97: cmpwi %0,0;\n" \ | |||||
" beq- 90b;\n" \ | |||||
"99:\n" \ | |||||
".section __ftr_fixup,\"a\"\n" \ | |||||
".align 3\n" \ | |||||
"98:\n" \ | |||||
" .llong %1\n" \ | |||||
" .llong %1\n" \ | |||||
" .llong 97b-98b\n" \ | |||||
" .llong 99b-98b\n" \ | |||||
".previous" \ | |||||
: "=r" (ret) : "i" (CPU_FTR_CELL_TB_BUG)); | |||||
#else /* !ENABLE_CELLBE */ | |||||
__asm__ __volatile__ ("mftb %0" : "=r" (ret)); | |||||
#endif /* !ENABLE_CELLBE */ | |||||
#else /* !__powerpc64__ */ | |||||
__asm__ __volatile__ ( | |||||
"98: mftb %0\n" | |||||
"99:\n" | |||||
".section __ftr_fixup,\"a\"\n" | |||||
" .long %1\n" | |||||
" .long 0\n" | |||||
" .long 98b\n" | |||||
" .long 99b\n" | |||||
".previous" | |||||
: "=r" (ret) : "i" (CPU_FTR_601)); | |||||
#endif /* !__powerpc64__ */ | |||||
return ret; | |||||
} | |||||
#endif /* __jack_cycles_h__ */ |
@@ -1,3 +0,0 @@ | |||||
MAINTAINERCLEANFILES = Makefile.in | |||||
noinst_HEADERS = atomicity.h | |||||
@@ -1,60 +0,0 @@ | |||||
// Low-level functions for atomic operations: S/390 version -*- C++ -*- | |||||
// Copyright (C) 2001, 2003 Free Software Foundation, Inc. | |||||
// | |||||
// This file is part of the GNU ISO C++ Library. This library is free | |||||
// software; you can redistribute it and/or modify it under the | |||||
// terms of the GNU General Public License as published by the | |||||
// Free Software Foundation; either version 2, or (at your option) | |||||
// any later version. | |||||
// This 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 General Public License for more details. | |||||
// You should have received a copy of the GNU General Public License along | |||||
// with this library; see the file COPYING. If not, write to the Free | |||||
// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, | |||||
// USA. | |||||
// As a special exception, you may use this file as part of a free software | |||||
// library without restriction. Specifically, if other files instantiate | |||||
// templates or use macros or inline functions from this file, or you compile | |||||
// this file and link it with other files to produce an executable, this | |||||
// file does not by itself cause the resulting executable to be covered by | |||||
// the GNU General Public License. This exception does not however | |||||
// invalidate any other reasons why the executable file might be covered by | |||||
// the GNU General Public License. | |||||
#ifndef _GLIBCXX_ATOMICITY_H | |||||
#define _GLIBCXX_ATOMICITY_H 1 | |||||
typedef int _Atomic_word; | |||||
static inline _Atomic_word | |||||
__attribute__ ((__unused__)) | |||||
__exchange_and_add (volatile _Atomic_word* __mem, int __val) | |||||
{ | |||||
register _Atomic_word __old_val, __new_val; | |||||
__asm__ __volatile__ (" l %0,0(%3)\n" | |||||
"0: lr %1,%0\n" | |||||
" ar %1,%4\n" | |||||
" cs %0,%1,0(%3)\n" | |||||
" jl 0b" | |||||
: "=&d" (__old_val), "=&d" (__new_val), "=m" (*__mem) | |||||
: "a" (__mem), "d" (__val), "m" (*__mem) : "cc"); | |||||
return __old_val; | |||||
} | |||||
static inline void | |||||
__attribute__ ((__unused__)) | |||||
__atomic_add (volatile _Atomic_word* __mem, int __val) | |||||
{ | |||||
__exchange_and_add (__mem, __val); | |||||
} | |||||
#endif /* atomicity.h */ | |||||
@@ -8,7 +8,6 @@ noinst_HEADERS = \ | |||||
systemtest.c \ | systemtest.c \ | ||||
sanitycheck.c \ | sanitycheck.c \ | ||||
atomicity.h \ | atomicity.h \ | ||||
cycles.h \ | |||||
getopt.h \ | getopt.h \ | ||||
ipc.h \ | ipc.h \ | ||||
mach_port.h \ | mach_port.h \ | ||||
@@ -1,28 +0,0 @@ | |||||
#ifndef _jack_sysdep_cycles_h_ | |||||
#define _jack_sysdep_cycles_h_ | |||||
#if defined(__i386__) | |||||
/* technically, i386 doesn't have a cycle counter, but | |||||
running JACK on a real i386 seems like a ridiculuous | |||||
target and gcc defines this for the entire x86 family | |||||
including the [456]86 that do have the counter. | |||||
*/ | |||||
#include <config/cpu/i386/cycles.h> | |||||
#elif defined(__x86_64) | |||||
#include <config/cpu/i486/cycles.h> | |||||
#elif defined(__powerpc__) || defined(__ppc__) /* linux and OSX gcc use different tokens */ | |||||
#include <config/cpu/powerpc/cycles.h> | |||||
#else | |||||
#include <config/cpu/generic/cycles.h> | |||||
#endif /* processor selection */ | |||||
#endif /* _jack_sysdep_cycles_h_ */ |
@@ -965,16 +965,9 @@ AC_OUTPUT( | |||||
Makefile | Makefile | ||||
config/Makefile | config/Makefile | ||||
config/cpu/Makefile | config/cpu/Makefile | ||||
config/cpu/alpha/Makefile | |||||
config/cpu/cris/Makefile | |||||
config/cpu/generic/Makefile | config/cpu/generic/Makefile | ||||
config/cpu/i386/Makefile | config/cpu/i386/Makefile | ||||
config/cpu/i486/Makefile | |||||
config/cpu/ia64/Makefile | |||||
config/cpu/m68k/Makefile | |||||
config/cpu/mips/Makefile | |||||
config/cpu/powerpc/Makefile | config/cpu/powerpc/Makefile | ||||
config/cpu/s390/Makefile | |||||
config/os/Makefile | config/os/Makefile | ||||
config/os/generic/Makefile | config/os/generic/Makefile | ||||
config/os/gnu-linux/Makefile | config/os/gnu-linux/Makefile | ||||