mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-11-03 20:53:13 +03:00 
			
		
		
		
	1999-06-18 Thorsten Kukuk <kukuk@suse.de> * sysdeps/alpha/atomicity.h: Correct counting of subsections. 1999-06-17 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> * stdlib/tst-strtoll.c: Avoid warning about huge constant. 1999-06-20 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> * stdio-common/vfprintf.c (group_member): Make parameters and return types pointers to CHAR_T instead of UCHAR_T. (vfprintf): Change type of work_buffer, workend and string to CHAR_T pointer/array. (process_arg, process_string_arg): Adjust/remove casts. Add missing use of L_ macro. (printf_unknown): Add missing uses of L_ macro. 1999-06-20 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> * wcsmbs/wcschrnul.c: Explicitly cast return value to avoid warning. 1999-06-20 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> * libio/wgenops.c (__wuflow): Fix use of WEOF vs. EOF. Call _IO_switch_to_wget_mode instead of _IO_switch_to_get_mode. (__wunderflow): Likewise. (_IO_switch_to_wget_mode): Likewise. (_IO_init_wmarker): Likewise. * libio/wfileops.c (_IO_wfile_seekoff): Call _IO_switch_to_wget_mode, not _IO_switch_to_get_mode. (_IO_wfile_jumps): Fix pbackfail entry. * libio/iosetvbuf.c (_IO_setvbuf): Only call wide char setbuf function if the stream is currently unoriented. 1999-06-19 Zack Weinberg <zack@rabi.columbia.edu> * wcsmbs/wchar.h: Define __need___va_list before including stdarg.h. Wrap all wide stream functions with #ifdef __USE_ISOC9X. Use __gnuc_va_list in v*w(printf|scanf) prototypes. 1999-06-20 Andreas Jaeger <aj@arthur.rhein-neckar.de> * libio/oldiopopen.c (_IO_old_proc_open): Apply change from 1999-03-29 to iopopen also here. Reported by Richard Braakman <dark@xs4all.nl>. 1999-06-20 Andreas Jaeger <aj@arthur.rhein-neckar.de> * include/features.h: Use __GNUC_PREREQ. * sysdeps/i386/fpu/bits/mathinline.h: Likewise 1999-06-19 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> * stdio-common/vfscanf.c (ungetc, inchar) [COMPILE_WPRINTF]: Change EOF to WEOF and remove cast. (UNGETC): Remove macro. (_IO_vfwscanf): Change isspace to ISSPACE and UNGETC to ungetc. * stdio-common/printf-parse.h (find_spec) [!COMPILE_WPRINTF]: Change ISASCII to isascii and MBRLEN to mbrlen. (parse_one_spec): Compare info.spec always against wchar_t values. * stdio-common/vfprintf.c: Remove unused ISASCII and MBRLEN. (_itoa, _itoa_word) [COMPILE_WRPINTF]: Don't cast second argument. (NOT_IN_JUMP_RANGE, CHAR_CLASS): Change (int) to (INT_T), use L_. 1999-06-19 Andreas Schwab <schwab@issan.cs.uni-dortmund.de> * libio/Makefile (shared-only-routines): Add oldiofgetpos, oldiofgetpos64, oldiofsetpos and oldiofsetpos64. (routines): Include oldiofgetpos, oldiofgetpos64, oldiofsetpos and oldiofsetpos64 only if doing versioning.
		
			
				
	
	
		
			103 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* Low-level functions for atomic operations.  Alpha version.
 | 
						|
   Copyright (C) 1999 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 Library General Public License as
 | 
						|
   published by the Free Software Foundation; either version 2 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
 | 
						|
   Library General Public License for more details.
 | 
						|
 | 
						|
   You should have received a copy of the GNU Library General Public
 | 
						|
   License along with the GNU C Library; see the file COPYING.LIB.  If not,
 | 
						|
   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 | 
						|
   Boston, MA 02111-1307, USA.  */
 | 
						|
 | 
						|
#ifndef _ATOMICITY_H
 | 
						|
#define _ATOMICITY_H	1
 | 
						|
 | 
						|
#include <inttypes.h>
 | 
						|
 | 
						|
 | 
						|
static inline int
 | 
						|
__attribute__ ((unused))
 | 
						|
exchange_and_add (volatile uint32_t *mem, int val)
 | 
						|
{
 | 
						|
  register int result, tmp;
 | 
						|
 | 
						|
  __asm__ __volatile__ (
 | 
						|
	"/* Inline exchange & add */\n"
 | 
						|
	"1:\t"
 | 
						|
	"ldl_l	%0,%3\n\t"
 | 
						|
	"addl	%0,%4,%1\n\t"
 | 
						|
	"stl_c	%1,%2\n\t"
 | 
						|
	"beq	%1,2f\n"
 | 
						|
	".subsection 1\n"
 | 
						|
	"2:\t"
 | 
						|
	"br	1b\n"
 | 
						|
	".previous\n\t"
 | 
						|
	"mb\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 uint32_t *mem, int val)
 | 
						|
{
 | 
						|
  register int result;
 | 
						|
 | 
						|
  __asm__ __volatile__ (
 | 
						|
	"/* Inline exchange & add */\n"
 | 
						|
	"1:\t"
 | 
						|
	"ldl_l	%0,%2\n\t"
 | 
						|
	"addl	%0,%3,%0\n\t"
 | 
						|
	"stl_c	%0,%1\n\t"
 | 
						|
	"beq	%0,2f\n\t"
 | 
						|
	".subsection 1\n"
 | 
						|
	"2:\t"
 | 
						|
	"br	1b\n"
 | 
						|
	".previous\n\t"
 | 
						|
	"mb\n\t"
 | 
						|
	"/* End exchange & add */"
 | 
						|
	: "=&r"(result), "=m"(*mem)
 | 
						|
	: "m" (*mem), "r"(val));
 | 
						|
}
 | 
						|
 | 
						|
static inline long
 | 
						|
__attribute__ ((unused))
 | 
						|
compare_and_swap (volatile long int *p, long int oldval, long int newval)
 | 
						|
{
 | 
						|
  long int ret;
 | 
						|
 | 
						|
  __asm__ __volatile__ (
 | 
						|
	"/* Inline compare & swap */\n"
 | 
						|
	"1:\t"
 | 
						|
	"ldq_l	%0,%4\n\t"
 | 
						|
	"cmpeq	%0,%2,%0\n\t"
 | 
						|
	"beq	%0,3f\n\t"
 | 
						|
	"mov	%3,%0\n\t"
 | 
						|
	"stq_c	%0,%1\n\t"
 | 
						|
	"beq	%0,2f\n\t"
 | 
						|
	".subsection 1\n"
 | 
						|
	"2:\t"
 | 
						|
	"br	1b\n"
 | 
						|
	".previous\n\t"
 | 
						|
	"3:\t"
 | 
						|
	"mb\n\t"
 | 
						|
	"/* End compare & swap */"
 | 
						|
	: "=&r"(ret), "=m"(*p)
 | 
						|
	: "r"(oldval), "r"(newval), "m"(*p));
 | 
						|
 | 
						|
  return ret;
 | 
						|
}
 | 
						|
 | 
						|
#endif /* atomicity.h */
 |