[kaffe] [patch] Re: Computing remainders

Dalibor Topic robilad@yahoo.com
Mon Jun 30 01:07:01 2003


--0-1158437493-1056960579=:57621
Content-Type: text/plain; charset=us-ascii
Content-Id: 
Content-Disposition: inline

Hi Tony, hallo Marc

I've attached a patch for the interpreter that should fix this issue for
gcc-compiled interpreter on all platforms. It works for me on mips-irix and
i386-linux interpreters. 

* It removes the *_MODULO_BROKEN and *_DIVISION_BROKEN test from the configure
script, since it's pointless to test for undefined behaviour. 
* It changes long_rem and int_rem definitions to explicitely test for -1 as the
dividend, and return 0 in that case, like the spec demands. 
* It also fixes int_div and long_div to check for MIN_VALUE / -1 and return
MIN_VALUE in that case, according to the spec. 
* It adds JINT_MIN and JLONG_MIN to jtypes.h.in.

could you give it a try on m68k and powerpc?

cheers,
dalibor topic

__________________________________
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!
http://sbc.yahoo.com
--0-1158437493-1056960579=:57621
Content-Type: application/octet-stream; name="division.diff"
Content-Transfer-Encoding: base64
Content-Description: division.diff
Content-Disposition: attachment; filename="division.diff"

