From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3462 invoked by alias); 15 Nov 2017 07:25: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 3447 invoked by uid 89); 15 Nov 2017 07:25:15 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=BAYES_00,KAM_SHORT,KB_WAM_FROM_NAME_SINGLEWORD,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=no version=3.3.2 spammy=H*c:HHH, sk:michael X-HELO: EUR02-HE1-obe.outbound.protection.outlook.com Received: from mail-eopbgr10083.outbound.protection.outlook.com (HELO EUR02-HE1-obe.outbound.protection.outlook.com) (40.107.1.83) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 15 Nov 2017 07:25:12 +0000 Received: from HE1PR0802MB2377.eurprd08.prod.outlook.com (10.172.129.19) by HE1PR0802MB2378.eurprd08.prod.outlook.com (10.172.129.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.218.12; Wed, 15 Nov 2017 07:25:08 +0000 Received: from HE1PR0802MB2377.eurprd08.prod.outlook.com ([fe80::9cf8:9858:1311:b40d]) by HE1PR0802MB2377.eurprd08.prod.outlook.com ([fe80::9cf8:9858:1311:b40d%17]) with mapi id 15.20.0218.015; Wed, 15 Nov 2017 07:25:08 +0000 From: Michael Collison To: GCC Patches CC: nd Subject: [PATCH][Aarch64] v2: Arithmetic overflow common functions [Patch 1/4] Date: Wed, 15 Nov 2017 07:28:00 -0000 Message-ID: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Michael.Collison@arm.com; x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1;HE1PR0802MB2378;6:uYlnHkKi8q26AZUxzrFYQJvD8v12OTOQt693GdEuGtDYlIfmS3HDiIngssbNfYUz5hWujvHCil8rdc+sWxn1SFatBlFqUH8RHGUkqP7xnHcQ7IdE+Y2IpI+WAeNHnjI8AOILjsuKotD9DOLktAX4BibIdCGz0cQarHQvLJofkEIfaQkfmHgMv6+tABUVV2dsbbUGtweafhjtaQtt9rLSyIRRRbuOkYo0zMRxECb5yyP6skoKUchdRLBHXB8W6RIC3ckxZm60m0MhijmSiWniUZDhRdlFUoJSQL49k3Z6Dr0HtvrC8JjpuVHNcZIoBqm7xSm/FvLLueVq7Qew5HeBcBgZcMOyNbSRHF9EUn0dyRw=;5:ovC6jXRbxi6Zp6rFDftUUaLaJrTcz2a1AxrRdUgW3s3MAh31AkHSNJ7aYMmDEM5IwuwjK5fa4P9+NqlEEJ42FxwawuvU6ggCwce4612901glMaQx1G4u7G3HkaL7f5HcTfzZ+m1hISGmq6YzUnP5gT5o6leOLDIQLfOSbq+mD5s=;24:mqrAMZYmfcyS/g5MAK6QqJTVNeNADN9/EANFtZTEUibEvU5qHWa1aTGB/shD60u0ZHL2GN89TMPkuMGQkqr1W8OIFjSxwUauuAN1VJviRXg=;7:oCHuu8Z4w22pOCuG7N8aXEfy3CGsnc/2tMVZGL0NSTlBR0ZSeQkvKvcx9S4rieftFJ6hXHeqn19MlT0//TStbrWFRg8XUoU+g5t5EZKIpyN6iRFwJSwtA4cD+4CyGVACq1KniAU7QuIDbxkJ3lS3iaXgdDjHWPcETwceCs0EbaAw0T2KfPE55/LrQSjXtzKQicLUgTG9fYPxH3ndle2jJY71LySkf6RkwSXFj/fBZ/AYmxXCKzwPgIHeLhWUMe/R x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-correlation-id: 8f2bcd3a-fdf6-4a9f-7cef-08d52bf9fff3 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603199)(49563074);SRVR:HE1PR0802MB2378; x-ms-traffictypediagnostic: HE1PR0802MB2378: nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917)(22074186197030)(183786458502308); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(102415395)(6040450)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(3002001)(93006095)(93001095)(10201501046)(3231022)(6055026)(6041248)(20161123562025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123564025)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:HE1PR0802MB2378;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:HE1PR0802MB2378; x-forefront-prvs: 0492FD61DD x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(6009001)(346002)(39860400002)(376002)(377424004)(199003)(189002)(86362001)(106356001)(50986999)(14454004)(105586002)(4326008)(5250100002)(316002)(99936001)(54356999)(81166006)(8676002)(8936002)(3660700001)(68736007)(102836003)(6116002)(81156014)(3846002)(25786009)(99286004)(101416001)(189998001)(66066001)(4001150100001)(6436002)(6506006)(478600001)(2906002)(966005)(305945005)(55016002)(3280700002)(74316002)(53936002)(9686003)(2900100001)(6306002)(72206003)(5660300001)(6916009)(97736004)(7696004)(33656002)(7736002);DIR:OUT;SFP:1101;SCL:1;SRVR:HE1PR0802MB2378;H:HE1PR0802MB2377.eurprd08.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: multipart/mixed; boundary="_002_HE1PR0802MB2377EDFEC442E4763897AE6995290HE1PR0802MB2377_" MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8f2bcd3a-fdf6-4a9f-7cef-08d52bf9fff3 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Nov 2017 07:25:08.2229 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2378 X-SW-Source: 2017-11/txt/msg01157.txt.bz2 --_002_HE1PR0802MB2377EDFEC442E4763897AE6995290HE1PR0802MB2377_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Content-length: 1368 This is a respin of a AArch64 patch that adds support for builtin arithmeti= c overflow operations. This update separates the patch into multiple pieces= and addresses comments made by Richard Earnshaw here: https://gcc.gnu.org/ml/gcc-patches/2017-07/msg00249.html Original patch and motivation for patch here: https://gcc.gnu.org/ml/gcc-patches/2017-05/msg01512.html This patch primarily contains common functions in aarch64.c for generating = TImode scratch registers, and common rtl functions utilized by the overflow patterns in aarch64.md. I= n addition a new mode representing overflow, CC_Vmode is introduced. Bootstrapped and tested on aarch64-linux-gnu. Okay for trunk? 2017-10-26 Michael Collison Richard Henderson * config/aarch64/aarch64-modes.def (CC_V): New. * config/aarch64/aarch64-protos.h (aarch64_add_128bit_scratch_regs): Declare (aarch64_subv_128bit_scratch_regs): Declare. (aarch64_expand_subvti): Declare. (aarch64_gen_unlikely_cbranch): Declare * config/aarch64/aarch64.c (aarch64_select_cc_mode): Test for signed overflow using CC_Vmode. (aarch64_get_condition_code_1): Handle CC_Vmode. (aarch64_gen_unlikely_cbranch): New function. (aarch64_add_128bit_scratch_regs): New function. (aarch64_subv_128bit_scratch_regs): New function. (aarch64_expand_subvti): New function. --_002_HE1PR0802MB2377EDFEC442E4763897AE6995290HE1PR0802MB2377_ Content-Type: application/octet-stream; name="gnutools-6308-common-v2.patch.patch" Content-Description: gnutools-6308-common-v2.patch.patch Content-Disposition: attachment; filename="gnutools-6308-common-v2.patch.patch"; size=7576; creation-date="Wed, 15 Nov 2017 07:23:52 GMT"; modification-date="Wed, 15 Nov 2017 07:15:59 GMT" Content-Transfer-Encoding: base64 Content-length: 10273 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVz LmRlZiBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LW1vZGVzLmRlZgpp bmRleCAxOTU5NzZjLi4zYjlhMTUxIDEwMDY0NAotLS0gYS9nY2MvY29uZmln L2FhcmNoNjQvYWFyY2g2NC1tb2Rlcy5kZWYKKysrIGIvZ2NjL2NvbmZpZy9h YXJjaDY0L2FhcmNoNjQtbW9kZXMuZGVmCkBAIC0yNCw2ICsyNCw3IEBAIEND X01PREUgKENDX1NXUCk7CiBDQ19NT0RFIChDQ19OWik7ICAgIC8qIE9ubHkg TiBhbmQgWiBiaXRzIG9mIGNvbmRpdGlvbiBmbGFncyBhcmUgdmFsaWQuICAq LwogQ0NfTU9ERSAoQ0NfWik7ICAgICAvKiBPbmx5IFogYml0IG9mIGNvbmRp dGlvbiBmbGFncyBpcyB2YWxpZC4gICovCiBDQ19NT0RFIChDQ19DKTsgICAg IC8qIE9ubHkgQyBiaXQgb2YgY29uZGl0aW9uIGZsYWdzIGlzIHZhbGlkLiAg Ki8KK0NDX01PREUgKENDX1YpOyAgICAgLyogT25seSBWIGJpdCBvZiBjb25k aXRpb24gZmxhZ3MgaXMgdmFsaWQuICAqLwogCiAvKiBIYWxmLXByZWNpc2lv biBmbG9hdGluZyBwb2ludCBmb3IgX19mcDE2LiAgKi8KIEZMT0FUX01PREUg KEhGLCAyLCAwKTsKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9h YXJjaDY0LXByb3Rvcy5oIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQt cHJvdG9zLmgKaW5kZXggNWQ3YzVkZi4uMjg2MThjMyAxMDA2NDQKLS0tIGEv Z2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgKKysrIGIvZ2Nj L2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgKQEAgLTQxNSw2ICs0 MTUsMTYgQEAgdm9pZCBhYXJjaDY0X3JlbGF5b3V0X3NpbWRfdHlwZXMgKHZv aWQpOwogdm9pZCBhYXJjaDY0X3Jlc2V0X3ByZXZpb3VzX2ZuZGVjbCAodm9p ZCk7CiBib29sIGFhcmNoNjRfcmV0dXJuX2FkZHJlc3Nfc2lnbmluZ19lbmFi bGVkICh2b2lkKTsKIHZvaWQgYWFyY2g2NF9zYXZlX3Jlc3RvcmVfdGFyZ2V0 X2dsb2JhbHMgKHRyZWUpOwordm9pZCBhYXJjaDY0X2FkZF8xMjhiaXRfc2Ny YXRjaF9yZWdzIChydHgsIHJ0eCwgcnR4ICosCisJCQkJICAgICAgcnR4ICos IHJ0eCAqLAorCQkJCSAgICAgIHJ0eCAqLCBydHggKiwKKwkJCQkgICAgICBy dHggKik7Cit2b2lkIGFhcmNoNjRfc3Vidl8xMjhiaXRfc2NyYXRjaF9yZWdz IChydHgsIHJ0eCwgcnR4ICosCisJCQkJICAgICAgIHJ0eCAqLCBydHggKiwK KwkJCQkgICAgICAgcnR4ICosIHJ0eCAqLCBydHggKik7Cit2b2lkIGFhcmNo NjRfZXhwYW5kX3N1YnZ0aSAocnR4LCBydHgsIHJ0eCwKKwkJCSAgICBydHgs IHJ0eCwgcnR4LCBydHgpOworCiAKIC8qIEluaXRpYWxpemUgYnVpbHRpbnMg Zm9yIFNJTUQgaW50cmluc2ljcy4gICovCiB2b2lkIGluaXRfYWFyY2g2NF9z aW1kX2J1aWx0aW5zICh2b2lkKTsKQEAgLTQzOSw2ICs0NDksOCBAQCBib29s IGFhcmNoNjRfZmxvYXRfY29uc3RfcmVwcmVzZW50YWJsZV9wIChydHgpOwog CiAjaWYgZGVmaW5lZCAoUlRYX0NPREUpCiAKK3ZvaWQgYWFyY2g2NF9nZW5f dW5saWtlbHlfY2JyYW5jaCAoZW51bSBydHhfY29kZSwgbWFjaGluZV9tb2Rl IGNjX21vZGUsCisJCQkJICAgcnR4IGxhYmVsX3JlZik7CiBib29sIGFhcmNo NjRfbGVnaXRpbWF0ZV9hZGRyZXNzX3AgKG1hY2hpbmVfbW9kZSwgcnR4LCBS VFhfQ09ERSwgYm9vbCk7CiBtYWNoaW5lX21vZGUgYWFyY2g2NF9zZWxlY3Rf Y2NfbW9kZSAoUlRYX0NPREUsIHJ0eCwgcnR4KTsKIHJ0eCBhYXJjaDY0X2dl bl9jb21wYXJlX3JlZyAoUlRYX0NPREUsIHJ0eCwgcnR4KTsKZGlmZiAtLWdp dCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmMgYi9nY2MvY29uZmln L2FhcmNoNjQvYWFyY2g2NC5jCmluZGV4IGQxYWFmMTkuLjA2MWQxMzkgMTAw NjQ0Ci0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmMKKysrIGIv Z2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuYwpAQCAtNTAxMyw2ICs1MDEz LDEzIEBAIGFhcmNoNjRfc2VsZWN0X2NjX21vZGUgKFJUWF9DT0RFIGNvZGUs IHJ0eCB4LCBydHggeSkKICAgICAgICYmIEdFVF9DT0RFICh5KSA9PSBaRVJP X0VYVEVORCkKICAgICByZXR1cm4gQ0NfQ21vZGU7CiAKKyAgLyogQSB0ZXN0 IGZvciBzaWduZWQgb3ZlcmZsb3cuICAqLworICBpZiAoKEdFVF9NT0RFICh4 KSA9PSBESW1vZGUgfHwgR0VUX01PREUgKHgpID09IFRJbW9kZSkKKyAgICAg ICYmIGNvZGUgPT0gTkUKKyAgICAgICYmIEdFVF9DT0RFICh4KSA9PSBQTFVT CisgICAgICAmJiBHRVRfQ09ERSAoeSkgPT0gU0lHTl9FWFRFTkQpCisgICAg cmV0dXJuIENDX1Ztb2RlOworCiAgIC8qIEZvciBldmVyeXRoaW5nIGVsc2Us IHJldHVybiBDQ21vZGUuICAqLwogICByZXR1cm4gQ0Ntb2RlOwogfQpAQCAt NTExOSw2ICs1MTI2LDE1IEBAIGFhcmNoNjRfZ2V0X2NvbmRpdGlvbl9jb2Rl XzEgKG1hY2hpbmVfbW9kZSBtb2RlLCBlbnVtIHJ0eF9jb2RlIGNvbXBfY29k ZSkKIAl9CiAgICAgICBicmVhazsKIAorICAgIGNhc2UgRV9DQ19WbW9kZToK KyAgICAgIHN3aXRjaCAoY29tcF9jb2RlKQorCXsKKwljYXNlIE5FOiByZXR1 cm4gQUFSQ0g2NF9WUzsKKwljYXNlIEVROiByZXR1cm4gQUFSQ0g2NF9WQzsK KwlkZWZhdWx0OiByZXR1cm4gLTE7CisJfQorICAgICAgYnJlYWs7CisKICAg ICBkZWZhdWx0OgogICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTE0MTUw LDYgKzE0MTY2LDEzMSBAQCBhYXJjaDY0X3NwbGl0X2RpbW9kZV9jb25zdF9z dG9yZSAocnR4IGRzdCwgcnR4IHNyYykKICAgcmV0dXJuIHRydWU7CiB9CiAK Ky8qIEdlbmVyYXRlIFJUTCBmb3IgYSBjb25kaXRpb25hbCBicmFuY2ggd2l0 aCBydHggY29tcGFyaXNvbiBDT0RFIGluCisgICBtb2RlIENDX01PREUuICBU aGUgZGVzdGluYXRpb24gb2YgdGhlIHVubGlrZWx5IGNvbmRpdGlvbmFsIGJy YW5jaAorICAgaXMgTEFCRUxfUkVGLiAgKi8KKwordm9pZAorYWFyY2g2NF9n ZW5fdW5saWtlbHlfY2JyYW5jaCAoZW51bSBydHhfY29kZSBjb2RlLCBtYWNo aW5lX21vZGUgY2NfbW9kZSwKKwkJCSAgICAgIHJ0eCBsYWJlbF9yZWYpCit7 CisgIHJ0eCB4OworICB4ID0gZ2VuX3J0eF9mbXRfZWUgKGNvZGUsIFZPSURt b2RlLAorCQkgICAgICBnZW5fcnR4X1JFRyAoY2NfbW9kZSwgQ0NfUkVHTlVN KSwKKwkJICAgICAgY29uc3QwX3J0eCk7CisKKyAgeCA9IGdlbl9ydHhfSUZf VEhFTl9FTFNFIChWT0lEbW9kZSwgeCwKKwkJCSAgICBnZW5fcnR4X0xBQkVM X1JFRiAoVk9JRG1vZGUsIGxhYmVsX3JlZiksCisJCQkgICAgcGNfcnR4KTsK KyAgYWFyY2g2NF9lbWl0X3VubGlrZWx5X2p1bXAgKGdlbl9ydHhfU0VUIChw Y19ydHgsIHgpKTsKK30KKworLyogR2VuZXJhdGUgREltb2RlIHNjcmF0Y2gg cmVnaXN0ZXJzIGZvciAxMjgtYml0IChUSW1vZGUpIGFkZGl0aW9uLgorCisg ICBPUDEgcmVwcmVzZW50cyB0aGUgVEltb2RlIGRlc3RpbmF0aW9uIG9wZXJh bmQgMQorICAgT1AyIHJlcHJlc2VudHMgdGhlIFRJbW9kZSBkZXN0aW5hdGlv biBvcGVyYW5kIDIKKyAgIExPV19ERVNUIHJlcHJlc2VudHMgdGhlIGxvdyBo YWxmIChESW1vZGUpIG9mIFRJbW9kZSBvcGVyYW5kIDAKKyAgIExPV19JTjEg cmVwcmVzZW50cyB0aGUgbG93IGhhbGYgKERJbW9kZSkgb2YgVEltb2RlIG9w ZXJhbmQgMQorICAgTE9XX0lOMiByZXByZXNlbnRzIHRoZSBsb3cgaGFsZiAo REltb2RlKSBvZiBUSW1vZGUgb3BlcmFuZCAyCisgICBISUdIX0RFU1QgcmVw cmVzZW50cyB0aGUgaGlnaCBoYWxmIChESW1vZGUpIG9mIFRJbW9kZSBvcGVy YW5kIDAKKyAgIEhJR0hfSU4xIHJlcHJlc2VudHMgdGhlIGhpZ2ggaGFsZiAo REltb2RlKSBvZiBUSW1vZGUgb3BlcmFuZCAxCisgICBISUdIX0lOMiByZXBy ZXNlbnRzIHRoZSBoaWdoIGhhbGYgKERJbW9kZSkgb2YgVEltb2RlIG9wZXJh bmQgMi4gICovCisKK3ZvaWQKK2FhcmNoNjRfYWRkXzEyOGJpdF9zY3JhdGNo X3JlZ3MgKHJ0eCBvcDEsIHJ0eCBvcDIsIHJ0eCAqbG93X2Rlc3QsCisJCQkJ IHJ0eCAqbG93X2luMSwgcnR4ICpsb3dfaW4yLAorCQkJCSBydHggKmhpZ2hf ZGVzdCwgcnR4ICpoaWdoX2luMSwKKwkJCQkgcnR4ICpoaWdoX2luMikKK3sK KyAgKmxvd19kZXN0ID0gZ2VuX3JlZ19ydHggKERJbW9kZSk7CisgICpsb3df aW4xID0gZ2VuX2xvd3BhcnQgKERJbW9kZSwgb3AxKTsKKyAgKmxvd19pbjIg PSBzaW1wbGlmeV9nZW5fc3VicmVnIChESW1vZGUsIG9wMiwgVEltb2RlLAor CQkJCSAgc3VicmVnX2xvd3BhcnRfb2Zmc2V0IChESW1vZGUsIFRJbW9kZSkp OworICAqaGlnaF9kZXN0ID0gZ2VuX3JlZ19ydHggKERJbW9kZSk7CisgICpo aWdoX2luMSA9IGdlbl9oaWdocGFydCAoREltb2RlLCBvcDEpOworICAqaGln aF9pbjIgPSBzaW1wbGlmeV9nZW5fc3VicmVnIChESW1vZGUsIG9wMiwgVElt b2RlLAorCQkJCSAgIHN1YnJlZ19oaWdocGFydF9vZmZzZXQgKERJbW9kZSwg VEltb2RlKSk7Cit9CisKKy8qIEdlbmVyYXRlIERJbW9kZSBzY3JhdGNoIHJl Z2lzdGVycyBmb3IgMTI4LWJpdCAoVEltb2RlKSBzdWJ0cmFjdGlvbi4KKwor ICAgVGhpcyBmdW5jdGlvbiBkaWZmZXJzIGZyb20gJ2FyY2g2NF9hZGRfMTI4 Yml0X3NjcmF0Y2hfcmVncycgaW4gdGhhdAorICAgT1AxIGNhbiBiZSBhbiBp bW1lZGlhdGUgY29uc3RhbnQgKHplcm8pLiBXZSBtdXN0IGNhbGwKKyAgIHN1 YnJlZ19oaWdocGFydF9vZmZzZXQgd2l0aCBESW1vZGUgYW5kIFRJbW9kZSBh cmd1bWVudHMsIG90aGVyd2lzZQorICAgVk9JRG1vZGUgd2lsbCBiZSB1c2Vk IGZvciB0aGUgY29uc3RfaW50IHdoaWNoIGdlbmVyYXRlcyBhbiBpbnRlcm5h bAorICAgZXJyb3IgZnJvbSBzdWJyZWdfc2l6ZV9oaWdocGFydF9vZmZzZXQg d2hpY2ggZG9lcyBub3QgZXhwZWN0IGEgc2l6ZSBvZiB6ZXJvLgorCisgICBP UDEgcmVwcmVzZW50cyB0aGUgVEltb2RlIGRlc3RpbmF0aW9uIG9wZXJhbmQg MQorICAgT1AyIHJlcHJlc2VudHMgdGhlIFRJbW9kZSBkZXN0aW5hdGlvbiBv cGVyYW5kIDIKKyAgIExPV19ERVNUIHJlcHJlc2VudHMgdGhlIGxvdyBoYWxm IChESW1vZGUpIG9mIFRJbW9kZSBvcGVyYW5kIDAKKyAgIExPV19JTjEgcmVw cmVzZW50cyB0aGUgbG93IGhhbGYgKERJbW9kZSkgb2YgVEltb2RlIG9wZXJh bmQgMQorICAgTE9XX0lOMiByZXByZXNlbnRzIHRoZSBsb3cgaGFsZiAoRElt b2RlKSBvZiBUSW1vZGUgb3BlcmFuZCAyCisgICBISUdIX0RFU1QgcmVwcmVz ZW50cyB0aGUgaGlnaCBoYWxmIChESW1vZGUpIG9mIFRJbW9kZSBvcGVyYW5k IDAKKyAgIEhJR0hfSU4xIHJlcHJlc2VudHMgdGhlIGhpZ2ggaGFsZiAoRElt b2RlKSBvZiBUSW1vZGUgb3BlcmFuZCAxCisgICBISUdIX0lOMiByZXByZXNl bnRzIHRoZSBoaWdoIGhhbGYgKERJbW9kZSkgb2YgVEltb2RlIG9wZXJhbmQg Mi4gICovCisKKwordm9pZAorYWFyY2g2NF9zdWJ2XzEyOGJpdF9zY3JhdGNo X3JlZ3MgKHJ0eCBvcDEsIHJ0eCBvcDIsIHJ0eCAqbG93X2Rlc3QsCisJCQkJ ICBydHggKmxvd19pbjEsIHJ0eCAqbG93X2luMiwKKwkJCQkgIHJ0eCAqaGln aF9kZXN0LCBydHggKmhpZ2hfaW4xLAorCQkJCSAgcnR4ICpoaWdoX2luMikK K3sKKyAgKmxvd19kZXN0ID0gZ2VuX3JlZ19ydHggKERJbW9kZSk7CisgICps b3dfaW4xID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAoREltb2RlLCBvcDEsIFRJ bW9kZSwKKwkJCQkgIHN1YnJlZ19sb3dwYXJ0X29mZnNldCAoREltb2RlLCBU SW1vZGUpKTsKKworICAqbG93X2luMiA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcg KERJbW9kZSwgb3AyLCBUSW1vZGUsCisJCQkJICBzdWJyZWdfbG93cGFydF9v ZmZzZXQgKERJbW9kZSwgVEltb2RlKSk7CisgICpoaWdoX2Rlc3QgPSBnZW5f cmVnX3J0eCAoREltb2RlKTsKKworICAqaGlnaF9pbjEgPSBzaW1wbGlmeV9n ZW5fc3VicmVnIChESW1vZGUsIG9wMSwgVEltb2RlLAorCQkJCSAgIHN1YnJl Z19oaWdocGFydF9vZmZzZXQgKERJbW9kZSwgVEltb2RlKSk7CisgICpoaWdo X2luMiA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKERJbW9kZSwgb3AyLCBUSW1v ZGUsCisJCQkJICAgc3VicmVnX2hpZ2hwYXJ0X29mZnNldCAoREltb2RlLCBU SW1vZGUpKTsKK30KKworLyogR2VuZXJhdGUgUlRMIGZvciAxMjgtYml0IChU SW1vZGUpIHN1YnRyYWN0aW9uIHdpdGggb3ZlcmZsb3cuCisKKyAgIE9QMCBy ZXByZXNlbnRzIHRoZSBUSW1vZGUgZGVzdGluYXRpb24gb3BlcmFuZCAwCisg ICBMT1dfREVTVCByZXByZXNlbnRzIHRoZSBsb3cgaGFsZiAoREltb2RlKSBv ZiBUSW1vZGUgb3BlcmFuZCAwCisgICBMT1dfSU4xIHJlcHJlc2VudHMgdGhl IGxvdyBoYWxmIChESW1vZGUpIG9mIFRJbW9kZSBvcGVyYW5kIDEKKyAgIExP V19JTjIgcmVwcmVzZW50cyB0aGUgbG93IGhhbGYgKERJbW9kZSkgb2YgVElt b2RlIG9wZXJhbmQgMgorICAgSElHSF9ERVNUIHJlcHJlc2VudHMgdGhlIGhp Z2ggaGFsZiAoREltb2RlKSBvZiBUSW1vZGUgb3BlcmFuZCAwCisgICBISUdI X0lOMSByZXByZXNlbnRzIHRoZSBoaWdoIGhhbGYgKERJbW9kZSkgb2YgVElt b2RlIG9wZXJhbmQgMQorICAgSElHSF9JTjIgcmVwcmVzZW50cyB0aGUgaGln aCBoYWxmIChESW1vZGUpIG9mIFRJbW9kZSBvcGVyYW5kIDIuICAqLworCit2 b2lkCithYXJjaDY0X2V4cGFuZF9zdWJ2dGkgKHJ0eCBvcDAsIHJ0eCBsb3df ZGVzdCwgcnR4IGxvd19pbjEsCisJCSAgICAgICBydHggbG93X2luMiwgcnR4 IGhpZ2hfZGVzdCwgcnR4IGhpZ2hfaW4xLAorCQkgICAgICAgcnR4IGhpZ2hf aW4yKQoreworICBpZiAobG93X2luMiA9PSBjb25zdDBfcnR4KQorICAgIHsK KyAgICAgIGxvd19kZXN0ID0gbG93X2luMTsKKyAgICAgIGVtaXRfaW5zbiAo Z2VuX3N1YmRpM19jb21wYXJlMSAoaGlnaF9kZXN0LCBoaWdoX2luMSwKKwkJ CQkgICAgICBmb3JjZV9yZWcgKERJbW9kZSwgaGlnaF9pbjIpKSk7CisgICAg fQorICBlbHNlCisgICAgeworICAgICAgaWYgKENPTlNUX0lOVF9QIChsb3df aW4yKSkKKwl7CisJICBsb3dfaW4yID0gZm9yY2VfcmVnIChESW1vZGUsIEdF Tl9JTlQgKC1VSU5UVkFMIChsb3dfaW4yKSkpOworCSAgaGlnaF9pbjIgPSBm b3JjZV9yZWcgKERJbW9kZSwgaGlnaF9pbjIpOworCSAgZW1pdF9pbnNuIChn ZW5fYWRkZGkzX2NvbXBhcmVDIChsb3dfZGVzdCwgbG93X2luMSwgbG93X2lu MikpOworCX0KKyAgICAgIGVsc2UKKwllbWl0X2luc24gKGdlbl9zdWJkaTNf Y29tcGFyZTEgKGxvd19kZXN0LCBsb3dfaW4xLCBsb3dfaW4yKSk7CisgICAg ICBlbWl0X2luc24gKGdlbl9zdWJkaTNfY2FycnlpbkNWIChoaWdoX2Rlc3Qs CisJCQkJICAgICAgIGZvcmNlX3JlZyAoREltb2RlLCBoaWdoX2luMSksCisJ CQkJICAgICAgIGhpZ2hfaW4yKSk7CisgICAgfQorCisgIGVtaXRfbW92ZV9p bnNuIChnZW5fbG93cGFydCAoREltb2RlLCBvcDApLCBsb3dfZGVzdCk7Cisg IGVtaXRfbW92ZV9pbnNuIChnZW5faGlnaHBhcnQgKERJbW9kZSwgb3AwKSwg aGlnaF9kZXN0KTsKKworfQorCiAvKiBJbXBsZW1lbnQgdGhlIFRBUkdFVF9B U0FOX1NIQURPV19PRkZTRVQgaG9vay4gICovCiAKIHN0YXRpYyB1bnNpZ25l ZCBIT1NUX1dJREVfSU5UCg== --_002_HE1PR0802MB2377EDFEC442E4763897AE6995290HE1PR0802MB2377_--