Changeset 192267 in webkit


Ignore:
Timestamp:
Nov 10, 2015 1:52:01 PM (8 years ago)
Author:
msaboff@apple.com
Message:

X86_64 support for compareDouble(DoubleCondition, FPRegisterID left, FPRegisterID right, RegisterID dest)
https://bugs.webkit.org/show_bug.cgi?id=151009

Reviewed by Filip Pizlo.

Added compareDouble() macro assembler function and the supporting setnp_r() and setp_r() X86 assembler functions.
Hand tested.

  • assembler/MacroAssemblerX86_64.h:

(JSC::MacroAssemblerX86_64::compare64):
(JSC::MacroAssemblerX86_64::compareDouble):
(JSC::MacroAssemblerX86_64::branch64):

  • assembler/X86Assembler.h:

(JSC::X86Assembler::setnz_r):
(JSC::X86Assembler::setnp_r):
(JSC::X86Assembler::setp_r):
(JSC::X86Assembler::cdq):

Location:
trunk/Source/JavaScriptCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r192260 r192267  
     12015-11-10  Michael Saboff  <msaboff@apple.com>
     2
     3        X86_64 support for compareDouble(DoubleCondition, FPRegisterID left, FPRegisterID right, RegisterID dest)
     4        https://bugs.webkit.org/show_bug.cgi?id=151009
     5
     6        Reviewed by Filip Pizlo.
     7
     8        Added compareDouble() macro assembler function and the supporting setnp_r() and setp_r() X86 assembler functions.
     9        Hand tested.
     10
     11        * assembler/MacroAssemblerX86_64.h:
     12        (JSC::MacroAssemblerX86_64::compare64):
     13        (JSC::MacroAssemblerX86_64::compareDouble):
     14        (JSC::MacroAssemblerX86_64::branch64):
     15        * assembler/X86Assembler.h:
     16        (JSC::X86Assembler::setnz_r):
     17        (JSC::X86Assembler::setnp_r):
     18        (JSC::X86Assembler::setp_r):
     19        (JSC::X86Assembler::cdq):
     20
    1212015-11-10  Saam barati  <sbarati@apple.com>
    222
  • trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h

    r192051 r192267  
    578578        m_assembler.movzbl_rr(dest, dest);
    579579    }
    580    
     580
     581    void compareDouble(DoubleCondition cond, FPRegisterID left, FPRegisterID right, RegisterID dest)
     582    {
     583        if (cond & DoubleConditionBitInvert)
     584            m_assembler.ucomisd_rr(left, right);
     585        else
     586            m_assembler.ucomisd_rr(right, left);
     587
     588        if (cond == DoubleEqual) {
     589            if (left == right) {
     590                m_assembler.setnp_r(dest);
     591                return;
     592            }
     593
     594            Jump isUnordered(m_assembler.jp());
     595            m_assembler.sete_r(dest);
     596            isUnordered.link(this);
     597            return;
     598        }
     599
     600        if (cond == DoubleNotEqualOrUnordered) {
     601            if (left == right) {
     602                m_assembler.setp_r(dest);
     603                return;
     604            }
     605
     606            m_assembler.setp_r(dest);
     607            m_assembler.setne_r(dest);
     608            return;
     609        }
     610
     611        ASSERT(!(cond & DoubleConditionBitSpecial));
     612        m_assembler.setCC_r(static_cast<X86Assembler::Condition>(cond & ~DoubleConditionBits), dest);
     613    }
     614
    581615    Jump branch64(RelationalCondition cond, RegisterID left, RegisterID right)
    582616    {
  • trunk/Source/JavaScriptCore/assembler/X86Assembler.h

    r192131 r192267  
    12781278    }
    12791279
     1280    void setnp_r(RegisterID dst)
     1281    {
     1282        m_formatter.twoByteOp8(setccOpcode(ConditionNP), (GroupOpcodeID)0, dst);
     1283    }
     1284
     1285    void setp_r(RegisterID dst)
     1286    {
     1287        m_formatter.twoByteOp8(setccOpcode(ConditionP), (GroupOpcodeID)0, dst);
     1288    }
     1289
    12801290    // Various move ops:
    12811291
Note: See TracChangeset for help on using the changeset viewer.