| Index: src/x64/code-stubs-x64.cc
|
| diff --git a/src/x64/code-stubs-x64.cc b/src/x64/code-stubs-x64.cc
|
| index 7f976940b5a2213e505c3af0005405d9efb1dc8b..8fdbf837a2c62c3b58ba1b8563fe32298c053147 100644
|
| --- a/src/x64/code-stubs-x64.cc
|
| +++ b/src/x64/code-stubs-x64.cc
|
| @@ -5424,6 +5424,79 @@ void CallApiGetterStub::Generate(MacroAssembler* masm) {
|
| }
|
|
|
|
|
| +void AtomicsLoadStub::Generate(MacroAssembler* masm) {
|
| + Register object = rdx;
|
| + Register index = rax;
|
| + Label table, i8, u8, i16, u16, i32, u32, f32, f64, u8c;
|
| +
|
| + __ int3();
|
| + __ movp(rax, FieldOperand(object, JSTypedArray::kBufferOffset));
|
| + __ movp(rax, FieldOperand(object, JSArrayBuffer::kBackingStoreOffset));
|
| +
|
| + __ movp(rcx, FieldOperand(object, JSObject::kElementsOffset));
|
| + __ movp(rcx, FieldOperand(rcx, HeapObject::kMapOffset));
|
| + __ movzxbl(rcx, FieldOperand(rcx, Map::kInstanceTypeOffset));
|
| + __ subb(rcx, Immediate(static_cast<int8_t>(FIXED_INT8_ARRAY_TYPE)));
|
| + __ Assert(below, kOffsetOutOfRange);
|
| + __ leaq(kScratchRegister, Operand(&table));
|
| + __ jmp(Operand(kScratchRegister, rcx, times_8, 0));
|
| +
|
| + __ bind(&i8);
|
| + __ movl(rax, Immediate(1));
|
| + __ Integer32ToSmi(rax, rax);
|
| + __ Ret();
|
| +
|
| + __ bind(&u8);
|
| + __ movl(rax, Immediate(2));
|
| + __ Integer32ToSmi(rax, rax);
|
| + __ Ret();
|
| +
|
| + __ bind(&i16);
|
| + __ movl(rax, Immediate(3));
|
| + __ Integer32ToSmi(rax, rax);
|
| + __ Ret();
|
| +
|
| + __ bind(&u16);
|
| + __ movl(rax, Immediate(4));
|
| + __ Integer32ToSmi(rax, rax);
|
| + __ Ret();
|
| +
|
| + __ bind(&i32);
|
| + __ movl(rax, Immediate(5));
|
| + __ Integer32ToSmi(rax, rax);
|
| + __ Ret();
|
| +
|
| + __ bind(&u32);
|
| + __ movl(rax, Immediate(6));
|
| + __ Integer32ToSmi(rax, rax);
|
| + __ Ret();
|
| +
|
| + __ bind(&f32);
|
| + __ Abort(kNoReason);
|
| +
|
| + __ bind(&f64);
|
| + __ Abort(kNoReason);
|
| +
|
| + __ bind(&u8c);
|
| + __ movl(rax, Immediate(7));
|
| + __ Integer32ToSmi(rax, rax);
|
| + __ Ret();
|
| +
|
| + __ bind(&table);
|
| + __ dq(&i8);
|
| + __ dq(&u8);
|
| + __ dq(&i16);
|
| + __ dq(&u16);
|
| + __ dq(&i32);
|
| + __ dq(&u32);
|
| + __ dq(&f32);
|
| + __ dq(&f64);
|
| + __ dq(&u8c);
|
| +
|
| + __ Ret();
|
| +}
|
| +
|
| +
|
| #undef __
|
|
|
| } // namespace internal
|
|
|