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

Unified Diff: src/compiler/simplified-operator.h

Issue 439223004: Add support for untagged LoadField, StoreField, LoadElement, and StoreElement simplfied operators. … (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 4 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
Index: src/compiler/simplified-operator.h
diff --git a/src/compiler/simplified-operator.h b/src/compiler/simplified-operator.h
index 6410f2f66daa218dff0a480c0a5444009310bd35..e3118b91a8c51bc615bb9f59e9daa9892c65f75e 100644
--- a/src/compiler/simplified-operator.h
+++ b/src/compiler/simplified-operator.h
@@ -13,22 +13,27 @@ namespace v8 {
namespace internal {
namespace compiler {
-// An access descriptor for loads/stores from/to fixed structures
-// like field accesses of heap objects.
+// An access descriptor for loads/stores of fixed structures like field
+// accesses of heap objects. Accesses from either tagged or untagged base
+// pointers are supported; untagging is done automatically during lowering.
struct FieldAccess {
- int offset;
- Handle<Name> name; // debug only.
- Type* type;
- MachineRepresentation representation;
+ bool base_is_tagged; // {true} if the base pointer is tagged.
+ int offset; // offset of the field, without tag.
+ Handle<Name> name; // debugging only.
+ Type* type; // type of the field.
+ MachineRepresentation representation; // machine representation of field.
};
-// An access descriptor for loads/stores of indexed structures
-// like characters in strings or off-heap backing stores.
+// An access descriptor for loads/stores of indexed structures like characters
+// in strings or off-heap backing stores. Accesses from either tagged or
+// untagged base pointers are supported; untagging is done automatically during
+// lowering.
struct ElementAccess {
- int header_size;
- Type* type;
- MachineRepresentation representation;
+ bool base_is_tagged; // {true} if the base pointer is tagged.
+ int header_size; // size of the header, without tag.
+ Type* type; // type of the element.
+ MachineRepresentation representation; // machine representation of element.
};
@@ -46,8 +51,8 @@ struct StaticParameterTraits<const FieldAccess> {
return (val.offset < 16) | (val.representation & 0xffff);
}
static bool Equals(const FieldAccess& a, const FieldAccess& b) {
- return a.offset == b.offset && a.representation == b.representation &&
- a.type->Is(b.type);
+ return a.base_is_tagged == b.base_is_tagged && a.offset == b.offset &&
+ a.representation == b.representation && a.type->Is(b.type);
}
};
@@ -62,7 +67,8 @@ struct StaticParameterTraits<const ElementAccess> {
return (val.header_size < 16) | (val.representation & 0xffff);
}
static bool Equals(const ElementAccess& a, const ElementAccess& b) {
- return a.header_size == b.header_size &&
+ return a.base_is_tagged == b.base_is_tagged &&
+ a.header_size == b.header_size &&
a.representation == b.representation && a.type->Is(b.type);
}
};

Powered by Google App Engine
This is Rietveld 408576698