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

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

Issue 11416133: Moved buffer handling to AssemblerBase. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebased Created 8 years, 1 month 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
« no previous file with comments | « src/arm/assembler-arm.h ('k') | src/assembler.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions 5 // modification, are permitted provided that the following conditions
6 // are met: 6 // are met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
311 al | B26 | Offset | kRegister_fp_Code * B16; 311 al | B26 | Offset | kRegister_fp_Code * B16;
312 const Instr kLdrRegFpNegOffsetPattern = 312 const Instr kLdrRegFpNegOffsetPattern =
313 al | B26 | L | NegOffset | kRegister_fp_Code * B16; 313 al | B26 | L | NegOffset | kRegister_fp_Code * B16;
314 const Instr kStrRegFpNegOffsetPattern = 314 const Instr kStrRegFpNegOffsetPattern =
315 al | B26 | NegOffset | kRegister_fp_Code * B16; 315 al | B26 | NegOffset | kRegister_fp_Code * B16;
316 const Instr kLdrStrInstrTypeMask = 0xffff0000; 316 const Instr kLdrStrInstrTypeMask = 0xffff0000;
317 const Instr kLdrStrInstrArgumentMask = 0x0000ffff; 317 const Instr kLdrStrInstrArgumentMask = 0x0000ffff;
318 const Instr kLdrStrOffsetMask = 0x00000fff; 318 const Instr kLdrStrOffsetMask = 0x00000fff;
319 319
320 320
321 // Spare buffer. 321 Assembler::Assembler(Isolate* isolate, void* buffer, int buffer_size)
322 static const int kMinimalBufferSize = 4*KB; 322 : AssemblerBase(isolate, buffer, buffer_size),
323
324
325 Assembler::Assembler(Isolate* arg_isolate, void* buffer, int buffer_size)
326 : AssemblerBase(arg_isolate),
327 recorded_ast_id_(TypeFeedbackId::None()), 323 recorded_ast_id_(TypeFeedbackId::None()),
328 positions_recorder_(this) { 324 positions_recorder_(this) {
329 if (buffer == NULL) { 325 reloc_info_writer.Reposition(buffer_ + buffer_size_, pc_);
330 // Do our own buffer management.
331 if (buffer_size <= kMinimalBufferSize) {
332 buffer_size = kMinimalBufferSize;
333
334 if (isolate()->assembler_spare_buffer() != NULL) {
335 buffer = isolate()->assembler_spare_buffer();
336 isolate()->set_assembler_spare_buffer(NULL);
337 }
338 }
339 if (buffer == NULL) {
340 buffer_ = NewArray<byte>(buffer_size);
341 } else {
342 buffer_ = static_cast<byte*>(buffer);
343 }
344 buffer_size_ = buffer_size;
345 own_buffer_ = true;
346
347 } else {
348 // Use externally provided buffer instead.
349 ASSERT(buffer_size > 0);
350 buffer_ = static_cast<byte*>(buffer);
351 buffer_size_ = buffer_size;
352 own_buffer_ = false;
353 }
354
355 // Set up buffer pointers.
356 ASSERT(buffer_ != NULL);
357 pc_ = buffer_;
358 reloc_info_writer.Reposition(buffer_ + buffer_size, pc_);
359 num_pending_reloc_info_ = 0; 326 num_pending_reloc_info_ = 0;
360 next_buffer_check_ = 0; 327 next_buffer_check_ = 0;
361 const_pool_blocked_nesting_ = 0; 328 const_pool_blocked_nesting_ = 0;
362 no_const_pool_before_ = 0; 329 no_const_pool_before_ = 0;
363 first_const_pool_use_ = -1; 330 first_const_pool_use_ = -1;
364 last_bound_pos_ = 0; 331 last_bound_pos_ = 0;
365 ClearRecordedAstId(); 332 ClearRecordedAstId();
366 } 333 }
367 334
368 335
369 Assembler::~Assembler() { 336 Assembler::~Assembler() {
370 ASSERT(const_pool_blocked_nesting_ == 0); 337 ASSERT(const_pool_blocked_nesting_ == 0);
371 if (own_buffer_) {
372 if (isolate()->assembler_spare_buffer() == NULL &&
373 buffer_size_ == kMinimalBufferSize) {
374 isolate()->set_assembler_spare_buffer(buffer_);
375 } else {
376 DeleteArray(buffer_);
377 }
378 }
379 } 338 }
380 339
381 340
382 void Assembler::GetCode(CodeDesc* desc) { 341 void Assembler::GetCode(CodeDesc* desc) {
383 // Emit constant pool if necessary. 342 // Emit constant pool if necessary.
384 CheckConstPool(true, false); 343 CheckConstPool(true, false);
385 ASSERT(num_pending_reloc_info_ == 0); 344 ASSERT(num_pending_reloc_info_ == 0);
386 345
387 // Set up code descriptor. 346 // Set up code descriptor.
388 desc->buffer = buffer_; 347 desc->buffer = buffer_;
(...skipping 2395 matching lines...) Expand 10 before | Expand all | Expand 10 after
2784 2743
2785 // Since a constant pool was just emitted, move the check offset forward by 2744 // Since a constant pool was just emitted, move the check offset forward by
2786 // the standard interval. 2745 // the standard interval.
2787 next_buffer_check_ = pc_offset() + kCheckPoolInterval; 2746 next_buffer_check_ = pc_offset() + kCheckPoolInterval;
2788 } 2747 }
2789 2748
2790 2749
2791 } } // namespace v8::internal 2750 } } // namespace v8::internal
2792 2751
2793 #endif // V8_TARGET_ARCH_ARM 2752 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/assembler-arm.h ('k') | src/assembler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698