T25seSBpbiBrYWZmZTogYXV0b200dGUuY2FjaGUKZGlmZiAtdXIgL2hvbWUv
dG9waWMvQ1ZTL2thZmZlL2NvbmZpZy9jb25maWcuaC5pbiBrYWZmZS9jb25m
aWcvY29uZmlnLmguaW4KLS0tIC9ob21lL3RvcGljL0NWUy9rYWZmZS9jb25m
aWcvY29uZmlnLmguaW4JMjAwMy0wNi0yNiAwNjowMjowMy4wMDAwMDAwMDAg
LTA0MDAKKysrIGthZmZlL2NvbmZpZy9jb25maWcuaC5pbgkyMDAzLTA2LTI5
IDEzOjQ2OjQzLjAwMDAwMDAwMCAtMDQwMApAQCAtNjAyLDE1ICs2MDIsNiBA
QAogLyogRG8gd2UgZW5hYmxlIHN0YXRzIGluIHRoZSB2bT8gKi8KICN1bmRl
ZiBLQUZGRV9TVEFUUwogCi0vKiBEZWZpbmUgaWYgTE9OR19NSU4gLyAtMWwg
cHJvZHVjZXMgYW4gYXJpdGhtZXRpYyBleGNlcHRpb24gKi8KLSN1bmRlZiBM
T05HX0RJVklTSU9OX0JST0tFTgotCi0vKiBEZWZpbmUgaWYgTE9OR19MT05H
X01JTiAlIC0xbGwgcHJvZHVjZXMgYW4gYXJpdGhtZXRpYyBleGNlcHRpb24g
Ki8KLSN1bmRlZiBMT05HX0xPTkdfTU9EVUxPX0JST0tFTgotCi0vKiBEZWZp
bmUgaWYgTE9OR19NSU4gJSAtMWwgcHJvZHVjZXMgYW4gYXJpdGhtZXRpYyBl
eGNlcHRpb24gKi8KLSN1bmRlZiBMT05HX01PRFVMT19CUk9LRU4KLQogLyog
SWYgdGhlIHZtIGlzIHN0YXRpYyBvciBhbGwgbGlicmFyaWVzIGFyZSBzdGF0
aWMgKi8KICN1bmRlZiBOT19TSEFSRURfVk1MSUJSQVJZCiAKZGlmZiAtdXIg
L2hvbWUvdG9waWMvQ1ZTL2thZmZlL2NvbmZpZ3VyZSBrYWZmZS9jb25maWd1
cmUKLS0tIC9ob21lL3RvcGljL0NWUy9rYWZmZS9jb25maWd1cmUJMjAwMy0w
Ni0yNiAwNzozMzo0Ni4wMDAwMDAwMDAgLTA0MDAKKysrIGthZmZlL2NvbmZp
Z3VyZQkyMDAzLTA2LTI5IDEzOjQ3OjM5LjAwMDAwMDAwMCAtMDQwMApAQCAt
Mzg5MTUsMTgzICszODkxNSw2IEBACiAKIExJQlM9IiRLU0FWRV9MSUJTIgog
Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBsb25n
IGRpdmlzaW9uIGlzIGJyb2tlbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNr
aW5nIHdoZXRoZXIgbG9uZyBkaXZpc2lvbiBpcyBicm9rZW4uLi4gJEVDSE9f
QyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xvbmdfZGl2aXNpb25fYnJva2Vu
K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkg
JEVDSE9fQyIgPiY2Ci1lbHNlCi0gICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29t
cGlsaW5nIiA9IHllczsgdGhlbgotICBhY19jdl9sb25nX2RpdmlzaW9uX2Jy
b2tlbj1jcm9zcwotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxf
QUNFT0YKLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLS8qIGNvbmZkZWZz
LmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRh
Y19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVu
ZCBjb25mZGVmcy5oLiAgKi8KLQotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2Rl
ZmluZSBUIGxvbmcKLSNpZm5kZWYgTE9OR19NSU4KLSMgZGVmaW5lIExPTkdf
TUlOICgoKCh1bnNpZ25lZCBUKSh+KFQpMCkpPj4xKSsxKQotI2VuZGlmCi1U
IGZvbyhUIGksIFQgaik7Ci1pbnQgbWFpbigpIHsgcmV0dXJuIGZvbyhMT05H
X01JTiwgLTFsKSAmJiAxOyB9Ci1UIGZvbyhUIGksIFQgaikgeyByZXR1cm4g
aSAvIGo7IH0KLQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQK
LWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtc
IiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9
JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMi
ID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9j
b25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRM
SU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+
JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBc
JD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07
IH07IHRoZW4KLSAgYWNfY3ZfbG9uZ19kaXZpc2lvbl9icm9rZW49bm8KLWVs
c2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1
cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dy
YW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQg
PiY1Ci0KLSggZXhpdCAkYWNfc3RhdHVzICkKLWFjX2N2X2xvbmdfZGl2aXNp
b25fYnJva2VuPXllcwotZmkKLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBn
bW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRh
Y19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWZpCi1lY2hvICIkYXNf
bWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbG9uZ19kaXZpc2lvbl9icm9r
ZW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xvbmdfZGl2aXNpb25f
YnJva2VuIiA+JjYKLWlmIHRlc3QgeCIkYWNfY3ZfbG9uZ19kaXZpc2lvbl9i
cm9rZW4iID0geCJ5ZXMiOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxc
X0FDRU9GCi0jZGVmaW5lIExPTkdfRElWSVNJT05fQlJPS0VOIDEKLV9BQ0VP
RgotCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hl
dGhlciBsb25nIG1vZHVsbyBpcyBicm9rZW4iID4mNQotZWNobyAkRUNIT19O
ICJjaGVja2luZyB3aGV0aGVyIGxvbmcgbW9kdWxvIGlzIGJyb2tlbi4uLiAk
RUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbG9uZ19tb2R1bG9fYnJv
a2VuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hl
ZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gICAgICBpZiB0ZXN0ICIkY3Jvc3Nf
Y29tcGlsaW5nIiA9IHllczsgdGhlbgotICBhY19jdl9sb25nX21vZHVsb19i
cm9rZW49Y3Jvc3MKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8
X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0vKiBjb25mZGVm
cy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4k
YWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBl
bmQgY29uZmRlZnMuaC4gICovCi0KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNk
ZWZpbmUgVCBsb25nCi0jaWZuZGVmIExPTkdfTUlOCi0jIGRlZmluZSBMT05H
X01JTiAoKCgodW5zaWduZWQgVCkofihUKTApKT4+MSkrMSkKLSNlbmRpZgot
VCBmb28oVCBpLCBUIGopOwotaW50IG1haW4oKSB7IHJldHVybiBmb28oTE9O
R19NSU4sIC0xbCkgPT0gMDsgfQotVCBmb28oVCBpLCBUIGopIHsgcmV0dXJu
IGkgJSBqOyB9Ci0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0
Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5r
XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVz
PSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVz
IiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4v
Y29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTok
TElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAy
PiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzog
XCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9
OyB9OyB0aGVuCi0gIGFjX2N2X2xvbmdfbW9kdWxvX2Jyb2tlbj1ubwotZWxz
ZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVz
ICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3Jh
bSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+
JjUKLQotKCBleGl0ICRhY19zdGF0dXMgKQotYWNfY3ZfbG9uZ19tb2R1bG9f
YnJva2VuPXllcwotZmkKLXJtIC1mIGNvcmUgY29yZS4qICouY29yZSBnbW9u
Lm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19v
YmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWZpCi1lY2hvICIkYXNfbWU6
JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbG9uZ19tb2R1bG9fYnJva2VuIiA+
JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9sb25nX21vZHVsb19icm9rZW4i
ID4mNgotaWYgdGVzdCB4IiRhY19jdl9sb25nX21vZHVsb19icm9rZW4iID0g
eCJ5ZXMiOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0j
ZGVmaW5lIExPTkdfTU9EVUxPX0JST0tFTiAxCi1fQUNFT0YKLQotZmkKLQot
ZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgbG9uZyBs
b25nIG1vZHVsbyBpcyBicm9rZW4iID4mNQotZWNobyAkRUNIT19OICJjaGVj
a2luZyB3aGV0aGVyIGxvbmcgbG9uZyBtb2R1bG8gaXMgYnJva2VuLi4uICRF
Q0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9sb25nX2xvbmdfbW9kdWxv
X2Jyb2tlbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihj
YWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICAgICAgaWYgdGVzdCAiJGNy
b3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgYWNfY3ZfbG9uZ19sb25n
X21vZHVsb19icm9rZW49Y3Jvc3MKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4k
YWNfZXh0IDw8X0FDRU9GCi0jbGluZSAkTElORU5PICJjb25maWd1cmUiCi0v
KiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5j
b25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FD
RU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpbmNsdWRlIDxsaW1p
dHMuaD4KLSNkZWZpbmUgVCBsb25nIGxvbmcKLSNpZm5kZWYgTE9OR19MT05H
X01JTgotIyBkZWZpbmUgTE9OR19MT05HX01JTiAoKCgodW5zaWduZWQgVCko
fihUKTApKT4+MSkrMSkKLSNlbmRpZgotVCBmb28oVCBpLCBUIGopOwotaW50
IG1haW4oKSB7IHJldHVybiBmb28oTE9OR19MT05HX01JTiwgLTFsbCkgPT0g
MDsgfQotVCBmb28oVCBpLCBUIGopIHsgcmV0dXJuIGkgJSBqOyB9Ci0KLV9B
Q0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVj
aG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2
YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRh
c19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQg
JGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhl
ZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190
cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1
cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1
cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFj
X2N2X2xvbmdfbG9uZ19tb2R1bG9fYnJva2VuPW5vCi1lbHNlCi0gIGVjaG8g
IiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1
cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4m
NQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4
aXQgJGFjX3N0YXR1cyApCi1hY19jdl9sb25nX2xvbmdfbW9kdWxvX2Jyb2tl
bj15ZXMKLWZpCi1ybSAtZiBjb3JlIGNvcmUuKiAqLmNvcmUgZ21vbi5vdXQg
YmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0
IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1maQotZWNobyAiJGFzX21lOiRMSU5F
Tk86IHJlc3VsdDogJGFjX2N2X2xvbmdfbG9uZ19tb2R1bG9fYnJva2VuIiA+
JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9sb25nX2xvbmdfbW9kdWxvX2Jy
b2tlbiIgPiY2Ci1pZiB0ZXN0IHgiJGFjX2N2X2xvbmdfbG9uZ19tb2R1bG9f
YnJva2VuIiA9IHgieWVzIjsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8
XF9BQ0VPRgotI2RlZmluZSBMT05HX0xPTkdfTU9EVUxPX0JST0tFTiAxCi1f
QUNFT0YKLQotZmkKLQogZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5n
IHdoZXRoZXIgc3RydG9kKFwiLTAuMFwiKSBpcyBicm9rZW4iID4mNQogZWNo
byAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHN0cnRvZChcIi0wLjBcIikg
aXMgYnJva2VuLi4uICRFQ0hPX0MiID4mNgogaWYgdGVzdCAiJHthY19jdl9z
dHJ0b2RfbTBfYnJva2VuK3NldH0iID0gc2V0OyB0aGVuCmRpZmYgLXVyIC9o
b21lL3RvcGljL0NWUy9rYWZmZS9jb25maWd1cmUuaW4ga2FmZmUvY29uZmln
dXJlLmluCi0tLSAvaG9tZS90b3BpYy9DVlMva2FmZmUvY29uZmlndXJlLmlu
CTIwMDMtMDYtMjYgMDc6MzM6NDcuMDAwMDAwMDAwIC0wNDAwCisrKyBrYWZm
ZS9jb25maWd1cmUuaW4JMjAwMy0wNi0yOSAxMzo0NToyOS4wMDAwMDAwMDAg
LTA0MDAKQEAgLTEwMTUsNTcgKzEwMTUsNiBAQAogQUNfQ0hFQ0tfRlVOQ1Mo
W3N0cmR1cCBzdHJzdHIgc3RydG9kIHN0cnRvbCBzdHJ0b3VsXSkKIExJQlM9
IiRLU0FWRV9MSUJTIgogCi1kbmwgVGVzdCB3aGV0aGVyIExPTkdfTUlOIC8g
LTFsIGNyYXNoZXMKLUFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGxvbmcgZGl2
aXNpb24gaXMgYnJva2VuXSwKLSAgYWNfY3ZfbG9uZ19kaXZpc2lvbl9icm9r
ZW4sIFtkbmwKLSAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShb
WwotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2RlZmluZSBUIGxvbmcKLSNpZm5k
ZWYgTE9OR19NSU4KLSMgZGVmaW5lIExPTkdfTUlOICgoKCh1bnNpZ25lZCBU
KSh+KFQpMCkpPj4xKSsxKQotI2VuZGlmCi1UIGZvbyhUIGksIFQgaik7Ci1p
bnQgbWFpbigpIHsgcmV0dXJuIGZvbyhMT05HX01JTiwgLTFsKSAmJiAxOyB9
Ci1UIGZvbyhUIGksIFQgaikgeyByZXR1cm4gaSAvIGo7IH0KLV1dKV0sW2Fj
X2N2X2xvbmdfZGl2aXNpb25fYnJva2VuPW5vXSxbYWNfY3ZfbG9uZ19kaXZp
c2lvbl9icm9rZW49eWVzXSxbYWNfY3ZfbG9uZ19kaXZpc2lvbl9icm9rZW49
Y3Jvc3NdKV0pCi1pZiB0ZXN0IHgiJGFjX2N2X2xvbmdfZGl2aXNpb25fYnJv
a2VuIiA9IHgieWVzIjsgdGhlbgotICBBQ19ERUZJTkUoTE9OR19ESVZJU0lP
Tl9CUk9LRU4sIDEsIFtEZWZpbmUgaWYgTE9OR19NSU4gLyAtMWwgcHJvZHVj
ZXMgYW4gYXJpdGhtZXRpYyBleGNlcHRpb25dKQotZmkKLQotZG5sIFRlc3Qg
d2hldGhlciBMT05HX01JTiAlIC0xbCBjcmFzaGVzCi1BQ19DQUNIRV9DSEVD
Syhbd2hldGhlciBsb25nIG1vZHVsbyBpcyBicm9rZW5dLAotICBhY19jdl9s
b25nX21vZHVsb19icm9rZW4sIFtkbmwKLSAgICBBQ19SVU5fSUZFTFNFKFtB
Q19MQU5HX1NPVVJDRShbWwotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2RlZmlu
ZSBUIGxvbmcKLSNpZm5kZWYgTE9OR19NSU4KLSMgZGVmaW5lIExPTkdfTUlO
ICgoKCh1bnNpZ25lZCBUKSh+KFQpMCkpPj4xKSsxKQotI2VuZGlmCi1UIGZv
byhUIGksIFQgaik7Ci1pbnQgbWFpbigpIHsgcmV0dXJuIGZvbyhMT05HX01J
TiwgLTFsKSA9PSAwOyB9Ci1UIGZvbyhUIGksIFQgaikgeyByZXR1cm4gaSAl
IGo7IH0KLV1dKV0sW2FjX2N2X2xvbmdfbW9kdWxvX2Jyb2tlbj1ub10sW2Fj
X2N2X2xvbmdfbW9kdWxvX2Jyb2tlbj15ZXNdLFthY19jdl9sb25nX21vZHVs
b19icm9rZW49Y3Jvc3NdKV0pCi1pZiB0ZXN0IHgiJGFjX2N2X2xvbmdfbW9k
dWxvX2Jyb2tlbiIgPSB4InllcyI7IHRoZW4KLSAgQUNfREVGSU5FKExPTkdf
TU9EVUxPX0JST0tFTiwgMSwgW0RlZmluZSBpZiBMT05HX01JTiAlIC0xbCBw
cm9kdWNlcyBhbiBhcml0aG1ldGljIGV4Y2VwdGlvbl0pCi1maQotCi1kbmwg
VGVzdCB3aGV0aGVyIExPTkdfTE9OR19NSU4gJSAtMWxsIGNyYXNoZXMKLUFD
X0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGxvbmcgbG9uZyBtb2R1bG8gaXMgYnJv
a2VuXSwKLSAgYWNfY3ZfbG9uZ19sb25nX21vZHVsb19icm9rZW4sIFtkbmwK
LSAgICBBQ19SVU5fSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbWwotI2luY2x1
ZGUgPGxpbWl0cy5oPgotI2RlZmluZSBUIGxvbmcgbG9uZwotI2lmbmRlZiBM
T05HX0xPTkdfTUlOCi0jIGRlZmluZSBMT05HX0xPTkdfTUlOICgoKCh1bnNp
Z25lZCBUKSh+KFQpMCkpPj4xKSsxKQotI2VuZGlmCi1UIGZvbyhUIGksIFQg
aik7Ci1pbnQgbWFpbigpIHsgcmV0dXJuIGZvbyhMT05HX0xPTkdfTUlOLCAt
MWxsKSA9PSAwOyB9Ci1UIGZvbyhUIGksIFQgaikgeyByZXR1cm4gaSAlIGo7
IH0KLV1dKV0sW2FjX2N2X2xvbmdfbG9uZ19tb2R1bG9fYnJva2VuPW5vXSxb
YWNfY3ZfbG9uZ19sb25nX21vZHVsb19icm9rZW49eWVzXSxbYWNfY3ZfbG9u
Z19sb25nX21vZHVsb19icm9rZW49Y3Jvc3NdKV0pCi1pZiB0ZXN0IHgiJGFj
X2N2X2xvbmdfbG9uZ19tb2R1bG9fYnJva2VuIiA9IHgieWVzIjsgdGhlbgot
ICBBQ19ERUZJTkUoTE9OR19MT05HX01PRFVMT19CUk9LRU4sIDEsIFtEZWZp
bmUgaWYgTE9OR19MT05HX01JTiAlIC0xbGwgcHJvZHVjZXMgYW4gYXJpdGht
ZXRpYyBleGNlcHRpb25dKQotZmkKLQogZG5sIFRlc3Qgd2hldGhlciBzdHJ0
b2QoIi0wLjAiKSBpcyBicm9rZW4KIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVy
IHN0cnRvZChcIi0wLjBcIikgaXMgYnJva2VuXSwKICAgYWNfY3Zfc3RydG9k
X20wX2Jyb2tlbiwgW2RubApPbmx5IGluIGthZmZlOiBjb25maWd1cmUuaW4u
fjEuMjEwLn4KZGlmZiAtdXIgL2hvbWUvdG9waWMvQ1ZTL2thZmZlL2luY2x1
ZGUvanR5cGVzLmguaW4ga2FmZmUvaW5jbHVkZS9qdHlwZXMuaC5pbgotLS0g
L2hvbWUvdG9waWMvQ1ZTL2thZmZlL2luY2x1ZGUvanR5cGVzLmguaW4JMTk5
OC0wNy0xNCAxMDowMjowOC4wMDAwMDAwMDAgLTA0MDAKKysrIGthZmZlL2lu
Y2x1ZGUvanR5cGVzLmguaW4JMjAwMy0wNi0yOSAxNDozMjozNC4wMDAwMDAw
MDAgLTA0MDAKQEAgLTI4LDIxICsyOCwyNiBAQAogI2lmIFNJWkVPRl9JTlQg
PT0gNAogdHlwZWRlZiBpbnQJCWppbnQ7CiB0eXBlZGVmIHVuc2lnbmVkIGlu
dAlqc2l6ZTsKKyNkZWZpbmUgSklOVF9NSU4gICAgICAgIDB4ODAwMDAwMDAK
ICNlbGlmIFNJWkVPRl9MT05HID09IDQKIHR5cGVkZWYgbG9uZwkJamludDsK
IHR5cGVkZWYgdW5zaWduZWQgbG9uZwlqc2l6ZTsKKyNkZWZpbmUgSklOVF9N
SU4gICAgICAgIDB4ODAwMDAwMDBMCiAjZWxzZQogI2Vycm9yICJzaXplb2Yo
aW50KSBvciBzaXplb2YobG9uZykgbXVzdCBiZSA0IgogI2VuZGlmCiAKICNp
ZiBTSVpFT0ZfTE9ORyA9PSA4CiB0eXBlZGVmIGxvbmcJCWpsb25nOworI2Rl
ZmluZSBKTE9OR19NSU4gICAgICAgMHg4MDAwMDAwMDAwMDAwMDAwTAogI2Vs
aWYgU0laRU9GX0xPTkdfTE9ORyA9PSA4CiB0eXBlZGVmIGxvbmcgbG9uZwlq
bG9uZzsKLSNlbGlmIFNJWkVPRl9fX0lOVDY0ID09IDgKKyNkZWZpbmUgSkxP
TkdfTUlOICAgICAgIDB4ODAwMDAwMDAwMDAwMDAwMExMCisjZWxpZiBTSVpF
T0ZfX19JTlQ2NCA9PSA4IC8qIE1pY3Jvc29mdCdzIFZpc3VhbCBDKysgNi4w
ICovCiB0eXBlZGVmIF9faW50NjQJCWpsb25nOworI2RlZmluZSBKTE9OR19N
SU4gICAgICAgMHg4MDAwMDAwMDAwMDAwMDAwaTY0CiAjZWxzZQotI2Vycm9y
ICJzaXplb2YobG9uZyBsb25nKSBvciBzaXplb2YoX19pbnQ2NCkgbXVzdCBi
ZSA4IgorI2Vycm9yICJzaXplb2YobG9uZykgb3Igc2l6ZW9mKGxvbmcgbG9u
Zykgb3Igc2l6ZW9mKF9faW50NjQpIG11c3QgYmUgOCIKICNlbmRpZgogCiB0
eXBlZGVmCWpjaGFyCQl1bmljb2RlOwpPbmx5IGluIGthZmZlL2luY2x1ZGU6
IGp0eXBlcy5oLmluLn4xLjMufgpkaWZmIC11ciAvaG9tZS90b3BpYy9DVlMv
a2FmZmUva2FmZmUva2FmZmV2bS9pbnRycC9pY29kZS5oIGthZmZlL2thZmZl
L2thZmZldm0vaW50cnAvaWNvZGUuaAotLS0gL2hvbWUvdG9waWMvQ1ZTL2th
ZmZlL2thZmZlL2thZmZldm0vaW50cnAvaWNvZGUuaAkyMDAxLTA1LTA3IDA2
OjA0OjM1LjAwMDAwMDAwMCAtMDQwMAorKysga2FmZmUva2FmZmUva2FmZmV2
bS9pbnRycC9pY29kZS5oCTIwMDMtMDYtMjkgMTI6NDM6MTIuMDAwMDAwMDAw
IC0wNDAwCkBAIC0xNiwxNCArMTYsOCBAQAogI2RlZmluZQlhZGRfbG9uZyh0
LCBmMSwgZjIpCQkJKHQpWzBdLnYudGxvbmcgPSAoZjEpWzBdLnYudGxvbmcg
KyAoZjIpWzBdLnYudGxvbmcKICNkZWZpbmUJc3ViX2xvbmcodCwgZjEsIGYy
KQkJCSh0KVswXS52LnRsb25nID0gKGYxKVswXS52LnRsb25nIC0gKGYyKVsw
XS52LnRsb25nCiAjZGVmaW5lCW11bF9sb25nKHQsIGYxLCBmMikJCQkodClb
MF0udi50bG9uZyA9IChmMSlbMF0udi50bG9uZyAqIChmMilbMF0udi50bG9u
ZwotI2RlZmluZQlkaXZfbG9uZyh0LCBmMSwgZjIpCQkJKHQpWzBdLnYudGxv
bmcgPSAoZjEpWzBdLnYudGxvbmcgLyAoZjIpWzBdLnYudGxvbmcKLSNpZiBM
T05HX0xPTkdfTU9EVUxPX0JST0tFTgotLyogZWdjcyAxLjEuKiBvbiBJUklY
IDYuMy9taXBzIHByb2R1Y2VzIGFuIGFyaXRobWV0aWMgZXhjZXB0aW9uIGZv
cgotICAgTE9OR19MT05HX01JTiAlIC0xbGwuICBTaW5jZSBhbnl0aGluZyAl
IC0xbGwgaXMgMCwgc3BlY2lhbC1jYXNlIGl0LiAgKi8KLSMgZGVmaW5lIHJl
bV9sb25nKHQsIGYxLCBmMikJCQkodClbMF0udi50bG9uZyA9ICgoKGYyKVsw
XS52LnRsb25nICE9IC0xKSA/ICgoZjEpWzBdLnYudGxvbmcgJSAoZjIpWzBd
LnYudGxvbmcpIDogMCkKLSNlbHNlCi0jIGRlZmluZSByZW1fbG9uZyh0LCBm
MSwgZjIpCQkJKHQpWzBdLnYudGxvbmcgPSAoZjEpWzBdLnYudGxvbmcgJSAo
ZjIpWzBdLnYudGxvbmcKLSNlbmRpZgorI2RlZmluZSBkaXZfbG9uZyh0LCBm
MSwgZjIpCQkJKHQpWzBdLnYudGxvbmcgPSAoKCgoKGYxKVswXS52LnRsb25n
KSA9PSBKTE9OR19NSU4pICYmICgoKGYyKVswXS52LnRsb25nKSA9PSAtMSkp
ID8gSkxPTkdfTUlOIDogKCgoZjEpWzBdLnYudGxvbmcpIC8gKChmMilbMF0u
di50bG9uZykpKQorI2RlZmluZSByZW1fbG9uZyh0LCBmMSwgZjIpICAgICAg
ICAgICAgICAgICAgICAgKHQpWzBdLnYudGxvbmcgPSAoKCgoZjIpWzBdLnYu
dGxvbmcpICE9IC0xKSA/ICgoKGYxKVswXS52LnRsb25nKSAlICgoZjIpWzBd
LnYudGxvbmcpKSA6IDApCiAjZGVmaW5lCW5lZ19sb25nKHQsIGYpCQkJCSh0
KVswXS52LnRsb25nID0gLShmKVswXS52LnRsb25nCiAKICNkZWZpbmUJYW5k
X2xvbmcodCwgZjEsIGYyKQkJCSh0KVswXS52LnRsb25nID0gKGYxKVswXS52
LnRsb25nICYgKGYyKVswXS52LnRsb25nCkBAIC04MywyMSArNzcsOCBAQAog
I2RlZmluZQlhZGRfcmVmKHQsIGYxLCBmMikJCQkodClbMF0udi50YWRkciA9
ICh2b2lkKikoKHVpbnQ4KikoKGYxKVswXS52LnRhZGRyKSArICgoZjIpWzBd
LnYudGludCkpCiAjZGVmaW5lCXN1Yl9pbnQodCwgZjEsIGYyKQkJCSh0KVsw
XS52LnRpbnQgPSAoKGYxKVswXS52LnRpbnQpIC0gKChmMilbMF0udi50aW50
KQogI2RlZmluZQltdWxfaW50KHQsIGYxLCBmMikJCQkodClbMF0udi50aW50
ID0gKChmMSlbMF0udi50aW50KSAqICgoZjIpWzBdLnYudGludCkKLQotI2lm
IExPTkdfRElWSVNJT05fQlJPS0VOCi0vKiBMT05HX01JTiAvIC0xbCBvbiBp
Mzg2IHByb2R1Y2VzIGFuIGFyaXRobWV0aWMgZXhjZXB0aW9uLiAgU2luY2UK
LSAgIGFueXRoaW5nIC8gLTFsIGlzIC1hbnl0aGluZywgc3BlY2lhbC1jYXNl
IGl0LiAgKi8KLSMgZGVmaW5lIGRpdl9pbnQodCwgZjEsIGYyKQkJCSh0KVsw
XS52LnRpbnQgPSAoKCgoZjIpWzBdLnYudGludCkgIT0gLTEpID8gKCgoZjEp
WzBdLnYudGludCkgLyAoKGYyKVswXS52LnRpbnQpKSA6IC0oKGYxKVswXS52
LnRpbnQpKQotI2Vsc2UKLSMgZGVmaW5lIGRpdl9pbnQodCwgZjEsIGYyKQkJ
CSh0KVswXS52LnRpbnQgPSAoKGYxKVswXS52LnRpbnQpIC8gKChmMilbMF0u
di50aW50KQotI2VuZGlmCi0jaWYgTE9OR19NT0RVTE9fQlJPS0VOCi0vKiBM
T05HX01JTiAlIC0xbCBvbiBpMzg2IHByb2R1Y2VzIGFuIGFyaXRobWV0aWMg
ZXhjZXB0aW9uLiAgU2luY2UKLSAgIGFueXRoaW5nICUgLTFsIGlzIDAsIHNw
ZWNpYWwtY2FzZSBpdC4gICovCi0jIGRlZmluZSByZW1faW50KHQsIGYxLCBm
MikJCQkodClbMF0udi50aW50ID0gKCgoKGYyKVswXS52LnRpbnQpICE9IC0x
KSA/ICgoKGYxKVswXS52LnRpbnQpICUgKChmMilbMF0udi50aW50KSkgOiAw
KQotI2Vsc2UKLSMgZGVmaW5lIHJlbV9pbnQodCwgZjEsIGYyKQkJCSh0KVsw
XS52LnRpbnQgPSAoKGYxKVswXS52LnRpbnQpICUgKChmMilbMF0udi50aW50
KQotI2VuZGlmCisjZGVmaW5lIGRpdl9pbnQodCwgZjEsIGYyKQkJCSh0KVsw
XS52LnRpbnQgPSAoKCgoKGYxKVswXS52LnRpbnQpID09IEpJTlRfTUlOKSAm
JiAoKChmMilbMF0udi50aW50KSA9PSAtMSkpID8gSklOVF9NSU4gOiAoKChm
MSlbMF0udi50aW50KSAvICgoZjIpWzBdLnYudGludCkpKQorI2RlZmluZSBy
ZW1faW50KHQsIGYxLCBmMikgICAgICAgICAgICAgICAgICAgICAgKHQpWzBd
LnYudGludCA9ICgoKChmMilbMF0udi50aW50KSAhPSAtMSkgPyAoKChmMSlb
MF0udi50aW50KSAlICgoZjIpWzBdLnYudGludCkpIDogMCkKICNkZWZpbmUJ
bmVnX2ludCh0LCBmKQkJCQkodClbMF0udi50aW50ID0gLSgoZilbMF0udi50
aW50KQogI2RlZmluZQlsc2hsX2ludF9jb25zdCh0LCBmLCBjKQkJCSh0KVsw
XS52LnRpbnQgPSAoKGYpWzBdLnYudGludCkgPDwgKGMgJiAzMSkKICNkZWZp
bmUJbHNobF9pbnQodCwgZjEsIGYyKQkJCSh0KVswXS52LnRpbnQgPSAoKGYx
KVswXS52LnRpbnQpIDw8ICgoZjIpWzBdLnYudGludCAmIDMxKQpPbmx5IGlu
IGthZmZlL2thZmZlL2thZmZldm0vaW50cnA6IGljb2RlLmgufjEuMTUufgpP
bmx5IGluIGthZmZlL2xpYmx0ZGw6IGF1dG9tNHRlLmNhY2hlCg==

--0-1158437493-1056960579=:57621--