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/ARMAssembler.cpp

    r46831 r46832  
    335335}
    336336
     337void ARMAssembler::doubleTransfer(bool isLoad, FPRegisterID srcDst, RegisterID base, int32_t offset)
     338{
     339    if (offset & 0x3) {
     340        if (offset <= 0x3ff && offset >= 0) {
     341            fdtr_u(isLoad, srcDst, base, offset >> 2);
     342            return;
     343        }
     344        if (offset <= 0x3ffff && offset >= 0) {
     345            add_r(ARM::S0, base, OP2_IMM | (offset >> 10) | (11 << 8));
     346            fdtr_u(isLoad, srcDst, ARM::S0, (offset >> 2) & 0xff);
     347            return;
     348        }
     349        offset = -offset;
     350
     351        if (offset <= 0x3ff && offset >= 0) {
     352            fdtr_d(isLoad, srcDst, base, offset >> 2);
     353            return;
     354        }
     355        if (offset <= 0x3ffff && offset >= 0) {
     356            sub_r(ARM::S0, base, OP2_IMM | (offset >> 10) | (11 << 8));
     357            fdtr_d(isLoad, srcDst, ARM::S0, (offset >> 2) & 0xff);
     358            return;
     359        }
     360        offset = -offset;
     361    }
     362
     363    ldr_un_imm(ARM::S0, offset);
     364    add_r(ARM::S0, ARM::S0, base);
     365    fdtr_u(isLoad, srcDst, ARM::S0, 0);
     366}
     367
    337368void* ARMAssembler::executableCopy(ExecutablePool* allocator)
    338369{
Note: See TracChangeset for help on using the changeset viewer.