Index: src/objects/object-macros.h |
diff --git a/src/objects/object-macros.h b/src/objects/object-macros.h |
index 127223b86dbc1e04d3e2c7fe5bf8f30db063bc8f..2957f541fc087c604938afc1982a3103ee92dec1 100644 |
--- a/src/objects/object-macros.h |
+++ b/src/objects/object-macros.h |
@@ -8,6 +8,10 @@ |
// Note 2: This file is deliberately missing the include guards (the undeffing |
// approach wouldn't work otherwise). |
+// The accessors with RELAXED_, ACQUIRE_, and RELEASE_ prefixes should be used |
+// for fields that can be written to and read from multiple threads at the same |
+// time. See comments in src/base/atomicops.h for the memory ordering sematics. |
+ |
#define DECL_BOOLEAN_ACCESSORS(name) \ |
inline bool name() const; \ |
inline void set_##name(bool value); |
@@ -80,13 +84,13 @@ |
RELEASE_WRITE_FIELD(this, offset, Smi::FromInt(value)); \ |
} |
-#define NOBARRIER_SMI_ACCESSORS(holder, name, offset) \ |
- int holder::nobarrier_##name() const { \ |
- Object* value = NOBARRIER_READ_FIELD(this, offset); \ |
- return Smi::cast(value)->value(); \ |
- } \ |
- void holder::nobarrier_set_##name(int value) { \ |
- NOBARRIER_WRITE_FIELD(this, offset, Smi::FromInt(value)); \ |
+#define RELAXED_SMI_ACCESSORS(holder, name, offset) \ |
+ int holder::relaxed_read_##name() const { \ |
+ Object* value = RELAXED_READ_FIELD(this, offset); \ |
+ return Smi::cast(value)->value(); \ |
+ } \ |
+ void holder::relaxed_write_##name(int value) { \ |
+ RELAXED_WRITE_FIELD(this, offset, Smi::FromInt(value)); \ |
} |
#define BOOL_GETTER(holder, field, name, offset) \ |
@@ -116,13 +120,13 @@ |
reinterpret_cast<Object*>(base::Acquire_Load( \ |
reinterpret_cast<const base::AtomicWord*>(FIELD_ADDR_CONST(p, offset)))) |
-#define NOBARRIER_READ_FIELD(p, offset) \ |
- reinterpret_cast<Object*>(base::NoBarrier_Load( \ |
+#define RELAXED_READ_FIELD(p, offset) \ |
+ reinterpret_cast<Object*>(base::Relaxed_Load( \ |
reinterpret_cast<const base::AtomicWord*>(FIELD_ADDR_CONST(p, offset)))) |
#ifdef V8_CONCURRENT_MARKING |
#define WRITE_FIELD(p, offset, value) \ |
- base::NoBarrier_Store( \ |
+ base::Relaxed_Store( \ |
reinterpret_cast<base::AtomicWord*>(FIELD_ADDR(p, offset)), \ |
reinterpret_cast<base::AtomicWord>(value)); |
#else |
@@ -135,8 +139,8 @@ |
reinterpret_cast<base::AtomicWord*>(FIELD_ADDR(p, offset)), \ |
reinterpret_cast<base::AtomicWord>(value)); |
-#define NOBARRIER_WRITE_FIELD(p, offset, value) \ |
- base::NoBarrier_Store( \ |
+#define RELAXED_WRITE_FIELD(p, offset, value) \ |
+ base::Relaxed_Store( \ |
reinterpret_cast<base::AtomicWord*>(FIELD_ADDR(p, offset)), \ |
reinterpret_cast<base::AtomicWord>(value)); |
@@ -229,17 +233,16 @@ |
#define READ_BYTE_FIELD(p, offset) \ |
(*reinterpret_cast<const byte*>(FIELD_ADDR_CONST(p, offset))) |
-#define NOBARRIER_READ_BYTE_FIELD(p, offset) \ |
- static_cast<byte>(base::NoBarrier_Load( \ |
+#define RELAXED_READ_BYTE_FIELD(p, offset) \ |
+ static_cast<byte>(base::Relaxed_Load( \ |
reinterpret_cast<base::Atomic8*>(FIELD_ADDR(p, offset)))) |
#define WRITE_BYTE_FIELD(p, offset, value) \ |
(*reinterpret_cast<byte*>(FIELD_ADDR(p, offset)) = value) |
-#define NOBARRIER_WRITE_BYTE_FIELD(p, offset, value) \ |
- base::NoBarrier_Store( \ |
- reinterpret_cast<base::Atomic8*>(FIELD_ADDR(p, offset)), \ |
- static_cast<base::Atomic8>(value)); |
+#define RELAXED_WRITE_BYTE_FIELD(p, offset, value) \ |
+ base::Relaxed_Store(reinterpret_cast<base::Atomic8*>(FIELD_ADDR(p, offset)), \ |
+ static_cast<base::Atomic8>(value)); |
#ifdef VERIFY_HEAP |
#define DECLARE_VERIFIER(Name) void Name##Verify(); |