Ignore:
Timestamp:
Aug 5, 2009, 10:33:27 PM (16 years ago)
Author:
[email protected]
Message:

2009-08-05 Zoltan Herczeg <[email protected]>

Reviewed by Gavin Barraclough.

Add floating point support for generic ARM port.
https://bugs.webkit.org/show_bug.cgi?id=24986

  • assembler/ARMAssembler.cpp: (JSC::ARMAssembler::doubleTransfer):
  • assembler/ARMAssembler.h: (JSC::ARM::): (JSC::ARMAssembler::): (JSC::ARMAssembler::faddd_r): (JSC::ARMAssembler::fsubd_r): (JSC::ARMAssembler::fmuld_r): (JSC::ARMAssembler::fcmpd_r): (JSC::ARMAssembler::fdtr_u): (JSC::ARMAssembler::fdtr_d): (JSC::ARMAssembler::fmsr_r): (JSC::ARMAssembler::fsitod_r): (JSC::ARMAssembler::fmstat):
  • assembler/MacroAssemblerARM.h: (JSC::MacroAssemblerARM::): (JSC::MacroAssemblerARM::supportsFloatingPoint): (JSC::MacroAssemblerARM::loadDouble): (JSC::MacroAssemblerARM::storeDouble): (JSC::MacroAssemblerARM::addDouble): (JSC::MacroAssemblerARM::subDouble): (JSC::MacroAssemblerARM::mulDouble): (JSC::MacroAssemblerARM::convertInt32ToDouble): (JSC::MacroAssemblerARM::branchDouble):
  • jit/JIT.h:
File:
1 edited

Legend:

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

    r46831 r46832  
    5858
    5959    enum DoubleCondition {
    60         DoubleEqual, //FIXME
    61         DoubleNotEqual, //FIXME
    62         DoubleGreaterThan, //FIXME
    63         DoubleGreaterThanOrEqual, //FIXME
    64         DoubleLessThan, //FIXME
    65         DoubleLessThanOrEqual, //FIXME
     60        DoubleEqual = ARMAssembler::EQ,
     61        DoubleGreaterThan = ARMAssembler::GT,
     62        DoubleGreaterThanOrEqual = ARMAssembler::GE,
     63        DoubleLessThan = ARMAssembler::LT,
     64        DoubleLessThanOrEqual = ARMAssembler::LE,
    6665    };
    6766
     
    641640    bool supportsFloatingPoint() const
    642641    {
     642        // FIXME: should be a dynamic test: VFP, FPA, or nothing
    643643        return false;
    644644    }
     
    651651    void loadDouble(ImplicitAddress address, FPRegisterID dest)
    652652    {
    653         UNUSED_PARAM(address);
    654         UNUSED_PARAM(dest);
    655         ASSERT_NOT_REACHED();
     653        m_assembler.doubleTransfer(true, dest, address.base, address.offset);
    656654    }
    657655
    658656    void storeDouble(FPRegisterID src, ImplicitAddress address)
    659657    {
    660         UNUSED_PARAM(src);
    661         UNUSED_PARAM(address);
    662         ASSERT_NOT_REACHED();
     658        m_assembler.doubleTransfer(false, src, address.base, address.offset);
    663659    }
    664660
    665661    void addDouble(FPRegisterID src, FPRegisterID dest)
    666662    {
    667         UNUSED_PARAM(src);
    668         UNUSED_PARAM(dest);
    669         ASSERT_NOT_REACHED();
     663        m_assembler.faddd_r(dest, dest, src);
    670664    }
    671665
    672666    void addDouble(Address src, FPRegisterID dest)
    673667    {
    674         UNUSED_PARAM(src);
    675         UNUSED_PARAM(dest);
    676         ASSERT_NOT_REACHED();
     668        loadDouble(src, ARM::SD0);
     669        addDouble(ARM::SD0, dest);
    677670    }
    678671
    679672    void subDouble(FPRegisterID src, FPRegisterID dest)
    680673    {
    681         UNUSED_PARAM(src);
    682         UNUSED_PARAM(dest);
    683         ASSERT_NOT_REACHED();
     674        m_assembler.fsubd_r(dest, dest, src);
    684675    }
    685676
    686677    void subDouble(Address src, FPRegisterID dest)
    687678    {
    688         UNUSED_PARAM(src);
    689         UNUSED_PARAM(dest);
    690         ASSERT_NOT_REACHED();
     679        loadDouble(src, ARM::SD0);
     680        subDouble(ARM::SD0, dest);
    691681    }
    692682
    693683    void mulDouble(FPRegisterID src, FPRegisterID dest)
    694684    {
    695         UNUSED_PARAM(src);
    696         UNUSED_PARAM(dest);
    697         ASSERT_NOT_REACHED();
     685        m_assembler.fmuld_r(dest, dest, src);
    698686    }
    699687
    700688    void mulDouble(Address src, FPRegisterID dest)
    701689    {
    702         UNUSED_PARAM(src);
    703         UNUSED_PARAM(dest);
    704         ASSERT_NOT_REACHED();
     690        loadDouble(src, ARM::SD0);
     691        mulDouble(ARM::SD0, dest);
    705692    }
    706693
    707694    void convertInt32ToDouble(RegisterID src, FPRegisterID dest)
    708695    {
    709         UNUSED_PARAM(src);
    710         UNUSED_PARAM(dest);
    711         ASSERT_NOT_REACHED();
     696        m_assembler.fmsr_r(dest, src);
     697        m_assembler.fsitod_r(dest, dest);
    712698    }
    713699
    714700    Jump branchDouble(DoubleCondition cond, FPRegisterID left, FPRegisterID right)
    715701    {
    716         UNUSED_PARAM(cond);
    717         UNUSED_PARAM(left);
    718         UNUSED_PARAM(right);
    719         ASSERT_NOT_REACHED();
    720         return jump();
     702        m_assembler.fcmpd_r(left, right);
     703        m_assembler.fmstat();
     704        return Jump(m_assembler.jmp(static_cast<ARMAssembler::Condition>(cond)));
    721705    }
    722706
Note: See TracChangeset for help on using the changeset viewer.