Index: src/compiler/simplified-operator.h |
diff --git a/src/compiler/simplified-operator.h b/src/compiler/simplified-operator.h |
index c918042ba5733c0ecb216e3a3e5c430e8ada765c..72608eee8c83113b1072943266bec80311a770d8 100644 |
--- a/src/compiler/simplified-operator.h |
+++ b/src/compiler/simplified-operator.h |
@@ -33,6 +33,29 @@ enum BaseTaggedness { kUntaggedBase, kTaggedBase }; |
std::ostream& operator<<(std::ostream&, BaseTaggedness); |
+// An access descriptor for loads/stores of array buffers. |
+class BufferAccess FINAL { |
+ public: |
+ explicit BufferAccess(ExternalArrayType external_array_type) |
+ : external_array_type_(external_array_type) {} |
+ |
+ ExternalArrayType external_array_type() const { return external_array_type_; } |
+ MachineType machine_type() const; |
+ |
+ private: |
+ ExternalArrayType const external_array_type_; |
+}; |
+ |
+bool operator==(BufferAccess, BufferAccess); |
+bool operator!=(BufferAccess, BufferAccess); |
+ |
+size_t hash_value(BufferAccess); |
+ |
+std::ostream& operator<<(std::ostream&, BufferAccess); |
+ |
+BufferAccess const BufferAccessOf(const Operator* op) WARN_UNUSED_RESULT; |
+ |
+ |
// 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. |
@@ -53,11 +76,7 @@ size_t hash_value(FieldAccess const&); |
std::ostream& operator<<(std::ostream&, FieldAccess const&); |
- |
-// The bound checking mode for ElementAccess below. |
-enum BoundsCheckMode { kNoBoundsCheck, kTypedArrayBoundsCheck }; |
- |
-std::ostream& operator<<(std::ostream&, BoundsCheckMode); |
+FieldAccess const& FieldAccessOf(const Operator* op) WARN_UNUSED_RESULT; |
// An access descriptor for loads/stores of indexed structures like characters |
@@ -65,7 +84,6 @@ std::ostream& operator<<(std::ostream&, BoundsCheckMode); |
// untagged base pointers are supported; untagging is done automatically during |
// lowering. |
struct ElementAccess { |
- BoundsCheckMode bounds_check; // specifies the bounds checking mode. |
BaseTaggedness base_is_tagged; // specifies if the base pointer is tagged. |
int header_size; // size of the header, without tag. |
Type* type; // type of the element. |
@@ -81,13 +99,7 @@ size_t hash_value(ElementAccess const&); |
std::ostream& operator<<(std::ostream&, ElementAccess const&); |
- |
-// If the accessed object is not a heap object, add this to the header_size. |
-static const int kNonHeapObjectHeaderSize = kHeapObjectTag; |
- |
- |
-const FieldAccess& FieldAccessOf(const Operator* op) WARN_UNUSED_RESULT; |
-const ElementAccess& ElementAccessOf(const Operator* op) WARN_UNUSED_RESULT; |
+ElementAccess const& ElementAccessOf(const Operator* op) WARN_UNUSED_RESULT; |
// Interface for building simplified operators, which represent the |
@@ -149,8 +161,14 @@ class SimplifiedOperatorBuilder FINAL { |
const Operator* ObjectIsSmi(); |
const Operator* ObjectIsNonNegativeSmi(); |
- const Operator* LoadField(const FieldAccess&); |
- const Operator* StoreField(const FieldAccess&); |
+ const Operator* LoadField(FieldAccess const&); |
+ const Operator* StoreField(FieldAccess const&); |
+ |
+ // load-buffer buffer, offset, length |
+ const Operator* LoadBuffer(BufferAccess); |
+ |
+ // store-buffer buffer, offset, length, value |
+ const Operator* StoreBuffer(BufferAccess); |
// load-element [base + index], length |
const Operator* LoadElement(ElementAccess const&); |