@@ -76,7 +76,8 @@ CodePtr NativeCallPattern::target() const {
7676}
7777
7878void NativeCallPattern::set_target (const Code& target) const {
79- object_pool_.SetObjectAt (target_code_pool_index_, target);
79+ object_pool_.SetObjectAt <std::memory_order_release>(target_code_pool_index_,
80+ target);
8081 // No need to flush the instruction cache, since the code is not modified.
8182}
8283
@@ -86,8 +87,8 @@ NativeFunction NativeCallPattern::native_function() const {
8687}
8788
8889void NativeCallPattern::set_native_function (NativeFunction func) const {
89- object_pool_.SetRawValueAt (native_function_pool_index_,
90- reinterpret_cast <uword>(func));
90+ object_pool_.SetRawValueAt <std::memory_order_relaxed>(
91+ native_function_pool_index_, reinterpret_cast <uword>(func));
9192}
9293
9394// Decodes a load sequence ending at 'end' (the last instruction of the load
@@ -398,7 +399,8 @@ CodePtr CallPattern::TargetCode() const {
398399}
399400
400401void CallPattern::SetTargetCode (const Code& target) const {
401- object_pool_.SetObjectAt (target_code_pool_index_, target);
402+ object_pool_.SetObjectAt <std::memory_order_release>(target_code_pool_index_,
403+ target);
402404 // No need to flush the instruction cache, since the code is not modified.
403405}
404406
@@ -408,15 +410,16 @@ ObjectPtr ICCallPattern::Data() const {
408410
409411void ICCallPattern::SetData (const Object& data) const {
410412 ASSERT (data.IsArray () || data.IsICData () || data.IsMegamorphicCache ());
411- object_pool_.SetObjectAt (data_pool_index_, data);
413+ object_pool_.SetObjectAt <std::memory_order_release> (data_pool_index_, data);
412414}
413415
414416CodePtr ICCallPattern::TargetCode () const {
415417 return static_cast <CodePtr>(object_pool_.ObjectAt (target_pool_index_));
416418}
417419
418420void ICCallPattern::SetTargetCode (const Code& target) const {
419- object_pool_.SetObjectAt (target_pool_index_, target);
421+ object_pool_.SetObjectAt <std::memory_order_release>(target_pool_index_,
422+ target);
420423 // No need to flush the instruction cache, since the code is not modified.
421424}
422425
@@ -430,7 +433,7 @@ ObjectPtr SwitchableCallPatternBase::data() const {
430433
431434void SwitchableCallPatternBase::SetData (const Object& data) const {
432435 ASSERT (!Object::Handle (object_pool_.ObjectAt (data_pool_index_)).IsCode ());
433- object_pool_.SetObjectAt (data_pool_index_, data);
436+ object_pool_.SetObjectAt <std::memory_order_release> (data_pool_index_, data);
434437}
435438
436439SwitchableCallPattern::SwitchableCallPattern (uword pc, const Code& code)
@@ -456,7 +459,8 @@ ObjectPtr SwitchableCallPattern::target() const {
456459
457460void SwitchableCallPattern::SetTarget (const Code& target) const {
458461 ASSERT (Object::Handle (object_pool_.ObjectAt (target_pool_index_)).IsCode ());
459- object_pool_.SetObjectAt (target_pool_index_, target);
462+ object_pool_.SetObjectAt <std::memory_order_release>(target_pool_index_,
463+ target);
460464}
461465
462466BareSwitchableCallPattern::BareSwitchableCallPattern (uword pc)
@@ -483,8 +487,8 @@ uword BareSwitchableCallPattern::target_entry() const {
483487void BareSwitchableCallPattern::SetTarget (const Code& target) const {
484488 ASSERT (object_pool_.TypeAt (target_pool_index_) ==
485489 ObjectPool::EntryType::kImmediate );
486- object_pool_.SetRawValueAt (target_pool_index_,
487- target.MonomorphicEntryPoint ());
490+ object_pool_.SetRawValueAt <std::memory_order_relaxed>(
491+ target_pool_index_, target.MonomorphicEntryPoint ());
488492}
489493
490494ReturnPattern::ReturnPattern (uword pc) : pc_(pc) {}
0 commit comments