diff --git a/js/src/jit/arm/Assembler-arm.cpp b/js/src/jit/arm/Assembler-arm.cpp index cc55328fb713..26d7b00d5a22 100644 --- a/js/src/jit/arm/Assembler-arm.cpp +++ b/js/src/jit/arm/Assembler-arm.cpp @@ -631,21 +631,6 @@ Assembler::finish() flush(); MOZ_ASSERT(!isFinished); isFinished = true; - - for (unsigned int i = 0; i < tmpDataRelocations_.length(); i++) { - size_t offset = tmpDataRelocations_[i].getOffset(); - dataRelocations_.writeUnsigned(offset); - } - - for (unsigned int i = 0; i < tmpJumpRelocations_.length(); i++) { - size_t offset = tmpJumpRelocations_[i].getOffset(); - jumpRelocations_.writeUnsigned(offset); - } - - for (unsigned int i = 0; i < tmpPreBarriers_.length(); i++) { - size_t offset = tmpPreBarriers_[i].getOffset(); - preBarriers_.writeUnsigned(offset); - } } void @@ -893,12 +878,11 @@ TraceDataRelocations(JSTracer* trc, uint8_t* buffer, CompactBufferReader& reader } static void -TraceDataRelocations(JSTracer* trc, ARMBuffer* buffer, - Vector* locs) +TraceDataRelocations(JSTracer* trc, ARMBuffer* buffer, CompactBufferReader& reader) { - for (unsigned int idx = 0; idx < locs->length(); idx++) { - BufferOffset bo = (*locs)[idx]; - ARMBuffer::AssemblerBufferInstIterator iter(bo, buffer); + while (reader.more()) { + BufferOffset offset(reader.readUnsigned()); + ARMBuffer::AssemblerBufferInstIterator iter(offset, buffer); TraceOneDataRelocation(trc, &iter); } } @@ -942,8 +926,10 @@ Assembler::trace(JSTracer* trc) } } - if (tmpDataRelocations_.length()) - ::TraceDataRelocations(trc, &m_buffer, &tmpDataRelocations_); + if (dataRelocations_.length()) { + CompactBufferReader reader(dataRelocations_); + ::TraceDataRelocations(trc, &m_buffer, reader); + } } void @@ -951,7 +937,7 @@ Assembler::processCodeLabels(uint8_t* rawCode) { for (size_t i = 0; i < codeLabels_.length(); i++) { CodeLabel label = codeLabels_[i]; - Bind(rawCode, label.dest(), rawCode + actualOffset(label.src()->offset())); + Bind(rawCode, label.dest(), rawCode + label.src()->offset()); } } @@ -973,8 +959,7 @@ void Assembler::Bind(uint8_t* rawCode, AbsoluteLabel* label, const void* address) { // See writeCodePointer comment. - uint32_t off = actualOffset(label->offset()); - *reinterpret_cast(rawCode + off) = address; + *reinterpret_cast(rawCode + label->offset()) = address; } Assembler::Condition diff --git a/js/src/jit/arm/Assembler-arm.h b/js/src/jit/arm/Assembler-arm.h index 0b460d44585e..d341ebea5b52 100644 --- a/js/src/jit/arm/Assembler-arm.h +++ b/js/src/jit/arm/Assembler-arm.h @@ -1294,9 +1294,6 @@ class Assembler : public AssemblerShared // TODO: this should actually be a pool-like object. It is currently a big // hack, and probably shouldn't exist. js::Vector jumps_; - js::Vector tmpJumpRelocations_; - js::Vector tmpDataRelocations_; - js::Vector tmpPreBarriers_; CompactBufferWriter jumpRelocations_; CompactBufferWriter dataRelocations_; @@ -1361,7 +1358,7 @@ class Assembler : public AssemblerShared // MacroAssemblers hold onto gcthings, so they are traced by the GC. void trace(JSTracer* trc); void writeRelocation(BufferOffset src) { - tmpJumpRelocations_.append(src); + jumpRelocations_.writeUnsigned(src.getOffset()); } // As opposed to x86/x64 version, the data relocation has to be executed @@ -1371,11 +1368,11 @@ class Assembler : public AssemblerShared if (gc::IsInsideNursery(ptr.value)) embedsNurseryPointers_ = true; if (ptr.value) - tmpDataRelocations_.append(nextOffset()); + dataRelocations_.writeUnsigned(nextOffset().getOffset()); } } void writePrebarrierOffset(CodeOffsetLabel label) { - tmpPreBarriers_.append(BufferOffset(label.offset())); + preBarriers_.writeUnsigned(label.offset()); } enum RelocBranchStyle {