Index: src/compiler/arm/code-generator-arm.cc |
diff --git a/src/compiler/arm/code-generator-arm.cc b/src/compiler/arm/code-generator-arm.cc |
index 5900955e78fd9d2eb8e7d00f0cf19695dc8fd069..a57f1beec2d5a198fc79790a6037844aaeb33068 100644 |
--- a/src/compiler/arm/code-generator-arm.cc |
+++ b/src/compiler/arm/code-generator-arm.cc |
@@ -395,6 +395,14 @@ Condition FlagsConditionToCondition(FlagsCondition condition) { |
__ dmb(ISH); \ |
} while (0) |
+#define ASSEMBLE_ATOMIC_STORE_INTEGER(asm_instr) \ |
+ do { \ |
+ __ dmb(ISH); \ |
+ __ asm_instr(i.InputRegister(2), \ |
+ MemOperand(i.InputRegister(0), i.InputRegister(1))); \ |
+ __ dmb(ISH); \ |
+ } while (0) |
+ |
void CodeGenerator::AssembleDeconstructFrame() { |
__ LeaveFrame(StackFrame::MANUAL); |
} |
@@ -1274,6 +1282,16 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
case kAtomicLoadWord32: |
ASSEMBLE_ATOMIC_LOAD_INTEGER(ldr); |
break; |
+ |
+ case kAtomicStoreWord8: |
+ ASSEMBLE_ATOMIC_STORE_INTEGER(strb); |
+ break; |
+ case kAtomicStoreWord16: |
+ ASSEMBLE_ATOMIC_STORE_INTEGER(strh); |
+ break; |
+ case kAtomicStoreWord32: |
+ ASSEMBLE_ATOMIC_STORE_INTEGER(str); |
+ break; |
} |
return kSuccess; |
} // NOLINT(readability/fn_size) |