This is the mail archive of the
libc-alpha@sources.redhat.com
mailing list for the glibc project.
Re: linuxthreads changes for mips64-linux
- From: Alexandre Oliva <aoliva at redhat dot com>
- To: libc-alpha at sources dot redhat dot com
- Date: 14 Mar 2003 01:56:42 -0300
- Subject: Re: linuxthreads changes for mips64-linux
- Organization: GCC Team, Red Hat
- References: <orbs0eip5j.fsf@free.redhat.lsd.ic.unicamp.br>
On Mar 14, 2003, Alexandre Oliva <aoliva at redhat dot com> wrote:
> This makes the mips-specific code in linuxthreads comply with n32 and
> n64 as well.
And here are the corresponding changes for the top-level tree. Ok?
Index: ChangeLog
2003-03-14 Alexandre Oliva <aoliva at redhat dot com>
* sysdeps/mips/atomicity.h (exchange_and_add, atomic_add):
Don't .set mips2 on new abi.
(compare_and_swap): Likewise. Support 64-bit longs on n64.
Index: sysdeps/mips/atomicity.h
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/mips/atomicity.h,v
retrieving revision 1.6
diff -u -p -r1.6 atomicity.h
--- sysdeps/mips/atomicity.h 16 Jul 2002 00:58:06 -0000 1.6
+++ sysdeps/mips/atomicity.h 15 Jan 2003 15:29:58 -0000
@@ -1,5 +1,5 @@
/* Low-level functions for atomic operations. Mips version.
- Copyright (C) 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002, 2003 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
@@ -32,7 +32,9 @@ exchange_and_add (volatile uint32_t *mem
("/* Inline exchange & add */\n"
"1:\n\t"
".set push\n\t"
+#if _MIPS_SIM == _MIPS_SIM_ABI32
".set mips2\n\t"
+#endif
"ll %0,%3\n\t"
"addu %1,%4,%0\n\t"
"sc %1,%2\n\t"
@@ -56,7 +58,9 @@ atomic_add (volatile uint32_t *mem, int
("/* Inline atomic add */\n"
"1:\n\t"
".set push\n\t"
+#if _MIPS_SIM == _MIPS_SIM_ABI32
".set mips2\n\t"
+#endif
"ll %0,%2\n\t"
"addu %0,%3,%0\n\t"
"sc %0,%1\n\t"
@@ -78,12 +82,22 @@ compare_and_swap (volatile long int *p,
("/* Inline compare & swap */\n"
"1:\n\t"
".set push\n\t"
+#if _MIPS_SIM == _MIPS_SIM_ABI32
".set mips2\n\t"
+#endif
+#if defined _ABI64 && _MIPS_SIM == _ABI64
+ "lld %1,%5\n\t"
+#else
"ll %1,%5\n\t"
+#endif
"move %0,$0\n\t"
"bne %1,%3,2f\n\t"
"move %0,%4\n\t"
+#if defined _ABI64 && _MIPS_SIM == _ABI64
+ "scd %0,%2\n\t"
+#else
"sc %0,%2\n\t"
+#endif
".set pop\n\t"
"beqz %0,1b\n"
"2:\n\t"
--
Alexandre Oliva Enjoy Guarana', see http://www.ic.unicamp.br/~oliva/
Red Hat GCC Developer aoliva at {redhat dot com, gcc.gnu.org}
CS PhD student at IC-Unicamp oliva at {lsd dot ic dot unicamp dot br, gnu.org}
Free Software Evangelist Professional serial bug killer