From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk1-x72e.google.com (mail-qk1-x72e.google.com [IPv6:2607:f8b0:4864:20::72e]) by sourceware.org (Postfix) with ESMTPS id B27493858CDB for ; Thu, 18 May 2023 18:50:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B27493858CDB Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-qk1-x72e.google.com with SMTP id af79cd13be357-759413d99afso750573185a.1 for ; Thu, 18 May 2023 11:50:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1684435837; x=1687027837; h=cc:to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=NWAX4a8yQtymhXcYs98JLf6l9jZ5pc8IGM3Fz30trrQ=; b=lrc0t5aG8PjQq4OelPfOcPxPEEj4lW4rjfFTkEj+WY1IlYJUI9W4srQpHh+66/DC9M A89yFZLkDzpD9vXz4W1Yswg2H5p86OIuaZQivnEsSl9o2v3QSpPgPXR34ua2YytBMWSW l8UeBIWkxN723RFzcqES9cz2qMZ43cP3ocRljzSahHLd+LK+pdPPUv9fRuKJEuTBZb8C JEu6yVrqfBVLUbbpVsm7AqE9OrOHYQkDqcELVF3OYELUp88amV6X7pG1mOGLWcUV457h NlKEYWlAA9EloI3N9+0K6A6//QiTE4/xeBz/eMsEmP3GUb3uUq+38aXlxBjEyJpPwXrS L2bw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684435837; x=1687027837; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=NWAX4a8yQtymhXcYs98JLf6l9jZ5pc8IGM3Fz30trrQ=; b=QGSb+IMZw/dpaa5Gh24Ok9bU4y+ZO2Of9rlXiSdF3coxsNZLWauZOS8SEzUnAgZyjp KPZYKYij6IxnDgw155o/RaQwCt0ILrDrwr/qZT13L5CGGIY74cRod68GbqPk3OI5O26l Xa4OVTHTOLJgprAn18aE+aGpO5Iayv/nNBGkHcD8RGvCCO3j3wPFu4UBDDlQ0ICZ9fgo xBBSzzs63Oh1o2ALIFoZgbwHzarKjpb+LywMCf8J6Cjxu80kVAmGno9kKH0Lrx6lie0o VhUoRzxFzMWzrSOnZP+g+Y3lupQL5ZaWkxJQH/K4ekZLFL+1y7qbqaCo2R4aGdfwUFC7 3FRQ== X-Gm-Message-State: AC+VfDxBdGbBZ0hvVpwguz4ZhHV95lGzuQfIMKC4evKsN+lQZC7NE51w h/ByiV1895T7+Gokzj51x73LaoTtdbwNW6KVekxpLz9SNdmU6g== X-Google-Smtp-Source: ACHHUZ6+HfzTtpV71JV/UMC+EHWofenW/pzq/mATCL03VnD/4DBE646l5KT/e5aGCL+4k8oOX8WUMky4L2LBv4Vz2No= X-Received: by 2002:a05:6214:501a:b0:616:5755:ca5d with SMTP id jo26-20020a056214501a00b006165755ca5dmr141792qvb.4.1684435836695; Thu, 18 May 2023 11:50:36 -0700 (PDT) MIME-Version: 1.0 From: Uros Bizjak Date: Thu, 18 May 2023 20:50:25 +0200 Message-ID: Subject: [COMMITTED] i386: Add infrastructure for QImode partial vector mult and shift operations To: "gcc-patches@gcc.gnu.org" Cc: Hongtao Liu Content-Type: multipart/mixed; boundary="000000000000b1e55905fbfc47a5" X-Spam-Status: No, score=-8.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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: --000000000000b1e55905fbfc47a5 Content-Type: text/plain; charset="UTF-8" QImode partial vector multiplications and shifts can be implemented using their HImode counterparts. Add infrastructure to handle V8QImode and V4QImode vectors by extending (interleaving) their input operands to V8HImode, performing V8HImode operation and truncating output back to the original QImode vector. The patch implements V8QImode and V4QImode multiplication for SSE2 targets, using generic permutation to truncate output operand, but still taking advantage of VPMOVWB down convert instruction, when available. The patch also removes setting of REG_EQAUL note to the last insn of ix86_expand_vecop_qihi expander. This is what generic code does automatically when named pattern is expanded. gcc/ChangeLog: * config/i386/i386-expand.cc (ix86_expand_vecop_qihi_partial): New. (ix86_expand_vecop_qihi): Add op2vec bool variable. Do not set REG_EQUAL note. * config/i386/i386-protos.h (ix86_expand_vecop_qihi_partial): Add prototype. * config/i386/i386.cc (ix86_multiplication_cost): Handle V4QImode and V8QImode. * config/i386/mmx.md (mulv8qi3): New expander. (mulv4qi3): Ditto. * config/i386/sse.md (mulv8qi3): Remove. gcc/testsuite/ChangeLog: * gcc.target/i386/avx512vl-pr95488-1.c: Adjust expected scan-assembler-times frequency and strings. * gcc.target/i386/vect-mulv4qi.c: New test. * gcc.target/i386/vect-mulv8qi.c: New test. Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. Uros. --000000000000b1e55905fbfc47a5 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_lhthkwpi0 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LWV4cGFuZC5jYyBiL2djYy9jb25maWcv aTM4Ni9pMzg2LWV4cGFuZC5jYwppbmRleCA4YTg2OWViM2IzMC4uZDUxMTY4MDE0OTggMTAwNjQ0 Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9pMzg2LWV4cGFuZC5jYworKysgYi9nY2MvY29uZmlnL2kz ODYvaTM4Ni1leHBhbmQuY2MKQEAgLTIzMjcwLDYgKzIzMjcwLDExNiBAQCBpeDg2X2V4cGFuZF92 ZWNfc2hpZnRfcWloaV9jb25zdGFudCAoZW51bSBydHhfY29kZSBjb2RlLAogICByZXR1cm4gdHJ1 ZTsKIH0KIAordm9pZAoraXg4Nl9leHBhbmRfdmVjb3BfcWloaV9wYXJ0aWFsIChlbnVtIHJ0eF9j b2RlIGNvZGUsIHJ0eCBkZXN0LCBydHggb3AxLCBydHggb3AyKQoreworICBtYWNoaW5lX21vZGUg cWltb2RlID0gR0VUX01PREUgKGRlc3QpOworICBydHggcW9wMSwgcW9wMiwgaG9wMSwgaG9wMiwg cWRlc3QsIGhyZXM7CisgIGJvb2wgb3AydmVjID0gR0VUX01PREVfQ0xBU1MgKEdFVF9NT0RFIChv cDIpKSA9PSBNT0RFX1ZFQ1RPUl9JTlQ7CisgIGJvb2wgdW5zX3AgPSB0cnVlOworCisgIHN3aXRj aCAocWltb2RlKQorICAgIHsKKyAgICBjYXNlIEVfVjRRSW1vZGU6CisgICAgY2FzZSBFX1Y4UUlt b2RlOgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGdjY191bnJlYWNoYWJsZSAo KTsKKyAgICB9CisKKyAgcW9wMSA9IGxvd3BhcnRfc3VicmVnIChWMTZRSW1vZGUsIGZvcmNlX3Jl ZyAocWltb2RlLCBvcDEpLCBxaW1vZGUpOworCisgIGlmIChvcDJ2ZWMpCisgICAgcW9wMiA9IGxv d3BhcnRfc3VicmVnIChWMTZRSW1vZGUsIGZvcmNlX3JlZyAocWltb2RlLCBvcDIpLCBxaW1vZGUp OworICBlbHNlCisgICAgcW9wMiA9IG9wMjsKKworICBzd2l0Y2ggKGNvZGUpCisgICAgeworICAg IGNhc2UgTVVMVDoKKyAgICAgIGdjY19hc3NlcnQgKG9wMnZlYyk7CisgICAgICAvKiBVbnBhY2sg ZGF0YSBzdWNoIHRoYXQgd2UndmUgZ290IGEgc291cmNlIGJ5dGUgaW4gZWFjaCBsb3cgYnl0ZSBv ZgorCSBlYWNoIHdvcmQuICBXZSBkb24ndCBjYXJlIHdoYXQgZ29lcyBpbnRvIHRoZSBoaWdoIGJ5 dGUgb2YgZWFjaCB3b3JkLgorCSBSYXRoZXIgdGhhbiB0cnlpbmcgdG8gZ2V0IHplcm8gaW4gdGhl cmUsIG1vc3QgY29udmVuaWVudCBpcyB0byBsZXQKKwkgaXQgYmUgYSBjb3B5IG9mIHRoZSBsb3cg Ynl0ZS4gICovCisgICAgICBob3AxID0gY29weV90b19yZWcgKHFvcDEpOworICAgICAgaG9wMiA9 IGNvcHlfdG9fcmVnIChxb3AyKTsKKyAgICAgIGVtaXRfaW5zbiAoZ2VuX3ZlY19pbnRlcmxlYXZl X2xvd3YxNnFpIChob3AxLCBob3AxLCBob3AxKSk7CisgICAgICBlbWl0X2luc24gKGdlbl92ZWNf aW50ZXJsZWF2ZV9sb3d2MTZxaSAoaG9wMiwgaG9wMiwgaG9wMikpOworICAgICAgYnJlYWs7CisK KyAgICBjYXNlIEFTSElGVFJUOgorICAgICAgdW5zX3AgPSBmYWxzZTsKKyAgICAgIC8qIEZBTExU SFJVICovCisgICAgY2FzZSBBU0hJRlQ6CisgICAgY2FzZSBMU0hJRlRSVDoKKyAgICAgIGhvcDEg PSBnZW5fcmVnX3J0eCAoVjhISW1vZGUpOworICAgICAgaXg4Nl9leHBhbmRfc3NlX3VucGFjayAo aG9wMSwgcW9wMSwgdW5zX3AsIGZhbHNlKTsKKyAgICAgIC8qIHZhc2hyL3Zsc2hyL3Zhc2hsICAq LworICAgICAgaWYgKG9wMnZlYykKKwl7CisJICBob3AyID0gZ2VuX3JlZ19ydHggKFY4SEltb2Rl KTsKKwkgIGl4ODZfZXhwYW5kX3NzZV91bnBhY2sgKGhvcDIsIHFvcDIsIHVuc19wLCBmYWxzZSk7 CisJfQorICAgICAgZWxzZQorCWhvcDIgPSBxb3AyOworCisgICAgICBicmVhazsKKyAgICBkZWZh dWx0OgorICAgICAgZ2NjX3VucmVhY2hhYmxlICgpOworICAgIH0KKworICBpZiAoY29kZSAhPSBN VUxUICYmIG9wMnZlYykKKyAgICB7CisgICAgICAvKiBFeHBhbmQgdmFzaHIvdmxzaHIvdmFzaGwu ICAqLworICAgICAgaHJlcyA9IGdlbl9yZWdfcnR4IChWOEhJbW9kZSk7CisgICAgICBlbWl0X2lu c24gKGdlbl9ydHhfU0VUIChocmVzLAorCQkJICAgICAgc2ltcGxpZnlfZ2VuX2JpbmFyeSAoY29k ZSwgVjhISW1vZGUsCisJCQkJCQkgICBob3AxLCBob3AyKSkpOworICAgIH0KKyAgZWxzZQorICAg IC8qIEV4cGFuZCBtdWx0L2FzaHIvbHNoci9hc2hsLiAgKi8KKyAgICBocmVzID0gZXhwYW5kX3Np bXBsZV9iaW5vcCAoVjhISW1vZGUsIGNvZGUsIGhvcDEsIGhvcDIsCisJCQkJTlVMTF9SVFgsIDEs IE9QVEFCX0RJUkVDVCk7CisKKyAgaWYgKFRBUkdFVF9BVlg1MTJCVyAmJiBUQVJHRVRfQVZYNTEy VkwpCisgICAgeworICAgICAgaWYgKHFpbW9kZSA9PSBWOFFJbW9kZSkKKwlxZGVzdCA9IGRlc3Q7 CisgICAgICBlbHNlCisJcWRlc3QgPSBnZW5fcmVnX3J0eCAoVjhRSW1vZGUpOworCisgICAgICBl bWl0X2luc24gKGdlbl90cnVuY3Y4aGl2OHFpMiAocWRlc3QsIGhyZXMpKTsKKyAgICB9CisgIGVs c2UKKyAgICB7CisgICAgICBzdHJ1Y3QgZXhwYW5kX3ZlY19wZXJtX2QgZDsKKyAgICAgIHJ0eCBx cmVzID0gZ2VuX2xvd3BhcnQgKFYxNlFJbW9kZSwgaHJlcyk7CisgICAgICBib29sIG9rOworICAg ICAgaW50IGk7CisKKyAgICAgIHFkZXN0ID0gZ2VuX3JlZ19ydHggKFYxNlFJbW9kZSk7CisKKyAg ICAgIC8qIE1lcmdlIHRoZSBkYXRhIGJhY2sgaW50byB0aGUgcmlnaHQgcGxhY2UuICAqLworICAg ICAgZC50YXJnZXQgPSBxZGVzdDsKKyAgICAgIGQub3AwID0gcXJlczsKKyAgICAgIGQub3AxID0g cXJlczsKKyAgICAgIGQudm1vZGUgPSBWMTZRSW1vZGU7CisgICAgICBkLm5lbHQgPSAxNjsKKyAg ICAgIGQub25lX29wZXJhbmRfcCA9IGZhbHNlOworICAgICAgZC50ZXN0aW5nX3AgPSBmYWxzZTsK KworICAgICAgZm9yIChpID0gMDsgaSA8IGQubmVsdDsgKytpKQorCWQucGVybVtpXSA9IGkgKiAy OworCisgICAgICBvayA9IGl4ODZfZXhwYW5kX3ZlY19wZXJtX2NvbnN0XzEgKCZkKTsKKyAgICAg IGdjY19hc3NlcnQgKG9rKTsKKyAgICB9CisKKyAgaWYgKHFkZXN0ICE9IGRlc3QpCisgICAgZW1p dF9tb3ZlX2luc24gKGRlc3QsIGdlbl9sb3dwYXJ0IChxaW1vZGUsIHFkZXN0KSk7Cit9CisKIC8q IEV4cGFuZCBhIHZlY3RvciBvcGVyYXRpb24gQ09ERSBmb3IgYSBWKlFJbW9kZSBpbiB0ZXJtcyBv ZiB0aGUKICAgIHNhbWUgb3BlcmF0aW9uIG9uIFYqSEltb2RlLiAgKi8KIApAQCAtMjMyODEsNiAr MjMzOTEsNyBAQCBpeDg2X2V4cGFuZF92ZWNvcF9xaWhpIChlbnVtIHJ0eF9jb2RlIGNvZGUsIHJ0 eCBkZXN0LCBydHggb3AxLCBydHggb3AyKQogICBydHggKCpnZW5faWwpIChydHgsIHJ0eCwgcnR4 KTsKICAgcnR4ICgqZ2VuX2loKSAocnR4LCBydHgsIHJ0eCk7CiAgIHJ0eCBvcDFfbCwgb3AxX2gs IG9wMl9sLCBvcDJfaCwgcmVzX2wsIHJlc19oOworICBib29sIG9wMnZlYyA9IEdFVF9NT0RFX0NM QVNTIChHRVRfTU9ERSAob3AyKSkgPT0gTU9ERV9WRUNUT1JfSU5UOwogICBzdHJ1Y3QgZXhwYW5k X3ZlY19wZXJtX2QgZDsKICAgYm9vbCBmdWxsX2ludGVybGVhdmUgPSB0cnVlOwogICBib29sIHVu c19wID0gdHJ1ZTsKQEAgLTIzMzE1LDYgKzIzNDI2LDcgQEAgaXg4Nl9leHBhbmRfdmVjb3BfcWlo aSAoZW51bSBydHhfY29kZSBjb2RlLCBydHggZGVzdCwgcnR4IG9wMSwgcnR4IG9wMikKICAgc3dp dGNoIChjb2RlKQogICAgIHsKICAgICBjYXNlIE1VTFQ6CisgICAgICBnY2NfYXNzZXJ0IChvcDJ2 ZWMpOwogICAgICAgLyogVW5wYWNrIGRhdGEgc3VjaCB0aGF0IHdlJ3ZlIGdvdCBhIHNvdXJjZSBi eXRlIGluIGVhY2ggbG93IGJ5dGUgb2YKIAkgZWFjaCB3b3JkLiAgV2UgZG9uJ3QgY2FyZSB3aGF0 IGdvZXMgaW50byB0aGUgaGlnaCBieXRlIG9mIGVhY2ggd29yZC4KIAkgUmF0aGVyIHRoYW4gdHJ5 aW5nIHRvIGdldCB6ZXJvIGluIHRoZXJlLCBtb3N0IGNvbnZlbmllbnQgaXMgdG8gbGV0CkBAIC0y MzM2MCw3ICsyMzQ3Miw3IEBAIGl4ODZfZXhwYW5kX3ZlY29wX3FpaGkgKGVudW0gcnR4X2NvZGUg Y29kZSwgcnR4IGRlc3QsIHJ0eCBvcDEsIHJ0eCBvcDIpCiAgICAgICBpeDg2X2V4cGFuZF9zc2Vf dW5wYWNrIChvcDFfbCwgb3AxLCB1bnNfcCwgZmFsc2UpOwogICAgICAgaXg4Nl9leHBhbmRfc3Nl X3VucGFjayAob3AxX2gsIG9wMSwgdW5zX3AsIHRydWUpOwogICAgICAgLyogdmFzaHIvdmxzaHIv dmFzaGwgICovCi0gICAgICBpZiAoR0VUX01PREVfQ0xBU1MgKEdFVF9NT0RFIChvcDIpKSA9PSBN T0RFX1ZFQ1RPUl9JTlQpCisgICAgICBpZiAob3AydmVjKQogCXsKIAkgIHJ0eCB0bXAgPSBmb3Jj ZV9yZWcgKHFpbW9kZSwgb3AyKTsKIAkgIG9wMl9sID0gZ2VuX3JlZ19ydHggKGhpbW9kZSk7CkBA IC0yMzM3Niw4ICsyMzQ4OCw3IEBAIGl4ODZfZXhwYW5kX3ZlY29wX3FpaGkgKGVudW0gcnR4X2Nv ZGUgY29kZSwgcnR4IGRlc3QsIHJ0eCBvcDEsIHJ0eCBvcDIpCiAgICAgICBnY2NfdW5yZWFjaGFi bGUgKCk7CiAgICAgfQogCi0gIGlmIChjb2RlICE9IE1VTFQKLSAgICAgICYmIEdFVF9NT0RFX0NM QVNTIChHRVRfTU9ERSAob3AyKSkgPT0gTU9ERV9WRUNUT1JfSU5UKQorICBpZiAoY29kZSAhPSBN VUxUICYmIG9wMnZlYykKICAgICB7CiAgICAgICAvKiBFeHBhbmQgdmFzaHIvdmxzaHIvdmFzaGwu ICAqLwogICAgICAgcmVzX2wgPSBnZW5fcmVnX3J0eCAoaGltb2RlKTsKQEAgLTIzNDM1LDkgKzIz NTQ2LDYgQEAgaXg4Nl9leHBhbmRfdmVjb3BfcWloaSAoZW51bSBydHhfY29kZSBjb2RlLCBydHgg ZGVzdCwgcnR4IG9wMSwgcnR4IG9wMikKIAogICBvayA9IGl4ODZfZXhwYW5kX3ZlY19wZXJtX2Nv bnN0XzEgKCZkKTsKICAgZ2NjX2Fzc2VydCAob2spOwotCi0gIHNldF91bmlxdWVfcmVnX25vdGUg KGdldF9sYXN0X2luc24gKCksIFJFR19FUVVBTCwKLQkJICAgICAgIGdlbl9ydHhfZm10X2VlIChj b2RlLCBxaW1vZGUsIG9wMSwgb3AyKSk7CiB9CiAKIC8qIEhlbHBlciBmdW5jdGlvbiBvZiBpeDg2 X2V4cGFuZF9tdWxfd2lkZW5fZXZlbm9kZC4gIFJldHVybiB0cnVlCmRpZmYgLS1naXQgYS9nY2Mv Y29uZmlnL2kzODYvaTM4Ni1wcm90b3MuaCBiL2djYy9jb25maWcvaTM4Ni9pMzg2LXByb3Rvcy5o CmluZGV4IDcxYWU5NWZmZWY3Li5kMGY1NzgzMTczZSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9p Mzg2L2kzODYtcHJvdG9zLmgKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYtcHJvdG9zLmgKQEAg LTIxNSw2ICsyMTUsNyBAQCBleHRlcm4gdm9pZCBpeDg2X2V4cGFuZF9yb3VuZCAocnR4LCBydHgp OwogZXh0ZXJuIHZvaWQgaXg4Nl9leHBhbmRfcm91bmRkZl8zMiAocnR4LCBydHgpOwogZXh0ZXJu IHZvaWQgaXg4Nl9leHBhbmRfcm91bmRfc3NlNCAocnR4LCBydHgpOwogCitleHRlcm4gdm9pZCBp eDg2X2V4cGFuZF92ZWNvcF9xaWhpX3BhcnRpYWwgKGVudW0gcnR4X2NvZGUsIHJ0eCwgcnR4LCBy dHgpOwogZXh0ZXJuIHZvaWQgaXg4Nl9leHBhbmRfdmVjb3BfcWloaSAoZW51bSBydHhfY29kZSwg cnR4LCBydHgsIHJ0eCk7CiBleHRlcm4gcnR4IGl4ODZfc3BsaXRfc3RhY2tfZ3VhcmQgKHZvaWQp OwogCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvaTM4Ni5jYyBiL2djYy9jb25maWcvaTM4 Ni9pMzg2LmNjCmluZGV4IDlhYjI0MjQyYjU5Li4zNjlhNzE4Yzg4MCAxMDA2NDQKLS0tIGEvZ2Nj L2NvbmZpZy9pMzg2L2kzODYuY2MKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYuY2MKQEAgLTIw NDY1LDYgKzIwNDY1LDE0IEBAIGl4ODZfbXVsdGlwbGljYXRpb25fY29zdCAoY29uc3Qgc3RydWN0 IHByb2Nlc3Nvcl9jb3N0cyAqY29zdCwKICAgZWxzZSBpZiAoR0VUX01PREVfQ0xBU1MgKG1vZGUp ID09IE1PREVfVkVDVE9SX0lOVCkKICAgICBzd2l0Y2ggKG1vZGUpCiAgICAgICB7CisgICAgICBj YXNlIFY0UUltb2RlOgorICAgICAgY2FzZSBWOFFJbW9kZToKKwkvKiBQYXJ0aWFsIFYqUUltb2Rl IGlzIGVtdWxhdGVkIHdpdGggNC01IGluc25zLiAgKi8KKwlpZiAoKFRBUkdFVF9BVlg1MTJCVyAm JiBUQVJHRVRfQVZYNTEyVkwpIHx8IFRBUkdFVF9YT1ApCisJICByZXR1cm4gaXg4Nl92ZWNfY29z dCAobW9kZSwgY29zdC0+bXVsc3MgKyBjb3N0LT5zc2Vfb3AgKiAzKTsKKwllbHNlCisJICByZXR1 cm4gaXg4Nl92ZWNfY29zdCAobW9kZSwgY29zdC0+bXVsc3MgKyBjb3N0LT5zc2Vfb3AgKiA0KTsK KwogICAgICAgY2FzZSBWMTZRSW1vZGU6CiAJLyogVipRSW1vZGUgaXMgZW11bGF0ZWQgd2l0aCA0 LTExIGluc25zLiAgKi8KIAlpZiAoVEFSR0VUX0FWWDUxMkJXICYmIFRBUkdFVF9BVlg1MTJWTCkK ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9tbXgubWQgYi9nY2MvY29uZmlnL2kzODYvbW14 Lm1kCmluZGV4IGIyOTU0ZmZmOGFlLi40NTc3MzY3MzA0OSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9pMzg2L21teC5tZAorKysgYi9nY2MvY29uZmlnL2kzODYvbW14Lm1kCkBAIC0yMTQ5LDYgKzIx NDksMjYgQEAgKGRlZmluZV9pbnNuICJtdWx2MmhpMyIKICAgIChzZXRfYXR0ciAidHlwZSIgInNz ZW11bCIpCiAgICAoc2V0X2F0dHIgIm1vZGUiICJUSSIpXSkKIAorKGRlZmluZV9leHBhbmQgIm11 bHY4cWkzIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWOFFJIDAgInJlZ2lzdGVyX29wZXJhbmQi KQorCShtdWx0OlY4UUkgKG1hdGNoX29wZXJhbmQ6VjhRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIikK KwkJICAgKG1hdGNoX29wZXJhbmQ6VjhRSSAyICJyZWdpc3Rlcl9vcGVyYW5kIikpKV0KKyAgIlRB UkdFVF9NTVhfV0lUSF9TU0UiCit7CisgIGl4ODZfZXhwYW5kX3ZlY29wX3FpaGlfcGFydGlhbCAo TVVMVCwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSk7CisgIERPTkU7Cit9 KQorCisoZGVmaW5lX2V4cGFuZCAibXVsdjRxaTMiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlY0 UUkgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisJKG11bHQ6VjRRSSAobWF0Y2hfb3BlcmFuZDpWNFFJ IDEgInJlZ2lzdGVyX29wZXJhbmQiKQorCQkgICAobWF0Y2hfb3BlcmFuZDpWNFFJIDIgInJlZ2lz dGVyX29wZXJhbmQiKSkpXQorICAiVEFSR0VUX1NTRTIiCit7CisgIGl4ODZfZXhwYW5kX3ZlY29w X3FpaGlfcGFydGlhbCAoTVVMVCwgb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1sy XSk7CisgIERPTkU7Cit9KQorCiAoZGVmaW5lX2V4cGFuZCAibW14X3NtdWx2NGhpM19oaWdocGFy dCIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjRISSAwICJyZWdpc3Rlcl9vcGVyYW5kIikKIAko dHJ1bmNhdGU6VjRISQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L3NzZS5tZCBiL2djYy9j b25maWcvaTM4Ni9zc2UubWQKaW5kZXggZjE0YTljMjRlYmQuLjI2ZGQwYjFhYTEwIDEwMDY0NAot LS0gYS9nY2MvY29uZmlnL2kzODYvc3NlLm1kCisrKyBiL2djYy9jb25maWcvaTM4Ni9zc2UubWQK QEAgLTE0OTg3LDE2ICsxNDk4Nyw2IEBAIChkZWZpbmVfc3BsaXQKIAkoZXE6VkkxMl9BVlgyICht YXRjaF9kdXAgNCkgKG1hdGNoX2R1cCAxKSkpXQogICAib3BlcmFuZHNbNF0gPSBnZW5fcmVnX3J0 eCAoPE1PREU+bW9kZSk7IikKIAotKGRlZmluZV9leHBhbmQgIm11bHY4cWkzIgotICBbKHNldCAo bWF0Y2hfb3BlcmFuZDpWOFFJIDAgInJlZ2lzdGVyX29wZXJhbmQiKQotCShtdWx0OlY4UUkgKG1h dGNoX29wZXJhbmQ6VjhRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIikKLQkJICAgKG1hdGNoX29wZXJh bmQ6VjhRSSAyICJyZWdpc3Rlcl9vcGVyYW5kIikpKV0KLSAgIlRBUkdFVF9BVlg1MTJWTCAmJiBU QVJHRVRfQVZYNTEyQlcgJiYgVEFSR0VUXzY0QklUIgotewotICBpeDg2X2V4cGFuZF92ZWNvcF9x aWhpIChNVUxULCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKTsKLSAgRE9O RTsKLX0pCi0KIChkZWZpbmVfZXhwYW5kICJtdWw8bW9kZT4zIgogICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpWSTFfQVZYNTEyIDAgInJlZ2lzdGVyX29wZXJhbmQiKQogCShtdWx0OlZJMV9BVlg1MTIg KG1hdGNoX29wZXJhbmQ6VkkxX0FWWDUxMiAxICJyZWdpc3Rlcl9vcGVyYW5kIikKZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L2F2eDUxMnZsLXByOTU0ODgtMS5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEydmwtcHI5NTQ4OC0xLmMKaW5kZXgg ZGM2ODRhMTY3YzguLjVlOWY0ZjI4MDVjIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9hdng1MTJ2bC1wcjk1NDg4LTEuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9hdng1MTJ2bC1wcjk1NDg4LTEuYwpAQCAtMSw3ICsxLDggQEAKIC8qIFBSIHRh cmdldC9wcjk1NDg4ICAqLwogLyogeyBkZy1kbyBjb21waWxlIH0gKi8KIC8qIHsgZGctb3B0aW9u cyAiLU8yIC1tYXZ4NTEyYncgLW1hdng1MTJ2bCIgfSAgKi8KLS8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyAidnBtb3Z6eGJ3IiA4IHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidnBtb3Z6eGJ3IiA0IHsg dGFyZ2V0IHsgISBpYTMyIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci10aW1lcyAidnB1bnBja2xidyIgNCB7IHRhcmdldCB7ICEgaWEzMiB9IH0gfSB9ICovCiAvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZwbXVsbHdcW15cblxdKnltbSIgMiB9 IH0gKi8KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidnBtdWxsd1xbXlxu XF0qeG1tIiAyIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9IH0gKi8KIC8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci10aW1lcyAidnBtb3Z3YiIgNCB7IHRhcmdldCB7ICEgaWEzMiB9IH0gfSB9 ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni92ZWN0LW11bHY0 cWkuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ZlY3QtbXVsdjRxaS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNjRiZjA0NGU5MQotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ZlY3QtbXVsdjRxaS5jCkBA IC0wLDAgKzEsMjQgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMg Ii1PMiAtZnRyZWUtdmVjdG9yaXplIC1tc3NlMiIgfSAqLworCisjZGVmaW5lIE4gNAorCit1bnNp Z25lZCBjaGFyIHVyW05dLCB1YVtOXSwgdWJbTl07CisKK3ZvaWQgbXVsICh2b2lkKQoreworICBp bnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIHVyW2ldID0gdWFbaV0gKiB1 YltpXTsKK30KKwordm9pZCBtdWxfc2xwICh2b2lkKQoreworICB1clswXSA9IHVhWzBdICogdWJb MF07CisgIHVyWzFdID0gdWFbMV0gKiB1YlsxXTsKKyAgdXJbMl0gPSB1YVsyXSAqIHViWzJdOwor ICB1clszXSA9IHVhWzNdICogdWJbM107Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci10aW1lcyAicG11bGx3IiAyIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvdmVjdC1tdWx2OHFpLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni92ZWN0LW11bHY4cWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uMDUwMDM2NDRlYzcKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvaTM4Ni92ZWN0LW11bHY4cWkuYwpAQCAtMCwwICsxLDI4IEBACisvKiB7IGRnLWRvIGNvbXBp bGUgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1mdHJl ZS12ZWN0b3JpemUgLW1zc2UyIiB9ICovCisKKyNkZWZpbmUgTiA4CisKK3Vuc2lnbmVkIGNoYXIg dXJbTl0sIHVhW05dLCB1YltOXTsKKwordm9pZCBtdWwgKHZvaWQpCit7CisgIGludCBpOworCisg IGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCisgICAgdXJbaV0gPSB1YVtpXSAqIHViW2ldOworfQor Cit2b2lkIG11bF9zbHAgKHZvaWQpCit7CisgIHVyWzBdID0gdWFbMF0gKiB1YlswXTsKKyAgdXJb MV0gPSB1YVsxXSAqIHViWzFdOworICB1clsyXSA9IHVhWzJdICogdWJbMl07CisgIHVyWzNdID0g dWFbM10gKiB1YlszXTsKKyAgdXJbNF0gPSB1YVs0XSAqIHViWzRdOworICB1cls1XSA9IHVhWzVd ICogdWJbNV07CisgIHVyWzZdID0gdWFbNl0gKiB1Yls2XTsKKyAgdXJbN10gPSB1YVs3XSAqIHVi WzddOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInBtdWxsdyIg MiB9IH0gKi8K --000000000000b1e55905fbfc47a5--