Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(170)

Side by Side Diff: src/arm/macro-assembler-arm.cc

Issue 7104107: Incremental mode now works for x64. The only difference (Closed) Base URL: http://v8.googlecode.com/svn/branches/experimental/gc/
Patch Set: Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698