| Index: src/arm/macro-assembler-arm.cc | 
| diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc | 
| index 8da64d934ef987ec4618d8bf7547bebc0476540b..703537c3ba71b12554fd9f4f459ff28c55f2efa2 100644 | 
| --- a/src/arm/macro-assembler-arm.cc | 
| +++ b/src/arm/macro-assembler-arm.cc | 
| @@ -3275,27 +3275,6 @@ void MacroAssembler::HasColor(Register object, | 
| } | 
|  | 
|  | 
| -// Detect some, but not all, common pointer-free objects.  This is used by the | 
| -// incremental write barrier which doesn't care about oddballs (they are always | 
| -// marked black immediately so this code is not hit). | 
| -void MacroAssembler::JumpIfDataObject(Register value, | 
| -                                      Register scratch, | 
| -                                      Label* not_data_object) { | 
| -  Label is_data_object; | 
| -  ldr(scratch, FieldMemOperand(value, HeapObject::kMapOffset)); | 
| -  CompareRoot(scratch, Heap::kHeapNumberMapRootIndex); | 
| -  b(eq, &is_data_object); | 
| -  DCHECK(kIsIndirectStringTag == 1 && kIsIndirectStringMask == 1); | 
| -  DCHECK(kNotStringTag == 0x80 && kIsNotStringMask == 0x80); | 
| -  // If it's a string and it's not a cons string then it's an object containing | 
| -  // no GC pointers. | 
| -  ldrb(scratch, FieldMemOperand(scratch, Map::kInstanceTypeOffset)); | 
| -  tst(scratch, Operand(kIsIndirectStringMask | kIsNotStringMask)); | 
| -  b(ne, not_data_object); | 
| -  bind(&is_data_object); | 
| -} | 
| - | 
| - | 
| void MacroAssembler::GetMarkBits(Register addr_reg, | 
| Register bitmap_reg, | 
| Register mask_reg) { | 
| @@ -3310,12 +3289,9 @@ void MacroAssembler::GetMarkBits(Register addr_reg, | 
| } | 
|  | 
|  | 
| -void MacroAssembler::EnsureNotWhite( | 
| -    Register value, | 
| -    Register bitmap_scratch, | 
| -    Register mask_scratch, | 
| -    Register load_scratch, | 
| -    Label* value_is_white_and_not_data) { | 
| +void MacroAssembler::JumpIfWhite(Register value, Register bitmap_scratch, | 
| +                                 Register mask_scratch, Register load_scratch, | 
| +                                 Label* value_is_white) { | 
| DCHECK(!AreAliased(value, bitmap_scratch, mask_scratch, ip)); | 
| GetMarkBits(value, bitmap_scratch, mask_scratch); | 
|  | 
| @@ -3325,81 +3301,11 @@ void MacroAssembler::EnsureNotWhite( | 
| DCHECK(strcmp(Marking::kGreyBitPattern, "11") == 0); | 
| DCHECK(strcmp(Marking::kImpossibleBitPattern, "01") == 0); | 
|  | 
| -  Label done; | 
| - | 
| // Since both black and grey have a 1 in the first position and white does | 
| // not have a 1 there we only need to check one bit. | 
| ldr(load_scratch, MemOperand(bitmap_scratch, MemoryChunk::kHeaderSize)); | 
| tst(mask_scratch, load_scratch); | 
| -  b(ne, &done); | 
| - | 
| -  if (emit_debug_code()) { | 
| -    // Check for impossible bit pattern. | 
| -    Label ok; | 
| -    // LSL may overflow, making the check conservative. | 
| -    tst(load_scratch, Operand(mask_scratch, LSL, 1)); | 
| -    b(eq, &ok); | 
| -    stop("Impossible marking bit pattern"); | 
| -    bind(&ok); | 
| -  } | 
| - | 
| -  // Value is white.  We check whether it is data that doesn't need scanning. | 
| -  // Currently only checks for HeapNumber and non-cons strings. | 
| -  Register map = load_scratch;  // Holds map while checking type. | 
| -  Register length = load_scratch;  // Holds length of object after testing type. | 
| -  Label is_data_object; | 
| - | 
| -  // Check for heap-number | 
| -  ldr(map, FieldMemOperand(value, HeapObject::kMapOffset)); | 
| -  CompareRoot(map, Heap::kHeapNumberMapRootIndex); | 
| -  mov(length, Operand(HeapNumber::kSize), LeaveCC, eq); | 
| -  b(eq, &is_data_object); | 
| - | 
| -  // Check for strings. | 
| -  DCHECK(kIsIndirectStringTag == 1 && kIsIndirectStringMask == 1); | 
| -  DCHECK(kNotStringTag == 0x80 && kIsNotStringMask == 0x80); | 
| -  // If it's a string and it's not a cons string then it's an object containing | 
| -  // no GC pointers. | 
| -  Register instance_type = load_scratch; | 
| -  ldrb(instance_type, FieldMemOperand(map, Map::kInstanceTypeOffset)); | 
| -  tst(instance_type, Operand(kIsIndirectStringMask | kIsNotStringMask)); | 
| -  b(ne, value_is_white_and_not_data); | 
| -  // It's a non-indirect (non-cons and non-slice) string. | 
| -  // If it's external, the length is just ExternalString::kSize. | 
| -  // Otherwise it's String::kHeaderSize + string->length() * (1 or 2). | 
| -  // External strings are the only ones with the kExternalStringTag bit | 
| -  // set. | 
| -  DCHECK_EQ(0, kSeqStringTag & kExternalStringTag); | 
| -  DCHECK_EQ(0, kConsStringTag & kExternalStringTag); | 
| -  tst(instance_type, Operand(kExternalStringTag)); | 
| -  mov(length, Operand(ExternalString::kSize), LeaveCC, ne); | 
| -  b(ne, &is_data_object); | 
| - | 
| -  // Sequential string, either Latin1 or UC16. | 
| -  // For Latin1 (char-size of 1) we shift the smi tag away to get the length. | 
| -  // For UC16 (char-size of 2) we just leave the smi tag in place, thereby | 
| -  // getting the length multiplied by 2. | 
| -  DCHECK(kOneByteStringTag == 4 && kStringEncodingMask == 4); | 
| -  DCHECK(kSmiTag == 0 && kSmiTagSize == 1); | 
| -  ldr(ip, FieldMemOperand(value, String::kLengthOffset)); | 
| -  tst(instance_type, Operand(kStringEncodingMask)); | 
| -  mov(ip, Operand(ip, LSR, 1), LeaveCC, ne); | 
| -  add(length, ip, Operand(SeqString::kHeaderSize + kObjectAlignmentMask)); | 
| -  and_(length, length, Operand(~kObjectAlignmentMask)); | 
| - | 
| -  bind(&is_data_object); | 
| -  // Value is a data object, and it is white.  Mark it black.  Since we know | 
| -  // that the object is white we can make it black by flipping one bit. | 
| -  ldr(ip, MemOperand(bitmap_scratch, MemoryChunk::kHeaderSize)); | 
| -  orr(ip, ip, Operand(mask_scratch)); | 
| -  str(ip, MemOperand(bitmap_scratch, MemoryChunk::kHeaderSize)); | 
| - | 
| -  and_(bitmap_scratch, bitmap_scratch, Operand(~Page::kPageAlignmentMask)); | 
| -  ldr(ip, MemOperand(bitmap_scratch, MemoryChunk::kLiveBytesOffset)); | 
| -  add(ip, ip, Operand(length)); | 
| -  str(ip, MemOperand(bitmap_scratch, MemoryChunk::kLiveBytesOffset)); | 
| - | 
| -  bind(&done); | 
| +  b(eq, value_is_white); | 
| } | 
|  | 
|  | 
|  |