diff options
Diffstat (limited to 'deps/v8/src/x64/macro-assembler-x64.cc')
-rw-r--r-- | deps/v8/src/x64/macro-assembler-x64.cc | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/deps/v8/src/x64/macro-assembler-x64.cc b/deps/v8/src/x64/macro-assembler-x64.cc index 21b0f9b19c..5b897de545 100644 --- a/deps/v8/src/x64/macro-assembler-x64.cc +++ b/deps/v8/src/x64/macro-assembler-x64.cc @@ -2852,6 +2852,21 @@ void MacroAssembler::LoadGlobalCell(Register dst, Handle<Cell> cell) { } +void MacroAssembler::CmpWeakValue(Register value, Handle<WeakCell> cell, + Register scratch) { + Move(scratch, cell, RelocInfo::EMBEDDED_OBJECT); + cmpp(value, FieldOperand(scratch, WeakCell::kValueOffset)); +} + + +void MacroAssembler::LoadWeakValue(Register value, Handle<WeakCell> cell, + Label* miss) { + Move(value, cell, RelocInfo::EMBEDDED_OBJECT); + movp(value, FieldOperand(value, WeakCell::kValueOffset)); + JumpIfSmi(value, miss); +} + + void MacroAssembler::Drop(int stack_elements) { if (stack_elements > 0) { addp(rsp, Immediate(stack_elements * kPointerSize)); @@ -3615,18 +3630,17 @@ void MacroAssembler::EnumLength(Register dst, Register map) { } -void MacroAssembler::DispatchMap(Register obj, - Register unused, - Handle<Map> map, - Handle<Code> success, - SmiCheckType smi_check_type) { +void MacroAssembler::DispatchWeakMap(Register obj, Register scratch1, + Register scratch2, Handle<WeakCell> cell, + Handle<Code> success, + SmiCheckType smi_check_type) { Label fail; if (smi_check_type == DO_SMI_CHECK) { JumpIfSmi(obj, &fail); } - Cmp(FieldOperand(obj, HeapObject::kMapOffset), map); + movq(scratch1, FieldOperand(obj, HeapObject::kMapOffset)); + CmpWeakValue(scratch1, cell, scratch2); j(equal, success, RelocInfo::CODE_TARGET); - bind(&fail); } @@ -4367,10 +4381,10 @@ void MacroAssembler::LoadFromNumberDictionary(Label* miss, } bind(&done); - // Check that the value is a normal propety. + // Check that the value is a field property. const int kDetailsOffset = SeededNumberDictionary::kElementsStartOffset + 2 * kPointerSize; - DCHECK_EQ(NORMAL, 0); + DCHECK_EQ(FIELD, 0); Test(FieldOperand(elements, r2, times_pointer_size, kDetailsOffset), Smi::FromInt(PropertyDetails::TypeField::kMask)); j(not_zero, miss); @@ -5113,18 +5127,6 @@ void MacroAssembler::CheckPageFlag( } -void MacroAssembler::CheckMapDeprecated(Handle<Map> map, - Register scratch, - Label* if_deprecated) { - if (map->CanBeDeprecated()) { - Move(scratch, map); - movl(scratch, FieldOperand(scratch, Map::kBitField3Offset)); - andl(scratch, Immediate(Map::Deprecated::kMask)); - j(not_zero, if_deprecated); - } -} - - void MacroAssembler::JumpIfBlack(Register object, Register bitmap_scratch, Register mask_scratch, |