Changeset 85448 in webkit
- Timestamp:
- May 1, 2011 6:04:17 PM (13 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r85445 r85448 1 2011-05-01 Gavin Barraclough <barraclough@apple.com> 2 3 Reviewed by Sam Weinig. 4 5 https://bugs.webkit.org/show_bug.cgi?id=59903 6 Use AssemblerLabel throughout Assembler classes, AssemblerBuffer 7 8 Creating a lable() into the AssemblerBuffer should return an AssemblerLabel, 9 not an unsigned int. 10 11 * assembler/ARMAssembler.cpp: 12 (JSC::ARMAssembler::executableCopy): 13 * assembler/ARMAssembler.h: 14 (JSC::ARMAssembler::blx): 15 (JSC::ARMAssembler::label): 16 (JSC::ARMAssembler::loadBranchTarget): 17 * assembler/ARMv7Assembler.h: 18 (JSC::ARMv7Assembler::b): 19 (JSC::ARMv7Assembler::blx): 20 (JSC::ARMv7Assembler::bx): 21 (JSC::ARMv7Assembler::label): 22 (JSC::ARMv7Assembler::ARMInstructionFormatter::label): 23 * assembler/AssemblerBuffer.h: 24 (JSC::AssemblerBuffer::label): 25 * assembler/AssemblerBufferWithConstantPool.h: 26 * assembler/MIPSAssembler.h: 27 (JSC::MIPSAssembler::label): 28 (JSC::MIPSAssembler::relocateJumps): 29 * assembler/SH4Assembler.h: 30 (JSC::SH4Assembler::loadConstant): 31 (JSC::SH4Assembler::loadConstantUnReusable): 32 (JSC::SH4Assembler::call): 33 (JSC::SH4Assembler::jmp): 34 (JSC::SH4Assembler::jne): 35 (JSC::SH4Assembler::je): 36 (JSC::SH4Assembler::label): 37 (JSC::SH4Assembler::oneShortOp): 38 * assembler/X86Assembler.h: 39 (JSC::X86Assembler::call): 40 (JSC::X86Assembler::jmp_r): 41 (JSC::X86Assembler::label): 42 (JSC::X86Assembler::X86InstructionFormatter::immediateRel32): 43 (JSC::X86Assembler::X86InstructionFormatter::label): 44 1 45 2011-05-01 Adam Barth <abarth@webkit.org> 2 46 -
trunk/Source/JavaScriptCore/assembler/ARMAssembler.cpp
r85403 r85448 348 348 // 64-bit alignment is required for next constant pool and JIT code as well 349 349 m_buffer.flushWithoutBarrier(true); 350 if (m_buffer. label() & 0x7)350 if (m_buffer.codeSize() & 0x7) 351 351 bkpt(0); 352 352 … … 355 355 for (Jumps::Iterator iter = m_jumps.begin(); iter != m_jumps.end(); ++iter) { 356 356 // The last bit is set if the constant must be placed on constant pool. 357 int pos = ( *iter) & (~0x1);357 int pos = (iter->m_offset) & (~0x1); 358 358 ARMWord* ldrAddr = reinterpret_cast_ptr<ARMWord*>(data + pos); 359 359 ARMWord* addr = getLdrImmAddress(ldrAddr); 360 360 if (*addr != InvalidBranchTarget) { 361 if (!( *iter& 1)) {361 if (!(iter->m_offset & 1)) { 362 362 int diff = reinterpret_cast_ptr<ARMWord*>(data + *addr) - (ldrAddr + DefaultPrefetching); 363 363 -
trunk/Source/JavaScriptCore/assembler/ARMAssembler.h
r85432 r85448 98 98 typedef ARMRegisters::FPRegisterID FPRegisterID; 99 99 typedef AssemblerBufferWithConstantPool<2048, 4, 4, ARMAssembler> ARMBuffer; 100 typedef SegmentedVector< int, 64> Jumps;100 typedef SegmentedVector<AssemblerLabel, 64> Jumps; 101 101 102 102 ARMAssembler() { } … … 592 592 bx(rm, cc); 593 593 #endif 594 return AssemblerLabel(m_buffer.label());594 return m_buffer.label(); 595 595 } 596 596 … … 657 657 { 658 658 m_buffer.ensureSpaceForAnyOneInstruction(); 659 return AssemblerLabel(m_buffer.label());659 return m_buffer.label(); 660 660 } 661 661 … … 673 673 m_jumps.append(m_buffer.label() | (useConstantPool & 0x1)); 674 674 ldr_un_imm(rd, InvalidBranchTarget, cc); 675 return AssemblerLabel(m_buffer.label());675 return m_buffer.label(); 676 676 } 677 677 -
trunk/Source/JavaScriptCore/assembler/ARMv7Assembler.h
r85432 r85448 827 827 { 828 828 m_formatter.twoWordOp16Op16(OP_B_T4a, OP_B_T4b); 829 return AssemblerLabel(m_formatter.label());829 return m_formatter.label(); 830 830 } 831 831 … … 835 835 ASSERT(rm != ARMRegisters::pc); 836 836 m_formatter.oneWordOp8RegReg143(OP_BLX, rm, (RegisterID)8); 837 return AssemblerLabel(m_formatter.label());837 return m_formatter.label(); 838 838 } 839 839 … … 842 842 { 843 843 m_formatter.oneWordOp8RegReg143(OP_BX, rm, (RegisterID)0); 844 return AssemblerLabel(m_formatter.label());844 return m_formatter.label(); 845 845 } 846 846 … … 1529 1529 AssemblerLabel label() 1530 1530 { 1531 return AssemblerLabel(m_formatter.label());1531 return m_formatter.label(); 1532 1532 } 1533 1533 … … 2200 2200 2201 2201 size_t codeSize() const { return m_buffer.codeSize(); } 2202 AssemblerLabel label() const { return m_buffer.label(); } 2202 2203 bool isAligned(int alignment) const { return m_buffer.isAligned(alignment); } 2203 2204 void* data() const { return m_buffer.data(); } -
trunk/Source/JavaScriptCore/assembler/AssemblerBuffer.h
r85432 r85448 151 151 } 152 152 153 unsignedlabel() const154 { 155 return m_size;153 AssemblerLabel label() const 154 { 155 return AssemblerLabel(m_size); 156 156 } 157 157 -
trunk/Source/JavaScriptCore/assembler/AssemblerBufferWithConstantPool.h
r85404 r85448 255 255 flushIfNoSpaceFor(sizeof(IntegralType), 4); 256 256 257 m_loadOffsets.append( label());257 m_loadOffsets.append(codeSize()); 258 258 if (isReusable) { 259 259 for (int i = 0; i < m_numConsts; ++i) { … … 297 297 } 298 298 299 int constPoolOffset = label();299 int constPoolOffset = codeSize(); 300 300 append(reinterpret_cast<char*>(m_pool), m_numConsts * sizeof(uint32_t)); 301 301 -
trunk/Source/JavaScriptCore/assembler/MIPSAssembler.h
r85432 r85448 149 149 typedef MIPSRegisters::RegisterID RegisterID; 150 150 typedef MIPSRegisters::FPRegisterID FPRegisterID; 151 typedef SegmentedVector< int, 64> Jumps;151 typedef SegmentedVector<AssemblerLabel, 64> Jumps; 152 152 153 153 MIPSAssembler() … … 618 618 AssemblerLabel label() 619 619 { 620 return AssemblerLabel(m_buffer.label());620 return m_buffer.label(); 621 621 } 622 622 … … 758 758 // Check each jump 759 759 for (Jumps::Iterator iter = m_jumps.begin(); iter != m_jumps.end(); ++iter) { 760 int pos = *iter;760 int pos = iter->m_offset; 761 761 MIPSWord* insn = reinterpret_cast<MIPSWord*>(reinterpret_cast<intptr_t>(newBase) + pos); 762 762 insn = insn + 2; -
trunk/Source/JavaScriptCore/assembler/SH4Assembler.h
r85432 r85448 1126 1126 1127 1127 m_buffer.ensureSpace(maxInstructionSize, sizeof(uint32_t)); 1128 printInstr(getOpcodeGroup3(MOVIMM_OPCODE, dst, constant), m_buffer. label());1128 printInstr(getOpcodeGroup3(MOVIMM_OPCODE, dst, constant), m_buffer.codeSize()); 1129 1129 m_buffer.putShortWithConstantInt(opc, constant, true); 1130 1130 } … … 1137 1137 m_buffer.ensureSpace(maxInstructionSize, sizeof(uint32_t)); 1138 1138 1139 printInstr(getOpcodeGroup3(MOVIMM_OPCODE, dst, constant), m_buffer. label());1139 printInstr(getOpcodeGroup3(MOVIMM_OPCODE, dst, constant), m_buffer.codeSize()); 1140 1140 m_buffer.putShortWithConstantInt(opc, constant); 1141 1141 } … … 1151 1151 nop(); 1152 1152 releaseScratch(scr); 1153 return AssemblerLabel(m_buffer.label());1153 return m_buffer.label(); 1154 1154 } 1155 1155 … … 1159 1159 branch(JSR_OPCODE, dst); 1160 1160 nop(); 1161 return AssemblerLabel(m_buffer.label());1161 return m_buffer.label(); 1162 1162 } 1163 1163 … … 1166 1166 RegisterID scr = claimScratch(); 1167 1167 m_buffer.ensureSpace(maxInstructionSize + 4, sizeof(uint32_t)); 1168 int m_size= m_buffer.label();1168 AssemblerLabel label = m_buffer.label(); 1169 1169 loadConstantUnReusable(0x0, scr); 1170 1170 branch(BRAF_OPCODE, scr); 1171 1171 nop(); 1172 1172 releaseScratch(scr); 1173 return AssemblerLabel(m_size);1173 return label; 1174 1174 } 1175 1175 … … 1177 1177 { 1178 1178 jmpReg(dst); 1179 return AssemblerLabel(m_buffer.label());1179 return m_buffer.label(); 1180 1180 } 1181 1181 … … 1189 1189 AssemblerLabel jne() 1190 1190 { 1191 int m_size= m_buffer.label();1191 AssemblerLabel label = m_buffer.label(); 1192 1192 branch(BF_OPCODE, 0); 1193 return AssemblerLabel(m_size);1193 return label; 1194 1194 } 1195 1195 1196 1196 AssemblerLabel je() 1197 1197 { 1198 int m_size= m_buffer.label();1198 AssemblerLabel label = m_buffer.label(); 1199 1199 branch(BT_OPCODE, 0); 1200 return AssemblerLabel(m_size);1200 return label; 1201 1201 } 1202 1202 … … 1210 1210 { 1211 1211 m_buffer.ensureSpaceForAnyOneInstruction(); 1212 return AssemblerLabel(m_buffer.label());1212 return m_buffer.label(); 1213 1213 } 1214 1214 … … 1482 1482 void oneShortOp(uint16_t opcode, bool checksize = true, bool isDouble = true) 1483 1483 { 1484 printInstr(opcode, m_buffer. label(), isDouble);1484 printInstr(opcode, m_buffer.codeSize(), isDouble); 1485 1485 if (checksize) 1486 1486 m_buffer.ensureSpace(maxInstructionSize); -
trunk/Source/JavaScriptCore/assembler/X86Assembler.h
r85432 r85448 1178 1178 { 1179 1179 m_formatter.oneByteOp(OP_GROUP5_Ev, GROUP5_OP_CALLN, dst); 1180 return AssemblerLabel(m_formatter.label());1180 return m_formatter.label(); 1181 1181 } 1182 1182 … … 1198 1198 { 1199 1199 m_formatter.oneByteOp(OP_GROUP5_Ev, GROUP5_OP_JMPN, dst); 1200 return AssemblerLabel(m_formatter.label());1200 return m_formatter.label(); 1201 1201 } 1202 1202 … … 1479 1479 AssemblerLabel label() 1480 1480 { 1481 return AssemblerLabel(m_formatter.label());1481 return m_formatter.label(); 1482 1482 } 1483 1483 … … 1871 1871 { 1872 1872 m_buffer.putIntUnchecked(0); 1873 return AssemblerLabel(label());1873 return label(); 1874 1874 } 1875 1875 … … 1877 1877 1878 1878 size_t codeSize() const { return m_buffer.codeSize(); } 1879 size_tlabel() const { return m_buffer.label(); }1879 AssemblerLabel label() const { return m_buffer.label(); } 1880 1880 bool isAligned(int alignment) const { return m_buffer.isAligned(alignment); } 1881 1881 void* data() const { return m_buffer.data(); }
Note: See TracChangeset
for help on using the changeset viewer.