Changeset 157796 in webkit
- Timestamp:
- Oct 22, 2013 8:51:51 AM (11 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r157795 r157796 1 2013-10-22 Julien Brianceau <jbriance@cisco.com> 2 3 REGRESSION(r157690, r157699) Fix architectures using AssemblerBufferWithConstantPool. 4 https://bugs.webkit.org/show_bug.cgi?id=123092 5 6 Reviewed by Michael Saboff. 7 8 Impacted architectures are SH4 and ARM_TRADITIONAL. 9 10 * assembler/ARMAssembler.h: 11 (JSC::ARMAssembler::buffer): 12 * assembler/AssemblerBufferWithConstantPool.h: 13 (JSC::AssemblerBufferWithConstantPool::flushConstantPool): 14 * assembler/LinkBuffer.cpp: 15 (JSC::LinkBuffer::linkCode): 16 * assembler/SH4Assembler.h: 17 (JSC::SH4Assembler::buffer): 18 1 19 2013-10-22 Julien Brianceau <jbriance@cisco.com> 2 20 -
trunk/Source/JavaScriptCore/assembler/ARMAssembler.h
r157784 r157796 151 151 { 152 152 } 153 154 ARMBuffer& buffer() { return m_buffer; } 153 155 154 156 // ARM conditional constants -
trunk/Source/JavaScriptCore/assembler/AssemblerBufferWithConstantPool.h
r157699 r157796 224 224 } 225 225 226 void flushConstantPool(bool useBarrier = true) 227 { 228 if (!m_numConsts) 229 return; 230 int alignPool = (codeSize() + (useBarrier ? barrierSize : 0)) & (sizeof(uint64_t) - 1); 231 232 if (alignPool) 233 alignPool = sizeof(uint64_t) - alignPool; 234 235 // Callback to protect the constant pool from execution 236 if (useBarrier) 237 putIntegral(AssemblerType::placeConstantPoolBarrier(m_numConsts * sizeof(uint32_t) + alignPool)); 238 239 if (alignPool) { 240 if (alignPool & 1) 241 AssemblerBuffer::putByte(AssemblerType::padForAlign8); 242 if (alignPool & 2) 243 AssemblerBuffer::putShort(AssemblerType::padForAlign16); 244 if (alignPool & 4) 245 AssemblerBuffer::putInt(AssemblerType::padForAlign32); 246 } 247 248 int constPoolOffset = codeSize(); 249 append(reinterpret_cast<char*>(m_pool), m_numConsts * sizeof(uint32_t)); 250 251 // Patch each PC relative load 252 for (LoadOffsets::Iterator iter = m_loadOffsets.begin(); iter != m_loadOffsets.end(); ++iter) { 253 void* loadAddr = reinterpret_cast<char*>(data()) + *iter; 254 AssemblerType::patchConstantPoolLoad(loadAddr, reinterpret_cast<char*>(data()) + constPoolOffset); 255 } 256 257 m_loadOffsets.clear(); 258 m_numConsts = 0; 259 } 260 226 261 private: 227 262 void correctDeltas(int insnSize) … … 268 303 } 269 304 270 void flushConstantPool(bool useBarrier = true)271 {272 if (m_numConsts == 0)273 return;274 int alignPool = (codeSize() + (useBarrier ? barrierSize : 0)) & (sizeof(uint64_t) - 1);275 276 if (alignPool)277 alignPool = sizeof(uint64_t) - alignPool;278 279 // Callback to protect the constant pool from execution280 if (useBarrier)281 putIntegral(AssemblerType::placeConstantPoolBarrier(m_numConsts * sizeof(uint32_t) + alignPool));282 283 if (alignPool) {284 if (alignPool & 1)285 AssemblerBuffer::putByte(AssemblerType::padForAlign8);286 if (alignPool & 2)287 AssemblerBuffer::putShort(AssemblerType::padForAlign16);288 if (alignPool & 4)289 AssemblerBuffer::putInt(AssemblerType::padForAlign32);290 }291 292 int constPoolOffset = codeSize();293 append(reinterpret_cast<char*>(m_pool), m_numConsts * sizeof(uint32_t));294 295 // Patch each PC relative load296 for (LoadOffsets::Iterator iter = m_loadOffsets.begin(); iter != m_loadOffsets.end(); ++iter) {297 void* loadAddr = reinterpret_cast<char*>(data()) + *iter;298 AssemblerType::patchConstantPoolLoad(loadAddr, reinterpret_cast<char*>(data()) + constPoolOffset);299 }300 301 m_loadOffsets.clear();302 m_numConsts = 0;303 }304 305 305 void flushIfNoSpaceFor(int nextInsnSize) 306 306 { -
trunk/Source/JavaScriptCore/assembler/LinkBuffer.cpp
r157690 r157796 137 137 ASSERT(!m_code); 138 138 #if !ENABLE(BRANCH_COMPACTION) 139 #if defined(ASSEMBLER_HAS_CONSTANT_POOL) && ASSEMBLER_HAS_CONSTANT_POOL 140 m_assembler->m_assembler.buffer().flushConstantPool(false); 141 #endif 139 142 AssemblerBuffer& buffer = m_assembler->m_assembler.buffer(); 140 143 allocate(buffer.codeSize(), ownerUID, effort); -
trunk/Source/JavaScriptCore/assembler/SH4Assembler.h
r157789 r157796 350 350 } 351 351 352 AssemblerBuffer& buffer() { return m_buffer; }352 SH4Buffer& buffer() { return m_buffer; } 353 353 354 354 // SH4 condition codes
Note: See TracChangeset
for help on using the changeset viewer.