<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>15761</bug_id>
          
          <creation_ts>2007-10-30 03:17:42 -0700</creation_ts>
          <short_desc>Speed up JSImmediate::getTruncated* by using custom float -&gt; int code</short_desc>
          <delta_ts>2007-11-08 22:59:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>mjs</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>59839</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-10-30 03:17:42 -0700</bug_when>
    <thetext>Speed up JSImmediate::getTruncated* by using custom float -&gt; int code

I&apos;ve written some code for this (attached).  It seems to break sun-spider, even though my printf-debugging seems to suggest my code is correct.  Not sure yet what&apos;s wrong.  Anyone should feel free to fix/land this as needed, I probably won&apos;t get to look at it for several days.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59840</commentid>
    <comment_count>1</comment_count>
      <attachid>16944</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-10-30 03:19:00 -0700</bug_when>
    <thetext>Created attachment 16944
broken fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59891</commentid>
    <comment_count>2</comment_count>
      <attachid>16956</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-10-30 19:22:06 -0700</bug_when>
    <thetext>Created attachment 16956
nearly correct functions (fail two tests) inside test harness</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59892</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-10-30 19:23:49 -0700</bug_when>
    <thetext>The test output:

Running JSImmediate::getTruncated* tests, this will take a while.
                       testing : -2147483648 : 1000 0000 0000 0000 0000 0000 0000 0000 
getTruncatedUInt32 -0.000000 expected: 0 (1) got: 0 (0)
                       testing : -822083584 : 1100 1111 0000 0000 0000 0000 0000 0000 
getTruncatedInt32  -2147483648.000000 expected: -2147483648 (1) got: -2147483648 (0)

The first failure is obvious.  Not sure if we need to support it (depending on how 0 is stored in JSImmediate floats), probably though.  The second failure seems to be related to exponent size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59893</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-10-30 19:56:55 -0700</bug_when>
    <thetext>FYI, in addition to being slightly wrong... this code is also slightly (but only slightly!) slower than the current float -&gt; int code.  I&apos;m confident that both correctness and speed can be fixed, but I&apos;m a bit tired to do so myself.  Perhaps someone will do so while I&apos;m in Mexico.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59894</commentid>
    <comment_count>5</comment_count>
      <attachid>16957</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-10-30 20:18:28 -0700</bug_when>
    <thetext>Created attachment 16957
an actual patch for JSC (same code as in test above)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>60735</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-11-08 22:59:14 -0800</bug_when>
    <thetext>Oliver got good results by switching our immediate optimization from floating point to int instead.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16944</attachid>
            <date>2007-10-30 03:19:00 -0700</date>
            <delta_ts>2007-10-30 19:22:06 -0700</delta_ts>
            <desc>broken fix</desc>
            <filename>fast-float-to-int.patch</filename>
            <type>text/plain</type>
            <size>3067</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtqcy9KU0ltbWVkaWF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9KU0ltbWVkaWF0ZS5o
