| 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)
|
|
|