From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-x434.google.com (mail-pf1-x434.google.com [IPv6:2607:f8b0:4864:20::434]) by sourceware.org (Postfix) with ESMTPS id 4761C3858C5E for ; Tue, 10 Oct 2023 22:11:27 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4761C3858C5E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=ventanamicro.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=ventanamicro.com Received: by mail-pf1-x434.google.com with SMTP id d2e1a72fcca58-6910ea9cca1so4601540b3a.1 for ; Tue, 10 Oct 2023 15:11:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ventanamicro.com; s=google; t=1696975886; x=1697580686; darn=gcc.gnu.org; h=to:content-language:subject:from:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=jVHyQQZ3CUPVx3KJrM48H58KLfTOaLNX3L5AYJpZD6I=; b=ZDpPzqkeGi3EREMxtg246pu3qsDOL8iSsZNMQ0SWn1/9HwtWGrP2xtxvJW64rcmHUn E7Ka4EgKzivixk9ZneIj7kOiX+HneuzBwHmkLrkEhKsApFFBg6GO8+Xbu/qVYSyNrWG+ 1jDcWP5Odr6FB5X6SEXVRGv1rbPIo604gTnaaHmYk9LvaX2gAe9ADoAdtWMriwW55Kat D9npiReJhkAPKiKSHGk8UeciKwp8A/1rQZPGj0E5Ha0J+mA4WTDkNXd6iF+wYx6IWe/y ck2ruqUCO6xoE45Kzs/F1xDCuajloOM61Bn45YyK1FKPCn8pXC2y0Q7mXCzAkPPgojvO qyYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1696975886; x=1697580686; h=to:content-language:subject:from:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=jVHyQQZ3CUPVx3KJrM48H58KLfTOaLNX3L5AYJpZD6I=; b=FkmowHfnW9bcc/ITi28tVYKamVfMPFudJ69N/QV7JGBinFAnB3ySloNat7tJFtrtPn z4coadi/nKTcz7SJ0579+N5dhDl1I3mPi2xCKK66rkMeTg7qYSXQ0QVEuiPZNGM6wgCH KvKd8kBuZ2e3lmPXfEKxDCmU/HW+QmCwuvCXkEz7paJt2S9xS+kF1rdfmgw9TJS0+Pav IAtNT+mACnOpFXVQ+2EAodFcy7vWEIlnpjChQmnzRLaCQ82NblihpPDaxhudxg4rvy9v +XzZ5atq0typalrbjj66fxSy7QWNebmaH2ERfoHzAA/s0G3cxleK4FOBl1uFD8HlcKuU ToVg== X-Gm-Message-State: AOJu0YyQiUBtXd06WEgL4+gXMok4YepxnzgXKnOKy+n5rusUPgnuvKqh z+sB58mg4SqqU3I+Wfe7u+ZNPSPaBaPiSF0jdkE= X-Google-Smtp-Source: AGHT+IGaZikxcQoGEC9vZd7rSt6gyaO6seUdFW2rvEHOWgvX0gw4osBh1+IXGXzlpeBgPLP14obwGQ== X-Received: by 2002:a05:6a20:6a28:b0:14c:a53c:498e with SMTP id p40-20020a056a206a2800b0014ca53c498emr19219690pzk.42.1696975885782; Tue, 10 Oct 2023 15:11:25 -0700 (PDT) Received: from [172.31.0.109] ([136.36.130.248]) by smtp.gmail.com with ESMTPSA id f24-20020aa78b18000000b0068fd026b496sm8589916pfd.46.2023.10.10.15.11.23 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 10 Oct 2023 15:11:25 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------qCDxReJKqevzhxFAsNHnqVfu" Message-ID: <001ae968-da60-4e3b-8909-d6b99980ea63@ventanamicro.com> Date: Tue, 10 Oct 2023 16:11:21 -0600 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Jeff Law Subject: [committed] [PR target/93062] RISC-V: Handle long conditional branches for RISC-V Content-Language: en-US To: "gcc-patches@gcc.gnu.org" X-Spam-Status: No, score=-10.5 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SCC_5_SHORT_WORD_LINES,SPF_HELO_NONE,SPF_PASS,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: This is a multi-part message in MIME format. --------------qCDxReJKqevzhxFAsNHnqVfu Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Ventana has had a variant of this patch from Andrew W. in its tree for at least a year. I'm dusting it off and submitting it on Andrew's behalf. There's multiple approaches we could be using here. First we could make $ra fixed and use it as the scratch register for the long branch sequences. Second, we could add a match_scratch to all the conditional branch patterns and allow the register allocator to assign the scratch register from the pool of GPRs. Third we could do register scavenging. This can usually work, though it can get complex in some scenarios. Forth we could use trampolines for extended reach. Andrew's original patch did a bit of the first approach (make $ra fixed) and mostly the second approach. The net is it was probably the worst in terms of impacting code generation -- we lost a register *and* forced every branch instruction to get a scratch register allocated. I had expected the second approach to produce better code than the first, but that wasn't actually the case in practice. It's probably a combination of allocating a GPR at every branch point (even with a life of a single insn, there's a cost) and perhaps the additional operands on conditional branches spoiling simplistic pattern matching in one or more passes. In addition to performing better based on dynamic instruction counts, the first approach is significantly simpler to implement. Given those two positives, that's what I've chosen to go with. Yes it does remove $ra from the set of registers available, but the impact of that is *tiny*. If someone wanted to dive into one of the other approaches to address a real world impact, that's great. If that happens I would strongly suggest also evaluating perlbench from spec2017. It seems particularly sensitive to this issue in terms of approach #2's impact on code generation. I've built & regression tested this variant on the vt1 configuration without regressions. Earlier versions have been bootstrapped as well. Pushed to the trunk, Jeff --------------qCDxReJKqevzhxFAsNHnqVfu Content-Type: text/plain; charset=UTF-8; name="P" Content-Disposition: attachment; filename="P" Content-Transfer-Encoding: base64 Y29tbWl0IDcxZjkwNjQ5OGFkYTllYzI3ODA2NjBiMDNiZDZlMjdhOTNhZDM1MGMKQXV0aG9y OiBBbmRyZXcgV2F0ZXJtYW4gPGFuZHJld0BzaWZpdmUuY29tPgpEYXRlOiAgIFR1ZSBPY3Qg MTAgMTI6MzQ6MDQgMjAyMyAtMDYwMAoKICAgIFJJU0MtVjogZmFyLWJyYW5jaDogSGFuZGxl IGZhciBqdW1wcyBhbmQgYnJhbmNoZXMgZm9yIGZ1bmN0aW9ucyBsYXJnZXIgdGhhbiAxTUIK ICAgIAogICAgT24gUklTQy1WLCBicmFuY2hlcyBmdXJ0aGVyIHRoYW4gKy8tMU1CIHJlcXVp cmUgYSBsb25nZXIgaW5zdHJ1Y3Rpb24KICAgIHNlcXVlbmNlICgzIGluc3RydWN0aW9ucyk6 IHdlIGNhbiByZXVzZSB0aGUganVtcC1jb25zdHJ1Y3Rpb24gaW4gdGhlCiAgICBhc3NtYmxl ciAod2hpY2ggY2xvYmJlcnMgJHJhKSBhbmQgYSB0ZW1wb3JhcnkgdG8gc2V0IHVwIHRoZSBq dW1wCiAgICBkZXN0aW5hdGlvbi4KICAgIAogICAgZ2NjL0NoYW5nZUxvZzoKICAgIAogICAg ICAgICAgICAqIGNvbmZpZy9yaXNjdi9yaXNjdi5jYyAoc3RydWN0IG1hY2hpbmVfZnVuY3Rp b24pOiBUcmFjayBpZiBhCiAgICAgICAgICAgIGZhci1icmFuY2gvanVtcCBpcyB1c2VkIHdp dGhpbiBhIGZ1bmN0aW9uIChhbmQgJHJhIG5lZWRzIHRvIGJlCiAgICAgICAgICAgIHNhdmVk KS4KICAgICAgICAgICAgKHJpc2N2X3ByaW50X29wZXJhbmQpOiBJbXBsZW1lbnQgJ04nIChp bnZlcnNlIGludGVnZXIgYnJhbmNoKS4KICAgICAgICAgICAgKHJpc2N2X2Zhcl9qdW1wX3Vz ZWRfcCk6IEltcGxlbWVudC4KICAgICAgICAgICAgKHJpc2N2X3NhdmVfcmV0dXJuX2FkZHJf cmVnX3ApOiBOZXcgZnVuY3Rpb24uCiAgICAgICAgICAgIChyaXNjdl9zYXZlX3JlZ19wKTog VXNlIHJpc2N2X3NhdmVfcmV0dXJuX2FkZHJfcmVnX3AuCiAgICAgICAgICAgICogY29uZmln L3Jpc2N2L3Jpc2N2LmggKEZJWEVEX1JFR0lTVEVSUyk6IFVwZGF0ZSAkcmEuCiAgICAgICAg ICAgIChDQUxMX1VTRURfUkVHSVNURVJTKTogVXBkYXRlICRyYS4KICAgICAgICAgICAgKiBj b25maWcvcmlzY3YvcmlzY3YubWQ6IEFkZCBuZXcgdHlwZXMgInJldCIgYW5kICJqYWxyIi4K ICAgICAgICAgICAgKGxlbmd0aCBhdHRyaWJ1dGUpOiBIYW5kbGUgbG9uZyBjb25kaXRpb25h bCBhbmQgdW5jb25kaXRpb25hbAogICAgICAgICAgICBicmFuY2hlcy4KICAgICAgICAgICAg KGNvbmRpdGlvbmFsIGJyYW5jaCBwYXR0ZXJuKTogSGFuZGxlIGNhc2Ugd2hlcmUganVtcCBj YW4gbm90CiAgICAgICAgICAgIHJlYWNoIHRoZSBpbnRlbmRlZCB0YXJnZXQuCiAgICAgICAg ICAgIChpbmRpcmVjdF9qdW1wLCB0YWJsZWp1bXApOiBVc2UgbmV3ICJqYWxyIiB0eXBlLgog ICAgICAgICAgICAoc2ltcGxlX3JldHVybik6IFVzZSBuZXcgInJldCIgdHlwZS4KICAgICAg ICAgICAgKHNpbXBsZV9yZXR1cm5faW50ZXJuYWwsIGVoX3JldHVybl9pbnRlcm5hbCk6IExp a2V3aXNlLgogICAgICAgICAgICAoZ3ByX3Jlc3RvcmVfcmV0dXJuLCByaXNjdl9tcmV0KTog TGlrZXdpc2UuCiAgICAgICAgICAgIChyaXNjdl91cmV0LCByaXNjdl9zcmV0KTogTGlrZXdp c2UuCiAgICAgICAgICAgICogY29uZmlnL3Jpc2N2L2dlbmVyaWMubWQgKGdlbmVyaWNfYnJh bmNoKTogQWxzbyByZWNvZ25pemUgamFsciAmIHJldAogICAgICAgICAgICB0eXBlcy4KICAg ICAgICAgICAgKiBjb25maWcvcmlzY3Yvc2lmaXZlLTcubWQgKHNpZml2ZV83X2p1bXApOiBM aWtld2lzZS4KICAgIAogICAgQ28tYXV0aG9yZWQtYnk6IFBoaWxpcHAgVG9tc2ljaCA8cGhp bGlwcC50b21zaWNoQHZydWxsLmV1PgogICAgQ28tYXV0aG9yZWQtYnk6IEplZmYgTGF3IDxq bGF3QHZlbnRhbmFtaWNyby5jb20+CgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yaXNjdi9n ZW5lcmljLm1kIGIvZ2NjL2NvbmZpZy9yaXNjdi9nZW5lcmljLm1kCmluZGV4IDU3ZDNjM2I0 YWRjLi44ODk0MDQ4MzgyOSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9yaXNjdi9nZW5lcmlj Lm1kCisrKyBiL2djYy9jb25maWcvcmlzY3YvZ2VuZXJpYy5tZApAQCAtNDcsNyArNDcsNyBA QCAoZGVmaW5lX2luc25fcmVzZXJ2YXRpb24gImdlbmVyaWNfeGZlciIgMwogCiAoZGVmaW5l X2luc25fcmVzZXJ2YXRpb24gImdlbmVyaWNfYnJhbmNoIiAxCiAgIChhbmQgKGVxX2F0dHIg InR1bmUiICJnZW5lcmljIikKLSAgICAgICAoZXFfYXR0ciAidHlwZSIgImJyYW5jaCxqdW1w LGNhbGwiKSkKKyAgICAgICAoZXFfYXR0ciAidHlwZSIgImJyYW5jaCxqdW1wLGNhbGwsamFs ciIpKQogICAiYWx1IikKIAogKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJnZW5lcmljX2lt dWwiIDEwCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LmNjIGIvZ2NjL2Nv bmZpZy9yaXNjdi9yaXNjdi5jYwppbmRleCBiN2FjZjgzNmQwMi4uZDE3MTM5ZTk0NWUgMTAw NjQ0Ci0tLSBhL2djYy9jb25maWcvcmlzY3YvcmlzY3YuY2MKKysrIGIvZ2NjL2NvbmZpZy9y aXNjdi9yaXNjdi5jYwpAQCAtMTgzLDYgKzE4Myw5IEBAIHN0cnVjdCBHVFkoKCkpICBtYWNo aW5lX2Z1bmN0aW9uIHsKICAgLyogVHJ1ZSBpZiBhdHRyaWJ1dGVzIG9uIGN1cnJlbnQgZnVu Y3Rpb24gaGF2ZSBiZWVuIGNoZWNrZWQuICAqLwogICBib29sIGF0dHJpYnV0ZXNfY2hlY2tl ZF9wOwogCisgIC8qIFRydWUgaWYgUkEgbXVzdCBiZSBzYXZlZCBiZWNhdXNlIG9mIGEgZmFy IGp1bXAuICAqLworICBib29sIGZhcl9qdW1wX3VzZWQ7CisKICAgLyogVGhlIGN1cnJlbnQg ZnJhbWUgaW5mb3JtYXRpb24sIGNhbGN1bGF0ZWQgYnkgcmlzY3ZfY29tcHV0ZV9mcmFtZV9p bmZvLiAgKi8KICAgc3RydWN0IHJpc2N2X2ZyYW1lX2luZm8gZnJhbWU7CiAKQEAgLTU0NDgs NiArNTQ1MSw3IEBAIHJpc2N2X2dldF92X3JlZ25vX2FsaWdubWVudCAobWFjaGluZV9tb2Rl IG1vZGUpCiAJICBhbnkgb3V0ZXJtb3N0IEhJR0guCiAgICAnUicJUHJpbnQgdGhlIGxvdy1w YXJ0IHJlbG9jYXRpb24gYXNzb2NpYXRlZCB3aXRoIE9QLgogICAgJ0MnCVByaW50IHRoZSBp bnRlZ2VyIGJyYW5jaCBjb25kaXRpb24gZm9yIGNvbXBhcmlzb24gT1AuCisgICAnTicJUHJp bnQgdGhlIGludmVyc2Ugb2YgdGhlIGludGVnZXIgYnJhbmNoIGNvbmRpdGlvbiBmb3IgY29t cGFyaXNvbiBPUC4KICAgICdBJwlQcmludCB0aGUgYXRvbWljIG9wZXJhdGlvbiBzdWZmaXgg Zm9yIG1lbW9yeSBtb2RlbCBPUC4KICAgICdJJwlQcmludCB0aGUgTFIgc3VmZml4IGZvciBt ZW1vcnkgbW9kZWwgT1AuCiAgICAnSicJUHJpbnQgdGhlIFNDIHN1ZmZpeCBmb3IgbWVtb3J5 IG1vZGVsIE9QLgpAQCAtNTYwNCw2ICs1NjA4LDExIEBAIHJpc2N2X3ByaW50X29wZXJhbmQg KEZJTEUgKmZpbGUsIHJ0eCBvcCwgaW50IGxldHRlcikKICAgICAgIGZwdXRzIChHRVRfUlRY X05BTUUgKGNvZGUpLCBmaWxlKTsKICAgICAgIGJyZWFrOwogCisgICAgY2FzZSAnTic6Cisg ICAgICAvKiBUaGUgUlRMIG5hbWVzIG1hdGNoIHRoZSBpbnN0cnVjdGlvbiBuYW1lcy4gKi8K KyAgICAgIGZwdXRzIChHRVRfUlRYX05BTUUgKHJldmVyc2VfY29uZGl0aW9uIChjb2RlKSks IGZpbGUpOworICAgICAgYnJlYWs7CisKICAgICBjYXNlICdBJzogewogICAgICAgY29uc3Qg ZW51bSBtZW1tb2RlbCBtb2RlbCA9IG1lbW1vZGVsX2Jhc2UgKElOVFZBTCAob3ApKTsKICAg ICAgIGlmIChyaXNjdl9tZW1tb2RlbF9uZWVkc19hbW9fYWNxdWlyZSAobW9kZWwpCkBAIC01 ODczLDYgKzU4ODIsNjQgQEAgcmlzY3ZfZnJhbWVfc2V0IChydHggbWVtLCBydHggcmVnKQog ICByZXR1cm4gc2V0OwogfQogCisvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGN1cnJlbnQgZnVu Y3Rpb24gbWlnaHQgY29udGFpbiBhIGZhciBqdW1wLiAgKi8KKworc3RhdGljIGJvb2wKK3Jp c2N2X2Zhcl9qdW1wX3VzZWRfcCAoKQoreworICBzaXplX3QgZnVuY19zaXplID0gMDsKKwor ICBpZiAoY2Z1bi0+bWFjaGluZS0+ZmFyX2p1bXBfdXNlZCkKKyAgICByZXR1cm4gdHJ1ZTsK KworICAvKiBXZSBjYW4ndCBjaGFuZ2UgZmFyX2p1bXBfdXNlZCBkdXJpbmcgb3IgYWZ0ZXIg cmVsb2FkLCBhcyB0aGVyZSBpcworICAgICBubyBjaGFuY2UgdG8gY2hhbmdlIHN0YWNrIGZy YW1lIGxheW91dC4gIFNvIHdlIG11c3QgcmVseSBvbiB0aGUKKyAgICAgY29uc2VydmF0aXZl IGhldXJpc3RpYyBiZWxvdyBoYXZpbmcgZG9uZSB0aGUgcmlnaHQgdGhpbmcuICAqLworICBp ZiAocmVsb2FkX2luX3Byb2dyZXNzIHx8IHJlbG9hZF9jb21wbGV0ZWQpCisgICAgcmV0dXJu IGZhbHNlOworCisgIC8qIEVzdGltYXRlIHRoZSBmdW5jdGlvbiBsZW5ndGguICAqLworICBm b3IgKHJ0eF9pbnNuICppbnNuID0gZ2V0X2luc25zICgpOyBpbnNuOyBpbnNuID0gTkVYVF9J TlNOIChpbnNuKSkKKyAgICBmdW5jX3NpemUgKz0gZ2V0X2F0dHJfbGVuZ3RoIChpbnNuKTsK KworICAvKiBDb25zZXJ2YXRpdmVseSBkZXRlcm1pbmUgd2hldGhlciBzb21lIGp1bXAgbWln aHQgZXhjZWVkIDEgTWlCCisgICAgIGRpc3BsYWNlbWVudC4gICovCisgIGlmIChmdW5jX3Np emUgKiAyID49IDB4MTAwMDAwKQorICAgIGNmdW4tPm1hY2hpbmUtPmZhcl9qdW1wX3VzZWQg PSB0cnVlOworCisgIHJldHVybiBjZnVuLT5tYWNoaW5lLT5mYXJfanVtcF91c2VkOworfQor CisvKiBSZXR1cm4gdHJ1ZSwgaWYgdGhlIGN1cnJlbnQgZnVuY3Rpb24gbXVzdCBzYXZlIHRo ZSBpbmNvbWluZyByZXR1cm4KKyAgIGFkZHJlc3MuICAqLworCitzdGF0aWMgYm9vbAorcmlz Y3Zfc2F2ZV9yZXR1cm5fYWRkcl9yZWdfcCAodm9pZCkKK3sKKyAgLyogVGhlICRyYSByZWdp c3RlciBpcyBjYWxsLWNsb2JiZXJlZDogaWYgdGhpcyBpcyBub3QgYSBsZWFmIGZ1bmN0aW9u LAorICAgICBzYXZlIGl0LiAgKi8KKyAgaWYgKCFjcnRsLT5pc19sZWFmKQorICAgIHJldHVy biB0cnVlOworCisgIC8qIFdlIG5lZWQgdG8gc2F2ZSB0aGUgaW5jb21pbmcgcmV0dXJuIGFk ZHJlc3MgaWYgX19idWlsdGluX2VoX3JldHVybgorICAgICBpcyBiZWluZyB1c2VkIHRvIHNl dCBhIGRpZmZlcmVudCByZXR1cm4gYWRkcmVzcy4gICovCisgIGlmIChjcnRsLT5jYWxsc19l aF9yZXR1cm4pCisgICAgcmV0dXJuIHRydWU7CisKKyAgLyogRmFyIGp1bXBzL2JyYW5jaGVz IHVzZSAkcmEgYXMgYSB0ZW1wb3JhcnkgdG8gc2V0IHVwIHRoZSB0YXJnZXQganVtcAorICAg ICBsb2NhdGlvbiAoY2xvYmJlcmluZyB0aGUgaW5jb21pbmcgcmV0dXJuIGFkZHJlc3MpLiAg Ki8KKyAgaWYgKHJpc2N2X2Zhcl9qdW1wX3VzZWRfcCAoKSkKKyAgICByZXR1cm4gdHJ1ZTsK KworICAvKiBOZWVkIG5vdCB0byB1c2UgcmEgZm9yIGxlYWYgd2hlbiBmcmFtZSBwb2ludGVy IGlzIHR1cm5lZCBvZmYgYnkKKyAgICAgb3B0aW9uIHdoYXRldmVyIHRoZSBvbWl0LWxlYWYt ZnJhbWUncyB2YWx1ZS4gICovCisgIGlmIChmcmFtZV9wb2ludGVyX25lZWRlZCAmJiBjcnRs LT5pc19sZWFmCisgICAgICAmJiAhVEFSR0VUX09NSVRfTEVBRl9GUkFNRV9QT0lOVEVSKQor ICAgIHJldHVybiB0cnVlOworCisgIHJldHVybiBmYWxzZTsKK30KKwogLyogUmV0dXJuIHRy dWUgaWYgdGhlIGN1cnJlbnQgZnVuY3Rpb24gbXVzdCBzYXZlIHJlZ2lzdGVyIFJFR05PLiAg Ki8KIAogc3RhdGljIGJvb2wKQEAgLTU4OTMsMTEgKzU5NjAsNyBAQCByaXNjdl9zYXZlX3Jl Z19wICh1bnNpZ25lZCBpbnQgcmVnbm8pCiAgIGlmIChyZWdubyA9PSBIQVJEX0ZSQU1FX1BP SU5URVJfUkVHTlVNICYmIGZyYW1lX3BvaW50ZXJfbmVlZGVkKQogICAgIHJldHVybiB0cnVl OwogCi0gIC8qIE5lZWQgbm90IHRvIHVzZSByYSBmb3IgbGVhZiB3aGVuIGZyYW1lIHBvaW50 ZXIgaXMgdHVybmVkIG9mZiBieSBvcHRpb24KLSAgICAgd2hhdGV2ZXIgdGhlIG9taXQtbGVh Zi1mcmFtZSdzIHZhbHVlLiAgKi8KLSAgYm9vbCBrZWVwX2xlYWZfcmEgPSBmcmFtZV9wb2lu dGVyX25lZWRlZCAmJiBjcnRsLT5pc19sZWFmCi0gICAgJiYgIVRBUkdFVF9PTUlUX0xFQUZf RlJBTUVfUE9JTlRFUjsKLSAgaWYgKHJlZ25vID09IFJFVFVSTl9BRERSX1JFR05VTSAmJiAo Y3J0bC0+Y2FsbHNfZWhfcmV0dXJuIHx8IGtlZXBfbGVhZl9yYSkpCisgIGlmIChyZWdubyA9 PSBSRVRVUk5fQUREUl9SRUdOVU0gJiYgcmlzY3Zfc2F2ZV9yZXR1cm5fYWRkcl9yZWdfcCAo KSkKICAgICByZXR1cm4gdHJ1ZTsKIAogICAvKiBJZiB0aGlzIGlzIGFuIGludGVycnVwdCBo YW5kbGVyLCB0aGVuIG11c3Qgc2F2ZSBleHRyYSByZWdpc3RlcnMuICAqLwpkaWZmIC0tZ2l0 IGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5oIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5o CmluZGV4IDdhYzc4ODQ3YjNhLi5mNDNmZjEwYmM4MyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9yaXNjdi9yaXNjdi5oCisrKyBiL2djYy9jb25maWcvcmlzY3YvcmlzY3YuaApAQCAtMzEw LDcgKzMxMCw3IEBAIEFTTV9NSVNBX1NQRUMKIAogI2RlZmluZSBGSVhFRF9SRUdJU1RFUlMJ CQkJCQkJXAogeyAvKiBHZW5lcmFsIHJlZ2lzdGVycy4gICovCQkJCQkJXAotICAxLCAwLCAx LCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAkJCVwKKyAgMSwgMSwg MSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwJCQlcCiAgIDAsIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCQkJXAogICAvKiBG bG9hdGluZy1wb2ludCByZWdpc3RlcnMuICAqLwkJCQkJXAogICAwLCAwLCAwLCAwLCAwLCAw LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAkJCVwKQEAgLTMyOCw3ICszMjgsNyBA QCBBU01fTUlTQV9TUEVDCiAKICNkZWZpbmUgQ0FMTF9VU0VEX1JFR0lTVEVSUwkJCQkJCVwK IHsgLyogR2VuZXJhbCByZWdpc3RlcnMuICAqLwkJCQkJCVwKLSAgMSwgMCwgMSwgMSwgMSwg MSwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwJCQlcCisgIDEsIDEsIDEsIDEsIDEs IDEsIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsCQkJXAogICAxLCAxLCAwLCAwLCAw LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLAkJCVwKICAgLyogRmxvYXRpbmct cG9pbnQgcmVnaXN0ZXJzLiAgKi8JCQkJCVwKICAgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwg MCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwJCQlcCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3Jp c2N2L3Jpc2N2Lm1kIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5tZAppbmRleCAzMDdkNDMx MGRiYS4uNzZiYzRlNzYwZmYgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvcmlzY3YvcmlzY3Yu bWQKKysrIGIvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5tZApAQCAtMjgyLDcgKzI4Miw5IEBA IChkZWZpbmVfYXR0ciAiZXh0X2VuYWJsZWQiICJubyx5ZXMiCiAKIDs7IENsYXNzaWZpY2F0 aW9uIG9mIGVhY2ggaW5zbi4KIDs7IGJyYW5jaAljb25kaXRpb25hbCBicmFuY2gKLTs7IGp1 bXAJCXVuY29uZGl0aW9uYWwganVtcAorOzsganVtcAkJdW5jb25kaXRpb25hbCBkaXJlY3Qg anVtcAorOzsgamFscgkJdW5jb25kaXRpb25hbCBpbmRpcmVjdCBqdW1wCis7OyByZXQJCXZh cmlvdXMgcmV0dXJucywgbm8gYXJndW1lbnRzCiA7OyBjYWxsCQl1bmNvbmRpdGlvbmFsIGNh bGwKIDs7IGxvYWQJCWxvYWQgaW5zdHJ1Y3Rpb24ocykKIDs7IGZwbG9hZAlmbG9hdGluZyBw b2ludCBsb2FkCkBAIC00MjcsNyArNDI5LDcgQEAgKGRlZmluZV9hdHRyICJleHRfZW5hYmxl ZCIgIm5vLHllcyIKIDs7IHZtb3YgICAgICAgICB3aG9sZSB2ZWN0b3IgcmVnaXN0ZXIgbW92 ZQogOzsgdmVjdG9yICAgICAgIHVua25vd24gdmVjdG9yIGluc3RydWN0aW9uCiAoZGVmaW5l X2F0dHIgInR5cGUiCi0gICJ1bmtub3duLGJyYW5jaCxqdW1wLGNhbGwsbG9hZCxmcGxvYWQs c3RvcmUsZnBzdG9yZSwKKyAgInVua25vd24sYnJhbmNoLGp1bXAsamFscixyZXQsY2FsbCxs b2FkLGZwbG9hZCxzdG9yZSxmcHN0b3JlLAogICAgbXRjLG1mYyxjb25zdCxhcml0aCxsb2dp Y2FsLHNoaWZ0LHNsdCxpbXVsLGlkaXYsbW92ZSxmbW92ZSxmYWRkLGZtdWwsCiAgICBmbWFk ZCxmZGl2LGZjbXAsZmN2dCxmc3FydCxtdWx0aSxhdWlwYyxzZmJfYWx1LG5vcCx0cmFwLGdo b3N0LGJpdG1hbmlwLAogICAgcm90YXRlLGNsbXVsLG1pbixtYXgsbWludSxtYXh1LGNseixj dHosY3BvcCwKQEAgLTUxMywxMSArNTE1LDIyIEBAIChkZWZpbmVfYXR0ciAiZW5hYmxlZCIg Im5vLHllcyIKIDs7IExlbmd0aCBvZiBpbnN0cnVjdGlvbiBpbiBieXRlcy4KIChkZWZpbmVf YXR0ciAibGVuZ3RoIiAiIgogICAgKGNvbmQgWworCSAgOzsgQnJhbmNoZXMgZnVydGhlciB0 aGFuICsvLSAxIE1pQiByZXF1aXJlIHRocmVlIGluc3RydWN0aW9ucy4KIAkgIDs7IEJyYW5j aGVzIGZ1cnRoZXIgdGhhbiArLy0gNCBLaUIgcmVxdWlyZSB0d28gaW5zdHJ1Y3Rpb25zLgog CSAgKGVxX2F0dHIgInR5cGUiICJicmFuY2giKQogCSAgKGlmX3RoZW5fZWxzZSAoYW5kIChs ZSAobWludXMgKG1hdGNoX2R1cCAwKSAocGMpKSAoY29uc3RfaW50IDQwODgpKQogCQkJCSAg KGxlIChtaW51cyAocGMpIChtYXRjaF9kdXAgMCkpIChjb25zdF9pbnQgNDA5MikpKQogCSAg KGNvbnN0X2ludCA0KQorCSAgKGlmX3RoZW5fZWxzZSAoYW5kIChsZSAobWludXMgKG1hdGNo X2R1cCAwKSAocGMpKSAoY29uc3RfaW50IDEwNDg1NjgpKQorCQkJCSAgKGxlIChtaW51cyAo cGMpIChtYXRjaF9kdXAgMCkpIChjb25zdF9pbnQgMTA0ODU3MikpKQorCSAgKGNvbnN0X2lu dCA4KQorCSAgKGNvbnN0X2ludCAxMikpKQorCisJICA7OyBKdW1wcyBmdXJ0aGVyIHRoYW4g Ky8tIDEgTWlCIHJlcXVpcmUgdHdvIGluc3RydWN0aW9ucy4KKwkgIChlcV9hdHRyICJ0eXBl IiAianVtcCIpCisJICAoaWZfdGhlbl9lbHNlIChhbmQgKGxlIChtaW51cyAobWF0Y2hfZHVw IDApIChwYykpIChjb25zdF9pbnQgMTA0ODU2OCkpCisJCQkJICAobGUgKG1pbnVzIChwYykg KG1hdGNoX2R1cCAwKSkgKGNvbnN0X2ludCAxMDQ4NTcyKSkpCisJICAoY29uc3RfaW50IDQp CiAJICAoY29uc3RfaW50IDgpKQogCiAJICA7OyBDb25zZXJ2YXRpdmVseSBhc3N1bWUgY2Fs bHMgdGFrZSB0d28gaW5zdHJ1Y3Rpb25zIChBVUlQQyArIEpBTFIpLgpAQCAtMjYxNSw3ICsy NjI4LDEyIEBAIChkZWZpbmVfaW5zbiAiKmJyYW5jaDxtb2RlPiIKIAkgKGxhYmVsX3JlZiAo bWF0Y2hfb3BlcmFuZCAwICIiICIiKSkKIAkgKHBjKSkpXQogICAiIgotICAiYiVDMVx0JTIs JXozLCUwIgoreworICBpZiAoZ2V0X2F0dHJfbGVuZ3RoIChpbnNuKSA9PSAxMikKKyAgICBy ZXR1cm4gImIlTjFcdCUyLCV6MywxZjsganVtcFx0JWwwLHJhOyAxOiI7CisKKyAgcmV0dXJu ICJiJUMxXHQlMiwlejMsJWwwIjsKK30KICAgWyhzZXRfYXR0ciAidHlwZSIgImJyYW5jaCIp CiAgICAoc2V0X2F0dHIgIm1vZGUiICJub25lIildKQogCkBAIC0yOTAwLDEwICsyOTE4LDE2 IEBAIChkZWZpbmVfaW5zbiAiKnNsZTx1Pl88WDptb2RlPjxHUFI6bW9kZT4iCiA7OyBVbmNv bmRpdGlvbmFsIGJyYW5jaGVzLgogCiAoZGVmaW5lX2luc24gImp1bXAiCi0gIFsoc2V0IChw YykKLQkobGFiZWxfcmVmIChtYXRjaF9vcGVyYW5kIDAgIiIgIiIpKSldCisgIFsoc2V0IChw YykgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAwICIiICIiKSkpXQogICAiIgotICAialx0 JWwwIgoreworICAvKiBIb3BlZnVsbHkgdGhpcyBkb2VzIG5vdCBoYXBwZW4gb2Z0ZW4gYXMg dGhpcyBpcyBnb2luZworICAgICB0byBjbG9iYmVyICRyYSBhbmQgbXVjayB1cCB0aGUgcmV0 dXJuIHN0YWNrIHByZWRpY3RvcnMuICAqLworICBpZiAoZ2V0X2F0dHJfbGVuZ3RoIChpbnNu KSA9PSA4KQorICAgIHJldHVybiAiY2FsbFx0JWwwIjsKKworICByZXR1cm4gImpcdCVsMCI7 Cit9CiAgIFsoc2V0X2F0dHIgInR5cGUiCSJqdW1wIikKICAgIChzZXRfYXR0ciAibW9kZSIJ Im5vbmUiKV0pCiAKQEAgLTI5MjMsNyArMjk0Nyw3IEBAIChkZWZpbmVfaW5zbiAiaW5kaXJl Y3RfanVtcDxtb2RlPiIKICAgWyhzZXQgKHBjKSAobWF0Y2hfb3BlcmFuZDpQIDAgInJlZ2lz dGVyX29wZXJhbmQiICJsIikpXQogICAiIgogICAianJcdCUwIgotICBbKHNldF9hdHRyICJ0 eXBlIiAianVtcCIpCisgIFsoc2V0X2F0dHIgInR5cGUiICJqYWxyIikKICAgIChzZXRfYXR0 ciAibW9kZSIgIm5vbmUiKV0pCiAKIChkZWZpbmVfZXhwYW5kICJ0YWJsZWp1bXAiCkBAIC0y OTQ4LDcgKzI5NzIsNyBAQCAoZGVmaW5lX2luc24gInRhYmxlanVtcDxtb2RlPiIKICAgICh1 c2UgKGxhYmVsX3JlZiAobWF0Y2hfb3BlcmFuZCAxICIiICIiKSkpXQogICAiIgogICAianJc dCUwIgotICBbKHNldF9hdHRyICJ0eXBlIiAianVtcCIpCisgIFsoc2V0X2F0dHIgInR5cGUi ICJqYWxyIikKICAgIChzZXRfYXR0ciAibW9kZSIgIm5vbmUiKV0pCiAKIDs7CkBAIC0zMDA4 LDcgKzMwMzIsNyBAQCAoZGVmaW5lX2luc24gInNpbXBsZV9yZXR1cm4iCiB7CiAgIHJldHVy biByaXNjdl9vdXRwdXRfcmV0dXJuICgpOwogfQotICBbKHNldF9hdHRyICJ0eXBlIgkianVt cCIpCisgIFsoc2V0X2F0dHIgInR5cGUiCSJqYWxyIikKICAgIChzZXRfYXR0ciAibW9kZSIJ Im5vbmUiKV0pCiAKIDs7IE5vcm1hbCByZXR1cm4uCkBAIC0zMDE4LDcgKzMwNDIsNyBAQCAo ZGVmaW5lX2luc24gInNpbXBsZV9yZXR1cm5faW50ZXJuYWwiCiAgICAodXNlIChtYXRjaF9v cGVyYW5kIDAgInBtb2RlX3JlZ2lzdGVyX29wZXJhbmQiICIiKSldCiAgICIiCiAgICJqclx0 JTAiCi0gIFsoc2V0X2F0dHIgInR5cGUiCSJqdW1wIikKKyAgWyhzZXRfYXR0ciAidHlwZSIJ ImphbHIiKQogICAgKHNldF9hdHRyICJtb2RlIgkibm9uZSIpXSkKIAogOzsgVGhpcyBpcyB1 c2VkIGluIGNvbXBpbGluZyB0aGUgdW53aW5kIHJvdXRpbmVzLgpAQCAtMzA3Miw3ICszMDk2 LDcgQEAgKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiZWhfcmV0dXJuX2ludGVybmFsIgogICAi ZXBpbG9ndWVfY29tcGxldGVkIgogICBbKGNvbnN0X2ludCAwKV0KICAgInJpc2N2X2V4cGFu ZF9lcGlsb2d1ZSAoRVhDRVBUSU9OX1JFVFVSTik7IERPTkU7IgotICBbKHNldF9hdHRyICJ0 eXBlIiAianVtcCIpXSkKKyAgWyhzZXRfYXR0ciAidHlwZSIgInJldCIpXSkKIAogOzsKIDs7 ICAuLi4uLi4uLi4uLi4uLi4uLi4uLgpAQCAtMzI1NSw3ICszMjc5LDcgQEAgKGRlZmluZV9p bnNuICJncHJfcmVzdG9yZV9yZXR1cm4iCiAgICAoY29uc3RfaW50IDApXQogICAiIgogICAi IgotICBbKHNldF9hdHRyICJ0eXBlIiAianVtcCIpXSkKKyAgWyhzZXRfYXR0ciAidHlwZSIg InJldCIpXSkKIAogKGRlZmluZV9pbnNuICJyaXNjdl9mcmNzciIKICAgWyhzZXQgKG1hdGNo X29wZXJhbmQ6U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1yIikKQEAgLTMyOTcsMjEgKzMz MjEsMjEgQEAgKGRlZmluZV9pbnNuICJyaXNjdl9tcmV0IgogICAgKHVuc3BlY192b2xhdGls ZSBbKGNvbnN0X2ludCAwKV0gVU5TUEVDVl9NUkVUKV0KICAgIiIKICAgIm1yZXQiCi0gIFso c2V0X2F0dHIgInR5cGUiICJqdW1wIildKQorICBbKHNldF9hdHRyICJ0eXBlIiAicmV0Iild KQogCiAoZGVmaW5lX2luc24gInJpc2N2X3NyZXQiCiAgIFsocmV0dXJuKQogICAgKHVuc3Bl Y192b2xhdGlsZSBbKGNvbnN0X2ludCAwKV0gVU5TUEVDVl9TUkVUKV0KICAgIiIKICAgInNy ZXQiCi0gIFsoc2V0X2F0dHIgInR5cGUiICJqdW1wIildKQorICBbKHNldF9hdHRyICJ0eXBl IiAicmV0IildKQogCiAoZGVmaW5lX2luc24gInJpc2N2X3VyZXQiCiAgIFsocmV0dXJuKQog ICAgKHVuc3BlY192b2xhdGlsZSBbKGNvbnN0X2ludCAwKV0gVU5TUEVDVl9VUkVUKV0KICAg IiIKICAgInVyZXQiCi0gIFsoc2V0X2F0dHIgInR5cGUiICJqdW1wIildKQorICBbKHNldF9h dHRyICJ0eXBlIiAicmV0IildKQogCiAoZGVmaW5lX2luc24gInN0YWNrX3RpZTxtb2RlPiIK ICAgWyhzZXQgKG1lbTpCTEsgKHNjcmF0Y2gpKQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9y aXNjdi9zaWZpdmUtNy5tZCBiL2djYy9jb25maWcvcmlzY3Yvc2lmaXZlLTcubWQKaW5kZXgg NTI2Mjc4ZTQ2ZDQuLmE2MzM5NGM4YzU4IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL3Jpc2N2 L3NpZml2ZS03Lm1kCisrKyBiL2djYy9jb25maWcvcmlzY3Yvc2lmaXZlLTcubWQKQEAgLTQ0 LDcgKzQ0LDcgQEAgKGRlZmluZV9pbnNuX3Jlc2VydmF0aW9uICJzaWZpdmVfN19zZmJfYWx1 IiAyCiAKIChkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAic2lmaXZlXzdfanVtcCIgMQogICAo YW5kIChlcV9hdHRyICJ0dW5lIiAic2lmaXZlXzciKQotICAgICAgIChlcV9hdHRyICJ0eXBl IiAianVtcCxjYWxsIikpCisgICAgICAgKGVxX2F0dHIgInR5cGUiICJqdW1wLGNhbGwsamFs ciIpKQogICAic2lmaXZlXzdfQiIpCiAKIChkZWZpbmVfaW5zbl9yZXNlcnZhdGlvbiAic2lm aXZlXzdfbXVsIiAzCg== --------------qCDxReJKqevzhxFAsNHnqVfu--