diff options
Diffstat (limited to 'deps/v8/src/ia32/macro-assembler-ia32.cc')
-rw-r--r-- | deps/v8/src/ia32/macro-assembler-ia32.cc | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/deps/v8/src/ia32/macro-assembler-ia32.cc b/deps/v8/src/ia32/macro-assembler-ia32.cc index 3ecbcee812..d7c7d3a23c 100644 --- a/deps/v8/src/ia32/macro-assembler-ia32.cc +++ b/deps/v8/src/ia32/macro-assembler-ia32.cc @@ -325,6 +325,17 @@ void MacroAssembler::CmpInstanceType(Register map, InstanceType type) { } +Condition MacroAssembler::IsObjectStringType(Register heap_object, + Register map, + Register instance_type) { + mov(map, FieldOperand(heap_object, HeapObject::kMapOffset)); + movzx_b(instance_type, FieldOperand(map, Map::kInstanceTypeOffset)); + ASSERT(kNotStringTag != 0); + test(instance_type, Immediate(kIsNotStringMask)); + return zero; +} + + void MacroAssembler::FCmp() { if (CpuFeatures::IsSupported(CMOV)) { fucomip(); @@ -729,13 +740,13 @@ void MacroAssembler::AllocateInNewSpace(int object_size, cmp(result_end, Operand::StaticVariable(new_space_allocation_limit)); j(above, gc_required, not_taken); - // Update allocation top. - UpdateAllocationTopHelper(result_end, scratch); - // Tag result if requested. if ((flags & TAG_OBJECT) != 0) { - or_(Operand(result), Immediate(kHeapObjectTag)); + lea(result, Operand(result, kHeapObjectTag)); } + + // Update allocation top. + UpdateAllocationTopHelper(result_end, scratch); } @@ -759,13 +770,13 @@ void MacroAssembler::AllocateInNewSpace(int header_size, cmp(result_end, Operand::StaticVariable(new_space_allocation_limit)); j(above, gc_required); - // Update allocation top. - UpdateAllocationTopHelper(result_end, scratch); - // Tag result if requested. if ((flags & TAG_OBJECT) != 0) { - or_(Operand(result), Immediate(kHeapObjectTag)); + lea(result, Operand(result, kHeapObjectTag)); } + + // Update allocation top. + UpdateAllocationTopHelper(result_end, scratch); } @@ -790,13 +801,13 @@ void MacroAssembler::AllocateInNewSpace(Register object_size, cmp(result_end, Operand::StaticVariable(new_space_allocation_limit)); j(above, gc_required, not_taken); - // Update allocation top. - UpdateAllocationTopHelper(result_end, scratch); - // Tag result if requested. if ((flags & TAG_OBJECT) != 0) { - or_(Operand(result), Immediate(kHeapObjectTag)); + lea(result, Operand(result, kHeapObjectTag)); } + + // Update allocation top. + UpdateAllocationTopHelper(result_end, scratch); } |