Ignore:
Timestamp:
Aug 12, 2010, 11:49:16 PM (15 years ago)
Author:
[email protected]
Message:

Refactoring the fpu code generator for the ARM port
https://bugs.webkit.org/show_bug.cgi?id=43842

Reviewed by Gavin Barraclough.

Support up to 32 double precision registers, and the
recent VFP instruction formats. This patch is mainly
a style change which keeps the current functionality.

  • assembler/ARMAssembler.h:

(JSC::ARMRegisters::):
(JSC::ARMAssembler::):
(JSC::ARMAssembler::emitInst):
(JSC::ARMAssembler::emitDoublePrecisionInst):
(JSC::ARMAssembler::emitSinglePrecisionInst):
(JSC::ARMAssembler::vadd_f64_r):
(JSC::ARMAssembler::vdiv_f64_r):
(JSC::ARMAssembler::vsub_f64_r):
(JSC::ARMAssembler::vmul_f64_r):
(JSC::ARMAssembler::vcmp_f64_r):
(JSC::ARMAssembler::vsqrt_f64_r):
(JSC::ARMAssembler::vmov_vfp_r):
(JSC::ARMAssembler::vmov_arm_r):
(JSC::ARMAssembler::vcvt_f64_s32_r):
(JSC::ARMAssembler::vcvt_s32_f64_r):
(JSC::ARMAssembler::vmrs_apsr):

  • assembler/MacroAssemblerARM.h:

(JSC::MacroAssemblerARM::addDouble):
(JSC::MacroAssemblerARM::divDouble):
(JSC::MacroAssemblerARM::subDouble):
(JSC::MacroAssemblerARM::mulDouble):
(JSC::MacroAssemblerARM::sqrtDouble):
(JSC::MacroAssemblerARM::convertInt32ToDouble):
(JSC::MacroAssemblerARM::branchDouble):
(JSC::MacroAssemblerARM::branchConvertDoubleToInt32):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/assembler/MacroAssemblerARM.h

    r63228 r65303  
    796796    void addDouble(FPRegisterID src, FPRegisterID dest)
    797797    {
    798         m_assembler.faddd_r(dest, dest, src);
     798        m_assembler.vadd_f64_r(dest, dest, src);
    799799    }
    800800
     
    807807    void divDouble(FPRegisterID src, FPRegisterID dest)
    808808    {
    809         m_assembler.fdivd_r(dest, dest, src);
     809        m_assembler.vdiv_f64_r(dest, dest, src);
    810810    }
    811811
     
    819819    void subDouble(FPRegisterID src, FPRegisterID dest)
    820820    {
    821         m_assembler.fsubd_r(dest, dest, src);
     821        m_assembler.vsub_f64_r(dest, dest, src);
    822822    }
    823823
     
    830830    void mulDouble(FPRegisterID src, FPRegisterID dest)
    831831    {
    832         m_assembler.fmuld_r(dest, dest, src);
     832        m_assembler.vmul_f64_r(dest, dest, src);
    833833    }
    834834
     
    841841    void sqrtDouble(FPRegisterID src, FPRegisterID dest)
    842842    {
    843         m_assembler.fsqrtd_r(dest, src);
     843        m_assembler.vsqrt_f64_r(dest, src);
    844844    }
    845845
    846846    void convertInt32ToDouble(RegisterID src, FPRegisterID dest)
    847847    {
    848         m_assembler.fmsr_r(dest, src);
    849         m_assembler.fsitod_r(dest, dest);
     848        m_assembler.vmov_vfp_r(dest << 1, src);
     849        m_assembler.vcvt_f64_s32_r(dest, dest << 1);
    850850    }
    851851
     
    869869    Jump branchDouble(DoubleCondition cond, FPRegisterID left, FPRegisterID right)
    870870    {
    871         m_assembler.fcmpd_r(left, right);
    872         m_assembler.fmstat();
     871        m_assembler.vcmp_f64_r(left, right);
     872        m_assembler.vmrs_apsr();
    873873        if (cond & DoubleConditionBitSpecial)
    874874            m_assembler.cmp_r(ARMRegisters::S0, ARMRegisters::S0, ARMAssembler::VS);
     
    894894    void branchConvertDoubleToInt32(FPRegisterID src, RegisterID dest, JumpList& failureCases, FPRegisterID fpTemp)
    895895    {
    896         m_assembler.ftosid_r(ARMRegisters::SD0, src);
    897         m_assembler.fmrs_r(dest, ARMRegisters::SD0);
     896        m_assembler.vcvt_s32_f64_r(ARMRegisters::SD0 << 1, src);
     897        m_assembler.vmov_arm_r(dest, ARMRegisters::SD0 << 1);
    898898
    899899        // Convert the integer result back to float & compare to the original value - if not equal or unordered (NaN) then jump.
    900         m_assembler.fsitod_r(ARMRegisters::SD0, ARMRegisters::SD0);
     900        m_assembler.vcvt_f64_s32_r(ARMRegisters::SD0, ARMRegisters::SD0 << 1);
    901901        failureCases.append(branchDouble(DoubleNotEqualOrUnordered, src, ARMRegisters::SD0));
    902902
Note: See TracChangeset for help on using the changeset viewer.