Ignore:
Timestamp:
Apr 26, 2012, 2:21:56 PM (13 years ago)
Author:
[email protected]
Message:

DFG ARMv7 backend should optimize Float32 arrays
https://bugs.webkit.org/show_bug.cgi?id=85000
<rdar://problem/10652827>

Reviewed by Gavin Barraclough.

  • assembler/ARMv7Assembler.h:

(ARMv7Assembler):
(JSC::ARMv7Assembler::flds):
(JSC::ARMv7Assembler::fsts):
(JSC::ARMv7Assembler::vcvtds):
(JSC::ARMv7Assembler::vcvtsd):

  • assembler/MacroAssemblerARMv7.h:

(JSC::MacroAssemblerARMv7::loadFloat):
(MacroAssemblerARMv7):
(JSC::MacroAssemblerARMv7::storeFloat):
(JSC::MacroAssemblerARMv7::convertFloatToDouble):
(JSC::MacroAssemblerARMv7::convertDoubleToFloat):

  • bytecode/PredictedType.h:

(JSC::isActionableFloatMutableArrayPrediction):

  • dfg/DFGNode.h:

(JSC::DFG::Node::shouldSpeculateFloat32Array):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/assembler/ARMv7Assembler.h

    r114809 r115363  
    573573        OP_VMOV_CtoD    = 0xEC00,
    574574        OP_VMOV_DtoC    = 0xEC10,
     575        OP_FSTS         = 0xED00,
    575576        OP_VSTR         = 0xED00,
     577        OP_FLDS         = 0xED10,
    576578        OP_VLDR         = 0xED10,
    577579        OP_VMOV_CtoS    = 0xEE00,
     
    589591        OP_VNEG_T2      = 0xEEB0,
    590592        OP_VSQRT_T1     = 0xEEB0,
     593        OP_VCVTSD_T1    = 0xEEB0,
     594        OP_VCVTDS_T1    = 0xEEB0,
    591595        OP_B_T3a        = 0xF000,
    592596        OP_B_T4a        = 0xF000,
     
    643647        OP_VADD_T2b     = 0x0A00,
    644648        OP_VDIVb        = 0x0A00,
     649        OP_FLDSb        = 0x0A00,
    645650        OP_VLDRb        = 0x0A00,
    646651        OP_VMOV_IMM_T2b = 0x0A00,
    647652        OP_VMOV_T2b     = 0x0A40,
    648653        OP_VMUL_T2b     = 0x0A00,
     654        OP_FSTSb        = 0x0A00,
    649655        OP_VSTRb        = 0x0A00,
    650656        OP_VMOV_StoCb   = 0x0A10,
     
    659665        OP_VSUB_T2b     = 0x0A40,
    660666        OP_VSQRT_T1b    = 0x0A40,
     667        OP_VCVTSD_T1b   = 0x0A40,
     668        OP_VCVTDS_T1b   = 0x0A40,
    661669        OP_NOP_T2b      = 0x8000,
    662670        OP_B_T3b        = 0x8000,
     
    17211729        m_formatter.vfpMemOp(OP_VLDR, OP_VLDRb, true, rn, rd, imm);
    17221730    }
     1731   
     1732    void flds(FPSingleRegisterID rd, RegisterID rn, int32_t imm)
     1733    {
     1734        m_formatter.vfpMemOp(OP_FLDS, OP_FLDSb, false, rn, rd, imm);
     1735    }
    17231736
    17241737    void vmov(RegisterID rd, FPSingleRegisterID rn)
     
    17691782    }
    17701783
     1784    void fsts(FPSingleRegisterID rd, RegisterID rn, int32_t imm)
     1785    {
     1786        m_formatter.vfpMemOp(OP_FSTS, OP_FSTSb, false, rn, rd, imm);
     1787    }
     1788
    17711789    void vsub(FPDoubleRegisterID rd, FPDoubleRegisterID rn, FPDoubleRegisterID rm)
    17721790    {
     
    17871805    {
    17881806        m_formatter.vfpOp(OP_VSQRT_T1, OP_VSQRT_T1b, true, VFPOperand(17), rd, rm);
     1807    }
     1808   
     1809    void vcvtds(FPDoubleRegisterID rd, FPSingleRegisterID rm)
     1810    {
     1811        m_formatter.vfpOp(OP_VCVTDS_T1, OP_VCVTDS_T1b, false, VFPOperand(23), rd, rm);
     1812    }
     1813
     1814    void vcvtsd(FPSingleRegisterID rd, FPDoubleRegisterID rm)
     1815    {
     1816        m_formatter.vfpOp(OP_VCVTSD_T1, OP_VCVTSD_T1b, true, VFPOperand(23), rd, rm);
    17891817    }
    17901818
Note: See TracChangeset for help on using the changeset viewer.