浏览代码

LibJS/Bytecode: Flatten the interpreter main loop (Clang only)

This means inlining all the things. This yields a 40% speedup on the for
loop microbenchmark, and everything else gets faster as well. :^)

This makes compilation take foreeeever with GCC, so I'm only enabling it
for Clang in this commit. We should figure out how to make GCC compile
this without timing out CI, since the speedup is amazing.
Andreas Kling 1 年之前
父节点
当前提交
7b93b8cea7
共有 1 个文件被更改,包括 8 次插入1 次删除
  1. 8 1
      Userland/Libraries/LibJS/Bytecode/Interpreter.cpp

+ 8 - 1
Userland/Libraries/LibJS/Bytecode/Interpreter.cpp

@@ -330,7 +330,14 @@ Interpreter::HandleExceptionResponse Interpreter::handle_exception(size_t& progr
     VERIFY_NOT_REACHED();
     VERIFY_NOT_REACHED();
 }
 }
 
 
-void Interpreter::run_bytecode(size_t entry_point)
+// FIXME: GCC takes a *long* time to compile with flattening, and it will time out our CI. :|
+#if defined(AK_COMPILER_CLANG)
+#    define FLATTEN_ON_CLANG FLATTEN
+#else
+#    define FLATTEN_ON_CLANG
+#endif
+
+FLATTEN_ON_CLANG void Interpreter::run_bytecode(size_t entry_point)
 {
 {
     auto& running_execution_context = vm().running_execution_context();
     auto& running_execution_context = vm().running_execution_context();
     auto* locals = running_execution_context.locals.data();
     auto* locals = running_execution_context.locals.data();