about summary refs log tree commit diff
path: root/soft-fp/extended.h
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2014-10-09 15:00:37 +0000
committerJoseph Myers <joseph@codesourcery.com>2014-10-09 15:00:37 +0000
commita736ec370a05e4b37e6101eb3168bf8dc4c5af13 (patch)
tree665968c60d407cb06565ee80c8c2dcc996f42807 /soft-fp/extended.h
parentff12c11f4515a9f83467471e8d4381eb3dbc06b5 (diff)
downloadglibc-a736ec370a05e4b37e6101eb3168bf8dc4c5af13.tar.gz
glibc-a736ec370a05e4b37e6101eb3168bf8dc4c5af13.tar.xz
glibc-a736ec370a05e4b37e6101eb3168bf8dc4c5af13.zip
soft-fp: Support rsigned == 2 in _FP_TO_INT.
Continuing the addition of soft-fp features in the Linux kernel
version, this patch adds _FP_TO_INT support for rsigned == 2 (reduce
overflowing results modulo 2^rsize to fit in the destination, used for
alpha emulation).

The kernel version is buggy; it can left shift by a negative amount
when right shifting is required in an overflow case (the kernel
version also has other bugs fixed long ago in glibc; at least,
spurious exceptions converting to the most negative integer).  This
version avoids that by handling overflow (other than to 0) for rsigned
== 2 along with the normal non-overflow case, which already properly
determines the direction in which to shift.

Tested for powerpc-nofpu.  Some functions get slightly bigger and some
get slightly smaller, no doubt as a result of the change to where in
the macro "inexact" is raised, but I don't think those changes are
significant.  Also tested for powerpc-nofpu with the relevant __fix*
functions changed to use rsigned == 2 (which is after all just as
valid as rsigned == 1 in IEEE terms), including verifying the results
and exceptions for various cases of conversions.

With these seven patches, the one remaining feature to add for the
soft-fp code to have all the features of the kernel version is
_FP_TO_INT_ROUND.

	* soft-fp/op-common.h (_FP_TO_INT): Handle rsigned == 2.
Diffstat (limited to 'soft-fp/extended.h')
0 files changed, 0 insertions, 0 deletions