summaryrefslogtreecommitdiff
path: root/deps/v8/src/x64/lithium-x64.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/x64/lithium-x64.h')
-rw-r--r--deps/v8/src/x64/lithium-x64.h60
1 files changed, 43 insertions, 17 deletions
diff --git a/deps/v8/src/x64/lithium-x64.h b/deps/v8/src/x64/lithium-x64.h
index 50e0595025..2ba248642c 100644
--- a/deps/v8/src/x64/lithium-x64.h
+++ b/deps/v8/src/x64/lithium-x64.h
@@ -102,6 +102,7 @@ class LCodeGen;
V(LoadFieldByIndex) \
V(LoadFunctionPrototype) \
V(LoadGlobalGeneric) \
+ V(LoadGlobalViaContext) \
V(LoadKeyed) \
V(LoadKeyedGeneric) \
V(LoadNamedField) \
@@ -141,6 +142,7 @@ class LCodeGen;
V(StoreCodeEntry) \
V(StoreContextSlot) \
V(StoreFrameContext) \
+ V(StoreGlobalViaContext) \
V(StoreKeyed) \
V(StoreKeyedGeneric) \
V(StoreNamedField) \
@@ -1615,12 +1617,8 @@ inline static bool ExternalArrayOpRequiresTemp(
// an index cannot fold the scale operation into a load and need an extra
// temp register to do the work.
return SmiValuesAre31Bits() && key_representation.IsSmi() &&
- (elements_kind == EXTERNAL_INT8_ELEMENTS ||
- elements_kind == EXTERNAL_UINT8_ELEMENTS ||
- elements_kind == EXTERNAL_UINT8_CLAMPED_ELEMENTS ||
- elements_kind == UINT8_ELEMENTS ||
- elements_kind == INT8_ELEMENTS ||
- elements_kind == UINT8_CLAMPED_ELEMENTS);
+ (elements_kind == UINT8_ELEMENTS || elements_kind == INT8_ELEMENTS ||
+ elements_kind == UINT8_CLAMPED_ELEMENTS);
}
@@ -1634,15 +1632,9 @@ class LLoadKeyed final : public LTemplateInstruction<1, 2, 0> {
DECLARE_CONCRETE_INSTRUCTION(LoadKeyed, "load-keyed")
DECLARE_HYDROGEN_ACCESSOR(LoadKeyed)
- bool is_external() const {
- return hydrogen()->is_external();
- }
bool is_fixed_typed_array() const {
return hydrogen()->is_fixed_typed_array();
}
- bool is_typed_elements() const {
- return is_external() || is_fixed_typed_array();
- }
LOperand* elements() { return inputs_[0]; }
LOperand* key() { return inputs_[1]; }
void PrintDataTo(StringStream* stream) override;
@@ -1690,7 +1682,23 @@ class LLoadGlobalGeneric final : public LTemplateInstruction<1, 2, 1> {
LOperand* temp_vector() { return temps_[0]; }
Handle<Object> name() const { return hydrogen()->name(); }
- bool for_typeof() const { return hydrogen()->for_typeof(); }
+ TypeofMode typeof_mode() const { return hydrogen()->typeof_mode(); }
+};
+
+
+class LLoadGlobalViaContext final : public LTemplateInstruction<1, 1, 1> {
+ public:
+ explicit LLoadGlobalViaContext(LOperand* context) { inputs_[0] = context; }
+
+ DECLARE_CONCRETE_INSTRUCTION(LoadGlobalViaContext, "load-global-via-context")
+ DECLARE_HYDROGEN_ACCESSOR(LoadGlobalViaContext)
+
+ void PrintDataTo(StringStream* stream) override;
+
+ LOperand* context() { return inputs_[0]; }
+
+ int depth() const { return hydrogen()->depth(); }
+ int slot_index() const { return hydrogen()->slot_index(); }
};
@@ -2185,6 +2193,28 @@ class LStoreNamedGeneric final : public LTemplateInstruction<0, 3, 2> {
};
+class LStoreGlobalViaContext final : public LTemplateInstruction<0, 2, 0> {
+ public:
+ LStoreGlobalViaContext(LOperand* context, LOperand* value) {
+ inputs_[0] = context;
+ inputs_[1] = value;
+ }
+
+ LOperand* context() { return inputs_[0]; }
+ LOperand* value() { return inputs_[1]; }
+
+ DECLARE_CONCRETE_INSTRUCTION(StoreGlobalViaContext,
+ "store-global-via-context")
+ DECLARE_HYDROGEN_ACCESSOR(StoreGlobalViaContext)
+
+ void PrintDataTo(StringStream* stream) override;
+
+ int depth() { return hydrogen()->depth(); }
+ int slot_index() { return hydrogen()->slot_index(); }
+ LanguageMode language_mode() { return hydrogen()->language_mode(); }
+};
+
+
class LStoreKeyed final : public LTemplateInstruction<0, 3, 0> {
public:
LStoreKeyed(LOperand* object, LOperand* key, LOperand* value) {
@@ -2193,13 +2223,9 @@ class LStoreKeyed final : public LTemplateInstruction<0, 3, 0> {
inputs_[2] = value;
}
- bool is_external() const { return hydrogen()->is_external(); }
bool is_fixed_typed_array() const {
return hydrogen()->is_fixed_typed_array();
}
- bool is_typed_elements() const {
- return is_external() || is_fixed_typed_array();
- }
LOperand* elements() { return inputs_[0]; }
LOperand* key() { return inputs_[1]; }
LOperand* value() { return inputs_[2]; }