| Index: src/arm/macro-assembler-arm.cc
|
| ===================================================================
|
| --- src/arm/macro-assembler-arm.cc (revision 2798)
|
| +++ src/arm/macro-assembler-arm.cc (working copy)
|
| @@ -790,7 +790,7 @@
|
| ExternalReference::new_space_allocation_limit_address();
|
| mov(scratch2, Operand(new_space_allocation_limit));
|
| ldr(scratch2, MemOperand(scratch2));
|
| - add(result, result, Operand(object_size * kPointerSize));
|
| + add(result, result, Operand(object_size));
|
| cmp(result, Operand(scratch2));
|
| b(hi, gc_required);
|
|
|
| @@ -799,84 +799,18 @@
|
|
|
| // Tag and adjust back to start of new object.
|
| if (tag_allocated_object) {
|
| - sub(result, result, Operand((object_size * kPointerSize) -
|
| - kHeapObjectTag));
|
| + sub(result, result, Operand(object_size - kHeapObjectTag));
|
| } else {
|
| - sub(result, result, Operand(object_size * kPointerSize));
|
| + sub(result, result, Operand(object_size));
|
| }
|
| }
|
|
|
|
|
| -void MacroAssembler::AllocateObjectInNewSpace(Register object_size,
|
| - Register result,
|
| - Register scratch1,
|
| - Register scratch2,
|
| - Label* gc_required,
|
| - bool tag_allocated_object) {
|
| - ASSERT(!result.is(scratch1));
|
| - ASSERT(!scratch1.is(scratch2));
|
| -
|
| - // Load address of new object into result and allocation top address into
|
| - // scratch1.
|
| - ExternalReference new_space_allocation_top =
|
| - ExternalReference::new_space_allocation_top_address();
|
| - mov(scratch1, Operand(new_space_allocation_top));
|
| - ldr(result, MemOperand(scratch1));
|
| -
|
| - // Calculate new top and bail out if new space is exhausted. Use result
|
| - // to calculate the new top. Object size is in words so a shift is required to
|
| - // get the number of bytes
|
| - ExternalReference new_space_allocation_limit =
|
| - ExternalReference::new_space_allocation_limit_address();
|
| - mov(scratch2, Operand(new_space_allocation_limit));
|
| - ldr(scratch2, MemOperand(scratch2));
|
| - add(result, result, Operand(object_size, LSL, kPointerSizeLog2));
|
| -
|
| - cmp(result, Operand(scratch2));
|
| - b(hi, gc_required);
|
| -
|
| - // Update allocation top. result temporarily holds the new top,
|
| - str(result, MemOperand(scratch1));
|
| -
|
| - // Tag and adjust back to start of new object.
|
| - if (tag_allocated_object) {
|
| - sub(result, result, Operand(object_size, LSL, kPointerSizeLog2));
|
| - add(result, result, Operand(kHeapObjectTag));
|
| - } else {
|
| - sub(result, result, Operand(object_size, LSL, kPointerSizeLog2));
|
| - }
|
| -}
|
| -
|
| -
|
| -void MacroAssembler::UndoAllocationInNewSpace(Register object,
|
| - Register scratch) {
|
| - ExternalReference new_space_allocation_top =
|
| - ExternalReference::new_space_allocation_top_address();
|
| -
|
| - // Make sure the object has no tag before resetting top.
|
| - and_(object, object, Operand(~kHeapObjectTagMask));
|
| -#ifdef DEBUG
|
| - mov(scratch, Operand(new_space_allocation_top));
|
| - ldr(scratch, MemOperand(scratch));
|
| - cmp(object, scratch);
|
| - Check(lt, "Undo allocation of non allocated memory");
|
| -#endif
|
| - str(object, MemOperand(scratch));
|
| -}
|
| -
|
| -
|
| void MacroAssembler::CompareObjectType(Register function,
|
| Register map,
|
| Register type_reg,
|
| InstanceType type) {
|
| ldr(map, FieldMemOperand(function, HeapObject::kMapOffset));
|
| - CompareInstanceType(map, type_reg, type);
|
| -}
|
| -
|
| -
|
| -void MacroAssembler::CompareInstanceType(Register map,
|
| - Register type_reg,
|
| - InstanceType type) {
|
| ldrb(type_reg, FieldMemOperand(map, Map::kInstanceTypeOffset));
|
| cmp(type_reg, Operand(type));
|
| }
|
|
|