@@ -438,12 +438,12 @@ class Assembler : public AssemblerBase {
438438 const Address& address,
439439 OperandSize size = kFourBytes ) override {
440440 Load (dst, address, size);
441- dmb ();
441+ dmb_ish ();
442442 }
443443 void StoreRelease (Register src,
444444 const Address& address,
445445 OperandSize size = kFourBytes ) override {
446- dmb ();
446+ dmb_ish ();
447447 Store (src, address, size);
448448 }
449449
@@ -469,6 +469,8 @@ class Assembler : public AssemblerBase {
469469 // Debugging and bringup support.
470470 void Breakpoint () override { bkpt (0 ); }
471471
472+ void StoreStoreFence () override { dmb_ishst (); }
473+
472474 // Data-processing instructions.
473475 void and_ (Register rd, Register rn, Operand o, Condition cond = AL);
474476 void ands (Register rd, Register rn, Operand o, Condition cond = AL);
@@ -601,7 +603,8 @@ class Assembler : public AssemblerBase {
601603 void ldrex (Register rd, Register rn, Condition cond = AL);
602604 void strex (Register rd, Register rt, Register rn, Condition cond = AL);
603605
604- void dmb ();
606+ void dmb_ish () { Emit (kDMB_ISH ); }
607+ void dmb_ishst () { Emit (kDMB_ISHST ); }
605608
606609 // Media instructions.
607610 void sbfx (Register rd,
@@ -1041,13 +1044,13 @@ class Assembler : public AssemblerBase {
10411044 void InitializeHeader (Register tags, Register object) {
10421045 str (tags, FieldAddress (object, target::Object::tags_offset ()));
10431046#if defined(TARGET_HAS_FAST_WRITE_WRITE_FENCE)
1044- dmb ();
1047+ StoreStoreFence ();
10451048#endif
10461049 }
10471050 void InitializeHeaderUntagged (Register tags, Register object) {
10481051 str (tags, Address (object, target::Object::tags_offset ()));
10491052#if defined(TARGET_HAS_FAST_WRITE_WRITE_FENCE)
1050- dmb ();
1053+ StoreStoreFence ();
10511054#endif
10521055 }
10531056
0 commit comments