Changeset 157932 in webkit
- Timestamp:
- Oct 24, 2013, 9:10:59 AM (12 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r157930 r157932 1 2013-10-24 Mark Lam <mark.lam@apple.com> 2 3 Fix broken C Loop LLINT build. 4 https://bugs.webkit.org/show_bug.cgi?id=123271. 5 6 Reviewed by Michael Saboff. 7 8 * bytecode/CodeBlock.cpp: 9 (JSC::CodeBlock::printGetByIdCacheStatus): Added an UNUSED_PARAM(). 10 (JSC::CodeBlock::dumpBytecode): Added #if ENABLE(JIT) to JIT only code. 11 * bytecode/GetByIdStatus.cpp: 12 (JSC::GetByIdStatus::computeFor): Added an UNUSED_PARAM(). 13 * bytecode/PutByIdStatus.cpp: 14 (JSC::PutByIdStatus::computeFor): Added an UNUSED_PARAM(). 15 * bytecode/StructureStubInfo.h: 16 - Added a stub StubInfoMap for non-JIT builds. StubInfoMap is still used 17 in function prototypes even when !ENABLE(JIT). Rather that adding #if's 18 in many places, we just provide a stub/placeholder implementation that 19 is unused but keeps the compiler happy. 20 * jit/JITOperations.h: Added #if ENABLE(JIT). 21 * llint/LowLevelInterpreter32_64.asm: 22 * llint/LowLevelInterpreter64.asm: 23 - The putByVal() macro reifies a slow path which is never taken in one case. 24 This translates into a label that is never used in the C Loop LLINT. The 25 C++ compiler doesn't like unused labels. So, we fix this by adding a 26 cloopUnusedLabel offline asm instruction that synthesizes the following: 27 28 if (false) goto unusedLabel; 29 30 This keeps the C++ compiler happy without changing code behavior. 31 * offlineasm/cloop.rb: Implementing cloopUnusedLabel. 32 * offlineasm/instructions.rb: Declaring cloopUnusedLabel. 33 * runtime/Executable.cpp: 34 (JSC::setupJIT): Added UNUSED_PARAM()s. 35 (JSC::ScriptExecutable::prepareForExecutionImpl): 36 - run-javascriptcore-tests have phases that forces the LLINT to be off 37 which in turn asserts that the JIT is enabled. With the C Loop LLINT, 38 this combination is illegal. So, we override the setup code here to 39 always use the LLINT if !ENABLE(JIT) regardless of what options are 40 passed in. 41 1 42 2013-10-24 peavo@outlook.com <peavo@outlook.com> 2 43 -
trunk/Source/JavaScriptCore/bytecode/CodeBlock.cpp
r157660 r157932 445 445 } 446 446 } 447 #else 448 UNUSED_PARAM(map); 447 449 #endif 448 450 } … … 523 525 524 526 StubInfoMap stubInfos; 527 #if ENABLE(JIT) 525 528 { 526 529 ConcurrentJITLocker locker(m_lock); 527 530 getStubInfoMap(locker, stubInfos); 528 531 } 532 #endif 529 533 530 534 const Instruction* begin = instructions().begin(); -
trunk/Source/JavaScriptCore/bytecode/GetByIdStatus.cpp
r157660 r157932 247 247 return result; 248 248 #else // ENABLE(JIT) 249 UNUSED_PARAM(map); 249 250 return GetByIdStatus(NoInformation, false); 250 251 #endif // ENABLE(JIT) -
trunk/Source/JavaScriptCore/bytecode/PutByIdStatus.cpp
r157660 r157932 144 144 } 145 145 #else // ENABLE(JIT) 146 UNUSED_PARAM(map); 146 147 return PutByIdStatus(NoInformation, 0, 0, 0, invalidOffset); 147 148 #endif // ENABLE(JIT) -
trunk/Source/JavaScriptCore/bytecode/StructureStubInfo.h
r157707 r157932 29 29 #include <wtf/Platform.h> 30 30 31 #if ENABLE(JIT)32 33 31 #include "CodeOrigin.h" 34 32 #include "Instruction.h" … … 43 41 44 42 namespace JSC { 43 44 #if ENABLE(JIT) 45 45 46 46 class PolymorphicPutByIdList; … … 302 302 typedef HashMap<CodeOrigin, StructureStubInfo*> StubInfoMap; 303 303 304 #else 305 306 typedef HashMap<int, void*> StubInfoMap; 307 308 #endif // ENABLE(JIT) 309 304 310 } // namespace JSC 305 311 306 #endif // ENABLE(JIT)307 308 312 #endif // StructureStubInfo_h -
trunk/Source/JavaScriptCore/jit/JITOperations.h
r157660 r157932 26 26 #ifndef JITOperations_h 27 27 #define JITOperations_h 28 29 #if ENABLE(JIT) 28 30 29 31 #include "CallFrame.h" … … 276 278 } // namespace JSC 277 279 280 #endif // ENABLE(JIT) 281 278 282 #endif // JITOperations_h 279 283 -
trunk/Source/JavaScriptCore/llint/LowLevelInterpreter32_64.asm
r157875 r157932 1390 1390 _llint_op_put_by_val_direct: 1391 1391 putByVal(macro(addr, slowPath) 1392 if C_LOOP 1393 cloopUnusedLabel slowPath 1394 end 1392 1395 end, _llint_slow_path_put_by_val_direct) 1393 1396 -
trunk/Source/JavaScriptCore/llint/LowLevelInterpreter64.asm
r157875 r157932 1249 1249 _llint_op_put_by_val_direct: 1250 1250 putByVal(macro(slot, slowPath) 1251 if C_LOOP 1252 cloopUnusedLabel slowPath 1253 end 1251 1254 end, _llint_slow_path_put_by_val_direct) 1252 1255 -
trunk/Source/JavaScriptCore/offlineasm/cloop.rb
r157572 r157932 1111 1111 cloopEmitCallSlowPath(operands) 1112 1112 1113 when "cloopUnusedLabel" 1114 $asm.putc "if (false) goto #{operands[0].cLabel};" 1115 1113 1116 # For debugging only. This is used to insert instrumentation into the 1114 1117 # generated LLIntAssembly.h during llint development only. Do not use -
trunk/Source/JavaScriptCore/offlineasm/instructions.rb
r157474 r157932 296 296 "cloopCallNative", # operands: callee 297 297 "cloopCallSlowPath", # operands: callTarget, currentFrame, currentPC 298 "cloopUnusedLabel", # operands: label 298 299 299 300 # For debugging only: -
trunk/Source/JavaScriptCore/runtime/Executable.cpp
r157559 r157932 278 278 RELEASE_ASSERT(result == CompilationSuccessful); 279 279 #else 280 UNUSED_PARAM(vm); 281 UNUSED_PARAM(codeBlock); 280 282 UNREACHABLE_FOR_PLATFORM(); 281 283 #endif … … 296 298 297 299 bool shouldUseLLInt; 298 #if ENABLE(LLINT) 300 #if !ENABLE(JIT) 301 // No JIT implies use of the C Loop LLINT. Override the options to reflect this. 302 Options::useLLInt() = true; 303 shouldUseLLInt = true; 304 #elif ENABLE(LLINT) 299 305 shouldUseLLInt = Options::useLLInt(); 300 306 #else
Note:
See TracChangeset
for help on using the changeset viewer.