* sysdeps/powerpc/powerpc32/fpu/s_ceilf.S (TWO23.0): Delete.
* sysdeps/powerpc/powerpc32/fpu/s_floor.S (TWO52.0): Delete.
* sysdeps/powerpc/powerpc32/fpu/s_floorf.S (TWO23.0): Delete.
* sysdeps/powerpc/powerpc32/fpu/s_lround.S: Comment typo.
(NEGZERO.0, POINTFIVE.0): Delete.
* sysdeps/powerpc/powerpc32/fpu/s_rint.S (TWO52.0): Delete.
* sysdeps/powerpc/powerpc32/fpu/s_rintf.S (TWO23.0): Delete.
* sysdeps/powerpc/powerpc32/fpu/s_round.S (__round): Code in .text.
(TWO52.0, POINTFIVE.0): Delete.
* sysdeps/powerpc/powerpc32/fpu/s_roundf.S (__roundf): Code in .text.
(TWO23.0, POINTFIVE.0): Delete.
* sysdeps/powerpc/powerpc32/fpu/s_trunc.S (__trunc): Code in .text.
(TWO52.0): Delete.
* sysdeps/powerpc/powerpc32/fpu/s_truncf.S (__truncf): Code in .text.
(TWO23.0): Delete.
* sysdeps/powerpc/powerpc32/memset.S (memset): Formatting.
+2005-05-17 Alan Modra <amodra@bigpond.net.au>
+
+ * sysdeps/powerpc/powerpc32/fpu/s_ceil.S (TWO52.0): Delete.
+ * sysdeps/powerpc/powerpc32/fpu/s_ceilf.S (TWO23.0): Delete.
+ * sysdeps/powerpc/powerpc32/fpu/s_floor.S (TWO52.0): Delete.
+ * sysdeps/powerpc/powerpc32/fpu/s_floorf.S (TWO23.0): Delete.
+ * sysdeps/powerpc/powerpc32/fpu/s_lround.S: Comment typo.
+ (NEGZERO.0, POINTFIVE.0): Delete.
+ * sysdeps/powerpc/powerpc32/fpu/s_rint.S (TWO52.0): Delete.
+ * sysdeps/powerpc/powerpc32/fpu/s_rintf.S (TWO23.0): Delete.
+ * sysdeps/powerpc/powerpc32/fpu/s_round.S (__round): Code in .text.
+ (TWO52.0, POINTFIVE.0): Delete.
+ * sysdeps/powerpc/powerpc32/fpu/s_roundf.S (__roundf): Code in .text.
+ (TWO23.0, POINTFIVE.0): Delete.
+ * sysdeps/powerpc/powerpc32/fpu/s_trunc.S (__trunc): Code in .text.
+ (TWO52.0): Delete.
+ * sysdeps/powerpc/powerpc32/fpu/s_truncf.S (__truncf): Code in .text.
+ (TWO23.0): Delete.
+ * sysdeps/powerpc/powerpc32/memset.S (memset): Formatting.
+
2005-05-19 Richard Henderson <rth@redhat.com>
* sysdeps/unix/clock_gettime.c (clock_gettime): Fix typo around
+2005-05-19 Richard Henderson <rth@redhat.com>
+
+ * sysdeps/ia64/pspinlock.c (__pthread_spin_lock): Use
+ __sync_val_compare_and_swap, not explicit _si variant.
+ (__pthread_spin_trylock): Likewise.
+
2005-05-05 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/unix/sysv/linux/i386/sysdep-cancel.h: Remove explicit
+2005-05-20 Jakub Jelinek <jakub@redhat.com>
+
+ * sysdeps/i386/tls.h (TLS_INIT_TCB_SIZE, TLS_INIT_TCB_ALIGN): Define to
+ size/alignment of struct pthread rather than tcbhead_t.
+ * sysdeps/x86_64/tls.h (TLS_INIT_TCB_SIZE, TLS_INIT_TCB_ALIGN):
+ Likewise.
+ * sysdeps/s390/tls.h (TLS_INIT_TCB_SIZE, TLS_INIT_TCB_ALIGN):
+ Likewise.
+ * sysdeps/sparc/tls.h (TLS_INIT_TCB_SIZE, TLS_INIT_TCB_ALIGN):
+ Likewise.
+
2005-05-19 Richard Henderson <rth@redhat.com>
* sysdeps/ia64/pthread_spin_lock.c (pthread_spin_lock): Use
/* Definition for thread-local data handling. nptl/i386 version.
- Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005 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
/* Get the thread descriptor definition. */
# include <nptl/descr.h>
-/* This is the size of the initial TCB. */
-# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t)
+/* This is the size of the initial TCB. Can't be just sizeof (tcbhead_t),
+ because NPTL getpid, __libc_alloca_cutoff etc. need (almost) the whole
+ struct pthread even when not linked with -lpthread. */
+# define TLS_INIT_TCB_SIZE sizeof (struct pthread)
/* Alignment requirements for the initial TCB. */
-# define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t)
+# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread)
/* This is the size of the TCB. */
# define TLS_TCB_SIZE sizeof (struct pthread)
/* Get the thread descriptor definition. */
# include <nptl/descr.h>
-/* This is the size of the initial TCB. */
-# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t)
+/* This is the size of the initial TCB. Can't be just sizeof (tcbhead_t),
+ because NPTL getpid, __libc_alloca_cutoff etc. need (almost) the whole
+ struct pthread even when not linked with -lpthread. */
+# define TLS_INIT_TCB_SIZE sizeof (struct pthread)
/* Alignment requirements for the initial TCB. */
-# define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t)
+# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread)
/* This is the size of the TCB. */
# define TLS_TCB_SIZE sizeof (struct pthread)
register struct pthread *__thread_self __asm__("%g7");
-/* This is the size of the initial TCB. */
-# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t)
+/* This is the size of the initial TCB. Can't be just sizeof (tcbhead_t),
+ because NPTL getpid, __libc_alloca_cutoff etc. need (almost) the whole
+ struct pthread even when not linked with -lpthread. */
+# define TLS_INIT_TCB_SIZE sizeof (struct pthread)
/* Alignment requirements for the initial TCB. */
-# define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t)
+# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread)
/* This is the size of the TCB. */
# define TLS_TCB_SIZE sizeof (struct pthread)
/* Definition for thread-local data handling. nptl/x86_64 version.
- Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005 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
# endif
#endif
-/* This is the size of the initial TCB. */
-# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t)
+/* This is the size of the initial TCB. Can't be just sizeof (tcbhead_t),
+ because NPTL getpid, __libc_alloca_cutoff etc. need (almost) the whole
+ struct pthread even when not linked with -lpthread. */
+# define TLS_INIT_TCB_SIZE sizeof (struct pthread)
/* Alignment requirements for the initial TCB. */
-# define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t)
+# define TLS_INIT_TCB_ALIGN __alignof__ (struct pthread)
/* This is the size of the TCB. */
# define TLS_TCB_SIZE sizeof (struct pthread)
#include <sysdep.h>
- .section .rodata
- .align 3
- .type TWO52.0,@object
- .size TWO52.0,8
-TWO52.0:
- .long 0x43300000
- .long 0
-
.section .rodata.cst8,"aM",@progbits,8
.align 3
.LC0: /* 2**52 */
#include <sysdep.h>
- .section .rodata
- .align 2
- .type TWO23.0,@object
- .size TWO23.0,4
-TWO23.0:
- .long 0x4b000000
-
.section .rodata.cst4,"aM",@progbits,4
.align 2
.LC0: /* 2**23 */
#include <sysdep.h>
- .section .rodata
- .align 3
- .type TWO52.0,@object
- .size TWO52.0,8
-TWO52.0:
- .long 0x43300000
- .long 0
-
.section .rodata.cst8,"aM",@progbits,8
.align 3
.LC0: /* 2**52 */
#include <sysdep.h>
- .section .rodata
- .align 2
- .type TWO23.0,@object
- .size TWO23.0,4
-TWO23.0:
- .long 0x4b000000
-
.section .rodata.cst4,"aM",@progbits,4
.align 2
.LC0: /* 2**23 */
#include <sysdep.h>
- .section .rodata
- .align 3
- .type NEGZERO.0,@object
- .size NEGZERO.0,8
-NEGZERO.0:
- .long 0x00000000
- .long 0
- .type POINTFIVE.0,@object
- .size POINTFIVE.0,8
-POINTFIVE.0:
- .long 0x3fe00000
- .long 0
-
.section .rodata.cst8,"aM",@progbits,8
.align 3
.LC0: /* 0.0 */
.L9:
fctiwz fp2,fp1 /* Convert To Integer DW lround toward 0. */
stfd fp2,-8(r1)
- nop /* Insure the following load is in a different dispatch group */
- nop /* to avoid pipe stall on POWER4&5. */
+ nop /* Ensure the following load is in a different dispatch */
+ nop /* group to avoid pipe stall on POWER4&5. */
nop
lwz r3,-4(r1)
blr
#include <sysdep.h>
- .section .rodata
- .align 3
- .type TWO52.0,@object
- .size TWO52.0,8
-TWO52.0:
- .long 0x43300000
- .long 0
-
.section .rodata.cst8,"aM",@progbits,8
.align 3
.LC0: /* 2**52 */
#include <sysdep.h>
-
- .section .rodata
- .align 2
- .type TWO23.0,@object
- .size TWO23.0,4
-TWO23.0:
- .long 0x4b000000
-
.section .rodata.cst4,"aM",@progbits,4
.align 2
.LC0: /* 2**23 */
#include <sysdep.h>
- .section .rodata
- .align 3
- .type TWO52.0,@object
- .size TWO52.0,8
-TWO52.0:
- .long 0x43300000
- .long 0
- .type POINTFIVE.0,@object
- .size POINTFIVE.0,8
-POINTFIVE.0:
- .long 0x3fe00000
- .long 0
-
.section .rodata.cst8,"aM",@progbits,8
.align 3
.LC0: /* 2**52 */
"Round toward Zero" mode and round by adding +-0.5 before rounding
to the integer value. */
+ .section ".text"
ENTRY (__round)
mffs fp11 /* Save current FPU rounding mode. */
#ifdef SHARED
#include <sysdep.h>
- .section .rodata
- .align 2
- .type TWO23.0,@object
- .size TWO23.0,4
-TWO23.0:
- .long 0x4b000000
- .type POINTFIVE.0,@object
- .size POINTFIVE.0,4
-POINTFIVE.0:
- .long 0x3f000000
-
.section .rodata.cst4,"aM",@progbits,4
.align 2
.LC0: /* 2**23 */
"Round toward Zero" mode and round by adding +-0.5 before rounding
to the integer value. */
+ .section ".text"
ENTRY (__roundf )
mffs fp11 /* Save current FPU rounding mode. */
#ifdef SHARED
#include <sysdep.h>
- .section .rodata
- .align 3
- .type TWO52.0,@object
- .size TWO52.0,8
-TWO52.0:
- .long 0x43300000
- .long 0
-
.section .rodata.cst8,"aM",@progbits,8
.align 3
.LC0: /* 2**52 */
We set "round toward Zero" mode and trunc by adding +-2**52 then
subtracting +-2**52. */
+ .section ".text"
ENTRY (__trunc)
mffs fp11 /* Save current FPU rounding mode. */
#ifdef SHARED
#include <sysdep.h>
- .section .rodata
- .align 2
- .type TWO23.0,@object
- .size TWO23.0,2
-TWO23.0:
- .long 0x4b000000
-
.section .rodata.cst4,"aM",@progbits,4
.align 2
.LC0: /* 2**23 */
We set "round toward Zero" mode and trunc by adding +-2**23 then
subtracting +-2**23. */
+ .section ".text"
ENTRY (__truncf)
mffs fp11 /* Save current FPU rounding mode. */
#ifdef SHARED
/* We can't use dcbz here as we don't know the cache line size. We can
use "data cache block touch for store", which is safe. */
-L(c3): dcbtst rNEG64, rMEMP
+L(c3): dcbtst rNEG64, rMEMP
stw rCHR, -4(rMEMP)
stw rCHR, -8(rMEMP)
stw rCHR, -12(rMEMP)
add rMEMP, rMEMP, rALIGN
b L(medium_tail2) /* 72nd instruction from .align */
- .align 5
+ .align 5
nop
/* Clear cache lines of memory in 128-byte chunks.
This code is optimized for processors with 32-byte cache lines.
beqlr cr5
b L(medium_tail2)
- .align 5
+ .align 5
L(small):
/* Memset of 4 bytes or less. */
cmplwi cr5, rLEN, 1
blr
/* Memset of 0-31 bytes. */
- .align 5
+ .align 5
L(medium):
cmplwi cr1, rLEN, 16
L(medium_tail2):
L(checklinesize):
#ifdef SHARED
- mflr rTMP
+ mflr rTMP
/* If the remaining length is less the 32 bytes then don't bother getting
- the cache line size. */
+ the cache line size. */
beq L(medium)
/* Establishes GOT addressability so we can load __cache_line_size
from static. This value was set from the aux vector during startup. */
- bl _GLOBAL_OFFSET_TABLE_@local-4
- mflr rGOT
- lwz rGOT,__cache_line_size@got(rGOT)
- lwz rCLS,0(rGOT)
- mtlr rTMP
+ bl _GLOBAL_OFFSET_TABLE_@local-4
+ mflr rGOT
+ lwz rGOT,__cache_line_size@got(rGOT)
+ lwz rCLS,0(rGOT)
+ mtlr rTMP
#else
/* Load __cache_line_size from static. This value was set from the
aux vector during startup. */
- lis rCLS,__cache_line_size@ha
+ lis rCLS,__cache_line_size@ha
/* If the remaining length is less the 32 bytes then don't bother getting
- the cache line size. */
+ the cache line size. */
beq L(medium)
- lwz rCLS,__cache_line_size@l(rCLS)
+ lwz rCLS,__cache_line_size@l(rCLS)
#endif
-/*If the cache line size was not set then goto to L(nondcbz), which is
- safe for any cache line size. */
- cmplwi cr1,rCLS,0
+/* If the cache line size was not set then goto to L(nondcbz), which is
+ safe for any cache line size. */
+ cmplwi cr1,rCLS,0
beq cr1,L(nondcbz)
/* If the cache line size is 32 bytes then goto to L(zloopstart),
- which is coded specificly for 32-byte lines (and 601). */
- cmplwi cr1,rCLS,32
+ which is coded specificly for 32-byte lines (and 601). */
+ cmplwi cr1,rCLS,32
beq cr1,L(zloopstart)
/* Now we know the cache line size and it is not 32-bytes. However
- we may not yet be aligned to the cache line and may have a partial
- line to fill. Touch it 1st to fetch the cache line. */
- dcbtst 0,rMEMP
+ we may not yet be aligned to the cache line and may have a partial
+ line to fill. Touch it 1st to fetch the cache line. */
+ dcbtst 0,rMEMP
- addi rCLM,rCLS,-1
+ addi rCLM,rCLS,-1
L(getCacheAligned):
- cmplwi cr1,rLEN,32
- and. rTMP,rCLM,rMEMP
- blt cr1,L(handletail32)
- beq L(cacheAligned)
+ cmplwi cr1,rLEN,32
+ and. rTMP,rCLM,rMEMP
+ blt cr1,L(handletail32)
+ beq L(cacheAligned)
/* We are not aligned to start of a cache line yet. Store 32-byte
of data and test again. */
- addi rMEMP,rMEMP,32
- addi rLEN,rLEN,-32
- stw rCHR,-32(rMEMP)
- stw rCHR,-28(rMEMP)
- stw rCHR,-24(rMEMP)
- stw rCHR,-20(rMEMP)
- stw rCHR,-16(rMEMP)
- stw rCHR,-12(rMEMP)
- stw rCHR,-8(rMEMP)
- stw rCHR,-4(rMEMP)
- b L(getCacheAligned)
+ addi rMEMP,rMEMP,32
+ addi rLEN,rLEN,-32
+ stw rCHR,-32(rMEMP)
+ stw rCHR,-28(rMEMP)
+ stw rCHR,-24(rMEMP)
+ stw rCHR,-20(rMEMP)
+ stw rCHR,-16(rMEMP)
+ stw rCHR,-12(rMEMP)
+ stw rCHR,-8(rMEMP)
+ stw rCHR,-4(rMEMP)
+ b L(getCacheAligned)
/* Now we are aligned to the cache line and can use dcbz. */
L(cacheAligned):
- cmplw cr1,rLEN,rCLS
- blt cr1,L(handletail32)
- dcbz 0,rMEMP
- subf rLEN,rCLS,rLEN
- add rMEMP,rMEMP,rCLS
- b L(cacheAligned)
+ cmplw cr1,rLEN,rCLS
+ blt cr1,L(handletail32)
+ dcbz 0,rMEMP
+ subf rLEN,rCLS,rLEN
+ add rMEMP,rMEMP,rCLS
+ b L(cacheAligned)
/* We are here because; the cache line size was set, it was not
32-bytes, and the remainder (rLEN) is now less than the actual cache
store the remaining bytes. */
L(handletail32):
clrrwi. rALIGN, rLEN, 5
- b L(nondcbz)
+ b L(nondcbz)
END (BP_SYM (memset))
libc_hidden_builtin_def (memset)