<?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>136261</bug_id>
          
          <creation_ts>2014-08-26 11:38:20 -0700</creation_ts>
          <short_desc>ARM32 iOS: JSC Test math.js fails</short_desc>
          <delta_ts>2014-09-05 13:08:19 -0700</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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</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="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1031430</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-08-26 11:38:20 -0700</bug_when>
    <thetext>All variants of math.js fail the Math.ceil(Number.MIN_VALUE) and Math.floor(-Number.MIN_VALUE) test.  For example:

jsc-layout-tests.yaml/js/script-tests/math.js.layout: --- ../.tests/jsc-layout-tests.yaml/js/math-expected.txt	2014-08-26 09:20:39.000000000 -0700
jsc-layout-tests.yaml/js/script-tests/math.js.layout: +++ ../jsc-layout-tests.yaml/js/script-tests/math.js.layout.out	2014-08-26 09:57:11.000000000 -0700
jsc-layout-tests.yaml/js/script-tests/math.js.layout: @@ -53,7 +53,7 @@
jsc-layout-tests.yaml/js/script-tests/math.js.layout:  PASS Math.ceil(-1) is -1
jsc-layout-tests.yaml/js/script-tests/math.js.layout:  PASS Math.ceil(1.1) is 2
jsc-layout-tests.yaml/js/script-tests/math.js.layout:  PASS Math.ceil(-1.1) is -1
jsc-layout-tests.yaml/js/script-tests/math.js.layout: -PASS Math.ceil(Number.MIN_VALUE) is 1
jsc-layout-tests.yaml/js/script-tests/math.js.layout: +FAIL Math.ceil(Number.MIN_VALUE) should be 1. Was 0.
jsc-layout-tests.yaml/js/script-tests/math.js.layout:  PASS Math.ceil(-Number.MIN_VALUE) is -0
jsc-layout-tests.yaml/js/script-tests/math.js.layout:  PASS Math.ceil(Number.MAX_VALUE) is Number.MAX_VALUE
jsc-layout-tests.yaml/js/script-tests/math.js.layout:  PASS Math.ceil(-Number.MAX_VALUE) is -Number.MAX_VALUE
jsc-layout-tests.yaml/js/script-tests/math.js.layout: @@ -78,7 +78,7 @@
jsc-layout-tests.yaml/js/script-tests/math.js.layout:  PASS Math.floor(1.1) is 1
jsc-layout-tests.yaml/js/script-tests/math.js.layout:  PASS Math.floor(-1.1) is -2
jsc-layout-tests.yaml/js/script-tests/math.js.layout:  PASS Math.floor(Number.MIN_VALUE) is 0
jsc-layout-tests.yaml/js/script-tests/math.js.layout: -PASS Math.floor(-Number.MIN_VALUE) is -1
jsc-layout-tests.yaml/js/script-tests/math.js.layout: +FAIL Math.floor(-Number.MIN_VALUE) should be -1. Was -0.
jsc-layout-tests.yaml/js/script-tests/math.js.layout:  PASS Math.floor(Number.MAX_VALUE) is Number.MAX_VALUE
jsc-layout-tests.yaml/js/script-tests/math.js.layout:  PASS Math.floor(-Number.MAX_VALUE) is -Number.MAX_VALUE
jsc-layout-tests.yaml/js/script-tests/math.js.layout:  PASS Math.floor(Infinity) is Infinity</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032079</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-08-28 15:02:28 -0700</bug_when>
    <thetext>This happens on 32 bit ARM code on iOS, even if that code is executed on an ARM64 device.

Number.MIN_VALUE  is coded as a constant in NumberConstructor.cpp as  5E-324.  The issue seems to be that the ceil() and floor() library routines on iOS return the wrong answer for 5E-324 and -5E-324 respectively.  I verified this with a test program.  I checked to see if the issue was the flush to zero of denormalized numbers in ARM, but the FZ bit of the FPSCR register is 0 (Flush-to-zero disabled).  That bit is cleared in jsc.cpp around line 1100.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033380</commentid>
    <comment_count>2</comment_count>
      <attachid>237666</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-09-04 18:32:45 -0700</bug_when>
    <thetext>Created attachment 237666
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033505</commentid>
    <comment_count>3</comment_count>
      <attachid>237666</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-09-05 11:55:34 -0700</bug_when>
    <thetext>Comment on attachment 237666
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033535</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2014-09-05 13:08:19 -0700</bug_when>
    <thetext>Committed r173330: &lt;http://trac.webkit.org/changeset/173330&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237666</attachid>
            <date>2014-09-04 18:32:45 -0700</date>
            <delta_ts>2014-09-05 11:55:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>136261.patch</filename>
            <type>text/plain</type>
            <size>4107</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE3MzMwMCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE0LTA5LTA0ICBNaWNoYWVsIFNhYm9mZiAg