CShyZXZpc2lvbiAyNzI1NSkKKysrIGtqcy9KU0ltbWVkaWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzcsMjMgKzE3Nyw1NSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0ltbWVkaWF0ZTo6RlBCaXRW
YWx1CiAgICAgewogICAgICAgICByZXR1cm4gdG9GbG9hdCh2KTsKICAgICB9CisgICAgCisgICAg
c3RhdGljIGNvbnN0IHVpbnQzMl90IE1hbnRpc3NhTWFzayAgICA9IDB4MDA3RkZGRkY7CisgICAg
c3RhdGljIGNvbnN0IHVpbnQzMl90IEltcGxpY2l0T25lTWFzayA9IDB4MDA4MDAwMDA7CisgICAg
c3RhdGljIGNvbnN0IHVpbnQzMl90IFNpZ25NYXNrICAgICAgICA9IDB4ODAwMDAwMDA7CisgICAg
c3RhdGljIGNvbnN0IHVpbnQzMl90IEV4cG9uZW50TWFzayAgICA9IDB4N0Y4MDAwMDA7CisgICAg
c3RhdGljIGNvbnN0IGludDMyX3QgTnVtYmVyT2ZNYW50aXNzYUJpdHMgPSAyMzsKKyAgICBzdGF0
aWMgY29uc3QgaW50MzJfdCBFeHBvbmVudEJpYXMgPSAxMjc7CisKKyAgICBzdGF0aWMgY29uc3Qg
dWludDMyX3QgU2lnbkFuZEV4cG9uZW50TWFzayA9IH5NYW50aXNzYU1hc2s7CisgICAgc3RhdGlj
IGNvbnN0IGludDMyX3QgVUludDMyTGFyZ2VzdEFsbG93ZWRFeHBvbmVudCA9IDMyICsgRXhwb25l
bnRCaWFzOworICAgIHN0YXRpYyBjb25zdCBpbnQzMl90IEludDMyTGFyZ2VzdEFsbG93ZWRFeHBv
bmVudCA9IDMxICsgRXhwb25lbnRCaWFzOworCisgICAgLy8gRklYTUU6IEkgdGhpbmsgdGhlc2Ug
ZmFpbCBpZiB3ZSBzdG9yZWQgZXhhY3RseSAweEZGRkZGRkZGCisgICAgCisgICAgc3RhdGljIHZv
aWQgcHJpbnRCaW5hcnkoY29uc3QgY2hhciogbGFiZWwsIGludDMyX3QgaSkKKyAgICB7CisgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiJTMwcyA6ICUxMGkgOiAiLCBsYWJlbCwgaSk7CisgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgMzI7IHgrKykgeworICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICIlaSIsIChpID4+IHgpICYgMHgxKTsKKyAgICAgICAgICAgIGlmICgoeCAlIDQpID09IDMp
CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIik7CisgICAgICAgIH0KKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgIH0KIAogICAgIHN0YXRpYyBBTFdBWVNfSU5M
SU5FIGJvb2wgZ2V0VHJ1bmNhdGVkSW50MzIoY29uc3QgSlNWYWx1ZSogdiwgaW50MzJfdCYgaSkK
ICAgICB7Ci0gICAgICAgIGZsb2F0IGYgPSB0b0Zsb2F0KHYpOwotICAgICAgICBpZiAoIShmID49
IC0yMTQ3NDgzNjQ4LjBGICYmIGYgPCAyMTQ3NDgzNjQ4LjBGKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgaSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGYpOwotICAgICAgICBy
ZXR1cm4gaXNOdW1iZXIodik7CisgICAgICAgIHVpbnQzMl90IG91dHB1dCA9IHN0YXRpY19jYXN0
PHVpbnQzMl90Pih1blRhZyh2KSk7CisgICAgICAgIGludDMyX3QgZXhwb25lbnQgPSBvdXRwdXQg
JiBFeHBvbmVudE1hc2s7CisgICAgICAgIHVpbnQzMl90IHNpZ24gPSBvdXRwdXQgJiBTaWduTWFz
azsKKyAgICAgICAgZXhwb25lbnQgPj49IE51bWJlck9mTWFudGlzc2FCaXRzOworICAgICAgICBv
dXRwdXQgJj0gTWFudGlzc2FNYXNrOworICAgICAgICBpbnQgc2hpZnQgPSAoZXhwb25lbnQgLSBF
eHBvbmVudEJpYXMgLSBOdW1iZXJPZk1hbnRpc3NhQml0cyk7CisgICAgICAgIGkgPSAoKHNoaWZ0
ID4gMCkgPyAob3V0cHV0IHwgSW1wbGljaXRPbmVNYXNrKSA8PCBzaGlmdCA6IChvdXRwdXQgfCBJ
bXBsaWNpdE9uZU1hc2spID4+IC1zaGlmdCkgfCBzaWduOworICAgICAgICAvL2ZwcmludGYoc3Rk
ZXJyLCAiZXhwZWN0ZWQ6ICVpIGdvdDogJWkgZXhwb25lbnQ6ICVpXG4iLCBzdGF0aWNfY2FzdDxp
bnQzMl90Pih0b0Zsb2F0KHYpKSwgaSwgZXhwb25lbnQpOworICAgICAgICByZXR1cm4gKGV4cG9u
ZW50IDwgSW50MzJMYXJnZXN0QWxsb3dlZEV4cG9uZW50KSAmJiBpc051bWJlcih2KTsKICAgICB9
CiAKICAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGdldFRydW5jYXRlZFVJbnQzMihjb25z
dCBKU1ZhbHVlKiB2LCB1aW50MzJfdCYgaSkKICAgICB7Ci0gICAgICAgIGZsb2F0IGYgPSB0b0Zs
b2F0KHYpOwotICAgICAgICBpZiAoIShmID49IDAuMEYgJiYgZiA8IDQyOTQ5NjcyOTYuMEYpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpID0gc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KGYpOwotICAgICAgICByZXR1cm4gaXNOdW1iZXIodik7CisgICAgICAgIHVpbnQzMl90IG91
dHB1dCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pih1blRhZyh2KSk7CisgICAgICAgIGludDMyX3Qg
ZXhwb25lbnQgPSBvdXRwdXQgJiBFeHBvbmVudE1hc2s7CisgICAgICAgIHVpbnQzMl90IHNpZ24g
PSBvdXRwdXQgJiBTaWduTWFzazsKKyAgICAgICAgZXhwb25lbnQgPj49IE51bWJlck9mTWFudGlz
c2FCaXRzOworICAgICAgICBvdXRwdXQgJj0gTWFudGlzc2FNYXNrOworICAgICAgICBpbnQgc2hp
ZnQgPSAoZXhwb25lbnQgLSBFeHBvbmVudEJpYXMgLSBOdW1iZXJPZk1hbnRpc3NhQml0cyk7Cisg
ICAgICAgIGkgPSAoc2hpZnQgPiAwKSA/IChvdXRwdXQgfCBJbXBsaWNpdE9uZU1hc2spIDw8IHNo
aWZ0IDogKG91dHB1dCB8IEltcGxpY2l0T25lTWFzaykgPj4gLXNoaWZ0OworICAgICAgICAvL2Zw
cmludGYoc3RkZXJyLCAiZXhwZWN0ZWQ6ICV1IGdvdDogJXUgZXhwb25lbnQ6ICVpIHRlc3Q6ICVp
XG4iLCBzdGF0aWNfY2FzdDx1aW50MzJfdD4odG9GbG9hdCh2KSksIGksIGV4cG9uZW50LCAoIXNp
Z24gJiYgZXhwb25lbnQgPCBVSW50MzJMYXJnZXN0QWxsb3dlZEV4cG9uZW50KSAmJiBpc051bWJl
cih2KSk7CisgICAgICAgIHJldHVybiAoIXNpZ24gJiYgZXhwb25lbnQgPCBVSW50MzJMYXJnZXN0
QWxsb3dlZEV4cG9uZW50KSAmJiBpc051bWJlcih2KTsKICAgICB9CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>16956</attachid>
            <date>2007-10-30 19:22:06 -0700</date>
            <delta_ts>2007-10-30 19:22:06 -0700</delta_ts>
            <desc>nearly correct functions (fail two tests) inside test harness</desc>
            <filename>testjsimmediate.cpp</filename>
            <type>text/plain</type>
            <size>6515</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW50Lmg+CiNpbmNsdWRlIDxzdGRpby5o
