From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31579 invoked by alias); 22 Mar 2003 12:46:00 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 31557 invoked by uid 71); 22 Mar 2003 12:46:00 -0000 Resent-Date: 22 Mar 2003 12:46:00 -0000 Resent-Message-ID: <20030322124600.31556.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org, freebsd-current@freebsd.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, till@f111.hadiko.de Received: (qmail 31053 invoked by uid 48); 22 Mar 2003 12:41:30 -0000 Message-Id: <20030322124130.31052.qmail@sources.redhat.com> Date: Sat, 22 Mar 2003 12:46:00 -0000 From: till@f111.hadiko.de Reply-To: till@f111.hadiko.de To: gcc-gnats@gcc.gnu.org Cc: freebsd-current@freebsd.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) X-GNATS-Notify: freebsd-current@freebsd.org Subject: optimization/10189: pentium4 breaks suns libm code for __ieee754_pow(double x, double y) X-SW-Source: 2003-03/txt/msg01471.txt.bz2 List-Id: >Number: 10189 >Category: optimization >Synopsis: pentium4 breaks suns libm code for __ieee754_pow(double x, double y) >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: wrong-code >Submitter-Id: net >Arrival-Date: Sat Mar 22 12:46:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Mikhail Teterin >Release: gcc version 3.2.1 [FreeBSD] 20021119 (release) >Organization: >Environment: FreeBSD 5.x >Description: pow function will return 0x0 (double 1) when compiled with -march=pentium4 and -O see also http://www.freebsd.org/cgi/query-pr.cgi?pr=43299 >How-To-Repeat: compile libm and call pow or __ieee754_pow >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="e_pow.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="e_pow.c" LyogQCgjKWVfcG93LmMgNS4xIDkzLzA5LzI0ICovCi8qCiAqID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICogQ29weXJpZ2h0IChDKSAxOTkzIGJ5 IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogRGV2ZWxv cGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgogKiBQZXJt aXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCiAqIHNvZnR3 YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCiAqIGlzIHBy ZXNlcnZlZC4KICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQogKi8KCiNpZm5kZWYgbGludApzdGF0aWMgY2hhciByY3NpZFtdID0gIiRGcmVlQlNE OiBzcmMvbGliL21zdW4vc3JjL2VfcG93LmMsdiAxLjkgMjAwMi8wNi8xNyAxNToyODo1OSBiZGUg RXhwICQiOwojZW5kaWYKCi8qIF9faWVlZTc1NF9wb3coeCx5KSByZXR1cm4geCoqeQogKgogKgkJ ICAgICAgbgogKiBNZXRob2Q6ICBMZXQgeCA9ICAyICAgKiAoMStmKQogKgkxLiBDb21wdXRlIGFu ZCByZXR1cm4gbG9nMih4KSBpbiB0d28gcGllY2VzOgogKgkJbG9nMih4KSA9IHcxICsgdzIsCiAq CSAgIHdoZXJlIHcxIGhhcyA1My0yNCA9IDI5IGJpdCB0cmFpbGluZyB6ZXJvcy4KICoJMi4gUGVy Zm9ybSB5KmxvZzIoeCkgPSBuK3knIGJ5IHNpbXVsYXRpbmcgbXV0aS1wcmVjaXNpb24KICoJICAg YXJpdGhtZXRpYywgd2hlcmUgfHknfDw9MC41LgogKgkzLiBSZXR1cm4geCoqeSA9IDIqKm4qZXhw KHknKmxvZzIpCiAqCiAqIFNwZWNpYWwgY2FzZXM6CiAqCTEuICAoYW55dGhpbmcpICoqIDAgIGlz IDEKICoJMi4gIChhbnl0aGluZykgKiogMSAgaXMgaXRzZWxmCiAqCTMuICAoYW55dGhpbmcpICoq IE5BTiBpcyBOQU4KICoJNC4gIE5BTiAqKiAoYW55dGhpbmcgZXhjZXB0IDApIGlzIE5BTgogKgk1 LiAgKy0ofHh8ID4gMSkgKiogICtJTkYgaXMgK0lORgogKgk2LiAgKy0ofHh8ID4gMSkgKiogIC1J TkYgaXMgKzAKICoJNy4gICstKHx4fCA8IDEpICoqICArSU5GIGlzICswCiAqCTguICArLSh8eHwg PCAxKSAqKiAgLUlORiBpcyArSU5GCiAqCTkuICArLTEgICAgICAgICAqKiArLUlORiBpcyBOQU4K ICoJMTAuICswICoqICgrYW55dGhpbmcgZXhjZXB0IDAsIE5BTikgICAgICAgICAgICAgICBpcyAr MAogKgkxMS4gLTAgKiogKCthbnl0aGluZyBleGNlcHQgMCwgTkFOLCBvZGQgaW50ZWdlcikgIGlz ICswCiAqCTEyLiArMCAqKiAoLWFueXRoaW5nIGV4Y2VwdCAwLCBOQU4pICAgICAgICAgICAgICAg aXMgK0lORgogKgkxMy4gLTAgKiogKC1hbnl0aGluZyBleGNlcHQgMCwgTkFOLCBvZGQgaW50ZWdl cikgIGlzICtJTkYKICoJMTQuIC0wICoqIChvZGQgaW50ZWdlcikgPSAtKCArMCAqKiAob2RkIGlu dGVnZXIpICkKICoJMTUuICtJTkYgKiogKCthbnl0aGluZyBleGNlcHQgMCxOQU4pIGlzICtJTkYK ICoJMTYuICtJTkYgKiogKC1hbnl0aGluZyBleGNlcHQgMCxOQU4pIGlzICswCiAqCTE3LiAtSU5G ICoqIChhbnl0aGluZykgID0gLTAgKiogKC1hbnl0aGluZykKICoJMTguICgtYW55dGhpbmcpICoq IChpbnRlZ2VyKSBpcyAoLTEpKiooaW50ZWdlcikqKCthbnl0aGluZyoqaW50ZWdlcikKICoJMTku ICgtYW55dGhpbmcgZXhjZXB0IDAgYW5kIGluZikgKiogKG5vbi1pbnRlZ2VyKSBpcyBOQU4KICoK ICogQWNjdXJhY3k6CiAqCXBvdyh4LHkpIHJldHVybnMgeCoqeSBuZWFybHkgcm91bmRlZC4gSW4g cGFydGljdWxhcgogKgkJCXBvdyhpbnRlZ2VyLGludGVnZXIpCiAqCWFsd2F5cyByZXR1cm5zIHRo ZSBjb3JyZWN0IGludGVnZXIgcHJvdmlkZWQgaXQgaXMKICoJcmVwcmVzZW50YWJsZS4KICoKICog Q29uc3RhbnRzIDoKICogVGhlIGhleGFkZWNpbWFsIHZhbHVlcyBhcmUgdGhlIGludGVuZGVkIG9u ZXMgZm9yIHRoZSBmb2xsb3dpbmcKICogY29uc3RhbnRzLiBUaGUgZGVjaW1hbCB2YWx1ZXMgbWF5 IGJlIHVzZWQsIHByb3ZpZGVkIHRoYXQgdGhlCiAqIGNvbXBpbGVyIHdpbGwgY29udmVydCBmcm9t IGRlY2ltYWwgdG8gYmluYXJ5IGFjY3VyYXRlbHkgZW5vdWdoCiAqIHRvIHByb2R1Y2UgdGhlIGhl eGFkZWNpbWFsIHZhbHVlcyBzaG93bi4KICovCgojaW5jbHVkZSAibWF0aC5oIgojaW5jbHVkZSAi bWF0aF9wcml2YXRlLmgiCgpzdGF0aWMgY29uc3QgZG91YmxlCmJwW10gPSB7MS4wLCAxLjUsfSwK ZHBfaFtdID0geyAwLjAsIDUuODQ5NjI0ODcyMjA3NjQxNjAxNTZlLTAxLH0sIC8qIDB4M0ZFMkI4 MDMsIDB4NDAwMDAwMDAgKi8KZHBfbFtdID0geyAwLjAsIDEuMzUwMDM5MjAyMTI5NzQ4OTcxMjhl LTA4LH0sIC8qIDB4M0U0Q0ZERUIsIDB4NDNDRkQwMDYgKi8KemVybyAgICA9ICAwLjAsCm9uZQk9 ICAxLjAsCnR3bwk9ICAyLjAsCnR3bzUzCT0gIDkwMDcxOTkyNTQ3NDA5OTIuMCwJLyogMHg0MzQw MDAwMCwgMHgwMDAwMDAwMCAqLwpodWdlCT0gIDEuMGUzMDAsCnRpbnkgICAgPSAgMS4wZS0zMDAs CgkvKiBwb2x5IGNvZWZzIGZvciAoMy8yKSoobG9nKHgpLTJzLTIvMypzKiozICovCkwxICA9ICA1 Ljk5OTk5OTk5OTk5OTk0NjQ4NzI1ZS0wMSwgLyogMHgzRkUzMzMzMywgMHgzMzMzMzMwMyAqLwpM MiAgPSAgNC4yODU3MTQyODU3ODU1MDE4NDI1MmUtMDEsIC8qIDB4M0ZEQjZEQjYsIDB4REI2RkFC RkYgKi8KTDMgID0gIDMuMzMzMzMzMjk4MTgzNzc0MzI5MThlLTAxLCAvKiAweDNGRDU1NTU1LCAw eDUxOEYyNjREICovCkw0ICA9ICAyLjcyNzI4MTIzODA4NTM0MDA2NDg5ZS0wMSwgLyogMHgzRkQx NzQ2MCwgMHhBOTFENDEwMSAqLwpMNSAgPSAgMi4zMDY2MDc0NTc3NTU2MTc1NDA2N2UtMDEsIC8q IDB4M0ZDRDg2NEEsIDB4OTNDOURCNjUgKi8KTDYgID0gIDIuMDY5NzUwMTc4MDAzMzg0MTc3ODRl LTAxLCAvKiAweDNGQ0E3RTI4LCAweDRBNDU0RUVGICovClAxICAgPSAgMS42NjY2NjY2NjY2NjY2 NjAxOTAzN2UtMDEsIC8qIDB4M0ZDNTU1NTUsIDB4NTU1NTU1M0UgKi8KUDIgICA9IC0yLjc3Nzc3 Nzc3NzcwMTU1OTMzODQyZS0wMywgLyogMHhCRjY2QzE2QywgMHgxNkJFQkQ5MyAqLwpQMyAgID0g IDYuNjEzNzU2MzIxNDM3OTM0MzYxMTdlLTA1LCAvKiAweDNGMTE1NjZBLCAweEFGMjVERTJDICov ClA0ICAgPSAtMS42NTMzOTAyMjA1NDY1MjUxNTM5MGUtMDYsIC8qIDB4QkVCQkJENDEsIDB4QzVE MjZCRjEgKi8KUDUgICA9ICA0LjEzODEzNjc5NzA1NzIzODQ2MDM5ZS0wOCwgLyogMHgzRTY2Mzc2 OSwgMHg3MkJFQTREMCAqLwpsZzIgID0gIDYuOTMxNDcxODA1NTk5NDUyODYyMjdlLTAxLCAvKiAw eDNGRTYyRTQyLCAweEZFRkEzOUVGICovCmxnMl9oICA9ICA2LjkzMTQ3MTgyNDY0NTk5NjA5Mzc1 ZS0wMSwgLyogMHgzRkU2MkU0MywgMHgwMDAwMDAwMCAqLwpsZzJfbCAgPSAtMS45MDQ2NTQyOTk5 NTc3NjgwNDUyNWUtMDksIC8qIDB4QkUyMDVDNjEsIDB4MENBODZDMzkgKi8Kb3Z0ID0gIDguMDA4 NTY2MjU5NTM3Mjk0NDM3MmUtMDAxNywgLyogLSgxMDI0LWxvZzIob3ZmbCsuNXVscCkpICovCmNw ICAgID0gIDkuNjE3OTY2OTM5MjU5NzU1NTQzMjllLTAxLCAvKiAweDNGRUVDNzA5LCAweERDM0Ew M0ZEID0yLygzbG4yKSAqLwpjcF9oICA9ICA5LjYxNzk2NzAwOTU0NDM3MjU1ODU5ZS0wMSwgLyog MHgzRkVFQzcwOSwgMHhFMDAwMDAwMCA9KGZsb2F0KWNwICovCmNwX2wgID0gLTcuMDI4NDYxNjUw OTUyNzU4MjY1MTZlLTA5LCAvKiAweEJFM0UyRkUwLCAweDE0NUIwMUY1ID10YWlsIG9mIGNwX2gq LwppdmxuMiAgICA9ICAxLjQ0MjY5NTA0MDg4ODk2MzM4NzAwZSswMCwgLyogMHgzRkY3MTU0Nywg MHg2NTJCODJGRSA9MS9sbjIgKi8KaXZsbjJfaCAgPSAgMS40NDI2OTUwMjE2MjkzMzM0OTYwOWUr MDAsIC8qIDB4M0ZGNzE1NDcsIDB4NjAwMDAwMDAgPTI0YiAxL2xuMiovCml2bG4yX2wgID0gIDEu OTI1OTYyOTkxMTI2NjE3NDY4ODdlLTA4OyAvKiAweDNFNTRBRTBCLCAweEY4NURERjQ0ID0xL2xu MiB0YWlsKi8KCmRvdWJsZQpfX2llZWU3NTRfcG93KGRvdWJsZSB4LCBkb3VibGUgeSkKewoJZG91 YmxlIHosYXgsel9oLHpfbCxwX2gscF9sOwoJZG91YmxlIHkxLHQxLHQyLHIscyx0LHUsdix3OwoJ aW50MzJfdCBpLGosayx5aXNpbnQsbjsKCWludDMyX3QgaHgsaHksaXgsaXk7Cgl1X2ludDMyX3Qg bHgsbHk7CgoJRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKCUVYVFJBQ1RfV09SRFMoaHksbHkseSk7 CglpeCA9IGh4JjB4N2ZmZmZmZmY7ICBpeSA9IGh5JjB4N2ZmZmZmZmY7CgogICAgLyogeT09emVy bzogeCoqMCA9IDEgKi8KCWlmKChpeXxseSk9PTApIHJldHVybiBvbmU7CgogICAgLyogKy1OYU4g cmV0dXJuIHgreSAqLwoJaWYoaXggPiAweDdmZjAwMDAwIHx8ICgoaXg9PTB4N2ZmMDAwMDApJiYo bHghPTApKSB8fAoJICAgaXkgPiAweDdmZjAwMDAwIHx8ICgoaXk9PTB4N2ZmMDAwMDApJiYobHkh PTApKSkKCQlyZXR1cm4geCt5OwoKICAgIC8qIGRldGVybWluZSBpZiB5IGlzIGFuIG9kZCBpbnQg d2hlbiB4IDwgMAogICAgICogeWlzaW50ID0gMAkuLi4geSBpcyBub3QgYW4gaW50ZWdlcgogICAg ICogeWlzaW50ID0gMQkuLi4geSBpcyBhbiBvZGQgaW50CiAgICAgKiB5aXNpbnQgPSAyCS4uLiB5 IGlzIGFuIGV2ZW4gaW50CiAgICAgKi8KCXlpc2ludCAgPSAwOwoJaWYoaHg8MCkgewoJICAgIGlm KGl5Pj0weDQzNDAwMDAwKSB5aXNpbnQgPSAyOyAvKiBldmVuIGludGVnZXIgeSAqLwoJICAgIGVs c2UgaWYoaXk+PTB4M2ZmMDAwMDApIHsKCQlrID0gKGl5Pj4yMCktMHgzZmY7CSAgIC8qIGV4cG9u ZW50ICovCgkJaWYoaz4yMCkgewoJCSAgICBqID0gbHk+Pig1Mi1rKTsKCQkgICAgaWYoKGo8PCg1 Mi1rKSk9PWx5KSB5aXNpbnQgPSAyLShqJjEpOwoJCX0gZWxzZSBpZihseT09MCkgewoJCSAgICBq ID0gaXk+PigyMC1rKTsKCQkgICAgaWYoKGo8PCgyMC1rKSk9PWl5KSB5aXNpbnQgPSAyLShqJjEp OwoJCX0KCSAgICB9Cgl9CgogICAgLyogc3BlY2lhbCB2YWx1ZSBvZiB5ICovCglpZihseT09MCkg ewoJICAgIGlmIChpeT09MHg3ZmYwMDAwMCkgewkvKiB5IGlzICstaW5mICovCgkgICAgICAgIGlm KCgoaXgtMHgzZmYwMDAwMCl8bHgpPT0wKQoJCSAgICByZXR1cm4gIHkgLSB5OwkvKiBpbmYqKist MSBpcyBOYU4gKi8KCSAgICAgICAgZWxzZSBpZiAoaXggPj0gMHgzZmYwMDAwMCkvKiAofHh8PjEp KiorLWluZiA9IGluZiwwICovCgkJICAgIHJldHVybiAoaHk+PTApPyB5OiB6ZXJvOwoJICAgICAg ICBlbHNlCQkJLyogKHx4fDwxKSoqLSwraW5mID0gaW5mLDAgKi8KCQkgICAgcmV0dXJuIChoeTww KT8teTogemVybzsKCSAgICB9CgkgICAgaWYoaXk9PTB4M2ZmMDAwMDApIHsJLyogeSBpcyAgKy0x ICovCgkJaWYoaHk8MCkgcmV0dXJuIG9uZS94OyBlbHNlIHJldHVybiB4OwoJICAgIH0KCSAgICBp ZihoeT09MHg0MDAwMDAwMCkgcmV0dXJuIHgqeDsgLyogeSBpcyAgMiAqLwoJICAgIGlmKGh5PT0w eDNmZTAwMDAwKSB7CS8qIHkgaXMgIDAuNSAqLwoJCWlmKGh4Pj0wKQkvKiB4ID49ICswICovCgkJ cmV0dXJuIF9faWVlZTc1NF9zcXJ0KHgpOwoJICAgIH0KCX0KCglheCAgID0gZmFicyh4KTsKICAg IC8qIHNwZWNpYWwgdmFsdWUgb2YgeCAqLwoJaWYobHg9PTApIHsKCSAgICBpZihpeD09MHg3ZmYw MDAwMHx8aXg9PTB8fGl4PT0weDNmZjAwMDAwKXsKCQl6ID0gYXg7CQkJLyp4IGlzICstMCwrLWlu ZiwrLTEqLwoJCWlmKGh5PDApIHogPSBvbmUvejsJLyogeiA9ICgxL3x4fCkgKi8KCQlpZihoeDww KSB7CgkJICAgIGlmKCgoaXgtMHgzZmYwMDAwMCl8eWlzaW50KT09MCkgewoJCQl6ID0gKHoteikv KHoteik7IC8qICgtMSkqKm5vbi1pbnQgaXMgTmFOICovCgkJICAgIH0gZWxzZSBpZih5aXNpbnQ9 PTEpCgkJCXogPSAtejsJCS8qICh4PDApKipvZGQgPSAtKHx4fCoqb2RkKSAqLwoJCX0KCQlyZXR1 cm4gejsKCSAgICB9Cgl9CgogICAgLyogKHg8MCkqKihub24taW50KSBpcyBOYU4gKi8KICAgIC8q IENZR05VUyBMT0NBTDogVGhpcyB1c2VkIHRvIGJlCglpZigoKChoeD4+MzEpKzEpfHlpc2ludCk9 PTApIHJldHVybiAoeC14KS8oeC14KTsKICAgICAgIGJ1dCBBTlNJIEMgc2F5cyBhIHJpZ2h0IHNo aWZ0IG9mIGEgc2lnbmVkIG5lZ2F0aXZlIHF1YW50aXR5IGlzCiAgICAgICBpbXBsZW1lbnRhdGlv biBkZWZpbmVkLiAgKi8KCWlmKCgoKCh1X2ludDMyX3QpaHg+PjMxKS0xKXx5aXNpbnQpPT0wKSBy ZXR1cm4gKHgteCkvKHgteCk7CgogICAgLyogfHl8IGlzIGh1Z2UgKi8KCWlmKGl5PjB4NDFlMDAw MDApIHsgLyogaWYgfHl8ID4gMioqMzEgKi8KCSAgICBpZihpeT4weDQzZjAwMDAwKXsJLyogaWYg fHl8ID4gMioqNjQsIG11c3Qgby91ZmxvdyAqLwoJCWlmKGl4PD0weDNmZWZmZmZmKSByZXR1cm4g KGh5PDApPyBodWdlKmh1Z2U6dGlueSp0aW55OwoJCWlmKGl4Pj0weDNmZjAwMDAwKSByZXR1cm4g KGh5PjApPyBodWdlKmh1Z2U6dGlueSp0aW55OwoJICAgIH0KCS8qIG92ZXIvdW5kZXJmbG93IGlm IHggaXMgbm90IGNsb3NlIHRvIG9uZSAqLwoJICAgIGlmKGl4PDB4M2ZlZmZmZmYpIHJldHVybiAo aHk8MCk/IGh1Z2UqaHVnZTp0aW55KnRpbnk7CgkgICAgaWYoaXg+MHgzZmYwMDAwMCkgcmV0dXJu IChoeT4wKT8gaHVnZSpodWdlOnRpbnkqdGlueTsKCS8qIG5vdyB8MS14fCBpcyB0aW55IDw9IDIq Ki0yMCwgc3VmZmljZSB0byBjb21wdXRlCgkgICBsb2coeCkgYnkgeC14XjIvMit4XjMvMy14XjQv NCAqLwoJICAgIHQgPSBheC0xOwkJLyogdCBoYXMgMjAgdHJhaWxpbmcgemVyb3MgKi8KCSAgICB3 ID0gKHQqdCkqKDAuNS10KigwLjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMtdCowLjI1KSk7CgkgICAg dSA9IGl2bG4yX2gqdDsJLyogaXZsbjJfaCBoYXMgMjEgc2lnLiBiaXRzICovCgkgICAgdiA9IHQq aXZsbjJfbC13Kml2bG4yOwoJICAgIHQxID0gdSt2OwoJICAgIFNFVF9MT1dfV09SRCh0MSwwKTsK CSAgICB0MiA9IHYtKHQxLXUpOwoJfSBlbHNlIHsKCSAgICBkb3VibGUgczIsc19oLHNfbCx0X2gs dF9sOwoJICAgIG4gPSAwOwoJLyogdGFrZSBjYXJlIHN1Ym5vcm1hbCBudW1iZXIgKi8KCSAgICBp ZihpeDwweDAwMTAwMDAwKQoJCXtheCAqPSB0d281MzsgbiAtPSA1MzsgR0VUX0hJR0hfV09SRChp eCxheCk7IH0KCSAgICBuICArPSAoKGl4KT4+MjApLTB4M2ZmOwoJICAgIGogID0gaXgmMHgwMDBm ZmZmZjsKCS8qIGRldGVybWluZSBpbnRlcnZhbCAqLwoJICAgIGl4ID0ganwweDNmZjAwMDAwOwkJ Lyogbm9ybWFsaXplIGl4ICovCgkgICAgaWYoajw9MHgzOTg4RSkgaz0wOwkJLyogfHh8PHNxcnQo My8yKSAqLwoJICAgIGVsc2UgaWYoajwweEJCNjdBKSBrPTE7CS8qIHx4fDxzcXJ0KDMpICAgKi8K CSAgICBlbHNlIHtrPTA7bis9MTtpeCAtPSAweDAwMTAwMDAwO30KCSAgICBTRVRfSElHSF9XT1JE KGF4LGl4KTsKCgkvKiBjb21wdXRlIHMgPSBzX2grc19sID0gKHgtMSkvKHgrMSkgb3IgKHgtMS41 KS8oeCsxLjUpICovCgkgICAgdSA9IGF4LWJwW2tdOwkJLyogYnBbMF09MS4wLCBicFsxXT0xLjUg Ki8KCSAgICB2ID0gb25lLyhheCticFtrXSk7CgkgICAgcyA9IHUqdjsKCSAgICBzX2ggPSBzOwoJ ICAgIFNFVF9MT1dfV09SRChzX2gsMCk7CgkvKiB0X2g9YXgrYnBba10gSGlnaCAqLwoJICAgIHRf aCA9IHplcm87CgkgICAgU0VUX0hJR0hfV09SRCh0X2gsKChpeD4+MSl8MHgyMDAwMDAwMCkrMHgw MDA4MDAwMCsoazw8MTgpKTsKCSAgICB0X2wgPSBheCAtICh0X2gtYnBba10pOwoJICAgIHNfbCA9 IHYqKCh1LXNfaCp0X2gpLXNfaCp0X2wpOwoJLyogY29tcHV0ZSBsb2coYXgpICovCgkgICAgczIg PSBzKnM7CgkgICAgciA9IHMyKnMyKihMMStzMiooTDIrczIqKEwzK3MyKihMNCtzMiooTDUrczIq TDYpKSkpKTsKCSAgICByICs9IHNfbCooc19oK3MpOwoJICAgIHMyICA9IHNfaCpzX2g7CgkgICAg dF9oID0gMy4wK3MyK3I7CgkgICAgU0VUX0xPV19XT1JEKHRfaCwwKTsKCSAgICB0X2wgPSByLSgo dF9oLTMuMCktczIpOwoJLyogdSt2ID0gcyooMSsuLi4pICovCgkgICAgdSA9IHNfaCp0X2g7Cgkg ICAgdiA9IHNfbCp0X2grdF9sKnM7CgkvKiAyLygzbG9nMikqKHMrLi4uKSAqLwoJICAgIHBfaCA9 IHUrdjsKCSAgICBTRVRfTE9XX1dPUkQocF9oLDApOwoJICAgIHBfbCA9IHYtKHBfaC11KTsKCSAg ICB6X2ggPSBjcF9oKnBfaDsJCS8qIGNwX2grY3BfbCA9IDIvKDMqbG9nMikgKi8KCSAgICB6X2wg PSBjcF9sKnBfaCtwX2wqY3ArZHBfbFtrXTsKCS8qIGxvZzIoYXgpID0gKHMrLi4pKjIvKDMqbG9n MikgPSBuICsgZHBfaCArIHpfaCArIHpfbCAqLwoJICAgIHQgPSAoZG91YmxlKW47CgkgICAgdDEg PSAoKCh6X2grel9sKStkcF9oW2tdKSt0KTsKCSAgICBTRVRfTE9XX1dPUkQodDEsMCk7CgkgICAg dDIgPSB6X2wtKCgodDEtdCktZHBfaFtrXSktel9oKTsKCX0KCglzID0gb25lOyAvKiBzIChzaWdu IG9mIHJlc3VsdCAtdmUqKm9kZCkgPSAtMSBlbHNlID0gMSAqLwoJaWYoKCgoKHVfaW50MzJfdClo eD4+MzEpLTEpfCh5aXNpbnQtMSkpPT0wKQoJICAgIHMgPSAtb25lOy8qICgtdmUpKioob2RkIGlu dCkgKi8KCiAgICAvKiBzcGxpdCB1cCB5IGludG8geTEreTIgYW5kIGNvbXB1dGUgKHkxK3kyKSoo dDErdDIpICovCgl5MSAgPSB5OwoJU0VUX0xPV19XT1JEKHkxLDApOwoJcF9sID0gKHkteTEpKnQx K3kqdDI7CglwX2ggPSB5MSp0MTsKCXogPSBwX2wrcF9oOwoJRVhUUkFDVF9XT1JEUyhqLGkseik7 CglpZiAoaj49MHg0MDkwMDAwMCkgewkJCQkvKiB6ID49IDEwMjQgKi8KCSAgICBpZigoKGotMHg0 MDkwMDAwMCl8aSkhPTApCQkJLyogaWYgeiA+IDEwMjQgKi8KCQlyZXR1cm4gcypodWdlKmh1Z2U7 CQkJLyogb3ZlcmZsb3cgKi8KCSAgICBlbHNlIHsKCQlpZihwX2wrb3Z0PnotcF9oKSByZXR1cm4g cypodWdlKmh1Z2U7CS8qIG92ZXJmbG93ICovCgkgICAgfQoJfSBlbHNlIGlmKChqJjB4N2ZmZmZm ZmYpPj0weDQwOTBjYzAwICkgewkvKiB6IDw9IC0xMDc1ICovCgkgICAgaWYoKChqLTB4YzA5MGNj MDApfGkpIT0wKSAJCS8qIHogPCAtMTA3NSAqLwoJCXJldHVybiBzKnRpbnkqdGlueTsJCS8qIHVu ZGVyZmxvdyAqLwoJICAgIGVsc2UgewoJCWlmKHBfbDw9ei1wX2gpIHJldHVybiBzKnRpbnkqdGlu eTsJLyogdW5kZXJmbG93ICovCgkgICAgfQoJfQogICAgLyoKICAgICAqIGNvbXB1dGUgMioqKHBf aCtwX2wpCiAgICAgKi8KCWkgPSBqJjB4N2ZmZmZmZmY7CglrID0gKGk+PjIwKS0weDNmZjsKCW4g PSAwOwoJaWYoaT4weDNmZTAwMDAwKSB7CQkvKiBpZiB8enwgPiAwLjUsIHNldCBuID0gW3orMC41 XSAqLwoJICAgIG4gPSBqKygweDAwMTAwMDAwPj4oaysxKSk7CgkgICAgayA9ICgobiYweDdmZmZm ZmZmKT4+MjApLTB4M2ZmOwkvKiBuZXcgayBmb3IgbiAqLwoJICAgIHQgPSB6ZXJvOwoJICAgIFNF VF9ISUdIX1dPUkQodCxuJn4oMHgwMDBmZmZmZj4+aykpOwoJICAgIG4gPSAoKG4mMHgwMDBmZmZm Zil8MHgwMDEwMDAwMCk+PigyMC1rKTsKCSAgICBpZihqPDApIG4gPSAtbjsKCSAgICBwX2ggLT0g dDsKCX0KCXQgPSBwX2wrcF9oOwoJU0VUX0xPV19XT1JEKHQsMCk7Cgl1ID0gdCpsZzJfaDsKCXYg PSAocF9sLSh0LXBfaCkpKmxnMit0KmxnMl9sOwoJeiA9IHUrdjsKCXcgPSB2LSh6LXUpOwoJdCAg PSB6Kno7Cgl0MSAgPSB6IC0gdCooUDErdCooUDIrdCooUDMrdCooUDQrdCpQNSkpKSk7CglyICA9 ICh6KnQxKS8odDEtdHdvKS0odyt6KncpOwoJeiAgPSBvbmUtKHIteik7CglHRVRfSElHSF9XT1JE KGoseik7CglqICs9IChuPDwyMCk7CglpZigoaj4+MjApPD0wKSB6ID0gc2NhbGJuKHosbik7CS8q IHN1Ym5vcm1hbCBvdXRwdXQgKi8KCWVsc2UgU0VUX0hJR0hfV09SRCh6LGopOwoJcmV0dXJuIHMq ejsKfQo=