This is the mail archive of the gcc-prs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

c/2419: GCC 2.96 FP bit manipulation snafu



>Number:         2419
>Category:       c
>Synopsis:       GCC 2.96 FP bit manipulation snafu
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Wed Mar 28 12:46:01 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     me
>Release:        gcc version 2.96 20000731 (Red Hat Linux 7.0)
>Organization:
>Environment:
Linux ronaldo 2.2.16-22 #1 Tue Aug 22 16:49:06 EDT 2000 i686 unknown
>Description:
I have enclosed a very simple program which contains two
versions (buena() and _mala()) of a procedure to convert an
array of random 64-bit patterns to valid double-precision
floating-point values in range (-1, 1).  From statistics,
we know that the resulting array should have a mean of 0
and a variance of 1/3.

Essentially, the computation involves passing bit patterns
back and forth between integer and floating-point registers
without conversion of format.  However, in optimizing mode
with GCC 2.96, the _mala() procedure produces incorrect
result.

The program produces expected results under GCC 2.95.3.
>How-To-Repeat:
To generate bad code:
gcc -Wall -O2 -fomit-frame-pointer test.c

To generate good code:
gcc -Wall -g test.c

To run the program:
./a.out [put_any_integer_seed_here]
>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="test.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="test.c"

I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCi8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KCi8qIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyICovCnR5cGVkZWYgdW5zaWduZWQgbG9u
ZyBsb25nIHVpbnQ2NDsKCi8qIDY0LWJpdCBJRUVFIGZsb2F0aW5nIHBvaW50ICovCnR5cGVkZWYg
ZG91YmxlIHJlYWw2NDsKCi8qIGJpdCBtYXNrcyB0byB0dXJuIGEgNjQtYml0IHBhdHRlcm4gaW50
byBhbgogKiBJRUVFIGRvdWJsZS1wcmVjaXNpb24gZmxvYXRpbmctcG9pbnQgdmFsdWUgKi8KI2Rl
ZmluZSBJRUVFX0RFWFAgKCh1aW50NjQpIDB4M2ZmMDAwMDAwMDAwMDAwMFVMTCkgIC8qIE1ha2Ug
ZXhwb25lbnQgMTAyMy4gKi8KI2RlZmluZSBJRUVFX0RNQU4gKCh1aW50NjQpIDB4MDAwZmZmZmZm
ZmZmZmZmZlVMTCkgIC8qIEV4dHJhY3QgbWFudGlzc2EuICovCiNkZWZpbmUgSUVFRV9EU0dOICgo
dWludDY0KSAweDgwMDAwMDAwMDAwMDAwMDBVTEwpICAvKiBFeHRyYWN0IHNpZ24gYml0LiAqLwoK
LyogU2hpZnQgYW4gdW51c2VkIGJpdCB0byBMU0IgcG9zaXRpb24uICovCiNkZWZpbmUgSUVFRV9E
TFNCKHcpICgoKHcpID4+IDYyKSAmICh1aW50NjQpIDB4MDAwMDAwMDAwMDAwMDAwMVVMTCkKCi8q
IENob29zZSB3aGV0aGVyIHRvIHJhbmRvbWl6ZSB0aGUgTFNCIG9mIGdlbmVyYXRlZAogKiBmbG9h
dGluZy1wb2ludCB2YWx1ZXMgYXMgd2VsbC4gKi8KI2RlZmluZSBMU0JfQURPIDEKCi8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gKi8KCi8qIENvbnZlcnQgZ2l2ZW4gYXJyYXkgb2YgNjQtYml0IHBhdHRlcm5z
IGludG8gYW4gYXJyYXkgb2YgNjQtYml0CiAqIGZsb2F0aW5nLXBvaW50IHZhbHVlcyBpbiB0aGUg
cmFuZ2Ugb2YgKC0xLCAxKS4gKi8Kdm9pZCBfbWFsYShjb25zdCBzaXplX3QgbiwgcmVhbDY0IGFh
W10pCnsKICBzaXplX3QgaTsKICBmb3IgKGk9MDsgaTxuOyArK2kpIHsKICAgIC8qIEdyYWIgdGhl
IG5leHQgNjQtYml0IHBhdHRlcm4uICovCiAgICBjb25zdCB1aW50NjQgdyA9ICoodWludDY0Kikg
KGFhICsgaSk7CiAgICAvKiBHZW5lcmF0ZSBhIGJpdCBwYXR0ZXJuIHdoaWNoIGNvcnJlc3BvbmRz
IHRvIGFuIElFRUUgZG91YmxlLXByZWNpc2lvbgogICAgICogZmxvYXRpbmctcG9pbnQgdmFsdWUg
d2l0aGluIFsxLCAyKS4gKi8KICAgIHVpbnQ2NCB4ID0gKElFRUVfREVYUCB8IChJRUVFX0RNQU4g
JiB3KSk7CiAgICAvKiBTdWJ0cmFjdCBvbmUgdG8gZ2V0IGRlc2lyZWQgdGFyZ2V0IHJhbmdlIFsw
LCAxKS4KICAgICAqIEJlY2F1c2Ugb2YgcmUtbm9ybWFsaXphdGlvbiwgdGhlIExTQiB3aWxsIGJl
IHplcm8uICovCiAgICAqKHJlYWw2NCopICZ4IC09IDEuMDsKI2lmIChMU0JfQURPKQogICAgLyog
UHV0IGluIHRoZSBzaWduIGJpdCBhbmQgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdC4gKi8KICAg
IHggfD0gKChJRUVFX0RTR04gJiB3KSB8IElFRUVfRExTQih3KSk7CiNlbHNlCiAgICAvKiBQdXQg
aW4gdGhlIHNpZ24gYml0LiAqLwogICAgeCB8PSAoSUVFRV9EU0dOICYgdyk7CiNlbmRpZgogICAg
LyogUmV0dXJuIHRoZSBiaXQgcGF0dGVybiB3aGljaCBjb3JyZXNwb25kcyB0byBhIGRvdWJsZS1w
cmVjaXNpb24KICAgICAqIGZsb2F0aW5nLXBvaW50IHZhbHVlIHdpdGhpbiAoLTEsIDEpLiAqLwog
ICAgYWFbaV0gPSAqKHJlYWw2NCopICZ4OwogIH0KfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoK
Lyogc3RydWN0dXJlIGZvciBtYW5pcHVsYXRpbmcgNjQtYml0IHBhdHRlcm5zIGFzCiAqIGVpdGhl
ciBpbnRlZ2VycyBvciBmbG9hdGluZy1wb2ludCB2YWx1ZXMgKi8KdHlwZWRlZiB1bmlvbiB7CiAg
dWludDY0IHU7ICAvKiA2NC1iaXQgaW50ZWdlciAqLwogIHJlYWw2NCByOyAgLyogNjQtYml0IGZs
b2F0aW5nLXBvaW50IHZhbHVlICovCn0gd29yZDY0OwoKLyogQ29udmVydCBnaXZlbiBhcnJheSBv
ZiA2NC1iaXQgcGF0dGVybnMgaW50byBhbiBhcnJheSBvZiA2NC1iaXQKICogZmxvYXRpbmctcG9p
bnQgdmFsdWVzIGluIHRoZSByYW5nZSBvZiAoLTEsIDEpLiAqLwp2b2lkIGJ1ZW5hKGNvbnN0IHNp
emVfdCBuLCByZWFsNjQgYWFbXSkKewogIHNpemVfdCBpOwogIGZvciAoaT0wOyBpPG47ICsraSkg
ewogICAgLyogR3JhYiB0aGUgbmV4dCA2NC1iaXQgcGF0dGVybi4gKi8KICAgIGNvbnN0IHVpbnQ2
NCB3ID0gKih1aW50NjQqKSAoYWEgKyBpKTsKICAgIHdvcmQ2NCB1cjsKICAgIC8qIEdlbmVyYXRl
IGEgYml0IHBhdHRlcm4gd2hpY2ggY29ycmVzcG9uZHMgdG8gYW4gSUVFRSBkb3VibGUtcHJlY2lz
aW9uCiAgICAgKiBmbG9hdGluZy1wb2ludCB2YWx1ZSB3aXRoaW4gWzEsIDIpLiAqLwogICAgdXIu
dSA9IChJRUVFX0RFWFAgfCAoSUVFRV9ETUFOICYgdykpOwogICAgLyogU3VidHJhY3Qgb25lIHRv
IGdldCBkZXNpcmVkIHRhcmdldCByYW5nZSBbMCwgMSkuCiAgICAgKiBCZWNhdXNlIG9mIHJlLW5v
cm1hbGl6YXRpb24sIHRoZSBMU0Igd2lsbCBiZSB6ZXJvLiAqLwogICAgdXIuciAtPSAxLjA7CiNp
ZiAoTFNCX0FETykKICAgIC8qIFB1dCBpbiB0aGUgc2lnbiBiaXQgYW5kIHRoZSBsZWFzdCBzaWdu
aWZpY2FudCBiaXQuICovCiAgICB1ci51IHw9ICgoSUVFRV9EU0dOICYgdykgfCBJRUVFX0RMU0Io
dykpOwojZWxzZQogICAgLyogUHV0IGluIHRoZSBzaWduIGJpdC4gKi8KICAgIHVyLnUgfD0gKElF
RUVfRFNHTiAmIHcpOwojZW5kaWYKICAgIC8qIFJldHVybiB0aGUgYml0IHBhdHRlcm4gd2hpY2gg
Y29ycmVzcG9uZHMgdG8gYSBkb3VibGUtcHJlY2lzaW9uCiAgICAgKiBmbG9hdGluZy1wb2ludCB2
YWx1ZSB3aXRoaW4gKC0xLCAxKS4gKi8KICAgIGFhW2ldID0gdXIucjsKICB9Cn0KCi8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gKi8KCi8qIEZpZ3VyZSBvdXQgdGhlIG1lYW4gYW5kIHRoZSB2YXJpYW5jZSBv
ZiBnaXZlbiBhcnJheSBvZiBudW1iZXJzLiAqLwp2b2lkIHRlbGxtdihjb25zdCBzaXplX3Qgbiwg
Y29uc3QgcmVhbDY0IGFhW10pCnsKICBzaXplX3QgaTsKICByZWdpc3RlciByZWFsNjQgbSwgdjsK
CiAgLyogQ29tcHV0ZSBtZWFuIG9mIGFycmF5LiAqLwogIG0gPSAwLjA7CiAgZm9yIChpPTA7IGk8
bjsgKytpKSB7IG0gKz0gYWFbaV07IH0KICBtIC89IChyZWFsNjQpIG47CgogIC8qIENvbXB1dGUg
dmFyaWFuY2UuICovCiAgdiA9IDAuMDsKICBpZiAobiA+IDEpIHsKICAgIGZvciAoaT0wOyBpPG47
ICsraSkgewogICAgICByZWdpc3RlciBjb25zdCByZWFsNjQgZCA9IGFhW2ldIC0gbTsKICAgICAg
diArPSBkICogZDsKICAgIH0KICAgIHYgLz0gKChyZWFsNjQpIChuLTEpKTsKICB9CgogIC8qIFBy
aW50IG91dCB0aGUgcmVzdWx0cy4gKi8KICBwcmludGYoIihtLCB2KSA9ICglMTkuMTdmLCAlMTku
MTdmKVxuIiwgKGRvdWJsZSkgbSwgKGRvdWJsZSkgdik7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KCi8qIEdlbmVyYXRlIHJhbmRvbSBiaXQgcGF0dGVybiBvdmVyIGdpdmVuIGFycmF5LiAqLwp2
b2lkIGJpdHBhdChjb25zdCBzaXplX3QgbiwgcmVhbDY0IGFhW10pCnsKICAvKiBSZS1kaW1lbnNp
b24gdGhlIGFycmF5IGZvciBSTkcuICovCiAgY29uc3Qgc2l6ZV90IG0gPSBuICogc2l6ZW9mKHJl
YWw2NCkgLyBzaXplb2YobG9uZyk7CiAgbG9uZyAqYmIgPSAobG9uZyopIGFhOwogIC8qIFVzZSBS
TkcgdG8gZmlsbCB0aGUgYXJyYXkuICovCiAgc2l6ZV90IGk7CiAgZm9yIChpPTA7IGk8bTsgKytp
KSB7IGJiW2ldID0gbXJhbmQ0OCgpOyB9Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCnZvaWQg
d29yayhjb25zdCBsb25nIHN2LCBjb25zdCBzaXplX3QgbiwgcmVhbDY0IGFhW10sCgkgIHZvaWQg
KCpmY24pKGNvbnN0IHNpemVfdCwgcmVhbDY0KiksIGNvbnN0IGNoYXIgKmZuYW0pCnsKICAvKiBJ
bml0aWFsaXplIFJORy4gKi8KICBzcmFuZDQ4KHN2KTsKICAvKiBHZW5lcmF0ZSByYW5kb20gYml0
IHBhdHRlcm5zIG92ZXIgYXJyYXkuICovCiAgYml0cGF0KG4sIGFhKTsKICAvKiBDYWxsIGdpdmVu
IGZ1bmN0aW9uIHRvIGNvbnZlcnQgYml0IHBhdHRlcm5zIHRvCiAgICogdmFsaWQgZmxvYXRpbmct
cG9pbnQgdmFsdWVzLiAqLwogICgqZmNuKShuLCBhYSk7CiAgLyogQ29tcHV0ZSBzaW1wbGUgc3Rh
dGlzdGljcy4gKi8KICBwcmludGYoIiVzIHNheXMgIiwgZm5hbSk7CiAgdGVsbG12KG4sIGFhKTsK
fQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb
XSkKewogIC8qIFJORyBzZWVkICovCiAgY29uc3QgbG9uZyBzdiA9ICgoYXJnYyA+IDEpID8gYXRv
bChhcmd2WzFdKSA6IDBMKTsKCiAgLyogd29yayBhcnJheSAqLwogIGNvbnN0IHNpemVfdCBuID0g
MTAwMDAwOwogIHJlYWw2NCAqYWEgPSAocmVhbDY0KikgbWFsbG9jKG4gKiBzaXplb2YocmVhbDY0
KSk7CgogIC8qIFJ1biBleHBlcmltZW50cy4gKi8KICB3b3JrKHN2LCBuLCBhYSwgYnVlbmEsICJi
dWVuYSgpIik7CiAgd29yayhzdiwgbiwgYWEsIF9tYWxhLCAiX21hbGEoKSIpOwoKICBmcmVlKGFh
KTsKICByZXR1cm4gKDApOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCg==


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]