PgoKdW5pb24gRmxvYXRVbmlvbiB7CiAgICB1aW50MzJfdCBhc0JpdHM7CiAgICBmbG9hdCAgICBh
c0Zsb2F0Owp9OwoKc3RhdGljIHZvaWQgcHJpbnRCaW5hcnkoY29uc3QgY2hhciogbGFiZWwsIGlu
dDMyX3QgaSkKewogICAgLy8gcHJpbnRzICJiaWcgZW5kaWFuIiByZWdhcmRsZXNzIG9mIGFyY2gK
ICAgIGZwcmludGYoc3RkZXJyLCAiJTMwcyA6ICUxMGkgOiAiLCBsYWJlbCwgaSk7CiAgICBmb3Ig
KGludCB4ID0gMzE7IHggPj0gMDsgeC0tKSB7CiAgICAgICAgZnByaW50ZihzdGRlcnIsICIlaSIs
IChpID4+IHgpICYgMHgxKTsKICAgICAgICBpZiAoKHggJSA0KSA9PSAwKQogICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiAiKTsKICAgIH0KICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKfQoK
c3RhdGljIGNvbnN0IHVpbnQzMl90IE1hbnRpc3NhTWFzayAgICA9IDB4MDA3RkZGRkY7CnN0YXRp
YyBjb25zdCB1aW50MzJfdCBJbXBsaWNpdE9uZU1hc2sgPSAweDAwODAwMDAwOwpzdGF0aWMgY29u
c3QgdWludDMyX3QgU2lnbk1hc2sgICAgICAgID0gMHg4MDAwMDAwMDsKc3RhdGljIGNvbnN0IHVp
bnQzMl90IEV4cG9uZW50TWFzayAgICA9IDB4N0Y4MDAwMDA7CnN0YXRpYyBjb25zdCBpbnQzMl90
IE51bWJlck9mTWFudGlzc2FCaXRzID0gMjM7CnN0YXRpYyBjb25zdCBpbnQzMl90IEV4cG9uZW50
QmlhcyA9IDEyNzsKCnN0YXRpYyBjb25zdCB1aW50MzJfdCBTaWduQW5kRXhwb25lbnRNYXNrID0g
fk1hbnRpc3NhTWFzazsKc3RhdGljIGNvbnN0IGludDMyX3QgVUludDMyTGFyZ2VzdEFsbG93ZWRT
aGlmdCA9IDg7CnN0YXRpYyBjb25zdCBpbnQzMl90IEludDMyTGFyZ2VzdEFsbG93ZWRTaGlmdCA9
IDc7CgpzdGF0aWMgYm9vbCBnZXRUcnVuY2F0ZWRJbnQzMk5ldyhjb25zdCBGbG9hdFVuaW9uJiBm
bG9hdFVuaW9uLCBpbnQzMl90JiBpKQp7CiAgICB1aW50MzJfdCBvdXRwdXQgPSBmbG9hdFVuaW9u
LmFzQml0czsKICAgIGludDMyX3QgZXhwb25lbnQgPSBvdXRwdXQgJiBFeHBvbmVudE1hc2s7CiAg
ICB1aW50MzJfdCBzaWduID0gb3V0cHV0ICYgU2lnbk1hc2s7CiAgICBleHBvbmVudCA+Pj0gTnVt
YmVyT2ZNYW50aXNzYUJpdHM7CiAgICBvdXRwdXQgJj0gTWFudGlzc2FNYXNrOwogICAgaWYgKGV4
cG9uZW50KQogICAgICAgIG91dHB1dCB8PSBJbXBsaWNpdE9uZU1hc2s7CiAgICBpbnQzMl90IHNo
aWZ0ID0gKGV4cG9uZW50IC0gRXhwb25lbnRCaWFzIC0gTnVtYmVyT2ZNYW50aXNzYUJpdHMpOwog
ICAgdWludDMyX3QgYWJzU2hpZnQgPSAoc2hpZnQgPiAwKSA/IHNoaWZ0IDogLXNoaWZ0OwogICAg
aWYgKGFic1NoaWZ0ID4gMzEpCiAgICAgICAgb3V0cHV0ID0gMDsgLy8gQ29tcGlsZXJzIGRvIHN0
cmFuZ2UgdGhpbmdzIHdpdGggbGFyZ2Ugc2hpZnRzLCBkZXNwaXRlIEM5OSBzYXlpbmcgb3RoZXJ3
aXNlLgogICAgb3V0cHV0ID0gKChzaGlmdCA+IDApID8gb3V0cHV0IDw8IGFic1NoaWZ0IDogb3V0
cHV0ID4+IGFic1NoaWZ0KTsKICAgIGkgPSBzaWduID8gLW91dHB1dCA6IG91dHB1dDsgLy8gbWpz
IHN1Z2dlc3RzIHJlcGxhY2luZyB0aGlzIHdpdGggc2lnbmJpdCA+PiAzMSAgYW5kICB+IXNpZ25C
aXQKICAgIHJldHVybiAoc2hpZnQgPD0gSW50MzJMYXJnZXN0QWxsb3dlZFNoaWZ0KTsKfQoKc3Rh
dGljIGJvb2wgZ2V0VHJ1bmNhdGVkSW50MzIoZmxvYXQgdmFsdWUsIGludDMyX3QmIGkpCnsKICAg
IEZsb2F0VW5pb24gZmxvYXRVbmlvbjsKICAgIGZsb2F0VW5pb24uYXNGbG9hdCA9IHZhbHVlOwog
ICAgcmV0dXJuIGdldFRydW5jYXRlZEludDMyTmV3KGZsb2F0VW5pb24sIGkpOwp9CgpzdGF0aWMg
Ym9vbCBnZXRUcnVuY2F0ZWRVSW50MzJOZXcoY29uc3QgRmxvYXRVbmlvbiYgZmxvYXRVbmlvbiwg
dWludDMyX3QmIGkpCnsKICAgIHVpbnQzMl90IG91dHB1dCA9IGZsb2F0VW5pb24uYXNCaXRzOwog
ICAgaW50MzJfdCBleHBvbmVudCA9IG91dHB1dCAmIEV4cG9uZW50TWFzazsKICAgIHVpbnQzMl90
IHNpZ24gPSBvdXRwdXQgJiBTaWduTWFzazsKICAgIGV4cG9uZW50ID4+PSBOdW1iZXJPZk1hbnRp
c3NhQml0czsKICAgIG91dHB1dCAmPSBNYW50aXNzYU1hc2s7CiAgICBpZiAoZXhwb25lbnQpCiAg
ICAgICAgb3V0cHV0IHw9IEltcGxpY2l0T25lTWFzazsKICAgIGludCBzaGlmdCA9IChleHBvbmVu
dCAtIEV4cG9uZW50QmlhcyAtIE51bWJlck9mTWFudGlzc2FCaXRzKTsKICAgIHVpbnQzMl90IGFi
c1NoaWZ0ID0gKHNoaWZ0ID4gMCkgPyBzaGlmdCA6IC1zaGlmdDsKICAgIGlmIChhYnNTaGlmdCA+
IDMxKQogICAgICAgIG91dHB1dCA9IDA7IC8vIENvbXBpbGVycyBkbyBzdHJhbmdlIHRoaW5ncyB3
aXRoIGxhcmdlIHNoaWZ0cywgZGVzcGl0ZSBDOTkgc2F5aW5nIG90aGVyd2lzZS4KICAgIGkgPSAo
c2hpZnQgPiAwKSA/IG91dHB1dCA8PCBzaGlmdCA6IG91dHB1dCA+PiAtc2hpZnQ7CiAgICByZXR1
cm4gKCFzaWduICYmIChzaGlmdCA8PSBVSW50MzJMYXJnZXN0QWxsb3dlZFNoaWZ0KSk7Cn0KCnN0
YXRpYyBib29sIGdldFRydW5jYXRlZFVJbnQzMihmbG9hdCB2YWx1ZSwgdWludDMyX3QmIGkpCnsK
ICAgIEZsb2F0VW5pb24gZmxvYXRVbmlvbjsKICAgIGZsb2F0VW5pb24uYXNGbG9hdCA9IHZhbHVl
OwogICAgcmV0dXJuIGdldFRydW5jYXRlZFVJbnQzMk5ldyhmbG9hdFVuaW9uLCBpKTsKfQoKc3Rh
dGljIHZvaWQgZXhwZWN0RmxvYXRUb1VJbnQzMihmbG9hdCB2YWx1ZSwgdWludDMyX3QgZXhwZWN0
ZWQpCnsKICAgIHVpbnQzMl90IGFjdHVhbDsKICAgIGJvb2wgc3VjY2VzcyA9IGdldFRydW5jYXRl
ZFVJbnQzMih2YWx1ZSwgYWN0dWFsKTsKICAgIGlmICghc3VjY2VzcyB8fCBhY3R1YWwgIT0gZXhw
ZWN0ZWQpIHsKICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImdldFRydW5jYXRlZFVJbnQzMiAlZiBl
eHBlY3RlZDogJWkgZ290OiAlaVxuIiwgdmFsdWUsIGV4cGVjdGVkLCBhY3R1YWwpOwogICAgICAg
IHByaW50QmluYXJ5KCJleHBlY3RlZCIsIGV4cGVjdGVkKTsKICAgICAgICBwcmludEJpbmFyeSgi
YWN0dWFsIiwgYWN0dWFsKTsKICAgIH0KfQoKc3RhdGljIHZvaWQgZXhwZWN0RmxvYXRUb1VJbnQz
MkZhaWx1cmUoZmxvYXQgdmFsdWUpCnsKICAgIHVpbnQzMl90IGFjdHVhbDsKICAgIGJvb2wgc3Vj
Y2VzcyA9IGdldFRydW5jYXRlZFVJbnQzMih2YWx1ZSwgYWN0dWFsKTsKICAgIGlmIChzdWNjZXNz
KQogICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ2V0VHJ1bmNhdGVkVUludDMyICVmIGV4cGVjdGVk
IEZBSUxVUkUgZ290OiAlaVxuIiwgdmFsdWUsIGFjdHVhbCk7Cn0KCnN0YXRpYyB2b2lkIGV4cGVj
dEZsb2F0VG9JbnQzMihmbG9hdCB2YWx1ZSwgaW50MzJfdCBleHBlY3RlZCkKewogICAgaW50MzJf
dCBhY3R1YWw7CiAgICBib29sIHN1Y2Nlc3MgPSBnZXRUcnVuY2F0ZWRJbnQzMih2YWx1ZSwgYWN0
dWFsKTsKICAgIGlmICghc3VjY2VzcyB8fCBhY3R1YWwgIT0gZXhwZWN0ZWQpCiAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJnZXRUcnVuY2F0ZWRJbnQzMiAlZiBleHBlY3RlZDogJWkgZ290OiAlaVxu
IiwgdmFsdWUsIGV4cGVjdGVkLCBhY3R1YWwpOwp9CgpzdGF0aWMgdm9pZCBleHBlY3RGbG9hdFRv
SW50MzJGYWlsdXJlKGZsb2F0IHZhbHVlKQp7CiAgICBpbnQzMl90IGFjdHVhbDsKICAgIGJvb2wg
c3VjY2VzcyA9IGdldFRydW5jYXRlZEludDMyKHZhbHVlLCBhY3R1YWwpOwogICAgaWYgKHN1Y2Nl
c3MpCiAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZXRUcnVuY2F0ZWRJbnQzMiAlZiBleHBlY3Rl
ZCBGQUlMVVJFIGdvdDogJWlcbiIsIHZhbHVlLCBhY3R1YWwpOwp9CgpzdGF0aWMgYm9vbCBnZXRU
cnVuY2F0ZWRJbnQzMk9sZChjb25zdCBGbG9hdFVuaW9uJiBmbG9hdFVuaW9uLCBpbnQzMl90JiBp
KQp7CiAgICBmbG9hdCBmID0gZmxvYXRVbmlvbi5hc0Zsb2F0OwogICAgaWYgKCEoZiA+PSAtMjE0
NzQ4MzY0OC4wRiAmJiBmIDwgMjE0NzQ4MzY0OC4wRikpCiAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgaSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KGYpOwogICAgcmV0dXJuIHRydWU7Cn0KCnN0YXRp
YyBib29sIGdldFRydW5jYXRlZFVJbnQzMk9sZChjb25zdCBGbG9hdFVuaW9uJiBmbG9hdFVuaW9u
LCB1aW50MzJfdCYgaSkKewogICAgZmxvYXQgZiA9IGZsb2F0VW5pb24uYXNGbG9hdDsKICAgIGlm
ICghKGYgPj0gMC4wRiAmJiBmIDwgNDI5NDk2NzI5Ni4wRikpCiAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgaSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihmKTsKICAgIHJldHVybiB0cnVlOwp9Cgpz
dGF0aWMgdm9pZCB0ZXN0T2xkQW5kTmV3KHVpbnQzMl90IGJpdHMpCnsKICAgIEZsb2F0VW5pb24g
ZmxvYXRVbmlvbjsKICAgIGZsb2F0VW5pb24uYXNCaXRzID0gYml0czsKICAgIAogICAgewogICAg
ICAgIHVpbnQzMl90IG5ld1ZhbHVlLCBvbGRWYWx1ZTsKICAgICAgICBib29sIG5ld1N1Y2Nlc3Mg
PSBnZXRUcnVuY2F0ZWRVSW50MzJOZXcoZmxvYXRVbmlvbiwgbmV3VmFsdWUpOwogICAgICAgIGJv
b2wgb2xkU3VjY2VzcyA9IGdldFRydW5jYXRlZFVJbnQzMk9sZChmbG9hdFVuaW9uLCBvbGRWYWx1
ZSk7CiAgICAgICAgCiAgICAgICAgaWYgKG5ld1N1Y2Nlc3MgIT0gb2xkU3VjY2VzcyB8fCAobmV3
U3VjY2VzcyAmJiAobmV3VmFsdWUgIT0gb2xkVmFsdWUpKSkgewogICAgICAgICAgICBwcmludEJp
bmFyeSgidGVzdGluZyIsIGZsb2F0VW5pb24uYXNCaXRzKTsKICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJnZXRUcnVuY2F0ZWRVSW50MzIgJWYgZXhwZWN0ZWQ6ICV1ICglaSkgZ290OiAldSAo
JWkpXG4iLCBmbG9hdFVuaW9uLmFzRmxvYXQsIG9sZFZhbHVlLCBvbGRTdWNjZXNzLCBuZXdWYWx1
ZSwgbmV3U3VjY2Vzcyk7CiAgICAgICAgfQogICAgfQogICAgewogICAgICAgIGludDMyX3QgbmV3
VmFsdWUsIG9sZFZhbHVlOwogICAgICAgIGJvb2wgbmV3U3VjY2VzcyA9IGdldFRydW5jYXRlZElu
dDMyTmV3KGZsb2F0VW5pb24sIG5ld1ZhbHVlKTsKICAgICAgICBib29sIG9sZFN1Y2Nlc3MgPSBn
ZXRUcnVuY2F0ZWRJbnQzMk9sZChmbG9hdFVuaW9uLCBvbGRWYWx1ZSk7CiAgICAgICAgaWYgKG5l
d1N1Y2Nlc3MgIT0gb2xkU3VjY2VzcyB8fCAobmV3U3VjY2VzcyAmJiAobmV3VmFsdWUgIT0gb2xk
VmFsdWUpKSkgewogICAgICAgICAgICBwcmludEJpbmFyeSgidGVzdGluZyIsIGZsb2F0VW5pb24u
YXNCaXRzKTsKICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJnZXRUcnVuY2F0ZWRJbnQzMiAg
JWYgZXhwZWN0ZWQ6ICVpICglaSkgZ290OiAlaSAoJWkpXG4iLCBmbG9hdFVuaW9uLmFzRmxvYXQs
IG9sZFZhbHVlLCBvbGRTdWNjZXNzLCBuZXdWYWx1ZSwgbmV3U3VjY2Vzcyk7CiAgICAgICAgfQog
ICAgfQp9CgppbnQgbWFpbih2b2lkKQp7CiAgICBwcmludGYoIlJ1bm5pbmcgSlNJbW1lZGlhdGU6
OmdldFRydW5jYXRlZCogdGVzdHMsIHRoaXMgd2lsbCB0YWtlIGEgd2hpbGUuXG4iKTsKICAgIGV4
cGVjdEZsb2F0VG9VSW50MzIoMC5mLCAwKTsKICAgIGV4cGVjdEZsb2F0VG9JbnQzMigwLmYsIDAp
OwogICAgCiAgICBleHBlY3RGbG9hdFRvVUludDMyKDEuZiwgMSk7CiAgICBleHBlY3RGbG9hdFRv
SW50MzIoMS5mLCAxKTsKICAgIGV4cGVjdEZsb2F0VG9VSW50MzIoOC5mLCA4KTsKICAgIGV4cGVj
dEZsb2F0VG9JbnQzMig4LmYsIDgpOwogICAgZXhwZWN0RmxvYXRUb1VJbnQzMigxNi5mLCAxNik7
CiAgICBleHBlY3RGbG9hdFRvSW50MzIoMTYuZiwgMTYpOwogICAgCiAgICBleHBlY3RGbG9hdFRv
VUludDMyRmFpbHVyZSgtMS5mKTsKICAgIGV4cGVjdEZsb2F0VG9JbnQzMigtMS5mLCAtMSk7CiAg
ICBleHBlY3RGbG9hdFRvVUludDMyRmFpbHVyZSgtOC5mKTsKICAgIGV4cGVjdEZsb2F0VG9JbnQz
MigtOC5mLCAtOCk7CiAgICBleHBlY3RGbG9hdFRvVUludDMyRmFpbHVyZSgtMTYuZik7CiAgICBl
eHBlY3RGbG9hdFRvSW50MzIoLTE2LmYsIC0xNik7CiAgICAKICAgIC8vZXhwZWN0RmxvYXRUb0lu
dDMyKC0yMTQ3NDgzNjQ4LjBmLCAtMjE0NzQ4MzY0OCk7CiAgICAvL2V4cGVjdEZsb2F0VG9VSW50
MzIoMjE0NzQ4MzY0OC4wZiwgMjE0NzQ4MzY0OCk7CiAgICAKICAgIGV4cGVjdEZsb2F0VG9JbnQz
MkZhaWx1cmUoNDI5NDk2NzI5Ni4wZik7CiAgICAvL2V4cGVjdEZsb2F0VG9VSW50MzIoNDI5NDk2
NzI5Ni4wZiwgNDI5NDk2NzI5Nik7CiAgICAKICAgIGV4cGVjdEZsb2F0VG9JbnQzMkZhaWx1cmUo
NDI5NDk2NzI5Ni4wZik7CiAgICBleHBlY3RGbG9hdFRvVUludDMyRmFpbHVyZSg0Mjk0OTY3Mjk3
LjBmKTsKICAgIAogICAgLy8gVGVzdCBhbGwgcG9zc2libGUgZmxvYXRzIGFnYWluc3QgdGhlIG9s
ZCBmdW5jdGlvbjoKICAgIGZvciAodWludDMyX3QgeCA9IDQ7IHggIT0gMDsgeCArPSA0KSB7IC8v
IGlnbm9yZSB0aGUgbG93ZXIgMiBiaXRzCiAgICAgICAgdGVzdE9sZEFuZE5ldyh4KTsKICAgIH0K
ICAgIHJldHVybiAwOwp9Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16957</attachid>
            <date>2007-10-30 20:18:28 -0700</date>
            <delta_ts>2007-10-30 20:18:28 -0700</delta_ts>
            <desc>an actual patch for JSC (same code as in test above)</desc>
            <filename>faster.patch</filename>
            <type>text/plain</type>
            <size>2863</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtqcy9KU0ltbWVkaWF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9KU0ltbWVkaWF0ZS5o
