From e26822463f4c36746a25b9b25552c43c350862b8 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Thu, 12 Jun 2014 14:33:59 -0700 Subject: Move SPARC code out of nptl/sysdeps/sparc/. --- sysdeps/sparc/sparc64/nptl/pthread_spin_init.c | 1 + sysdeps/sparc/sparc64/nptl/pthread_spin_lock.S | 31 +++++++++++++++++++++ sysdeps/sparc/sparc64/nptl/pthread_spin_trylock.S | 27 +++++++++++++++++++ sysdeps/sparc/sparc64/nptl/pthread_spin_unlock.S | 28 +++++++++++++++++++ sysdeps/sparc/sparc64/nptl/pthreaddef.h | 33 +++++++++++++++++++++++ 5 files changed, 120 insertions(+) create mode 100644 sysdeps/sparc/sparc64/nptl/pthread_spin_init.c create mode 100644 sysdeps/sparc/sparc64/nptl/pthread_spin_lock.S create mode 100644 sysdeps/sparc/sparc64/nptl/pthread_spin_trylock.S create mode 100644 sysdeps/sparc/sparc64/nptl/pthread_spin_unlock.S create mode 100644 sysdeps/sparc/sparc64/nptl/pthreaddef.h (limited to 'sysdeps/sparc/sparc64') diff --git a/sysdeps/sparc/sparc64/nptl/pthread_spin_init.c b/sysdeps/sparc/sparc64/nptl/pthread_spin_init.c new file mode 100644 index 0000000000..58319ab62d --- /dev/null +++ b/sysdeps/sparc/sparc64/nptl/pthread_spin_init.c @@ -0,0 +1 @@ +/* pthread_spin_init is in pthread_spin_unlock.S */ diff --git a/sysdeps/sparc/sparc64/nptl/pthread_spin_lock.S b/sysdeps/sparc/sparc64/nptl/pthread_spin_lock.S new file mode 100644 index 0000000000..aec66542de --- /dev/null +++ b/sysdeps/sparc/sparc64/nptl/pthread_spin_lock.S @@ -0,0 +1,31 @@ +/* Copyright (C) 2012-2014 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; if not, see + . */ + +#include + + .text +ENTRY(pthread_spin_lock) +1: ldstub [%o0], %g1 + brnz,pn %g1, 2f + membar #StoreLoad | #StoreStore + retl + mov 0, %o0 +2: ldub [%o0], %g1 + brnz,pt %g1, 2b + membar #LoadLoad + ba,a,pt %xcc, 1b +END(pthread_spin_lock) diff --git a/sysdeps/sparc/sparc64/nptl/pthread_spin_trylock.S b/sysdeps/sparc/sparc64/nptl/pthread_spin_trylock.S new file mode 100644 index 0000000000..d10b08b5da --- /dev/null +++ b/sysdeps/sparc/sparc64/nptl/pthread_spin_trylock.S @@ -0,0 +1,27 @@ +/* Copyright (C) 2012-2014 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; if not, see + . */ + +#include +#include + + .text +ENTRY(pthread_spin_trylock) + ldstub [%o0], %o0 + membar #StoreLoad | #StoreStore + retl + movrnz %o0, EBUSY, %o0 +END(pthread_spin_trylock) diff --git a/sysdeps/sparc/sparc64/nptl/pthread_spin_unlock.S b/sysdeps/sparc/sparc64/nptl/pthread_spin_unlock.S new file mode 100644 index 0000000000..0c18530735 --- /dev/null +++ b/sysdeps/sparc/sparc64/nptl/pthread_spin_unlock.S @@ -0,0 +1,28 @@ +/* Copyright (C) 2012-2014 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; if not, see + . */ + +#include + + .text +ENTRY(pthread_spin_unlock) + membar #StoreStore | #LoadStore + stb %g0, [%o0] + retl + clr %o0 +END(pthread_spin_unlock) + +strong_alias (pthread_spin_unlock, pthread_spin_init) diff --git a/sysdeps/sparc/sparc64/nptl/pthreaddef.h b/sysdeps/sparc/sparc64/nptl/pthreaddef.h new file mode 100644 index 0000000000..ee44bcf1af --- /dev/null +++ b/sysdeps/sparc/sparc64/nptl/pthreaddef.h @@ -0,0 +1,33 @@ +/* Copyright (C) 2003-2014 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; if not, see + . */ + +/* Default stack size. */ +#define ARCH_STACK_DEFAULT_SIZE (4 * 1024 * 1024) + +/* Required stack pointer alignment at beginning. */ +#define STACK_ALIGN 16 + +/* Minimal stack size after allocating thread descriptor and guard size. */ +#define MINIMAL_REST_STACK 4096 + +/* Alignment requirement for TCB. */ +#define TCB_ALIGNMENT 16 + + +/* Location of current stack frame. */ +#define CURRENT_STACK_FRAME (stack_pointer + (2 * 128)) +register char *stack_pointer __asm__("%sp"); -- cgit 1.4.1