diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2015-05-20 09:56:07 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2015-05-20 09:56:07 +0000 |
commit | 41386e9cb918eed93b3f13648cbef387e371e451 (patch) | |
tree | a97f9d7bd1d9d091833286085f72da9d83fd0606 /Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h | |
parent | e15dd966d523731101f70ccf768bba12435a0208 (diff) | |
download | WebKitGtk-tarball-41386e9cb918eed93b3f13648cbef387e371e451.tar.gz |
webkitgtk-2.4.9webkitgtk-2.4.9
Diffstat (limited to 'Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h')
-rw-r--r-- | Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h b/Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h index 9019eb18c..9c7d47a42 100644 --- a/Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h +++ b/Source/JavaScriptCore/dfg/DFGArrayifySlowPathGenerator.h @@ -26,6 +26,8 @@ #ifndef DFGArrayifySlowPathGenerator_h #define DFGArrayifySlowPathGenerator_h +#include <wtf/Platform.h> + #if ENABLE(DFG_JIT) #include "DFGArrayMode.h" @@ -101,7 +103,10 @@ protected: jit->callOperation(operationEnsureDouble, m_tempGPR, m_baseGPR); break; case Array::Contiguous: - jit->callOperation(operationEnsureContiguous, m_tempGPR, m_baseGPR); + if (m_arrayMode.conversion() == Array::RageConvert) + jit->callOperation(operationRageEnsureContiguous, m_tempGPR, m_baseGPR); + else + jit->callOperation(operationEnsureContiguous, m_tempGPR, m_baseGPR); break; case Array::ArrayStorage: case Array::SlowPutArrayStorage: @@ -117,14 +122,23 @@ protected: if (m_op == ArrayifyToStructure) { ASSERT(m_structure); m_badIndexingTypeJump.fill( - jit, jit->m_jit.branchWeakStructure(MacroAssembler::NotEqual, MacroAssembler::Address(m_baseGPR, JSCell::structureIDOffset()), m_structure)); + jit, jit->m_jit.branchWeakPtr( + MacroAssembler::NotEqual, + MacroAssembler::Address(m_baseGPR, JSCell::structureOffset()), + m_structure)); } else { + // Alas, we need to reload the structure because silent spilling does not save + // temporaries. Nor would it be useful for it to do so. Either way we're talking + // about a load. + jit->m_jit.loadPtr( + MacroAssembler::Address(m_baseGPR, JSCell::structureOffset()), m_structureGPR); + // Finally, check that we have the kind of array storage that we wanted to get. // Note that this is a backwards speculation check, which will result in the // bytecode operation corresponding to this arrayification being reexecuted. // That's fine, since arrayification is not user-visible. jit->m_jit.load8( - MacroAssembler::Address(m_baseGPR, JSCell::indexingTypeOffset()), m_structureGPR); + MacroAssembler::Address(m_structureGPR, Structure::indexingTypeOffset()), m_structureGPR); m_badIndexingTypeJump.fill( jit, jit->jumpSlowForUnwantedArrayMode(m_structureGPR, m_arrayMode)); } |