CShyZXZpc2lvbiAyNzI1NSkKKysrIGtqcy9KU0ltbWVkaWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzcsMjMgKzE3Nyw1MSBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBKU0ltbWVkaWF0ZTo6RlBCaXRW
YWx1CiAgICAgewogICAgICAgICByZXR1cm4gdG9GbG9hdCh2KTsKICAgICB9CisgICAgCisgICAg
c3RhdGljIGNvbnN0IHVpbnQzMl90IE1hbnRpc3NhTWFzayAgICA9IDB4MDA3RkZGRkY7CisgICAg
c3RhdGljIGNvbnN0IHVpbnQzMl90IEltcGxpY2l0T25lTWFzayA9IDB4MDA4MDAwMDA7CisgICAg
c3RhdGljIGNvbnN0IHVpbnQzMl90IFNpZ25NYXNrICAgICAgICA9IDB4ODAwMDAwMDA7CisgICAg
c3RhdGljIGNvbnN0IHVpbnQzMl90IEV4cG9uZW50TWFzayAgICA9IDB4N0Y4MDAwMDA7CisgICAg
c3RhdGljIGNvbnN0IGludDMyX3QgTnVtYmVyT2ZNYW50aXNzYUJpdHMgPSAyMzsKKyAgICBzdGF0
aWMgY29uc3QgaW50MzJfdCBFeHBvbmVudEJpYXMgPSAxMjc7CisgICAgCisgICAgc3RhdGljIGNv
bnN0IHVpbnQzMl90IFNpZ25BbmRFeHBvbmVudE1hc2sgPSB+TWFudGlzc2FNYXNrOworICAgIHN0
YXRpYyBjb25zdCBpbnQzMl90IFVJbnQzMkxhcmdlc3RBbGxvd2VkU2hpZnQgPSA4OworICAgIHN0
YXRpYyBjb25zdCBpbnQzMl90IEludDMyTGFyZ2VzdEFsbG93ZWRTaGlmdCA9IDc7CiAKICAgICBz
dGF0aWMgQUxXQVlTX0lOTElORSBib29sIGdldFRydW5jYXRlZEludDMyKGNvbnN0IEpTVmFsdWUq
IHYsIGludDMyX3QmIGkpCiAgICAgewotICAgICAgICBmbG9hdCBmID0gdG9GbG9hdCh2KTsKLSAg
ICAgICAgaWYgKCEoZiA+PSAtMjE0NzQ4MzY0OC4wRiAmJiBmIDwgMjE0NzQ4MzY0OC4wRikpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGkgPSBzdGF0aWNfY2FzdDxpbnQzMl90
PihmKTsKLSAgICAgICAgcmV0dXJuIGlzTnVtYmVyKHYpOworICAgICAgICB1aW50MzJfdCBvdXRw
dXQgPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4odW5UYWcodikpOworICAgICAgICBpbnQzMl90IGV4
cG9uZW50ID0gb3V0cHV0ICYgRXhwb25lbnRNYXNrOworICAgICAgICB1aW50MzJfdCBzaWduID0g
b3V0cHV0ICYgU2lnbk1hc2s7CisgICAgICAgIGV4cG9uZW50ID4+PSBOdW1iZXJPZk1hbnRpc3Nh
Qml0czsKKyAgICAgICAgb3V0cHV0ICY9IE1hbnRpc3NhTWFzazsKKyAgICAgICAgaWYgKGV4cG9u
ZW50KQorICAgICAgICAgICAgb3V0cHV0IHw9IEltcGxpY2l0T25lTWFzazsKKyAgICAgICAgaW50
MzJfdCBzaGlmdCA9IChleHBvbmVudCAtIEV4cG9uZW50QmlhcyAtIE51bWJlck9mTWFudGlzc2FC
aXRzKTsKKyAgICAgICAgdWludDMyX3QgYWJzU2hpZnQgPSAoc2hpZnQgPiAwKSA/IHNoaWZ0IDog
LXNoaWZ0OworICAgICAgICBpZiAoYWJzU2hpZnQgPiAzMSkKKyAgICAgICAgICAgIG91dHB1dCA9
IDA7IC8vIENvbXBpbGVycyBkbyBzdHJhbmdlIHRoaW5ncyB3aXRoIGxhcmdlIHNoaWZ0cywgZGVz
cGl0ZSBDOTkgc2F5aW5nIG90aGVyd2lzZS4KKyAgICAgICAgb3V0cHV0ID0gKChzaGlmdCA+IDAp
ID8gb3V0cHV0IDw8IGFic1NoaWZ0IDogb3V0cHV0ID4+IGFic1NoaWZ0KTsKKyAgICAgICAgaSA9
IHNpZ24gPyAtb3V0cHV0IDogb3V0cHV0OyAvLyBtanMgc3VnZ2VzdHMgcmVwbGFjaW5nIHRoaXMg
d2l0aCBzaWduYml0ID4+IDMxICBhbmQgIH4hc2lnbkJpdAorICAgICAgICByZXR1cm4gKHNoaWZ0
IDw9IEludDMyTGFyZ2VzdEFsbG93ZWRTaGlmdCkgJiYgaXNOdW1iZXIodik7CiAgICAgfQogCiAg
ICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBnZXRUcnVuY2F0ZWRVSW50MzIoY29uc3QgSlNW
YWx1ZSogdiwgdWludDMyX3QmIGkpCiAgICAgewotICAgICAgICBmbG9hdCBmID0gdG9GbG9hdCh2
KTsKLSAgICAgICAgaWYgKCEoZiA+PSAwLjBGICYmIGYgPCA0Mjk0OTY3Mjk2LjBGKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaSA9IHN0YXRpY19jYXN0PHVpbnQzMl90Pihm
KTsKLSAgICAgICAgcmV0dXJuIGlzTnVtYmVyKHYpOworICAgICAgICB1aW50MzJfdCBvdXRwdXQg
PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4odW5UYWcodikpOworICAgICAgICBpbnQzMl90IGV4cG9u
ZW50ID0gb3V0cHV0ICYgRXhwb25lbnRNYXNrOworICAgICAgICB1aW50MzJfdCBzaWduID0gb3V0
cHV0ICYgU2lnbk1hc2s7CisgICAgICAgIGV4cG9uZW50ID4+PSBOdW1iZXJPZk1hbnRpc3NhQml0
czsKKyAgICAgICAgb3V0cHV0ICY9IE1hbnRpc3NhTWFzazsKKyAgICAgICAgaWYgKGV4cG9uZW50
KQorICAgICAgICAgICAgb3V0cHV0IHw9IEltcGxpY2l0T25lTWFzazsKKyAgICAgICAgaW50IHNo
aWZ0ID0gKGV4cG9uZW50IC0gRXhwb25lbnRCaWFzIC0gTnVtYmVyT2ZNYW50aXNzYUJpdHMpOwor
ICAgICAgICB1aW50MzJfdCBhYnNTaGlmdCA9IChzaGlmdCA+IDApID8gc2hpZnQgOiAtc2hpZnQ7
CisgICAgICAgIGlmIChhYnNTaGlmdCA+IDMxKQorICAgICAgICAgICAgb3V0cHV0ID0gMDsgLy8g
Q29tcGlsZXJzIGRvIHN0cmFuZ2UgdGhpbmdzIHdpdGggbGFyZ2Ugc2hpZnRzLCBkZXNwaXRlIEM5
OSBzYXlpbmcgb3RoZXJ3aXNlLgorICAgICAgICBpID0gKHNoaWZ0ID4gMCkgPyBvdXRwdXQgPDwg
c2hpZnQgOiBvdXRwdXQgPj4gLXNoaWZ0OyAgICAgICAgCisgICAgICAgIHJldHVybiAoIXNpZ24g
JiYgKHNoaWZ0IDw9IFVJbnQzMkxhcmdlc3RBbGxvd2VkU2hpZnQpKSAmJiBpc051bWJlcih2KTsK
ICAgICB9CiB9OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>