From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qt1-x830.google.com (mail-qt1-x830.google.com [IPv6:2607:f8b0:4864:20::830]) by sourceware.org (Postfix) with ESMTPS id 018513857815 for ; Fri, 30 Apr 2021 08:18:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 018513857815 Received: by mail-qt1-x830.google.com with SMTP id n22so11531599qtk.9 for ; Fri, 30 Apr 2021 01:18:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=mo8HkroHOmhzwqkzkX9ttzJ14SDCNpOeReH5C0/ivdg=; b=kF7IheEdL1oezzUE25KZwlkWfgABpg/3KJI0O7rGoOdm/ARLnFitX3o2TzXdL42UGZ Dr4VRZPFTSY4v9h1uEnvQs1NqIsOF6QrtWnnstJpXn1vH+rrSzR0OgU1abP5RoRY4AGZ aBIanuYdoAiIbPIoCvy/CVk4m9dNj0Zn6iKNyTHxiopU+3cUSDmq4jm2m+jGIRtr4RY9 FHac+msQpJiZQmBi2xZYxm3eXTurNWWk5kkFYxUX1EbdzcLiFVWKrTHaVsX5K3LY+pJp Nur9daXN3jUPPbwMDKuk+EcNJLBVmmML1csy8K/+qhPvxmotNEO5aI0UqMTsiA7nwir4 mg0A== X-Gm-Message-State: AOAM531B/k+TjUIEq6ouBknQJIb2JVQONXd69Y3/20GRkVa9Y97qyweN 7ABIdwXhkrM9ueXfx3218QvwbpVZSB2ewSBgPvwht7+f06unnA== X-Google-Smtp-Source: ABdhPJygIt/ifqE9KqSmNMVEeWMEOp86SMW0cTRrzKHgs0Upkn0QdA5TFfJxcsXtQ7fGFaT8BnVXcE0Zw0GKcxTGG/k= X-Received: by 2002:ac8:6685:: with SMTP id d5mr3565687qtp.60.1619770721274; Fri, 30 Apr 2021 01:18:41 -0700 (PDT) MIME-Version: 1.0 From: Uros Bizjak Date: Fri, 30 Apr 2021 10:18:30 +0200 Message-ID: Subject: [PATCH] i386: Introduce reversed ADC and SBB patterns [PR98060] To: "gcc-patches@gcc.gnu.org" Content-Type: multipart/mixed; boundary="00000000000075a5fc05c12c425d" X-Spam-Status: No, score=-10.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 30 Apr 2021 08:18:43 -0000 --00000000000075a5fc05c12c425d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable The compiler is able to merge LTU comparisons with PLUS or MINUS pattern to form addition with carry (ADC) and subtraction with borrow (SBB) instructio= ns: op =3D op + carry [ADC $0, op] op =3D op - carry [SBB $0, op] The patch introduces reversed ADC and SBB insn patterns: op =3D op + !carry [SBB $-1, op] op =3D op - !carry [ADC $-1, op] allowing the compiler to also merge GEU comparisons. 2021-04-30 Uro=C5=A1 Bizjak gcc/ PR target/98060 * config/i386/i386.md (*add3_carry_0r): New insn pattern. (*addsi3_carry_zext_0r): Ditto. (*sub3_carry_0): Ditto. (*subsi3_carry_zext_0r): Ditto. * config/i386/predicates.md (ix86_carry_flag_unset_operator): New predicate. * config/i386/i386.c (ix86_rtx_costs) : Also consider ix86_carry_flag_unset_operator to calculate the cost of adc/sbb insn. gcc/testsuite/ PR target/98060 * gcc.target/i386/pr98060.c: New test. Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. Pushed to master. Uros. --00000000000075a5fc05c12c425d Content-Type: text/plain; charset="US-ASCII"; name="p.diff.txt" Content-Disposition: attachment; filename="p.diff.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ko41nfs50 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LmMgYi9nY2MvY29uZmlnL2kzODYvaTM4 Ni5jCmluZGV4IDY4ZjMzZjk2ZjVhLi4yZjg5NmVmYjVlMiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9pMzg2L2kzODYuYworKysgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCkBAIC0yMDA1NywxMyAr MjAwNTcsMTYgQEAgaXg4Nl9ydHhfY29zdHMgKHJ0eCB4LCBtYWNoaW5lX21vZGUgbW9kZSwgaW50 IG91dGVyX2NvZGVfaSwgaW50IG9wbm8sCiAJICAgIH0KIAkgIGVsc2UgaWYgKEdFVF9DT0RFIChY RVhQICh4LCAwKSkgPT0gUExVUykKIAkgICAgeworCSAgICAgIHJ0eCBvcCA9IFhFWFAgKFhFWFAg KHgsIDApLCAwKTsKKwogCSAgICAgIC8qIEFkZCB3aXRoIGNhcnJ5LCBpZ25vcmUgdGhlIGNvc3Qg b2YgYWRkaW5nIGEgY2FycnkgZmxhZy4gICovCi0JICAgICAgaWYgKGl4ODZfY2FycnlfZmxhZ19v cGVyYXRvciAoWEVYUCAoWEVYUCAoeCwgMCksIDApLCBtb2RlKSkKKwkgICAgICBpZiAoaXg4Nl9j YXJyeV9mbGFnX29wZXJhdG9yIChvcCwgbW9kZSkKKwkJICB8fCBpeDg2X2NhcnJ5X2ZsYWdfdW5z ZXRfb3BlcmF0b3IgKG9wLCBtb2RlKSkKIAkJKnRvdGFsID0gY29zdC0+YWRkOwogCSAgICAgIGVs c2UKIAkJewogCQkgICp0b3RhbCA9IGNvc3QtPmxlYTsKLQkJICAqdG90YWwgKz0gcnR4X2Nvc3Qg KFhFWFAgKFhFWFAgKHgsIDApLCAwKSwgbW9kZSwKKwkJICAqdG90YWwgKz0gcnR4X2Nvc3QgKG9w LCBtb2RlLAogCQkJCSAgICAgIG91dGVyX2NvZGUsIG9wbm8sIHNwZWVkKTsKIAkJfQogCkBAIC0y MDA4MSw3ICsyMDA4NCw4IEBAIGl4ODZfcnR4X2Nvc3RzIChydHggeCwgbWFjaGluZV9tb2RlIG1v ZGUsIGludCBvdXRlcl9jb2RlX2ksIGludCBvcG5vLAogICAgICAgaWYgKEdFVF9NT0RFX0NMQVNT IChtb2RlKSA9PSBNT0RFX0lOVAogCSAgJiYgR0VUX01PREVfU0laRSAobW9kZSkgPD0gVU5JVFNf UEVSX1dPUkQKIAkgICYmIEdFVF9DT0RFIChYRVhQICh4LCAwKSkgPT0gTUlOVVMKLQkgICYmIGl4 ODZfY2FycnlfZmxhZ19vcGVyYXRvciAoWEVYUCAoWEVYUCAoeCwgMCksIDEpLCBtb2RlKSkKKwkg ICYmIChpeDg2X2NhcnJ5X2ZsYWdfb3BlcmF0b3IgKFhFWFAgKFhFWFAgKHgsIDApLCAxKSwgbW9k ZSkKKwkgICAgICB8fCBpeDg2X2NhcnJ5X2ZsYWdfdW5zZXRfb3BlcmF0b3IgKFhFWFAgKFhFWFAg KHgsIDApLCAxKSwgbW9kZSkpKQogCXsKIAkgICp0b3RhbCA9IGNvc3QtPmFkZDsKIAkgICp0b3Rh bCArPSBydHhfY29zdCAoWEVYUCAoWEVYUCAoeCwgMCksIDApLCBtb2RlLApkaWZmIC0tZ2l0IGEv Z2NjL2NvbmZpZy9pMzg2L2kzODYubWQgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5tZAppbmRleCBi N2YzZTM2YTcwYy4uYmI4OWViOTdjNjkgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9pMzg2 Lm1kCisrKyBiL2djYy9jb25maWcvaTM4Ni9pMzg2Lm1kCkBAIC02NzczLDggKzY3NzMsOCBAQCAo ZGVmaW5lX2luc24gIkBhZGQ8bW9kZT4zX2NhcnJ5IgogKGRlZmluZV9pbnNuICIqYWRkPG1vZGU+ M19jYXJyeV8wIgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTV0kgMCAibm9uaW1tZWRpYXRlX29w ZXJhbmQiICI9PHI+bSIpCiAJKHBsdXM6U1dJCi0JICAobWF0Y2hfb3BlcmF0b3I6U1dJIDMgIml4 ODZfY2FycnlfZmxhZ19vcGVyYXRvciIKLQkgICAgWyhtYXRjaF9vcGVyYW5kIDIgImZsYWdzX3Jl Z19vcGVyYW5kIikgKGNvbnN0X2ludCAwKV0pCisJICAobWF0Y2hfb3BlcmF0b3I6U1dJIDIgIml4 ODZfY2FycnlfZmxhZ19vcGVyYXRvciIKKwkgICAgWyhyZWcgRkxBR1NfUkVHKSAoY29uc3RfaW50 IDApXSkKIAkgIChtYXRjaF9vcGVyYW5kOlNXSSAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIjAi KSkpCiAgICAoY2xvYmJlciAocmVnOkNDIEZMQUdTX1JFRykpXQogICAiIU1FTV9QIChvcGVyYW5k c1swXSkgfHwgcnR4X2VxdWFsX3AgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSkiCkBAIC02Nzg0 LDYgKzY3ODQsMjAgQEAgKGRlZmluZV9pbnNuICIqYWRkPG1vZGU+M19jYXJyeV8wIgogICAgKHNl dF9hdHRyICJwZW50X3BhaXIiICJwdSIpCiAgICAoc2V0X2F0dHIgIm1vZGUiICI8TU9ERT4iKV0p CiAKKyhkZWZpbmVfaW5zbiAiKmFkZDxtb2RlPjNfY2FycnlfMHIiCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOlNXSSAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIj08cj5tIikKKwkocGx1czpTV0kK KwkgIChtYXRjaF9vcGVyYXRvcjpTV0kgMiAiaXg4Nl9jYXJyeV9mbGFnX3Vuc2V0X29wZXJhdG9y IgorCSAgICBbKHJlZyBGTEFHU19SRUcpIChjb25zdF9pbnQgMCldKQorCSAgKG1hdGNoX29wZXJh bmQ6U1dJIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIiAiMCIpKSkKKyAgIChjbG9iYmVyIChyZWc6 Q0MgRkxBR1NfUkVHKSldCisgICIhTUVNX1AgKG9wZXJhbmRzWzBdKSB8fCBydHhfZXF1YWxfcCAo b3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdKSIKKyAgInNiYns8aW1vZGVzdWZmaXg+fVx0eyQtMSwg JTB8JTAsIC0xfSIKKyAgWyhzZXRfYXR0ciAidHlwZSIgImFsdSIpCisgICAoc2V0X2F0dHIgInVz ZV9jYXJyeSIgIjEiKQorICAgKHNldF9hdHRyICJwZW50X3BhaXIiICJwdSIpCisgICAoc2V0X2F0 dHIgIm1vZGUiICI8TU9ERT4iKV0pCisKIChkZWZpbmVfaW5zbiAiKmFkZHNpM19jYXJyeV96ZXh0 IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpESSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQog CSh6ZXJvX2V4dGVuZDpESQpAQCAtNjgxNCw2ICs2ODI4LDIwIEBAIChkZWZpbmVfaW5zbiAiKmFk ZHNpM19jYXJyeV96ZXh0XzAiCiAgICAoc2V0X2F0dHIgInBlbnRfcGFpciIgInB1IikKICAgIChz ZXRfYXR0ciAibW9kZSIgIlNJIildKQogCisoZGVmaW5lX2luc24gIiphZGRzaTNfY2FycnlfemV4 dF8wciIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj1y IikKKwkoemVyb19leHRlbmQ6REkKKwkgIChwbHVzOlNJIChtYXRjaF9vcGVyYXRvcjpTSSAyICJp eDg2X2NhcnJ5X2ZsYWdfdW5zZXRfb3BlcmF0b3IiCisJCSAgICBbKHJlZyBGTEFHU19SRUcpIChj b25zdF9pbnQgMCldKQorCQkgICAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5k IiAiMCIpKSkpCisgICAoY2xvYmJlciAocmVnOkNDIEZMQUdTX1JFRykpXQorICAiVEFSR0VUXzY0 QklUIgorICAic2Jie2x9XHR7JC0xLCAlazB8JWswLCAtMX0iCisgIFsoc2V0X2F0dHIgInR5cGUi ICJhbHUiKQorICAgKHNldF9hdHRyICJ1c2VfY2FycnkiICIxIikKKyAgIChzZXRfYXR0ciAicGVu dF9wYWlyIiAicHUiKQorICAgKHNldF9hdHRyICJtb2RlIiAiU0kiKV0pCisKIDs7IFRoZXJlIGlz IG5vIHBvaW50IHRvIGdlbmVyYXRlIEFEQ1ggaW5zdHJ1Y3Rpb24uIEFEQyBpcyBzaG9ydGVyIGFu ZCBmYXN0ZXIuCiAKIChkZWZpbmVfaW5zbiAiYWRkY2Fycnk8bW9kZT4iCkBAIC02OTE2LDggKzY5 NDQsOCBAQCAoZGVmaW5lX2luc24gIipzdWI8bW9kZT4zX2NhcnJ5XzAiCiAgIFsoc2V0IChtYXRj aF9vcGVyYW5kOlNXSSAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIj08cj5tIikKIAkobWludXM6 U1dJCiAJICAobWF0Y2hfb3BlcmFuZDpTV0kgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiICIwIikK LQkgIChtYXRjaF9vcGVyYXRvcjpTV0kgMyAiaXg4Nl9jYXJyeV9mbGFnX29wZXJhdG9yIgotCSAg ICBbKG1hdGNoX29wZXJhbmQgMiAiZmxhZ3NfcmVnX29wZXJhbmQiKSAoY29uc3RfaW50IDApXSkp KQorCSAgKG1hdGNoX29wZXJhdG9yOlNXSSAyICJpeDg2X2NhcnJ5X2ZsYWdfb3BlcmF0b3IiCisJ ICAgIFsocmVnIEZMQUdTX1JFRykgKGNvbnN0X2ludCAwKV0pKSkKICAgIChjbG9iYmVyIChyZWc6 Q0MgRkxBR1NfUkVHKSldCiAgICIhTUVNX1AgKG9wZXJhbmRzWzBdKSB8fCBydHhfZXF1YWxfcCAo b3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdKSIKICAgInNiYns8aW1vZGVzdWZmaXg+fVx0eyQwLCAl MHwlMCwgMH0iCkBAIC02OTI2LDYgKzY5NTQsMjAgQEAgKGRlZmluZV9pbnNuICIqc3ViPG1vZGU+ M19jYXJyeV8wIgogICAgKHNldF9hdHRyICJwZW50X3BhaXIiICJwdSIpCiAgICAoc2V0X2F0dHIg Im1vZGUiICI8TU9ERT4iKV0pCiAKKyhkZWZpbmVfaW5zbiAiKnN1Yjxtb2RlPjNfY2FycnlfMHIi CisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlNXSSAwICJub25pbW1lZGlhdGVfb3BlcmFuZCIgIj08 cj5tIikKKwkobWludXM6U1dJCisJICAobWF0Y2hfb3BlcmFuZDpTV0kgMSAibm9uaW1tZWRpYXRl X29wZXJhbmQiICIwIikKKwkgIChtYXRjaF9vcGVyYXRvcjpTV0kgMiAiaXg4Nl9jYXJyeV9mbGFn X3Vuc2V0X29wZXJhdG9yIgorCSAgICBbKHJlZyBGTEFHU19SRUcpIChjb25zdF9pbnQgMCldKSkp CisgICAoY2xvYmJlciAocmVnOkNDIEZMQUdTX1JFRykpXQorICAiIU1FTV9QIChvcGVyYW5kc1sw XSkgfHwgcnR4X2VxdWFsX3AgKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSkiCisgICJhZGN7PGlt b2Rlc3VmZml4Pn1cdHskLTEsICUwfCUwLCAtMX0iCisgIFsoc2V0X2F0dHIgInR5cGUiICJhbHUi KQorICAgKHNldF9hdHRyICJ1c2VfY2FycnkiICIxIikKKyAgIChzZXRfYXR0ciAicGVudF9wYWly IiAicHUiKQorICAgKHNldF9hdHRyICJtb2RlIiAiPE1PREU+IildKQorCiAoZGVmaW5lX2luc24g IipzdWJzaTNfY2FycnlfemV4dCIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6REkgMCAicmVnaXN0 ZXJfb3BlcmFuZCIgIj1yIikKIAkoemVyb19leHRlbmQ6REkKQEAgLTY5NTgsNiArNzAwMCwyMSBA QCAoZGVmaW5lX2luc24gIipzdWJzaTNfY2FycnlfemV4dF8wIgogICAgKHNldF9hdHRyICJwZW50 X3BhaXIiICJwdSIpCiAgICAoc2V0X2F0dHIgIm1vZGUiICJTSSIpXSkKIAorKGRlZmluZV9pbnNu ICIqc3Vic2kzX2NhcnJ5X3pleHRfMHIiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOkRJIDAgInJl Z2lzdGVyX29wZXJhbmQiICI9ciIpCisJKHplcm9fZXh0ZW5kOkRJCisJICAobWludXM6U0kKKwkg ICAgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIjAiKQorCSAgICAobWF0 Y2hfb3BlcmF0b3I6U0kgMiAiaXg4Nl9jYXJyeV9mbGFnX3Vuc2V0X29wZXJhdG9yIgorCSAgICAg IFsocmVnIEZMQUdTX1JFRykgKGNvbnN0X2ludCAwKV0pKSkpCisgICAoY2xvYmJlciAocmVnOkND IEZMQUdTX1JFRykpXQorICAiVEFSR0VUXzY0QklUIgorICAiYWRje2x9XHR7JC0xLCAlazB8JWsw LCAtMX0iCisgIFsoc2V0X2F0dHIgInR5cGUiICJhbHUiKQorICAgKHNldF9hdHRyICJ1c2VfY2Fy cnkiICIxIikKKyAgIChzZXRfYXR0ciAicGVudF9wYWlyIiAicHUiKQorICAgKHNldF9hdHRyICJt b2RlIiAiU0kiKV0pCisKIChkZWZpbmVfaW5zbiAiQHN1Yjxtb2RlPjNfY2FycnlfY2NjIgogICBb KHNldCAocmVnOkNDQyBGTEFHU19SRUcpCiAJKGNvbXBhcmU6Q0NDCmRpZmYgLS1naXQgYS9nY2Mv Y29uZmlnL2kzODYvcHJlZGljYXRlcy5tZCBiL2djYy9jb25maWcvaTM4Ni9wcmVkaWNhdGVzLm1k CmluZGV4IDA0YTAzYTcwYjQ2Li42ZGZiYjA4NzNiZSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9p Mzg2L3ByZWRpY2F0ZXMubWQKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L3ByZWRpY2F0ZXMubWQKQEAg LTE0NTUsNiArMTQ1NSwyMiBAQCAoZGVmaW5lX3ByZWRpY2F0ZSAiaXg4Nl9jYXJyeV9mbGFnX29w ZXJhdG9yIgogICByZXR1cm4gY29kZSA9PSBMVFU7CiB9KQogCis7OyBSZXR1cm4gdHJ1ZSBpZiBP UCBpcyBhIHZhbGlkIGNvbXBhcmlzb24gb3BlcmF0b3IKKzs7IHRlc3RpbmcgY2FycnkgZmxhZyB0 byBiZSB1bnNldC4KKyhkZWZpbmVfcHJlZGljYXRlICJpeDg2X2NhcnJ5X2ZsYWdfdW5zZXRfb3Bl cmF0b3IiCisgIChtYXRjaF9jb2RlICJnZXUsZ2UiKQoreworICBtYWNoaW5lX21vZGUgaW5tb2Rl ID0gR0VUX01PREUgKFhFWFAgKG9wLCAwKSk7CisgIGVudW0gcnR4X2NvZGUgY29kZSA9IEdFVF9D T0RFIChvcCk7CisKKyAgaWYgKGlubW9kZSA9PSBDQ0ZQbW9kZSkKKyAgICBjb2RlID0gaXg4Nl9m cF9jb21wYXJlX2NvZGVfdG9faW50ZWdlciAoY29kZSk7CisgIGVsc2UgaWYgKGlubW9kZSAhPSBD Q21vZGUgJiYgaW5tb2RlICE9IENDQ21vZGUgJiYgaW5tb2RlICE9IENDR1ptb2RlKQorICAgIHJl dHVybiBmYWxzZTsKKworICByZXR1cm4gY29kZSA9PSBHRVU7Cit9KQorCiA7OyBSZXR1cm4gdHJ1 ZSBpZiB0aGlzIGNvbXBhcmlzb24gb25seSByZXF1aXJlcyB0ZXN0aW5nIG9uZSBmbGFnIGJpdC4K IChkZWZpbmVfcHJlZGljYXRlICJpeDg2X3RyaXZpYWxfZnBfY29tcGFyaXNvbl9vcGVyYXRvciIK ICAgKG1hdGNoX2NvZGUgImd0LGdlLHVubHQsdW5sZSx1bmVxLGx0Z3Qsb3JkZXJlZCx1bm9yZGVy ZWQiKSkKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByOTgwNjAu YyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByOTgwNjAuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZjgyNjIwY2ViNjQKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjk4MDYwLmMKQEAgLTAsMCArMSw0NyBA QAorLyogUFIgdGFyZ2V0Lzk4MDYwICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBk Zy1vcHRpb25zICItTzIiIH0gKi8KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5v dCAic2V0IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAiYWRj IiAgNCB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAic2JiIiAg NCB9IH0gKi8KKworaW50IHIxICh1bnNpZ25lZCB2MCwgdW5zaWduZWQgdjEsIGludCB2MikKK3sK KyAgcmV0dXJuIHYyICsgKHYwID49IHYxKTsKK30KKworaW50IHIyICh1bnNpZ25lZCB2MCwgdW5z aWduZWQgdjEsIGludCB2MikKK3sKKyAgcmV0dXJuIHYyICsgKHYwIDw9IHYxKTsKK30KKworaW50 IHIzICh1bnNpZ25lZCB2MCwgdW5zaWduZWQgdjEsIGludCB2MikKK3sKKyAgcmV0dXJuIHYyICsg KHYwID4gdjEpOworfQorCitpbnQgcjQgKHVuc2lnbmVkIHYwLCB1bnNpZ25lZCB2MSwgaW50IHYy KQoreworICByZXR1cm4gdjIgKyAodjAgPCB2MSk7Cit9CisKK2ludCByNSAodW5zaWduZWQgdjAs IHVuc2lnbmVkIHYxLCBpbnQgdjIpCit7CisgIHJldHVybiB2MiAtICh2MCA+PSB2MSk7Cit9CisK K2ludCByNiAodW5zaWduZWQgdjAsIHVuc2lnbmVkIHYxLCBpbnQgdjIpCit7CisgIHJldHVybiB2 MiAtICh2MCA8PSB2MSk7Cit9CisKK2ludCByNyAodW5zaWduZWQgdjAsIHVuc2lnbmVkIHYxLCBp bnQgdjIpCit7CisgIHJldHVybiB2MiAtICh2MCA+IHYxKTsKK30KKworaW50IHI4ICh1bnNpZ25l ZCB2MCwgdW5zaWduZWQgdjEsIGludCB2MikKK3sKKyAgcmV0dXJuIHYyIC0gKHYwIDwgdjEpOwor fQo= --00000000000075a5fc05c12c425d--