WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
The patch
59903.patch (text/plain), 13.92 KB, created by
Gavin Barraclough
on 2011-05-01 17:49:27 PDT
(
hide
)
Description:
The patch
Filename:
MIME Type:
Creator:
Gavin Barraclough
Created:
2011-05-01 17:49:27 PDT
Size:
13.92 KB
patch
obsolete
>Index: Source/JavaScriptCore/ChangeLog >=================================================================== >--- Source/JavaScriptCore/ChangeLog (revision 85445) >+++ Source/JavaScriptCore/ChangeLog (working copy) >@@ -1,3 +1,47 @@ >+2011-05-01 Gavin Barraclough <barraclough@apple.com> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ https://bugs.webkit.org/show_bug.cgi?id=59903 >+ Use AssemblerLabel throughout Assembler classes, AssemblerBuffer >+ >+ Creating a lable() into the AssemblerBuffer should return an AssemblerLabel, >+ not an unsigned int. >+ >+ * assembler/ARMAssembler.cpp: >+ (JSC::ARMAssembler::executableCopy): >+ * assembler/ARMAssembler.h: >+ (JSC::ARMAssembler::blx): >+ (JSC::ARMAssembler::label): >+ (JSC::ARMAssembler::loadBranchTarget): >+ * assembler/ARMv7Assembler.h: >+ (JSC::ARMv7Assembler::b): >+ (JSC::ARMv7Assembler::blx): >+ (JSC::ARMv7Assembler::bx): >+ (JSC::ARMv7Assembler::label): >+ (JSC::ARMv7Assembler::ARMInstructionFormatter::label): >+ * assembler/AssemblerBuffer.h: >+ (JSC::AssemblerBuffer::label): >+ * assembler/AssemblerBufferWithConstantPool.h: >+ * assembler/MIPSAssembler.h: >+ (JSC::MIPSAssembler::label): >+ (JSC::MIPSAssembler::relocateJumps): >+ * assembler/SH4Assembler.h: >+ (JSC::SH4Assembler::loadConstant): >+ (JSC::SH4Assembler::loadConstantUnReusable): >+ (JSC::SH4Assembler::call): >+ (JSC::SH4Assembler::jmp): >+ (JSC::SH4Assembler::jne): >+ (JSC::SH4Assembler::je): >+ (JSC::SH4Assembler::label): >+ (JSC::SH4Assembler::oneShortOp): >+ * assembler/X86Assembler.h: >+ (JSC::X86Assembler::call): >+ (JSC::X86Assembler::jmp_r): >+ (JSC::X86Assembler::label): >+ (JSC::X86Assembler::X86InstructionFormatter::immediateRel32): >+ (JSC::X86Assembler::X86InstructionFormatter::label): >+ > 2011-05-01 Adam Barth <abarth@webkit.org> > > Reviewed by David Levin. >Index: Source/JavaScriptCore/assembler/ARMAssembler.cpp >=================================================================== >--- Source/JavaScriptCore/assembler/ARMAssembler.cpp (revision 85431) >+++ Source/JavaScriptCore/assembler/ARMAssembler.cpp (working copy) >@@ -347,18 +347,18 @@ void* ARMAssembler::executableCopy(Execu > { > // 64-bit alignment is required for next constant pool and JIT code as well > m_buffer.flushWithoutBarrier(true); >- if (m_buffer.label() & 0x7) >+ if (m_buffer.codeSize() & 0x7) > bkpt(0); > > char* data = reinterpret_cast<char*>(m_buffer.executableCopy(allocator)); > > for (Jumps::Iterator iter = m_jumps.begin(); iter != m_jumps.end(); ++iter) { > // The last bit is set if the constant must be placed on constant pool. >- int pos = (*iter) & (~0x1); >+ int pos = (iter->m_offset) & (~0x1); > ARMWord* ldrAddr = reinterpret_cast_ptr<ARMWord*>(data + pos); > ARMWord* addr = getLdrImmAddress(ldrAddr); > if (*addr != InvalidBranchTarget) { >- if (!(*iter & 1)) { >+ if (!(iter->m_offset & 1)) { > int diff = reinterpret_cast_ptr<ARMWord*>(data + *addr) - (ldrAddr + DefaultPrefetching); > > if ((diff <= BOFFSET_MAX && diff >= BOFFSET_MIN)) { >Index: Source/JavaScriptCore/assembler/ARMAssembler.h >=================================================================== >--- Source/JavaScriptCore/assembler/ARMAssembler.h (revision 85432) >+++ Source/JavaScriptCore/assembler/ARMAssembler.h (working copy) >@@ -97,7 +97,7 @@ namespace JSC { > typedef ARMRegisters::RegisterID RegisterID; > typedef ARMRegisters::FPRegisterID FPRegisterID; > typedef AssemblerBufferWithConstantPool<2048, 4, 4, ARMAssembler> ARMBuffer; >- typedef SegmentedVector<int, 64> Jumps; >+ typedef SegmentedVector<AssemblerLabel, 64> Jumps; > > ARMAssembler() { } > >@@ -591,7 +591,7 @@ namespace JSC { > mov_r(ARMRegisters::lr, ARMRegisters::pc, cc); > bx(rm, cc); > #endif >- return AssemblerLabel(m_buffer.label()); >+ return m_buffer.label(); > } > > static ARMWord lsl(int reg, ARMWord value) >@@ -656,7 +656,7 @@ namespace JSC { > AssemblerLabel label() > { > m_buffer.ensureSpaceForAnyOneInstruction(); >- return AssemblerLabel(m_buffer.label()); >+ return m_buffer.label(); > } > > AssemblerLabel align(int alignment) >@@ -672,7 +672,7 @@ namespace JSC { > ensureSpace(sizeof(ARMWord), sizeof(ARMWord)); > m_jumps.append(m_buffer.label() | (useConstantPool & 0x1)); > ldr_un_imm(rd, InvalidBranchTarget, cc); >- return AssemblerLabel(m_buffer.label()); >+ return m_buffer.label(); > } > > AssemblerLabel jmp(Condition cc = AL, int useConstantPool = 0) >Index: Source/JavaScriptCore/assembler/ARMv7Assembler.h >=================================================================== >--- Source/JavaScriptCore/assembler/ARMv7Assembler.h (revision 85432) >+++ Source/JavaScriptCore/assembler/ARMv7Assembler.h (working copy) >@@ -826,7 +826,7 @@ public: > AssemblerLabel b() > { > m_formatter.twoWordOp16Op16(OP_B_T4a, OP_B_T4b); >- return AssemblerLabel(m_formatter.label()); >+ return m_formatter.label(); > } > > // Only allowed in IT (if then) block if last instruction. >@@ -834,14 +834,14 @@ public: > { > ASSERT(rm != ARMRegisters::pc); > m_formatter.oneWordOp8RegReg143(OP_BLX, rm, (RegisterID)8); >- return AssemblerLabel(m_formatter.label()); >+ return m_formatter.label(); > } > > // Only allowed in IT (if then) block if last instruction. > AssemblerLabel bx(RegisterID rm) > { > m_formatter.oneWordOp8RegReg143(OP_BX, rm, (RegisterID)0); >- return AssemblerLabel(m_formatter.label()); >+ return m_formatter.label(); > } > > void bkpt(uint8_t imm=0) >@@ -1528,7 +1528,7 @@ public: > > AssemblerLabel label() > { >- return AssemblerLabel(m_formatter.label()); >+ return m_formatter.label(); > } > > AssemblerLabel align(int alignment) >@@ -2199,6 +2199,7 @@ private: > // Administrative methods: > > size_t codeSize() const { return m_buffer.codeSize(); } >+ AssemblerLabel label() const { return m_buffer.label(); } > bool isAligned(int alignment) const { return m_buffer.isAligned(alignment); } > void* data() const { return m_buffer.data(); } > >Index: Source/JavaScriptCore/assembler/AssemblerBuffer.h >=================================================================== >--- Source/JavaScriptCore/assembler/AssemblerBuffer.h (revision 85432) >+++ Source/JavaScriptCore/assembler/AssemblerBuffer.h (working copy) >@@ -150,9 +150,9 @@ namespace JSC { > return m_size; > } > >- unsigned label() const >+ AssemblerLabel label() const > { >- return m_size; >+ return AssemblerLabel(m_size); > } > > void* executableCopy(ExecutablePool* allocator) >Index: Source/JavaScriptCore/assembler/AssemblerBufferWithConstantPool.h >=================================================================== >--- Source/JavaScriptCore/assembler/AssemblerBufferWithConstantPool.h (revision 85431) >+++ Source/JavaScriptCore/assembler/AssemblerBufferWithConstantPool.h (working copy) >@@ -254,7 +254,7 @@ private: > m_maxDistance = maxPoolSize; > flushIfNoSpaceFor(sizeof(IntegralType), 4); > >- m_loadOffsets.append(label()); >+ m_loadOffsets.append(codeSize()); > if (isReusable) { > for (int i = 0; i < m_numConsts; ++i) { > if (m_mask[i] == ReusableConst && m_pool[i] == constant) { >@@ -296,7 +296,7 @@ private: > AssemblerBuffer::putInt(AssemblerType::padForAlign32); > } > >- int constPoolOffset = label(); >+ int constPoolOffset = codeSize(); > append(reinterpret_cast<char*>(m_pool), m_numConsts * sizeof(uint32_t)); > > // Patch each PC relative load >Index: Source/JavaScriptCore/assembler/MIPSAssembler.h >=================================================================== >--- Source/JavaScriptCore/assembler/MIPSAssembler.h (revision 85432) >+++ Source/JavaScriptCore/assembler/MIPSAssembler.h (working copy) >@@ -148,7 +148,7 @@ class MIPSAssembler { > public: > typedef MIPSRegisters::RegisterID RegisterID; > typedef MIPSRegisters::FPRegisterID FPRegisterID; >- typedef SegmentedVector<int, 64> Jumps; >+ typedef SegmentedVector<AssemblerLabel, 64> Jumps; > > MIPSAssembler() > { >@@ -617,7 +617,7 @@ public: > > AssemblerLabel label() > { >- return AssemblerLabel(m_buffer.label()); >+ return m_buffer.label(); > } > > AssemblerLabel align(int alignment) >@@ -757,7 +757,7 @@ private: > { > // Check each jump > for (Jumps::Iterator iter = m_jumps.begin(); iter != m_jumps.end(); ++iter) { >- int pos = *iter; >+ int pos = iter->m_offset; > MIPSWord* insn = reinterpret_cast<MIPSWord*>(reinterpret_cast<intptr_t>(newBase) + pos); > insn = insn + 2; > // Need to make sure we have 5 valid instructions after pos >Index: Source/JavaScriptCore/assembler/SH4Assembler.h >=================================================================== >--- Source/JavaScriptCore/assembler/SH4Assembler.h (revision 85432) >+++ Source/JavaScriptCore/assembler/SH4Assembler.h (working copy) >@@ -1125,7 +1125,7 @@ public: > uint16_t opc = getOpcodeGroup3(MOVIMM_OPCODE, dst, 0); > > m_buffer.ensureSpace(maxInstructionSize, sizeof(uint32_t)); >- printInstr(getOpcodeGroup3(MOVIMM_OPCODE, dst, constant), m_buffer.label()); >+ printInstr(getOpcodeGroup3(MOVIMM_OPCODE, dst, constant), m_buffer.codeSize()); > m_buffer.putShortWithConstantInt(opc, constant, true); > } > >@@ -1136,7 +1136,7 @@ public: > if (ensureSpace) > m_buffer.ensureSpace(maxInstructionSize, sizeof(uint32_t)); > >- printInstr(getOpcodeGroup3(MOVIMM_OPCODE, dst, constant), m_buffer.label()); >+ printInstr(getOpcodeGroup3(MOVIMM_OPCODE, dst, constant), m_buffer.codeSize()); > m_buffer.putShortWithConstantInt(opc, constant); > } > >@@ -1150,7 +1150,7 @@ public: > branch(JSR_OPCODE, scr); > nop(); > releaseScratch(scr); >- return AssemblerLabel(m_buffer.label()); >+ return m_buffer.label(); > } > > AssemblerLabel call(RegisterID dst) >@@ -1158,25 +1158,25 @@ public: > m_buffer.ensureSpace(maxInstructionSize + 2); > branch(JSR_OPCODE, dst); > nop(); >- return AssemblerLabel(m_buffer.label()); >+ return m_buffer.label(); > } > > AssemblerLabel jmp() > { > RegisterID scr = claimScratch(); > m_buffer.ensureSpace(maxInstructionSize + 4, sizeof(uint32_t)); >- int m_size = m_buffer.label(); >+ AssemblerLabel label = m_buffer.label(); > loadConstantUnReusable(0x0, scr); > branch(BRAF_OPCODE, scr); > nop(); > releaseScratch(scr); >- return AssemblerLabel(m_size); >+ return label; > } > > AssemblerLabel jmp(RegisterID dst) > { > jmpReg(dst); >- return AssemblerLabel(m_buffer.label()); >+ return m_buffer.label(); > } > > void jmpReg(RegisterID dst) >@@ -1188,16 +1188,16 @@ public: > > AssemblerLabel jne() > { >- int m_size = m_buffer.label(); >+ AssemblerLabel label = m_buffer.label(); > branch(BF_OPCODE, 0); >- return AssemblerLabel(m_size); >+ return label; > } > > AssemblerLabel je() > { >- int m_size = m_buffer.label(); >+ AssemblerLabel label = m_buffer.label(); > branch(BT_OPCODE, 0); >- return AssemblerLabel(m_size); >+ return label; > } > > void ret() >@@ -1209,7 +1209,7 @@ public: > AssemblerLabel label() > { > m_buffer.ensureSpaceForAnyOneInstruction(); >- return AssemblerLabel(m_buffer.label()); >+ return m_buffer.label(); > } > > int sizeOfConstantPool() >@@ -1481,7 +1481,7 @@ public: > > void oneShortOp(uint16_t opcode, bool checksize = true, bool isDouble = true) > { >- printInstr(opcode, m_buffer.label(), isDouble); >+ printInstr(opcode, m_buffer.codeSize(), isDouble); > if (checksize) > m_buffer.ensureSpace(maxInstructionSize); > m_buffer.putShortUnchecked(opcode); >Index: Source/JavaScriptCore/assembler/X86Assembler.h >=================================================================== >--- Source/JavaScriptCore/assembler/X86Assembler.h (revision 85432) >+++ Source/JavaScriptCore/assembler/X86Assembler.h (working copy) >@@ -1177,7 +1177,7 @@ public: > AssemblerLabel call(RegisterID dst) > { > m_formatter.oneByteOp(OP_GROUP5_Ev, GROUP5_OP_CALLN, dst); >- return AssemblerLabel(m_formatter.label()); >+ return m_formatter.label(); > } > > void call_m(int offset, RegisterID base) >@@ -1197,7 +1197,7 @@ public: > AssemblerLabel jmp_r(RegisterID dst) > { > m_formatter.oneByteOp(OP_GROUP5_Ev, GROUP5_OP_JMPN, dst); >- return AssemblerLabel(m_formatter.label()); >+ return m_formatter.label(); > } > > void jmp_m(int offset, RegisterID base) >@@ -1478,7 +1478,7 @@ public: > > AssemblerLabel label() > { >- return AssemblerLabel(m_formatter.label()); >+ return m_formatter.label(); > } > > static AssemblerLabel labelFor(AssemblerLabel jump, intptr_t offset = 0) >@@ -1870,13 +1870,13 @@ private: > AssemblerLabel immediateRel32() > { > m_buffer.putIntUnchecked(0); >- return AssemblerLabel(label()); >+ return label(); > } > > // Administrative methods: > > size_t codeSize() const { return m_buffer.codeSize(); } >- size_t label() const { return m_buffer.label(); } >+ AssemblerLabel label() const { return m_buffer.label(); } > bool isAligned(int alignment) const { return m_buffer.isAligned(alignment); } > void* data() const { return m_buffer.data(); } >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
sam
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 59903
: 91861