Explorar o código

added exec data

Nicolas Winkler %!s(int64=5) %!d(string=hai) anos
pai
achega
a96968567a
Modificáronse 2 ficheiros con 38 adicións e 2 borrados
  1. 2 2
      choosegenerators.cpp
  2. 36 0
      libmandel/include/ExecData.h

+ 2 - 2
choosegenerators.cpp

@@ -300,8 +300,8 @@ void ChooseGenerators::on_compile_clicked()
 
     std::string expr = mnd::toString(*itf.expr);
     printf("%s\n", expr.c_str()); fflush(stdout);
-    chosenGenerator = std::make_unique<mnd::NaiveGenerator>(std::move(itf), mnd::getPrecision<double>());
-    return;
+    //chosenGenerator = std::make_unique<mnd::NaiveGenerator>(std::move(itf), mnd::getPrecision<double>());
+    //return;
     mnd::ir::Formula irform = mnd::expand(itf);
     irform.constantPropagation();
     printf("%s\n", irform.toString().c_str()); fflush(stdout);

+ 36 - 0
libmandel/include/ExecData.h

@@ -0,0 +1,36 @@
+#ifndef MANDEL_EXECDATA_H
+#define MANDEL_EXECDATA_H
+
+#include <asmjit/asmjit.h>
+#include <memory>
+
+namespace mnd
+{
+    struct ExecData
+    {
+        std::unique_ptr<asmjit::JitRuntime> jitRuntime;
+        std::unique_ptr<asmjit::CodeHolder> code;
+        std::unique_ptr<asmjit::x86::Compiler> compiler;
+        void* iterationFunc;
+
+        ExecData(void) :
+            jitRuntime{ std::make_unique<asmjit::JitRuntime>() },
+            code{ std::make_unique<asmjit::CodeHolder>() },
+            compiler{ nullptr },
+            iterationFunc{ nullptr }
+        {
+            code->init(jitRuntime->codeInfo());
+            compiler = std::make_unique<asmjit::x86::Compiler>(code.get());
+        }
+
+        ExecData(ExecData&&) = default;
+        ExecData(const ExecData&) = delete;
+        ExecData& operator=(ExecData&&) = default;
+        ExecData& operator=(const ExecData&) = delete;
+
+        ~ExecData(void) = default;
+    };
+}
+
+#endif // MANDEL_EXECDATA_H
+