<?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>154685</bug_id>
          
          <creation_ts>2016-02-25 10:58:16 -0800</creation_ts>
          <short_desc>B3 should have a DoubleToInt that takes a list of exceptional values</short_desc>
          <delta_ts>2016-02-25 10:59:50 -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>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>
          
          <blocked>154319</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1168144</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-25 10:58:16 -0800</bug_when>
    <thetext>Different hardware returns different results for double-to-int failure.  Because of that, we avoided adding DoubleToInt as an opcode in B3.

But we could add a DoubleToInt opcode that has this syntax:

@result = DoubleToInt(@input, @negOverflow, @posOverflow, @negNaN, @posNaN)

Where:

- @negOverflow is the value we return if @input is smaller than INT_MIN.
- @posOverflow is the value we return if @input is larger than INT_MAX.
- @negNaN is the value we return if @input is negative NaN.
- @posNaN is the value we return if @input is positive NaN.

Collectively these are the failure codes.  This means that the client could request that B3 emulates any kind of hardware doubleToInt operation.  If you want X86 behavior, you pass INT_MIN for all of the failure codes.  On ARM64, we would pass either INT_MIN or INT_MAX depending on whether it&apos;s positive or negative.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168145</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-25 10:59:50 -0800</bug_when>
    <thetext>This was @titzer&apos;s idea for making wasm d2i trap-free.  It&apos;s super profitable for wasm to do this.  We don&apos;t *need* to do this in B3 since we can d2i using a patchpoint, but it would probably be a progression.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>