From mboxrd@z Thu Jan 1 00:00:00 1970 From: cchen@corelation.com To: gcc-gnats@gcc.gnu.org Subject: c/2419: GCC 2.96 FP bit manipulation snafu Date: Wed, 28 Mar 2001 12:46:00 -0000 Message-id: <20010328204054.23488.qmail@sourceware.cygnus.com> X-SW-Source: 2001-03/msg00339.html List-Id: >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==