PG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEFSTTMyIGlPUzogSlNDIFRlc3QgbWF0aC5q
cyBmYWlscworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTM2MjYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
U3BsaXQgb3V0IHRoZSBmYWlsaW5nIHRlc3RzIHRvIGEgbmV3IHRlc3Qgc2NyaXB0IG1hdGgtZGVu
b3JtLmpzLiAgQWRkZWQgY2hlY2sKKyAgICAgICAgYXQgdGhlIHRvcCBvZiB0aGUgbmV3IGZpbGUg
dG8gc2tpcCB0aGUgdGVzdHMgd2hlbiBydW5uaW5nIG9uIEFSTSBmb3IgaU9TLgorCisgICAgICAg
ICoganMvbWF0aC1kZW5vcm0tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9tYXRo
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvbWF0aC1kZW5vcm0uanM6
IEFkZGVkLgorICAgICAgICAqIGpzL3NjcmlwdC10ZXN0cy9tYXRoLmpzOgorCiAyMDE0LTA5LTA0
ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIGJvcmRl
ci1yYWRpdXMgc2hvdWxkIG5vdCBmb3JjZSBsYXllciBiYWNraW5nIHN0b3JlCkluZGV4OiBMYXlv
dXRUZXN0cy9qcy9tYXRoLWRlbm9ybS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvbWF0aC1kZW5vcm0tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvanMvbWF0aC1kZW5vcm0tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTMgQEAKK1RoaXMgdGVzdCBjaGVja3MgdGhlIGJlaGF2aW9yIG9mIHRoZSBNYXRoLmNlaWwg
YW5kIE1hdGguZmxvb3Igb24gZGVub3JtYWxpemVkIEZQIHZhbHVlcy4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1MgTWF0aC5jZWlsKE51bWJlci5NSU5fVkFMVUUpIGlzIDEK
K1BBU1MgTWF0aC5jZWlsKC1OdW1iZXIuTUlOX1ZBTFVFKSBpcyAtMAorUEFTUyBNYXRoLmZsb29y
KE51bWJlci5NSU5fVkFMVUUpIGlzIDAKK1BBU1MgTWF0aC5mbG9vcigtTnVtYmVyLk1JTl9WQUxV
RSkgaXMgLTEKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9tYXRoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9tYXRoLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTczMjg4KQorKysg
TGF5b3V0VGVzdHMvanMvbWF0aC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUzLDgg
KzUzLDYgQEAgUEFTUyBNYXRoLmNlaWwoMSkgaXMgMQogUEFTUyBNYXRoLmNlaWwoLTEpIGlzIC0x
CiBQQVNTIE1hdGguY2VpbCgxLjEpIGlzIDIKIFBBU1MgTWF0aC5jZWlsKC0xLjEpIGlzIC0xCi1Q
QVNTIE1hdGguY2VpbChOdW1iZXIuTUlOX1ZBTFVFKSBpcyAxCi1QQVNTIE1hdGguY2VpbCgtTnVt
YmVyLk1JTl9WQUxVRSkgaXMgLTAKIFBBU1MgTWF0aC5jZWlsKE51bWJlci5NQVhfVkFMVUUpIGlz
IE51bWJlci5NQVhfVkFMVUUKIFBBU1MgTWF0aC5jZWlsKC1OdW1iZXIuTUFYX1ZBTFVFKSBpcyAt
TnVtYmVyLk1BWF9WQUxVRQogUEFTUyBNYXRoLmNlaWwoSW5maW5pdHkpIGlzIEluZmluaXR5CkBA
IC03Nyw4ICs3NSw2IEBAIFBBU1MgTWF0aC5mbG9vcigxKSBpcyAxCiBQQVNTIE1hdGguZmxvb3Io
LTEpIGlzIC0xCiBQQVNTIE1hdGguZmxvb3IoMS4xKSBpcyAxCiBQQVNTIE1hdGguZmxvb3IoLTEu
MSkgaXMgLTIKLVBBU1MgTWF0aC5mbG9vcihOdW1iZXIuTUlOX1ZBTFVFKSBpcyAwCi1QQVNTIE1h
dGguZmxvb3IoLU51bWJlci5NSU5fVkFMVUUpIGlzIC0xCiBQQVNTIE1hdGguZmxvb3IoTnVtYmVy
Lk1BWF9WQUxVRSkgaXMgTnVtYmVyLk1BWF9WQUxVRQogUEFTUyBNYXRoLmZsb29yKC1OdW1iZXIu
TUFYX1ZBTFVFKSBpcyAtTnVtYmVyLk1BWF9WQUxVRQogUEFTUyBNYXRoLmZsb29yKEluZmluaXR5
KSBpcyBJbmZpbml0eQpJbmRleDogTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL21hdGgtZGVu
b3JtLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9tYXRoLWRl
bm9ybS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9tYXRo
LWRlbm9ybS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKKy8vQCBza2lwIGlmICRh
cmNoaXRlY3R1cmUgPT0gImFybSIgYW5kICRob3N0T1MgPT0gImRhcndpbiIKKworZGVzY3JpcHRp
b24oIlRoaXMgdGVzdCBjaGVja3MgdGhlIGJlaGF2aW9yIG9mIHRoZSBNYXRoLmNlaWwgYW5kIE1h
dGguZmxvb3Igb24gZGVub3JtYWxpemVkIEZQIHZhbHVlcy4iKTsKKworc2hvdWxkQmUoIk1hdGgu
Y2VpbChOdW1iZXIuTUlOX1ZBTFVFKSIsICIxIik7CitzaG91bGRCZSgiTWF0aC5jZWlsKC1OdW1i
ZXIuTUlOX1ZBTFVFKSIsICItMCIpOworCitzaG91bGRCZSgiTWF0aC5mbG9vcihOdW1iZXIuTUlO
X1ZBTFVFKSIsICIwIik7CitzaG91bGRCZSgiTWF0aC5mbG9vcigtTnVtYmVyLk1JTl9WQUxVRSki
LCAiLTEiKTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9tYXRoLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9tYXRoLmpzCShyZXZpc2lvbiAx
NzMyODgpCisrKyBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvbWF0aC5qcwkod29ya2luZyBj
b3B5KQpAQCAtOTAsOCArOTAsNiBAQCBzaG91bGRCZSgiTWF0aC5jZWlsKDEpIiwgIjEiKTsKIHNo
b3VsZEJlKCJNYXRoLmNlaWwoLTEpIiwgIi0xIik7CiBzaG91bGRCZSgiTWF0aC5jZWlsKDEuMSki
LCAiMiIpOwogc2hvdWxkQmUoIk1hdGguY2VpbCgtMS4xKSIsICItMSIpOwotc2hvdWxkQmUoIk1h
dGguY2VpbChOdW1iZXIuTUlOX1ZBTFVFKSIsICIxIik7Ci1zaG91bGRCZSgiTWF0aC5jZWlsKC1O
dW1iZXIuTUlOX1ZBTFVFKSIsICItMCIpOwogc2hvdWxkQmUoIk1hdGguY2VpbChOdW1iZXIuTUFY
X1ZBTFVFKSIsICJOdW1iZXIuTUFYX1ZBTFVFIik7CiBzaG91bGRCZSgiTWF0aC5jZWlsKC1OdW1i
ZXIuTUFYX1ZBTFVFKSIsICItTnVtYmVyLk1BWF9WQUxVRSIpOwogc2hvdWxkQmUoIk1hdGguY2Vp
bChJbmZpbml0eSkiLCAiSW5maW5pdHkiKTsKQEAgLTExNyw4ICsxMTUsNiBAQCBzaG91bGRCZSgi
TWF0aC5mbG9vcigxKSIsICIxIik7CiBzaG91bGRCZSgiTWF0aC5mbG9vcigtMSkiLCAiLTEiKTsK
IHNob3VsZEJlKCJNYXRoLmZsb29yKDEuMSkiLCAiMSIpOwogc2hvdWxkQmUoIk1hdGguZmxvb3Io
LTEuMSkiLCAiLTIiKTsKLXNob3VsZEJlKCJNYXRoLmZsb29yKE51bWJlci5NSU5fVkFMVUUpIiwg
IjAiKTsKLXNob3VsZEJlKCJNYXRoLmZsb29yKC1OdW1iZXIuTUlOX1ZBTFVFKSIsICItMSIpOwog
c2hvdWxkQmUoIk1hdGguZmxvb3IoTnVtYmVyLk1BWF9WQUxVRSkiLCAiTnVtYmVyLk1BWF9WQUxV
RSIpOwogc2hvdWxkQmUoIk1hdGguZmxvb3IoLU51bWJlci5NQVhfVkFMVUUpIiwgIi1OdW1iZXIu
TUFYX1ZBTFVFIik7CiBzaG91bGRCZSgiTWF0aC5mbG9vcihJbmZpbml0eSkiLCAiSW5maW5pdHki
KTsK
</data>
<flag name="review"
          id="262401"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>