Index: src/compiler/arm64/code-generator-arm64.cc |
diff --git a/src/compiler/arm64/code-generator-arm64.cc b/src/compiler/arm64/code-generator-arm64.cc |
index 5eec65ac81827417f6ad7f4898adcfb8751632db..87dc2543e452c3e988098ef0ac8725152bfe34ed 100644 |
--- a/src/compiler/arm64/code-generator-arm64.cc |
+++ b/src/compiler/arm64/code-generator-arm64.cc |
@@ -479,6 +479,14 @@ Condition FlagsConditionToCondition(FlagsCondition condition) { |
__ Dmb(InnerShareable, BarrierAll); \ |
} while (0) |
+#define ASSEMBLE_ATOMIC_STORE_INTEGER(asm_instr) \ |
+ do { \ |
+ __ Dmb(InnerShareable, BarrierAll); \ |
+ __ asm_instr(i.InputRegister(2), \ |
+ MemOperand(i.InputRegister(0), i.InputRegister(1))); \ |
+ __ Dmb(InnerShareable, BarrierAll); \ |
+ } while (0) |
+ |
void CodeGenerator::AssembleDeconstructFrame() { |
const CallDescriptor* descriptor = linkage()->GetIncomingDescriptor(); |
if (descriptor->IsCFunctionCall() || descriptor->UseNativeStack()) { |
@@ -1431,6 +1439,18 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
MemOperand(i.InputRegister(0), i.InputRegister(1))); |
__ Dmb(InnerShareable, BarrierAll); |
break; |
+ case kAtomicStoreWord8: |
+ ASSEMBLE_ATOMIC_STORE_INTEGER(Strb); |
+ break; |
+ case kAtomicStoreWord16: |
+ ASSEMBLE_ATOMIC_STORE_INTEGER(Strh); |
+ break; |
+ case kAtomicStoreWord32: |
+ __ Dmb(InnerShareable, BarrierAll); |
+ __ Str(i.InputRegister32(2), |
+ MemOperand(i.InputRegister(0), i.InputRegister(1))); |
+ __ Dmb(InnerShareable, BarrierAll); |
+ break; |
} |
return kSuccess; |
} // NOLINT(readability/fn_size) |