Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 3148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3159 jmp(&other_color); | 3159 jmp(&other_color); |
| 3160 | 3160 |
| 3161 bind(&word_boundary); | 3161 bind(&word_boundary); |
| 3162 ldr(ip, MemOperand(bitmap_scratch, MemoryChunk::kHeaderSize + kPointerSize)); | 3162 ldr(ip, MemOperand(bitmap_scratch, MemoryChunk::kHeaderSize + kPointerSize)); |
| 3163 tst(ip, Operand(1)); | 3163 tst(ip, Operand(1)); |
| 3164 b(second_bit == 1 ? ne : eq, has_color); | 3164 b(second_bit == 1 ? ne : eq, has_color); |
| 3165 bind(&other_color); | 3165 bind(&other_color); |
| 3166 } | 3166 } |
| 3167 | 3167 |
| 3168 | 3168 |
| 3169 void MacroAssembler::IsDataObject(Register value, | |
|
Lasse Reichstein
2011/06/10 13:55:44
JumpIfNotDataObject
Erik Corry
2011/06/10 21:57:29
Done.
| |
| 3170 Register scratch, | |
| 3171 Label* not_data_object) { | |
|
Lasse Reichstein
2011/06/10 13:55:44
Should it have a distance too?
Erik Corry
2011/06/10 21:57:29
No, ARM has fixed width instructions.
| |
| 3172 Label is_data_object; | |
| 3173 ldr(scratch, FieldMemOperand(value, HeapObject::kMapOffset)); | |
| 3174 CompareRoot(scratch, Heap::kHeapNumberMapRootIndex); | |
| 3175 b(eq, &is_data_object); | |
| 3176 ASSERT(kConsStringTag == 1 && kIsConsStringMask == 1); | |
| 3177 ASSERT(kNotStringTag == 0x80 && kIsNotStringMask == 0x80); | |
| 3178 // If it's a string and it's not a cons string then it's an object that | |
| 3179 // doesn't need scanning. | |
| 3180 ldrb(scratch, FieldMemOperand(scratch, Map::kInstanceTypeOffset)); | |
| 3181 tst(scratch, Operand(kIsConsStringMask | kIsNotStringMask)); | |
| 3182 // Jump if we need to mark it grey and push it. | |
|
Lasse Reichstein
2011/06/10 13:55:44
Comment not related to function name or descriptio
Erik Corry
2011/06/10 21:57:29
Deleted.
| |
| 3183 b(ne, not_data_object); | |
| 3184 bind(&is_data_object); | |
|
Lasse Reichstein
2011/06/10 13:55:44
This detects only HeapNumber and non-cons String.
Erik Corry
2011/06/10 21:57:29
Done.
| |
| 3185 } | |
| 3186 | |
| 3187 | |
| 3169 void MacroAssembler::GetMarkBits(Register addr_reg, | 3188 void MacroAssembler::GetMarkBits(Register addr_reg, |
| 3170 Register bitmap_reg, | 3189 Register bitmap_reg, |
| 3171 Register mask_reg) { | 3190 Register mask_reg) { |
| 3172 ASSERT(!AreAliased(addr_reg, bitmap_reg, mask_reg, no_reg)); | 3191 ASSERT(!AreAliased(addr_reg, bitmap_reg, mask_reg, no_reg)); |
| 3173 and_(bitmap_reg, addr_reg, Operand(~Page::kPageAlignmentMask)); | 3192 and_(bitmap_reg, addr_reg, Operand(~Page::kPageAlignmentMask)); |
| 3174 Ubfx(mask_reg, addr_reg, kPointerSizeLog2, Bitmap::kBitsPerCellLog2); | 3193 Ubfx(mask_reg, addr_reg, kPointerSizeLog2, Bitmap::kBitsPerCellLog2); |
| 3175 const int kLowBits = kPointerSizeLog2 + Bitmap::kBitsPerCellLog2; | 3194 const int kLowBits = kPointerSizeLog2 + Bitmap::kBitsPerCellLog2; |
| 3176 Ubfx(ip, addr_reg, kLowBits, kPageSizeBits - kLowBits); | 3195 Ubfx(ip, addr_reg, kLowBits, kPageSizeBits - kLowBits); |
| 3177 add(bitmap_reg, bitmap_reg, Operand(ip, LSL, kPointerSizeLog2)); | 3196 add(bitmap_reg, bitmap_reg, Operand(ip, LSL, kPointerSizeLog2)); |
| 3178 mov(ip, Operand(1)); | 3197 mov(ip, Operand(1)); |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3275 void CodePatcher::EmitCondition(Condition cond) { | 3294 void CodePatcher::EmitCondition(Condition cond) { |
| 3276 Instr instr = Assembler::instr_at(masm_.pc_); | 3295 Instr instr = Assembler::instr_at(masm_.pc_); |
| 3277 instr = (instr & ~kCondMask) | cond; | 3296 instr = (instr & ~kCondMask) | cond; |
| 3278 masm_.emit(instr); | 3297 masm_.emit(instr); |
| 3279 } | 3298 } |
| 3280 | 3299 |
| 3281 | 3300 |
| 3282 } } // namespace v8::internal | 3301 } } // namespace v8::internal |
| 3283 | 3302 |
| 3284 #endif // V8_TARGET_ARCH_ARM | 3303 #endif // V8_TARGET_ARCH_ARM |
| OLD | NEW |