Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(421)

Unified Diff: src/hydrogen-instructions.h

Issue 19562003: Add support for IncrementCounter in Hydrogen. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: REBASE Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/hydrogen.cc ('k') | src/hydrogen-instructions.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/hydrogen-instructions.h
diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
index b43efc80baa9cb111b764a375e656ab9f522538e..bb3128d7a729b5d797b65e49156d267676a2cadd 100644
--- a/src/hydrogen-instructions.h
+++ b/src/hydrogen-instructions.h
@@ -352,6 +352,7 @@ class HType {
public:
HType() : type_(kUninitialized) { }
+ static HType None() { return HType(kNone); }
static HType Tagged() { return HType(kTagged); }
static HType TaggedPrimitive() { return HType(kTaggedPrimitive); }
static HType TaggedNumber() { return HType(kTaggedNumber); }
@@ -447,6 +448,7 @@ class HType {
private:
enum Type {
+ kNone = 0x0, // 0000 0000 0000 0000
kTagged = 0x1, // 0000 0000 0000 0001
kTaggedPrimitive = 0x5, // 0000 0000 0000 0101
kTaggedNumber = 0xd, // 0000 0000 0000 1101
@@ -3464,6 +3466,8 @@ class HConstant: public HTemplateInstruction<0> {
bool is_not_in_new_space,
bool is_cell,
bool boolean_value);
+ HConstant(ExternalReference reference,
+ Representation r = Representation::External());
Handle<Object> handle() {
if (handle_.is_null()) {
@@ -3528,6 +3532,7 @@ class HConstant: public HTemplateInstruction<0> {
if (HasSmiValue()) return Representation::Smi();
if (HasInteger32Value()) return Representation::Integer32();
if (HasNumberValue()) return Representation::Double();
+ if (HasExternalValue()) return Representation::External();
return Representation::Tagged();
}
@@ -3579,6 +3584,8 @@ class HConstant: public HTemplateInstruction<0> {
bool HasInternalizedStringValue() const {
return HasStringValue() && is_internalized_string_;
}
+ bool HasExternalValue() const { return has_external_value_; }
+ ExternalReference ExternalValue() const { return external_value_; }
bool BooleanValue() const { return boolean_value_; }
@@ -3587,6 +3594,8 @@ class HConstant: public HTemplateInstruction<0> {
return static_cast<intptr_t>(int32_value_);
} else if (has_double_value_) {
return static_cast<intptr_t>(BitCast<int64_t>(double_value_));
+ } else if (has_external_value_) {
+ return reinterpret_cast<intptr_t>(external_value_.address());
} else {
ASSERT(!handle_.is_null());
return unique_id_.Hashcode();
@@ -3594,14 +3603,14 @@ class HConstant: public HTemplateInstruction<0> {
}
virtual void FinalizeUniqueValueId() {
- if (!has_double_value_) {
+ if (!has_double_value_ && !has_external_value_) {
ASSERT(!handle_.is_null());
unique_id_ = UniqueValueId(handle_);
}
}
bool UniqueValueIdsMatch(UniqueValueId other) {
- return !has_double_value_ && unique_id_ == other;
+ return !has_double_value_ && !has_external_value_ && unique_id_ == other;
}
#ifdef DEBUG
@@ -3622,6 +3631,9 @@ class HConstant: public HTemplateInstruction<0> {
return other_constant->has_double_value_ &&
BitCast<int64_t>(double_value_) ==
BitCast<int64_t>(other_constant->double_value_);
+ } else if (has_external_value_) {
+ return other_constant->has_external_value_ &&
+ external_value_ == other_constant->external_value_;
} else {
ASSERT(!handle_.is_null());
return !other_constant->handle_.is_null() &&
@@ -3649,12 +3661,14 @@ class HConstant: public HTemplateInstruction<0> {
bool has_smi_value_ : 1;
bool has_int32_value_ : 1;
bool has_double_value_ : 1;
+ bool has_external_value_ : 1;
bool is_internalized_string_ : 1; // TODO(yangguo): make this part of HType.
bool is_not_in_new_space_ : 1;
bool is_cell_ : 1;
bool boolean_value_ : 1;
int32_t int32_value_;
double double_value_;
+ ExternalReference external_value_;
HType type_from_value_;
};
@@ -5553,6 +5567,10 @@ class HObjectAccess {
return HObjectAccess(kInobject, AllocationMemento::kAllocationSiteOffset);
}
+ static HObjectAccess ForInteger32() {
titzer 2013/07/25 11:56:47 Would prefer this to be ForExternalReference() or
danno 2013/07/25 12:05:08 You need to change the kDependsOn/ChangesSpecializ
+ return HObjectAccess(kInobject, 0, Representation::Integer32());
+ }
+
// Create an access to an offset in a fixed array header.
static HObjectAccess ForFixedArrayHeader(int offset);
« no previous file with comments | « src/hydrogen.cc ('k') | src/hydrogen-instructions.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698