Ignore:
Timestamp:
Jan 6, 2011, 4:38:37 PM (14 years ago)
Author:
[email protected]
Message:

Bug 52021 - zeroDouble broken on ARMv7

Reviewed by Darin Adler.

The bug here is that zeroDouble was working incorrectly,
leading to op_loop_if_true failing - specifically in the
case where the value being checked is 0.0 encoded as a
double (rather than an integer immediate).

Additionally this patch removes a redundant duplicate compare
in some (many) case.

  • assembler/ARMv7Assembler.h:

(JSC::ARMv7Assembler::vcmp_F64):
(JSC::ARMv7Assembler::vcmpz_F64):

  • assembler/MacroAssemblerARM.h:

(JSC::MacroAssemblerARM::branchDoubleNonZero):
(JSC::MacroAssemblerARM::branchDoubleZeroOrNaN):

  • assembler/MacroAssemblerARMv7.h:

(JSC::MacroAssemblerARMv7::branchDouble):
(JSC::MacroAssemblerARMv7::branchDoubleNonZero):
(JSC::MacroAssemblerARMv7::branchDoubleZeroOrNaN):
(JSC::MacroAssemblerARMv7::compare32):

  • assembler/MacroAssemblerMIPS.h:

(JSC::MacroAssemblerMIPS::branchDoubleNonZero):
(JSC::MacroAssemblerMIPS::branchDoubleZeroOrNaN):

  • assembler/MacroAssemblerX86Common.h:

(JSC::MacroAssemblerX86Common::branchDoubleNonZero):
(JSC::MacroAssemblerX86Common::branchDoubleZeroOrNaN):

  • jit/JITOpcodes32_64.cpp:

(JSC::JIT::emit_op_jfalse):
(JSC::JIT::emit_op_jtrue):

File:
1 edited

Legend:

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

    r73323 r75210  
    932932    }
    933933
    934     void zeroDouble(FPRegisterID srcDest)
     934    Jump branchDoubleNonZero(FPRegisterID reg, FPRegisterID scratch)
    935935    {
    936936        m_assembler.mov_r(ARMRegisters::S0, ARMAssembler::getOp2(0));
    937         convertInt32ToDouble(ARMRegisters::S0, srcDest);
     937        convertInt32ToDouble(ARMRegisters::S0, scratch);
     938        return branchDouble(DoubleNotEqual, reg, scratch);
     939    }
     940
     941    Jump branchDoubleZeroOrNaN(FPRegisterID reg, FPRegisterID scratch)
     942    {
     943        m_assembler.mov_r(ARMRegisters::S0, ARMAssembler::getOp2(0));
     944        convertInt32ToDouble(ARMRegisters::S0, scratch);
     945        return branchDouble(DoubleEqualOrUnordered, reg, scratch);
    938946    }
    939947
Note: See TracChangeset for help on using the changeset viewer.