Index: src/arm/assembler-arm.cc |
diff --git a/src/arm/assembler-arm.cc b/src/arm/assembler-arm.cc |
index ebbd9b1138a5182578d190d1d6ac430fe3940357..d32547ce69a967269b09336592814a945ec07db2 100644 |
--- a/src/arm/assembler-arm.cc |
+++ b/src/arm/assembler-arm.cc |
@@ -317,7 +317,8 @@ static const Instr kLdrStrOffsetMask = 0x00000fff; |
static const int kMinimalBufferSize = 4*KB; |
static byte* spare_buffer_ = NULL; |
-Assembler::Assembler(void* buffer, int buffer_size) { |
+Assembler::Assembler(void* buffer, int buffer_size) |
+ : positions_recorder_(this) { |
if (buffer == NULL) { |
// Do our own buffer management. |
if (buffer_size <= kMinimalBufferSize) { |
@@ -354,10 +355,6 @@ Assembler::Assembler(void* buffer, int buffer_size) { |
no_const_pool_before_ = 0; |
last_const_pool_end_ = 0; |
last_bound_pos_ = 0; |
- current_statement_position_ = RelocInfo::kNoPosition; |
- current_position_ = RelocInfo::kNoPosition; |
- written_statement_position_ = current_statement_position_; |
- written_position_ = current_position_; |
} |
@@ -999,7 +996,7 @@ void Assembler::bl(int branch_offset, Condition cond) { |
void Assembler::blx(int branch_offset) { // v5 and above |
- WriteRecordedPositions(); |
+ positions_recorder()->WriteRecordedPositions(); |
Søren Thygesen Gjesse
2010/11/04 15:08:24
Why not just positions_recorder_. instead of posit
|
ASSERT((branch_offset & 1) == 0); |
int h = ((branch_offset & 2) >> 1)*B24; |
int imm24 = branch_offset >> 2; |
@@ -1009,14 +1006,14 @@ void Assembler::blx(int branch_offset) { // v5 and above |
void Assembler::blx(Register target, Condition cond) { // v5 and above |
- WriteRecordedPositions(); |
+ positions_recorder()->WriteRecordedPositions(); |
ASSERT(!target.is(pc)); |
emit(cond | B24 | B21 | 15*B16 | 15*B12 | 15*B8 | 3*B4 | target.code()); |
} |
void Assembler::bx(Register target, Condition cond) { // v5 and above, plus v4t |
- WriteRecordedPositions(); |
+ positions_recorder()->WriteRecordedPositions(); |
ASSERT(!target.is(pc)); // use of pc is actually allowed, but discouraged |
emit(cond | B24 | B21 | 15*B16 | 15*B12 | 15*B8 | B4 | target.code()); |
} |
@@ -1114,7 +1111,7 @@ void Assembler::orr(Register dst, Register src1, const Operand& src2, |
void Assembler::mov(Register dst, const Operand& src, SBit s, Condition cond) { |
if (dst.is(pc)) { |
- WriteRecordedPositions(); |
+ positions_recorder()->WriteRecordedPositions(); |
} |
// Don't allow nop instructions in the form mov rn, rn to be generated using |
// the mov instruction. They must be generated using nop(int) |
@@ -1359,7 +1356,7 @@ void Assembler::msr(SRegisterFieldMask fields, const Operand& src, |
// Load/Store instructions. |
void Assembler::ldr(Register dst, const MemOperand& src, Condition cond) { |
if (dst.is(pc)) { |
- WriteRecordedPositions(); |
+ positions_recorder()->WriteRecordedPositions(); |
} |
addrmod2(cond | B26 | L, dst, src); |
@@ -2377,14 +2374,14 @@ void Assembler::BlockConstPoolFor(int instructions) { |
// Debugging. |
void Assembler::RecordJSReturn() { |
- WriteRecordedPositions(); |
+ positions_recorder()->WriteRecordedPositions(); |
CheckBuffer(); |
RecordRelocInfo(RelocInfo::JS_RETURN); |
} |
void Assembler::RecordDebugBreakSlot() { |
- WriteRecordedPositions(); |
+ positions_recorder()->WriteRecordedPositions(); |
CheckBuffer(); |
RecordRelocInfo(RelocInfo::DEBUG_BREAK_SLOT); |
} |
@@ -2398,47 +2395,6 @@ void Assembler::RecordComment(const char* msg) { |
} |
-void Assembler::RecordPosition(int pos) { |
- if (pos == RelocInfo::kNoPosition) return; |
- ASSERT(pos >= 0); |
- current_position_ = pos; |
-} |
- |
- |
-void Assembler::RecordStatementPosition(int pos) { |
- if (pos == RelocInfo::kNoPosition) return; |
- ASSERT(pos >= 0); |
- current_statement_position_ = pos; |
-} |
- |
- |
-bool Assembler::WriteRecordedPositions() { |
- bool written = false; |
- |
- // Write the statement position if it is different from what was written last |
- // time. |
- if (current_statement_position_ != written_statement_position_) { |
- CheckBuffer(); |
- RecordRelocInfo(RelocInfo::STATEMENT_POSITION, current_statement_position_); |
- written_statement_position_ = current_statement_position_; |
- written = true; |
- } |
- |
- // Write the position if it is different from what was written last time and |
- // also different from the written statement position. |
- if (current_position_ != written_position_ && |
- current_position_ != written_statement_position_) { |
- CheckBuffer(); |
- RecordRelocInfo(RelocInfo::POSITION, current_position_); |
- written_position_ = current_position_; |
- written = true; |
- } |
- |
- // Return whether something was written. |
- return written; |
-} |
- |
- |
void Assembler::GrowBuffer() { |
if (!own_buffer_) FATAL("external code buffer is too small"); |