Skip to content

Commit

Permalink
Merge commit 'origin/master' into fedora/master
Browse files Browse the repository at this point in the history
  • Loading branch information
Andreas Schwab committed Sep 2, 2009
2 parents b19ed4a + d840539 commit 91740ee
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 72 deletions.
21 changes: 21 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,24 @@
2009-08-31 Andreas Schwab <schwab@redhat.com>

* libio/wfileops.c (_IO_wfile_seekoff): Remove dead code and
reformulate in-buffer optimisation check to match code in
_IO_new_file_seekoff.

2009-08-31 Joshua W. Boyer <jwboyer@linux.vnet.ibm.com>

* sysdeps/powerpc/powerpc32/power6/memcpy.S: Change srdi instruction
to srwi in 32-bit memcpy for power6.

2009-09-01 Andreas Schwab <schwab@redhat.com>

* include/stdio.h: Declare hidden proto for fflush.
* libio/iofflush.c: Add hidden weak alias for fflush.

2009-09-01 Jakub Jelinek <jakub@redhat.com>

* sysdeps/x86_64/fpu/bits/mathinline.h: Include bits/wordsize.h.
(__signbitf, __signbit): Only use SSE inline asm for 64-bit.

2009-08-31 Andreas Schwab <schwab@redhat.com>

* sysdeps/x86_64/fpu/bits/mathinline.h: Use __asm instead of asm.
Expand Down
1 change: 1 addition & 0 deletions include/stdio.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ libc_hidden_proto (fileno)
libc_hidden_proto (fwrite)
libc_hidden_proto (fseek)
libc_hidden_proto (ftello)
libc_hidden_proto (fflush)
libc_hidden_proto (fflush_unlocked)
libc_hidden_proto (fread_unlocked)
libc_hidden_proto (fwrite_unlocked)
Expand Down
1 change: 1 addition & 0 deletions libio/iofflush.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ INTDEF(_IO_fflush)

#ifdef weak_alias
weak_alias (_IO_fflush, fflush)
libc_hidden_weak (fflush)

