Commit 3fcf9171 authored by Yuki Shiino's avatar Yuki Shiino Committed by Commit Bot

Fix the load of Map::kBitFieldOffset in lazy accessors.

Map::kBitFieldOffset should be loaded as a byte data.  This patch
fixes the loading instruction of Map::kBitFieldOffset in lazy
accessors.

Bug: v8:6795, v8:6156
Change-Id: I8fbc88ed44fb43a24335fc81f75b7199ca80212c
Reviewed-on: https://chromium-review.googlesource.com/656862
Commit-Queue: Yuki Shiino <yukishiino@chromium.org>
Reviewed-by: 's avatarCamillo Bruni <cbruni@chromium.org>
Reviewed-by: 's avatarRoss McIlroy <rmcilroy@chromium.org>
Cr-Commit-Position: refs/heads/master@{#47918}
parent c3d93c8d
......@@ -1671,7 +1671,7 @@ void CallApiCallbackStub::Generate(MacroAssembler* masm) {
// Look for the constructor if |accessor_holder| is not a function.
Label skip_looking_for_constructor;
__ ldr(scratch0, FieldMemOperand(accessor_holder, HeapObject::kMapOffset));
__ ldr(scratch1, FieldMemOperand(scratch0, Map::kBitFieldOffset));
__ ldrb(scratch1, FieldMemOperand(scratch0, Map::kBitFieldOffset));
__ tst(scratch1, Operand(1 << Map::kIsConstructor));
__ b(ne, &skip_looking_for_constructor);
__ GetMapConstructor(context, scratch0, scratch0, scratch1);
......
......@@ -1848,7 +1848,7 @@ void CallApiCallbackStub::Generate(MacroAssembler* masm) {
// Look for the constructor if |accessor_holder| is not a function.
Label skip_looking_for_constructor;
__ Ldr(scratch, FieldMemOperand(accessor_holder, HeapObject::kMapOffset));
__ Ldr(scratch2, FieldMemOperand(scratch, Map::kBitFieldOffset));
__ Ldrb(scratch2, FieldMemOperand(scratch, Map::kBitFieldOffset));
__ Tst(scratch2, Operand(1 << Map::kIsConstructor));
__ B(ne, &skip_looking_for_constructor);
__ GetMapConstructor(context, scratch, scratch, scratch2);
......
......@@ -1768,8 +1768,8 @@ void CallApiCallbackStub::Generate(MacroAssembler* masm) {
// Look for the constructor if |accessor_holder| is not a function.
Label skip_looking_for_constructor;
__ mov(scratch, FieldOperand(accessor_holder, HeapObject::kMapOffset));
__ test(FieldOperand(scratch, Map::kBitFieldOffset),
Immediate(1 << Map::kIsConstructor));
__ test_b(FieldOperand(scratch, Map::kBitFieldOffset),
Immediate(1 << Map::kIsConstructor));
__ j(not_zero, &skip_looking_for_constructor, Label::kNear);
__ GetMapConstructor(context, scratch, scratch2);
__ bind(&skip_looking_for_constructor);
......
......@@ -1777,7 +1777,7 @@ void CallApiCallbackStub::Generate(MacroAssembler* masm) {
// Look for the constructor if |accessor_holder| is not a function.
Label skip_looking_for_constructor;
__ lw(scratch, FieldMemOperand(accessor_holder, HeapObject::kMapOffset));
__ lw(scratch2, FieldMemOperand(scratch, Map::kBitFieldOffset));
__ lbu(scratch2, FieldMemOperand(scratch, Map::kBitFieldOffset));
__ And(scratch2, scratch2, Operand(1 << Map::kIsConstructor));
__ Branch(&skip_looking_for_constructor, ne, scratch2, Operand(zero_reg));
__ GetMapConstructor(context, scratch, scratch, scratch2);
......
......@@ -1776,7 +1776,7 @@ void CallApiCallbackStub::Generate(MacroAssembler* masm) {
// Look for the constructor if |accessor_holder| is not a function.
Label skip_looking_for_constructor;
__ Ld(scratch, FieldMemOperand(accessor_holder, HeapObject::kMapOffset));
__ Ld(scratch2, FieldMemOperand(scratch, Map::kBitFieldOffset));
__ Lbu(scratch2, FieldMemOperand(scratch, Map::kBitFieldOffset));
__ And(scratch2, scratch2, Operand(1 << Map::kIsConstructor));
__ Branch(&skip_looking_for_constructor, ne, scratch2, Operand(zero_reg));
__ GetMapConstructor(context, scratch, scratch, scratch2);
......
......@@ -1773,7 +1773,7 @@ void CallApiCallbackStub::Generate(MacroAssembler* masm) {
// Look for the constructor if |accessor_holder| is not a function.
Label skip_looking_for_constructor;
__ LoadP(scratch, FieldMemOperand(accessor_holder, HeapObject::kMapOffset));
__ LoadP(scratch2, FieldMemOperand(scratch, Map::kBitFieldOffset));
__ lbz(scratch2, FieldMemOperand(scratch, Map::kBitFieldOffset));
__ andi(r0, scratch2, Operand(1 << Map::kIsConstructor));
__ bne(&skip_looking_for_constructor, cr0);
__ GetMapConstructor(context, scratch, scratch, scratch2);
......
......@@ -1745,7 +1745,7 @@ void CallApiCallbackStub::Generate(MacroAssembler* masm) {
// Look for the constructor if |accessor_holder| is not a function.
Label skip_looking_for_constructor;
__ LoadP(scratch, FieldMemOperand(accessor_holder, HeapObject::kMapOffset));
__ LoadP(scratch2, FieldMemOperand(scratch, Map::kBitFieldOffset));
__ LoadlB(scratch2, FieldMemOperand(scratch, Map::kBitFieldOffset));
__ AndP(scratch2, Operand(1 << Map::kIsConstructor));
__ bne(&skip_looking_for_constructor, Label::kNear);
__ GetMapConstructor(context, scratch, scratch, scratch2);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment