Changeset 97286 in webkit


Ignore:
Timestamp:
Oct 12, 2011 12:28:12 PM (13 years ago)
Author:
commit-queue@webkit.org
Message:

DFG JIT 32_64 - Fix ArrayPop
https://bugs.webkit.org/show_bug.cgi?id=69918

Patch by Yuqiang Xian <yuqiang.xian@intel.com> on 2011-10-12
Reviewed by Filip Pizlo.

The storageLengthGPR is polluted by EmptyValueTag and later used to
index the array, which results in abnormal behaviors in execution.
This fix makes 32_64 DFG pass v8-deltablue and kraken
crypto-sha256-iterative on Linux ia32.

  • assembler/MacroAssemblerX86Common.h:

(JSC::MacroAssemblerX86Common::store32):

  • assembler/X86Assembler.h:

(JSC::X86Assembler::movl_i32m):

  • dfg/DFGSpeculativeJIT32_64.cpp:

(JSC::DFG::SpeculativeJIT::compile):

Location:
trunk/Source/JavaScriptCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r97269 r97286  
     12011-10-12  Yuqiang Xian  <yuqiang.xian@intel.com>
     2
     3        DFG JIT 32_64 - Fix ArrayPop
     4        https://bugs.webkit.org/show_bug.cgi?id=69918
     5
     6        Reviewed by Filip Pizlo.
     7
     8        The storageLengthGPR is polluted by EmptyValueTag and later used to
     9        index the array, which results in abnormal behaviors in execution.
     10        This fix makes 32_64 DFG pass v8-deltablue and kraken
     11        crypto-sha256-iterative on Linux ia32.
     12
     13        * assembler/MacroAssemblerX86Common.h:
     14        (JSC::MacroAssemblerX86Common::store32):
     15        * assembler/X86Assembler.h:
     16        (JSC::X86Assembler::movl_i32m):
     17        * dfg/DFGSpeculativeJIT32_64.cpp:
     18        (JSC::DFG::SpeculativeJIT::compile):
     19
    1202011-10-12  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>
    221
  • trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h

    r96169 r97286  
    512512    }
    513513   
     514    void store32(TrustedImm32 imm, BaseIndex address)
     515    {
     516        m_assembler.movl_i32m(imm.m_value, address.offset, address.base, address.index, address.scale);
     517    }
     518
    514519    void store8(TrustedImm32 imm, Address address)
    515520    {
  • trunk/Source/JavaScriptCore/assembler/X86Assembler.h

    r96259 r97286  
    10671067    }
    10681068   
     1069    void movl_i32m(int imm, int offset, RegisterID base, RegisterID index, int scale)
     1070    {
     1071        m_formatter.oneByteOp(OP_GROUP11_EvIz, GROUP11_MOV, base, index, scale, offset);
     1072        m_formatter.immediate32(imm);
     1073    }
     1074
    10691075    void movb_i8m(int imm, int offset, RegisterID base)
    10701076    {
  • trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp

    r97218 r97286  
    15451545        MacroAssembler::Jump holeCase = m_jit.branch32(MacroAssembler::Equal, Imm32(JSValue::EmptyValueTag), valueTagGPR);
    15461546       
    1547         m_jit.move(Imm32(JSValue::EmptyValueTag), storageLengthGPR);
    1548         m_jit.store32(storageLengthGPR, MacroAssembler::BaseIndex(storageGPR, storageLengthGPR, MacroAssembler::TimesEight, OBJECT_OFFSETOF(ArrayStorage, m_vector[0]) + OBJECT_OFFSETOF(JSValue, u.asBits.tag)));
     1547        m_jit.store32(TrustedImm32(JSValue::EmptyValueTag), MacroAssembler::BaseIndex(storageGPR, storageLengthGPR, MacroAssembler::TimesEight, OBJECT_OFFSETOF(ArrayStorage, m_vector[0]) + OBJECT_OFFSETOF(JSValue, u.asBits.tag)));
    15491548
    15501549        m_jit.sub32(MacroAssembler::Imm32(1), MacroAssembler::Address(storageGPR, OBJECT_OFFSETOF(ArrayStorage, m_numValuesInVector)));
Note: See TracChangeset for help on using the changeset viewer.