#ifndef _IO_MTSAFE_IO
weak_alias (_IO_fflush, fflush_unlocked)
Expand Down
110 changes: 39 additions & 71 deletions libio/wfileops.c
Original file line number Diff line number Diff line change
Expand Up @@ -678,88 +678,56 @@ _IO_wfile_seekoff (fp, offset, dir, mode)
if (fp->_offset != _IO_pos_BAD && fp->_IO_read_base != NULL
&& !_IO_in_backup (fp))
{
/* Offset relative to start of main get area. */
_IO_off64_t rel_offset = (offset - fp->_offset
+ (fp->_IO_read_end - fp->_IO_read_base));
if (rel_offset >= 0)
_IO_off64_t start_offset = (fp->_offset
- (fp->_IO_read_end - fp->_IO_buf_base));
if (offset >= start_offset && offset < fp->_offset)
{
#if 0
if (_IO_in_backup (fp))
_IO_switch_to_main_get_area (fp);
#endif
if (rel_offset <= fp->_IO_read_end - fp->_IO_read_base)
enum __codecvt_result status;
struct _IO_codecvt *cd = fp->_codecvt;
const char *read_ptr_copy;

_IO_setg (fp, fp->_IO_buf_base,
fp->_IO_buf_base + (offset - start_offset),
fp->_IO_read_end);
_IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);

/* Now set the pointer for the internal buffer. This
might be an iterative process. Though the read
pointer is somewhere in the current external buffer
this does not mean we can convert this whole buffer
at once fitting in the internal buffer. */
fp->_wide_data->_IO_state = fp->_wide_data->_IO_last_state;
read_ptr_copy = fp->_IO_read_base;
fp->_wide_data->_IO_read_ptr = fp->_wide_data->_IO_read_base;
do
{
enum __codecvt_result status;
struct _IO_codecvt *cd = fp->_codecvt;
const char *read_ptr_copy;

fp->_IO_read_ptr = fp->_IO_read_base + rel_offset;
_IO_setp (fp, fp->_IO_buf_base, fp->_IO_buf_base);

/* Now set the pointer for the internal buffer. This
might be an iterative process. Though the read
pointer is somewhere in the current external buffer
this does not mean we can convert this whole buffer
at once fitting in the internal buffer. */
fp->_wide_data->_IO_state = fp->_wide_data->_IO_last_state;
read_ptr_copy = fp->_IO_read_base;
fp->_wide_data->_IO_read_ptr = fp->_wide_data->_IO_read_base;
do
wchar_t buffer[1024];
wchar_t *ignore;
status = (*cd->__codecvt_do_in) (cd,
&fp->_wide_data->_IO_state,
read_ptr_copy,
fp->_IO_read_ptr,
&read_ptr_copy,
buffer,
buffer
+ (sizeof (buffer)
/ sizeof (buffer[0])),
&ignore);
if (status != __codecvt_ok && status != __codecvt_partial)
{
wchar_t buffer[1024];
wchar_t *ignore;
status = (*cd->__codecvt_do_in) (cd,
&fp->_wide_data->_IO_state,
read_ptr_copy,
fp->_IO_read_ptr,
&read_ptr_copy,
buffer,
buffer
+ (sizeof (buffer)
/ sizeof (buffer[0])),
&ignore);
if (status != __codecvt_ok && status != __codecvt_partial)
{
fp->_flags |= _IO_ERR_SEEN;
goto dumb;
}
fp->_flags |= _IO_ERR_SEEN;
goto dumb;
}
while (read_ptr_copy != fp->_IO_read_ptr);
}
while (read_ptr_copy != fp->_IO_read_ptr);

fp->_wide_data->_IO_read_ptr = fp->_wide_data->_IO_read_base;
fp->_wide_data->_IO_read_ptr = fp->_wide_data->_IO_read_base;

_IO_mask_flags (fp, 0, _IO_EOF_SEEN);
goto resync;
}
#ifdef TODO
/* If we have streammarkers, seek forward by reading ahead. */
if (_IO_have_markers (fp))
{
int to_skip = rel_offset
- (fp->_IO_read_ptr - fp->_IO_read_base);
if (ignore (to_skip) != to_skip)
goto dumb;
_IO_mask_flags (fp, 0, _IO_EOF_SEEN);
goto resync;
}
#endif
}
#ifdef TODO
if (rel_offset < 0 && rel_offset >= Bbase () - Bptr ())
{
if (!_IO_in_backup (fp))
_IO_switch_to_backup_area (fp);
gbump (fp->_IO_read_end + rel_offset - fp->_IO_read_ptr);
_IO_mask_flags (fp, 0, _IO_EOF_SEEN);
goto resync;
}
#endif
}

#ifdef TODO
INTUSE(_IO_unsave_markers) (fp);
#endif

if (fp->_flags & _IO_NO_READS)
goto dumb;

Expand Down
2 changes: 1 addition & 1 deletion sysdeps/powerpc/powerpc32/power6/memcpy.S
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ L(word_unaligned_short):
subf 10,0,5
add 12,4,0
blt cr6,5f
srdi 7,6,16
srwi 7,6,16
bgt cr6,3f
sth 6,0(3)
b 7f
Expand Down
12 changes: 12 additions & 0 deletions sysdeps/x86_64/fpu/bits/mathinline.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
# error "Never use <bits/mathinline.h> directly; include <math.h> instead."
#endif

#include <bits/wordsize.h>

#ifndef __extern_inline
# define __MATH_INLINE __inline
#else
Expand All @@ -35,16 +37,26 @@
__MATH_INLINE int
__NTH (__signbitf (float __x))
{
#if __WORDSIZE == 32
__extension__ union { float __f; int __i; } __u = { __f: __x };
return __u.__i < 0;
#else
int __m;
__asm ("pmovmskb %1, %0" : "=r" (__m) : "x" (__x));
return __m & 0x8;
#endif
}
__MATH_INLINE int
__NTH (__signbit (double __x))
{
#if __WORDSIZE == 32
__extension__ union { double __d; int __i[2]; } __u = { __d: __x };
return __u.__i[1] < 0;
#else
int __m;
__asm ("pmovmskb %1, %0" : "=r" (__m) : "x" (__x));
return __m & 0x80;
#endif
}
__MATH_INLINE int
__NTH (__signbitl (long double __x))
Expand Down

0 comments on commit 91740ee

Please sign in to comment.