summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/bytecode/ValueRecovery.h
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2016-04-10 09:28:39 +0000
commit32761a6cee1d0dee366b885b7b9c777e67885688 (patch)
treed6bec92bebfb216f4126356e55518842c2f476a1 /Source/JavaScriptCore/bytecode/ValueRecovery.h
parenta4e969f4965059196ca948db781e52f7cfebf19e (diff)
downloadWebKitGtk-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.h174
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;
};