From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22179 invoked by alias); 12 Feb 2018 23:59:16 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 22166 invoked by uid 89); 12 Feb 2018 23:59:16 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.0 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-qt0-f179.google.com Received: from mail-qt0-f179.google.com (HELO mail-qt0-f179.google.com) (209.85.216.179) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 12 Feb 2018 23:59:13 +0000 Received: by mail-qt0-f179.google.com with SMTP id d26so130567qtj.4 for ; Mon, 12 Feb 2018 15:59:13 -0800 (PST) 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=esCom59rTT8mBztGXwJB7+LnHrBIm9UGENtkjTbMSrM=; b=Lxmg2ffSU3Zsky51eXm/KVt89/prjfsVyAIE+YEY2d5Y5pyi6u5Q+GVo6kSebsIV4O JWx4xoOoBAURl0qrijC+80I0Gs6cmLowASo31K5LV0ZTOIoJJ18I/T4YRWXFSulpN5l1 IQ8EzLGxzNuphS02f3Jcr/N91E1svkxw52RKwTi00G0I5iuFL3jjgUENGt0B3AEBn5wI 0KLgXuLTJ6mMYrki9WfENCe1d9Ke0HusP9MJHfRBuvrnfWhpB4+OVEYAjfP6Xmx6DYQv j8xUvn5tr4ax1Tg+M/ttFuFyOb0yCGieFN+RmIuYcEd+drdNF1jOCXO7xVRvcE7qMMsN k8Dg== X-Gm-Message-State: APf1xPDrwhWTzYda6DdomB63ZhvyzkJTQd2NA9+y0y2npxVuz2CNa8lz ewlO7iPz6+jwdP2rkv+pY6sZxXYiqYuu70g05GE/AKidoow= X-Google-Smtp-Source: AH8x226+3whsyHyTg5E6Ts73blUEgCto/O7sIr93x2+KFAc/aRsCltWM1P3+Y2eaV0ez/BtDa+iepOORSFxMCBthXdg= X-Received: by 10.200.50.75 with SMTP id y11mr10135678qta.153.1518479951944; Mon, 12 Feb 2018 15:59:11 -0800 (PST) MIME-Version: 1.0 Received: by 10.200.36.185 with HTTP; Mon, 12 Feb 2018 15:58:31 -0800 (PST) From: Kugan Vivekanandarajah Date: Mon, 12 Feb 2018 23:59:00 -0000 Message-ID: Subject: [RFC][AARCH64] Machine reorg pass for aarch64/Falkor to handle prefetcher tag collision To: GCC Patches Content-Type: multipart/mixed; boundary="001a1135672822848b05650caa91" X-IsSubscribed: yes X-SW-Source: 2018-02/txt/msg00696.txt.bz2 --001a1135672822848b05650caa91 Content-Type: text/plain; charset="UTF-8" Content-length: 617 Implements a machine reorg pass for aarch64/Falkor to handle prefetcher tag collision. This is strictly not part of the loop unroller but for Falkor, unrolling can make h/w prefetcher performing badly if there are too much tag collisions based on the discussions in https://gcc.gnu.org/ml/gcc/2017-10/msg00178.html. gcc/ChangeLog: 2018-02-12 Kugan Vivekanandarajah * config/aarch64/aarch64.c (iv_p): New. (strided_load_p): Likwise. (make_tag): Likesie. (get_load_info): Likewise. (aarch64_reorg): Likewise. (TARGET_MACHINE_DEPENDENT_REORG): Implement new target hook. --001a1135672822848b05650caa91 Content-Type: text/x-patch; charset="US-ASCII"; name="0004-reorg-for-tag-collision.patch" Content-Disposition: attachment; filename="0004-reorg-for-tag-collision.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jdkvq03h0 Content-length: 12908 RnJvbSAwY2Q0ZjVhY2IyMTE3YzczOWJhODFiYjRiOGI3MWFmNDk5MTA3ODEy IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLdWdhbiBWaXZla2Fu YW5kYXJhamFoIDxrdWdhbi52aXZla2FuYW5kYXJhamFoQGxpbmFyby5vcmc+ CkRhdGU6IE1vbiwgMTIgRmViIDIwMTggMTA6NDQ6NTMgKzExMDAKU3ViamVj dDogW1BBVENIIDQvNF0gcmVvcmctZm9yLXRhZy1jb2xsaXNpb24KCkNoYW5n ZS1JZDogSWM2ZTQyZDU0MjY4YzkxMTJlYzFjMjVkZTU3N2NhOTJjMTgwOGVl ZmYKLS0tCiBnY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jIHwgMzUzICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEg ZmlsZSBjaGFuZ2VkLCAzNTMgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBh L2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmMgYi9nY2MvY29uZmlnL2Fh cmNoNjQvYWFyY2g2NC5jCmluZGV4IDFjZTJhMGMuLjQ4ZTdjNTQgMTAwNjQ0 Ci0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmMKKysrIGIvZ2Nj L2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuYwpAQCAtNzEsNiArNzEsNyBAQAog I2luY2x1ZGUgInNlbGZ0ZXN0LmgiCiAjaW5jbHVkZSAic2VsZnRlc3QtcnRs LmgiCiAjaW5jbHVkZSAicnR4LXZlY3Rvci1idWlsZGVyLmgiCisjaW5jbHVk ZSAiY2ZncnRsLmgiCiAKIC8qIFRoaXMgZmlsZSBzaG91bGQgYmUgaW5jbHVk ZWQgbGFzdC4gICovCiAjaW5jbHVkZSAidGFyZ2V0LWRlZi5oIgpAQCAtMTcy MDMsNiArMTcyMDQsMzU1IEBAIGFhcmNoNjRfc2VsZWN0X2Vhcmx5X3JlbWF0 X21vZGVzIChzYml0bWFwIG1vZGVzKQogICAgIH0KIH0KIAorc3RhdGljIGJv b2wKK2l2X3AgKHJ0eCByZWcsIHN0cnVjdCBsb29wICpsb29wKQoreworICBk Zl9yZWYgYWRlZjsKKyAgdW5zaWduZWQgcmVnbm8gPSBSRUdOTyAocmVnKTsK KyAgYm9vbCBkZWZfaW5fbG9vcCA9IGZhbHNlOworICBib29sIGRlZl9vdXRf bG9vcCA9IGZhbHNlOworCisgIGlmIChHRVRfTU9ERV9DTEFTUyAoR0VUX01P REUgKHJlZykpICE9IE1PREVfSU5UKQorICAgIHJldHVybiBmYWxzZTsKKwor ICBmb3IgKGFkZWYgPSBERl9SRUdfREVGX0NIQUlOIChyZWdubyk7IGFkZWY7 IGFkZWYgPSBERl9SRUZfTkVYVF9SRUcgKGFkZWYpKQorICAgIHsKKyAgICAg IGlmICghREZfUkVGX0lOU05fSU5GTyAoYWRlZikKKwkgIHx8ICFOT05ERUJV R19JTlNOX1AgKERGX1JFRl9JTlNOIChhZGVmKSkpCisJY29udGludWU7CisK KyAgICAgIGJhc2ljX2Jsb2NrIGJiID0gREZfUkVGX0JCIChhZGVmKTsKKyAg ICAgIGlmIChkb21pbmF0ZWRfYnlfcCAoQ0RJX0RPTUlOQVRPUlMsIGJiLCBs b29wLT5oZWFkZXIpCisJICAmJiBiYi0+bG9vcF9mYXRoZXIgPT0gbG9vcCkK Kwl7CisJICBydHhfaW5zbiAqaW5zbiA9IERGX1JFRl9JTlNOIChhZGVmKTsK KwkgIHJlY29nX21lbW9pemVkIChpbnNuKTsKKwkgIHJ0eCBwYXQgPSBQQVRU RVJOIChpbnNuKTsKKwkgIGlmIChHRVRfQ09ERSAocGF0KSAhPSBTRVQpCisJ ICAgIGNvbnRpbnVlOworCSAgcnR4IHggPSBTRVRfU1JDIChwYXQpOworCSAg aWYgKEdFVF9DT0RFICh4KSA9PSBaRVJPX0VYVFJBQ1QKKwkgICAgICB8fCBH RVRfQ09ERSAoeCkgPT0gWkVST19FWFRFTkQKKwkgICAgICB8fCBHRVRfQ09E RSAoeCkgPT0gU0lHTl9FWFRFTkQpCisJICAgIHggPSBYRVhQICh4LCAwKTsK KwkgIGlmIChNRU1fUCAoeCkpCisJICAgIGNvbnRpbnVlOworCSAgaWYgKEdF VF9DT0RFICh4KSA9PSBQT1NUX0lOQworCSAgICAgIHx8IEdFVF9DT0RFICh4 KSA9PSBQT1NUX0RFQworCSAgICAgIHx8IEdFVF9DT0RFICh4KSA9PSBQUkVf SU5DCisJICAgICAgfHwgR0VUX0NPREUgKHgpID09IFBSRV9ERUMpCisJICAg IGRlZl9pbl9sb29wID0gdHJ1ZTsKKwkgIGVsc2UgaWYgKEJJTkFSWV9QICh4 KSkKKwkgICAgZGVmX2luX2xvb3AgPSB0cnVlOworCX0KKyAgICAgIGlmIChk b21pbmF0ZWRfYnlfcCAoQ0RJX0RPTUlOQVRPUlMsIGxvb3AtPmhlYWRlciwg YmIpKQorCWRlZl9vdXRfbG9vcCA9IHRydWU7CisgICAgICBpZiAoZGVmX2lu X2xvb3AgJiYgZGVmX291dF9sb29wKQorCXJldHVybiB0cnVlOworICAgIH0K KyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBSZXR1cm4gdHJ1ZSBpZiBYIGlz IGEgc3RyaWRlZCBsb2FkLiAgKi8KKworc3RhdGljIGJvb2wKK3N0cmlkZWRf bG9hZF9wIChydHggeCwKKwkJc3RydWN0IGxvb3AgKmxvb3AsCisJCWJvb2wg KnByZV9wb3N0LAorCQlydHggKmJhc2UsCisJCXJ0eCAqb2Zmc2V0KQorewor ICAvKiBMb2FkZGVkIHZhbHVlIGlzIGV4dGVuZGVkLCBnZXQgc3JjLiAgKi8K KyAgaWYgKEdFVF9DT0RFICh4KSA9PSBaRVJPX0VYVFJBQ1QKKyAgICAgIHx8 IEdFVF9DT0RFICh4KSA9PSBaRVJPX0VYVEVORAorICAgICAgfHwgR0VUX0NP REUgKHgpID09IFNJR05fRVhURU5EKQorICAgIHggPSBYRVhQICh4LCAwKTsK KworICAvKiBJZiBpdCBpcyBub3QgTUVNX1AsIGl0IGlzIG5vdCBsb2RhZGUg ZnJvbSBtZW0uICAqLworICBpZiAoIU1FTV9QICh4KSkKKyAgICByZXR1cm4g ZmFsc2U7CisKKyAgLyogR2V0IHRoZSBzcmMgb2YgTUVNX1AuICAqLworICB4 ID0gWEVYUCAoeCwgMCk7CisKKyAgLyogSWYgaXQgaXMgYSBwb3N0L3ByZSBp bmNyZW1lbnQsIGdldCB0aGUgc3JjLiAgKi8KKyAgaWYgKEdFVF9DT0RFICh4 KSA9PSBQT1NUX0lOQworICAgICAgfHwgR0VUX0NPREUgKHgpID09IFBPU1Rf REVDCisgICAgICB8fCBHRVRfQ09ERSAoeCkgPT0gUFJFX0lOQworICAgICAg fHwgR0VUX0NPREUgKHgpID09IFBSRV9ERUMpCisgICAgeworICAgICAgeCA9 IFhFWFAgKHgsIDApOworICAgICAgKnByZV9wb3N0ID0gdHJ1ZTsKKyAgICB9 CisKKyAgLyogZ2V0IGJhc2UgYW5kIG9mZnNldCBkZXBlbmRpbmcgb24gdGhl IHR5cGUuICAqLworICBpZiAoUkVHX1AgKHgpCisgICAgICB8fCBVTkFSWV9Q ICh4KSkKKyAgICB7CisgICAgICBpZiAoIVJFR19QICh4KSkKKwl4ID0gWEVY UCAoeCwgMCk7CisgICAgICBpZiAoUkVHX1AgKHgpCisJICAmJiBpdl9wICh4 LCBsb29wKSkKKwl7CisJICAqYmFzZSA9IHg7CisJICByZXR1cm4gdHJ1ZTsK Kwl9CisgICAgfQorICBlbHNlIGlmIChCSU5BUllfUCAoeCkpCisgICAgewor ICAgICAgcnR4IHJlZzEsIHJlZzI7CisgICAgICByZWcxID0gWEVYUCAoeCwg MCk7CisKKyAgICAgIGlmIChSRUdfUCAocmVnMSkKKwkgICYmIFJFR05PIChy ZWcxKSA9PSBTUF9SRUdOVU0pCisJcmV0dXJuIGZhbHNlOworICAgICAgcmVn MiA9IFhFWFAgKHgsIDEpOworCisgICAgICBpZiAoUkVHX1AgKHJlZzEpCisJ ICAmJiBpdl9wIChyZWcxLCBsb29wKSkKKwl7CisKKwkgICpiYXNlID0gcmVn MTsKKwkgICpvZmZzZXQgPSByZWcyOworCSAgcmV0dXJuIHRydWU7CisJfQor CisgICAgICBpZiAoUkVHX1AgKHJlZzEpCisJICAmJiBSRUdfUCAocmVnMikK KwkgICYmIGl2X3AgKHJlZzIsIGxvb3ApKQorCXsKKwkgICpiYXNlID0gcmVn MTsKKwkgICpvZmZzZXQgPSByZWcyOworCSAgcmV0dXJuIHRydWU7CisJfQor ICAgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdW5zaWduZWQK K21ha2VfdGFnICh1bnNpZ25lZCBkZXN0LCB1bnNpZ25lZCBiYXNlLCB1bnNp Z25lZCBvZmZzZXQpCit7CisgIHJldHVybiAoZGVzdCAmIDB4ZikKKyAgICB8 ICgoYmFzZSAmIDB4ZikgPDwgNCkKKyAgICB8ICgob2Zmc2V0ICYgMHgzZikg PDwgOCk7Cit9CisKKworLyogUmV0dXJuIHRydWUgaWYgWCBJTlNOIGlzIGEg c3RyaWRlZCBsb2FkLiAgKi8KKworc3RhdGljIGJvb2wKK2dldF9sb2FkX2lu Zm8gKHJ0eF9pbnNuICppbnNuLAorCSAgICAgICBzdHJ1Y3QgbG9vcCAqbG9v cCwKKwkgICAgICAgYm9vbCAqcHJlX3Bvc3QsCisJICAgICAgIHJ0eCAqYmFz ZSwKKwkgICAgICAgcnR4ICpkZXN0LAorCSAgICAgICBydHggKm9mZnNldCkK K3sKKyAgc3VicnR4X3Zhcl9pdGVyYXRvcjo6YXJyYXlfdHlwZSBhcnJheTsK KyAgaWYgKCFJTlNOX1AgKGluc24pIHx8IHJlY29nX21lbW9pemVkIChpbnNu KSA8IDApCisgICAgcmV0dXJuIGZhbHNlOworICBydHggcGF0ID0gUEFUVEVS TiAoaW5zbik7CisgIHN3aXRjaCAoR0VUX0NPREUgKHBhdCkpCisgICAgewor ICAgIGNhc2UgUEFSQUxMRUw6CisJeworCSAgZm9yIChpbnQgaiA9IDA7IGog PCBYVkVDTEVOIChwYXQsIDApOyArK2opCisJICAgIHsKKwkgICAgICBydHgg ZXggPSBYVkVDRVhQIChwYXQsIDAsIGopOworCSAgICAgIEZPUl9FQUNIX1NV QlJUWF9WQVIgKGl0ZXIsIGFycmF5LCBleCwgTk9OQ09OU1QpCisJCXsKKwkJ ICBjb25zdF9ydHggeCA9ICppdGVyOworCQkgIGlmIChHRVRfQ09ERSAoeCkg PT0gU0VUCisJCSAgICAgICYmIHN0cmlkZWRfbG9hZF9wIChTRVRfU1JDICh4 KSwgbG9vcCwgcHJlX3Bvc3QsCisJCQkJCSBiYXNlLCBvZmZzZXQpKQorCQkg ICAgeworCQkgICAgICAqZGVzdCA9IFNFVF9ERVNUICh4KTsKKwkJICAgICAg cmV0dXJuIHRydWU7CisJCSAgICB9CisJCX0KKwkgICAgfQorCX0KKyAgICAg IGJyZWFrOworCisgICAgY2FzZSBTRVQ6CisgICAgICBGT1JfRUFDSF9TVUJS VFhfVkFSIChpdGVyLCBhcnJheSwgU0VUX1NSQyAocGF0KSwgTk9OQ09OU1Qp CisJeworCSAgcnR4IHggPSAqaXRlcjsKKwkgIGlmIChzdHJpZGVkX2xvYWRf cCAoeCwgbG9vcCwgcHJlX3Bvc3QsCisJCQkgICAgICBiYXNlLCBvZmZzZXQp KQorCSAgICB7CisJICAgICAgKmRlc3QgPSBTRVRfREVTVCAocGF0KTsKKwkg ICAgICByZXR1cm4gdHJ1ZTsKKwkgICAgfQorCX0KKworICAgIGRlZmF1bHQ6 CisgICAgICBicmVhazsKKyAgICB9CisgIHJldHVybiBmYWxzZTsKK30KKwor c3RhdGljIHZvaWQKK2FhcmNoNjRfcmVvcmcgKHZvaWQpCit7CisgIGJhc2lj X2Jsb2NrICpib2R5LCBiYjsKKyAgc3RydWN0IGxvb3AgKmxvb3A7CisgIHJ0 eF9pbnNuICppbnNuOworCisgIGlmIChhYXJjaDY0X3R1bmUgIT0gZmFsa29y KQorICAgIHJldHVybjsKKworICBjb21wdXRlX2JiX2Zvcl9pbnNuICgpOwor ICAvKiBDb21wdXRlIGxpdmUgcmVncy4gICovCisgIGRmX2NvbXB1dGVfcmVn c19ldmVyX2xpdmUgKHRydWUpOworICBkZl9hbmFseXplICgpOworCisgIC8q IEZpbmQgdGhlIGxvb3BzLiAgKi8KKyAgbG9vcF9vcHRpbWl6ZXJfaW5pdCAo QVZPSURfQ0ZHX01PRElGSUNBVElPTlMpOworICBjYWxjdWxhdGVfZG9taW5h bmNlX2luZm8gKENESV9ET01JTkFUT1JTKTsKKyAgRk9SX0VBQ0hfTE9PUCAo bG9vcCwgTElfRlJPTV9JTk5FUk1PU1QpCisgICAgeworICAgICAgaGFzaF9t YXAgPHJ0eCwgYXV0b192ZWM8cnR4X2luc24gKj4gPiB0YWdfbWFwICg1MTIp OworICAgICAgYm9keSA9IGdldF9sb29wX2JvZHkgKGxvb3ApOworICAgICAg YXV0b192ZWMgPHJ0eD4gdGFnczsKKworICAgICAgLyogUmVjb3JkIGFsbCB0 aGUgbWVtb3J5IHRhZ3MuICAqLworICAgICAgZm9yICh1bnNpZ25lZCBpID0g MDsgaSA8IGxvb3AtPm51bV9ub2RlczsgaSsrKQorCXsKKwkgIGJiID0gYm9k eVtpXTsKKwkgIEZPUl9CQl9JTlNOUyAoYmIsIGluc24pCisJICAgIHsKKwkg ICAgICB1bnNpZ25lZCB0YWc7CisJICAgICAgcnR4IGJhc2UgPSBOVUxMX1JU WDsKKwkgICAgICBydHggZGVzdCA9IE5VTExfUlRYOworCSAgICAgIHJ0eCBv ZmZzZXQgPSBOVUxMX1JUWDsKKwkgICAgICBib29sIHByZV9vcl9wb3N0ID0g ZmFsc2U7CisKKwkgICAgICBpZiAoIUlOU05fUCAoaW5zbikKKwkJICB8fCBE RUJVR19JTlNOX1AgKGluc24pKQorCQljb250aW51ZTsKKworCSAgICAgIGlm IChnZXRfbG9hZF9pbmZvIChpbnNuLCBsb29wLCAmcHJlX29yX3Bvc3QsCisJ CQkJICZiYXNlLCAmZGVzdCwgJm9mZnNldCkpCisJCXsKKwkJICBpbnQgaW50 X29mZnNldCA9IDA7CisJCSAgaWYgKG9mZnNldCAmJiBSRUdfUCAob2Zmc2V0 KSkKKwkJICAgIGludF9vZmZzZXQgPSAoMSA8PCA1KSB8IFJFR05PIChvZmZz ZXQpOworCQkgIGVsc2UgaWYgKG9mZnNldCAmJiBDT05TVF9JTlRfUCAob2Zm c2V0KSkKKwkJICAgIHsKKwkJICAgICAgaW50X29mZnNldCA9IElOVFZBTCAo b2Zmc2V0KTsKKwkJICAgICAgaW50X29mZnNldCAvPSBHRVRfTU9ERV9TSVpF IChHRVRfTU9ERSAoZGVzdCkpLnRvX2NvbnN0YW50ICgpOworCQkgICAgICBp ZiAoIXByZV9vcl9wb3N0KQorCQkJaW50X29mZnNldCA+Pj0gMjsKKwkJICAg IH0KKwkJICB0YWcgPSBtYWtlX3RhZyAoUkVHTk8gKGRlc3QpLCBSRUdOTyAo YmFzZSksIGludF9vZmZzZXQpOworCQkgIHJ0eCB0ID0gR0VOX0lOVCAodGFn KTsKKwkJICBpZiAoIXRhZ19tYXAuZ2V0ICh0KSkKKwkJICAgIHRhZ3Muc2Fm ZV9wdXNoICh0KTsKKwkJICB0YWdfbWFwLmdldF9vcl9pbnNlcnQgKHQpLnNh ZmVfcHVzaCAoaW5zbik7CisJCX0KKwkgICAgfQorCX0KKworICAgICAgZm9y ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRhZ3MubGVuZ3RoICgpOyArK2kpCisJ eworCSAgcnR4IHQgPSB0YWdzW2ldOworCSAgYXV0b192ZWM8cnR4X2luc24g Kj4gKnYgPSB0YWdfbWFwLmdldCAodCk7CisKKwkgIGZvciAoaW50IGogPSB2 LT5sZW5ndGggKCkgLSAxOyBqID4gMDsgLS1qKQorCSAgICB7CisJICAgICAg LyogR2V0IHRoZSBpbnNucyB0aGF0IGhhcyB0YWdzIGNvbGxpZGluZy4gICov CisJICAgICAgcnR4X2luc24gKmluc24gPSAoKnYpW2pdOworCSAgICAgIHJ0 eCBwYXQ7CisJICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisJICAgICAg aW50IGludF9vZmZzZXQgPSAwOworCSAgICAgIHJ0eCBiYXNlID0gTlVMTF9S VFg7CisJICAgICAgcnR4IGRlc3QgPSBOVUxMX1JUWDsKKwkgICAgICBydHgg b2Zmc2V0ID0gTlVMTF9SVFg7CisJICAgICAgYm9vbCBwcmVfb3JfcG9zdCA9 IGZhbHNlOworCisJICAgICAgaWYgKCFnZXRfbG9hZF9pbmZvIChpbnNuLCBs b29wLCAmcHJlX29yX3Bvc3QsCisJCQkJICAmYmFzZSwgJmRlc3QsICZvZmZz ZXQpKQorCQlnY2NfYXNzZXJ0IChmYWxzZSk7CisKKwkgICAgICBpZiAob2Zm c2V0ICYmIFJFR19QIChvZmZzZXQpKQorCQlpbnRfb2Zmc2V0ID0gKDEgPDwg NSkgfCBSRUdOTyAob2Zmc2V0KTsKKwkgICAgICBlbHNlIGlmIChvZmZzZXQg JiYgQ09OU1RfSU5UX1AgKG9mZnNldCkpCisJCXsKKwkJICBpbnRfb2Zmc2V0 ID0gSU5UVkFMIChvZmZzZXQpOworCQkgIGludF9vZmZzZXQgLz0gR0VUX01P REVfU0laRSAoR0VUX01PREUgKGRlc3QpKS50b19jb25zdGFudCAoKTsKKwkJ ICBpZiAoIXByZV9vcl9wb3N0KQorCQkgICAgaW50X29mZnNldCA+Pj0gMjsK KwkJfQorCisJICAgICAgLyogR28gb3ZlciB0ZW1wb3JhcnkgcmVnaXN0ZXJz IGFuZCBmaW5kIGEgZnJlZSByZWdpc3RlciwgaWYKKwkJIGF2YWlsYWJsZS4g ICovCisJICAgICAgZm9yIChpbnQgayA9IFI5X1JFR05VTTsgIWNoYW5nZWQg JiYgKGsgPD0gUjE1X1JFR05VTSk7IGsrKykKKwkJaWYgKCFkZl9oYXJkX3Jl Z191c2VkX3AgKGspKQorCQkgIHsKKwkJICAgIHVuc2lnbmVkIHRhZzsKKwkJ ICAgIHJ0eCB0OworCisJCSAgICB0YWcgPSBtYWtlX3RhZyAoUkVHTk8gKGRl c3QpLCBrLCBpbnRfb2Zmc2V0KTsKKwkJICAgIHQgPSBHRU5fSU5UICh0YWcp OworCQkgICAgLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBuZXcgdGFnIGFsc28g Y29sbGlkZXMgd2l0aCBhbgorCQkgICAgICAgZXhpc3RpbmcgbG9hZC4gICov CisJCSAgICBpZiAodGFnX21hcC5nZXQgKHQpKQorCQkgICAgICBjb250aW51 ZTsKKworCQkgICAgbWFjaGluZV9tb2RlIG1vZGUgPSBHRVRfTU9ERSAoYmFz ZSk7CisJCSAgICBydHggbmV3X3JlZyA9IGdlbl9ydHhfUkVHIChtb2RlLCBr KTsKKwkJICAgIHQgPSBHRU5fSU5UIChtYWtlX3RhZyAoUkVHTk8gKGRlc3Qp LCBSRUdOTyAobmV3X3JlZyksCisJCQkJCSAgIGludF9vZmZzZXQpKTsKKwkJ ICAgIHZlYyA8cnR4X2luc24gKj4gKnYyID0gdGFnX21hcC5nZXQgKHQpOwor CQkgICAgaWYgKHYyICYmICh2Mi0+bGVuZ3RoICgpID4gMCkpCisJCSAgICAg IGNvbnRpbnVlOworCisJCSAgICAvKiBDaGFuZ2UgdGhlIGluc246IGRlc3Qg PSBsb2FkIChiYXNlLCBvZmZzZXQpCisJCSAgICAgICBpbnRvIHRtcCA9IGJh c2U7IGRlc3QgPSBsb2FkICh0bXAsIG9mZnNldCkuICAqLworCQkgICAgZXh0 cmFjdF9pbnNuIChpbnNuKTsKKwkJICAgIGZvciAoaW50IGwgPSAwOworCQkJ ICghY2hhbmdlZCkgJiYgKGwgPCByZWNvZ19kYXRhLm5fb3BlcmFuZHMpOyBs KyspCisJCSAgICAgIHsKKwkJCXN1YnJ0eF9wdHJfaXRlcmF0b3I6OmFycmF5 X3R5cGUgYXJyYXk7CisJCQlydHggKm9wID0gcmVjb2dfZGF0YS5vcGVyYW5k X2xvY1tsXTsKKworCQkJaWYgKHJlY29nX2RhdGEub3BlcmFuZF90eXBlW2xd ID09IE9QX09VVCkKKwkJCSAgY29udGludWU7CisKKwkJCUZPUl9FQUNIX1NV QlJUWF9QVFIgKGl0ZXIsIGFycmF5LCBvcCwgTk9OQ09OU1QpCisJCQkgIHsK KwkJCSAgICBydHggKmxvYyA9ICppdGVyOworCQkJICAgIHJ0eCB4ID0gKmxv YzsKKworCQkJICAgIGlmICghY2hhbmdlZCAmJiAoYmFzZSA9PSB4KSkKKwkJ CSAgICAgIHsKKwkJCQlwYXQgPSBnZW5fcnR4X1NFVCAobmV3X3JlZywgYmFz ZSk7CisJCQkJaWYgKHZhbGlkYXRlX2NoYW5nZSAoaW5zbiwgbG9jLCBuZXdf cmVnLCBmYWxzZSkpCisJCQkJICB7CisJCQkJICAgIGVtaXRfaW5zbl9iZWZv cmUgKHBhdCwgaW5zbik7CisJCQkJICAgIGlmIChwcmVfb3JfcG9zdCkKKwkJ CQkgICAgICB7CisJCQkJCXJ0eCBwYXQyID0gZ2VuX3J0eF9TRVQgKGJhc2Us IG5ld19yZWcpOworCQkJCQllbWl0X2luc25fYWZ0ZXIgKHBhdDIsIGluc24p OworCQkJCSAgICAgIH0KKwkJCQkgIH0KKwkJCQl2LT5wb3AgKCk7CisJCQkJ dGFnX21hcC5nZXRfb3JfaW5zZXJ0ICh0KS5zYWZlX3B1c2ggKGluc24pOwor CQkJCWNoYW5nZWQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJICAgICAgfQor CQkJICB9CisJCSAgICAgIH0KKwkJICB9CisJICAgIH0KKwl9CisgICAgfQor CisgIGxvb3Bfb3B0aW1pemVyX2ZpbmFsaXplICgpOworICBkZl9maW5pc2hf cGFzcyAodHJ1ZSk7Cit9CisKIC8qIFRhcmdldC1zcGVjaWZpYyBzZWxmdGVz dHMuICAqLwogCiAjaWYgQ0hFQ0tJTkdfUApAQCAtMTc2NzUsNiArMTgwMjUs OSBAQCBhYXJjaDY0X2xpYmdjY19mbG9hdGluZ19tb2RlX3N1cHBvcnRlZF9w CiAjdW5kZWYgVEFSR0VUX0hXX01BWF9NRU1fUkVBRF9TVFJFQU1TCiAjZGVm aW5lIFRBUkdFVF9IV19NQVhfTUVNX1JFQURfU1RSRUFNUyBhYXJjaDY0X2h3 X21heF9tZW1fcmVhZF9zdHJlYW1zCiAKKyN1bmRlZiBUQVJHRVRfTUFDSElO RV9ERVBFTkRFTlRfUkVPUkcKKyNkZWZpbmUgVEFSR0VUX01BQ0hJTkVfREVQ RU5ERU5UX1JFT1JHIGFhcmNoNjRfcmVvcmcKKwogI2lmIENIRUNLSU5HX1AK ICN1bmRlZiBUQVJHRVRfUlVOX1RBUkdFVF9TRUxGVEVTVFMKICNkZWZpbmUg VEFSR0VUX1JVTl9UQVJHRVRfU0VMRlRFU1RTIHNlbGZ0ZXN0OjphYXJjaDY0 X3J1bl9zZWxmdGVzdHMKLS0gCjIuNy40Cgo= --001a1135672822848b05650caa91--