From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 486B23858C53 for ; Tue, 8 Nov 2022 13:07:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 486B23858C53 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1667912832; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=RSWKG7WL/iN/pD1yGSNzbWTT6RaCPBbfHwmozsHlx9M=; b=As9JM4nAzbHhCeX0GU5Ljvu/oLoFo40aTvBWVq4f6IKW+ufzBhxBN/GF3k0hfxv3bFDkVo OlJA4MBR19YydlFcBPG6qlB/MpWm7yHNj+14ILY+/ic+vtILFTKbgvSVhi0ZkuHbfJhgC2 ctBxiyQrb7GbqmUnATTZERwQ90qqCpQ= Received: from mail-yw1-f200.google.com (mail-yw1-f200.google.com [209.85.128.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-516-0fQv6RSFPx-48Dw9vX1zOw-1; Tue, 08 Nov 2022 08:07:10 -0500 X-MC-Unique: 0fQv6RSFPx-48Dw9vX1zOw-1 Received: by mail-yw1-f200.google.com with SMTP id 00721157ae682-36f8318e4d0so136879867b3.20 for ; Tue, 08 Nov 2022 05:07:10 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=RSWKG7WL/iN/pD1yGSNzbWTT6RaCPBbfHwmozsHlx9M=; b=gbGr4We9Sjnc/icJyFsUXnnDIfYr2F8JGFdpLy7Pwc0JFbWWgPXqCmwxYlkDK6TGj7 6TlPj7PatStNXq7uQKx1l5fvanSvelCbsRJ//t49okoq1iQDDHSYgNmq2pIIb6oWA/Yg A5cNPzqWLmkYqxyau+Ccm4Sai/9gsLJq/uenDpaKY/1wVn3U/KhcbkZRXyOFTk2yWYcX W2kmmuJSVonkyDYv7p9WC/TAS31/WTYp4J9iGYP+SNKmd2sdcraX2w33h7pNx56pBvVy n9UJVufgwTzzrpe9s9ZzjmmdwXy1NzuPxi7bZ5i7rxCEvrmVxLuKSX9HU043dmOMMTac JvPg== X-Gm-Message-State: ACrzQf3kNxdM5xJ6yanwVCpFRtSi1k8/4cR7yERbFcrcSDyCQIuUAPLl iO2ZzzzwAlV6WZTJH8Qj07KVjFDBrWE1+aQt5W1lDd4RBuIlPlD3A3S499DOzTrLmIeWbBG3+uq tMEcnYUqPHQTllKsXvziqYJzBmN9EyRC6QQ== X-Received: by 2002:a05:6902:13c8:b0:6af:f2b8:e164 with SMTP id y8-20020a05690213c800b006aff2b8e164mr53454388ybu.466.1667912829625; Tue, 08 Nov 2022 05:07:09 -0800 (PST) X-Google-Smtp-Source: AMsMyM7WCuNSBWq8jrcBaZr4UMxUxm8hCRtqyoioDKl888pFSPwpwDrA7xTFXPYFgtBXQXU8xH10NLrDSLhxdAm+WTs= X-Received: by 2002:a05:6902:13c8:b0:6af:f2b8:e164 with SMTP id y8-20020a05690213c800b006aff2b8e164mr53454366ybu.466.1667912829352; Tue, 08 Nov 2022 05:07:09 -0800 (PST) MIME-Version: 1.0 References: <20221013123649.474497-1-aldyh@redhat.com> In-Reply-To: From: Aldy Hernandez Date: Tue, 8 Nov 2022 14:06:58 +0100 Message-ID: Subject: Re: [PATCH] [PR24021] Implement PLUS_EXPR range-op entry for floats. To: Jakub Jelinek Cc: GCC patches , Andrew MacLeod X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="000000000000b5e72a05ecf537ab" X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --000000000000b5e72a05ecf537ab Content-Type: text/plain; charset="UTF-8" On Tue, Nov 8, 2022 at 12:20 PM Jakub Jelinek wrote: > > On Mon, Nov 07, 2022 at 04:41:23PM +0100, Aldy Hernandez wrote: > > As suggested upthread, I have also adjusted update_nan_sign() to drop > > the NAN sign to VARYING if both operands are NAN. As an optimization > > I keep the sign if both operands are NAN and have the same sign. > > For NaNs this still relies on something IEEE754 doesn't guarantee, > as I cited, after a binary operation the sign bit of the NaN is > unspecified, whether there is one NaN operand or two. > It might be that all CPUs handle it the way you've implemented > (that for one NaN operand the sign of NaN result will be the same > as that NaN operand and for two it will be the sign of one of the two > NaNs operands, never something else), but I think we'd need to check > more than one implementation for that (I've only tried x86_64 and thus > SSE behavior in it), so one would need to test i387 long double behavior > too, ARM/AArch64, PowerPC, s390{,x}, RISCV, ... > The guarantee given by IEEE754 is only for those copy, negate, abs, copySign > operations, so copying values around, NEG_EXPR, ABS_EXPR, __builtin_fabs*, > __builtin_copysign*. Ughh, that's unfortunate. OK, I've added a big note. > > Otherwise LGTM (but would be nice to get into GCC13 not just > +, but also -, *, /, sqrt at least). Minus is trivial as we can implement it with a negate and plus. I have a patch queued up for that. The rest require a bit more thought, though perhaps with what we have so far can serve as a base. I'll look into it. Attached is the patch I'm retesting. Thanks for your patience, and copious help here. Aldy --000000000000b5e72a05ecf537ab Content-Type: text/x-patch; charset="US-ASCII"; name="0002-PR24021-Implement-PLUS_EXPR-range-op-entry-for-float.patch" Content-Disposition: attachment; filename="0002-PR24021-Implement-PLUS_EXPR-range-op-entry-for-float.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_la87k0cb0 RnJvbSAzMmU5MDYzYmJkNWE0OGJmN2Y3YjE2MDc3ZWJjMGMxZTdiZjNjMzNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGR5IEhlcm5hbmRleiA8YWxkeWhAcmVkaGF0LmNvbT4KRGF0 ZTogVGh1LCAxMyBPY3QgMjAyMiAwODoxNDoxNiArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFtQUjI0 MDIxXSBJbXBsZW1lbnQgUExVU19FWFBSIHJhbmdlLW9wIGVudHJ5IGZvciBmbG9hdHMuCgpUaGlz IGlzIHRoZSByYW5nZS1vcCBlbnRyeSBmb3IgZmxvYXRpbmcgcG9pbnQgUExVU19FWFBSLiAgSXQn cyB0aGUKbW9zdCBpbnRyaWNhdGUgcmFuZ2UgZW50cnkgd2UgaGF2ZSBzbyBmYXIsIGJlY2F1c2Ug d2UgbmVlZCB0byBrZWVwCnRyYWNrIG9mIHJvdW5kaW5nIGFuZCB0YXJnZXQgRlAgZm9ybWF0cy4g IFRoaXMgd2lsbCBiZSB0aGUgbGFzdCBGUAplbnRyeSBJIGNvbW1pdCwgbW9zdGx5IHRvIGF2b2lk IGRpc3R1cmJpbmcgdGhlIHRyZWUgYW55IGZ1cnRoZXIsIGFuZAphbHNvIGJlY2F1c2Ugd2hhdCB3 ZSBoYXZlIHNvIGZhciBpcyBlbm91Z2ggZm9yIGEgc29saWQgVlJQLgoKU28gZmFyIHdlIHRyYWNr IE5BTnMgYW5kIHNpZ25zIGNvcnJlY3RseS4gIFdlIGFsc28gaGFuZGxlIHJlbGF0aW9uYWxzCihz eW1ib2xpY3MgYW5kIG51bWVyaWMpLCBib3RoIG9yZGVyZWQgYW5kIHVub3JkZXJlZCwgQUJTX0VY UFIgYW5kCk5FR0FURV9FWFBSIHdoaWNoIGFyZSB1c2VkIHRvIGZvbGQgX19idWlsdGluX2lzaW5m LCBhbmQgX19idWlsdGluX3NpZ24KKF9fYnVpbHRpbl9jb3B5c2lnbiBpcyBjb21pbmcgdXApLiAg QWxsIGluIGFsbCwgSSB0aGluayB0aGlzIHByb3ZpZGUKbW9yZSB0aGFuIGVub3VnaCBmb3IgYmFz aWMgVlJQIG9uIGZsb2F0cywgYXMgd2VsbCBhcyBwcm92aWRlIGEgYmFzaXMKdG8gZmxlc2ggb3V0 IHRoZSByZXN0IGlmIHRoZXJlJ3MgaW50ZXJlc3QuCgpNeSBnb2FsIHdpdGggdGhpcyBlbnRyeSBp cyB0byBwcm92aWRlIGEgdGVtcGxhdGUgZm9yIGFkZGl0aW9uYWwgYmluYXJ5Cm9wZXJhdG9ycywg YXMgdGhleSB0ZW5kIHRvIGZvbGxvdyBhIHNpbWlsYXIgcGF0dGVybjogaGFuZGxlIE5BTnMsIGRv CnRoZSBhcml0aG1ldGljIHdoaWxlIGtlZXBpbmcgdHJhY2sgb2Ygcm91bmRpbmcsIGFuZCBhZGp1 c3QgZm9yIE5BTi4gIEkKbWF5IGFic3RyYWN0IHRoZSBnZW5lcmFsIHBhcnRzIGFzIHdlIGRvIGZv ciBpcmFuZ2UncyBmb2xkX3JhbmdlIGFuZAp3aV9mb2xkLgoKCVBSIHRyZWUtb3B0aW1pemF0aW9u LzI0MDIxCgpnY2MvQ2hhbmdlTG9nOgoKCSogcmFuZ2Utb3AtZmxvYXQuY2MgKHVwZGF0ZV9uYW5f c2lnbik6IE5ldy4KCShwcm9wYWdhdGVfbmFucyk6IE5ldy4KCShmcmFuZ2VfbmV4dGFmdGVyKTog TmV3LgoJKGZyYW5nZV9hcml0aG1ldGljKTogTmV3LgoJKGNsYXNzIGZvcGVyYXRvcl9wbHVzKTog TmV3LgoJKGZsb2F0aW5nX29wX3RhYmxlOjpmbG9hdGluZ19vcF90YWJsZSk6IEFkZCBQTFVTX0VY UFIgZW50cnkuCgpnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoKCgkqIGdjYy5kZy90cmVlLXNzYS92 cnAtZmxvYXQtcGx1cy5jOiBOZXcgdGVzdC4KLS0tCiBnY2MvcmFuZ2Utb3AtZmxvYXQuY2MgICAg ICAgICAgICAgICAgICAgICAgICAgfCAxNjUgKysrKysrKysrKysrKysrKysrCiAuLi4vZ2NjLmRn L3RyZWUtc3NhL3ZycC1mbG9hdC1wbHVzLmMgICAgICAgICAgfCAgMjEgKysrCiAyIGZpbGVzIGNo YW5nZWQsIDE4NiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0 ZS9nY2MuZGcvdHJlZS1zc2EvdnJwLWZsb2F0LXBsdXMuYwoKZGlmZiAtLWdpdCBhL2djYy9yYW5n ZS1vcC1mbG9hdC5jYyBiL2djYy9yYW5nZS1vcC1mbG9hdC5jYwppbmRleCBhMWYzNzI5OTdiZi4u MWE2OTEzYjhiOTggMTAwNjQ0Ci0tLSBhL2djYy9yYW5nZS1vcC1mbG9hdC5jYworKysgYi9nY2Mv cmFuZ2Utb3AtZmxvYXQuY2MKQEAgLTE5Miw2ICsxOTIsMTE4IEBAIGZyZWxvcF9lYXJseV9yZXNv bHZlIChpcmFuZ2UgJnIsIHRyZWUgdHlwZSwKIAkgICYmIHJlbG9wX2Vhcmx5X3Jlc29sdmUgKHIs IHR5cGUsIG9wMSwgb3AyLCByZWwsIG15X3JlbCkpOwogfQogCisvLyBJZiBSIGNvbnRhaW5zIGEg TkFOIG9mIHVua25vd24gc2lnbiwgdXBkYXRlIHRoZSBOQU4ncyBzaWduYml0CisvLyBkZXBlbmRp bmcgb24gdHdvIG9wZXJhbmRzLgorCitpbmxpbmUgdm9pZAordXBkYXRlX25hbl9zaWduIChmcmFu Z2UgJnIsIGNvbnN0IGZyYW5nZSAmb3AxLCBjb25zdCBmcmFuZ2UgJm9wMikKK3sKKyAgaWYgKCFy Lm1heWJlX2lzbmFuICgpKQorICAgIHJldHVybjsKKworICBib29sIG9wMV9uYW4gPSBvcDEubWF5 YmVfaXNuYW4gKCk7CisgIGJvb2wgb3AyX25hbiA9IG9wMi5tYXliZV9pc25hbiAoKTsKKyAgYm9v bCBzaWduMSwgc2lnbjI7CisKKyAgZ2NjX2NoZWNraW5nX2Fzc2VydCAoIXIubmFuX3NpZ25iaXRf cCAoc2lnbjEpKTsKKyAgaWYgKG9wMV9uYW4gJiYgb3AyX25hbikKKyAgICB7CisgICAgICAvLyBJ ZiBib3RocyBzaWducyBhZ3JlZSwgd2UgY291bGQgdXNlIHRoYXQgc2lnbiwgYnV0IElFRUU3NTQK KyAgICAgIC8vIGRvZXMgbm90IGd1YXJhbnRlZSB0aGlzIGZvciBhIGJpbmFyeSBvcGVyYXRvci4g IFRoZSB4ODZfNjQKKyAgICAgIC8vIGFyY2hpdHVyZSBkb2VzIGtlZXAgdGhlIGNvbW1vbiBrbm93 biBzaWduLCBidXQgZnVydGhlciB0ZXN0cworICAgICAgLy8gYXJlIG5lZWRlZCB0byBzZWUgaWYg b3RoZXIgYXJjaGl0ZWN0dXJlcyBkbyB0aGUgc2FtZSAoaTM4NworICAgICAgLy8gbG9uZyBkb3Vi bGUsIEFSTS9hYXJjaDY0LCBQb3dlclBDLCBzMzkwLHsseH0sIFJTSUNWLCBldGMpLgorICAgICAg Ly8gSW4gdGhlIG1lYW50aW1lLCBrZWVwIHNpZ24gVkFSWUlORy4KKyAgICAgIDsKKyAgICB9Cisg IGVsc2UgaWYgKG9wMV9uYW4pCisgICAgeworICAgICAgaWYgKG9wMS5uYW5fc2lnbmJpdF9wIChz aWduMSkpCisJci51cGRhdGVfbmFuIChzaWduMSk7CisgICAgfQorICBlbHNlIGlmIChvcDJfbmFu KQorICAgIHsKKyAgICAgIGlmIChvcDIubmFuX3NpZ25iaXRfcCAoc2lnbjIpKQorCXIudXBkYXRl X25hbiAoc2lnbjIpOworICAgIH0KK30KKworLy8gSWYgZWl0aGVyIG9wZXJhbmQgaXMgYSBOQU4s IHNldCBSIHRvIHRoZSBjb21iaW5hdGlvbiBvZiBib3RoIE5BTnMKKy8vIHNpZ253aXNlIGFuZCBy ZXR1cm4gVFJVRS4KKworaW5saW5lIGJvb2wKK3Byb3BhZ2F0ZV9uYW5zIChmcmFuZ2UgJnIsIGNv bnN0IGZyYW5nZSAmb3AxLCBjb25zdCBmcmFuZ2UgJm9wMikKK3sKKyAgaWYgKG9wMS5rbm93bl9p c25hbiAoKSB8fCBvcDIua25vd25faXNuYW4gKCkpCisgICAgeworICAgICAgci5zZXRfbmFuIChv cDEudHlwZSAoKSk7CisgICAgICB1cGRhdGVfbmFuX3NpZ24gKHIsIG9wMSwgb3AyKTsKKyAgICAg IHJldHVybiB0cnVlOworICAgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCisvLyBTZXQgVkFMVUUg dG8gaXRzIG5leHQgcmVhbCB2YWx1ZSwgb3IgSU5GIGlmIHRoZSBvcGVyYXRpb24gb3ZlcmZsb3dz LgorCitpbmxpbmUgdm9pZAorZnJhbmdlX25leHRhZnRlciAoZW51bSBtYWNoaW5lX21vZGUgbW9k ZSwKKwkJICBSRUFMX1ZBTFVFX1RZUEUgJnZhbHVlLAorCQkgIGNvbnN0IFJFQUxfVkFMVUVfVFlQ RSAmaW5mKQoreworICBjb25zdCByZWFsX2Zvcm1hdCAqZm10ID0gUkVBTF9NT0RFX0ZPUk1BVCAo bW9kZSk7CisgIFJFQUxfVkFMVUVfVFlQRSB0bXA7CisgIHJlYWxfbmV4dGFmdGVyICgmdG1wLCBm bXQsICZ2YWx1ZSwgJmluZik7CisgIHZhbHVlID0gdG1wOworfQorCisvLyBMaWtlIHJlYWxfYXJp dGhtZXRpYywgYnV0IHJvdW5kIHRoZSByZXN1bHQgdG8gSU5GIGlmIHRoZSBvcGVyYXRpb24KKy8v IHByb2R1Y2VkIGluZXhhY3QgcmVzdWx0cy4KKy8vCisvLyA/PyBUaGVyZSBpcyBzdGlsbCBvbmUg cHJvYmxlbWF0aWMgY2FzZSwgaTM4Ny4gIFdpdGgKKy8vIC1mZXhjZXNzLXByZWNpc2lvbj1zdGFu ZGFyZCB3ZSBwZXJmb3JtIG1vc3QgU0YvREZtb2RlIGFyaXRobWV0aWMgaW4KKy8vIFhGbW9kZSAo bG9uZ19kb3VibGVfdHlwZV9ub2RlKSwgc28gdGhhdCBjYXNlIGlzIE9LLiAgQnV0IHdpdGhvdXQK Ky8vIC1tZnBtYXRoPXNzZSwgYWxsIHRoZSBTRi9ERm1vZGUgY29tcHV0YXRpb25zIGFyZSBpbiBY Rm1vZGUKKy8vIHByZWNpc2lvbiAoNjQtYml0IG1hbnRpc3NhKSBhbmQgb25seSBvY2Nhc3Npb25h bGx5IHJvdW5kZWQgdG8KKy8vIFNGL0RGbW9kZSAod2hlbiBzdG9yaW5nIGludG8gbWVtb3J5IGZy b20gdGhlIDM4NyBzdGFjaykuICBNYXliZQorLy8gdGhpcyBpcyBvayBhcyB3ZWxsIHRob3VnaCBp dCBpcyBqdXN0IG9jY2Fzc2lvbmFsbHkgbW9yZSBwcmVjaXNlLiA/PworCitzdGF0aWMgdm9pZAor ZnJhbmdlX2FyaXRobWV0aWMgKGVudW0gdHJlZV9jb2RlIGNvZGUsIHRyZWUgdHlwZSwKKwkJICAg UkVBTF9WQUxVRV9UWVBFICZyZXN1bHQsCisJCSAgIGNvbnN0IFJFQUxfVkFMVUVfVFlQRSAmb3Ax LAorCQkgICBjb25zdCBSRUFMX1ZBTFVFX1RZUEUgJm9wMiwKKwkJICAgY29uc3QgUkVBTF9WQUxV RV9UWVBFICZpbmYpCit7CisgIFJFQUxfVkFMVUVfVFlQRSB2YWx1ZTsKKyAgZW51bSBtYWNoaW5l X21vZGUgbW9kZSA9IFRZUEVfTU9ERSAodHlwZSk7CisgIGJvb2wgbW9kZV9jb21wb3NpdGUgPSBN T0RFX0NPTVBPU0lURV9QIChtb2RlKTsKKworICBib29sIGluZXhhY3QgPSByZWFsX2FyaXRobWV0 aWMgKCZ2YWx1ZSwgY29kZSwgJm9wMSwgJm9wMik7CisgIHJlYWxfY29udmVydCAoJnJlc3VsdCwg bW9kZSwgJnZhbHVlKTsKKworICAvLyBCZSBleHRyYSBjYXJlZnVsIGlmIHRoZXJlIG1heSBiZSBk aXNjcmVwYW5jaWVzIGJldHdlZW4gdGhlCisgIC8vIGNvbXBpbGUgYW5kIHJ1bnRpbWUgcmVzdWx0 cy4KKyAgaWYgKChtb2RlX2NvbXBvc2l0ZSB8fCAocmVhbF9pc25lZyAoJmluZikgPyByZWFsX2xl c3MgKCZyZXN1bHQsICZ2YWx1ZSkKKwkJCSAgOiAhcmVhbF9sZXNzICgmdmFsdWUsICZyZXN1bHQp KSkKKyAgICAgICYmIChpbmV4YWN0IHx8ICFyZWFsX2lkZW50aWNhbCAoJnJlc3VsdCwgJnZhbHVl KSkpCisgICAgeworICAgICAgaWYgKG1vZGVfY29tcG9zaXRlKQorCXsKKwkgIGlmIChyZWFsX2lz ZGVub3JtYWwgKCZyZXN1bHQsIG1vZGUpCisJICAgICAgfHwgcmVhbF9pc3plcm8gKCZyZXN1bHQp KQorCSAgICB7CisJICAgICAgLy8gSUJNIGV4dGVuZGVkIGRlbm9ybWFscyBvbmx5IGhhdmUgREZt b2RlIHByZWNpc2lvbi4KKwkgICAgICBSRUFMX1ZBTFVFX1RZUEUgdG1wOworCSAgICAgIHJlYWxf Y29udmVydCAoJnRtcCwgREZtb2RlLCAmdmFsdWUpOworCSAgICAgIGZyYW5nZV9uZXh0YWZ0ZXIg KERGbW9kZSwgdG1wLCBpbmYpOworCSAgICAgIHJlYWxfY29udmVydCAoJnJlc3VsdCwgbW9kZSwg JnRtcCk7CisJICAgICAgcmV0dXJuOworCSAgICB9CisJfQorICAgICAgZnJhbmdlX25leHRhZnRl ciAobW9kZSwgcmVzdWx0LCBpbmYpOworICAgIH0KK30KKwogLy8gQ3JvcCBSIHRvIFstSU5GLCBN QVhdIHdoZXJlIE1BWCBpcyB0aGUgbWF4aW11bSByZXByZXNlbnRhYmxlIG51bWJlcgogLy8gZm9y IFRZUEUuCiAKQEAgLTE3NDYsNiArMTg1OCw1OCBAQCBmb3BlcmF0b3JfdW5vcmRlcmVkX2VxdWFs OjpvcDFfcmFuZ2UgKGZyYW5nZSAmciwgdHJlZSB0eXBlLAogICByZXR1cm4gdHJ1ZTsKIH0KIAor Y2xhc3MgZm9wZXJhdG9yX3BsdXMgOiBwdWJsaWMgcmFuZ2Vfb3BlcmF0b3JfZmxvYXQKK3sKKyAg dXNpbmcgcmFuZ2Vfb3BlcmF0b3JfZmxvYXQ6OmZvbGRfcmFuZ2U7CisKK3B1YmxpYzoKKyAgYm9v bCBmb2xkX3JhbmdlIChmcmFuZ2UgJnIsIHRyZWUgdHlwZSwKKwkJICAgY29uc3QgZnJhbmdlICZs aCwKKwkJICAgY29uc3QgZnJhbmdlICZyaCwKKwkJICAgcmVsYXRpb25fdHJpbyA9IFRSSU9fVkFS WUlORykgY29uc3QgZmluYWwgb3ZlcnJpZGU7Cit9IGZvcF9wbHVzOworCitib29sCitmb3BlcmF0 b3JfcGx1czo6Zm9sZF9yYW5nZSAoZnJhbmdlICZyLCB0cmVlIHR5cGUsCisJCQkgICAgY29uc3Qg ZnJhbmdlICZvcDEsIGNvbnN0IGZyYW5nZSAmb3AyLAorCQkJICAgIHJlbGF0aW9uX3RyaW8pIGNv bnN0Cit7CisgIGlmIChlbXB0eV9yYW5nZV92YXJ5aW5nIChyLCB0eXBlLCBvcDEsIG9wMikpCisg ICAgcmV0dXJuIHRydWU7CisgIGlmIChwcm9wYWdhdGVfbmFucyAociwgb3AxLCBvcDIpKQorICAg IHJldHVybiB0cnVlOworCisgIFJFQUxfVkFMVUVfVFlQRSBsYiwgdWI7CisgIGZyYW5nZV9hcml0 aG1ldGljIChQTFVTX0VYUFIsIHR5cGUsIGxiLAorCQkgICAgIG9wMS5sb3dlcl9ib3VuZCAoKSwg b3AyLmxvd2VyX2JvdW5kICgpLCBkY29uc3RuaW5mKTsKKyAgZnJhbmdlX2FyaXRobWV0aWMgKFBM VVNfRVhQUiwgdHlwZSwgdWIsCisJCSAgICAgb3AxLnVwcGVyX2JvdW5kICgpLCBvcDIudXBwZXJf Ym91bmQgKCksIGRjb25zdGluZik7CisKKyAgLy8gSGFuZGxlIHBvc3NpYmxlIE5BTnMgYnkgc2F0 dXJhdGluZyB0byB0aGUgYXBwcm9wcmlhdGUgSU5GIGlmIG9ubHkKKyAgLy8gb25lIGVuZCBpcyBh IE5BTi4gIElmIGJvdGggZW5kcyBhcmUgYSBOQU4sIGp1c3QgcmV0dXJuIGEgTkFOLgorICBib29s IGxiX25hbiA9IHJlYWxfaXNuYW4gKCZsYik7CisgIGJvb2wgdWJfbmFuID0gcmVhbF9pc25hbiAo JnViKTsKKyAgaWYgKGxiX25hbiAmJiB1Yl9uYW4pCisgICAgeworICAgICAgci5zZXRfbmFuICh0 eXBlKTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgaWYgKGxiX25hbikKKyAgICBsYiA9 IGRjb25zdG5pbmY7CisgIGVsc2UgaWYgKHViX25hbikKKyAgICB1YiA9IGRjb25zdGluZjsKKwor ICAvLyBUaGUgc2V0dGVyIHNldHMgTkFOIGJ5IGRlZmF1bHQgZm9yIEhPTk9SX05BTlMuCisgIHIu c2V0ICh0eXBlLCBsYiwgdWIpOworCisgIGlmIChsYl9uYW4gfHwgdWJfbmFuKQorICAgIHVwZGF0 ZV9uYW5fc2lnbiAociwgb3AxLCBvcDIpOworICBlbHNlIGlmICghb3AxLm1heWJlX2lzbmFuICgp ICYmICFvcDIubWF5YmVfaXNuYW4gKCkpCisgICAgci5jbGVhcl9uYW4gKCk7CisKKyAgcmV0dXJu IHRydWU7Cit9CisKIC8vIEluc3RhbnRpYXRlIGEgcmFuZ2Vfb3BfdGFibGUgZm9yIGZsb2F0aW5n IHBvaW50IG9wZXJhdGlvbnMuCiBzdGF0aWMgZmxvYXRpbmdfb3BfdGFibGUgZ2xvYmFsX2Zsb2F0 aW5nX3RhYmxlOwogCkBAIC0xNzc4LDYgKzE5NDIsNyBAQCBmbG9hdGluZ19vcF90YWJsZTo6Zmxv YXRpbmdfb3BfdGFibGUgKCkKIAogICBzZXQgKEFCU19FWFBSLCBmb3BfYWJzKTsKICAgc2V0IChO RUdBVEVfRVhQUiwgZm9wX25lZ2F0ZSk7CisgIHNldCAoUExVU19FWFBSLCBmb3BfcGx1cyk7CiB9 CiAKIC8vIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHJhbmdlX29wZXJhdG9yX2Zsb2F0IGluc3Rh bmNlLCBpZiB0aGVyZSBpcwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1z c2EvdnJwLWZsb2F0LXBsdXMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL3RyZWUtc3NhL3ZycC1m bG9hdC1wbHVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjM3Mzll YTRlODEwCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvdHJlZS1zc2Ev dnJwLWZsb2F0LXBsdXMuYwpAQCAtMCwwICsxLDIxIEBACisvLyB7IGRnLWRvIGNvbXBpbGUgfQor Ly8geyBkZy1vcHRpb25zICItTzIgLWZuby10cmVlLWZyZSAtZm5vLXRyZWUtZG9taW5hdG9yLW9w dHMgLWZuby10aHJlYWQtanVtcHMgLWZkdW1wLXRyZWUtdnJwMiIgfQorCitkb3VibGUgQkdfU3Bs aW5lTGVuZ3RoICgpCit7CisgIGRvdWJsZSBsYXN0UG9pbnQ7CisgIGRvdWJsZSBpOworCisgIGZv ciAoaSA9IDAuMDE7aTw9MTtpKz0wLjFmKQorICAgIGlmICghKGkgIT0gMC4wKSkKKyAgICAgIHsK KyAgICAgICAgbGFzdFBvaW50ID0gaTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAg ICAgIGxhc3RQb2ludCA9IDI7CisgICAgICB9CisgIHJldHVybiBsYXN0UG9pbnQ7Cit9CisKKy8v IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAicmV0dXJuIDJcXC4wZSIgMSAidnJw MiIgfSB9Ci0tIAoyLjM4LjEKCg== --000000000000b5e72a05ecf537ab--