From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x535.google.com (mail-ed1-x535.google.com [IPv6:2a00:1450:4864:20::535]) by sourceware.org (Postfix) with ESMTPS id AB6903860765 for ; Fri, 18 Aug 2023 17:12:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AB6903860765 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-ed1-x535.google.com with SMTP id 4fb4d7f45d1cf-5280ef23593so1389503a12.3 for ; Fri, 18 Aug 2023 10:12:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692378774; x=1692983574; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=r0YuN8ExLA9SdSxU3TMPF0xs47ab1Py2sY4zAsimdP8=; b=WqseIvSKxo79RIv6n0ZltIQny/4g9gTiP9PFGFZ/LPucRH3NElhwRyoyRPD4lqfO0P OdKS2uoTM1Kuba5lV447WWNJ7bNwPn8EpdgIH2o0HQQgyWUj+miyPdbGFfgr32m+ByW9 a6p+KX063C4vKCW7RHcFKUR0SeHHbX00bOVKuCQJsxXrmVxfz+oWp5rv0UUHgYqDYSI1 zUT1Z575RcQunIL3ecxZ+cKU+LMRRum0YegHxdyKbOwHO+qcmZie7TjWeEqRNrJn0d0/ XSBzDnzpGWHOtjhPL8ZgUhMshxCezgL+kuiiwfWJggViL5aVQ5aEm2oOGoKcLcJvojAb 2zNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692378774; x=1692983574; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=r0YuN8ExLA9SdSxU3TMPF0xs47ab1Py2sY4zAsimdP8=; b=amBskvq4XsV5oeJmZf6qJXyBcBetjEg+1itmcbhclur3fYKtK5/MLTZAq7CkqNa0js 8RigMCTbvxUsJXc+qyReNAhUwuiX2H1VcLKP1LrHE65UPaWEvYccwEpRPj3ZNpLQ8QOq 6gT8+CNBGm1yQJlThQgj4l/AIR4gW2MJyd+jOHnMZ8xw0J7gs3vRfvx5ZmwZFwJhjv2S rRRghNo3/aN/C3fNAEcRXv1Pd3ylQtFK/aUR/gYPnnt6PDf4lZnLj4i7zlDIY+fz4yJc FfSzhUuUiQaOO2aX5gFeeJDf1U6YLXV1On04EAvkR55fRfjQHzPG43nzGnfuooRfsCDY BaoA== X-Gm-Message-State: AOJu0Yxr8cY5ljSMiGTolIAaDN6I+k4pUp31L5lCqmS3YhgqSK+q6URl jjCHCsN93GQBY0Y1cR17URmeaTzCayGiEPEIQnzEmxuM2EjRFQ== X-Google-Smtp-Source: AGHT+IHQ44FmSvTeZL17z5pCsYwWkIpKJy0QwqQfiB2xBl3taIFMRqB4ibgy+fWRLIYzjO7+QBYrcLKszI+iZFRn60I= X-Received: by 2002:aa7:c611:0:b0:522:2111:1063 with SMTP id h17-20020aa7c611000000b0052221111063mr2344863edq.18.1692378773998; Fri, 18 Aug 2023 10:12:53 -0700 (PDT) MIME-Version: 1.0 From: Uros Bizjak Date: Fri, 18 Aug 2023 19:12:42 +0200 Message-ID: Subject: [committed]: i386: Use PUNPCKL?? to implement vector extend and zero_extend for TARGET_SSE2 [PR111023] To: "gcc-patches@gcc.gnu.org" Content-Type: multipart/mixed; boundary="000000000000a69ccc060335a310" X-Spam-Status: No, score=-8.3 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 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: --000000000000a69ccc060335a310 Content-Type: text/plain; charset="UTF-8" Implement vector extend and zero_extend functionality for TARGET_SSE2 using PUNPCKL?? family of instructions. The code for e.g. zero-extend from V2SI to V2DImode improves from: movd %xmm0, %edx pshufd $85, %xmm0, %xmm0 movd %xmm0, %eax movq %rdx, (%rdi) movq %rax, 8(%rdi) to: pxor %xmm1, %xmm1 punpckldq %xmm1, %xmm0 movaps %xmm0, (%rdi) And the code for sign-extend from V2SI to V2DImode from: movd %xmm0, %edx pshufd $85, %xmm0, %xmm0 movd %xmm0, %eax movslq %edx, %rdx cltq movq %rdx, (%rdi) movq %rax, 8(%rdi) to: pxor %xmm1, %xmm1 pcmpgtd %xmm0, %xmm1 punpckldq %xmm1, %xmm0 movaps %xmm0, (%rdi) PR target/111023 gcc/ChangeLog: * config/i386/i386-expand.cc (ix86_split_mmx_punpck): Also handle V2QImode. (ix86_expand_sse_extend): New function. * config/i386/i386-protos.h (ix86_expand_sse_extend): New prototype. * config/i386/mmx.md (v4qiv4hi2): Enable for TARGET_SSE2. Expand through ix86_expand_sse_extend for !TARGET_SSE4_1. (v2hiv2si2): Ditto. (v2qiv2hi2): Ditto. * config/i386/sse.md (v8qiv8hi2): Ditto. (v4hiv4si2): Ditto. (v2siv2di2): Ditto. gcc/testsuite/ChangeLog: * gcc.target/i386/pr111023-2.c: New test. * gcc.target/i386/pr111023-4b.c: New test. * gcc.target/i386/pr111023-8b.c: New test. * gcc.target/i386/pr111023.c: New test. Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}. Uros. --000000000000a69ccc060335a310 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_llgulxaq0 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LWV4cGFuZC5jYyBiL2djYy9jb25maWcv aTM4Ni9pMzg2LWV4cGFuZC5jYwppbmRleCA4NWUzMDU1MmQ2Zi4uNDYwZDQ5NmVmMjIgMTAwNjQ0 Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9pMzg2LWV4cGFuZC5jYworKysgYi9nY2MvY29uZmlnL2kz ODYvaTM4Ni1leHBhbmQuY2MKQEAgLTExMjQsOCArMTEyNCw5IEBAIGl4ODZfc3BsaXRfbW14X3B1 bnBjayAocnR4IG9wZXJhbmRzW10sIGJvb2wgaGlnaF9wKQogCiAgIHN3aXRjaCAobW9kZSkKICAg ICB7Ci0gICAgY2FzZSBFX1Y0UUltb2RlOgogICAgIGNhc2UgRV9WOFFJbW9kZToKKyAgICBjYXNl IEVfVjRRSW1vZGU6CisgICAgY2FzZSBFX1YyUUltb2RlOgogICAgICAgc3NlX21vZGUgPSBWMTZR SW1vZGU7CiAgICAgICBkb3VibGVfc3NlX21vZGUgPSBWMzJRSW1vZGU7CiAgICAgICBtYXNrID0g Z2VuX3J0eF9QQVJBTExFTCAoVk9JRG1vZGUsCkBAIC01NjM2LDcgKzU2MzcsNDMgQEAgaXg4Nl9l eHBhbmRfdmVjX3Blcm0gKHJ0eCBvcGVyYW5kc1tdKQogICAgIH0KIH0KIAotLyogVW5wYWNrIE9Q WzFdIGludG8gdGhlIG5leHQgd2lkZXIgaW50ZWdlciB2ZWN0b3IgdHlwZS4gIFVOU0lHTkVEX1Ag aXMKKy8qIEV4dGVuZCBTUkMgaW50byBuZXh0IHdpZGVyIGludGVnZXIgdmVjdG9yIHR5cGUuICBV TlNJR05FRF9QIGlzCisgICB0cnVlIGlmIHdlIHNob3VsZCBkbyB6ZXJvIGV4dGVuc2lvbiwgZWxz ZSBzaWduIGV4dGVuc2lvbi4gICovCisKK3ZvaWQKK2l4ODZfZXhwYW5kX3NzZV9leHRlbmQgKHJ0 eCBkZXN0LCBydHggc3JjLCBib29sIHVuc2lnbmVkX3ApCit7CisgIG1hY2hpbmVfbW9kZSBpbW9k ZSA9IEdFVF9NT0RFIChzcmMpOworICBydHggb3BzWzNdOworCisgIHN3aXRjaCAoaW1vZGUpCisg ICAgeworICAgIGNhc2UgRV9WOFFJbW9kZToKKyAgICBjYXNlIEVfVjRRSW1vZGU6CisgICAgY2Fz ZSBFX1YyUUltb2RlOgorICAgIGNhc2UgRV9WNEhJbW9kZToKKyAgICBjYXNlIEVfVjJISW1vZGU6 CisgICAgY2FzZSBFX1YyU0ltb2RlOgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg IGdjY191bnJlYWNoYWJsZSAoKTsKKyAgICB9CisKKyAgb3BzWzBdID0gZ2VuX3JlZ19ydHggKGlt b2RlKTsKKworICBvcHNbMV0gPSBmb3JjZV9yZWcgKGltb2RlLCBzcmMpOworCisgIGlmICh1bnNp Z25lZF9wKQorICAgIG9wc1syXSA9IGZvcmNlX3JlZyAoaW1vZGUsIENPTlNUMF9SVFggKGltb2Rl KSk7CisgIGVsc2UKKyAgICBvcHNbMl0gPSBpeDg2X2V4cGFuZF9zc2VfY21wIChnZW5fcmVnX3J0 eCAoaW1vZGUpLCBHVCwgQ09OU1QwX1JUWCAoaW1vZGUpLAorCQkJCSAgc3JjLCBwY19ydHgsIHBj X3J0eCk7CisKKyAgaXg4Nl9zcGxpdF9tbXhfcHVucGNrIChvcHMsIGZhbHNlKTsKKyAgZW1pdF9t b3ZlX2luc24gKGRlc3QsIGxvd3BhcnRfc3VicmVnIChHRVRfTU9ERSAoZGVzdCksIG9wc1swXSwg aW1vZGUpKTsKK30KKworLyogVW5wYWNrIFNSQyBpbnRvIHRoZSBuZXh0IHdpZGVyIGludGVnZXIg dmVjdG9yIHR5cGUuICBVTlNJR05FRF9QIGlzCiAgICB0cnVlIGlmIHdlIHNob3VsZCBkbyB6ZXJv IGV4dGVuc2lvbiwgZWxzZSBzaWduIGV4dGVuc2lvbi4gIEhJR0hfUCBpcwogICAgdHJ1ZSBpZiB3 ZSB3YW50IHRoZSBOLzIgaGlnaCBlbGVtZW50cywgZWxzZSB0aGUgbG93IGVsZW1lbnRzLiAgKi8K IApkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYtcHJvdG9zLmggYi9nY2MvY29uZmln L2kzODYvaTM4Ni1wcm90b3MuaAppbmRleCBmYzJmMWYxM2I3OC4uOWZmYjEyNWZjMmIgMTAwNjQ0 Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9pMzg2LXByb3Rvcy5oCisrKyBiL2djYy9jb25maWcvaTM4 Ni9pMzg2LXByb3Rvcy5oCkBAIC0xNTUsNiArMTU1LDcgQEAgZXh0ZXJuIGJvb2wgaXg4Nl9leHBh bmRfbWFza192ZWNfY21wIChydHgsIGVudW0gcnR4X2NvZGUsIHJ0eCwgcnR4KTsKIGV4dGVybiBi b29sIGl4ODZfZXhwYW5kX2ludF92ZWNfY21wIChydHhbXSk7CiBleHRlcm4gYm9vbCBpeDg2X2V4 cGFuZF9mcF92ZWNfY21wIChydHhbXSk7CiBleHRlcm4gdm9pZCBpeDg2X2V4cGFuZF9zc2VfbW92 Y2MgKHJ0eCwgcnR4LCBydHgsIHJ0eCk7CitleHRlcm4gdm9pZCBpeDg2X2V4cGFuZF9zc2VfZXh0 ZW5kIChydHgsIHJ0eCwgYm9vbCk7CiBleHRlcm4gdm9pZCBpeDg2X2V4cGFuZF9zc2VfdW5wYWNr IChydHgsIHJ0eCwgYm9vbCwgYm9vbCk7CiBleHRlcm4gdm9pZCBpeDg2X2V4cGFuZF9mcF9zcGFj ZXNoaXAgKHJ0eCwgcnR4LCBydHgpOwogZXh0ZXJuIGJvb2wgaXg4Nl9leHBhbmRfaW50X2FkZGNj IChydHhbXSk7CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvbW14Lm1kIGIvZ2NjL2NvbmZp Zy9pMzg2L21teC5tZAppbmRleCAxNzA0MzJhNzEyOC4uZWY1NzgyMjI5NDUgMTAwNjQ0Ci0tLSBh L2djYy9jb25maWcvaTM4Ni9tbXgubWQKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L21teC5tZApAQCAt Mzc0NCw4ICszNzQ0LDE0IEBAIChkZWZpbmVfZXhwYW5kICI8aW5zbj52NHFpdjRoaTIiCiAgIFso c2V0IChtYXRjaF9vcGVyYW5kOlY0SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCiAJKGFueV9leHRl bmQ6VjRISQogCSAgKG1hdGNoX29wZXJhbmQ6VjRRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIikpKV0K LSAgIlRBUkdFVF9TU0U0XzEgJiYgVEFSR0VUX01NWF9XSVRIX1NTRSIKKyAgIlRBUkdFVF9NTVhf V0lUSF9TU0UiCiB7CisgIGlmICghVEFSR0VUX1NTRTRfMSkKKyAgICB7CisgICAgICBpeDg2X2V4 cGFuZF9zc2VfZXh0ZW5kIChvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIDx1X2Jvb2w+KTsKKyAg ICAgIERPTkU7CisgICAgfQorCiAgIHJ0eCBvcDEgPSBmb3JjZV9yZWcgKFY0UUltb2RlLCBvcGVy YW5kc1sxXSk7CiAgIG9wMSA9IGxvd3BhcnRfc3VicmVnIChWOFFJbW9kZSwgb3AxLCBWNFFJbW9k ZSk7CiAgIGVtaXRfaW5zbiAoZ2VuX3NzZTRfMV88Y29kZT52NHFpdjRoaTIgKG9wZXJhbmRzWzBd LCBvcDEpKTsKQEAgLTM3NzAsOCArMzc3NiwxNCBAQCAoZGVmaW5lX2V4cGFuZCAiPGluc24+djJo aXYyc2kyIgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMlNJIDAgInJlZ2lzdGVyX29wZXJhbmQi KQogCShhbnlfZXh0ZW5kOlYyU0kKIAkgIChtYXRjaF9vcGVyYW5kOlYySEkgMSAicmVnaXN0ZXJf b3BlcmFuZCIpKSldCi0gICJUQVJHRVRfU1NFNF8xICYmIFRBUkdFVF9NTVhfV0lUSF9TU0UiCisg ICJUQVJHRVRfTU1YX1dJVEhfU1NFIgogeworICBpZiAoIVRBUkdFVF9TU0U0XzEpCisgICAgewor ICAgICAgaXg4Nl9leHBhbmRfc3NlX2V4dGVuZCAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCA8 dV9ib29sPik7CisgICAgICBET05FOworICAgIH0KKwogICBydHggb3AxID0gZm9yY2VfcmVnIChW MkhJbW9kZSwgb3BlcmFuZHNbMV0pOwogICBvcDEgPSBsb3dwYXJ0X3N1YnJlZyAoVjRISW1vZGUs IG9wMSwgVjJISW1vZGUpOwogICBlbWl0X2luc24gKGdlbl9zc2U0XzFfPGNvZGU+djJoaXYyc2ky IChvcGVyYW5kc1swXSwgb3AxKSk7CkBAIC0zODIyLDggKzM4MzQsMTQgQEAgKGRlZmluZV9leHBh bmQgIjxpbnNuPnYycWl2MmhpMiIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjJISSAwICJyZWdp c3Rlcl9vcGVyYW5kIikKIAkoYW55X2V4dGVuZDpWMkhJCiAJICAobWF0Y2hfb3BlcmFuZDpWMlFJ IDEgInJlZ2lzdGVyX29wZXJhbmQiKSkpXQotICAiVEFSR0VUX1NTRTRfMSIKKyAgIlRBUkdFVF9T U0UyIgogeworICBpZiAoIVRBUkdFVF9TU0U0XzEpCisgICAgeworICAgICAgaXg4Nl9leHBhbmRf c3NlX2V4dGVuZCAob3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdLCA8dV9ib29sPik7CisgICAgICBE T05FOworICAgIH0KKwogICBydHggb3AxID0gZm9yY2VfcmVnIChWMlFJbW9kZSwgb3BlcmFuZHNb MV0pOwogICBvcDEgPSBsb3dwYXJ0X3N1YnJlZyAoVjRRSW1vZGUsIG9wMSwgVjJRSW1vZGUpOwog ICBlbWl0X2luc24gKGdlbl9zc2U0XzFfPGNvZGU+djJxaXYyaGkyIChvcGVyYW5kc1swXSwgb3Ax KSk7CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvc3NlLm1kIGIvZ2NjL2NvbmZpZy9pMzg2 L3NzZS5tZAppbmRleCA2Nzg0YThjNTM2OS4uODdjM2JmMDcwMjAgMTAwNjQ0Ci0tLSBhL2djYy9j b25maWcvaTM4Ni9zc2UubWQKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L3NzZS5tZApAQCAtMjI5MTks OCArMjI5MTksMTUgQEAgKGRlZmluZV9leHBhbmQgIjxpbnNuPnY4cWl2OGhpMiIKICAgWyhzZXQg KG1hdGNoX29wZXJhbmQ6VjhISSAwICJyZWdpc3Rlcl9vcGVyYW5kIikKIAkoYW55X2V4dGVuZDpW OEhJCiAJICAobWF0Y2hfb3BlcmFuZDpWOFFJIDEgIm5vbmltbWVkaWF0ZV9vcGVyYW5kIikpKV0K LSAgIlRBUkdFVF9TU0U0XzEiCisgICJUQVJHRVRfU1NFNF8xIHx8IFRBUkdFVF9NTVhfV0lUSF9T U0UiCiB7CisgIGlmICghVEFSR0VUX1NTRTRfMSkKKyAgICB7CisgICAgICBydHggb3AxID0gZm9y Y2VfcmVnIChWOFFJbW9kZSwgb3BlcmFuZHNbMV0pOworICAgICAgaXg4Nl9leHBhbmRfc3NlX2V4 dGVuZCAob3BlcmFuZHNbMF0sIG9wMSwgPHVfYm9vbD4pOworICAgICAgRE9ORTsKKyAgICB9CisK ICAgaWYgKCFNRU1fUCAob3BlcmFuZHNbMV0pKQogICAgIHsKICAgICAgIHJ0eCBvcDEgPSBmb3Jj ZV9yZWcgKFY4UUltb2RlLCBvcGVyYW5kc1sxXSk7CkBAIC0yMzIyOSw4ICsyMzIzNiwxNSBAQCAo ZGVmaW5lX2V4cGFuZCAiPGluc24+djRoaXY0c2kyIgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpW NFNJIDAgInJlZ2lzdGVyX29wZXJhbmQiKQogCShhbnlfZXh0ZW5kOlY0U0kKIAkgIChtYXRjaF9v cGVyYW5kOlY0SEkgMSAibm9uaW1tZWRpYXRlX29wZXJhbmQiKSkpXQotICAiVEFSR0VUX1NTRTRf MSIKKyAgIlRBUkdFVF9TU0U0XzEgfHwgVEFSR0VUX01NWF9XSVRIX1NTRSIKIHsKKyAgaWYgKCFU QVJHRVRfU1NFNF8xKQorICAgIHsKKyAgICAgIHJ0eCBvcDEgPSBmb3JjZV9yZWcgKFY0SEltb2Rl LCBvcGVyYW5kc1sxXSk7CisgICAgICBpeDg2X2V4cGFuZF9zc2VfZXh0ZW5kIChvcGVyYW5kc1sw XSwgb3AxLCA8dV9ib29sPik7CisgICAgICBET05FOworICAgIH0KKwogICBpZiAoIU1FTV9QIChv cGVyYW5kc1sxXSkpCiAgICAgewogICAgICAgcnR4IG9wMSA9IGZvcmNlX3JlZyAoVjRISW1vZGUs IG9wZXJhbmRzWzFdKTsKQEAgLTIzODI4LDggKzIzODQyLDE1IEBAIChkZWZpbmVfZXhwYW5kICI8 aW5zbj52MnNpdjJkaTIiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlYyREkgMCAicmVnaXN0ZXJf b3BlcmFuZCIpCiAJKGFueV9leHRlbmQ6VjJESQogCSAgKG1hdGNoX29wZXJhbmQ6VjJTSSAxICJu b25pbW1lZGlhdGVfb3BlcmFuZCIpKSldCi0gICJUQVJHRVRfU1NFNF8xIgorICAiVEFSR0VUX1NT RTRfMSB8fCBUQVJHRVRfTU1YX1dJVEhfU1NFIgogeworICBpZiAoIVRBUkdFVF9TU0U0XzEpCisg ICAgeworICAgICAgcnR4IG9wMSA9IGZvcmNlX3JlZyAoVjJTSW1vZGUsIG9wZXJhbmRzWzFdKTsK KyAgICAgIGl4ODZfZXhwYW5kX3NzZV9leHRlbmQgKG9wZXJhbmRzWzBdLCBvcDEsIDx1X2Jvb2w+ KTsKKyAgICAgIERPTkU7CisgICAgfQorCiAgIGlmICghTUVNX1AgKG9wZXJhbmRzWzFdKSkKICAg ICB7CiAgICAgICBydHggb3AxID0gZm9yY2VfcmVnIChWMlNJbW9kZSwgb3BlcmFuZHNbMV0pOwpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHIxMTEwMjMtMi5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHIxMTEwMjMtMi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42YzY5Zjk0NzU0NAotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByMTExMDIzLTIuYwpAQCAtMCwwICsxLDUy IEBACisvKiBQUiB0YXJnZXQvMTExMDIzICovCisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyog eyBkZy1vcHRpb25zICItTzIgLW10dW5lPWljZWxha2Utc2VydmVyIC1mdHJlZS12ZWN0b3JpemUg LW1zc2UyIC1tbm8tc3NlNC4xIiB9ICovCisKK3R5cGVkZWYgY2hhciB2MTZxaSBfX2F0dHJpYnV0 ZV9fKCh2ZWN0b3Jfc2l6ZSAoMTYpKSk7Cit0eXBlZGVmIHNob3J0IHY4aGkgX19hdHRyaWJ1dGVf XygodmVjdG9yX3NpemUgKDE2KSkpOwordHlwZWRlZiBpbnQgdjRzaSBfX2F0dHJpYnV0ZV9fKCh2 ZWN0b3Jfc2l6ZSAoMTYpKSk7Cit0eXBlZGVmIGxvbmcgbG9uZyB2MmRpIF9fYXR0cmlidXRlX18o KHZlY3Rvcl9zaXplICgxNikpKTsKKwordm9pZAordjhoaV92OHFpICh2OGhpICpkc3QsIHYxNnFp IHNyYykKK3sKKyAgc2hvcnQgdGVtWzhdOworICB0ZW1bMF0gPSBzcmNbMF07CisgIHRlbVsxXSA9 IHNyY1sxXTsKKyAgdGVtWzJdID0gc3JjWzJdOworICB0ZW1bM10gPSBzcmNbM107CisgIHRlbVs0 XSA9IHNyY1s0XTsKKyAgdGVtWzVdID0gc3JjWzVdOworICB0ZW1bNl0gPSBzcmNbNl07CisgIHRl bVs3XSA9IHNyY1s3XTsKKyAgZHN0WzBdID0gKih2OGhpICopIHRlbTsKK30KKworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyICJwY21wZ3RiIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlciAicHVucGNrbGJ3IiB9IH0gKi8KKwordm9pZAordjRzaV92NGhpICh2NHNp ICpkc3QsIHY4aGkgc3JjKQoreworICBpbnQgdGVtWzRdOworICB0ZW1bMF0gPSBzcmNbMF07Cisg IHRlbVsxXSA9IHNyY1sxXTsKKyAgdGVtWzJdID0gc3JjWzJdOworICB0ZW1bM10gPSBzcmNbM107 CisgIGRzdFswXSA9ICoodjRzaSAqKSB0ZW07Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlciAicGNtcGd0dyIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIg InB1bnBja2x3ZCIgfSB9ICovCisKK3ZvaWQKK3YyZGlfdjJzaSAodjJkaSAqZHN0LCB2NHNpIHNy YykKK3sKKyAgbG9uZyBsb25nIHRlbVsyXTsKKyAgdGVtWzBdID0gc3JjWzBdOworICB0ZW1bMV0g PSBzcmNbMV07CisgIGRzdFswXSA9ICoodjJkaSAqKSB0ZW07Cit9CisKKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlciAicGNtcGd0ZCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXIgInB1bnBja2xkcSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9wcjExMTAyMy00Yi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvcHIxMTEwMjMtNGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u MDYxZjZhMThmZmYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjExMTAyMy00Yi5jCkBAIC0wLDAgKzEsMTcgQEAKKy8qIFBSIHRhcmdldC8xMTEwMjMg Ki8KKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbXR1bmU9 aWNlbGFrZS1zZXJ2ZXIgLWZ0cmVlLXZlY3Rvcml6ZSAtbXNzZTIgLW1uby1zc2U0LjEiIH0gKi8K KwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHY0cWkgX19hdHRyaWJ1dGVfXygodmVjdG9yX3NpemUg KDQpKSk7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHYyaGkgX19hdHRyaWJ1dGVfXygodmVjdG9y X3NpemUgKDQpKSk7CisKK3ZvaWQKK3YyaGlfdjJxaSAodjJoaSAqZHN0LCB2NHFpIHNyYykKK3sK KyAgdW5zaWduZWQgc2hvcnQgdGVtWzJdOworICB0ZW1bMF0gPSBzcmNbMF07CisgIHRlbVsxXSA9 IHNyY1sxXTsKKyAgZHN0WzBdID0gKih2MmhpICopIHRlbTsKK30KKworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyICJwdW5wY2tsYnciIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2kzODYvcHIxMTEwMjMtOGIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9pMzg2L3ByMTExMDIzLThiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjI2YzVlMjc4NWJlCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvcHIxMTEwMjMtOGIuYwpAQCAtMCwwICsxLDMxIEBACisvKiBQUiB0YXJnZXQv MTExMDIzICovCisvKiB7IGRnLWRvIGNvbXBpbGUgIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9ICov CisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbXR1bmU9aWNlbGFrZS1zZXJ2ZXIgLWZ0cmVlLXZlY3Rv cml6ZSAtbXNzZTIgLW1uby1zc2U0LjEiIH0gKi8KKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHY4 cWkgX19hdHRyaWJ1dGVfXygodmVjdG9yX3NpemUgKDgpKSk7Cit0eXBlZGVmIHVuc2lnbmVkIHNo b3J0IHY0aGkgX19hdHRyaWJ1dGVfXygodmVjdG9yX3NpemUgKDgpKSk7Cit0eXBlZGVmIHVuc2ln bmVkIGludCB2MnNpIF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplICg4KSkpOworCit2b2lkCit2 NGhpX3Y0cWkgKHY0aGkgKmRzdCwgdjhxaSBzcmMpCit7CisgIHVuc2lnbmVkIHNob3J0IHRlbVs0 XTsKKyAgdGVtWzBdID0gc3JjWzBdOworICB0ZW1bMV0gPSBzcmNbMV07CisgIHRlbVsyXSA9IHNy Y1syXTsKKyAgdGVtWzNdID0gc3JjWzNdOworICBkc3RbMF0gPSAqKHY0aGkgKikgdGVtOworfQor CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInB1bnBja2xidyIgfSB9ICovCisKK3Zv aWQKK3Yyc2lfdjJoaSAodjJzaSAqZHN0LCB2NGhpIHNyYykKK3sKKyAgdW5zaWduZWQgaW50IHRl bVsyXTsKKyAgdGVtWzBdID0gc3JjWzBdOworICB0ZW1bMV0gPSBzcmNbMV07CisgIGRzdFswXSA9 ICoodjJzaSAqKSB0ZW07Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAicHVu cGNrbHdkIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L3ByMTExMDIzLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjExMTAyMy5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42MTQ0YzM3MWYzMgotLS0gL2Rl di9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByMTExMDIzLmMKQEAg LTAsMCArMSw0OSBAQAorLyogUFIgdGFyZ2V0LzExMTAyMyAqLworLyogeyBkZy1kbyBjb21waWxl IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tdHVuZT1pY2VsYWtlLXNlcnZlciAtZnRyZWUt dmVjdG9yaXplIC1tc3NlMiAtbW5vLXNzZTQuMSIgfSAqLworCit0eXBlZGVmIHVuc2lnbmVkIGNo YXIgdjE2cWkgX19hdHRyaWJ1dGVfXygodmVjdG9yX3NpemUgKDE2KSkpOwordHlwZWRlZiB1bnNp Z25lZCBzaG9ydCB2OGhpIF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplICgxNikpKTsKK3R5cGVk ZWYgdW5zaWduZWQgaW50IHY0c2kgX19hdHRyaWJ1dGVfXygodmVjdG9yX3NpemUgKDE2KSkpOwor dHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdjJkaSBfX2F0dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6 ZSAoMTYpKSk7CisKK3ZvaWQKK3Y4aGlfdjhxaSAodjhoaSAqZHN0LCB2MTZxaSBzcmMpCit7Cisg IHVuc2lnbmVkIHNob3J0IHRlbVs4XTsKKyAgdGVtWzBdID0gc3JjWzBdOworICB0ZW1bMV0gPSBz cmNbMV07CisgIHRlbVsyXSA9IHNyY1syXTsKKyAgdGVtWzNdID0gc3JjWzNdOworICB0ZW1bNF0g PSBzcmNbNF07CisgIHRlbVs1XSA9IHNyY1s1XTsKKyAgdGVtWzZdID0gc3JjWzZdOworICB0ZW1b N10gPSBzcmNbN107CisgIGRzdFswXSA9ICoodjhoaSAqKSB0ZW07Cit9CisKKy8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlciAicHVucGNrbGJ3IiB9IH0gKi8KKwordm9pZAordjRzaV92NGhp ICh2NHNpICpkc3QsIHY4aGkgc3JjKQoreworICB1bnNpZ25lZCBpbnQgdGVtWzRdOworICB0ZW1b MF0gPSBzcmNbMF07CisgIHRlbVsxXSA9IHNyY1sxXTsKKyAgdGVtWzJdID0gc3JjWzJdOworICB0 ZW1bM10gPSBzcmNbM107CisgIGRzdFswXSA9ICoodjRzaSAqKSB0ZW07Cit9CisKKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlciAicHVucGNrbHdkIiB9IH0gKi8KKwordm9pZAordjJkaV92 MnNpICh2MmRpICpkc3QsIHY0c2kgc3JjKQoreworICB1bnNpZ25lZCBsb25nIGxvbmcgdGVtWzJd OworICB0ZW1bMF0gPSBzcmNbMF07CisgIHRlbVsxXSA9IHNyY1sxXTsKKyAgZHN0WzBdID0gKih2 MmRpICopIHRlbTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJwdW5wY2ts ZHEiIH0gfSAqLwo= --000000000000a69ccc060335a310--