From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: [PATCH v3 08/16] xen/arm: arm64: Add helpers to decode and encode branch instructions Date: Tue, 7 Jun 2016 17:06:15 +0100 Message-ID: <1465315583-1278-9-git-send-email-julien.grall@arm.com> References: <1465315583-1278-1-git-send-email-julien.grall@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1465315583-1278-1-git-send-email-julien.grall@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: andre.przywara@arm.com, Julien Grall , sstabellini@kernel.org, wei.chen@arm.com, steve.capper@arm.com List-Id: xen-devel@lists.xenproject.org V2UgbWF5IG5lZWQgdG8gdXBkYXRlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aGVuIHBhdGNoaW5nIFhl bi4KClRoZSBjb2RlIGhhcyBiZWVuIGltcG9ydGVkIGZyb20gdGhlIGZpbGVzIGFyY2gvYXJtNjQv a2VybmVsL2luc24uYwphbmQgYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9pbnNuLmggaW4gTGludXgg djQuNi4KCk5vdGUgdGhhdCBvbmx5IHRoZSBuZWNlc3NhcnkgaGVscGVycyBoYXZlIGJlZW4gaW1w b3J0ZWQuCgpTaWduZWQtb2ZmLWJ5OiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29t PgpBY2tlZC1ieTogU3RlZmFubyBTdGFiZWxsaW5pIDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPgoK LS0tCiAgICBDaGFuZ2VzIGluIHYzOgogICAgICAgIC0gQWRkIFN0ZWZhbm8ncyBhY2tlZC1ieQoK ICAgIENoYW5nZXMgaW4gdjI6CiAgICAgICAgLSBSZS1zeW5jIHdpdGggTGludXggdjQuNgogICAg ICAgIC0gRHJvcCBhbnkgcmVmZXJlbmNlIHRvIGFybTMyCi0tLQogeGVuL2FyY2gvYXJtL2FybTY0 L01ha2VmaWxlICAgICAgfCAgIDEgKwogeGVuL2FyY2gvYXJtL2FybTY0L2luc24uYyAgICAgICAg fCAyMTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB4ZW4vaW5jbHVk ZS9hc20tYXJtL2FybTY0L2luc24uaCB8ICA3MiArKysrKysrKysrKysrCiB4ZW4vaW5jbHVkZS9h c20tYXJtL2luc24uaCAgICAgICB8ICAyMCArKysrCiA0IGZpbGVzIGNoYW5nZWQsIDMxMiBpbnNl cnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2FyY2gvYXJtL2FybTY0L2luc24uYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL2FzbS1hcm0vYXJtNjQvaW5zbi5oCiBjcmVh dGUgbW9kZSAxMDA2NDQgeGVuL2luY2x1ZGUvYXNtLWFybS9pbnNuLmgKCmRpZmYgLS1naXQgYS94 ZW4vYXJjaC9hcm0vYXJtNjQvTWFrZWZpbGUgYi94ZW4vYXJjaC9hcm0vYXJtNjQvTWFrZWZpbGUK aW5kZXggMzljNmFjNi4uYzFmYTQzZiAxMDA2NDQKLS0tIGEveGVuL2FyY2gvYXJtL2FybTY0L01h a2VmaWxlCisrKyBiL3hlbi9hcmNoL2FybS9hcm02NC9NYWtlZmlsZQpAQCAtNSw2ICs1LDcgQEAg b2JqLSQoRUFSTFlfUFJJTlRLKSArPSBkZWJ1Zy5vCiBvYmoteSArPSBkb21jdGwubwogb2JqLXkg Kz0gZG9tYWluLm8KIG9iai15ICs9IGVudHJ5Lm8KK29iai15ICs9IGluc24ubwogb2JqLXkgKz0g c21wYm9vdC5vCiBvYmoteSArPSB0cmFwcy5vCiBvYmoteSArPSB2ZnAubwpkaWZmIC0tZ2l0IGEv eGVuL2FyY2gvYXJtL2FybTY0L2luc24uYyBiL3hlbi9hcmNoL2FybS9hcm02NC9pbnNuLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJiNGQ5NgotLS0gL2Rldi9udWxsCisr KyBiL3hlbi9hcmNoL2FybS9hcm02NC9pbnNuLmMKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBC YXNlZCBvbiBMaW51eCB2NC42IGFyY2gvYXJtNjQva2VybmVsLmlucy5jCisgKgorICogQ29weXJp Z2h0IChDKSAyMDEzIEh1YXdlaSBMdGQuCisgKiBBdXRob3I6IEppYW5nIExpdSA8bGl1ajk3QGdt YWlsLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNiBaaSBTaGVuIExpbSA8emxp bS5sbnhAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJ ZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKyNpbmNsdWRl IDx4ZW4vY29uZmlnLmg+CisjaW5jbHVkZSA8eGVuL3R5cGVzLmg+CisjaW5jbHVkZSA8eGVuL2xp Yi5oPgorI2luY2x1ZGUgPHhlbi9lcnJuby5oPgorI2luY2x1ZGUgPHhlbi9zaXplcy5oPgorI2lu Y2x1ZGUgPHhlbi9iaXRvcHMuaD4KKyNpbmNsdWRlIDxhc20vaW5zbi5oPgorI2luY2x1ZGUgPGFz bS9hcm02NC9pbnNuLmg+CisKKyNkZWZpbmUgX19rcHJvYmVzCisjZGVmaW5lIHByX2VycihmbXQs IC4uLikgcHJpbnRrKFhFTkxPR19FUlIgZm10LCAjIyBfX1ZBX0FSR1NfXykKKworYm9vbCBhYXJj aDY0X2luc25faXNfYnJhbmNoX2ltbSh1MzIgaW5zbikKK3sKKwlyZXR1cm4gKGFhcmNoNjRfaW5z bl9pc19iKGluc24pIHx8IGFhcmNoNjRfaW5zbl9pc19ibChpbnNuKSB8fAorCQlhYXJjaDY0X2lu c25faXNfdGJ6KGluc24pIHx8IGFhcmNoNjRfaW5zbl9pc190Ym56KGluc24pIHx8CisJCWFhcmNo NjRfaW5zbl9pc19jYnooaW5zbikgfHwgYWFyY2g2NF9pbnNuX2lzX2NibnooaW5zbikgfHwKKwkJ YWFyY2g2NF9pbnNuX2lzX2Jjb25kKGluc24pKTsKK30KKworc3RhdGljIGludCBfX2twcm9iZXMg YWFyY2g2NF9nZXRfaW1tX3NoaWZ0X21hc2soZW51bSBhYXJjaDY0X2luc25faW1tX3R5cGUgdHlw ZSwKKwkJCQkJCXUzMiAqbWFza3AsIGludCAqc2hpZnRwKQoreworCXUzMiBtYXNrOworCWludCBz aGlmdDsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgQUFSQ0g2NF9JTlNOX0lNTV8yNjoKKwkJ bWFzayA9IEJJVCgyNikgLSAxOworCQlzaGlmdCA9IDA7CisJCWJyZWFrOworCWNhc2UgQUFSQ0g2 NF9JTlNOX0lNTV8xOToKKwkJbWFzayA9IEJJVCgxOSkgLSAxOworCQlzaGlmdCA9IDU7CisJCWJy ZWFrOworCWNhc2UgQUFSQ0g2NF9JTlNOX0lNTV8xNjoKKwkJbWFzayA9IEJJVCgxNikgLSAxOwor CQlzaGlmdCA9IDU7CisJCWJyZWFrOworCWNhc2UgQUFSQ0g2NF9JTlNOX0lNTV8xNDoKKwkJbWFz ayA9IEJJVCgxNCkgLSAxOworCQlzaGlmdCA9IDU7CisJCWJyZWFrOworCWNhc2UgQUFSQ0g2NF9J TlNOX0lNTV8xMjoKKwkJbWFzayA9IEJJVCgxMikgLSAxOworCQlzaGlmdCA9IDEwOworCQlicmVh azsKKwljYXNlIEFBUkNINjRfSU5TTl9JTU1fOToKKwkJbWFzayA9IEJJVCg5KSAtIDE7CisJCXNo aWZ0ID0gMTI7CisJCWJyZWFrOworCWNhc2UgQUFSQ0g2NF9JTlNOX0lNTV83OgorCQltYXNrID0g QklUKDcpIC0gMTsKKwkJc2hpZnQgPSAxNTsKKwkJYnJlYWs7CisJY2FzZSBBQVJDSDY0X0lOU05f SU1NXzY6CisJY2FzZSBBQVJDSDY0X0lOU05fSU1NX1M6CisJCW1hc2sgPSBCSVQoNikgLSAxOwor CQlzaGlmdCA9IDEwOworCQlicmVhazsKKwljYXNlIEFBUkNINjRfSU5TTl9JTU1fUjoKKwkJbWFz ayA9IEJJVCg2KSAtIDE7CisJCXNoaWZ0ID0gMTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCSptYXNrcCA9IG1hc2s7CisJKnNoaWZ0cCA9IHNoaWZ0Owor CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgQURSX0lNTV9ISUxPU1BMSVQJMgorI2RlZmluZSBB RFJfSU1NX1NJWkUJCVNaXzJNCisjZGVmaW5lIEFEUl9JTU1fTE9NQVNLCQkoKDEgPDwgQURSX0lN TV9ISUxPU1BMSVQpIC0gMSkKKyNkZWZpbmUgQURSX0lNTV9ISU1BU0sJCSgoQURSX0lNTV9TSVpF ID4+IEFEUl9JTU1fSElMT1NQTElUKSAtIDEpCisjZGVmaW5lIEFEUl9JTU1fTE9TSElGVAkJMjkK KyNkZWZpbmUgQURSX0lNTV9ISVNISUZUCQk1CisKK3U2NCBhYXJjaDY0X2luc25fZGVjb2RlX2lt bWVkaWF0ZShlbnVtIGFhcmNoNjRfaW5zbl9pbW1fdHlwZSB0eXBlLCB1MzIgaW5zbikKK3sKKwl1 MzIgaW1tbG8sIGltbWhpLCBtYXNrOworCWludCBzaGlmdDsKKworCXN3aXRjaCAodHlwZSkgewor CWNhc2UgQUFSQ0g2NF9JTlNOX0lNTV9BRFI6CisJCXNoaWZ0ID0gMDsKKwkJaW1tbG8gPSAoaW5z biA+PiBBRFJfSU1NX0xPU0hJRlQpICYgQURSX0lNTV9MT01BU0s7CisJCWltbWhpID0gKGluc24g Pj4gQURSX0lNTV9ISVNISUZUKSAmIEFEUl9JTU1fSElNQVNLOworCQlpbnNuID0gKGltbWhpIDw8 IEFEUl9JTU1fSElMT1NQTElUKSB8IGltbWxvOworCQltYXNrID0gQURSX0lNTV9TSVpFIC0gMTsK KwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKGFhcmNoNjRfZ2V0X2ltbV9zaGlmdF9tYXNrKHR5 cGUsICZtYXNrLCAmc2hpZnQpIDwgMCkgeworCQkJcHJfZXJyKCJhYXJjaDY0X2luc25fZGVjb2Rl X2ltbWVkaWF0ZTogdW5rbm93biBpbW1lZGlhdGUgZW5jb2RpbmcgJWRcbiIsCisJCQkgICAgICAg dHlwZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiAoaW5zbiA+PiBzaGlmdCkg JiBtYXNrOworfQorCit1MzIgX19rcHJvYmVzIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRl KGVudW0gYWFyY2g2NF9pbnNuX2ltbV90eXBlIHR5cGUsCisJCQkJICB1MzIgaW5zbiwgdTY0IGlt bSkKK3sKKwl1MzIgaW1tbG8sIGltbWhpLCBtYXNrOworCWludCBzaGlmdDsKKworCWlmIChpbnNu ID09IEFBUkNINjRfQlJFQUtfRkFVTFQpCisJCXJldHVybiBBQVJDSDY0X0JSRUFLX0ZBVUxUOwor CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBBQVJDSDY0X0lOU05fSU1NX0FEUjoKKwkJc2hpZnQg PSAwOworCQlpbW1sbyA9IChpbW0gJiBBRFJfSU1NX0xPTUFTSykgPDwgQURSX0lNTV9MT1NISUZU OworCQlpbW0gPj49IEFEUl9JTU1fSElMT1NQTElUOworCQlpbW1oaSA9IChpbW0gJiBBRFJfSU1N X0hJTUFTSykgPDwgQURSX0lNTV9ISVNISUZUOworCQlpbW0gPSBpbW1sbyB8IGltbWhpOworCQlt YXNrID0gKChBRFJfSU1NX0xPTUFTSyA8PCBBRFJfSU1NX0xPU0hJRlQpIHwKKwkJCShBRFJfSU1N X0hJTUFTSyA8PCBBRFJfSU1NX0hJU0hJRlQpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYg KGFhcmNoNjRfZ2V0X2ltbV9zaGlmdF9tYXNrKHR5cGUsICZtYXNrLCAmc2hpZnQpIDwgMCkgewor CQkJcHJfZXJyKCJhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZTogdW5rbm93biBpbW1lZGlh dGUgZW5jb2RpbmcgJWRcbiIsCisJCQkgICAgICAgdHlwZSk7CisJCQlyZXR1cm4gQUFSQ0g2NF9C UkVBS19GQVVMVDsKKwkJfQorCX0KKworCS8qIFVwZGF0ZSB0aGUgaW1tZWRpYXRlIGZpZWxkLiAq LworCWluc24gJj0gfihtYXNrIDw8IHNoaWZ0KTsKKwlpbnNuIHw9IChpbW0gJiBtYXNrKSA8PCBz aGlmdDsKKworCXJldHVybiBpbnNuOworfQorCisvKgorICogRGVjb2RlIHRoZSBpbW0gZmllbGQg b2YgYSBicmFuY2gsIGFuZCByZXR1cm4gdGhlIGJ5dGUgb2Zmc2V0IGFzIGEKKyAqIHNpZ25lZCB2 YWx1ZSAoc28gaXQgY2FuIGJlIHVzZWQgd2hlbiBjb21wdXRpbmcgYSBuZXcgYnJhbmNoCisgKiB0 YXJnZXQpLgorICovCitzMzIgYWFyY2g2NF9nZXRfYnJhbmNoX29mZnNldCh1MzIgaW5zbikKK3sK KwlzMzIgaW1tOworCisJaWYgKGFhcmNoNjRfaW5zbl9pc19iKGluc24pIHx8IGFhcmNoNjRfaW5z bl9pc19ibChpbnNuKSkgeworCQlpbW0gPSBhYXJjaDY0X2luc25fZGVjb2RlX2ltbWVkaWF0ZShB QVJDSDY0X0lOU05fSU1NXzI2LCBpbnNuKTsKKwkJcmV0dXJuIChpbW0gPDwgNikgPj4gNDsKKwl9 CisKKwlpZiAoYWFyY2g2NF9pbnNuX2lzX2NieihpbnNuKSB8fCBhYXJjaDY0X2luc25faXNfY2Ju eihpbnNuKSB8fAorCSAgICBhYXJjaDY0X2luc25faXNfYmNvbmQoaW5zbikpIHsKKwkJaW1tID0g YWFyY2g2NF9pbnNuX2RlY29kZV9pbW1lZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV8xOSwgaW5zbik7 CisJCXJldHVybiAoaW1tIDw8IDEzKSA+PiAxMTsKKwl9CisKKwlpZiAoYWFyY2g2NF9pbnNuX2lz X3RieihpbnNuKSB8fCBhYXJjaDY0X2luc25faXNfdGJueihpbnNuKSkgeworCQlpbW0gPSBhYXJj aDY0X2luc25fZGVjb2RlX2ltbWVkaWF0ZShBQVJDSDY0X0lOU05fSU1NXzE0LCBpbnNuKTsKKwkJ cmV0dXJuIChpbW0gPDwgMTgpID4+IDE2OworCX0KKworCS8qIFVuaGFuZGxlZCBpbnN0cnVjdGlv biAqLworCUJVRygpOworfQorCisvKgorICogRW5jb2RlIHRoZSBkaXNwbGFjZW1lbnQgb2YgYSBi cmFuY2ggaW4gdGhlIGltbSBmaWVsZCBhbmQgcmV0dXJuIHRoZQorICogdXBkYXRlZCBpbnN0cnVj dGlvbi4KKyAqLwordTMyIGFhcmNoNjRfc2V0X2JyYW5jaF9vZmZzZXQodTMyIGluc24sIHMzMiBv ZmZzZXQpCit7CisJaWYgKGFhcmNoNjRfaW5zbl9pc19iKGluc24pIHx8IGFhcmNoNjRfaW5zbl9p c19ibChpbnNuKSkKKwkJcmV0dXJuIGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNI NjRfSU5TTl9JTU1fMjYsIGluc24sCisJCQkJCQkgICAgIG9mZnNldCA+PiAyKTsKKworCWlmIChh YXJjaDY0X2luc25faXNfY2J6KGluc24pIHx8IGFhcmNoNjRfaW5zbl9pc19jYm56KGluc24pIHx8 CisJICAgIGFhcmNoNjRfaW5zbl9pc19iY29uZChpbnNuKSkKKwkJcmV0dXJuIGFhcmNoNjRfaW5z bl9lbmNvZGVfaW1tZWRpYXRlKEFBUkNINjRfSU5TTl9JTU1fMTksIGluc24sCisJCQkJCQkgICAg IG9mZnNldCA+PiAyKTsKKworCWlmIChhYXJjaDY0X2luc25faXNfdGJ6KGluc24pIHx8IGFhcmNo NjRfaW5zbl9pc190Ym56KGluc24pKQorCQlyZXR1cm4gYWFyY2g2NF9pbnNuX2VuY29kZV9pbW1l ZGlhdGUoQUFSQ0g2NF9JTlNOX0lNTV8xNCwgaW5zbiwKKwkJCQkJCSAgICAgb2Zmc2V0ID4+IDIp OworCisJLyogVW5oYW5kbGVkIGluc3RydWN0aW9uICovCisJQlVHKCk7Cit9CisKKy8qCisgKiBM b2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBj LWJhc2ljLW9mZnNldDogOAorICogaW5kZW50LXRhYnMtbW9kZTogdAorICogRW5kOgorICovCmRp ZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL2FybTY0L2luc24uaCBiL3hlbi9pbmNsdWRl L2FzbS1hcm0vYXJtNjQvaW5zbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmNmY2RiZTkKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vaW5jbHVkZS9hc20tYXJtL2FybTY0L2lu c24uaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEh1YXdlaSBM dGQuCisgKiBBdXRob3I6IEppYW5nIExpdSA8bGl1ajk3QGdtYWlsLmNvbT4KKyAqCisgKiBDb3B5 cmlnaHQgKEMpIDIwMTQgWmkgU2hlbiBMaW0gPHpsaW0ubG54QGdtYWlsLmNvbT4KKyAqCisgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorICovCisjaWZuZGVmIF9fQVJDSF9BUk1fQVJNNjRfSU5TTgorI2Rl ZmluZSBfX0FSQ0hfQVJNX0FSTTY0X0lOU04KKworI2luY2x1ZGUgPHhlbi9jb25maWcuaD4KKyNp bmNsdWRlIDx4ZW4vdHlwZXMuaD4KKyNpbmNsdWRlIDx4ZW4vc3RkYm9vbC5oPgorCitlbnVtIGFh cmNoNjRfaW5zbl9pbW1fdHlwZSB7CisJQUFSQ0g2NF9JTlNOX0lNTV9BRFIsCisJQUFSQ0g2NF9J TlNOX0lNTV8yNiwKKwlBQVJDSDY0X0lOU05fSU1NXzE5LAorCUFBUkNINjRfSU5TTl9JTU1fMTYs CisJQUFSQ0g2NF9JTlNOX0lNTV8xNCwKKwlBQVJDSDY0X0lOU05fSU1NXzEyLAorCUFBUkNINjRf SU5TTl9JTU1fOSwKKwlBQVJDSDY0X0lOU05fSU1NXzcsCisJQUFSQ0g2NF9JTlNOX0lNTV82LAor CUFBUkNINjRfSU5TTl9JTU1fUywKKwlBQVJDSDY0X0lOU05fSU1NX1IsCisJQUFSQ0g2NF9JTlNO X0lNTV9NQVgKK307CisKKyNkZWZpbmUJX19BQVJDSDY0X0lOU05fRlVOQ1MoYWJiciwgbWFzaywg dmFsKQlcCitzdGF0aWMgYWx3YXlzX2lubGluZSBib29sX3QgYWFyY2g2NF9pbnNuX2lzXyMjYWJi cih1MzIgY29kZSkgXAoreyByZXR1cm4gKGNvZGUgJiAobWFzaykpID09ICh2YWwpOyB9IFwKK3N0 YXRpYyBhbHdheXNfaW5saW5lIHUzMiBhYXJjaDY0X2luc25fZ2V0XyMjYWJiciMjX3ZhbHVlKHZv aWQpIFwKK3sgcmV0dXJuICh2YWwpOyB9CisKK19fQUFSQ0g2NF9JTlNOX0ZVTkNTKGIsCQkweEZD MDAwMDAwLCAweDE0MDAwMDAwKQorX19BQVJDSDY0X0lOU05fRlVOQ1MoYmwsCTB4RkMwMDAwMDAs IDB4OTQwMDAwMDApCitfX0FBUkNINjRfSU5TTl9GVU5DUyhjYnosCTB4N0YwMDAwMDAsIDB4MzQw MDAwMDApCitfX0FBUkNINjRfSU5TTl9GVU5DUyhjYm56LAkweDdGMDAwMDAwLCAweDM1MDAwMDAw KQorX19BQVJDSDY0X0lOU05fRlVOQ1ModGJ6LAkweDdGMDAwMDAwLCAweDM2MDAwMDAwKQorX19B QVJDSDY0X0lOU05fRlVOQ1ModGJueiwJMHg3RjAwMDAwMCwgMHgzNzAwMDAwMCkKK19fQUFSQ0g2 NF9JTlNOX0ZVTkNTKGJjb25kLAkweEZGMDAwMDEwLCAweDU0MDAwMDAwKQorCitib29sIGFhcmNo NjRfaW5zbl9pc19icmFuY2hfaW1tKHUzMiBpbnNuKTsKKwordTY0IGFhcmNoNjRfaW5zbl9kZWNv ZGVfaW1tZWRpYXRlKGVudW0gYWFyY2g2NF9pbnNuX2ltbV90eXBlIHR5cGUsIHUzMiBpbnNuKTsK K3UzMiBhYXJjaDY0X2luc25fZW5jb2RlX2ltbWVkaWF0ZShlbnVtIGFhcmNoNjRfaW5zbl9pbW1f dHlwZSB0eXBlLAorCQkJCSAgdTMyIGluc24sIHU2NCBpbW0pOworCitzMzIgYWFyY2g2NF9nZXRf YnJhbmNoX29mZnNldCh1MzIgaW5zbik7Cit1MzIgYWFyY2g2NF9zZXRfYnJhbmNoX29mZnNldCh1 MzIgaW5zbiwgczMyIG9mZnNldCk7CisKKyNlbmRpZiAvKiAhX19BUkNIX0FSTV9BUk02NF9JTlNO ICovCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxl OiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIGluZGVudC10YWJzLW1vZGU6IHQKKyAq IEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLWFybS9pbnNuLmggYi94ZW4v aW5jbHVkZS9hc20tYXJtL2luc24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5hMjA1Y2ViCi0tLSAvZGV2L251bGwKKysrIGIveGVuL2luY2x1ZGUvYXNtLWFybS9pbnNuLmgK QEAgLTAsMCArMSwyMCBAQAorI2lmbmRlZiBfX0FSQ0hfQVJNX0lOU04KKyNkZWZpbmUgX19BUkNI X0FSTV9JTlNOCisKKyNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4KKworI2lmIGRlZmluZWQoQ09ORklH X0FSTV82NCkKKyMgaW5jbHVkZSA8YXNtL2FybTY0L2luc24uaD4KKyNlbHNlCisjIGVycm9yICJ1 bmtub3duIEFSTSB2YXJpYW50IgorI2VuZGlmCisKKyNlbmRpZiAvKiAhX19BUkNIX0FSTV9JTlNO ICovCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxl OiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIGluZGVudC10YWJzLW1vZGU6IHQKKyAq IEVuZDoKKyAqLwotLSAKMS45LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4u b3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=