Index: src/compiler/mips64/code-generator-mips64.cc |
diff --git a/src/compiler/mips64/code-generator-mips64.cc b/src/compiler/mips64/code-generator-mips64.cc |
index 8004e7e3e4853d5c06f7af43bd217b4ef39d65c2..26684baf091bd871ff40b2d5bd8d6ffe276119b1 100644 |
--- a/src/compiler/mips64/code-generator-mips64.cc |
+++ b/src/compiler/mips64/code-generator-mips64.cc |
@@ -484,6 +484,12 @@ FPUCondition FlagsConditionToConditionCmpFPU(bool& predicate, |
__ bind(&done); \ |
} |
+#define ASSEMBLE_ATOMIC_LOAD_INTEGER(asm_instr) \ |
+ do { \ |
+ __ asm_instr(i.OutputRegister(), i.MemoryOperand()); \ |
+ __ sync(); \ |
+ } while (0) |
+ |
void CodeGenerator::AssembleDeconstructFrame() { |
__ mov(sp, fp); |
__ Pop(ra, fp); |
@@ -1575,12 +1581,19 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) { |
ASSEMBLE_CHECKED_STORE_FLOAT(Double, sdc1); |
break; |
case kAtomicLoadInt8: |
+ ASSEMBLE_ATOMIC_LOAD_INTEGER(lb); |
+ break; |
case kAtomicLoadUint8: |
+ ASSEMBLE_ATOMIC_LOAD_INTEGER(lbu); |
+ break; |
case kAtomicLoadInt16: |
+ ASSEMBLE_ATOMIC_LOAD_INTEGER(lh); |
+ break; |
case kAtomicLoadUint16: |
+ ASSEMBLE_ATOMIC_LOAD_INTEGER(lhu); |
+ break; |
case kAtomicLoadWord32: |
- // TODO(binji): implement |
- __ nop(); |
+ ASSEMBLE_ATOMIC_LOAD_INTEGER(lw); |
break; |
} |
} // NOLINT(readability/fn_size) |