diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2016-04-10 09:28:39 +0000 |
commit | 32761a6cee1d0dee366b885b7b9c777e67885688 (patch) | |
tree | d6bec92bebfb216f4126356e55518842c2f476a1 /Source/JavaScriptCore/bytecode/ValueRecovery.h | |
parent | a4e969f4965059196ca948db781e52f7cfebf19e (diff) | |
download | WebKitGtk-tarball-32761a6cee1d0dee366b885b7b9c777e67885688.tar.gz |
webkitgtk-2.4.11webkitgtk-2.4.11
Diffstat (limited to 'Source/JavaScriptCore/bytecode/ValueRecovery.h')
-rw-r--r-- | Source/JavaScriptCore/bytecode/ValueRecovery.h | 174 |
1 files changed, 18 insertions, 156 deletions
diff --git a/Source/JavaScriptCore/bytecode/ValueRecovery.h b/Source/JavaScriptCore/bytecode/ValueRecovery.h index 5f6ee9c72..3af2c3409 100644 --- a/Source/JavaScriptCore/bytecode/ValueRecovery.h +++ b/Source/JavaScriptCore/bytecode/ValueRecovery.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011, 2013, 2015 Apple Inc. All rights reserved. + * Copyright (C) 2011, 2013 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -26,21 +26,19 @@ #ifndef ValueRecovery_h #define ValueRecovery_h -#include "DFGMinifiedID.h" #include "DataFormat.h" #if ENABLE(JIT) #include "GPRInfo.h" #include "FPRInfo.h" -#include "Reg.h" #endif #include "JSCJSValue.h" #include "MacroAssembler.h" #include "VirtualRegister.h" +#include <wtf/Platform.h> namespace JSC { struct DumpContext; -struct InlineCallFrame; // Describes how to recover a given bytecode virtual register at a given // code point. @@ -56,7 +54,6 @@ enum ValueRecoveryTechnique { InPair, #endif InFPR, - UnboxedDoubleInFPR, // It's in the stack, but at a different location. DisplacedInJSStack, // It's in the stack, at a different location, and it's unboxed. @@ -66,9 +63,8 @@ enum ValueRecoveryTechnique { DoubleDisplacedInJSStack, CellDisplacedInJSStack, BooleanDisplacedInJSStack, - // It's an Arguments object. This arises because of the simplified arguments simplification done by the DFG. - DirectArgumentsThatWereNotCreated, - ClonedArgumentsThatWereNotCreated, + // It's an Arguments object. + ArgumentsThatWereNotCreated, // It's a constant. Constant, // Don't know how to recover it. @@ -84,19 +80,6 @@ public: bool isSet() const { return m_technique != DontKnow; } bool operator!() const { return !isSet(); } - -#if ENABLE(JIT) - static ValueRecovery inRegister(Reg reg, DataFormat dataFormat) - { - if (reg.isGPR()) - return inGPR(reg.gpr(), dataFormat); - - ASSERT(reg.isFPR()); - return inFPR(reg.fpr(), dataFormat); - } -#endif - - explicit operator bool() const { return isSet(); } static ValueRecovery inGPR(MacroAssembler::RegisterID gpr, DataFormat dataFormat) { @@ -132,14 +115,10 @@ public: } #endif - static ValueRecovery inFPR(MacroAssembler::FPRegisterID fpr, DataFormat dataFormat) + static ValueRecovery inFPR(MacroAssembler::FPRegisterID fpr) { - ASSERT(dataFormat == DataFormatDouble || dataFormat & DataFormatJS); ValueRecovery result; - if (dataFormat == DataFormatDouble) - result.m_technique = UnboxedDoubleInFPR; - else - result.m_technique = InFPR; + result.m_technique = InFPR; result.m_source.fpr = fpr; return result; } @@ -189,27 +168,18 @@ public: return result; } - static ValueRecovery directArgumentsThatWereNotCreated(DFG::MinifiedID id) + static ValueRecovery argumentsThatWereNotCreated() { ValueRecovery result; - result.m_technique = DirectArgumentsThatWereNotCreated; - result.m_source.nodeID = id.bits(); + result.m_technique = ArgumentsThatWereNotCreated; return result; } - static ValueRecovery outOfBandArgumentsThatWereNotCreated(DFG::MinifiedID id) - { - ValueRecovery result; - result.m_technique = ClonedArgumentsThatWereNotCreated; - result.m_source.nodeID = id.bits(); - return result; - } - ValueRecoveryTechnique technique() const { return m_technique; } bool isConstant() const { return m_technique == Constant; } - - bool isInGPR() const + + bool isInRegisters() const { switch (m_technique) { case InGPR: @@ -218,81 +188,19 @@ public: case UnboxedCellInGPR: case UnboxedInt52InGPR: case UnboxedStrictInt52InGPR: - return true; - default: - return false; - } - } - - bool isInFPR() const - { - switch (m_technique) { - case InFPR: - case UnboxedDoubleInFPR: - return true; - default: - return false; - } - } - - bool isInRegisters() const - { - return isInJSValueRegs() || isInGPR() || isInFPR(); - } - - bool isInJSStack() const - { - switch (m_technique) { - case DisplacedInJSStack: - case Int32DisplacedInJSStack: - case Int52DisplacedInJSStack: - case StrictInt52DisplacedInJSStack: - case DoubleDisplacedInJSStack: - case CellDisplacedInJSStack: - case BooleanDisplacedInJSStack: - return true; - default: - return false; - } - } - - DataFormat dataFormat() const - { - switch (m_technique) { - case InGPR: - case InFPR: - case DisplacedInJSStack: - case Constant: #if USE(JSVALUE32_64) case InPair: #endif - return DataFormatJS; - case UnboxedInt32InGPR: - case Int32DisplacedInJSStack: - return DataFormatInt32; - case UnboxedInt52InGPR: - case Int52DisplacedInJSStack: - return DataFormatInt52; - case UnboxedStrictInt52InGPR: - case StrictInt52DisplacedInJSStack: - return DataFormatStrictInt52; - case UnboxedBooleanInGPR: - case BooleanDisplacedInJSStack: - return DataFormatBoolean; - case UnboxedCellInGPR: - case CellDisplacedInJSStack: - return DataFormatCell; - case UnboxedDoubleInFPR: - case DoubleDisplacedInJSStack: - return DataFormatDouble; + case InFPR: + return true; default: - return DataFormatNone; + return false; } } MacroAssembler::RegisterID gpr() const { - ASSERT(isInGPR()); + ASSERT(m_technique == InGPR || m_technique == UnboxedInt32InGPR || m_technique == UnboxedBooleanInGPR || m_technique == UnboxedInt52InGPR || m_technique == UnboxedStrictInt52InGPR || m_technique == UnboxedCellInGPR); return m_source.gpr; } @@ -308,71 +216,26 @@ public: ASSERT(m_technique == InPair); return m_source.pair.payloadGPR; } - - bool isInJSValueRegs() const - { - return m_technique == InPair; - } - -#if ENABLE(JIT) - JSValueRegs jsValueRegs() const - { - ASSERT(isInJSValueRegs()); - return JSValueRegs(tagGPR(), payloadGPR()); - } -#endif // ENABLE(JIT) -#else - bool isInJSValueRegs() const - { - return isInGPR(); - } -#endif // USE(JSVALUE32_64) +#endif MacroAssembler::FPRegisterID fpr() const { - ASSERT(isInFPR()); + ASSERT(m_technique == InFPR); return m_source.fpr; } VirtualRegister virtualRegister() const { - ASSERT(isInJSStack()); + ASSERT(m_technique == DisplacedInJSStack || m_technique == Int32DisplacedInJSStack || m_technique == DoubleDisplacedInJSStack || m_technique == CellDisplacedInJSStack || m_technique == BooleanDisplacedInJSStack || m_technique == Int52DisplacedInJSStack || m_technique == StrictInt52DisplacedInJSStack); return VirtualRegister(m_source.virtualReg); } - ValueRecovery withLocalsOffset(int offset) const - { - switch (m_technique) { - case DisplacedInJSStack: - case Int32DisplacedInJSStack: - case DoubleDisplacedInJSStack: - case CellDisplacedInJSStack: - case BooleanDisplacedInJSStack: - case Int52DisplacedInJSStack: - case StrictInt52DisplacedInJSStack: { - ValueRecovery result; - result.m_technique = m_technique; - result.m_source.virtualReg = m_source.virtualReg + offset; - return result; - } - - default: - return *this; - } - } - JSValue constant() const { - ASSERT(isConstant()); + ASSERT(m_technique == Constant); return JSValue::decode(m_source.constant); } - DFG::MinifiedID nodeID() const - { - ASSERT(m_technique == DirectArgumentsThatWereNotCreated || m_technique == ClonedArgumentsThatWereNotCreated); - return DFG::MinifiedID::fromBits(m_source.nodeID); - } - JSValue recover(ExecState*) const; #if ENABLE(JIT) @@ -393,7 +256,6 @@ private: #endif int virtualReg; EncodedJSValue constant; - uintptr_t nodeID; } m_source; }; |