[COMMIT] Avoid allocation in #'integer-length; add #'logcount.

Aidan Kehoe <[email protected]> Fri, 29 May 2015 17:11:03 +0100
Newsgroups gmane.emacs.xemacs.patches
Message-ID <[email protected]>
ClllcywgdGhlcmUgYXJlIG90aGVyIHRoaW5ncyB0aGF0IGFyZSBhIGhpZ2hlciBwcmlvcml0eSB0
aGFuIHRoaXMuIFRoaXMgaXMKc29tZXRoaW5nIGRvbmUgd2hpbGUgcHJvY3Jhc3RpbmF0aW5nIGFi
b3V0IHNvbWV0aGluZyBlbHNlLCBhbmQgZGVzcGl0ZSB0aGF0IEkKZmVlbCBpdOKAmXMgdXNlZnVs
LgoKQVBQUk9WRSBDT01NSVQKCk5PVEU6IFRoaXMgcGF0Y2ggaGFzIGJlZW4gY29tbWl0dGVkLgoK
IyBIRyBjaGFuZ2VzZXQgcGF0Y2gKIyBVc2VyIEFpZGFuIEtlaG9lIDxrZWhvZWFAcGFyaGFzYXJk
Lm5ldD4KIyBEYXRlIDE0MzI5MTU1ODQgLTM2MDAKIyAgICAgIEZyaSBNYXkgMjkgMTc6MDY6MjQg
MjAxNSArMDEwMAojIE5vZGUgSUQgMWFmNTNkMzVkZDUzMDAyM2M5ZTk2YTRjMjMwZjkzZTQxYTY0
MzMwNgojIFBhcmVudCAgYmQ0ZDJjOGVmOWNjMTkwODA1NzcyYWJiYWU3Y2JhNTQzZWY2ODU3NQpB
dm9pZCBhbGxvY2F0aW9uIGluICMnaW50ZWdlci1sZW5ndGg7IGFkZCAjJ2xvZ2NvdW50LgoKbGlz
cC9DaGFuZ2VMb2cgYWRkaXRpb246CgoyMDE1LTA1LTI5ICBBaWRhbiBLZWhvZSAgPGtlaG9lYUBw
YXJoYXNhcmQubmV0PgoKCSogYnl0ZS1vcHRpbWl6ZS5lbCAoc2lkZS1lZmZlY3QtZnJlZS1mbnMp
OgoJQWRkICMnaW50ZWdlci1sZW5ndGgsICMnbG9nY291bnQgaGVyZS4KCSogY2wtZXh0cmEuZWw6
CgkqIGNsLWV4dHJhLmVsIChpbnRlZ2VyLWxlbmd0aCk6CglVcGRhdGUgdGhpcyB0byBhdm9pZCBh
bGxvY2F0aW5nIG1lbW9yeS4KCSogY2wtZXh0cmEuZWwgKGxvZ2NvdW50KTogTmV3LiBSZXR1cm4g
dGhlIG51bWJlciBvZiBvbmUgYml0cyBpbgoJSU5URUdFUiwgaWYgbm9uLW5lZ2F0aXZlLiBGdW5j
dGlvbiBmcm9tIENvbW1vbiBMaXNwLgoKdGVzdHMvQ2hhbmdlTG9nIGFkZGl0aW9uOgoKMjAxNS0w
NS0yOSAgQWlkYW4gS2Vob2UgIDxrZWhvZWFAcGFyaGFzYXJkLm5ldD4KCgkqIGF1dG9tYXRlZC9s
aXNwLXRlc3RzLmVsOgoJVGVzdCAjJ2ludGVnZXItbGVuZ3RoLCAjJ2xvZ2NvdW50IGluIHRoaXMg
ZmlsZS4KCmRpZmYgLXIgYmQ0ZDJjOGVmOWNjIC1yIDFhZjUzZDM1ZGQ1MyBsaXNwL0NoYW5nZUxv
ZwotLS0gYS9saXNwL0NoYW5nZUxvZwlGcmkgTWF5IDE1IDE4OjExOjQ3IDIwMTUgKzAxMDAKKysr
IGIvbGlzcC9DaGFuZ2VMb2cJRnJpIE1heSAyOSAxNzowNjoyNCAyMDE1ICswMTAwCkBAIC00LDYg
KzQsMTYgQEAKIAkqIHNpbXBsZS5lbCAobGluZS1udW1iZXIpOiBNb3ZlZCB0byBidWZmZXIuYzsg
d2UgaGF2ZSBhbiBleGlzdGluZwogCWxpbmUgbnVtYmVyIGNhY2hlIGluIEMsIGl0J3MgYSBzaGFt
ZSBub3QgdG8gaGF2ZSBpdCBhdmFpbGFibGUuCiAKKzIwMTUtMDUtMjkgIEFpZGFuIEtlaG9lICA8
a2Vob2VhQHBhcmhhc2FyZC5uZXQ+CisKKwkqIGJ5dGUtb3B0aW1pemUuZWwgKHNpZGUtZWZmZWN0
LWZyZWUtZm5zKToKKwlBZGQgIydpbnRlZ2VyLWxlbmd0aCwgIydsb2djb3VudCBoZXJlLgorCSog
Y2wtZXh0cmEuZWw6CisJKiBjbC1leHRyYS5lbCAoaW50ZWdlci1sZW5ndGgpOgorCVVwZGF0ZSB0
aGlzIHRvIGF2b2lkIGFsbG9jYXRpbmcgbWVtb3J5LgorCSogY2wtZXh0cmEuZWwgKGxvZ2NvdW50
KTogTmV3LiBSZXR1cm4gdGhlIG51bWJlciBvZiBvbmUgYml0cyBpbgorCUlOVEVHRVIsIGlmIG5v
bi1uZWdhdGl2ZS4gRnVuY3Rpb24gZnJvbSBDb21tb24gTGlzcC4KKwogMjAxNS0wNC0xMSAgQWlk
YW4gS2Vob2UgIDxrZWhvZWFAcGFyaGFzYXJkLm5ldD4KIAogCSogbXVsZS9tdWxlLWNtZHMuZWwg
KHNldC1sb2NhbGUtZm9yLWxhbmd1YWdlLWVudmlyb25tZW50KToKZGlmZiAtciBiZDRkMmM4ZWY5
Y2MgLXIgMWFmNTNkMzVkZDUzIGxpc3AvYnl0ZS1vcHRpbWl6ZS5lbAotLS0gYS9saXNwL2J5dGUt
b3B0aW1pemUuZWwJRnJpIE1heSAxNSAxODoxMTo0NyAyMDE1ICswMTAwCisrKyBiL2xpc3AvYnl0
ZS1vcHRpbWl6ZS5lbAlGcmkgTWF5IDI5IDE3OjA2OjI0IDIwMTUgKzAxMDAKQEAgLTEzMDMsOCAr
MTMwMyw4IEBACiAJIGhhc2gtdGFibGUtdGVzdAogCSBoYXNoLXRhYmxlLXR5cGUKIAkgOzsKLQkg
aW50LXRvLXN0cmluZwotCSBsZW5ndGggbG9nIGxvZzEwIGxvZ2FuZCBsb2diIGxvZ2lvciBsb2du
b3QgbG9neG9yIGxzaAorCSBpbnRlZ2VyLWxlbmd0aCBpbnQtdG8tc3RyaW5nCisJIGxlbmd0aCBs
b2cgbG9nMTAgbG9nYW5kIGxvZ2IgbG9nY291bnQgbG9naW9yIGxvZ25vdCBsb2d4b3IgbHNoCiAJ
IG1hcmtlci1idWZmZXIgbWF4IG1lbWJlciBtZW1xIG1pbiBtb2QKIAkgbmV4dC13aW5kb3cgbnRo
IG50aGNkciBudW1iZXItdG8tc3RyaW5nIG51bWVyYXRvcgogCSBwYXJzZS1jb2xvbi1wYXRoIHBs
aXN0LWdldCBwcmV2aW91cy13aW5kb3cKZGlmZiAtciBiZDRkMmM4ZWY5Y2MgLXIgMWFmNTNkMzVk
ZDUzIGxpc3AvY2wtZXh0cmEuZWwKLS0tIGEvbGlzcC9jbC1leHRyYS5lbAlGcmkgTWF5IDE1IDE4
OjExOjQ3IDIwMTUgKzAxMDAKKysrIGIvbGlzcC9jbC1leHRyYS5lbAlGcmkgTWF5IDI5IDE3OjA2
OjI0IDIwMTUgKzAxMDAKQEAgLTg0MCwxMSArODQwLDQxIEBACiAgICh3aXRoLWNhc2UtdGFibGUg
KHN0YW5kYXJkLWNhc2UtdGFibGUpIChkb3duY2FzZSBjaGFyYWN0ZXIpKSkKIAogKGRlZnVuIGlu
dGVnZXItbGVuZ3RoIChpbnRlZ2VyKQotICAiUmV0dXJuIHRoZSBudW1iZXIgb2YgYml0cyBuZWVk
IHRvIHJlcHJlc2VudCBJTlRFR0VSIGluIHR3bydzIGNvbXBsZW1lbnQuIgotICAoZWNhc2UgKHNp
Z251bSBpbnRlZ2VyKQotICAgICgwIDApCi0gICAgKC0xICgxLSAobGVuZ3RoIChmb3JtYXQgIiVi
IiAoLSBpbnRlZ2VyKSkpKSkKLSAgICAoMSAobGVuZ3RoIChmb3JtYXQgIiViIiBpbnRlZ2VyKSkp
KSkKKyAgIlJldHVybiB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZCB0byByZXByZXNlbnQgSU5URUdF
UiBpbiB0d28ncyBjb21wbGVtZW50LgorCitFcXVpdmFsZW50IHRvIGAoY2VpbGluZyAobG9nICgx
KyBpbnRlZ2VyKSAyKSknIGZvciBwb3NpdGl2ZSBpbnRlZ2VycywgYW5kCitgKGNlaWxpbmcgKGxv
ZyAoLSBpbnRlZ2VyKSAyKSknIGZvciBuZWdhdGl2ZSBpbnRlZ2Vycy4iCisgIChjaGVjay10eXBl
IGludGVnZXIgaW50ZWdlcikKKyAgKHdoZW4gKDwgaW50ZWdlciAwKQorICAgIDs7IERvbid0IHVz
ZSAjJy0sIHdoaWNoIGZhaWxzIHNpbGVudGx5IHdpdGggbW9zdC1uZWdhdGl2ZS1maXhudW0uCisg
ICAgKHNldGYgaW50ZWdlciAobG9nbm90IGludGVnZXIpKSkKKyAgKGxldCAoKGNvdW50IDApIChs
YXN0IGludGVnZXIpKQorICAgICh3aGlsZSAobm90IChlcWwgKHNldHEgaW50ZWdlciAoLyBpbnRl
Z2VyIDE2KSkgMCkpCisgICAgICAoc2V0ZiBsYXN0IGludGVnZXIKKyAgICAgICAgICAgIGNvdW50
ICgrIGNvdW50IDQpKSkKKyAgICAoKyAoYXJlZiAoZXZhbC13aGVuLWNvbXBpbGUKKyAgICAgICAg
ICAgICAgKHZjb25jYXQgWzBdIChsb29wIGZvciBmaXhudW0gZnJvbSAxIGJlbG93IDE2CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0IChsZW5ndGggKGZvcm1hdCAiJWIi
IGZpeG51bSkpKSkpCisgICAgICAgICAgICAgbGFzdCkKKyAgICAgICBjb3VudCkpKQorCisoZGVm
dW4gbG9nY291bnQgKGludGVnZXIpCisgICJSZXR1cm4gdGhlIG51bWJlciBvZiBvbmUgYml0cyBp
biBJTlRFR0VSLCBpZiBub24tbmVnYXRpdmUuCisKK0lmIElOVEVHRVIgaXMgbmVnYXRpdmUsIHJl
dHVybiB0aGUgbnVtYmVyIG9mIHplcm8gYml0cyBvZiBsb3dlciBvcmRlciB0aGFuIHRoZQorbW9z
dCBzaWduaWZpY2FudCBub24temVybyBiaXQuIgorICAobGV0ICgoaW50ZWdlciAoaWYgKD49IGlu
dGVnZXIgMCkgaW50ZWdlciAoLSAoMSsgaW50ZWdlcikpKSkKKyAgICAgICAgKGNvdW50IDApKQor
ICAgICh3aGlsZSAobm90IChlcWwgMCBpbnRlZ2VyKSkKKyAgICAgIChzZXRmIGNvdW50CisgICAg
ICAgICAgICAoKyBjb3VudCAoYXJlZgorICAgICAgICAgICAgICAgICAgICAgIChldmFsLXdoZW4t
Y29tcGlsZQorICAgICAgICAgICAgICAgICAgICAgICAodmNvbmNhdAorICAgICAgICAgICAgICAg
ICAgICAgICAgKGxvb3AgZm9yIGZpeG51bSBmcm9tIDAgYmVsb3cgMTYKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbGxlY3QgKGNvdW50ID8xIChmb3JtYXQgIiViIiBmaXhudW0pKSkp
KQorICAgICAgICAgICAgICAgICAgICAgICglIGludGVnZXIgMTYpKSkKKyAgICAgICAgICAgIGlu
dGVnZXIgKC8gaW50ZWdlciAxNikpKQorICAgIGNvdW50KSkKIAogOzsgVGhlc2UgYXJlIGhlcmUg
YmVjYXVzZSBsYWJlbHMgYW5kIHN5bWJvbC1tYWNyb2xldCBhcmUgbm90IGF2YWlsYWJsZSBpbgog
Ozsgb2Jzb2xldGUuZWwuIFRoZXkgYXJlLCBob3dldmVyLCBhbGwgbWFya2VkIGFzIG9ic29sZXRl
IGluIHRoYXQgZmlsZS4KZGlmZiAtciBiZDRkMmM4ZWY5Y2MgLXIgMWFmNTNkMzVkZDUzIHRlc3Rz
L0NoYW5nZUxvZwotLS0gYS90ZXN0cy9DaGFuZ2VMb2cJRnJpIE1heSAxNSAxODoxMTo0NyAyMDE1
ICswMTAwCisrKyBiL3Rlc3RzL0NoYW5nZUxvZwlGcmkgTWF5IDI5IDE3OjA2OjI0IDIwMTUgKzAx
MDAKQEAgLTEsMyArMSw4IEBACisyMDE1LTA1LTI5ICBBaWRhbiBLZWhvZSAgPGtlaG9lYUBwYXJo
YXNhcmQubmV0PgorCisJKiBhdXRvbWF0ZWQvbGlzcC10ZXN0cy5lbDoKKwlUZXN0ICMnaW50ZWdl
ci1sZW5ndGgsICMnbG9nY291bnQgaW4gdGhpcyBmaWxlLgorCiAyMDE1LTA1LTExICBBaWRhbiBL
ZWhvZSAgPGtlaG9lYUBwYXJoYXNhcmQubmV0PgogCiAJKiBhdXRvbWF0ZWQvbXVsZS10ZXN0cy5l
bDoKZGlmZiAtciBiZDRkMmM4ZWY5Y2MgLXIgMWFmNTNkMzVkZDUzIHRlc3RzL2F1dG9tYXRlZC9s
aXNwLXRlc3RzLmVsCi0tLSBhL3Rlc3RzL2F1dG9tYXRlZC9saXNwLXRlc3RzLmVsCUZyaSBNYXkg
MTUgMTg6MTE6NDcgMjAxNSArMDEwMAorKysgYi90ZXN0cy9hdXRvbWF0ZWQvbGlzcC10ZXN0cy5l
bAlGcmkgTWF5IDI5IDE3OjA2OjI0IDIwMTUgKzAxMDAKQEAgLTU2NCw2ICs1NjQsNTYgQEAKICAg
ICAoQXNzZXJ0IChlcSAyIChsb2d4b3Igb25lIHRocmVlKSkgKGxpc3Qgb25lIHRocmVlKSkpKQog
CiA7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Cis7OyBUZXN0IGBpbnRlZ2VyLWxlbmd0aCcsIGBsb2djb3VudCcKKzs7LS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKENoZWNrLUVycm9yIHdy
b25nLXR5cGUtYXJndW1lbnQgKGludGVnZXItbGVuZ3RoIDAuMCkpCisoQ2hlY2stRXJyb3Igd3Jv
bmctdHlwZS1hcmd1bWVudCAoaW50ZWdlci1sZW5ndGggJ3N5bWJvbCkpCisoQXNzZXJ0IChlcWwg
KGludGVnZXItbGVuZ3RoIDApIDApKQorKEFzc2VydCAoZXFsIChpbnRlZ2VyLWxlbmd0aCAtMSkg
MCkpCisoQXNzZXJ0IChlcWwgKGludGVnZXItbGVuZ3RoIDEpIDEpKQorKEFzc2VydCAoZXFsIChp
bnRlZ2VyLWxlbmd0aCAjeC1GKSA0KSkKKyhBc3NlcnQgKGVxbCAoaW50ZWdlci1sZW5ndGggI3hG
KSA0KSkKKyhBc3NlcnQgKGVxbCAoaW50ZWdlci1sZW5ndGggI3gtMTApIDQpKQorKEFzc2VydCAo
ZXFsIChpbnRlZ2VyLWxlbmd0aCAjeDEwKSA1KSkKKworKENoZWNrLUVycm9yIHdyb25nLXR5cGUt
YXJndW1lbnQgKGxvZ2NvdW50IDAuMCkpCisoQ2hlY2stRXJyb3Igd3JvbmctdHlwZS1hcmd1bWVu
dCAobG9nY291bnQgJ3N5bWJvbCkpCisoQXNzZXJ0IChlcWwgKGxvZ2NvdW50IDApIDApKQorKEFz
c2VydCAoZXFsIChsb2djb3VudCAxKSAxKSkKKyhBc3NlcnQgKGVxbCAobG9nY291bnQgLTEpIDAp
KQorKEFzc2VydCAoZXFsIChsb2djb3VudCAjeC1GKSAzKSkKKyhBc3NlcnQgKGVxbCAobG9nY291
bnQgI3hGKSA0KSkKKyhBc3NlcnQgKGVxbCAobG9nY291bnQgI3gtMTApIDQpKQorKEFzc2VydCAo
ZXFsIChsb2djb3VudCAjeDEwKSAxKSkKKworKG1hY3JvbGV0CisgICAgKChyYW5kb20tc2FtcGxl
LW4gKCkgMTApIDs7IEluY3JlYXNlIHRoaXMgdG8gZ2V0IGEgYmlnZ2VyIHNhbXBsZS4KKyAgICAg
KHRlc3QtaW50ZWdlci1sZW5ndGgtcmFuZG9tLXNhbXBsZSAoKQorICAgICAgIChjb25zCisgICAg
ICAgICdwcm9nbgorICAgICAgICAobG9vcCBmb3IgaW5kZXggZnJvbSAwIHRvIChyYW5kb20tc2Ft
cGxlLW4pCisgICAgICAgICAgICAgIG5jb25jIChsZXQqICgodmFsdWUgKHJhbmRvbSAoaWYgKGZl
YXR1cmVwICdiaWdudW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGxzaCBtb3N0LXBvc2l0aXZlLWZpeG51bSA0KQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtb3N0LXBvc2l0aXZlLWZpeG51bSkpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGxlbmd0aCAobGVuZ3RoIChmb3JtYXQgIiViIiB2YWx1ZSkpKSkK
KyAgICAgICAgICAgICAgICAgICAgICBgKChBc3NlcnQgKGVxbCAoaW50ZWdlci1sZW5ndGggLHZh
bHVlKSAsbGVuZ3RoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIChBc3NlcnQgKGVxbCAoaW50
ZWdlci1sZW5ndGggLCgxLSAoLSB2YWx1ZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAsbGVuZ3RoKSkpKSkpKQorICAgICAodGVzdC1sb2dj
b3VudC1yYW5kb20tc2FtcGxlICgpCisgICAgICAgKGNvbnMKKyAgICAgICAgJ3Byb2duCisgICAg
ICAgIChsb29wIGZvciBpbmRleCBmcm9tIDAgdG8gKHJhbmRvbS1zYW1wbGUtbikKKyAgICAgICAg
ICAgICAgbmNvbmMgKGxldCogKCh2YWx1ZSAocmFuZG9tIChpZiAoZmVhdHVyZXAgJ2JpZ251bSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobHNoIG1vc3Qt
cG9zaXRpdmUtZml4bnVtIDQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1vc3QtcG9zaXRpdmUtZml4bnVtKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoY291bnQgKGNvdW50ID8xIChmb3JtYXQgIiViIiB2YWx1ZSkpKSkKKyAgICAgICAgICAgICAg
ICAgICAgICBgKChBc3NlcnQgKGVxbCAobG9nY291bnQgLHZhbHVlKSAsY291bnQpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgKEFzc2VydCAoZXFsIChsb2djb3VudCAsKGxvZ25vdCB2YWx1ZSkp
ICxjb3VudCkpKSkpKSkpCisgICh0ZXN0LWludGVnZXItbGVuZ3RoLXJhbmRvbS1zYW1wbGUpCisg
ICh0ZXN0LWxvZ2NvdW50LXJhbmRvbS1zYW1wbGUpKQorCis7Oy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiA7OyBUZXN0IGAlJywgbW9kCiA7Oy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAoQ2hl
Y2stRXJyb3Igd3JvbmctbnVtYmVyLW9mLWFyZ3VtZW50cyAoJSkpCgoKLS0gCuKAmFRyYW1hZG9s
IGlzIGZ1cnRoZXIgZmVkIHRvIGNhdHRsZSBb4oCmXSB3aGVuIHdvcmtpbmcgdGhlbSBb4oCmXSAo
YXMgZHJhZnQKYW5pbWFscykgc28gdGhhdCB0aGUgYW5pbWFscyBkbyBub3QgZ2V0IHRpcmVkIHF1
aWNrbHkuIOKApuKAmQoJ4oCUIEFuZ2V3YW5kdGUgQ2hlbWllLCBTZXB0IDIwMTQsIGRlc2NyaWJp
bmcgdGhlIHNvY2lhbCBjb250ZXh0IG9mCgkoc3ludGhldGljKSB0cmFtYWRvbCBoYXZpbmcgYmVl
biBmb3VuZCBpbiBDYW1lcm9vbiB0cmVlIHJvb3RzLgoKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KWEVtYWNzLVBhdGNoZXMgbWFpbGluZyBsaXN0ClhFbWFj
cy1QYXRjaGVzQHhlbWFjcy5vcmcKaHR0cDovL2xpc3RzLnhlbWFjcy5vcmcvbWFpbG1hbi9saXN0
aW5mby94ZW1hY3MtcGF0Y2hlcwo=