JIT: add a cache 55/17355/2
Calixte DENIZET [Tue, 20 Oct 2015 15:52:31 +0000 (17:52 +0200)]
Change-Id: I538e4691b70f689460faa901d733b125958be3e1

76 files changed:
scilab/aclocal.m4
scilab/configure
scilab/modules/ast/Makefile.am
scilab/modules/ast/Makefile.in
scilab/modules/ast/ast.vcxproj
scilab/modules/ast/ast.vcxproj.filters
scilab/modules/ast/includes/analysis/TIType.hxx
scilab/modules/ast/includes/jit/BaseFunctions.hxx
scilab/modules/ast/includes/jit/Cast.hxx
scilab/modules/ast/includes/jit/Debug.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/JITArrayofs.hxx
scilab/modules/ast/includes/jit/JITInfo.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/JITScalars.hxx
scilab/modules/ast/includes/jit/JITScilabVal.hxx
scilab/modules/ast/includes/jit/JITVisitor.hxx
scilab/modules/ast/includes/jit/Jitter.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/IOArgs.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/addition.hxx
scilab/modules/ast/includes/jit/base/and.hxx
scilab/modules/ast/includes/jit/base/binary.hxx [deleted file]
scilab/modules/ast/includes/jit/base/binary_functors.hxx
scilab/modules/ast/includes/jit/base/exponentiation.hxx
scilab/modules/ast/includes/jit/base/functors.hxx
scilab/modules/ast/includes/jit/base/multiplication.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/negation.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/opposite.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/rdivision.hxx
scilab/modules/ast/includes/jit/base/transposition.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/FunctionSignature.hxx
scilab/modules/ast/includes/jit/calls/JITBinOpCall.hxx
scilab/modules/ast/includes/jit/calls/JITCall.hxx
scilab/modules/ast/includes/jit/calls/JITOptimizedCall1.hxx
scilab/modules/ast/includes/jit/calls/JITUnaryOpCall.hxx
scilab/modules/ast/includes/jit/funs_interf.h
scilab/modules/ast/includes/types/bool.hxx
scilab/modules/ast/includes/types/double.hxx
scilab/modules/ast/includes/types/int.hxx
scilab/modules/ast/src/cpp/analysis/CompleteMacroSignature.cpp
scilab/modules/ast/src/cpp/analysis/VisitAssignExp.cpp
scilab/modules/ast/src/cpp/analysis/VisitOpExp.cpp
scilab/modules/ast/src/cpp/analysis/check_____not____.cpp
scilab/modules/ast/src/cpp/ast/prettyprintvisitor.cpp
scilab/modules/ast/src/cpp/ast/run_CallExp.hpp
scilab/modules/ast/src/cpp/ast/runvisitor.cpp
scilab/modules/ast/src/cpp/jit/BaseFunctions2.cpp
scilab/modules/ast/src/cpp/jit/BaseFunctions3.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/BaseFunctions4.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/BaseFunctions5.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/BaseFunctions6.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/Debug.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/IOArgs.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITAssignExp.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITBinOpCall.cpp
scilab/modules/ast/src/cpp/jit/JITCall.cpp
scilab/modules/ast/src/cpp/jit/JITCallExp.cpp
scilab/modules/ast/src/cpp/jit/JITComplexVal.cpp
scilab/modules/ast/src/cpp/jit/JITDoubleExp.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITMakeScilabCall.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITMatrixExp.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITMultiplication.cpp
scilab/modules/ast/src/cpp/jit/JITOpExp.cpp
scilab/modules/ast/src/cpp/jit/JITOptimizedCall1.cpp
scilab/modules/ast/src/cpp/jit/JITPower.cpp
scilab/modules/ast/src/cpp/jit/JITRDivision.cpp
scilab/modules/ast/src/cpp/jit/JITSelectExp.cpp
scilab/modules/ast/src/cpp/jit/JITTransposition.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITUnaryOpCall.cpp
scilab/modules/ast/src/cpp/jit/JITVisitor.cpp
scilab/modules/ast/src/cpp/jit/Jitter.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/MemoryManager.cpp
scilab/modules/ast/src/cpp/jit/ShortcutEval.cpp
scilab/modules/ast/src/cpp/types/bool.cpp
scilab/modules/ast/src/cpp/types/double.cpp
scilab/modules/ast/src/cpp/types/overload.cpp
scilab/modules/functions/sci_gateway/cpp/sci_jit.cpp
scilab/modules/javasci/Makefile.in

index cc12bae..67f9852 100644 (file)
@@ -20,7 +20,7 @@ You have another version of autoconf.  It may work, but is not guaranteed to.
 If you have problems, you may need to regenerate the build system entirely.
 To do so, use the procedure documented by the package, typically 'autoreconf'.])])
 
-# gettext.m4 serial 66 (gettext-0.18.2)
+# gettext.m4 serial 67 (gettext-0.19.6)
 dnl Copyright (C) 1995-2014 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -422,6 +422,10 @@ AC_DEFUN([AM_GNU_GETTEXT_NEED],
 dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
 AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
 
+
+dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], [])
+
 # iconv.m4 serial 19 (gettext-0.18.2)
 dnl Copyright (C) 2000-2002, 2007-2014 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
index 97f7f7b..eb2e9d5 100755 (executable)
@@ -667,6 +667,8 @@ FORCE_LINK_TRUE
 COMPILATION_TESTS_FALSE
 COMPILATION_TESTS_TRUE
 JAVASCI_ENABLE
+VALGRIND_LIBS
+VALGRIND_CFLAGS
 DOXYGEN_FALSE
 DOXYGEN_TRUE
 DOXYGEN_BIN
@@ -1102,7 +1104,9 @@ CURL_CFLAGS
 CURL_LIBS
 XMKMF
 MATIO_CFLAGS
-MATIO_LIBS'
+MATIO_LIBS
+VALGRIND_CFLAGS
+VALGRIND_LIBS'
 
 
 # Initialize some variables set by options.
@@ -1894,6 +1898,10 @@ Some influential environment variables:
   MATIO_CFLAGS
               C compiler flags for MATIO, overriding pkg-config
   MATIO_LIBS  linker flags for MATIO, overriding pkg-config
+  VALGRIND_CFLAGS
+              C compiler flags for VALGRIND, overriding pkg-config
+  VALGRIND_LIBS
+              linker flags for VALGRIND, overriding pkg-config
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
@@ -11797,7 +11805,7 @@ $as_echo "$ac_java_classpath" >&6; }
 $as_echo_n "checking to see if the java compiler works... " >&6; }
 
     cat << \EOF > conftest.java
-// #line 11800 "configure"
+// #line 11808 "configure"
 import java.util.regex.Pattern;
 
 
@@ -11884,7 +11892,7 @@ $as_echo_n "checking type of jvm... " >&6; }
     if test "x$ac_java_jvm_name" = "x" ; then
 
     cat << \EOF > conftest.java
-// #line 11887 "configure"
+// #line 11895 "configure"
 import java.util.regex.Pattern;
 
 import gnu.java.io.EncodingManager;
@@ -11968,7 +11976,7 @@ $as_echo_n "checking java API version... " >&6; }
     # The class java.nio.charset.Charset is new to 1.4
 
     cat << \EOF > conftest.java
-// #line 11971 "configure"
+// #line 11979 "configure"
 import java.util.regex.Pattern;
 
 import java.nio.charset.Charset;
@@ -12033,7 +12041,7 @@ EOF
     # The class java.lang.StringBuilder is new to 1.5
 
     cat << \EOF > conftest.java
-// #line 12036 "configure"
+// #line 12044 "configure"
 import java.util.regex.Pattern;
 
 import java.lang.StringBuilder;
@@ -12098,7 +12106,7 @@ EOF
     # The class java.util.ArrayDeque is new to 1.6
 
     cat << \EOF > conftest.java
-// #line 12101 "configure"
+// #line 12109 "configure"
 import java.util.regex.Pattern;
 
 import java.util.ArrayDeque;
@@ -12163,7 +12171,7 @@ EOF
     # The class java.nio.file.Path is new to 1.7
 
     cat << \EOF > conftest.java
-// #line 12166 "configure"
+// #line 12174 "configure"
 import java.util.regex.Pattern;
 
 import java.nio.file.Path;
@@ -12228,7 +12236,7 @@ EOF
     # The class java.util.stream.DoubleStream is new to 1.8
 
     cat << \EOF > conftest.java
-// #line 12231 "configure"
+// #line 12239 "configure"
 import java.util.regex.Pattern;
 
 import java.util.stream.DoubleStream;
@@ -13706,7 +13714,7 @@ $as_echo_n "checking jgraphx... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 13709 "configure"
+// #line 13717 "configure"
 import java.util.regex.Pattern;
 
 import com.mxgraph.model.mxCell;
@@ -13813,7 +13821,7 @@ $as_echo_n "checking minimal version (2.0.0.1) of jgraphx... " >&6; }
    if test "x" == "x"; then
 
     cat << \EOF > conftest.java
-// #line 13816 "configure"
+// #line 13824 "configure"
 import java.util.regex.Pattern;
 
 import com.mxgraph.view.mxGraph;
@@ -13885,7 +13893,7 @@ EOF
    else
 
     cat << \EOF > conftest.java
-// #line 13888 "configure"
+// #line 13896 "configure"
 import java.util.regex.Pattern;
 
 import com.mxgraph.view.mxGraph;
@@ -13979,7 +13987,7 @@ $as_echo_n "checking scirenderer... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 13982 "configure"
+// #line 13990 "configure"
 import java.util.regex.Pattern;
 
 import org.scilab.forge.scirenderer.PackageInfo;
@@ -14086,7 +14094,7 @@ $as_echo_n "checking minimal version (1.1.0) of scirenderer... " >&6; }
    if test "x" == "x"; then
 
     cat << \EOF > conftest.java
-// #line 14089 "configure"
+// #line 14097 "configure"
 import java.util.regex.Pattern;
 
 import org.scilab.forge.scirenderer.PackageInfo;
@@ -14158,7 +14166,7 @@ EOF
    else
 
     cat << \EOF > conftest.java
-// #line 14161 "configure"
+// #line 14169 "configure"
 import java.util.regex.Pattern;
 
 import org.scilab.forge.scirenderer.PackageInfo;
@@ -14257,7 +14265,7 @@ $as_echo_n "checking flexdock... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 14260 "configure"
+// #line 14268 "configure"
 import java.util.regex.Pattern;
 
 import org.flexdock.docking.DockingManager;
@@ -14364,7 +14372,7 @@ $as_echo_n "checking minimal version (1.2.4) of flexdock... " >&6; }
    if test "x" == "x"; then
 
     cat << \EOF > conftest.java
-// #line 14367 "configure"
+// #line 14375 "configure"
 import java.util.regex.Pattern;
 
 import org.flexdock.util.Utilities;
@@ -14436,7 +14444,7 @@ EOF
    else
 
     cat << \EOF > conftest.java
-// #line 14439 "configure"
+// #line 14447 "configure"
 import java.util.regex.Pattern;
 
 import org.flexdock.util.Utilities;
@@ -14527,7 +14535,7 @@ $as_echo_n "checking looks... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 14530 "configure"
+// #line 14538 "configure"
 import java.util.regex.Pattern;
 
 import com.jgoodies.looks.common.MenuItemRenderer;
@@ -14644,7 +14652,7 @@ $as_echo_n "checking jgoodies-looks... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 14647 "configure"
+// #line 14655 "configure"
 import java.util.regex.Pattern;
 
 import com.jgoodies.looks.common.MenuItemRenderer;
@@ -14762,7 +14770,7 @@ $as_echo_n "checking skinlf... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 14765 "configure"
+// #line 14773 "configure"
 import java.util.regex.Pattern;
 
 import com.l2fprod.util.AccessUtils;
@@ -14879,7 +14887,7 @@ $as_echo_n "checking jogl2... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 14882 "configure"
+// #line 14890 "configure"
 import java.util.regex.Pattern;
 
 import javax.media.opengl.glu.GLUnurbs;
@@ -14985,7 +14993,7 @@ $as_echo_n "checking minimal version (Specification-Version 2.2) of jogl2... " >
     if test "x" == "x"; then
 
     cat << \EOF > conftest.java
-// #line 14988 "configure"
+// #line 14996 "configure"
 import java.util.regex.Pattern;
 
 import java.io.IOException;
@@ -15062,7 +15070,7 @@ EOF
     else
 
     cat << \EOF > conftest.java
-// #line 15065 "configure"
+// #line 15073 "configure"
 import java.util.regex.Pattern;
 
 import java.io.IOException;
@@ -15264,7 +15272,7 @@ $as_echo_n "checking gluegen2-rt... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 15267 "configure"
+// #line 15275 "configure"
 import java.util.regex.Pattern;
 
 import jogamp.common.os.MachineDescriptionRuntime;
@@ -15438,7 +15446,7 @@ $as_echo_n "checking jhall... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 15441 "configure"
+// #line 15449 "configure"
 import java.util.regex.Pattern;
 
 import javax.help.JHelp;
@@ -15553,7 +15561,7 @@ $as_echo_n "checking javahelp2... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 15556 "configure"
+// #line 15564 "configure"
 import java.util.regex.Pattern;
 
 import javax.help.JHelp;
@@ -15671,7 +15679,7 @@ $as_echo_n "checking jrosetta-API... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 15674 "configure"
+// #line 15682 "configure"
 import java.util.regex.Pattern;
 
 import com.artenum.rosetta.interfaces.core.ConsoleConfiguration;
@@ -15785,7 +15793,7 @@ $as_echo_n "checking jrosetta-api... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 15788 "configure"
+// #line 15796 "configure"
 import java.util.regex.Pattern;
 
 import com.artenum.rosetta.interfaces.core.ConsoleConfiguration;
@@ -15903,7 +15911,7 @@ $as_echo_n "checking jrosetta-engine... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 15906 "configure"
+// #line 15914 "configure"
 import java.util.regex.Pattern;
 
 import com.artenum.rosetta.core.action.AbstractConsoleAction;
@@ -16009,7 +16017,7 @@ $as_echo_n "checking minimal version (1.0.4) of jrosetta-engine... " >&6; }
    if test "x" == "x"; then
 
     cat << \EOF > conftest.java
-// #line 16012 "configure"
+// #line 16020 "configure"
 import java.util.regex.Pattern;
 
 import com.artenum.rosetta.util.ConfigurationBuilder;
@@ -16081,7 +16089,7 @@ EOF
    else
 
     cat << \EOF > conftest.java
-// #line 16084 "configure"
+// #line 16092 "configure"
 import java.util.regex.Pattern;
 
 import com.artenum.rosetta.util.ConfigurationBuilder;
@@ -16174,7 +16182,7 @@ $as_echo_n "checking jeuclid-core... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 16177 "configure"
+// #line 16185 "configure"
 import java.util.regex.Pattern;
 
 import net.sourceforge.jeuclid.LayoutContext;
@@ -16293,7 +16301,7 @@ $as_echo_n "checking fop... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 16296 "configure"
+// #line 16304 "configure"
 import java.util.regex.Pattern;
 
 import org.apache.fop.pdf.PDFInfo;
@@ -16417,7 +16425,7 @@ $as_echo_n "checking freehep-graphics2d... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 16420 "configure"
+// #line 16428 "configure"
 import java.util.regex.Pattern;
 
 import org.freehep.graphics2d.VectorGraphics;
@@ -16534,7 +16542,7 @@ $as_echo_n "checking freehep-graphicsio-emf... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 16537 "configure"
+// #line 16545 "configure"
 import java.util.regex.Pattern;
 
 import org.freehep.graphicsio.emf.EMFGraphics2D;
@@ -16651,7 +16659,7 @@ $as_echo_n "checking freehep-graphicsio... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 16654 "configure"
+// #line 16662 "configure"
 import java.util.regex.Pattern;
 
 import org.freehep.graphicsio.VectorGraphicsIO;
@@ -16768,7 +16776,7 @@ $as_echo_n "checking freehep-io... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 16771 "configure"
+// #line 16779 "configure"
 import java.util.regex.Pattern;
 
 import org.freehep.util.io.XMLSequence;
@@ -16885,7 +16893,7 @@ $as_echo_n "checking freehep-util... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 16888 "configure"
+// #line 16896 "configure"
 import java.util.regex.Pattern;
 
 import org.freehep.util.StringUtilities;
@@ -17003,7 +17011,7 @@ $as_echo_n "checking batik-all... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 17006 "configure"
+// #line 17014 "configure"
 import java.util.regex.Pattern;
 
 import org.apache.batik.parser.Parser;
@@ -17120,7 +17128,7 @@ $as_echo_n "checking batik... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 17123 "configure"
+// #line 17131 "configure"
 import java.util.regex.Pattern;
 
 import org.apache.batik.parser.Parser;
@@ -17227,7 +17235,7 @@ $as_echo_n "checking minimal version (1.7) of batik... " >&6; }
    if test "x" == "x"; then
 
     cat << \EOF > conftest.java
-// #line 17230 "configure"
+// #line 17238 "configure"
 import java.util.regex.Pattern;
 
 import org.apache.batik.Version;
@@ -17299,7 +17307,7 @@ EOF
    else
 
     cat << \EOF > conftest.java
-// #line 17302 "configure"
+// #line 17310 "configure"
 import java.util.regex.Pattern;
 
 import org.apache.batik.Version;
@@ -17390,7 +17398,7 @@ $as_echo_n "checking commons-io... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 17393 "configure"
+// #line 17401 "configure"
 import java.util.regex.Pattern;
 
 import org.apache.commons.io.output.CountingOutputStream;
@@ -17507,7 +17515,7 @@ $as_echo_n "checking xmlgraphics-commons... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 17510 "configure"
+// #line 17518 "configure"
 import java.util.regex.Pattern;
 
 import org.apache.xmlgraphics.util.Service;
@@ -17624,7 +17632,7 @@ $as_echo_n "checking avalon-framework... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 17627 "configure"
+// #line 17635 "configure"
 import java.util.regex.Pattern;
 
 import org.apache.avalon.framework.configuration.ConfigurationException;
@@ -17741,7 +17749,7 @@ $as_echo_n "checking xml-apis-ext... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 17744 "configure"
+// #line 17752 "configure"
 import java.util.regex.Pattern;
 
 import org.w3c.dom.svg.SVGDocument;
@@ -17858,7 +17866,7 @@ $as_echo_n "checking xml-commons-apis-ext... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 17861 "configure"
+// #line 17869 "configure"
 import java.util.regex.Pattern;
 
 import org.w3c.dom.svg.SVGDocument;
@@ -17979,7 +17987,7 @@ $as_echo_n "checking commons-logging... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 17982 "configure"
+// #line 17990 "configure"
 import java.util.regex.Pattern;
 
 import org.apache.commons.logging.LogFactory;
@@ -18096,7 +18104,7 @@ $as_echo_n "checking jlatexmath... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 18099 "configure"
+// #line 18107 "configure"
 import java.util.regex.Pattern;
 
 import org.scilab.forge.jlatexmath.TeXFormula;
@@ -18203,7 +18211,7 @@ $as_echo_n "checking minimal version (1.0.3) of jlatexmath... " >&6; }
    if test "x" == "x"; then
 
     cat << \EOF > conftest.java
-// #line 18206 "configure"
+// #line 18214 "configure"
 import java.util.regex.Pattern;
 
 import org.scilab.forge.jlatexmath.TeXFormula;
@@ -18275,7 +18283,7 @@ EOF
    else
 
     cat << \EOF > conftest.java
-// #line 18278 "configure"
+// #line 18286 "configure"
 import java.util.regex.Pattern;
 
 import org.scilab.forge.jlatexmath.TeXFormula;
@@ -18366,7 +18374,7 @@ $as_echo_n "checking jlatexmath-fop... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 18369 "configure"
+// #line 18377 "configure"
 import java.util.regex.Pattern;
 
 import org.scilab.forge.jlatexmath.fop.JLaTeXMathObj;
@@ -18489,7 +18497,7 @@ $as_echo_n "checking checkstyle... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 18492 "configure"
+// #line 18500 "configure"
 import java.util.regex.Pattern;
 
 import com.puppycrawl.tools.checkstyle.CheckStyleTask;
@@ -18606,7 +18614,7 @@ $as_echo_n "checking commons-beanutils... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 18609 "configure"
+// #line 18617 "configure"
 import java.util.regex.Pattern;
 
 import org.apache.commons.beanutils.Converter;
@@ -18723,7 +18731,7 @@ $as_echo_n "checking antlr... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 18726 "configure"
+// #line 18734 "configure"
 import java.util.regex.Pattern;
 
 import antlr.TokenStreamException;
@@ -18840,7 +18848,7 @@ $as_echo_n "checking junit4... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 18843 "configure"
+// #line 18851 "configure"
 import java.util.regex.Pattern;
 
 import org.junit.Assert;
@@ -18954,7 +18962,7 @@ $as_echo_n "checking junit... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 18957 "configure"
+// #line 18965 "configure"
 import java.util.regex.Pattern;
 
 import org.junit.Assert;
@@ -19075,7 +19083,7 @@ $as_echo_n "checking cobertura... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 19078 "configure"
+// #line 19086 "configure"
 import java.util.regex.Pattern;
 
 import net.sourceforge.cobertura.merge.Main;
@@ -19192,7 +19200,7 @@ $as_echo_n "checking asm3... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 19195 "configure"
+// #line 19203 "configure"
 import java.util.regex.Pattern;
 
 import org.objectweb.asm.Type;
@@ -19306,7 +19314,7 @@ $as_echo_n "checking asm... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 19309 "configure"
+// #line 19317 "configure"
 import java.util.regex.Pattern;
 
 import org.objectweb.asm.Type;
@@ -19423,7 +19431,7 @@ $as_echo_n "checking ecj... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 19426 "configure"
+// #line 19434 "configure"
 import java.util.regex.Pattern;
 
 import org.eclipse.jdt.core.compiler.batch.BatchCompiler;
@@ -23689,7 +23697,7 @@ CHK_EIGEN_MINOR=0
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Eigen is version $CHK_EIGEN_WORLD.$CHK_EIGEN_MAJOR.$CHK_EIGEN_MINOR or later" >&5
 $as_echo_n "checking if Eigen is version $CHK_EIGEN_WORLD.$CHK_EIGEN_MAJOR.$CHK_EIGEN_MINOR or later... " >&6; }
 cat > conftest.$ac_ext <<EOF
-#line 23692 "configure"
+#line 23700 "configure"
 #include "confdefs.h"
 
 #include "$PATH_TO_EIGEN/Eigen/Sparse"
@@ -28280,7 +28288,7 @@ CPPFLAGS="$CPPFLAGS -I$CHK_TCL_INCLUDE_PATH"
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if tcl is version $CHK_TCL_MAJOR.$CHK_TCL_MINOR or later" >&5
 $as_echo_n "checking if tcl is version $CHK_TCL_MAJOR.$CHK_TCL_MINOR or later... " >&6; }
 cat > conftest.$ac_ext <<EOF
-#line 28283 "configure"
+#line 28291 "configure"
 #include "confdefs.h"
 
 #include "$CHK_TCL_INCLUDE_PATH/$CHK_TCL_INC_NAME"
@@ -28591,7 +28599,7 @@ CPPFLAGS="$CPPFLAGS $TCL_INC_PATH -I$CHK_TK_INCLUDE_PATH $X_CFLAGS"
 $as_echo_n "checking if tk is version $CHK_TK_MAJOR.$CHK_TK_MINOR or later... " >&6; }
 
 cat > conftest.$ac_ext <<EOF
-#line 28594 "configure"
+#line 28602 "configure"
 #include "confdefs.h"
 
 #include "$CHK_TK_INCLUDE_PATH/$CHK_TK_INC_NAME"
@@ -29180,7 +29188,7 @@ $as_echo_n "checking saxon9he... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 29183 "configure"
+// #line 29191 "configure"
 import java.util.regex.Pattern;
 
 import net.sf.saxon.Version;
@@ -29295,7 +29303,7 @@ $as_echo_n "checking saxon... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 29298 "configure"
+// #line 29306 "configure"
 import java.util.regex.Pattern;
 
 import net.sf.saxon.Version;
@@ -29411,7 +29419,7 @@ $as_echo_n "checking saxon... " >&6; }
             export ac_java_classpath="$jar_resolved:$ac_java_classpath"
 
     cat << \EOF > conftest.java
-// #line 29414 "configure"
+// #line 29422 "configure"
 import java.util.regex.Pattern;
 
 import com.icl.saxon.Loader;
@@ -29636,6 +29644,107 @@ else
 fi
 
 
+## Valgrind specific code
+if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"valgrind\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "valgrind") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for VALGRIND" >&5
+$as_echo_n "checking for VALGRIND... " >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$VALGRIND_CFLAGS"; then
+        pkg_cv_VALGRIND_CFLAGS="$VALGRIND_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"valgrind\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "valgrind") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_VALGRIND_CFLAGS=`$PKG_CONFIG --cflags "valgrind" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$VALGRIND_LIBS"; then
+        pkg_cv_VALGRIND_LIBS="$VALGRIND_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"valgrind\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "valgrind") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_VALGRIND_LIBS=`$PKG_CONFIG --libs "valgrind" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+       pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               VALGRIND_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "valgrind"`
+        else
+               VALGRIND_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "valgrind"`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$VALGRIND_PKG_ERRORS" >&5
+
+       as_fn_error $? "Package requirements (valgrind) were not met:
+
+$VALGRIND_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables VALGRIND_CFLAGS
+and VALGRIND_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" "$LINENO" 5
+elif test $pkg_failed = untried; then
+       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables VALGRIND_CFLAGS
+and VALGRIND_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details" "$LINENO" 5; }
+else
+       VALGRIND_CFLAGS=$pkg_cv_VALGRIND_CFLAGS
+       VALGRIND_LIBS=$pkg_cv_VALGRIND_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define VALGRIND_ENABLE /**/" >>confdefs.h
+
+fi
+fi
+
 ##############################################################
 ## Javasci module
 ##############################################################
@@ -47209,6 +47318,11 @@ echo "  LLVM_CPPFLAGS ...... = $LLVM_CPPFLAGS"
 echo "  LLVM_LDFLAGS ....... = $LLVM_LDFLAGS"
 echo "  LLVM_LIBS .......... = $LLVM_LIBS"
 
+echo "Valgrind configuration:"
+echo "  VALGRIND_CFLAGS .... = $VALGRIND_CFLAGS"
+echo "  VALGRIND_LIBS ...... = $VALGRIND_LIBS"
+echo ""
+
 echo ""
 echo "Libtool config:"
 echo "  objext .............. = $objext"
index f668bd0..2ef8ad9 100644 (file)
@@ -247,6 +247,7 @@ src/cpp/analysis/check_____ldivide____.cpp \
 src/cpp/analysis/check_acos.cpp \
 src/cpp/analysis/check_____dottimes____.cpp \
 src/cpp/jit/JITVisitor.cpp \
+src/cpp/jit/Jitter.cpp \
 src/cpp/jit/JITComplexVal.cpp \
 src/cpp/jit/MemoryManager.cpp \
 src/cpp/jit/JITCallExp.cpp \
@@ -257,6 +258,8 @@ src/cpp/jit/JITZeros.cpp \
 src/cpp/jit/JITBinOpCall.cpp \
 src/cpp/jit/JITUnaryOpCall.cpp \
 src/cpp/jit/JITOpExp.cpp \
+src/cpp/jit/JITDoubleExp.cpp \
+src/cpp/jit/JITAssignExp.cpp \
 src/cpp/jit/JITShortcutBinOpCall.cpp \
 src/cpp/jit/ShortcutEval.cpp \
 src/cpp/jit/JITIfExp.cpp \
@@ -266,6 +269,7 @@ src/cpp/jit/JITSelectExp.cpp \
 src/cpp/jit/JITIntSelectExp.cpp \
 src/cpp/jit/JITOptimizedCall1.cpp \
 src/cpp/jit/JITMemfillExp.cpp \
+src/cpp/jit/JITMatrixExp.cpp \
 src/cpp/jit/JITSign.cpp \
 src/cpp/jit/JITSqrt.cpp \
 src/cpp/jit/JITLog.cpp \
@@ -290,11 +294,17 @@ src/cpp/jit/JITComparisons.cpp \
 src/cpp/jit/JITNegation.cpp \
 src/cpp/jit/JITRDivision.cpp \
 src/cpp/jit/JITPower.cpp \
+src/cpp/jit/JITTransposition.cpp \
 src/cpp/jit/FunctionSignature.cpp \
 src/cpp/jit/ScilabJITEventListener.cpp \
 src/cpp/jit/BaseFunctions1.cpp \
-src/cpp/jit/BaseFunctions2.cpp
-
+src/cpp/jit/BaseFunctions2.cpp \
+src/cpp/jit/BaseFunctions3.cpp \
+src/cpp/jit/BaseFunctions4.cpp \
+src/cpp/jit/BaseFunctions5.cpp \
+src/cpp/jit/BaseFunctions6.cpp \
+src/cpp/jit/JITMakeScilabCall.cpp \
+src/cpp/jit/Debug.cpp
 
 if ENABLE_DEBUG
 libsciast_la_SOURCES += src/cpp/types/inspector.cpp
index b969472..da00fbf 100644 (file)
@@ -363,32 +363,39 @@ am__libsciast_la_SOURCES_DIST = src/c/operations/doublecomplex.c \
        src/cpp/analysis/check_____ldivide____.cpp \
        src/cpp/analysis/check_acos.cpp \
        src/cpp/analysis/check_____dottimes____.cpp \
-       src/cpp/jit/JITVisitor.cpp src/cpp/jit/JITComplexVal.cpp \
-       src/cpp/jit/MemoryManager.cpp src/cpp/jit/JITCallExp.cpp \
-       src/cpp/jit/JITForExp.cpp src/cpp/jit/JITCall.cpp \
-       src/cpp/jit/JITSize.cpp src/cpp/jit/JITZeros.cpp \
-       src/cpp/jit/JITBinOpCall.cpp src/cpp/jit/JITUnaryOpCall.cpp \
-       src/cpp/jit/JITOpExp.cpp src/cpp/jit/JITShortcutBinOpCall.cpp \
+       src/cpp/jit/JITVisitor.cpp src/cpp/jit/Jitter.cpp \
+       src/cpp/jit/JITComplexVal.cpp src/cpp/jit/MemoryManager.cpp \
+       src/cpp/jit/JITCallExp.cpp src/cpp/jit/JITForExp.cpp \
+       src/cpp/jit/JITCall.cpp src/cpp/jit/JITSize.cpp \
+       src/cpp/jit/JITZeros.cpp src/cpp/jit/JITBinOpCall.cpp \
+       src/cpp/jit/JITUnaryOpCall.cpp src/cpp/jit/JITOpExp.cpp \
+       src/cpp/jit/JITDoubleExp.cpp src/cpp/jit/JITAssignExp.cpp \
+       src/cpp/jit/JITShortcutBinOpCall.cpp \
        src/cpp/jit/ShortcutEval.cpp src/cpp/jit/JITIfExp.cpp \
        src/cpp/jit/JITWhileExp.cpp \
        src/cpp/jit/JITBreakContinueExps.cpp \
        src/cpp/jit/JITSelectExp.cpp src/cpp/jit/JITIntSelectExp.cpp \
        src/cpp/jit/JITOptimizedCall1.cpp \
-       src/cpp/jit/JITMemfillExp.cpp src/cpp/jit/JITSign.cpp \
-       src/cpp/jit/JITSqrt.cpp src/cpp/jit/JITLog.cpp \
-       src/cpp/jit/JITAbs.cpp src/cpp/jit/JITAngle.cpp \
-       src/cpp/jit/JITReal.cpp src/cpp/jit/JITImag.cpp \
-       src/cpp/jit/JITImult.cpp src/cpp/jit/JITConj.cpp \
-       src/cpp/jit/JITFloor.cpp src/cpp/jit/JITCeil.cpp \
-       src/cpp/jit/JITRound.cpp src/cpp/jit/JITTicToc.cpp \
-       src/cpp/jit/JITAddition.cpp src/cpp/jit/JITSubtraction.cpp \
-       src/cpp/jit/JITOpposite.cpp src/cpp/jit/JITMultiplication.cpp \
-       src/cpp/jit/JITEquality.cpp src/cpp/jit/JITShortcutOps.cpp \
-       src/cpp/jit/JITNotEquality.cpp src/cpp/jit/JITComparisons.cpp \
-       src/cpp/jit/JITNegation.cpp src/cpp/jit/JITRDivision.cpp \
-       src/cpp/jit/JITPower.cpp src/cpp/jit/FunctionSignature.cpp \
+       src/cpp/jit/JITMemfillExp.cpp src/cpp/jit/JITMatrixExp.cpp \
+       src/cpp/jit/JITSign.cpp src/cpp/jit/JITSqrt.cpp \
+       src/cpp/jit/JITLog.cpp src/cpp/jit/JITAbs.cpp \
+       src/cpp/jit/JITAngle.cpp src/cpp/jit/JITReal.cpp \
+       src/cpp/jit/JITImag.cpp src/cpp/jit/JITImult.cpp \
+       src/cpp/jit/JITConj.cpp src/cpp/jit/JITFloor.cpp \
+       src/cpp/jit/JITCeil.cpp src/cpp/jit/JITRound.cpp \
+       src/cpp/jit/JITTicToc.cpp src/cpp/jit/JITAddition.cpp \
+       src/cpp/jit/JITSubtraction.cpp src/cpp/jit/JITOpposite.cpp \
+       src/cpp/jit/JITMultiplication.cpp src/cpp/jit/JITEquality.cpp \
+       src/cpp/jit/JITShortcutOps.cpp src/cpp/jit/JITNotEquality.cpp \
+       src/cpp/jit/JITComparisons.cpp src/cpp/jit/JITNegation.cpp \
+       src/cpp/jit/JITRDivision.cpp src/cpp/jit/JITPower.cpp \
+       src/cpp/jit/JITTransposition.cpp \
+       src/cpp/jit/FunctionSignature.cpp \
        src/cpp/jit/ScilabJITEventListener.cpp \
        src/cpp/jit/BaseFunctions1.cpp src/cpp/jit/BaseFunctions2.cpp \
+       src/cpp/jit/BaseFunctions3.cpp src/cpp/jit/BaseFunctions4.cpp \
+       src/cpp/jit/BaseFunctions5.cpp src/cpp/jit/BaseFunctions6.cpp \
+       src/cpp/jit/JITMakeScilabCall.cpp src/cpp/jit/Debug.cpp \
        src/cpp/types/inspector.cpp
 am__dirstamp = $(am__leading_dot)dirstamp
 @ENABLE_DEBUG_TRUE@am__objects_1 =  \
@@ -627,6 +634,7 @@ am_libsciast_la_OBJECTS =  \
        src/cpp/analysis/libsciast_la-check_acos.lo \
        src/cpp/analysis/libsciast_la-check_____dottimes____.lo \
        src/cpp/jit/libsciast_la-JITVisitor.lo \
+       src/cpp/jit/libsciast_la-Jitter.lo \
        src/cpp/jit/libsciast_la-JITComplexVal.lo \
        src/cpp/jit/libsciast_la-MemoryManager.lo \
        src/cpp/jit/libsciast_la-JITCallExp.lo \
@@ -637,6 +645,8 @@ am_libsciast_la_OBJECTS =  \
        src/cpp/jit/libsciast_la-JITBinOpCall.lo \
        src/cpp/jit/libsciast_la-JITUnaryOpCall.lo \
        src/cpp/jit/libsciast_la-JITOpExp.lo \
+       src/cpp/jit/libsciast_la-JITDoubleExp.lo \
+       src/cpp/jit/libsciast_la-JITAssignExp.lo \
        src/cpp/jit/libsciast_la-JITShortcutBinOpCall.lo \
        src/cpp/jit/libsciast_la-ShortcutEval.lo \
        src/cpp/jit/libsciast_la-JITIfExp.lo \
@@ -646,6 +656,7 @@ am_libsciast_la_OBJECTS =  \
        src/cpp/jit/libsciast_la-JITIntSelectExp.lo \
        src/cpp/jit/libsciast_la-JITOptimizedCall1.lo \
        src/cpp/jit/libsciast_la-JITMemfillExp.lo \
+       src/cpp/jit/libsciast_la-JITMatrixExp.lo \
        src/cpp/jit/libsciast_la-JITSign.lo \
        src/cpp/jit/libsciast_la-JITSqrt.lo \
        src/cpp/jit/libsciast_la-JITLog.lo \
@@ -670,10 +681,17 @@ am_libsciast_la_OBJECTS =  \
        src/cpp/jit/libsciast_la-JITNegation.lo \
        src/cpp/jit/libsciast_la-JITRDivision.lo \
        src/cpp/jit/libsciast_la-JITPower.lo \
+       src/cpp/jit/libsciast_la-JITTransposition.lo \
        src/cpp/jit/libsciast_la-FunctionSignature.lo \
        src/cpp/jit/libsciast_la-ScilabJITEventListener.lo \
        src/cpp/jit/libsciast_la-BaseFunctions1.lo \
-       src/cpp/jit/libsciast_la-BaseFunctions2.lo $(am__objects_1)
+       src/cpp/jit/libsciast_la-BaseFunctions2.lo \
+       src/cpp/jit/libsciast_la-BaseFunctions3.lo \
+       src/cpp/jit/libsciast_la-BaseFunctions4.lo \
+       src/cpp/jit/libsciast_la-BaseFunctions5.lo \
+       src/cpp/jit/libsciast_la-BaseFunctions6.lo \
+       src/cpp/jit/libsciast_la-JITMakeScilabCall.lo \
+       src/cpp/jit/libsciast_la-Debug.lo $(am__objects_1)
 libsciast_la_OBJECTS = $(am_libsciast_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -1050,6 +1068,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -1248,32 +1267,39 @@ libsciast_la_SOURCES = src/c/operations/doublecomplex.c \
        src/cpp/analysis/check_____ldivide____.cpp \
        src/cpp/analysis/check_acos.cpp \
        src/cpp/analysis/check_____dottimes____.cpp \
-       src/cpp/jit/JITVisitor.cpp src/cpp/jit/JITComplexVal.cpp \
-       src/cpp/jit/MemoryManager.cpp src/cpp/jit/JITCallExp.cpp \
-       src/cpp/jit/JITForExp.cpp src/cpp/jit/JITCall.cpp \
-       src/cpp/jit/JITSize.cpp src/cpp/jit/JITZeros.cpp \
-       src/cpp/jit/JITBinOpCall.cpp src/cpp/jit/JITUnaryOpCall.cpp \
-       src/cpp/jit/JITOpExp.cpp src/cpp/jit/JITShortcutBinOpCall.cpp \
+       src/cpp/jit/JITVisitor.cpp src/cpp/jit/Jitter.cpp \
+       src/cpp/jit/JITComplexVal.cpp src/cpp/jit/MemoryManager.cpp \
+       src/cpp/jit/JITCallExp.cpp src/cpp/jit/JITForExp.cpp \
+       src/cpp/jit/JITCall.cpp src/cpp/jit/JITSize.cpp \
+       src/cpp/jit/JITZeros.cpp src/cpp/jit/JITBinOpCall.cpp \
+       src/cpp/jit/JITUnaryOpCall.cpp src/cpp/jit/JITOpExp.cpp \
+       src/cpp/jit/JITDoubleExp.cpp src/cpp/jit/JITAssignExp.cpp \
+       src/cpp/jit/JITShortcutBinOpCall.cpp \
        src/cpp/jit/ShortcutEval.cpp src/cpp/jit/JITIfExp.cpp \
        src/cpp/jit/JITWhileExp.cpp \
        src/cpp/jit/JITBreakContinueExps.cpp \
        src/cpp/jit/JITSelectExp.cpp src/cpp/jit/JITIntSelectExp.cpp \
        src/cpp/jit/JITOptimizedCall1.cpp \
-       src/cpp/jit/JITMemfillExp.cpp src/cpp/jit/JITSign.cpp \
-       src/cpp/jit/JITSqrt.cpp src/cpp/jit/JITLog.cpp \
-       src/cpp/jit/JITAbs.cpp src/cpp/jit/JITAngle.cpp \
-       src/cpp/jit/JITReal.cpp src/cpp/jit/JITImag.cpp \
-       src/cpp/jit/JITImult.cpp src/cpp/jit/JITConj.cpp \
-       src/cpp/jit/JITFloor.cpp src/cpp/jit/JITCeil.cpp \
-       src/cpp/jit/JITRound.cpp src/cpp/jit/JITTicToc.cpp \
-       src/cpp/jit/JITAddition.cpp src/cpp/jit/JITSubtraction.cpp \
-       src/cpp/jit/JITOpposite.cpp src/cpp/jit/JITMultiplication.cpp \
-       src/cpp/jit/JITEquality.cpp src/cpp/jit/JITShortcutOps.cpp \
-       src/cpp/jit/JITNotEquality.cpp src/cpp/jit/JITComparisons.cpp \
-       src/cpp/jit/JITNegation.cpp src/cpp/jit/JITRDivision.cpp \
-       src/cpp/jit/JITPower.cpp src/cpp/jit/FunctionSignature.cpp \
+       src/cpp/jit/JITMemfillExp.cpp src/cpp/jit/JITMatrixExp.cpp \
+       src/cpp/jit/JITSign.cpp src/cpp/jit/JITSqrt.cpp \
+       src/cpp/jit/JITLog.cpp src/cpp/jit/JITAbs.cpp \
+       src/cpp/jit/JITAngle.cpp src/cpp/jit/JITReal.cpp \
+       src/cpp/jit/JITImag.cpp src/cpp/jit/JITImult.cpp \
+       src/cpp/jit/JITConj.cpp src/cpp/jit/JITFloor.cpp \
+       src/cpp/jit/JITCeil.cpp src/cpp/jit/JITRound.cpp \
+       src/cpp/jit/JITTicToc.cpp src/cpp/jit/JITAddition.cpp \
+       src/cpp/jit/JITSubtraction.cpp src/cpp/jit/JITOpposite.cpp \
+       src/cpp/jit/JITMultiplication.cpp src/cpp/jit/JITEquality.cpp \
+       src/cpp/jit/JITShortcutOps.cpp src/cpp/jit/JITNotEquality.cpp \
+       src/cpp/jit/JITComparisons.cpp src/cpp/jit/JITNegation.cpp \
+       src/cpp/jit/JITRDivision.cpp src/cpp/jit/JITPower.cpp \
+       src/cpp/jit/JITTransposition.cpp \
+       src/cpp/jit/FunctionSignature.cpp \
        src/cpp/jit/ScilabJITEventListener.cpp \
        src/cpp/jit/BaseFunctions1.cpp src/cpp/jit/BaseFunctions2.cpp \
+       src/cpp/jit/BaseFunctions3.cpp src/cpp/jit/BaseFunctions4.cpp \
+       src/cpp/jit/BaseFunctions5.cpp src/cpp/jit/BaseFunctions6.cpp \
+       src/cpp/jit/JITMakeScilabCall.cpp src/cpp/jit/Debug.cpp \
        $(am__append_1)
 libsciast_la_CPPFLAGS = \
        -I$(srcdir)/src/cpp \
@@ -2402,6 +2428,8 @@ src/cpp/jit/$(DEPDIR)/$(am__dirstamp):
        @: > src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
 src/cpp/jit/libsciast_la-JITVisitor.lo: src/cpp/jit/$(am__dirstamp) \
        src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-Jitter.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
 src/cpp/jit/libsciast_la-JITComplexVal.lo:  \
        src/cpp/jit/$(am__dirstamp) \
        src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
@@ -2425,6 +2453,10 @@ src/cpp/jit/libsciast_la-JITUnaryOpCall.lo:  \
        src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
 src/cpp/jit/libsciast_la-JITOpExp.lo: src/cpp/jit/$(am__dirstamp) \
        src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITDoubleExp.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITAssignExp.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
 src/cpp/jit/libsciast_la-JITShortcutBinOpCall.lo:  \
        src/cpp/jit/$(am__dirstamp) \
        src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
@@ -2448,6 +2480,8 @@ src/cpp/jit/libsciast_la-JITOptimizedCall1.lo:  \
 src/cpp/jit/libsciast_la-JITMemfillExp.lo:  \
        src/cpp/jit/$(am__dirstamp) \
        src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITMatrixExp.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
 src/cpp/jit/libsciast_la-JITSign.lo: src/cpp/jit/$(am__dirstamp) \
        src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
 src/cpp/jit/libsciast_la-JITSqrt.lo: src/cpp/jit/$(am__dirstamp) \
@@ -2501,6 +2535,9 @@ src/cpp/jit/libsciast_la-JITRDivision.lo: src/cpp/jit/$(am__dirstamp) \
        src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
 src/cpp/jit/libsciast_la-JITPower.lo: src/cpp/jit/$(am__dirstamp) \
        src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITTransposition.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
 src/cpp/jit/libsciast_la-FunctionSignature.lo:  \
        src/cpp/jit/$(am__dirstamp) \
        src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
@@ -2513,6 +2550,23 @@ src/cpp/jit/libsciast_la-BaseFunctions1.lo:  \
 src/cpp/jit/libsciast_la-BaseFunctions2.lo:  \
        src/cpp/jit/$(am__dirstamp) \
        src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-BaseFunctions3.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-BaseFunctions4.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-BaseFunctions5.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-BaseFunctions6.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITMakeScilabCall.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-Debug.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
 src/cpp/types/libsciast_la-inspector.lo:  \
        src/cpp/types/$(am__dirstamp) \
        src/cpp/types/$(DEPDIR)/$(am__dirstamp)
@@ -2704,10 +2758,16 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/ast/$(DEPDIR)/libsciast_la-visitor_common.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions1.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions2.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions3.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions4.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions5.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions6.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-Debug.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-FunctionSignature.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITAbs.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITAddition.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITAngle.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITAssignExp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITBinOpCall.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITBreakContinueExps.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITCall.Plo@am__quote@
@@ -2716,6 +2776,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITComparisons.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITComplexVal.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITConj.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITDoubleExp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITEquality.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITFloor.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITForExp.Plo@am__quote@
@@ -2724,6 +2785,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITImult.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITIntSelectExp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITLog.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITMakeScilabCall.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITMatrixExp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITMemfillExp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITMultiplication.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITNegation.Plo@am__quote@
@@ -2743,10 +2806,12 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITSqrt.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITSubtraction.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITTicToc.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITTransposition.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITUnaryOpCall.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITVisitor.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITWhileExp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITZeros.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-Jitter.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-MemoryManager.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-ScilabJITEventListener.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-ShortcutEval.Plo@am__quote@
@@ -4505,6 +4570,13 @@ src/cpp/jit/libsciast_la-JITVisitor.lo: src/cpp/jit/JITVisitor.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/jit/libsciast_la-JITVisitor.lo `test -f 'src/cpp/jit/JITVisitor.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITVisitor.cpp
 
+src/cpp/jit/libsciast_la-Jitter.lo: src/cpp/jit/Jitter.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/jit/libsciast_la-Jitter.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-Jitter.Tpo -c -o src/cpp/jit/libsciast_la-Jitter.lo `test -f 'src/cpp/jit/Jitter.cpp' || echo '$(srcdir)/'`src/cpp/jit/Jitter.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-Jitter.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-Jitter.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/Jitter.cpp' object='src/cpp/jit/libsciast_la-Jitter.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/jit/libsciast_la-Jitter.lo `test -f 'src/cpp/jit/Jitter.cpp' || echo '$(srcdir)/'`src/cpp/jit/Jitter.cpp
+
 src/cpp/jit/libsciast_la-JITComplexVal.lo: src/cpp/jit/JITComplexVal.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/jit/libsciast_la-JITComplexVal.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITComplexVal.Tpo -c -o src/cpp/jit/libsciast_la-JITComplexVal.lo `test -f 'src/cpp/jit/JITComplexVal.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITComplexVal.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITComplexVal.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITComplexVal.Plo
@@ -4575,6 +4647,20 @@ src/cpp/jit/libsciast_la-JITOpExp.lo: src/cpp/jit/JITOpExp.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/jit/libsciast_la-JITOpExp.lo `test -f 'src/cpp/jit/JITOpExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITOpExp.cpp
 
+src/cpp/jit/libsciast_la-JITDoubleExp.lo: src/cpp/jit/JITDoubleExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/jit/libsciast_la-JITDoubleExp.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITDoubleExp.Tpo -c -o src/cpp/jit/libsciast_la-JITDoubleExp.lo `test -f 'src/cpp/jit/JITDoubleExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITDoubleExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITDoubleExp.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITDoubleExp.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITDoubleExp.cpp' object='src/cpp/jit/libsciast_la-JITDoubleExp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/jit/libsciast_la-JITDoubleExp.lo `test -f 'src/cpp/jit/JITDoubleExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITDoubleExp.cpp
+
+src/cpp/jit/libsciast_la-JITAssignExp.lo: src/cpp/jit/JITAssignExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/jit/libsciast_la-JITAssignExp.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITAssignExp.Tpo -c -o src/cpp/jit/libsciast_la-JITAssignExp.lo `test -f 'src/cpp/jit/JITAssignExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITAssignExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITAssignExp.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITAssignExp.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITAssignExp.cpp' object='src/cpp/jit/libsciast_la-JITAssignExp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/jit/libsciast_la-JITAssignExp.lo `test -f 'src/cpp/jit/JITAssignExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITAssignExp.cpp
+
 src/cpp/jit/libsciast_la-JITShortcutBinOpCall.lo: src/cpp/jit/JITShortcutBinOpCall.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/jit/libsciast_la-JITShortcutBinOpCall.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITShortcutBinOpCall.Tpo -c -o src/cpp/jit/libsciast_la-JITShortcutBinOpCall.lo `test -f 'src/cpp/jit/JITShortcutBinOpCall.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITShortcutBinOpCall.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITShortcutBinOpCall.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITShortcutBinOpCall.Plo
@@ -4638,6 +4724,13 @@ src/cpp/jit/libsciast_la-JITMemfillExp.lo: src/cpp/jit/JITMemfillExp.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/jit/libsciast_la-JITMemfillExp.lo `test -f 'src/cpp/jit/JITMemfillExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITMemfillExp.cpp
 
+src/cpp/jit/libsciast_la-JITMatrixExp.lo: src/cpp/jit/JITMatrixExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/jit/libsciast_la-JITMatrixExp.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITMatrixExp.Tpo -c -o src/cpp/jit/libsciast_la-JITMatrixExp.lo `test -f 'src/cpp/jit/JITMatrixExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITMatrixExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITMatrixExp.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITMatrixExp.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITMatrixExp.cpp' object='src/cpp/jit/libsciast_la-JITMatrixExp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/jit/libsciast_la-JITMatrixExp.lo `test -f 'src/cpp/jit/JITMatrixExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITMatrixExp.cpp
+
 src/cpp/jit/libsciast_la-JITSign.lo: src/cpp/jit/JITSign.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/jit/libsciast_la-JITSign.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITSign.Tpo -c -o src/cpp/jit/libsciast_la-JITSign.lo `test -f 'src/cpp/jit/JITSign.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITSign.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITSign.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITSign.Plo
@@ -4806,6 +4899,13 @@ src/cpp/jit/libsciast_la-JITPower.lo: src/cpp/jit/JITPower.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/jit/libsciast_la-JITPower.lo `test -f 'src/cpp/jit/JITPower.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITPower.cpp
 
+src/cpp/jit/libsciast_la-JITTransposition.lo: src/cpp/jit/JITTransposition.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/jit/libsciast_la-JITTransposition.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITTransposition.Tpo -c -o src/cpp/jit/libsciast_la-JITTransposition.lo `test -f 'src/cpp/jit/JITTransposition.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITTransposition.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITTransposition.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITTransposition.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITTransposition.cpp' object='src/cpp/jit/libsciast_la-JITTransposition.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/jit/libsciast_la-JITTransposition.lo `test -f 'src/cpp/jit/JITTransposition.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITTransposition.cpp
+
 src/cpp/jit/libsciast_la-FunctionSignature.lo: src/cpp/jit/FunctionSignature.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/jit/libsciast_la-FunctionSignature.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-FunctionSignature.Tpo -c -o src/cpp/jit/libsciast_la-FunctionSignature.lo `test -f 'src/cpp/jit/FunctionSignature.cpp' || echo '$(srcdir)/'`src/cpp/jit/FunctionSignature.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-FunctionSignature.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-FunctionSignature.Plo
@@ -4834,6 +4934,48 @@ src/cpp/jit/libsciast_la-BaseFunctions2.lo: src/cpp/jit/BaseFunctions2.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/jit/libsciast_la-BaseFunctions2.lo `test -f 'src/cpp/jit/BaseFunctions2.cpp' || echo '$(srcdir)/'`src/cpp/jit/BaseFunctions2.cpp
 
+src/cpp/jit/libsciast_la-BaseFunctions3.lo: src/cpp/jit/BaseFunctions3.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/jit/libsciast_la-BaseFunctions3.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions3.Tpo -c -o src/cpp/jit/libsciast_la-BaseFunctions3.lo `test -f 'src/cpp/jit/BaseFunctions3.cpp' || echo '$(srcdir)/'`src/cpp/jit/BaseFunctions3.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions3.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions3.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/BaseFunctions3.cpp' object='src/cpp/jit/libsciast_la-BaseFunctions3.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/jit/libsciast_la-BaseFunctions3.lo `test -f 'src/cpp/jit/BaseFunctions3.cpp' || echo '$(srcdir)/'`src/cpp/jit/BaseFunctions3.cpp
+
+src/cpp/jit/libsciast_la-BaseFunctions4.lo: src/cpp/jit/BaseFunctions4.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/jit/libsciast_la-BaseFunctions4.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions4.Tpo -c -o src/cpp/jit/libsciast_la-BaseFunctions4.lo `test -f 'src/cpp/jit/BaseFunctions4.cpp' || echo '$(srcdir)/'`src/cpp/jit/BaseFunctions4.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions4.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions4.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/BaseFunctions4.cpp' object='src/cpp/jit/libsciast_la-BaseFunctions4.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/jit/libsciast_la-BaseFunctions4.lo `test -f 'src/cpp/jit/BaseFunctions4.cpp' || echo '$(srcdir)/'`src/cpp/jit/BaseFunctions4.cpp
+
+src/cpp/jit/libsciast_la-BaseFunctions5.lo: src/cpp/jit/BaseFunctions5.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/jit/libsciast_la-BaseFunctions5.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions5.Tpo -c -o src/cpp/jit/libsciast_la-BaseFunctions5.lo `test -f 'src/cpp/jit/BaseFunctions5.cpp' || echo '$(srcdir)/'`src/cpp/jit/BaseFunctions5.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions5.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions5.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/BaseFunctions5.cpp' object='src/cpp/jit/libsciast_la-BaseFunctions5.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/jit/libsciast_la-BaseFunctions5.lo `test -f 'src/cpp/jit/BaseFunctions5.cpp' || echo '$(srcdir)/'`src/cpp/jit/BaseFunctions5.cpp
+
+src/cpp/jit/libsciast_la-BaseFunctions6.lo: src/cpp/jit/BaseFunctions6.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/jit/libsciast_la-BaseFunctions6.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions6.Tpo -c -o src/cpp/jit/libsciast_la-BaseFunctions6.lo `test -f 'src/cpp/jit/BaseFunctions6.cpp' || echo '$(srcdir)/'`src/cpp/jit/BaseFunctions6.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions6.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions6.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/BaseFunctions6.cpp' object='src/cpp/jit/libsciast_la-BaseFunctions6.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/jit/libsciast_la-BaseFunctions6.lo `test -f 'src/cpp/jit/BaseFunctions6.cpp' || echo '$(srcdir)/'`src/cpp/jit/BaseFunctions6.cpp
+
+src/cpp/jit/libsciast_la-JITMakeScilabCall.lo: src/cpp/jit/JITMakeScilabCall.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/jit/libsciast_la-JITMakeScilabCall.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITMakeScilabCall.Tpo -c -o src/cpp/jit/libsciast_la-JITMakeScilabCall.lo `test -f 'src/cpp/jit/JITMakeScilabCall.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITMakeScilabCall.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITMakeScilabCall.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITMakeScilabCall.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITMakeScilabCall.cpp' object='src/cpp/jit/libsciast_la-JITMakeScilabCall.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/jit/libsciast_la-JITMakeScilabCall.lo `test -f 'src/cpp/jit/JITMakeScilabCall.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITMakeScilabCall.cpp
+
+src/cpp/jit/libsciast_la-Debug.lo: src/cpp/jit/Debug.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/jit/libsciast_la-Debug.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-Debug.Tpo -c -o src/cpp/jit/libsciast_la-Debug.lo `test -f 'src/cpp/jit/Debug.cpp' || echo '$(srcdir)/'`src/cpp/jit/Debug.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-Debug.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-Debug.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/Debug.cpp' object='src/cpp/jit/libsciast_la-Debug.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/cpp/jit/libsciast_la-Debug.lo `test -f 'src/cpp/jit/Debug.cpp' || echo '$(srcdir)/'`src/cpp/jit/Debug.cpp
+
 src/cpp/types/libsciast_la-inspector.lo: src/cpp/types/inspector.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libsciast_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/cpp/types/libsciast_la-inspector.lo -MD -MP -MF src/cpp/types/$(DEPDIR)/libsciast_la-inspector.Tpo -c -o src/cpp/types/libsciast_la-inspector.lo `test -f 'src/cpp/types/inspector.cpp' || echo '$(srcdir)/'`src/cpp/types/inspector.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/types/$(DEPDIR)/libsciast_la-inspector.Tpo src/cpp/types/$(DEPDIR)/libsciast_la-inspector.Plo
index c6a7d8f..fa39023 100644 (file)
@@ -403,7 +403,6 @@ lib /DEF:"$(ProjectDir)string_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClInclude Include="includes\jit\BaseFunctionsMacros3.h" />
     <ClInclude Include="includes\jit\base\addition.hxx" />
     <ClInclude Include="includes\jit\base\and.hxx" />
-    <ClInclude Include="includes\jit\base\binary.hxx" />
     <ClInclude Include="includes\jit\base\binary_functors.hxx" />
     <ClInclude Include="includes\jit\base\elem_functions.hxx" />
     <ClInclude Include="includes\jit\base\equal.hxx" />
@@ -411,15 +410,20 @@ lib /DEF:"$(ProjectDir)string_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClInclude Include="includes\jit\base\functors.hxx" />
     <ClInclude Include="includes\jit\base\greater_or_eq.hxx" />
     <ClInclude Include="includes\jit\base\greater_than.hxx" />
+    <ClInclude Include="includes\jit\base\IOArgs.hxx" />
     <ClInclude Include="includes\jit\base\ldivision.hxx" />
     <ClInclude Include="includes\jit\base\lower_or_eq.hxx" />
     <ClInclude Include="includes\jit\base\lower_than.hxx" />
+    <ClInclude Include="includes\jit\base\multiplication.hxx" />
+    <ClInclude Include="includes\jit\base\negation.hxx" />
     <ClInclude Include="includes\jit\base\not_equal.hxx" />
+    <ClInclude Include="includes\jit\base\opposite.hxx" />
     <ClInclude Include="includes\jit\base\or.hxx" />
     <ClInclude Include="includes\jit\base\product.hxx" />
     <ClInclude Include="includes\jit\base\rdivision.hxx" />
     <ClInclude Include="includes\jit\base\subtraction.hxx" />
     <ClInclude Include="includes\jit\base\tools.hxx" />
+    <ClInclude Include="includes\jit\base\transposition.hxx" />
     <ClInclude Include="includes\jit\base\vectorization.hxx" />
     <ClInclude Include="includes\jit\blocks\ShortcutEval.hxx" />
     <ClInclude Include="includes\jit\calls\FunCallInitializer.hxx" />
@@ -449,13 +453,16 @@ lib /DEF:"$(ProjectDir)string_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClInclude Include="includes\jit\calls\JITUnaryOpCall.hxx" />
     <ClInclude Include="includes\jit\calls\JITZeros.hxx" />
     <ClInclude Include="includes\jit\Cast.hxx" />
+    <ClInclude Include="includes\jit\Debug.hxx" />
     <ClInclude Include="includes\jit\Disassembler.hxx" />
     <ClInclude Include="includes\jit\funs_interf.h" />
     <ClInclude Include="includes\jit\JITArrayof.hxx" />
     <ClInclude Include="includes\jit\JITArrayofs.hxx" />
+    <ClInclude Include="includes\jit\JITInfo.hxx" />
     <ClInclude Include="includes\jit\JITScalar.hxx" />
     <ClInclude Include="includes\jit\JITScalars.hxx" />
     <ClInclude Include="includes\jit\JITScilabVal.hxx" />
+    <ClInclude Include="includes\jit\Jitter.hxx" />
     <ClInclude Include="includes\jit\JITVal.hxx" />
     <ClInclude Include="includes\jit\JITVisitor.hxx" />
     <ClInclude Include="includes\jit\MemoryManager.hxx" />
@@ -717,10 +724,16 @@ lib /DEF:"$(ProjectDir)string_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClCompile Include="src\cpp\ast\visitor_common.cpp" />
     <ClCompile Include="src\cpp\jit\BaseFunctions1.cpp" />
     <ClCompile Include="src\cpp\jit\BaseFunctions2.cpp" />
+    <ClCompile Include="src\cpp\jit\BaseFunctions3.cpp" />
+    <ClCompile Include="src\cpp\jit\BaseFunctions4.cpp" />
+    <ClCompile Include="src\cpp\jit\BaseFunctions5.cpp" />
+    <ClCompile Include="src\cpp\jit\BaseFunctions6.cpp" />
+    <ClCompile Include="src\cpp\jit\Debug.cpp" />
     <ClCompile Include="src\cpp\jit\FunctionSignature.cpp" />
     <ClCompile Include="src\cpp\jit\JITAbs.cpp" />
     <ClCompile Include="src\cpp\jit\JITAddition.cpp" />
     <ClCompile Include="src\cpp\jit\JITAngle.cpp" />
+    <ClCompile Include="src\cpp\jit\JITAssignExp.cpp" />
     <ClCompile Include="src\cpp\jit\JITBinOpCall.cpp" />
     <ClCompile Include="src\cpp\jit\JITBreakContinueExps.cpp" />
     <ClCompile Include="src\cpp\jit\JITCall.cpp" />
@@ -729,6 +742,7 @@ lib /DEF:"$(ProjectDir)string_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClCompile Include="src\cpp\jit\JITComparisons.cpp" />
     <ClCompile Include="src\cpp\jit\JITComplexVal.cpp" />
     <ClCompile Include="src\cpp\jit\JITConj.cpp" />
+    <ClCompile Include="src\cpp\jit\JITDoubleExp.cpp" />
     <ClCompile Include="src\cpp\jit\JITEquality.cpp" />
     <ClCompile Include="src\cpp\jit\JITFloor.cpp" />
     <ClCompile Include="src\cpp\jit\JITForExp.cpp" />
@@ -737,6 +751,8 @@ lib /DEF:"$(ProjectDir)string_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClCompile Include="src\cpp\jit\JITImult.cpp" />
     <ClCompile Include="src\cpp\jit\JITIntSelectExp.cpp" />
     <ClCompile Include="src\cpp\jit\JITLog.cpp" />
+    <ClCompile Include="src\cpp\jit\JITMakeScilabCall.cpp" />
+    <ClCompile Include="src\cpp\jit\JITMatrixExp.cpp" />
     <ClCompile Include="src\cpp\jit\JITMemfillExp.cpp" />
     <ClCompile Include="src\cpp\jit\JITMultiplication.cpp" />
     <ClCompile Include="src\cpp\jit\JITNegation.cpp" />
@@ -755,7 +771,9 @@ lib /DEF:"$(ProjectDir)string_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClCompile Include="src\cpp\jit\JITSize.cpp" />
     <ClCompile Include="src\cpp\jit\JITSqrt.cpp" />
     <ClCompile Include="src\cpp\jit\JITSubtraction.cpp" />
+    <ClCompile Include="src\cpp\jit\Jitter.cpp" />
     <ClCompile Include="src\cpp\jit\JITTicToc.cpp" />
+    <ClCompile Include="src\cpp\jit\JITTransposition.cpp" />
     <ClCompile Include="src\cpp\jit\JITUnaryOpCall.cpp" />
     <ClCompile Include="src\cpp\jit\JITVisitor.cpp" />
     <ClCompile Include="src\cpp\jit\JITWhileExp.cpp" />
index 41f3c41..a3299a6 100644 (file)
     <ClInclude Include="includes\jit\base\and.hxx">
       <Filter>Header Files\jit\base</Filter>
     </ClInclude>
-    <ClInclude Include="includes\jit\base\binary.hxx">
-      <Filter>Header Files\jit\base</Filter>
-    </ClInclude>
     <ClInclude Include="includes\jit\base\binary_functors.hxx">
       <Filter>Header Files\jit\base</Filter>
     </ClInclude>
     <ClInclude Include="includes\analysis\DollarInfo.hxx">
       <Filter>Header Files\analysis</Filter>
     </ClInclude>
+    <ClInclude Include="includes\jit\Debug.hxx">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\JITInfo.hxx">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\Jitter.hxx">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\IOArgs.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\multiplication.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\negation.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\opposite.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\transposition.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="src\cpp\ast\expHistory.cpp">
     <ClCompile Include="src\cpp\ast\prettyprintvisitor.cpp">
       <Filter>Source Files\ast</Filter>
     </ClCompile>
+    <ClCompile Include="src\cpp\jit\BaseFunctions3.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\BaseFunctions4.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\BaseFunctions5.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\BaseFunctions6.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITAssignExp.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITMakeScilabCall.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\Jitter.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITTransposition.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITDoubleExp.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITMatrixExp.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\Debug.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
   </ItemGroup>
 </Project>
\ No newline at end of file
index 27cc94b..ee1f8a5 100644 (file)
@@ -691,4 +691,4 @@ struct hash<analysis::TIType>
 };
 } // namespace std
 
-#endif // __TITYPE_HXX__
\ No newline at end of file
+#endif // __TITYPE_HXX__
index 7fbaab8..a8479ca 100644 (file)
@@ -1118,7 +1118,7 @@ inline void transp(double * X, const int64_t x_r, const int64_t x_c)
     }
 }
 
-inline void rdiv(double * X, const int64_t x_r, const int64_t x_c, double * Y, const int64_t y_r, const int64_t y_c, double ** O)
+/*inline void rdiv(double * X, const int64_t x_r, const int64_t x_c, double * Y, const int64_t y_r, const int64_t y_c, double ** O)
 {
     // TODO: deal with warning messages...
     // We know that x_c == y_c
@@ -1130,22 +1130,13 @@ inline void rdiv(double * X, const int64_t x_r, const int64_t x_c, double * Y, c
 
     const int64_t max = std::max(y_r, y_c);
     const int64_t min = std::min(y_r, y_c);
+    const int64_t size = y_r * y_c;
     int info;
     double * Xt = new double[max * x_r];
-    double * Yt = new double[y_c * y_r];
-    double * _O;
-    if (*O)
-    {
-        _O = *O;
-    }
-    else
-    {
-        _O = new double[x_r * y_r];
-        *O = _O;
-    }
+    double * Yt = new double[size];
 
-    oTransp(X, x_r, x_c, Xt, max, x_r);
-    oTransp(Y, y_r, y_c, Yt, y_c, y_r);
+    transposition::oTransp(X, x_r, x_c, Xt, max, x_r);
+    transposition::oTransp(Y, y_r, y_c, Yt, y_c, y_r);
 
     bool lsq = y_r != y_c;
     double * sYt = nullptr;
@@ -1159,8 +1150,8 @@ inline void rdiv(double * X, const int64_t x_r, const int64_t x_c, double * Y, c
         double norm1 = C2F(dlange)(&one, &y_r_i, &y_c_i, Y, &y_r_i, nullptr);
         int * pivot = new int[min];
         // Y is modified by dgetrf so we need to copy to use eventually in lsq method
-        sYt = new double[y_r * y_c];
-        memcpy(sYt, Yt, sizeof(double) * y_r * y_c);
+        sYt = new double[size];
+        memcpy(sYt, Yt, sizeof(double) * size);
         C2F(dgetrf)(&y_c_i, &y_r_i, Yt, &y_c_i, pivot, &info);
         if (info > 0)
         {
@@ -1183,8 +1174,7 @@ inline void rdiv(double * X, const int64_t x_r, const int64_t x_c, double * Y, c
             }
             else
             {
-                C2F(dgetrs)(&N/*o transpose*/, &y_c_i, &x_r_i, Yt, &y_c_i, pivot, Xt, &y_c_i, &info);
-                oTransp(Xt, max, x_r, _O, x_r, y_r);
+                C2F(dgetrs)(&N, &y_c_i, &x_r_i, Yt, &y_c_i, pivot, Xt, &y_c_i, &info);
             }
 
             delete[] pivot;
@@ -1197,7 +1187,7 @@ inline void rdiv(double * X, const int64_t x_r, const int64_t x_c, double * Y, c
     {
         int * jpvt = new int[y_r]();
         int max_i = (int)max;
-        double rcond = 10 * eps;
+        const double rcond = 10 * eps;
         int rank;
         int workMin = std::max(4 * y_c, std::max(min + 3 * y_r + 1, 2 * min + x_r));
         double * work = new double[workMin];
@@ -1213,14 +1203,20 @@ inline void rdiv(double * X, const int64_t x_r, const int64_t x_c, double * Y, c
             // useless
         }
 
-        oTransp(Xt, max, x_r, _O, x_r, y_r);
         delete[] jpvt;
         delete[] work;
     }
 
+    if (!*O)
+    {
+       *O = new double[x_r * y_r];
+    }
+    transposition::oTransp(Xt, max, x_r, *O, x_r, y_r);
+    
     delete[] Xt;
     delete[] Yt;
 }
+*/
 
 /*        template<>
         inline wchar_t * sum<wchar_t *, wchar_t *, wchar_t *>(wchar_t * x, wchar_t * y)
index 7349f0f..6ab68fc 100644 (file)
@@ -101,6 +101,42 @@ namespace jit
 
     private:
 
+       template<typename T>
+       struct __BitCastHelper
+       {
+           inline uint64_t operator()(T & x) const
+               {
+                   return (uint64_t)*reinterpret_cast<typename std::make_unsigned<T>::type *>(&x);
+               }
+       };
+
+       template<typename T>
+       struct __BitCastHelper<T *>
+       {
+           inline uint64_t operator()(T * & x) const
+               {
+                   return (uint64_t)((uintptr_t)x);
+               }
+       };
+
+    public:
+
+       template<typename T>
+       inline static uint64_t bit_cast(T && x)
+           {
+               T _x = x;
+               return __BitCastHelper<typename std::remove_reference<typename std::remove_cv<T>::type>::type>()(_x);
+           }
+
+       template<typename T>
+       inline static uint64_t bit_cast(const T & x)
+           {
+               return __BitCastHelper<typename std::remove_reference<typename std::remove_cv<T>::type>::type>()(x);
+           }
+
+
+    private:
+
         // First bool is for if typename is integral
         // Second is for if v is integral
         template<typename, bool, bool>
@@ -151,6 +187,15 @@ namespace jit
 
     };
 
+    template<>
+    struct jit::Cast::__BitCastHelper<double>
+    {
+       inline uint64_t operator()(const double & x) const
+           {
+               return *reinterpret_cast<const uint64_t *>(&x);
+           }
+    };
+
     // try to find the Scilab type in operation
     template<bool, bool, typename, typename>
     struct __ScilabType_Helper;
diff --git a/scilab/modules/ast/includes/jit/Debug.hxx b/scilab/modules/ast/includes/jit/Debug.hxx
new file mode 100644 (file)
index 0000000..5a7c8bc
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef __JIT_DEBUG_HXX__
+#define __JIT_DEBUG_HXX__
+
+namespace jit
+{
+
+    class JITVisitor;
+    
+    class Debug
+    {
+
+    public:
+
+       static void printI8(JITVisitor & jit, llvm::Value * x);
+       static void printUI8(JITVisitor & jit, llvm::Value * x);
+       static void printI16(JITVisitor & jit, llvm::Value * x);
+       static void printUI16(JITVisitor & jit, llvm::Value * x);
+       static void printI32(JITVisitor & jit, llvm::Value * x);
+       static void printUI32(JITVisitor & jit, llvm::Value * x);
+       static void printI64(JITVisitor & jit, llvm::Value * x);
+       static void printUI64(JITVisitor & jit, llvm::Value * x);
+       static void printD(JITVisitor & jit, llvm::Value * x);
+       static void printB(JITVisitor & jit, llvm::Value * x);
+
+    };
+
+} // namespace jit
+
+#endif // __JIT_DEBUG_HXX__
index 8f37fe1..6adbf4f 100644 (file)
@@ -24,27 +24,27 @@ namespace jit
     template<typename T>
     class JITArrayofT : public JITArrayof
     {
-       
+
     public:
-       
-       JITArrayofT(llvm::Value * const data, llvm::Value * const rows, llvm::Value * const cols, llvm::Value * const refCount, const std::string & name) : JITArrayof(data, rows, cols, refCount, name) { }
 
-       JITArrayofT(JITVisitor & jit, const std::string & name) : JITArrayof(jit.getAlloca<T *>(), jit.getAlloca<int64_t>(), jit.getAlloca<int64_t>(), jit.getAlloca<int64_t>(), name) { }
+        JITArrayofT(llvm::Value * const data, llvm::Value * const rows, llvm::Value * const cols, llvm::Value * const refCount, const std::string & name) : JITArrayof(data, rows, cols, refCount, name) { }
+
+        JITArrayofT(JITVisitor & jit, const std::string & name) : JITArrayof(jit.getAlloca<T *>(), jit.getAlloca<int64_t>(), jit.getAlloca<int64_t>(), jit.getAlloca<int64_t>(), name) { }
+
+        JITArrayofT(JITVisitor & jit, const std::string & name, const bool init) : JITArrayof(init ? jit.getValue((T *)nullptr, true) : jit.getAlloca<T *>(), init ? jit.getValue(int64_t(0), true) : jit.getAlloca<int64_t>(), init ? jit.getValue(int64_t(0), true) : jit.getAlloca<int64_t>(), init ? jit.getValue(int64_t(0), true) : jit.getAlloca<int64_t>(), name) { }
+
+        JITArrayofT(JITVisitor & jit, const T * data, const int64_t rows, const int64_t cols, const std::string & name) : JITArrayof(jit.getValue(data, true), jit.getValue(rows, true), jit.getValue(cols, true), jit.getValue<int64_t>(0), name) { }
 
-       JITArrayofT(JITVisitor & jit, const std::string & name, const bool init) : JITArrayof(init ? jit.getValue((T *)nullptr, true) : jit.getAlloca<T *>(), init ? jit.getValue(int64_t(0), true) : jit.getAlloca<int64_t>(), init ? jit.getValue(int64_t(0), true) : jit.getAlloca<int64_t>(), init ? jit.getValue(int64_t(0), true) : jit.getAlloca<int64_t>(), name) { }
-       
-       JITArrayofT(JITVisitor & jit, const T * data, const int64_t rows, const int64_t cols, const std::string & name) : JITArrayof(jit.getValue(data, true), jit.getValue(rows, true), jit.getValue(cols, true), jit.getValue<int64_t>(0), name) { }
-       
-       JITArrayofT(JITVisitor & jit, llvm::Value * const data, llvm::Value * const rows, llvm::Value * const cols, llvm::Value * const refCount, const std::string & name) : JITArrayof(jit, data, rows, cols, refCount, name) { }
+        JITArrayofT(JITVisitor & jit, llvm::Value * const data, llvm::Value * const rows, llvm::Value * const cols, llvm::Value * const refCount, const std::string & name) : JITArrayof(jit, data, rows, cols, refCount, name) { }
 
-       JITArrayofT(JITVisitor & jit, llvm::Value * const data, llvm::Value * const rows, llvm::Value * const cols, llvm::Value * const refCount, const bool alloc, const std::string & name) : JITArrayof(jit, data, rows, cols, refCount, alloc, name) { }
-       
-       virtual ~JITArrayofT() { }
+        JITArrayofT(JITVisitor & jit, llvm::Value * const data, llvm::Value * const rows, llvm::Value * const cols, llvm::Value * const refCount, const bool alloc, const std::string & name) : JITArrayof(jit, data, rows, cols, refCount, alloc, name) { }
 
-       bool isSigned() const override
-           {
-               return std::is_integral<T>::value && std::is_signed<T>::value;
-           }
+        virtual ~JITArrayofT() { }
+
+        bool isSigned() const override
+            {
+                return std::is_integral<T>::value && std::is_signed<T>::value;
+            }
 
     };
 
@@ -63,65 +63,74 @@ namespace jit
     class JITArrayofComplex : public JITArrayof
     {
 
-       llvm::Value * imag;
+        llvm::Value * imag;
 
     public:
-       
-       JITArrayofComplex(llvm::Value * const _real, llvm::Value * const _imag, llvm::Value * const _rows, llvm::Value * const _cols, llvm::Value * const _refCount, const std::string & _name) : JITArrayof(_real, _rows, _cols, _refCount, _name), imag(_imag)
-           {
-               if (!_name.empty())
-               {
-                   imag->setName(_name);
-               }
-           }
-
-       JITArrayofComplex(JITVisitor & jit, const std::string & name) : JITArrayof(jit.getAlloca<double *>(), jit.getAlloca<int64_t>(), jit.getAlloca<int64_t>(), jit.getAlloca<int64_t>(), name), imag(jit.getAlloca<double *>())
-           {
-               if (!name.empty())
-               {
-                   imag->setName(name);
-               }
-           }
-
-       JITArrayofComplex(JITVisitor & jit, const std::string & name, const bool init) : JITArrayof(init ? jit.getValue((double *)nullptr, true) : jit.getAlloca<double *>(), init ? jit.getValue(int64_t(0), true) : jit.getAlloca<int64_t>(), init ? jit.getValue(int64_t(0), true) : jit.getAlloca<int64_t>(), init ? jit.getValue(int64_t(0), true) : jit.getAlloca<int64_t>(), name), imag(init ? jit.getValue((double *)nullptr, true) : jit.getAlloca<double *>())
-           {
-               if (!name.empty())
-               {
-                   imag->setName(name);
-               }
-           }
-       
-       JITArrayofComplex(JITVisitor & jit, const double * _real, const double * _imag, const int64_t _rows, const int64_t _cols, const std::string & _name) : JITArrayof(jit.getValue(_real, true), jit.getValue(_rows, true), jit.getValue(_cols, true), jit.getValue<int64_t>(0), _name), imag(jit.getValue(imag, true))
-           {
-               if (!_name.empty())
-               {
-                   imag->setName(_name);
-               }
-           }
-       
-       JITArrayofComplex(JITVisitor & jit, llvm::Value * const _real, llvm::Value * const _imag, llvm::Value * const _rows, llvm::Value * const _cols, llvm::Value * const _refCount, const std::string & _name) : JITArrayof(jit, _real, _rows, _cols, _refCount, _name), imag(_imag)
-           {
-               if (!_name.empty())
-               {
-                   imag->setName(_name);
-               }
-           }
-
-       JITArrayofComplex(JITVisitor & jit, llvm::Value * const data, llvm::Value * const rows, llvm::Value * const cols, llvm::Value * const refCount, const bool alloc, const std::string & name) : JITArrayof(jit, data, rows, cols, refCount, alloc, name) { }
-       
-       virtual ~JITArrayofComplex() { }
-
-       llvm::Value * loadReal(JITVisitor & jit) override;
-       llvm::Value * loadImag(JITVisitor & jit) override;
-       llvm::Value * getImag(JITVisitor & jit) const override;
-       
-       std::pair<llvm::Value *, llvm::Value *> loadReIm(JITVisitor & jit) override;
-       void storeImag(JITVisitor & jit, llvm::Value * _imag) override;
-       void storeReIm(JITVisitor & jit, std::pair<llvm::Value *, llvm::Value *> reim) override;
-       void setImag(llvm::Value * imag) override;
+
+        JITArrayofComplex(llvm::Value * const _real, llvm::Value * const _imag, llvm::Value * const _rows, llvm::Value * const _cols, llvm::Value * const _refCount, const std::string & _name) : JITArrayof(_real, _rows, _cols, _refCount, _name), imag(_imag)
+            {
+                if (!_name.empty())
+                {
+                    imag->setName(_name);
+                }
+            }
+
+        JITArrayofComplex(JITVisitor & jit, const std::string & name) : JITArrayof(jit.getAlloca<double *>(), jit.getAlloca<int64_t>(), jit.getAlloca<int64_t>(), jit.getAlloca<int64_t>(), name), imag(jit.getAlloca<double *>())
+            {
+                if (!name.empty())
+                {
+                    imag->setName(name);
+                }
+            }
+
+        JITArrayofComplex(JITVisitor & jit, const std::string & name, const bool init) : JITArrayof(init ? jit.getValue((double *)nullptr, true) : jit.getAlloca<double *>(), init ? jit.getValue(int64_t(0), true) : jit.getAlloca<int64_t>(), init ? jit.getValue(int64_t(0), true) : jit.getAlloca<int64_t>(), init ? jit.getValue(int64_t(0), true) : jit.getAlloca<int64_t>(), name), imag(init ? jit.getValue((double *)nullptr, true) : jit.getAlloca<double *>())
+            {
+                if (!name.empty())
+                {
+                    imag->setName(name);
+                }
+            }
+
+        JITArrayofComplex(JITVisitor & jit, const double * _real, const double * _imag, const int64_t _rows, const int64_t _cols, const std::string & _name) : JITArrayof(jit.getValue(_real, true), jit.getValue(_rows, true), jit.getValue(_cols, true), jit.getValue<int64_t>(0), _name), imag(jit.getValue(_imag, true))
+            {
+                if (!_name.empty())
+                {
+                    imag->setName(_name);
+                }
+            }
+
+        JITArrayofComplex(JITVisitor & jit, llvm::Value * const _real, llvm::Value * const _imag, llvm::Value * const _rows, llvm::Value * const _cols, llvm::Value * const _refCount, const std::string & _name) : JITArrayof(jit, _real, _rows, _cols, _refCount, _name), imag(_imag)
+            {
+                if (!_name.empty())
+                {
+                    imag->setName(_name);
+                }
+            }
+
+        JITArrayofComplex(JITVisitor & jit, llvm::Value * const _real, llvm::Value * _imag, llvm::Value * const _rows, llvm::Value * const _cols, llvm::Value * const _refCount, const bool _alloc, const std::string & _name) : JITArrayof(jit, _real, _rows, _cols, _refCount, _alloc, _name), imag(jit.getValue(_imag, _alloc))
+            {
+                if (!_name.empty())
+                {
+                    imag->setName(_name);
+                }
+            }
+
+        virtual ~JITArrayofComplex() { }
+
+       bool isSigned() const override { return false; }
+       bool isComplex() const override { return true; }
+
+        llvm::Value * loadReal(JITVisitor & jit) override;
+        llvm::Value * loadImag(JITVisitor & jit) override;
+        llvm::Value * getImag(JITVisitor & jit) const override;
+
+        std::pair<llvm::Value *, llvm::Value *> loadReIm(JITVisitor & jit) override;
+        void storeImag(JITVisitor & jit, llvm::Value * _imag) override;
+        void storeReIm(JITVisitor & jit, std::pair<llvm::Value *, llvm::Value *> reim) override;
+        void setImag(llvm::Value * imag) override;
 
     };
-    
+
 }
 
 #endif // __JIT_ARRAYOFS_HXX__
diff --git a/scilab/modules/ast/includes/jit/JITInfo.hxx b/scilab/modules/ast/includes/jit/JITInfo.hxx
new file mode 100644 (file)
index 0000000..a81809a
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef __JIT_INFO_HXX__
+#define __JIT_INFO_HXX__
+
+#include "data/TITypeSignatureTuple.hxx"
+
+namespace jit
+{
+
+    class JITInfo
+    {
+       const std::string name;
+       analysis::TITypeSignatureTuple inSignature;
+       analysis::TITypeSignatureTuple outSignature;
+       void * wrapper;
+
+    public:
+
+       JITInfo(const std::string & _name) : name(_name), wrapper(nullptr) { }
+
+       inline const std::string & getName() const
+           {
+               return name;
+           }
+       
+       inline void setWrapper(void * _wrapper)
+           {
+               wrapper = _wrapper;
+           }
+
+       inline void * getWrapper() const
+           {
+               return wrapper;
+           }
+
+       inline void addToOutSignature(const bool scalar, const analysis::TIType::Type type)
+           {
+               outSignature.emplace(scalar, type);
+           }
+       
+       inline const analysis::TITypeSignatureTuple & getOutSignature() const
+           {
+               return outSignature;
+           }
+
+       inline void addToInSignature(const bool scalar, const analysis::TIType::Type type)
+           {
+               inSignature.emplace(scalar, type);
+           }
+       
+       inline const analysis::TITypeSignatureTuple & getInSignature() const
+           {
+               return inSignature;
+           }
+    };
+
+} // namespace jit
+
+#endif // __JIT_INFO_HXX__
index d1754e2..bee2d18 100644 (file)
@@ -96,6 +96,7 @@ namespace jit
        virtual ~JITScalComplex() { }
 
        bool isSigned() const override { return false; }
+       bool isComplex() const override { return true; }
 
        llvm::Value * loadReal(JITVisitor & jit) override;
        llvm::Value * loadImag(JITVisitor & jit) override;
@@ -106,6 +107,7 @@ namespace jit
        void storeReIm(JITVisitor & jit, std::pair<llvm::Value *, llvm::Value *> reim) override;
        void setImag(llvm::Value * imag) override;
        
+       
        static llvm::Type * getCpx128Ty(JITVisitor & jit);
     };
 }
index 20a9bf2..a7d383e 100644 (file)
@@ -58,6 +58,7 @@ namespace jit
        virtual void incRefCount(JITVisitor & jit) = 0;
        virtual void decRefCount(JITVisitor & jit) = 0;
        virtual bool isSigned() const = 0;
+       virtual bool isComplex() const { return false; }
     };
 
 }
index d4967df..3533938 100644 (file)
@@ -52,6 +52,7 @@
 #include "allexp.hxx"
 #include "allvar.hxx"
 #include "AnalysisVisitor.hxx"
+#include "JITInfo.hxx"
 
 #include "calls/JITBinOpCall.hxx"
 #include "calls/JITUnaryOpCall.hxx"
 namespace jit
 {
 
-#if defined(LLVM_VERSION_MAJOR) && LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR >= 7
-typedef llvm::legacy::FunctionPassManager LLVM_FunctionPassManager;
-#else
-typedef llvm::FunctionPassManager LLVM_FunctionPassManager;
-#endif
-
 class JITScilabVal;
 typedef std::shared_ptr<JITScilabVal> JITScilabPtr;
 
@@ -90,6 +85,7 @@ class EXTERN_AST JITVisitor : public ast::ConstVisitor, public analysis::FBlockE
             int32_t boolean;
             double cpx[2];
             void * ptr;
+           void * cpx_ptr[2];
         };
 
         analysis::TIType::Type type;
@@ -105,9 +101,6 @@ class EXTERN_AST JITVisitor : public ast::ConstVisitor, public analysis::FBlockE
 
     static const bool __init__;
 
-    const analysis::AnalysisVisitor & analysis;
-
-    std::string err;
     llvm::LLVMContext & context;
     llvm::Module * module;
     llvm::TargetMachine * target;
@@ -135,6 +128,7 @@ class EXTERN_AST JITVisitor : public ast::ConstVisitor, public analysis::FBlockE
     llvm::BasicBlock * returnBlock;
     llvm::BasicBlock * errorBlock;
 
+    uint64_t id;
     JITScilabPtr _result;
     JITScilabPtr cpx_rvalue;
     std::vector<JITScilabPtr> multipleLHS;
@@ -143,9 +137,10 @@ class EXTERN_AST JITVisitor : public ast::ConstVisitor, public analysis::FBlockE
     std::unordered_map<std::string, llvm::GlobalVariable *> globals;
     std::stack<std::pair<llvm::BasicBlock * , llvm::BasicBlock *>> blocks;
     std::queue<analysis::FunctionBlock *> fblocks;
-    std::unordered_map<std::string, analysis::FunctionBlock *> mapNameFBlock;
     std::unordered_map<std::string, llvm::Value *> specialVars;
-
+    std::unordered_map<std::string, llvm::Function *> llvmFunctions;
+    std::unordered_map<uint64_t, JITInfo> info;
+    
 public:
 
     JITAddition addition;
@@ -161,6 +156,7 @@ public:
     JITLowerOrEq lower_or_eq;
     JITGreaterOrEq greater_or_eq;
     JITNegation negation;
+    JITTransposition transposition;
     JITShortcutEq shortcut_eq;
     JITShortcutNe shortcut_ne;
     JITShortcutLt shortcut_lt;
@@ -168,12 +164,12 @@ public:
     JITShortcutLe shortcut_le;
     JITShortcutGe shortcut_ge;
 
-    JITVisitor(const analysis::AnalysisVisitor & _analysis);
+    JITVisitor();
     virtual ~JITVisitor();
 
     JITVisitor* clone()
     {
-        return new JITVisitor(analysis);
+        return new JITVisitor();
     }
 
     void run();
@@ -195,11 +191,11 @@ public:
         return nullptr;
     }
 
-    inline llvm::Type * getTy(const analysis::TIType & ty, const unsigned char level = 0) const
+    inline llvm::Type * getTy(const analysis::TIType::Type ty, const unsigned char level = 0) const
     {
         llvm::Type * lty;
 
-        switch (ty.type)
+        switch (ty)
         {
             case analysis::TIType::BOOLEAN:
                 lty = int32Ty;
@@ -243,6 +239,11 @@ public:
         return lty;
     }
 
+    inline llvm::Type * getTy(const analysis::TIType & ty, const unsigned char level = 0) const
+    {
+       return getTy(ty.type);
+    }
+
     inline unsigned int getTySizeInBytes(const llvm::Type * ty) const
     {
         return ty->isPointerTy() ? sizeof(void *) : (ty->getPrimitiveSizeInBits() / 8);
@@ -406,12 +407,9 @@ public:
     {
         if (id >= 0 && id < temps.size())
         {
-            return temps[id];
-        }
-        else
-        {
-            assert(false && " Bad temp id...");
+            return temps[id + 1];
         }
+       return temps[0];
     }
 
     inline void addGlobal(const std::string & name, llvm::GlobalVariable * gv)
@@ -449,17 +447,46 @@ public:
         return entryBlock;
     }
 
-    void makeCall(const std::wstring & name, const std::vector<types::InternalType *> & in, std::vector<types::InternalType *> & out);
+    inline void addFunction(const std::string & name, llvm::Function * F)
+    {
+       llvmFunctions.emplace(name, F);
+    }
+    
+    inline llvm::Function * getFunction(const std::string & name) const
+    {
+       auto i = llvmFunctions.find(name);
+       if (i != llvmFunctions.end())
+       {
+           return i->second;
+       }
+       return nullptr;
+    }
+
+    inline const JITInfo * getInfo(const uint64_t id)
+    {
+       auto i = info.find(id);
+       if (i != info.end())
+       {
+           return &(i->second);
+       }
+       return nullptr;
+    }
+
+    void makeCallFromScilab(const uint64_t functionId, const types::typed_list & in, types::typed_list & out);
 
     JITScilabPtr getScalar(llvm::Value * const value, const analysis::TIType::Type ty, const bool alloc = false, const std::string & name = "");
+    JITScilabPtr getCreatedScalar(llvm::Value * const value, const analysis::TIType::Type ty, const bool alloc = false, const std::string & name = "");
     JITScilabPtr getScalar(llvm::Value * const re, llvm::Value * const im, const analysis::TIType::Type ty, const bool alloc = false, const std::string & name = "");
     JITScilabPtr & getCpxRValue();
     JITScilabPtr getScalar(const analysis::TIType::Type ty, const bool isAnInt, const std::string & name);
     JITScilabPtr getScalar(const analysis::TypeLocal & ty, const std::string & name);
     JITScilabPtr getMatrix(llvm::Value * const value, llvm::Value * const rows, llvm::Value * const cols, llvm::Value * const refCount, const analysis::TIType::Type ty, const bool alloc, const std::string & name);
+    JITScilabPtr getMatrix(llvm::Value * const re, llvm::Value * const im, llvm::Value * const rows, llvm::Value * const cols, llvm::Value * const refCount, const analysis::TIType::Type ty, const bool alloc, const std::string & name);
     JITScilabPtr getMatrix(const analysis::TIType::Type ty, const std::string & name, const bool init = false);
     JITScilabPtr getMatrix(const analysis::TypeLocal & ty, const std::string & name, const bool init = false);
-
+    void reset();
+    void compile();
+    
     llvm::FunctionType * getFunctionType(const analysis::TIType & out, const std::vector<const analysis::TIType *> & types);
 
 private:
@@ -480,11 +507,25 @@ private:
     template<typename T, typename U>
     inline void makeArg(std::vector<llvm::Value *> & args, types::GenericType * pGT)
     {
-        T * x = (T *)static_cast<U *>(pGT)->get();
-        int64_t r = static_cast<U *>(pGT)->getRows();
-        int64_t c = static_cast<U *>(pGT)->getCols();
-        int64_t refc = static_cast<U *>(pGT)->getRef();
+        T * const x = (T *)static_cast<U *>(pGT)->get();
+        const int64_t r = pGT->getRows();
+        const int64_t c = pGT->getCols();
+        const int64_t refc = pGT->getRef();
+        args.emplace_back(getValue(x));
+        args.emplace_back(getValue(r));
+        args.emplace_back(getValue(c));
+        args.emplace_back(getValue(refc));
+    }
+
+    inline void makeCpxArg(std::vector<llvm::Value *> & args, types::Double * pDbl)
+    {
+        double * const x = pDbl->get();
+       double * const y = pDbl->getImg();
+        const int64_t r = pDbl->getRows();
+        const int64_t c = pDbl->getCols();
+        const int64_t refc = pDbl->getRef();
         args.emplace_back(getValue(x));
+       args.emplace_back(getValue(y));
         args.emplace_back(getValue(r));
         args.emplace_back(getValue(c));
         args.emplace_back(getValue(refc));
@@ -541,7 +582,6 @@ private:
     llvm::Type * getType(const analysis::TIType::Type ty, const bool scalar);
     llvm::Value * getPtrFromIndex(const ast::CallExp & ce);
     void runOptimizationPasses();
-    void compileModule();
     void cloneSyms(const ast::Exp & e);
     void makeSwitch(const ast::IntSelectExp & e, const std::map<int64_t, ast::Exp *> & map);
     void CreateBr(llvm::BasicBlock * bb);
diff --git a/scilab/modules/ast/includes/jit/Jitter.hxx b/scilab/modules/ast/includes/jit/Jitter.hxx
new file mode 100644 (file)
index 0000000..58b8709
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef __JIT_JITTER_HXX__
+#define __JIT_JITTER_HXX__
+
+#include "internal.hxx"
+
+namespace ast
+{
+    class CallExp;
+}
+
+namespace jit
+{
+
+    class JITVisitor;
+    
+    class Jitter
+    {
+    public:
+       
+       static bool analyzeAndJIT(const ast::CallExp & ce, const types::typed_list & in, types::typed_list & out);
+       
+    };
+}
+
+#endif // __JIT_JITTER_HXX__
diff --git a/scilab/modules/ast/includes/jit/base/IOArgs.hxx b/scilab/modules/ast/includes/jit/base/IOArgs.hxx
new file mode 100644 (file)
index 0000000..c27b676
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+*  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+*  Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
+*
+*  This file must be used under the terms of the CeCILL.
+*  This source file is licensed as described in the file COPYING, which
+*  you should have received as part of this distribution.  The terms
+*  are also available at
+*  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+*
+*/
+
+#include "internal.hxx"
+
+namespace jit
+{
+
+    template<typename T, typename U>
+    inline void push(void * list, const T x)
+    {
+       reinterpret_cast<types::typed_list *>(list)->push_back(new U(x));
+    }
+    
+}
index ab69f10..92beea4 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- *  Copyright (C) 2014 - Scilab Enterprises - Calixte DENIZET
+ *  Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
  *
  *  This file must be used under the terms of the CeCILL.
  *  This source file is licensed as described in the file COPYING, which
diff --git a/scilab/modules/ast/includes/jit/base/binary.hxx b/scilab/modules/ast/includes/jit/base/binary.hxx
deleted file mode 100644 (file)
index 1fcd843..0000000
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- *  Copyright (C) 2014 - Scilab Enterprises - Calixte DENIZET
- *
- *  This file must be used under the terms of the CeCILL.
- *  This source file is licensed as described in the file COPYING, which
- *  you should have received as part of this distribution.  The terms
- *  are also available at
- *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
- *
- */
-
-#ifndef __BASE_BINARIES_HXX__
-#define __BASE_BINARIES_HXX__
-
-#include <complex>
-
-#include "Cast.hxx"
-#include "tools.hxx"
-
-namespace jit
-{
-    namespace vect
-    {
-
-       template<typename F, typename T, typename U, typename V>
-        inline void binary(WrapVecIn<T> && x, WrapVecIn<U> && y, const int64_t size, WrapOut<V> && o)
-        {
-           WrapPtr<V> _o = getPtr(o, size);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                _o[i] = F()(x[i], y[i]);
-            }
-        }
-
-/*        template<typename T, typename U, typename V, V (F)(T, U)>
-        inline void bin_MMM(const T * x, const int64_t x_r, const int64_t x_c, const U * y, const int64_t y_r, const int64_t y_c, V ** o)
-        {
-            const int64_t size = x_r * x_c;
-            V * _o = getPtr(o, size);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                _o[i] = F(x[i], y[i]);
-            }
-        }
-
-        // TODO: implement it correctly
-        // i.e.: add error management when dims are incorrect
-        template<typename T, typename U, typename V, V (F)(T, U)>
-        inline void bin_UUU(const T * x, const int64_t x_r, const int64_t x_c, const U * y, const int64_t y_r, const int64_t y_c, V ** o)
-        {
-            bin_MMM<T, U, V, F>(x, x_r, x_c, y, y_r, y_c, o);
-        }
-
-        template<typename T, typename U, typename V, V (F)(T, U)>
-        inline void bin_SMM(const T x, const U * y, const int64_t y_r, const int64_t y_c, V ** o)
-        {
-            const int64_t size = y_r * y_c;
-            V * _o = getPtr(o, size);
-           for (int64_t i = 0; i < size; ++i)
-            {
-                _o[i] = F(x, y[i]);
-            }
-        }
-
-        template<typename T, typename U, typename V, V (F)(T, U)>
-        inline void bin_MSM(const T * x, const int64_t x_r, const int64_t x_c, const U y, V ** o)
-        {
-            const int64_t size = x_r * x_c;
-            V * _o = getPtr(o, size);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                _o[i] = F(x[i], y);
-            }
-        }
-
-        template<std::complex<double> (CPXCPX)(const std::complex<double> const std::complex<double>, const std::complex<double> const std::complex<double>)>
-        inline void bin_McMcMc(const double * x_re, const double * x_im, const int64_t x_r, const int64_t x_c, const double * y_re, const double * y_im, const int64_t y_r, const int64_t y_c, double ** o_re, double ** o_im)
-        {
-            const int64_t size = x_r * x_c;
-            double * _o_re = getPtr(o_re, size);
-            double * _o_im = getPtr(o_im, size);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                const std::complex<double> const std::complex<double> z = CPXCPX(std::complex<double>(x_re[i], x_im[i]), std::complex<double>(y_re[i], y_im[i]));
-                _o_re[i] = z.real();
-                _o_im[i] = z.imag();
-            }
-        }
-
-        template<typename T, std::complex<double> (RECPX)(T, const std::complex<double> const std::complex<double>)>
-        inline void bin_MMcMc(const T * x, const int64_t x_r, const int64_t x_c, const double * y_re, const double * y_im, const int64_t y_r, const int64_t y_c, double ** o_re, double ** o_im)
-        {
-           const int64_t size = x_r * x_c;
-            double * _o_re = getPtr(o_re, size);
-            double * _o_im = getPtr(o_im, size);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                const std::complex<double> const std::complex<double> z = RECPX(x[i], std::complex<double>(y_re[i], y_im[i]));
-                _o_re[i] = z.real();
-                _o_im[i] = z.imag();
-            }
-        }
-
-        template<typename T, std::complex<double> (RECPX)(T, const std::complex<double> const std::complex<double>)>
-        inline void bin_SMcMc(const T x, const double * y_re, const double * y_im, const int64_t y_r, const int64_t y_c, double ** o_re, double ** o_im)
-        {
-           const int64_t size = y_r * y_c;
-            double * _o_re = getPtr(o_re, size);
-            double * _o_im = getPtr(o_im, size);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                const std::complex<double> const std::complex<double> z = RECPX(x, std::complex<double>(y_re[i], y_im[i]));
-                _o_re[i] = z.real();
-                _o_im[i] = z.imag();
-            }
-        }
-
-        template<typename T, std::complex<double> (CPXRE)(const std::complex<double> const std::complex<double>, T)>
-        inline void bin_McMMc(const double * x_re, const double * x_im, const int64_t x_r, const int64_t x_c, const T * y, const int64_t y_r, const int64_t y_c, double ** o_re, double ** o_im)
-        {
-           const int64_t size = x_r * x_c;
-            double * _o_re = getPtr(o_re, size);
-            double * _o_im = getPtr(o_im, size);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                const std::complex<double> const std::complex<double> z = CPXRE(std::complex<double>(x_re[i], x_im[i]), y[i]);
-                _o_re[i] = z.real();
-                _o_im[i] = z.imag();
-            }
-        }
-       
-        template<std::complex<double> (CPXCPX)(const std::complex<double> const std::complex<double>, const std::complex<double> const std::complex<double>)>
-        inline void bin_ScMcMc(const double x_re, const double x_im, const double * y_re, const double * y_im, const int64_t y_r, const int64_t y_c, double ** o_re, double ** o_im)
-        {
-           const int64_t size = y_r * y_c;
-            double * _o_re = getPtr(o_re, size);
-            double * _o_im = getPtr(o_im, size);
-           const std::complex<double> const std::complex<double> z1(x_re, x_im);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                const std::complex<double> const std::complex<double> z = CPXCPX(z1, std::complex<double>(y_re[i], y_im[i]));
-                _o_re[i] = z.real();
-                _o_im[i] = z.imag();
-            }
-        }
-
-        template<std::complex<double> (CPXCPX)(const std::complex<double> const std::complex<double>, const std::complex<double> const std::complex<double>)>
-        inline void bin_McScMc(const double * x_re, const double * x_im, const int64_t x_r, const int64_t x_c, const double y_re, const double y_im, double ** o_re, double ** o_im)
-        {
-            const int64_t size = x_r * x_c;
-           double * _o_re = getPtr(o_re, size);
-            double * _o_im = getPtr(o_im, size);
-           const std::complex<double> const std::complex<double> z1(y_re, y_im);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                const std::complex<double> const std::complex<double> z = CPXCPX(std::complex<double>(x_re[i], x_im[i]), z1);
-                _o_re[i] = z.real();
-                _o_im[i] = z.imag();
-            }
-        }
-       
-        template<typename T, std::complex<double> (CPXRE)(const std::complex<double> const std::complex<double>, T)>
-        inline void bin_McSMc(const double * x_re, const double * x_im, const int64_t x_r, const int64_t x_c, const T y, double ** o_re, double ** o_im)
-        {
-            const int64_t size = x_r * x_c;
-           double * _o_re = getPtr(o_re, size);
-            double * _o_im = getPtr(o_im, size);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                const std::complex<double> const std::complex<double> z = CPXRE(std::complex<double>(x_re[i], x_im[i]), y);
-                _o_re[i] = z.real();
-                _o_im[i] = z.imag();
-            }
-        }
-
-        template<typename T, std::complex<double> (CPXRE)(const std::complex<double> const std::complex<double>, const std::complex<double> const std::complex<double>)>
-        inline void bin_ScMMc(const double x_re, const double x_im, const T * y, const int64_t y_r, const int64_t y_c, double ** o_re, double ** o_im)
-        {
-            const int64_t size = y_r * y_c;
-           double * _o_re = getPtr(o_re, size);
-            double * _o_im = getPtr(o_im, size);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                const std::complex<double> const std::complex<double> z = CPXRE(std::complex<double>(x_re, x_im), y[i]);
-                _o_re[i] = z.real();
-                _o_im[i] = z.imag();
-            }
-        }
-
-       template<typename T, std::complex<double> (RECPX)(T, const std::complex<double> const std::complex<double>)>
-        inline void bin_MScMc(const T * x, const int64_t x_r, const int64_t x_c, const double y_re, const double y_im, double ** o_re, double ** o_im)
-        {
-            const int64_t size = x_r * x_c;
-           double * _o_re = getPtr(o_re, size);
-            double * _o_im = getPtr(o_im, size);
-           const std::complex<double> const std::complex<double> z1(y_re, y_im);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                const std::complex<double> const std::complex<double> z = RECPX(x[i], z1);
-                _o_re[i] = z.real();
-                _o_im[i] = z.imag();
-            }
-        }
-
-       // FUCK
-       template<typename T, T (CPXCPX)(const std::complex<double> const std::complex<double>, const std::complex<double> const std::complex<double>)>
-        inline void bin_McMcM(const double * x_re, const double * x_im, const int64_t x_r, const int64_t x_c, const double * y_re, const double * y_im, const int64_t y_r, const int64_t y_c, T ** o)
-        {
-            const int64_t size = x_r * x_c;
-            T * _o = getPtr(o, size);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                _o[i] = CPXCPX(std::complex<double>(x_re[i], x_im[i]), std::complex<double>(y_re[i], y_im[i]));
-            }
-        }
-
-        template<typename T, typename U, U (RECPX)(T, const std::complex<double> const std::complex<double>)>
-        inline void bin_MMcM(const T * x, const int64_t x_r, const int64_t x_c, const double * y_re, const double * y_im, const int64_t y_r, const int64_t y_c, U ** o)
-        {
-           const int64_t size = x_r * x_c;
-            U * _o = getPtr(o, size);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                _o[i] = RECPX(x[i], std::complex<double>(y_re[i], y_im[i]));
-            }
-        }
-
-        template<typename T, typename U, U (RECPX)(T, const std::complex<double> const std::complex<double>)>
-        inline void bin_SMcM(const T x, const double * y_re, const double * y_im, const int64_t y_r, const int64_t y_c, U ** o)
-        {
-           const int64_t size = y_r * y_c;
-            U * _o = getPtr(o, size);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                _o[i] = RECPX(x, std::complex<double>(y_re[i], y_im[i]));
-            }
-        }
-
-        template<typename T, typename U, U (CPXRE)(const std::complex<double> const std::complex<double>, T)>
-        inline void bin_McMM(const double * x_re, const double * x_im, const int64_t x_r, const int64_t x_c, const T * y, const int64_t y_r, const int64_t y_c, U ** o)
-        {
-           const int64_t size = x_r * x_c;
-            U * _o = getPtr(o, size);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                _o[i] = CPXRE(std::complex<double>(x_re[i], x_im[i]), y[i]);
-            }
-        }
-       
-        template<typename T, T (CPXCPX)(const std::complex<double> const std::complex<double>, const std::complex<double> const std::complex<double>)>
-        inline void bin_ScMcM(const double x_re, const double x_im, const double * y_re, const double * y_im, const int64_t y_r, const int64_t y_c, T ** o)
-        {
-           const int64_t size = y_r * y_c;
-            T * _o = getPtr(o, size);
-            const std::complex<double> const std::complex<double> z1(x_re, x_im);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                _o[i] = CPXCPX(z1, std::complex<double>(y_re[i], y_im[i]));
-            }
-        }
-
-        template<typename T, T (CPXCPX)(const std::complex<double> const std::complex<double>, const std::complex<double> const std::complex<double>)>
-        inline void bin_McScM(const double * x_re, const double * x_im, const int64_t x_r, const int64_t x_c, const double y_re, const double y_im, T ** o)
-        {
-            const int64_t size = x_r * x_c;
-           T * _o = getPtr(o, size);
-           const std::complex<double> const std::complex<double> z1(y_re, y_im);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                _o[i] = CPXCPX(std::complex<double>(x_re[i], x_im[i]), z1);
-            }
-        }
-       
-        template<typename T, typename U, U (CPXRE)(const std::complex<double> const std::complex<double>, T)>
-        inline void bin_McSM(const double * x_re, const double * x_im, const int64_t x_r, const int64_t x_c, const T y, U ** o)
-        {
-            const int64_t size = x_r * x_c;
-           U * _o = getPtr(o, size);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                _o[i] = CPXRE(std::complex<double>(x_re[i], x_im[i]), y);
-            }
-        }
-
-        template<typename T, typename U, U (CPXRE)(const std::complex<double> const std::complex<double>, const std::complex<double> const std::complex<double>)>
-        inline void bin_ScMM(const double x_re, const double x_im, const T * y, const int64_t y_r, const int64_t y_c, U ** o)
-        {
-            const int64_t size = y_r * y_c;
-           U * _o = getPtr(o, size);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                _o[i] = CPXRE(std::complex<double>(x_re, x_im), y[i]);
-            }
-        }
-
-       template<typename T, typename U, U (RECPX)(T, const std::complex<double> const std::complex<double>)>
-        inline void bin_MScM(const T * x, const int64_t x_r, const int64_t x_c, const double y_re, const double y_im, U ** o)
-        {
-            const int64_t size = x_r * x_c;
-           U * _o = getPtr(o, size);
-            const std::complex<double> const std::complex<double> z1(y_re, y_im);
-            for (int64_t i = 0; i < size; ++i)
-            {
-                _o[i] = RECPX(x[i], z1);
-            }
-        }
-*/
-
-    } // namespace BaseFunctions
-
-} // namespace jit
-
-#endif // __BASE_BINARIES_HXX__
index a5d57e5..a4e138b 100644 (file)
@@ -33,58 +33,58 @@ namespace jit
 {
     namespace functors
     {
-       template<typename T, typename U, typename V, typename Functor>
+       template<typename Functor>
        struct Binary
        {
            
-           template<typename W, typename X, typename Y>
-           inline void operator()(jit::vect::WrapVecIn<W> && x, jit::vect::WrapVecIn<X> && y, jit::vect::WrapOut<Y> && o, const int64_t i)
+           template<typename T, typename U, typename V>
+           inline void operator()(jit::vect::WrapVecIn<T> && x, jit::vect::WrapVecIn<U> && y, jit::vect::WrapOut<V> && o, const int64_t i)
                {
                    o[i] = Functor()(x[i], y[i]);
                }
        };
 
        template<typename T, typename U, typename V>
-       using add = Binary<T, U, V, jit::op::Add<T, U, V>>;
+       using add = Binary<jit::op::Add<T, U, V>>;
 
        template<typename T, typename U, typename V>
-       using sub = Binary<T, U, V, jit::op::Sub<T, U, V>>;
+       using sub = Binary<jit::op::Sub<T, U, V>>;
 
        template<typename T, typename U, typename V>
-       using dottimes = Binary<T, U, V, jit::op::Prod<T, U, V>>;
+       using dottimes = Binary<jit::op::Prod<T, U, V>>;
 
        template<typename T, typename U, typename V>
-       using dotpower = Binary<T, U, V, jit::op::Pow<T, U, V>>;
+       using dotpower = Binary<jit::op::Pow<T, U, V>>;
 
        template<typename T, typename U, typename V>
-       using dotldiv = Binary<T, U, V, jit::op::Ldiv<T, U, V>>;
+       using dotldiv = Binary<jit::op::Ldiv<T, U, V>>;
 
        template<typename T, typename U, typename V>
-       using dotrdiv = Binary<T, U, V, jit::op::Rdiv<T, U, V>>;
+       using dotrdiv = Binary<jit::op::Rdiv<T, U, V>>;
 
        template<typename T, typename U, typename V>
-       using neq = Binary<T, U, V, jit::op::Neq<T, U, V>>;
+       using neq = Binary<jit::op::Neq<T, U, V>>;
 
        template<typename T, typename U, typename V>
-       using eq = Binary<T, U, V, jit::op::Eq<T, U, V>>;
+       using eq = Binary<jit::op::Eq<T, U, V>>;
 
        template<typename T, typename U, typename V>
-       using gt = Binary<T, U, V, jit::op::Gt<T, U, V>>;
+       using gt = Binary<jit::op::Gt<T, U, V>>;
 
        template<typename T, typename U, typename V>
-       using ge = Binary<T, U, V, jit::op::Ge<T, U, V>>;
+       using ge = Binary<jit::op::Ge<T, U, V>>;
 
        template<typename T, typename U, typename V>
-       using lt = Binary<T, U, V, jit::op::Lt<T, U, V>>;
+       using lt = Binary<jit::op::Lt<T, U, V>>;
 
        template<typename T, typename U, typename V>
-       using le = Binary<T, U, V, jit::op::Le<T, U, V>>;
+       using le = Binary<jit::op::Le<T, U, V>>;
 
        template<typename T, typename U, typename V>
-       using And = Binary<T, U, V, jit::op::And<T, U, V>>;
+       using And = Binary<jit::op::And<T, U, V>>;
 
        template<typename T, typename U, typename V>
-       using Or = Binary<T, U, V, jit::op::Or<T, U, V>>;
+       using Or = Binary<jit::op::Or<T, U, V>>;
        
     } // namespace functors
 
index 7837f87..e9fed03 100644 (file)
 #include <complex>
 
 #include "Cast.hxx"
-
+#include "base/multiplication.hxx"
+#include "base/rdivision.hxx"
+#include "base/tools.hxx"
 
 namespace jit
 {
     namespace op
     {
 
-       template<typename T, typename U, typename V>
-       struct Pow
+        template<typename T, typename U, typename V>
+        struct Pow
+        {
+
+            inline V operator()(T x, U y)
+                {
+                    return (V)std::pow((V)x, (V)y);
+                }
+        };
+
+        template<typename U>
+        struct Pow<const std::complex<double> &, U, std::complex<double>>
+        {
+
+            inline std::complex<double> operator()(const std::complex<double> & x, U y)
+            {
+                return std::pow(x, (double)y);
+            }
+        };
+
+        template<typename T>
+        struct Pow<T, const std::complex<double> &, std::complex<double>>
+        {
+
+            inline std::complex<double> operator()(T x, const std::complex<double> & y)
+            {
+                return std::pow((double)x, y);
+            }
+        };
+
+        template<>
+        struct Pow<const std::complex<double> &, const std::complex<double> &, std::complex<double>>
+        {
+
+            inline std::complex<double> operator()(const std::complex<double> & x, const std::complex<double> & y)
+            {
+                return std::pow(x, y);
+            }
+        };
+
+    } // namespace op
+
+    namespace exponentiation
+    {
+
+       template<typename T>
+       inline void SQ22(T * x)
        {
+           const T bc = x[1] * x[2];
+           const T a_d = x[0] + x[3];
+           x[0] = x[0] * x[0] + bc;
+           x[1] *= a_d;
+           x[2] *= a_d;
+           x[3] = x[3] * x[3] + bc;
+       }
 
-           inline V operator()(T x, U y)
-               {
-                   return (V)std::pow((V)x, (V)y);
-               }
-       };
+       template<typename T>
+        inline void POWM22(T * x, uint64_t n)
+        {
+            switch (n)
+            {
+            case 0:
+                x[0] = x[3] = 1;
+                x[1] = x[2] = 0;
+                return;
+            case 1:
+                return;
+            case 2:
+            {
+                SQ22(x);
+                return;
+            }
+            default:
+            {
+                T y0, y1, y2, y3;
+                if (n & 1)
+                {
+                    y0 = x[0];
+                    y1 = x[1];
+                    y2 = x[2];
+                    y3 = x[3];
+                }
+                else
+                {
+                    y0 = 1;
+                    y1 = 0;
+                    y2 = 0;
+                    y3 = 1;
+                }
+
+                while (n >>= 1)
+                {
+                    SQ22(x);
+                    if (n & 1)
+                    {
+                        T a, b;
+                        a = y0 * x[0] + y2 * x[1];
+                        y2 = y0 * x[2] + y2 * x[3];
+                        b = y1 * x[0] + y3 * x[1];
+                        y3 = y1 * x[2] + y3 * x[3];
+                        y0 = a;
+                        y1 = b;
+                    }
+
+                }
+
+                x[0] = y0;
+                x[1] = y1;
+                x[2] = y2;
+                x[3] = y3;
+            }
+            }
+        }
+
+        inline void POWM(const double * x, const int64_t x_r, double * o, uint64_t n)
+        {
+            /*
+              This is not exactly the fast pow algorithm.
+              I slightly modified it to avoid the dcopys.
+              The idea is easy: we want the result in o so
+              if N is even then o = t1*t1 else o=x*t1 and t1=o*o
+              and we can replace n by n/2.
+              If we were in the first case and n is even then t1=o*o
+              else o=x*t1 and t1=o*o,...
+              So to generate the dgemms we need to begin with the most signifiant bit.
+              For example:
+              C2F(dgemm)(&n, &n, &x_r, &x_r, &x_r, &one, x, &x_r, x, &x_r, &zero, o, &x_r); // x^2
+              C2F(dgemm)(&n, &n, &x_r, &x_r, &x_r, &one, x, &x_r, o, &x_r, &zero, t1, &x_r); // x^3
+              C2F(dgemm)(&n, &n, &x_r, &x_r, &x_r, &one, t1, &x_r, t1, &x_r, &zero, o, &x_r); // x^6
+              C2F(dgemm)(&n, &n, &x_r, &x_r, &x_r, &one, o, &x_r, o, &x_r, &zero, t1, &x_r); // x^12
+              C2F(dgemm)(&n, &n, &x_r, &x_r, &x_r, &one, x, &x_r, t1, &x_r, &zero, o, &x_r); // x^13
+
+              The goal is to have one temp array, no memcpy and the final multiplication must put its result in o.
+            */
+
+            if (x_r == 2)
+            {
+               o[0] = x[0];
+               o[1] = x[1];
+               o[2] = x[2];
+               o[3] = x[3];
+                POWM22(o, n);
+                return;
+            }
+
+            const int64_t size = x_r * x_r;
+            int x_r_i = (int)x_r;
+
+            switch (n)
+            {
+            case 0:
+            {
+                // Identity matrix
+                std::memset(o, 0, size * sizeof(double));
+                for (int64_t i = 0; i < x_r; ++i)
+                {
+                    o[i * (x_r + 1)] = 1;
+                }
+                return;
+            }
+            case 1:
+            {
+                // x itself
+                std::memcpy(o, x, size * sizeof(double));
+                return;
+            }
+            case 2:
+            {
+                multiplication::DGEMM(x, x_r_i, x_r_i, x_r_i, x, o);
+                return;
+            }
+            default:
+                break;
+            }
+
+            //const unsigned int nbits = 8 * sizeof(uint64_t) - __builtin_clzll(n);
+            //const bool parity = (nbits - __builtin_popcountll(n)) & 1;
+            const unsigned int nbits = 8 * sizeof(uint64_t) - analysis::tools::clzll(n);
+            const bool parity = (nbits - analysis::tools::popcount(n)) & 1;
+            unsigned int mask = 1 << (nbits - 2);
+            double * tmp = new double[size];
+
+            // Trip cost is [log2(n)] (=nbits-1)
+            // Except the most signifiant bit, for each 1 in binary representation of n we have 2 dgemms
+            // and for each 0 we have 1 dgemm.
+            // E.g. for n=13=0x1101, the cost is 2 * 2 + 1 dgemms.
+
+            if (n & mask)
+            {
+                if (parity)
+                {
+                    multiplication::DGEMM(x, x_r_i, x_r_i, x_r_i, x, o);
+                    multiplication::DGEMM(x, x_r_i, x_r_i, x_r_i, o, tmp);
+                    std::swap(o, tmp);
+                }
+                else
+                {
+                    multiplication::DGEMM(x, x_r_i, x_r_i, x_r_i, x, tmp);
+                    multiplication::DGEMM(x, x_r_i, x_r_i, x_r_i, tmp, o);
+                }
+            }
+            else
+            {
+                if (parity)
+                {
+                    multiplication::DGEMM(x, x_r_i, x_r_i, x_r_i, x, o);
+                }
+                else
+                {
+                    multiplication::DGEMM(x, x_r_i, x_r_i, x_r_i, x, tmp);
+                    std::swap(o, tmp);
+                }
+            }
+
+            while (mask >>= 1)
+            {
+                multiplication::DGEMM(o, x_r_i, x_r_i, x_r_i, o, tmp);
+                if (n & mask)
+                {
+                    multiplication::DGEMM(x, x_r_i, x_r_i, x_r_i, tmp, o);
+                }
+                else
+                {
+                    std::swap(o, tmp);
+                }
+            }
+
+            delete[] tmp;
+        }
+
+       inline void POWM(const cpx_t * x, const int64_t x_r, cpx_t * o, uint64_t n)
+        {
+            /*
+              This is not exactly the fast pow algorithm.
+              I slightly modified it to avoid the dcopys.
+              The idea is easy: we want the result in o so
+              if N is even then o = t1*t1 else o=x*t1 and t1=o*o
+              and we can replace n by n/2.
+              If we were in the first case and n is even then t1=o*o
+              else o=x*t1 and t1=o*o,...
+              So to generate the dgemms we need to begin with the most signifiant bit.
+              For example:
+              C2F(dgemm)(&n, &n, &x_r, &x_r, &x_r, &one, x, &x_r, x, &x_r, &zero, o, &x_r); // x^2
+              C2F(dgemm)(&n, &n, &x_r, &x_r, &x_r, &one, x, &x_r, o, &x_r, &zero, t1, &x_r); // x^3
+              C2F(dgemm)(&n, &n, &x_r, &x_r, &x_r, &one, t1, &x_r, t1, &x_r, &zero, o, &x_r); // x^6
+              C2F(dgemm)(&n, &n, &x_r, &x_r, &x_r, &one, o, &x_r, o, &x_r, &zero, t1, &x_r); // x^12
+              C2F(dgemm)(&n, &n, &x_r, &x_r, &x_r, &one, x, &x_r, t1, &x_r, &zero, o, &x_r); // x^13
+
+              The goal is to have one temp array, no memcpy and the final multiplication must put its result in o.
+            */
+
+            if (x_r == 2)
+            {
+               o[0] = x[0];
+               o[1] = x[1];
+               o[2] = x[2];
+               o[3] = x[3];
+                POWM22(o, n);
+                return;
+            }
+
+            const int64_t size = x_r * x_r;
+            int x_r_i = (int)x_r;
+
+            switch (n)
+            {
+            case 0:
+            {
+                // Identity matrix
+                std::memset(o, 0, size * sizeof(cpx_t));
+                for (int64_t i = 0; i < x_r; ++i)
+                {
+                    o[i * (x_r + 1)] = 1;
+                }
+                return;
+            }
+            case 1:
+            {
+                // x itself
+                std::memcpy(o, x, size * sizeof(cpx_t));
+                return;
+            }
+            case 2:
+            {
+                multiplication::ZGEMM(x, x_r_i, x_r_i, x_r_i, x, o);
+                return;
+            }
+            default:
+                break;
+            }
+
+            //const unsigned int nbits = 8 * sizeof(uint64_t) - __builtin_clzll(n);
+            //const bool parity = (nbits - __builtin_popcountll(n)) & 1;
+            const unsigned int nbits = 8 * sizeof(uint64_t) - analysis::tools::clzll(n);
+            const bool parity = (nbits - analysis::tools::popcount(n)) & 1;
+            unsigned int mask = 1 << (nbits - 2);
+            cpx_t * tmp = new cpx_t[size];
+
+            // Trip cost is [log2(n)] (=nbits-1)
+            // Except the most signifiant bit, for each 1 in binary representation of n we have 2 dgemms
+            // and for each 0 we have 1 dgemm.
+            // E.g. for n=13=0x1101, the cost is 2 * 2 + 1 dgemms.
+
+            if (n & mask)
+            {
+                if (parity)
+                {
+                    multiplication::ZGEMM(x, x_r_i, x_r_i, x_r_i, x, o);
+                    multiplication::ZGEMM(x, x_r_i, x_r_i, x_r_i, o, tmp);
+                    std::swap(o, tmp);
+                }
+                else
+                {
+                    multiplication::ZGEMM(x, x_r_i, x_r_i, x_r_i, x, tmp);
+                    multiplication::ZGEMM(x, x_r_i, x_r_i, x_r_i, tmp, o);
+                }
+            }
+            else
+            {
+                if (parity)
+                {
+                    multiplication::ZGEMM(x, x_r_i, x_r_i, x_r_i, x, o);
+                }
+                else
+                {
+                    multiplication::ZGEMM(x, x_r_i, x_r_i, x_r_i, x, tmp);
+                    std::swap(o, tmp);
+                }
+            }
+
+            while (mask >>= 1)
+            {
+                multiplication::ZGEMM(o, x_r_i, x_r_i, x_r_i, o, tmp);
+                if (n & mask)
+                {
+                    multiplication::ZGEMM(x, x_r_i, x_r_i, x_r_i, tmp, o);
+                }
+                else
+                {
+                    std::swap(o, tmp);
+                }
+            }
+
+            delete[] tmp;
+        }
+
+       template<typename T>
+       inline void powMSi64(const int64_t x_r, const T * x, const int64_t expo, T ** o)
+       {
+           const int64_t x_size = x_r * x_r;
+           double * _x = new double[x_size];
+            double * _o = new double[x_size];
+           for (int64_t i = 0; i < x_size; ++i)
+            {
+                _x[i] = (double)x[i];
+            }
+           if (expo > 0)
+           {
+               POWM(_x, x_r, _o, (uint64_t)expo);
+           }
+           else
+           {
+               POWM(_x, x_r, _o, (uint64_t)(-expo));
+               int x_r_i = (int)x_r;
+               rdivision::DINV(_o, x_r_i);
+           }
+           delete[] _x;
+           
+           T * __o;
+           if (*o)
+           {
+               __o = *o;
+           }
+           else
+           {
+               *o = new T[x_r * x_r];
+               __o = *o;
+           }
+           for (int64_t i = 0; i < x_size; ++i)
+            {
+                __o[i] = (T)_o[i];
+            }
+           delete[] _o;
+       }
        
-       template<typename U>
-       struct Pow<const std::complex<double> &, U, std::complex<double>>
+       template<>
+       inline void powMSi64<double>(const int64_t x_r, const double * x, const int64_t expo, double ** o)
        {
-
-           inline std::complex<double> operator()(const std::complex<double> & x, U y)
+           // TODO: x^d => donne un complexe en general ca veut dire que meme ds le cas ou expo est correct
+           // il faut prevoir de mettre o_im a null
+           if (!*o)
+           {
+               *o = new double[x_r * x_r];
+           }
+           if (expo > 0)
+           {
+               POWM(x, x_r, *o, (uint64_t)expo);
+           }
+           else
+           {
+               POWM(x, x_r, *o, (uint64_t)(-expo));
+               if (x_r == 2)
+               {
+                   double * _o = *o;
+                   const double d = _o[0] * _o[3] - _o[1] * _o[2];
+                   const double x = _o[0] / d;
+                   _o[0] = _o[3] / d;
+                   _o[3] = x;
+                   _o[1] = -_o[1] / d;
+                   _o[2] = -_o[2] / d;
+               }
+               else
                {
-                   return std::pow(x, (double)y);
+                   int x_r_i = (int)x_r;
+                   rdivision::DINV(*o, x_r_i);
                }
-       };
+           }
+       }
 
-       template<typename T>
-       struct Pow<T, const std::complex<double> &, std::complex<double>>
+       inline void powMcSi64(const int64_t x_r, const double * x_re, const double * x_im, const int64_t expo, double ** o_re, double ** o_im)
        {
+           const int64_t size = x_r * x_r;
+           if (!*o_re)
+           {
+               *o_re = new double[size];
+           }
 
-           inline std::complex<double> operator()(T x, const std::complex<double> & y)
+           if (x_im)
+           {
+               cpx_t * x = new cpx_t[size];
+               cpx_t * o = new cpx_t[size];
+
+               for (int64_t i = 0; i < size; ++i)
                {
-                   return std::pow((double)x, y);
+                   x[i] = cpx_t(x_re[i], x_im[i]);
                }
-       };
-
-       template<>
-       struct Pow<const std::complex<double> &, const std::complex<double> &, std::complex<double>>
-       {
 
-           inline std::complex<double> operator()(const std::complex<double> & x, const std::complex<double> & y)
+               if (!*o_im)
                {
-                   return std::pow(x, y);
+                   *o_im = new double[size];
                }
-       };
-       
-    } // namespace op
+               double * _o_re = *o_re;
+               double * _o_im = *o_im;
+               
+               if (expo > 0)
+               {
+                   POWM(x, x_r, o, (uint64_t)expo);
+                   delete[] x;
+               }
+               else
+               {
+                   POWM(x, x_r, o, (uint64_t)(-expo));
+                   delete[] x;
+                   if (x_r == 2)
+                   {
+                       const cpx_t d = o[0] * o[3] - o[1] * o[2];
+                       const cpx_t x = o[0] / d;
+                       o[0] = o[3] / d;
+                       o[3] = x;
+                       o[1] = -o[1] / d;
+                       o[2] = -o[2] / d;                       
+                       
+                   }
+                   else
+                   {
+                       int x_r_i = (int)x_r;
+                       rdivision::ZINV(o, x_r_i);
+                   }
+               }
+               for (int64_t i = 0; i < size; ++i)
+               {
+                   _o_re[i] = o[i].real();
+                   _o_im[i] = o[i].imag();
+               }
+               delete[] o;
+           }
+           else
+           {
+               powMSi64<double>(x_r, x_re, expo, o_re);
+           }
+       }
+
+    } // namespace exponentiation
 
 } // namespace jit
 
index d0263f8..54cd33f 100644 (file)
@@ -14,6 +14,8 @@
 #define __JIT_FUNCTORS_HXX__
 
 #include "elem_functions.hxx"
+#include "opposite.hxx"
+#include "negation.hxx"
 #include "tools.hxx"
 
 namespace jit
@@ -55,6 +57,12 @@ struct Unary_cpx
 };
 
 template<typename T, typename U>
+using opp = Unary<T, U, jit::op::Opposite<T, U>>;
+
+template<typename T, typename U>
+using neg = Unary<T, U, jit::op::Negation<T, U>>;
+    
+template<typename T, typename U>
 using sin = Unary<T, U, jit::elem::sin<T, U>>;
 
 template<typename T, typename U>
diff --git a/scilab/modules/ast/includes/jit/base/multiplication.hxx b/scilab/modules/ast/includes/jit/base/multiplication.hxx
new file mode 100644 (file)
index 0000000..4d9a28f
--- /dev/null
@@ -0,0 +1,349 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef __BASE_MULTIPLICATION_HXX__
+#define __BASE_MULTIPLICATION_HXX__
+
+#include <cstdint>
+#include <cstring>
+
+#include "base/tools.hxx"
+
+extern "C"
+{
+#include "elem_common.h"
+
+    extern int C2F(zgemm) (char *_pstTransA, char *_pstTransB, int *_piN, int *_piM, int *_piK, doublecomplex *_pdblAlpha, doublecomplex *_pdblA, int *_piLdA, doublecomplex *_pdblB, int *_piLdB, doublecomplex *_pdblBeta, doublecomplex *_pdblC, int *_piLdC);
+}
+
+namespace jit
+{
+
+    namespace multiplication
+    {
+
+        inline void DGEMM(const double * x, int & x_r, int & x_c, int & y_c, const double * y, double * o)
+        {
+            static char n = 'n';
+            static double zero = 0;
+            static double one = 1;
+
+            C2F(dgemm)(&n, &n, &x_r, &y_c, &x_c, &one, const_cast<double *>(x), &x_r, const_cast<double *>(y), &x_c, &zero, o, &x_r);
+        }
+
+       inline void ZGEMM(const doublecomplex * x, int & x_r, int & x_c, int & y_c, const doublecomplex * y, doublecomplex * o)
+        {
+            static char n = 'n';
+            static doublecomplex zero = {0., 0.};
+            static doublecomplex one = {1., 0.};
+
+            C2F(zgemm)(&n, &n, &x_r, &y_c, &x_c, &one, const_cast<doublecomplex *>(x), &x_r, const_cast<doublecomplex *>(y), &x_c, &zero, o, &x_r);
+        }
+
+       inline void ZGEMM(const cpx_t * x, int & x_r, int & x_c, int & y_c, const cpx_t * y, cpx_t * o)
+        {
+           ZGEMM(reinterpret_cast<const doublecomplex *>(x), x_r, x_c, y_c, reinterpret_cast<const doublecomplex *>(y), reinterpret_cast<doublecomplex *>(o));
+        }
+
+       // complex * complex
+        inline void ZGEMM(const double * x_re, const double * x_im, int & x_r, int & x_c, int & y_c, const double * y_re, const double * y_im, double * o_re, double ** o_im)
+        {
+            static char n = 'n';
+            static double zero = 0;
+            static double one = 1;
+            static double m_one = -1;
+
+           const int o_size = x_r * y_c;
+            double * _x_re = const_cast<double *>(x_re);
+            double * _x_im = const_cast<double *>(x_im);
+            double * _y_re = const_cast<double *>(y_re);
+            double * _y_im = const_cast<double *>(y_im);
+
+            // o_re = x_re * y_re
+            C2F(dgemm)(&n, &n, &x_r, &y_c, &x_c, &one, _x_re, &x_r, _y_re, &x_c, &zero, o_re, &x_r);
+
+            if (x_im)
+            {
+               if (!*o_im)
+               {
+                   *o_im = new double[o_size];
+               }
+                if (y_im)
+                {
+                    // o_re = -x_im * y_im + o_re
+                    C2F(dgemm)(&n, &n, &x_r, &y_c, &x_c, &m_one, _x_im, &x_r, _y_im, &x_c, &one, o_re, &x_r);
+
+                    // o_im = x_re * y_im
+                    C2F(dgemm)(&n, &n, &x_r, &y_c, &x_c, &one, _x_re, &x_r, _y_im, &x_c, &zero, *o_im, &x_r);
+                    // o_im = x_im * y_re + o_im
+                    C2F(dgemm)(&n, &n, &x_r, &y_c, &x_c, &one, _x_im, &x_r, _y_re, &x_c, &one, *o_im, &x_r);
+                }
+                else
+                {
+                    // o_im = x_im * y_re
+                    C2F(dgemm)(&n, &n, &x_r, &y_c, &x_c, &one, _x_im, &x_r, _y_re, &x_c, &zero, *o_im, &x_r);
+                }
+            }
+            else if (y_im)
+            {
+               if (!*o_im)
+               {
+                   *o_im = new double[o_size];
+               }
+                // o_im = x_re * y_im
+                C2F(dgemm)(&n, &n, &x_r, &y_c, &x_c, &one, _x_re, &x_r, _y_im, &x_c, &zero, *o_im, &x_r);
+            }
+           else if (*o_im)
+           {
+               std::memset(*o_im, 0, sizeof(double) * o_size);
+           }
+        }
+
+        // double * int?
+        template<typename T>
+        inline void times(const int64_t x_r, const int64_t x_c, const int64_t y_c, const double * x, const T * y, T ** o)
+        {
+            const int64_t x_size = x_r * x_c;
+            const int64_t y_size = x_c * y_c;
+            const int64_t o_size = x_r * y_c;
+            double * _x = new double[x_size];
+            double * _y = new double[y_size];
+            double * _o = new double[o_size];
+            for (int64_t i = 0; i < x_size; ++i)
+            {
+                _x[i] = (double)((T)x[i]);
+            }
+            for (int64_t i = 0; i < y_size; ++i)
+            {
+                _y[i] = (double)y[i];
+            }
+
+            int _x_r = x_r;
+            int _x_c = x_c;
+            int _y_c = y_c;
+
+            DGEMM(_x, _x_r, _x_c, _y_c, _y, _o);
+
+            delete[] _x;
+            delete[] _y;
+
+            T * __o;
+            if (*o)
+            {
+                __o = *o;
+            }
+            else
+            {
+                __o = new T[o_size];
+                *o = __o;
+            }
+
+            for (int64_t i = 0; i < o_size; ++i)
+            {
+                __o[i] = (T)_o[i];
+            }
+
+            delete[] _o;
+        }
+
+        // int? * double
+        template<typename T>
+        inline void times(const int64_t x_r, const int64_t x_c, const int64_t y_c, const T * x, const double * y, T ** o)
+        {
+            const int64_t x_size = x_r * x_c;
+            const int64_t y_size = x_c * y_c;
+            const int64_t o_size = x_r * y_c;
+            double * _x = new double[x_size];
+            double * _y = new double[y_size];
+            double * _o = new double[o_size];
+            for (int64_t i = 0; i < y_size; ++i)
+            {
+                _y[i] = (double)((T)y[i]);
+            }
+            for (int64_t i = 0; i < y_size; ++i)
+            {
+                _x[i] = (double)x[i];
+            }
+
+            int _x_r = x_r;
+            int _x_c = x_c;
+            int _y_c = y_c;
+
+            DGEMM(_x, _x_r, _x_c, _y_c, _y, _o);
+
+            delete[] _x;
+            delete[] _y;
+
+            T * __o;
+            if (*o)
+            {
+                __o = *o;
+            }
+            else
+            {
+                __o = new T[o_size];
+                *o = __o;
+            }
+
+            for (int64_t i = 0; i < o_size; ++i)
+            {
+                __o[i] = (T)_o[i];
+            }
+
+            delete[] _o;
+        }
+
+        // int? * int?
+        template<typename T, typename U, typename V>
+        inline void times(const int64_t x_r, const int64_t x_c, const int64_t y_c, const T * x, const U * y, V ** o)
+        {
+            const int64_t x_size = x_r * x_c;
+            const int64_t y_size = x_c * y_c;
+            const int64_t o_size = x_r * y_c;
+            double * _x = new double[x_size];
+            double * _y = new double[y_size];
+            double * _o = new double[o_size];
+            for (int64_t i = 0; i < x_size; ++i)
+            {
+                _x[i] = (double)((V)x[i]);
+            }
+            for (int64_t i = 0; i < y_size; ++i)
+            {
+                _y[i] = (double)((V)y[i]);
+            }
+
+            int _x_r = x_r;
+            int _x_c = x_c;
+            int _y_c = y_c;
+
+            DGEMM(_x, _x_r, _x_c, _y_c, _y, _o);
+
+            delete[] _x;
+            delete[] _y;
+
+            V * __o;
+            if (*o)
+            {
+                __o = *o;
+            }
+            else
+            {
+                __o = new V[o_size];
+                *o = __o;
+            }
+
+            for (int64_t i = 0; i < o_size; ++i)
+            {
+                __o[i] = (V)_o[i];
+            }
+
+            delete[] _o;
+        }
+
+        // double * double
+       template<>
+        inline void times<double, double, double>(const int64_t x_r, const int64_t x_c, const int64_t y_c, const double * x, const double * y, double ** o)
+        {
+            int _x_r = x_r;
+            int _x_c = x_c;
+            int _y_c = y_c;
+
+            if (!*o)
+            {
+                *o = new double[x_r * y_c];
+            }
+
+            DGEMM(x, _x_r, _x_c, _y_c, y, *o);
+        }
+
+        // complex * complex
+        inline void timesCC(const int64_t x_r, const int64_t x_c, const int64_t y_c, const double * x_re, const double * x_im, const double * y_re, const double * y_im, double ** o_re, double ** o_im)
+        {
+            int _x_r = x_r;
+            int _x_c = x_c;
+            int _y_c = y_c;
+
+            if (!*o_re)
+            {
+                *o_re = new double[x_r * y_c];
+            }
+
+            ZGEMM(x_re, x_im, _x_r, _x_c, _y_c, y_re, y_im, *o_re, o_im);
+        }
+
+        // complex * double
+        inline void timesCD(const int64_t x_r, const int64_t x_c, const int64_t y_c, const double * x_re, const double * x_im, const double * y, double ** o_re, double ** o_im)
+        {
+           const int64_t o_size = x_r * y_c;
+            if (!*o_re)
+            {
+                *o_re = new double[o_size];
+            }
+
+            int _x_r = x_r;
+            int _x_c = x_c;
+            int _y_c = y_c;
+
+            // o_re = x_re * y
+            DGEMM(x_re, _x_r, _x_c, _y_c, y, *o_re);
+
+            if (x_im)
+            {
+               if (!*o_im)
+               {
+                   *o_im = new double[o_size];
+               }
+                // o_im = x_im * y
+                DGEMM(x_im, _x_r, _x_c, _y_c, y, *o_im);
+            }
+           else if (*o_im)
+           {
+               std::memset(*o_im, 0, sizeof(double) * o_size);
+           }
+        }
+
+        // double * complex
+        inline void timesDC(const int64_t x_r, const int64_t x_c, const int64_t y_c, const double * x, const double * y_re, const double * y_im, double ** o_re, double ** o_im)
+        {
+           const int64_t o_size = x_r * y_c;
+           if (!*o_re)
+            {
+                *o_re = new double[o_size];
+            }
+
+            int _x_r = x_r;
+            int _x_c = x_c;
+            int _y_c = y_c;
+
+            // o_re = x * y_re
+            DGEMM(x, _x_r, _x_c, _y_c, y_re, *o_re);
+
+            if (y_im)
+            {
+               if (!*o_im)
+               {
+                   *o_im = new double[o_size];
+               }
+                // o_im = x * y_im
+                DGEMM(x, _x_r, _x_c, _y_c, y_im, *o_im);
+            }
+           else if (*o_im)
+           {
+               std::memset(*o_im, 0, sizeof(double) * o_size);
+           }
+        }
+
+    } // namespace multiplication
+
+} // namespace jit
+
+#endif // __BASE_MULTIPLICATION_HXX__
diff --git a/scilab/modules/ast/includes/jit/base/negation.hxx b/scilab/modules/ast/includes/jit/base/negation.hxx
new file mode 100644 (file)
index 0000000..9af843e
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef __BASE_NEGATIONS_HXX__
+#define __BASE_NEGATIONS_HXX__
+
+#include <complex>
+
+namespace jit
+{
+    namespace op
+    {
+
+       template<typename T, typename U>
+       struct Negation
+       {
+
+           inline U operator()(T x)
+               {
+                   return (U)(~x);
+               }
+       };
+
+       template<typename T>
+       struct Negation<double , T>
+       {
+
+           inline T operator()(const double x)
+               {
+                   return (T)(x == 0);
+               }
+       };
+
+       template<typename T>
+       struct Negation<bool , T>
+       {
+
+           inline T operator()(const bool x)
+               {
+                   return (T)(!x);
+               }
+       };
+
+       template<typename T>
+       struct Negation<const std::complex<double> & , T>
+       {
+
+           inline T operator()(const std::complex<double> & x)
+               {
+                   return (T)((x.real() == 0) && (x.imag() == 0));
+               }
+       };
+
+    } // namespace op
+
+} // namespace jit
+
+#endif // __BASE_NEGATIONS_HXX__
diff --git a/scilab/modules/ast/includes/jit/base/opposite.hxx b/scilab/modules/ast/includes/jit/base/opposite.hxx
new file mode 100644 (file)
index 0000000..8fa72a9
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef __BASE_OPPOSITES_HXX__
+#define __BASE_OPPOSITES_HXX__
+
+#include <complex>
+
+namespace jit
+{
+    namespace op
+    {
+
+       template<typename T, typename U>
+       struct Opposite
+       {
+
+           inline U operator()(T x)
+               {
+                   return (U)(-x);
+               }
+       };
+
+    } // namespace op
+
+} // namespace jit
+
+#endif // __BASE_OPPOSITES_HXX__
index d76dccc..527db19 100644 (file)
@@ -1,6 +1,6 @@
 /*
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
- *  Copyright (C) 2014 - Scilab Enterprises - Calixte DENIZET
+ *  Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
  *
  *  This file must be used under the terms of the CeCILL.
  *  This source file is licensed as described in the file COPYING, which
 #define __BASE_RDIVISIONS_HXX__
 
 #include <complex>
+#include <cstring>
 
 #include "Cast.hxx"
+#include "base/transposition.hxx"
+#include "base/tools.hxx"
 
+extern "C"
+{
+#include "elem_common.h"
+
+    extern void C2F(dgetri)(int const* n, double* a, int const* ldA, int const* iPiv, double* work, int const* workSize, int* info);
+    extern void C2F(zgetri)( int const* n, doublecomplex* a, int const* ldA, int const* iPiv, doublecomplex* work, int const* workSize, int* info);
+    extern void C2F(dlaswp)(int const* n, double* a, int const* ldA, int const* k1, int const* k2, int const* iPiv, int const* incX);
+    extern int C2F(dtrsm) (char* side, char* uplo, char* trans, char* diag, int* m, int* n, double* alpha, double* A, int* lda, double* B, int* ldb);
+    extern int C2F(ilaenv)(int *, const char *, const char *, int *, int *, int *, int *);
+
+}
 
 namespace jit
 {
     namespace op
     {
 
-       template<typename T, typename U, typename V>
-       struct Rdiv
-       {
+        template<typename T, typename U, typename V>
+        struct Rdiv
+        {
 
-           inline V operator()(T x, U y)
-               {
-                   return (V)x / (V)y;
-               }
-       };
-       
-       template<typename U>
-       struct Rdiv<const std::complex<double> &, U, std::complex<double>>
-       {
+            inline V operator()(T x, U y)
+                {
+                    return (V)x / (V)y;
+                }
+        };
 
-           inline std::complex<double> operator()(const std::complex<double> & x, U y)
-               {
-                   return x / (double)y;
-               }
-       };
+        template<typename U>
+        struct Rdiv<const std::complex<double> &, U, std::complex<double>>
+        {
+
+            inline std::complex<double> operator()(const std::complex<double> & x, U y)
+            {
+                return x / (double)y;
+            }
+        };
+
+        template<typename T>
+        struct Rdiv<T, const std::complex<double> &, std::complex<double>>
+        {
+
+            inline std::complex<double> operator()(T x, const std::complex<double> & y)
+            {
+                return (double)x / y;
+            }
+        };
 
-       template<typename T>
-       struct Rdiv<T, const std::complex<double> &, std::complex<double>>
-       {
+        template<>
+        struct Rdiv<const std::complex<double> &, const std::complex<double> &, std::complex<double>>
+        {
 
-           inline std::complex<double> operator()(T x, const std::complex<double> & y)
+            inline std::complex<double> operator()(const std::complex<double> & x, const std::complex<double> & y)
+            {
+                return x / y;
+            }
+        };
+    } // namespace op
+
+    namespace rdivision
+    {
+
+       template<bool X_IDENTITY = false>
+        inline void RDIV(const double * x, const int64_t x_r, const int64_t x_c, const int64_t y_r, const double * y, double * o)
+        {
+            // TODO: deal with warning messages...
+            // x/y = (y'\x')'
+            static char one = '1';
+            static char N = 'N';
+            static const double eps = C2F(dlamch)("e", 1L);
+
+            const int64_t y_c = x_c;
+            int64_t max, min;
+            if (y_r < y_c)
+            {
+                min = y_r;
+                max = y_c;
+            }
+            else
+            {
+                min = y_c;
+                max = y_r;
+            }
+            const int64_t size = y_r * y_c;
+            int info;
+            double * xt = new double[max * x_r];
+            double * yt = new double[size];
+
+           if (X_IDENTITY)
+           {
+               std::memset(xt, 0, max * x_r * sizeof(double));
+               for (int64_t i = 0; i < x_r; ++i)
                {
-                   return (double)x / y;
+                   xt[i * (max + 1)] = *x;
                }
-       };
+           }
+           else
+           {
+               transposition::oTransp(x, x_r, x_c, xt, max, x_r);
+           }
+            transposition::oTransp(y, y_r, y_c, yt, y_c, y_r);
+
+            bool lsq = y_r != y_c;
+            double * syt = nullptr;
+            int x_r_i = (int)x_r;
+            int x_c_i = (int)x_c;
+            int y_r_i = (int)y_r;
+            int y_c_i = (int)y_c;
+
+            if (!lsq)
+            {
+                int * pivot = new int[min];
+                // y is modified by dgetrf so we need to copy to use eventually in lsq method
+                syt = new double[size];
+                std::memcpy(syt, yt, sizeof(double) * size);
+                C2F(dgetrf)(&y_c_i, &y_r_i, yt, &y_c_i, pivot, &info);
+                if (info > 0)
+                {
+                    // Singular matrix (a diagonal element of U is exactly 0)
+                    lsq = true;
+                }
+                else
+                {
+                    double rcond = 0;
+                    double * work = new double[4 * y_c];
+                    int * iwork = new int[y_c];
+                    double norm1 = C2F(dlange)(&one, &y_r_i, &y_c_i, const_cast<double *>(y), &y_r_i, nullptr);
+                    C2F(dgecon)(&one, &y_c_i, yt, &y_c_i, &norm1, &rcond, work, iwork, &info);
+                    if (rcond <= 10 * eps)
+                    {
+                        // Ill conditionned
+                        lsq = true;
+                    }
+                    else
+                    {
+                        C2F(dgetrs)(&N/*o transpose*/, &y_c_i, &x_r_i, yt, &y_c_i, pivot, xt, &y_c_i, &info);
+                    }
+
+                    delete[] work;
+                    delete[] iwork;
+                }
+                delete[] pivot;
+            }
 
-       template<>
-       struct Rdiv<const std::complex<double> &, const std::complex<double> &, std::complex<double>>
-       {
+            if (lsq)
+            {
+                int * jpvt = new int[y_r]();
+                int max_i = (int)max;
+                double rcond = 10 * eps;
+                int rank;
+                int workMin = std::max(4 * y_c, std::max(min + 3 * y_r + 1, 2 * min + x_r));
+                double * work = new double[workMin];
+                info = 1;
+                if (syt)
+                {
+                    delete[] yt;
+                    yt = syt;
+                    syt = nullptr;
+                }
+                C2F(dgelsy1)(&y_c_i, &y_r_i, &x_r_i, yt, &y_c_i, xt, &max_i, jpvt, &rcond, &rank, work, &workMin, &info);
+                if (y_r != y_c && rank < min)
+                {
+                    // useless
+                }
 
-           inline std::complex<double> operator()(const std::complex<double> & x, const std::complex<double> & y)
+                delete[] jpvt;
+                delete[] work;
+            }
+
+           transposition::oTransp(xt, y_r, x_r, max, o, x_r);
+
+            delete[] xt;
+            delete[] yt;
+            delete[] syt;
+        }
+
+       template<bool X_IDENTITY = false>
+        inline void rdivCC(const int64_t x_r, const int64_t x_c, const int64_t y_r, const double * x_re, const double * x_im, const double * y_re, const double * y_im, double ** o_re, double ** o_im)
+        {
+            // TODO: deal with warning messages...
+            // x/y = (y'\x')'
+
+            static char one = '1';
+            static char N = 'N';
+            static const double eps = C2F(dlamch)("e", 1L);
+
+            const int64_t y_c = x_c;
+            int64_t max, min;
+            if (y_r < y_c)
+            {
+                min = y_r;
+                max = y_c;
+            }
+            else
+            {
+                min = y_c;
+                max = y_r;
+            }
+            const int64_t size = y_r * y_c;
+            int info;
+            double * xt = new double[2 * max * x_r];
+            double * yt = new double[2 * size];
+            double * _y = new double[2 * size];
+
+            if (y_im)
+            {
+                for (int64_t i = 0; i < size; ++i)
+                {
+                    _y[2 * i] = y_re[i];
+                    _y[2 * i + 1] = y_im[i];
+                }
+            }
+            else
+            {
+                for (int64_t i = 0; i < size; ++i)
+                {
+                    _y[2 * i] = y_re[i];
+                    _y[2 * i + 1] = 0;
+                }
+            }
+
+           if (X_IDENTITY)
+           {
+               std::memset(xt, 0, 2 * max * x_r * sizeof(double));
+               const double _x_re = *x_re;
+               const double m_x_im = -*x_im;
+               for (int64_t i = 0; i < x_r; ++i)
                {
-                   return x / y;
+                   xt[2 * i * (max + 1)] = _x_re;
+                   xt[2 * i * (max + 1) + 1] = m_x_im;
                }
-       };
-       
+           }
+           else
+           {
+               transposition::oConj(x_re, x_im, x_r, x_c, xt, max, x_r);
+           }
 
-    } // namespace op
+            transposition::oConj(y_re, y_im, y_r, y_c, yt, y_c, y_r);
+
+            bool lsq = y_r != y_c;
+            double * syt = nullptr;
+            int x_r_i = (int)x_r;
+            int x_c_i = (int)x_c;
+            int y_r_i = (int)y_r;
+            int y_c_i = (int)y_c;
+
+            if (!lsq)
+            {
+                int * pivot = new int[min];
+                // y is modified by dgetrf so we need to copy to use eventually in lsq method
+                syt = new double[2 * size];
+                std::memcpy(syt, yt, 2 * sizeof(double) * size);
+                C2F(zgetrf)(&y_c_i, &y_r_i, reinterpret_cast<doublecomplex *>(yt), &y_c_i, pivot, &info);
+                if (info > 0)
+                {
+                    // Singular matrix (a diagonal element of U is exactly 0)
+                    lsq = true;
+                }
+                else
+                {
+                    double rcond = 0;
+                    double * work = new double[2 * 2 * y_c];
+                    double * rwork = new double[2 * y_c];
+                    double norm1 = C2F(zlange)(&one, &y_r_i, &y_c_i, _y, &y_r_i, nullptr);
+                    C2F(zgecon)(&one, &y_c_i, reinterpret_cast<doublecomplex *>(yt), &y_c_i, &norm1, &rcond, reinterpret_cast<doublecomplex *>(work), rwork, &info);
+                    if (rcond <= 10 * eps)
+                    {
+                        // Ill conditionned
+                        lsq = true;
+                    }
+                    else
+                    {
+                        C2F(zgetrs)(&N/*o transpose*/, &y_c_i, &x_r_i, reinterpret_cast<doublecomplex *>(yt), &y_c_i, pivot, reinterpret_cast<doublecomplex *>(xt), &y_c_i, &info);
+                    }
+
+                    delete[] work;
+                    delete[] rwork;
+                }
+                delete[] pivot;
+            }
+
+            if (lsq)
+            {
+                int * jpvt = new int[y_r]();
+                int max_i = (int)max;
+                double rcond = 10 * eps;
+                int rank;
+                int workMin = std::max(2 * y_c, min + std::max(2 * min, std::max(y_r + 1, min + x_r)));
+                double * work = new double[2 * workMin];
+                double * rwork = new double[2 * y_r];
+                info = 1;
+                if (syt)
+                {
+                    delete[] yt;
+                    yt = syt;
+                    syt = nullptr;
+                }
+                C2F(zgelsy1)(&y_c_i, &y_r_i, &x_r_i, reinterpret_cast<doublecomplex *>(yt), &y_c_i, reinterpret_cast<doublecomplex *>(xt), &max_i, jpvt, &rcond, &rank, reinterpret_cast<doublecomplex *>(work), &workMin, rwork, &info);
+                if (y_r != y_c && rank < min)
+                {
+                    // useless
+                }
+
+                delete[] jpvt;
+                delete[] work;
+                delete[] rwork;
+            }
+
+            if (!*o_re)
+            {
+                *o_re = new double[x_r * y_r];
+                *o_im = new double[x_r * y_r];
+            }
+
+           //transposition::oTransp(xt, y_r, x_r, max, o, x_r);
+            //transposition::oConj(xt, max, x_r, *o_re, *o_im, x_r, y_r);
+           transposition::oConj(xt, y_r, x_r, max, *o_re, *o_im, x_r);
+
+            delete[] xt;
+            delete[] yt;
+            delete[] syt;
+        }
+
+        // double / int?
+        template<typename T>
+        inline void rdiv(const int64_t x_r, const int64_t x_c, const int64_t y_r, const double * x, const T * y, T ** o)
+        {
+            const int64_t x_size = x_r * x_c;
+            const int64_t y_size = y_r * x_c;
+            const int64_t o_size = x_r * y_r;
+            double * _x = new double[x_size];
+            double * _y = new double[y_size];
+            double * _o = new double[o_size];
+            for (int64_t i = 0; i < x_size; ++i)
+            {
+                _x[i] = (double)((T)x[i]);
+            }
+            for (int64_t i = 0; i < y_size; ++i)
+            {
+                _y[i] = (double)y[i];
+            }
+
+            RDIV(_x, x_r, x_c, y_r, _y, _o);
+
+            delete[] _x;
+            delete[] _y;
+
+            T * __o;
+            if (*o)
+            {
+                __o = *o;
+            }
+            else
+            {
+                __o = new T[o_size];
+                *o = __o;
+            }
+
+            for (int64_t i = 0; i < o_size; ++i)
+            {
+                __o[i] = (T)_o[i];
+            }
+
+            delete[] _o;
+        }
+
+        // int? / double
+        template<typename T>
+        inline void rdiv(const int64_t x_r, const int64_t x_c, const int64_t y_r, const T * x, const double * y, T ** o)
+        {
+            const int64_t x_size = x_r * x_c;
+            const int64_t y_size = y_r * x_c;
+            const int64_t o_size = x_r * y_r;
+            double * _x = new double[x_size];
+            double * _y = new double[y_size];
+            double * _o = new double[o_size];
+            for (int64_t i = 0; i < y_size; ++i)
+            {
+                _y[i] = (double)((T)y[i]);
+            }
+            for (int64_t i = 0; i < y_size; ++i)
+            {
+                _x[i] = (double)x[i];
+            }
+
+            RDIV(_x, x_r, x_c, y_r, _y, _o);
+
+            delete[] _x;
+            delete[] _y;
+
+            T * __o;
+            if (*o)
+            {
+                __o = *o;
+            }
+            else
+            {
+                __o = new T[o_size];
+                *o = __o;
+            }
+
+            for (int64_t i = 0; i < o_size; ++i)
+            {
+                __o[i] = (T)_o[i];
+            }
+
+            delete[] _o;
+        }
+
+        // int? / int?
+        template<typename T, typename U, typename V>
+        inline void rdiv(const int64_t x_r, const int64_t x_c, const int64_t y_r, const T * x, const U * y, V ** o)
+        {
+            const int64_t x_size = x_r * x_c;
+            const int64_t y_size = y_r * x_c;
+            const int64_t o_size = x_r * y_r;
+            double * _x = new double[x_size];
+            double * _y = new double[y_size];
+            double * _o = new double[o_size];
+            for (int64_t i = 0; i < x_size; ++i)
+            {
+                _x[i] = (double)((V)x[i]);
+            }
+            for (int64_t i = 0; i < y_size; ++i)
+            {
+                _y[i] = (double)((V)y[i]);
+            }
+
+            RDIV(_x, x_r, x_c, y_r, _y, _o);
+
+            delete[] _x;
+            delete[] _y;
+
+            V * __o;
+            if (*o)
+            {
+                __o = *o;
+            }
+            else
+            {
+                __o = new V[o_size];
+                *o = __o;
+            }
+
+            for (int64_t i = 0; i < o_size; ++i)
+            {
+                __o[i] = (V)_o[i];
+            }
+
+            delete[] _o;
+        }
+
+        // double / double
+        template<>
+        inline void rdiv<double, double, double>(const int64_t x_r, const int64_t x_c, const int64_t y_r, const double * x, const double * y, double ** o)
+        {
+            if (!*o)
+            {
+                *o = new double[x_r * y_r];
+            }
+
+            RDIV(x, x_r, x_c, y_r, y, *o);
+        }
+
+       // double / double
+        inline void rinvSdMd(const int64_t y_r, const int64_t y_c, const double x, const double * y, double ** o)
+        {
+            if (!*o)
+            {
+                *o = new double[y_c * y_r];
+            }
+
+            RDIV<true>(&x, y_c, y_c, y_r, y, *o);
+        }
+
+       // complex / double
+        inline void rinvScMd(const int64_t y_r, const int64_t y_c, const double x_re, const double x_im, const double * y, double ** o_re, double ** o_im)
+        {
+           const int64_t size = y_c * y_r;
+            if (!*o_re)
+            {
+                *o_re = new double[size];
+               *o_im = new double[size];
+            }
+           const double one = 1;
+
+            RDIV<true>(&one, y_c, y_c, y_r, y, *o_re);
+           double * _o_re = *o_re;
+           double * _o_im = *o_im;
+           for (int64_t i = 0; i < size; ++i)
+           {
+               _o_im[i] = _o_re[i] * x_im;
+               _o_re[i] *= x_re;
+           }
+        }
+
+       // complex / complex
+        inline void rinvScMc(const int64_t y_r, const int64_t y_c, const double x_re, const double x_im, const double * y_re, const double * y_im, double ** o_re, double ** o_im)
+        {
+            rdivCC<true>(y_c, y_c, y_r, &x_re, &x_im, y_re, y_im, o_re, o_im);
+        }
+
+       // double / complex
+        inline void rinvSdMc(const int64_t y_r, const int64_t y_c, const double x, const double * y_re, const double * y_im, double ** o_re, double ** o_im)
+        {
+           const double x_im = 0;
+            rdivCC<true>(y_c, y_c, y_r, &x, &x_im, y_re, y_im, o_re, o_im);
+        }
+
+        inline void rdivCD(const int64_t x_r, const int64_t x_c, const int64_t y_r, const double * x_re, const double * x_im, const double * y, double ** o_re, double ** o_im)
+        {
+            // TODO: voir avec Tonio: cet implem est plus rapide
+            const int64_t o_size = x_r * x_c;
+            if (!*o_re)
+            {
+                *o_re = new double[o_size];
+            }
+
+            RDIV(x_re, x_r, x_c, y_r, y, *o_re);
+            if (x_im)
+            {
+                if (!*o_im)
+                {
+                    *o_im = new double[o_size];
+                }
+                RDIV(x_im, x_r, x_c, y_r, y, *o_im);
+            }
+            else if (*o_im)
+            {
+                std::memset(*o_im, 0, sizeof(double) * o_size);
+            }
+        }
+
+        inline void rdivDC(const int64_t x_r, const int64_t x_c, const int64_t y_r, const double * x, const double * y_re, const double * y_im, double ** o_re, double ** o_im)
+        {
+            if (!*o_re)
+            {
+                const int64_t o_size = x_r * x_c;
+                *o_re = new double[o_size];
+                *o_im = new double[o_size];
+            }
+
+            rdivCC(x_r, x_c, y_r, x, nullptr, y_re, y_im, o_re, o_im);
+        }
+
+        inline void DINV(double * x, int & x_r)
+        {
+            static char one = '1';
+            static int iONE = 1;
+            static int iMONE = -1;
+           static const double eps = std::sqrt(C2F(dlamch)("e", 1L));
+
+            int info;
+            int * pivot = new int[x_r];
+            C2F(dgetrf)(&x_r, &x_r, x, &x_r, pivot, &info);
+            if (info > 0)
+            {
+                // Singular matrix (a diagonal element of x is exactly 0)
+                delete[] pivot;
+            }
+            else
+            {
+                double rcond = 0;
+                int size = std::max(4, C2F(ilaenv)(&iONE, "dgetri", " ", &x_r, &iMONE, &iMONE, &iMONE)) * x_r;
+                double * work = new double[size];
+                int * iwork = new int[x_r];
+               double norm1 = C2F(dlange)(&one, &x_r, &x_r, x, &x_r, work);
+                C2F(dgecon)(&one, &x_r, x, &x_r, &norm1, &rcond, work, iwork, &info);
+                if (rcond <= eps)
+                {
+                    // Ill conditionned
+                }
+                C2F(dgetri)(&x_r, x, &x_r, pivot, work, &size, &info);
+                delete[] pivot;
+                delete[] work;
+                delete[] iwork;
+            }
+        }
+
+       inline void ZINV(double * x, int & x_r)
+        {
+            static char one = '1';
+            static int iONE = 1;
+            static int iMONE = -1;
+           static const double eps = std::sqrt(C2F(dlamch)("e", 1L));
+
+            int info;
+            int * pivot = new int[x_r];
+            C2F(zgetrf)(&x_r, &x_r, reinterpret_cast<doublecomplex *>(x), &x_r, pivot, &info);
+            if (info > 0)
+            {
+                // Singular matrix (a diagonal element of x is exactly 0)
+                delete[] pivot;
+            }
+            else
+            {
+                double rcond = 0;
+                int size = std::max(4, C2F(ilaenv)(&iONE, "zgetri", " ", &x_r, &iMONE, &iMONE, &iMONE)) * x_r;
+                double * work = new double[2 * size];
+                double * pwork = new double[2 * size];
+               double norm1 = C2F(zlange)(&one, &x_r, &x_r, x, &x_r, nullptr);
+                C2F(zgecon)(&one, &x_r, reinterpret_cast<doublecomplex *>(x), &x_r, &norm1, &rcond, reinterpret_cast<doublecomplex *>(work), pwork, &info);
+                if (rcond <= eps)
+                {
+                    // Ill conditionned
+                }
+                C2F(zgetri)(&x_r, reinterpret_cast<doublecomplex *>(x), &x_r, pivot, reinterpret_cast<doublecomplex *>(work), &size, &info);
+                delete[] pivot;
+                delete[] work;
+                delete[] pwork;
+            }
+        }
+
+       inline void ZINV(double * x_re, double * x_im, int & x_r)
+        {
+           double * x = new double[2 * x_r * x_r];
+           for (int i = 0; i < x_r * x_r; ++i)
+           {
+               x[2 * i] = x_re[i];
+               x[2 * i + 1] = x_im[i];
+           }
+
+           ZINV(x, x_r);
+
+           for (int i = 0; i < x_r * x_r; ++i)
+           {
+               x_re[i] = x[2 * i];
+               x_im[i] = x[2 * i + 1];
+           }
+           delete[] x;
+       }
+
+       inline void ZINV(cpx_t * x, int & x_r)
+        {
+           ZINV(reinterpret_cast<double *>(x), x_r);
+       }
+
+    } // namespace rdivision
 
 } // namespace jit
 
diff --git a/scilab/modules/ast/includes/jit/base/transposition.hxx b/scilab/modules/ast/includes/jit/base/transposition.hxx
new file mode 100644 (file)
index 0000000..fa67656
--- /dev/null
@@ -0,0 +1,289 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2015 - Scilab Enterprises - Calixte DENIZET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#ifndef __BASE_TRANSPOSITION_HXX__
+#define __BASE_TRANSPOSITION_HXX__
+
+#include <cstdint>
+#include <cstring>
+#include <utility>
+
+extern "C"
+{
+#include "elem_common.h"
+}
+
+namespace jit
+{
+
+    namespace transposition
+    {
+
+        template<typename T>
+        inline void __obliviousTranspose(const unsigned int rb, const unsigned int re, const unsigned int cb, const unsigned int ce, const T * const x, const int64_t x_stride, T * const o, const int64_t o_stride)
+        {
+            // Algorithm found here: http://cacs.usc.edu/education/cs653/Frigo-CacheOblivious-FOCS99.pdf
+
+            const unsigned int dr = re - rb;
+            const unsigned int dc = ce - cb;
+
+            if (dr <= 16 && dc <= 16)
+            {
+                for (unsigned int i = rb; i < re; ++i)
+                {
+                    for (unsigned int j = cb; j < ce; ++j)
+                    {
+                        o[j + i * o_stride] = x[i + j * x_stride];
+                    }
+                }
+            }
+            else if (dr >= dc)
+            {
+                __obliviousTranspose(rb, rb + dr / 2, cb, ce, x, x_stride, o, o_stride);
+                __obliviousTranspose(rb + dr / 2, re, cb, ce, x, x_stride, o, o_stride);
+            }
+            else
+            {
+                __obliviousTranspose(rb, re, cb, cb + dc / 2, x, x_stride, o, o_stride);
+                __obliviousTranspose(rb, re, cb + dc / 2, ce, x, x_stride, o, o_stride);
+            }
+        }
+
+        template<typename T>
+        inline void oTransp(const T * const x, const int64_t x_r, const int64_t x_c, T * const o, const int64_t o_r, const int64_t o_c)
+        {
+            __obliviousTranspose(0, x_r, 0, x_c, x, x_r, o, o_r);
+        }
+
+       template<typename T>
+       inline void oTransp(const T * const x, const int64_t x_r, const int64_t x_c, const int64_t x_stride, T * const o, const int64_t o_stride)
+        {
+            __obliviousTranspose(0, x_r, 0, x_c, x, x_stride, o, o_stride);
+        }
+
+        inline void __obliviousConj(const unsigned int rb, const unsigned int re, const unsigned int cb, const unsigned int ce, const double * const x_re, const double * const x_im, const int64_t x_stride, double * const o_re, double * const o_im, const int64_t o_stride)
+        {
+            const unsigned int dr = re - rb;
+            const unsigned int dc = ce - cb;
+
+            if (dr <= 16 && dc <= 16)
+            {
+               if (x_im)
+               {
+                   for (unsigned int i = rb; i < re; ++i)
+                   {
+                       for (unsigned int j = cb; j < ce; ++j)
+                       {
+                           o_re[j + i * o_stride] = x_re[i + j * x_stride];
+                           o_im[j + i * o_stride] = -x_im[i + j * x_stride];
+                       }
+                   }
+               }
+               else
+               {
+                   for (unsigned int i = rb; i < re; ++i)
+                   {
+                       for (unsigned int j = cb; j < ce; ++j)
+                       {
+                           o_re[j + i * o_stride] = x_re[i + j * x_stride];
+                       }
+                   }
+               }
+            }
+            else if (dr >= dc)
+            {
+                __obliviousConj(rb, rb + dr / 2, cb, ce, x_re, x_im, x_stride, o_re, o_im, o_stride);
+                __obliviousConj(rb + dr / 2, re, cb, ce, x_re, x_im, x_stride, o_re, o_im, o_stride);
+            }
+            else
+            {
+                __obliviousConj(rb, re, cb, cb + dc / 2, x_re, x_im, x_stride, o_re, o_im, o_stride);
+                __obliviousConj(rb, re, cb + dc / 2, ce, x_re, x_im, x_stride, o_re, o_im, o_stride);
+            }
+        }
+
+        inline void oConj(const double * const x_re, const double * const x_im, const int64_t x_r, const int64_t x_c, double * const o_re, double * const o_im, const int64_t o_r, const int64_t o_c)
+        {
+            __obliviousConj(0, x_r, 0, x_c, x_re, x_im, x_r, o_re, o_im, o_r);
+           if (!x_im)
+           {
+               std::memset(o_im, 0, sizeof(double) * o_r * o_c);
+           }
+        }
+
+       inline void __obliviousConj(const unsigned int rb, const unsigned int re, const unsigned int cb, const unsigned int ce, const double * const x_re, const double * const x_im, const int64_t x_stride, double * const o, const int64_t o_stride)
+        {
+            const unsigned int dr = re - rb;
+            const unsigned int dc = ce - cb;
+
+            if (dr <= 16 && dc <= 16)
+            {
+               if (x_im)
+               {
+                   for (unsigned int i = rb; i < re; ++i)
+                   {
+                       for (unsigned int j = cb; j < ce; ++j)
+                       {
+                           o[2 * (j + i * o_stride)] = x_re[i + j * x_stride];
+                           o[2 * (j + i * o_stride) + 1] = -x_im[i + j * x_stride];
+                       }
+                   }
+               }
+               else
+               {
+                   for (unsigned int i = rb; i < re; ++i)
+                   {
+                       for (unsigned int j = cb; j < ce; ++j)
+                       {
+                           o[2 * (j + i * o_stride)] = x_re[i + j * x_stride];
+                           o[2 * (j + i * o_stride) + 1] = 0;
+                       }
+                   }
+               }
+            }
+            else if (dr >= dc)
+            {
+                __obliviousConj(rb, rb + dr / 2, cb, ce, x_re, x_im, x_stride, o, o_stride);
+                __obliviousConj(rb + dr / 2, re, cb, ce, x_re, x_im, x_stride, o, o_stride);
+            }
+            else
+            {
+                __obliviousConj(rb, re, cb, cb + dc / 2, x_re, x_im, x_stride, o, o_stride);
+                __obliviousConj(rb, re, cb + dc / 2, ce, x_re, x_im, x_stride, o, o_stride);
+            }
+        }
+
+        inline void oConj(const double * const x_re, const double * const x_im, const int64_t x_r, const int64_t x_c, double * const o, const int64_t o_r, const int64_t o_c)
+        {
+            __obliviousConj(0, x_r, 0, x_c, x_re, x_im, x_r, o, o_r);
+        }
+
+       inline void __obliviousConj(const unsigned int rb, const unsigned int re, const unsigned int cb, const unsigned int ce, const double * const x, const int64_t x_stride, double * const o_re, double * const o_im, const int64_t o_stride)
+        {
+            const unsigned int dr = re - rb;
+            const unsigned int dc = ce - cb;
+
+            if (dr <= 16 && dc <= 16)
+            {
+                for (unsigned int i = rb; i < re; ++i)
+                {
+                    for (unsigned int j = cb; j < ce; ++j)
+                    {
+                        o_re[j + i * o_stride] = x[2 * (i + j * x_stride)];
+                       o_im[j + i * o_stride] = -x[2 * (i + j * x_stride) + 1];
+                    }
+                }
+            }
+            else if (dr >= dc)
+            {
+                __obliviousConj(rb, rb + dr / 2, cb, ce, x, x_stride, o_re, o_im, o_stride);
+                __obliviousConj(rb + dr / 2, re, cb, ce, x, x_stride, o_re, o_im, o_stride);
+            }
+            else
+            {
+                __obliviousConj(rb, re, cb, cb + dc / 2, x, x_stride, o_re, o_im, o_stride);
+                __obliviousConj(rb, re, cb + dc / 2, ce, x, x_stride, o_re, o_im, o_stride);
+            }
+        }
+
+        inline void oConj(const double * const x, const int64_t x_r, const int64_t x_c, double * const o_re, double * const o_im, const int64_t o_r, const int64_t o_c)
+        {
+            __obliviousConj(0, x_r, 0, x_c, x, x_r, o_re, o_im, o_r);
+        }
+
+       inline void oConj(const double * const x, const int64_t x_r, const int64_t x_c, const int64_t x_stride, double * const o_re, double * const o_im, const int64_t o_stride)
+        {
+           __obliviousConj(0, x_r, 0, x_c, x, x_stride, o_re, o_im, o_stride);
+        }
+       
+       template<typename T>
+        inline void transpose(const T * X, const int64_t x_r, const int64_t x_c, T * O)
+        {
+            for (int i = 0; i < x_r; ++i)
+            {
+                for (int j = 0; j < x_c; ++j)
+                {
+                    O[j + x_c * i] = X[i + x_r * j];
+                }
+            }
+        }
+
+       template<typename T>
+        inline void transpose(T * X, const int64_t x_r)
+        {
+            for (int i = 1; i < x_r; ++i)
+            {
+                for (int j = 0; j < i; ++j)
+                {
+                    std::swap(X[i + x_r * j], X[j + x_r * i]);
+                }
+            }
+        }
+
+       template<typename T>
+        inline void transpose(T * X, const int64_t x_r, const int64_t x_c)
+        {
+            if (x_r == x_c)
+            {
+                // Square matrix so transp can be done in place no need to have a temp
+                transpose(X, x_r);
+            }
+            else
+            {
+                const int s = x_r * x_c;
+                T * O = new T[s];
+                oTransp(X, x_r, x_c, O, x_c, x_r);
+               std::memcpy(X, O, s * sizeof(double));
+                delete[] O;
+            }
+        }
+
+       template<typename T>
+        inline void transp(const T * x, const int64_t x_r, const int64_t x_c, T ** o)
+        {
+           if (!*o)
+           {
+               *o = new T[x_r * x_c];
+           }
+           oTransp(x, x_r, x_c, *o, x_c, x_r);
+        }
+
+       inline void transp(const double * x_re, const double * x_im, const int64_t x_r, const int64_t x_c, double ** o_re, double ** o_im)
+        {
+           const int64_t size = x_r * x_c;
+           if (!*o_re)
+           {
+               *o_re = new double[size];
+           }
+           if (x_im)
+           {
+               if (!o_im)
+               {
+                   *o_im = new double[size];
+               }
+               __obliviousConj(0, x_r, 0, x_c, x_re, x_im, x_r, *o_re, *o_im, x_c);
+           }
+           else
+           {
+               oTransp(x_re, x_r, x_c, *o_re, x_c, x_r);
+               if (o_im)
+               {
+                   std::memset(o_im, 0, size * sizeof(double));
+               }
+           }
+       }
+
+    } // namespace transposition
+
+} // namespace jit
+
+#endif // __BASE_TRANSPOSITION_HXX__
index 3a01aa7..9a0aded 100644 (file)
 namespace jit
 {
 
+    template<typename T, unsigned int N = 0>
+    struct In;
+
+    template<unsigned int N>
+    struct In<llvm::Type, N>
+    {
+       llvm::Type * const ty;
+       int level;
+
+       In(llvm::Type * _ty, const int _level = -1) : ty(_ty), level(_level) { }
+       inline void get(std::vector<llvm::Type *> & v, JITVisitor &) const
+           {
+               llvm::Type * _ty = ty;
+               if (level == -1)
+               {
+                   for (unsigned int i = 0; i < N; ++i)
+                   {
+                       _ty = llvm::PointerType::getUnqual(_ty);
+                   }
+               }
+               else
+               {
+                   for (unsigned int i = 0; i < level; ++i)
+                   {
+                       _ty = llvm::PointerType::getUnqual(_ty);
+                   }
+               }
+               v.emplace_back(_ty);
+           }
+    };
+
+    template<>
+    struct In<llvm::Value, 0>
+    {
+       llvm::Value * const val;
+
+       In(llvm::Value * _val) : val(_val) { }
+       inline void get(std::vector<llvm::Value *> & v, JITVisitor &) const
+           {
+               v.emplace_back(val);
+           }
+    };
+
+    template<unsigned int N>
+    struct In<analysis::TIType::Type, N>
+    {
+       const analysis::TIType::Type ty;
+       int level;
+
+       In(analysis::TIType::Type _ty, const int _level = -1) : ty(_ty), level(_level) { }
+       inline void get(std::vector<llvm::Type *> & v, JITVisitor & jit) const
+           {
+               if (level == -1)
+               {
+                   if (ty == analysis::TIType::COMPLEX)
+                   {
+                       llvm::Type * _ty = jit.getTy(analysis::TIType::DOUBLE, N);
+                       v.emplace_back(_ty);
+                       v.emplace_back(_ty);
+                   }
+                   else
+                   {
+                       v.emplace_back(jit.getTy(ty, N));
+                   }
+               }
+               else
+               {
+                   if (ty == analysis::TIType::COMPLEX)
+                   {
+                       llvm::Type * _ty = jit.getTy(analysis::TIType::DOUBLE, level);
+                       v.emplace_back(_ty);
+                       v.emplace_back(_ty);
+                   }
+                   else
+                   {
+                       v.emplace_back(jit.getTy(ty, level));
+                   }
+               }
+           }
+    };
+
+    template<unsigned int N>
+    struct In<JITScilabPtr, N>
+    {
+       static_assert(N == 0 || N == 1, "Invalid value");
+       
+       JITScilabPtr & val;
+
+       In(JITScilabPtr & _val) : val(_val) { }
+       inline void get(std::vector<llvm::Value *> & v, JITVisitor & jit) const
+           {
+               if (N == 0)
+               {
+                   if (val->isComplex())
+                   {
+                       v.emplace_back(val->loadReal(jit));
+                       v.emplace_back(val->loadImag(jit));
+                   }
+                   else
+                   {
+                       v.emplace_back(val->loadData(jit));
+                   }
+               }
+               else
+               {
+                   if (val->isComplex())
+                   {
+                       v.emplace_back(val->getReal(jit));
+                       v.emplace_back(val->getImag(jit));
+                   }
+                   else
+                   {
+                       v.emplace_back(val->getData(jit));
+                   }
+               }
+           }
+    };
+    
     class FunctionSignature
     {
        
@@ -25,6 +143,63 @@ namespace jit
 
        static llvm::FunctionType * makeTypesAndArgs(JITVisitor & jit, const std::vector<const analysis::TIType *> & outTypes, bool outInIn, const std::vector<const analysis::TIType *> & argsTypes, const std::vector<JITScilabPtr> & argsIn, const std::vector<JITScilabPtr> & argsOut, std::vector<llvm::Value *> & outArgs);
 
+       template<typename... Args>
+       inline static std::vector<llvm::Type *> getFunctionArgsTy(JITVisitor & jit, Args... args)
+           {
+               std::vector<llvm::Type *> v;
+               __getFunctionArgsTy(jit, v, args...);
+
+               return v;
+           }
+
+       template<typename... Args>
+       inline static std::vector<llvm::Value *> getFunctionArgs(JITVisitor & jit, Args... args)
+           {
+               std::vector<llvm::Value *> v;
+               __getFunctionArgs(jit, v, args...);
+
+               return v;
+           }
+
+       template<typename... Args>
+       inline static void getFunctionArgsTy(JITVisitor & jit, std::vector<llvm::Type *> & v, Args... args)
+           {
+               __getFunctionArgsTy(jit, v, args...);
+           }
+
+       template<typename... Args>
+       inline static void getFunctionArgs(JITVisitor & jit, std::vector<llvm::Value *> & v, Args... args)
+           {
+               __getFunctionArgs(jit, v, args...);
+           }
+
+    private:
+       
+       template<typename T, typename... Args>
+       inline static void __getFunctionArgsTy(JITVisitor & jit, std::vector<llvm::Type *> & v, T && ty, Args... args)
+           {
+               ty.get(v, jit);
+               __getFunctionArgsTy(jit, v, args...);
+           }
+
+       template<typename T>
+       inline static void __getFunctionArgsTy(JITVisitor & jit, std::vector<llvm::Type *> & v, T && ty)
+           {
+               ty.get(v, jit);
+           }
+
+       template<typename T, typename... Args>
+       inline static void __getFunctionArgs(JITVisitor & jit, std::vector<llvm::Value *> & v, T && arg, Args... args)
+           {
+               arg.get(v, jit);
+               __getFunctionArgs(jit, v, args...);
+           }
+
+       template<typename T>
+       inline static void __getFunctionArgs(JITVisitor & jit, std::vector<llvm::Value *> & v, T && arg)
+           {
+               arg.get(v, jit);
+           }
     };
 
 } // namespace jit
index 105ba37..7dc7e23 100644 (file)
@@ -37,6 +37,8 @@ namespace jit
        virtual void SM(JITScilabPtr & L, const analysis::TIType & Ltype, JITScilabPtr & R, const analysis::TIType & Rtype, JITScilabPtr & O, const analysis::TIType & Otype, JITVisitor & jit);
        virtual void MS(JITScilabPtr & L, const analysis::TIType & Ltype, JITScilabPtr & R, const analysis::TIType & Rtype, JITScilabPtr & O, const analysis::TIType & Otype, JITVisitor & jit);
        virtual void MM(JITScilabPtr & L, const analysis::TIType & Ltype, JITScilabPtr & R, const analysis::TIType & Rtype, JITScilabPtr & O, const analysis::TIType & Otype, JITVisitor & jit);
+
+       virtual void vectorize(JITScilabPtr & L, const analysis::TIType & Ltype, JITScilabPtr & R, const analysis::TIType & Rtype, JITScilabPtr & O, const analysis::TIType & Otype, JITVisitor & jit);
     };
 
     class JITAddition : public JITBinOpCall
@@ -68,13 +70,19 @@ namespace jit
 
     public:
        
-       JITMultiplication() : JITBinOpCall("times") { }
+       JITMultiplication() : JITBinOpCall("dottimes") { }
 
        virtual ~JITMultiplication() { }
 
        virtual JITScilabPtr SS(JITScilabPtr & L, const analysis::TIType & Ltype, JITScilabPtr & R, const analysis::TIType & Rtype, const analysis::TIType & Otype, JITVisitor & jit);
 
        virtual void MM(JITScilabPtr & L, const analysis::TIType & Ltype, JITScilabPtr & R, const analysis::TIType & Rtype, JITScilabPtr & O, const analysis::TIType & Otype, JITVisitor & jit);
+
+       virtual void MdMd(JITScilabPtr & L, const analysis::TIType & Ltype, JITScilabPtr & R, const analysis::TIType & Rtype, JITScilabPtr & O, const analysis::TIType & Otype, JITVisitor & jit);
+
+       virtual void MMother(JITScilabPtr & L, const analysis::TIType & Ltype, JITScilabPtr & R, const analysis::TIType & Rtype, JITScilabPtr & O, const analysis::TIType & Otype, JITVisitor & jit);
+
+       llvm::Function * getDGEMM(JITVisitor & jit, llvm::Value *& zero, llvm::Value *& one, llvm::Value *& n);
     };
 
     class JITEquality : public JITBinOpCall
@@ -185,6 +193,8 @@ namespace jit
        virtual JITScilabPtr SS(JITScilabPtr & L, const analysis::TIType & Ltype, JITScilabPtr & R, const analysis::TIType & Rtype, const analysis::TIType & Otype, JITVisitor & jit);
 
        virtual void MM(JITScilabPtr & L, const analysis::TIType & Ltype, JITScilabPtr & R, const analysis::TIType & Rtype, JITScilabPtr & O, const analysis::TIType & Otype, JITVisitor & jit);
+
+       virtual void SM(JITScilabPtr & L, const analysis::TIType & Ltype, JITScilabPtr & R, const analysis::TIType & Rtype, JITScilabPtr & O, const analysis::TIType & Otype, JITVisitor & jit);
     };
 
     class JITPower : public JITBinOpCall
index 780dc8f..196c3ec 100644 (file)
@@ -47,11 +47,13 @@ namespace jit
 
        virtual void init(const std::vector<analysis::TIType> & args, JITVisitor & jit) { }
        
-       static bool call(const ast::CallExp & e, const std::vector<analysis::TIType> & typesOut, std::vector<JITScilabPtr> & out, JITVisitor & jit);
+       static bool call(const ast::CallExp & e, std::vector<analysis::TIType> & typesOut, std::vector<JITScilabPtr> & out, JITVisitor & jit);
 
     private:
 
        static FunMap init();
+       static bool callCompiledMacro(const uint64_t id, const ast::CallExp & e, std::vector<analysis::TIType> & typesOut, std::vector<JITScilabPtr> & out, JITVisitor & jit);
+
     };
 
 } // namespace jit
index fe9c423..7043c1d 100644 (file)
@@ -40,7 +40,7 @@ public:
     virtual void S(const analysis::TIType & argType, JITScilabPtr & arg, const analysis::TIType & OType, JITScilabPtr & out, JITVisitor & jit);
     virtual void M(const analysis::TIType & argType, JITScilabPtr & arg, const analysis::TIType & OType, JITScilabPtr & out, JITVisitor & jit);
     virtual void Sc_c(const std::string & name, JITScilabPtr & arg, JITScilabPtr & out, JITVisitor & jit);
-
+    
 private:
 
     void makeOutput(JITVisitor & jit, llvm::Value * ret, const std::vector<llvm::Value *> & outArgs, const analysis::TIType & OType, JITScilabPtr & out);
index f3e8c5f..4270296 100644 (file)
@@ -42,7 +42,7 @@ namespace jit
 
     public:
        
-       JITOpposite() : JITUnaryOpCall("opposite") { }
+       JITOpposite() : JITUnaryOpCall("opp") { }
 
        virtual ~JITOpposite() { }
 
@@ -61,6 +61,19 @@ namespace jit
        virtual bool invoke(const ast::Exp & e, const std::vector<analysis::TIType> & typesOut, std::vector<JITScilabPtr> & out, JITVisitor & jit);
        virtual JITScilabPtr S(JITScilabPtr & L, const analysis::TIType & Ltype, const analysis::TIType & Otype, JITVisitor & jit);
     };
+
+    class JITTransposition : public JITUnaryOpCall
+    {
+       
+    public:
+       
+       JITTransposition() : JITUnaryOpCall("transp") { }
+
+       virtual ~JITTransposition() { }
+
+       virtual JITScilabPtr S(JITScilabPtr & L, const analysis::TIType & Ltype, const analysis::TIType & Otype, JITVisitor & jit);
+       virtual void M(JITScilabPtr & L, const analysis::TIType & Ltype, JITScilabPtr & O, const analysis::TIType & Otype, JITVisitor & jit);
+    };
     
     
 } // namespace jit
index e567f60..6618ba2 100644 (file)
 #ifndef __FUNS_INTERF_H__
 #define __FUNS_INTERF_H__
 
-void dotpower_McMc(const int64_t size, const double * in0_re, const double * in0_im, const double * in1_re, const double * in1_im, double ** out_re, double ** out_im)
-{
-    jit::vect::binary<jit::functors::dotpower<const jit::cpx_t &, const jit::cpx_t &, jit::cpx_t>>(size, jit::vect::WrapVecIn<jit::cpx_t *>(in0_re, in0_im), jit::vect::WrapVecIn<jit::cpx_t *>(in1_re, in1_im), jit::vect::WrapOut<jit::cpx_t>(out_re, out_im));
-}
-void dotpower_McMd(const int64_t size, const double * in0_re, const double * in0_im, const double * in1, double ** out_re, double ** out_im)
-{
-    jit::vect::binary<jit::functors::dotpower<const jit::cpx_t &, double, jit::cpx_t>>(size, jit::vect::WrapVecIn<jit::cpx_t *>(in0_re, in0_im), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<jit::cpx_t>(out_re, out_im));
-}
-void dotpower_McSc(const int64_t size, const double * in0_re, const double * in0_im, const double in1_re, const double in1_im, double ** out_re, double ** out_im)
-{
-    jit::vect::binary<jit::functors::dotpower<const jit::cpx_t &, const jit::cpx_t &, jit::cpx_t>>(size, jit::vect::WrapVecIn<jit::cpx_t *>(in0_re, in0_im), jit::vect::WrapVecIn<jit::cpx_t>(in1_re, in1_im), jit::vect::WrapOut<jit::cpx_t>(out_re, out_im));
-}
-void dotpower_McSd(const int64_t size, const double * in0_re, const double * in0_im, const double in1, double ** out_re, double ** out_im)
-{
-    jit::vect::binary<jit::functors::dotpower<const jit::cpx_t &, double, jit::cpx_t>>(size, jit::vect::WrapVecIn<jit::cpx_t *>(in0_re, in0_im), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<jit::cpx_t>(out_re, out_im));
-}
-void dotpower_MdMc(const int64_t size, const double * in0, const double * in1_re, const double * in1_im, double ** out_re, double ** out_im)
-{
-    jit::vect::binary<jit::functors::dotpower<double, const jit::cpx_t &, jit::cpx_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<jit::cpx_t *>(in1_re, in1_im), jit::vect::WrapOut<jit::cpx_t>(out_re, out_im));
-}
-void dotpower_MdMd(const int64_t size, const double * in0, const double * in1, double ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, double, double>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<double>(out));
-}
-void dotpower_MdMi16(const int64_t size, const double * in0, const int16_t * in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, int16_t, int16_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_MdMi32(const int64_t size, const double * in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_MdMi64(const int64_t size, const double * in0, const int64_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_MdMi8(const int64_t size, const double * in0, const int8_t * in1, int8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, int8_t, int8_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int8_t>(out));
-}
-void dotpower_MdMui16(const int64_t size, const double * in0, const uint16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_MdMui32(const int64_t size, const double * in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_MdMui64(const int64_t size, const double * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_MdMui8(const int64_t size, const double * in0, const uint8_t * in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, uint8_t, uint8_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_MdSc(const int64_t size, const double * in0, const double in1_re, const double in1_im, double ** out_re, double ** out_im)
-{
-    jit::vect::binary<jit::functors::dotpower<double, const jit::cpx_t &, jit::cpx_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<jit::cpx_t>(in1_re, in1_im), jit::vect::WrapOut<jit::cpx_t>(out_re, out_im));
-}
-void dotpower_MdSd(const int64_t size, const double * in0, const double in1, double ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, double, double>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<double>(out));
-}
-void dotpower_MdSi16(const int64_t size, const double * in0, const int16_t in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, int16_t, int16_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_MdSi32(const int64_t size, const double * in0, const int32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_MdSi64(const int64_t size, const double * in0, const int64_t in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_MdSi8(const int64_t size, const double * in0, const int8_t in1, int8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, int8_t, int8_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<int8_t>(out));
-}
-void dotpower_MdSui16(const int64_t size, const double * in0, const uint16_t in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_MdSui32(const int64_t size, const double * in0, const uint32_t in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_MdSui64(const int64_t size, const double * in0, const uint64_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_MdSui8(const int64_t size, const double * in0, const uint8_t in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, uint8_t, uint8_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_Mi16Md(const int64_t size, const int16_t * in0, const double * in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, double, int16_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_Mi16Mi16(const int64_t size, const int16_t * in0, const int16_t * in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, int16_t, int16_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_Mi16Mi32(const int64_t size, const int16_t * in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Mi16Mi64(const int64_t size, const int16_t * in0, const int64_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Mi16Mi8(const int64_t size, const int16_t * in0, const int8_t * in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, int8_t, int16_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_Mi16Mui16(const int64_t size, const int16_t * in0, const uint16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mi16Mui32(const int64_t size, const int16_t * in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mi16Mui64(const int64_t size, const int16_t * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mi16Mui8(const int64_t size, const int16_t * in0, const uint8_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, uint8_t, uint16_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mi16Sd(const int64_t size, const int16_t * in0, const double in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, double, int16_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_Mi16Si16(const int64_t size, const int16_t * in0, const int16_t in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, int16_t, int16_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_Mi16Si32(const int64_t size, const int16_t * in0, const int32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Mi16Si64(const int64_t size, const int16_t * in0, const int64_t in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Mi16Si8(const int64_t size, const int16_t * in0, const int8_t in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, int8_t, int16_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_Mi16Sui16(const int64_t size, const int16_t * in0, const uint16_t in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mi16Sui32(const int64_t size, const int16_t * in0, const uint32_t in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mi16Sui64(const int64_t size, const int16_t * in0, const uint64_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mi16Sui8(const int64_t size, const int16_t * in0, const uint8_t in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, uint8_t, uint16_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mi32Md(const int64_t size, const int32_t * in0, const double * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, double, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Mi32Mi16(const int64_t size, const int32_t * in0, const int16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Mi32Mi32(const int64_t size, const int32_t * in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Mi32Mi64(const int64_t size, const int32_t * in0, const int64_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Mi32Mi8(const int64_t size, const int32_t * in0, const int8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Mi32Mui16(const int64_t size, const int32_t * in0, const uint16_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, uint16_t, uint32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mi32Mui32(const int64_t size, const int32_t * in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mi32Mui64(const int64_t size, const int32_t * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mi32Mui8(const int64_t size, const int32_t * in0, const uint8_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, uint8_t, uint32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mi32Sd(const int64_t size, const int32_t * in0, const double in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, double, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Mi32Si16(const int64_t size, const int32_t * in0, const int16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Mi32Si32(const int64_t size, const int32_t * in0, const int32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Mi32Si64(const int64_t size, const int32_t * in0, const int64_t in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Mi32Si8(const int64_t size, const int32_t * in0, const int8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Mi32Sui16(const int64_t size, const int32_t * in0, const uint16_t in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, uint16_t, uint32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mi32Sui32(const int64_t size, const int32_t * in0, const uint32_t in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mi32Sui64(const int64_t size, const int32_t * in0, const uint64_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mi32Sui8(const int64_t size, const int32_t * in0, const uint8_t in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, uint8_t, uint32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mi64Md(const int64_t size, const int64_t * in0, const double * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, double, int64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Mi64Mi16(const int64_t size, const int64_t * in0, const int16_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, int16_t, int64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Mi64Mi32(const int64_t size, const int64_t * in0, const int32_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, int32_t, int64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Mi64Mi64(const int64_t size, const int64_t * in0, const int64_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Mi64Mi8(const int64_t size, const int64_t * in0, const int8_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, int8_t, int64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Mi64Mui16(const int64_t size, const int64_t * in0, const uint16_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, uint16_t, uint64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mi64Mui32(const int64_t size, const int64_t * in0, const uint32_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, uint32_t, uint64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mi64Mui64(const int64_t size, const int64_t * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mi64Mui8(const int64_t size, const int64_t * in0, const uint8_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, uint8_t, uint64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mi64Sd(const int64_t size, const int64_t * in0, const double in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, double, int64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Mi64Si16(const int64_t size, const int64_t * in0, const int16_t in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, int16_t, int64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Mi64Si32(const int64_t size, const int64_t * in0, const int32_t in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, int32_t, int64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Mi64Si64(const int64_t size, const int64_t * in0, const int64_t in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Mi64Si8(const int64_t size, const int64_t * in0, const int8_t in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, int8_t, int64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Mi64Sui16(const int64_t size, const int64_t * in0, const uint16_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, uint16_t, uint64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mi64Sui32(const int64_t size, const int64_t * in0, const uint32_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, uint32_t, uint64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mi64Sui64(const int64_t size, const int64_t * in0, const uint64_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mi64Sui8(const int64_t size, const int64_t * in0, const uint8_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, uint8_t, uint64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mi8Md(const int64_t size, const int8_t * in0, const double * in1, int8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, double, int8_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int8_t>(out));
-}
-void dotpower_Mi8Mi16(const int64_t size, const int8_t * in0, const int16_t * in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, int16_t, int16_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_Mi8Mi32(const int64_t size, const int8_t * in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Mi8Mi64(const int64_t size, const int8_t * in0, const int64_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Mi8Mi8(const int64_t size, const int8_t * in0, const int8_t * in1, int8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, int8_t, int8_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int8_t>(out));
-}
-void dotpower_Mi8Mui16(const int64_t size, const int8_t * in0, const uint16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mi8Mui32(const int64_t size, const int8_t * in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mi8Mui64(const int64_t size, const int8_t * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mi8Mui8(const int64_t size, const int8_t * in0, const uint8_t * in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, uint8_t, uint8_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_Mi8Sd(const int64_t size, const int8_t * in0, const double in1, int8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, double, int8_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<int8_t>(out));
-}
-void dotpower_Mi8Si16(const int64_t size, const int8_t * in0, const int16_t in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, int16_t, int16_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_Mi8Si32(const int64_t size, const int8_t * in0, const int32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Mi8Si64(const int64_t size, const int8_t * in0, const int64_t in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Mi8Si8(const int64_t size, const int8_t * in0, const int8_t in1, int8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, int8_t, int8_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<int8_t>(out));
-}
-void dotpower_Mi8Sui16(const int64_t size, const int8_t * in0, const uint16_t in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mi8Sui32(const int64_t size, const int8_t * in0, const uint32_t in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mi8Sui64(const int64_t size, const int8_t * in0, const uint64_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mi8Sui8(const int64_t size, const int8_t * in0, const uint8_t in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, uint8_t, uint8_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_Mui16Md(const int64_t size, const uint16_t * in0, const double * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, double, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mui16Mi16(const int64_t size, const uint16_t * in0, const int16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, int16_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mui16Mi32(const int64_t size, const uint16_t * in0, const int32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, int32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui16Mi64(const int64_t size, const uint16_t * in0, const int64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, int64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui16Mi8(const int64_t size, const uint16_t * in0, const int8_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, int8_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mui16Mui16(const int64_t size, const uint16_t * in0, const uint16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mui16Mui32(const int64_t size, const uint16_t * in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui16Mui64(const int64_t size, const uint16_t * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui16Mui8(const int64_t size, const uint16_t * in0, const uint8_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, uint8_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mui16Sd(const int64_t size, const uint16_t * in0, const double in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, double, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mui16Si16(const int64_t size, const uint16_t * in0, const int16_t in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, int16_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mui16Si32(const int64_t size, const uint16_t * in0, const int32_t in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, int32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui16Si64(const int64_t size, const uint16_t * in0, const int64_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, int64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui16Si8(const int64_t size, const uint16_t * in0, const int8_t in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, int8_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mui16Sui16(const int64_t size, const uint16_t * in0, const uint16_t in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mui16Sui32(const int64_t size, const uint16_t * in0, const uint32_t in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui16Sui64(const int64_t size, const uint16_t * in0, const uint64_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui16Sui8(const int64_t size, const uint16_t * in0, const uint8_t in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, uint8_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mui32Md(const int64_t size, const uint32_t * in0, const double * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, double, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui32Mi16(const int64_t size, const uint32_t * in0, const int16_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, int16_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui32Mi32(const int64_t size, const uint32_t * in0, const int32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, int32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui32Mi64(const int64_t size, const uint32_t * in0, const int64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, int64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui32Mi8(const int64_t size, const uint32_t * in0, const int8_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, int8_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui32Mui16(const int64_t size, const uint32_t * in0, const uint16_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, uint16_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui32Mui32(const int64_t size, const uint32_t * in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui32Mui64(const int64_t size, const uint32_t * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui32Mui8(const int64_t size, const uint32_t * in0, const uint8_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, uint8_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui32Sd(const int64_t size, const uint32_t * in0, const double in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, double, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui32Si16(const int64_t size, const uint32_t * in0, const int16_t in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, int16_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui32Si32(const int64_t size, const uint32_t * in0, const int32_t in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, int32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui32Si64(const int64_t size, const uint32_t * in0, const int64_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, int64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui32Si8(const int64_t size, const uint32_t * in0, const int8_t in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, int8_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui32Sui16(const int64_t size, const uint32_t * in0, const uint16_t in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, uint16_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui32Sui32(const int64_t size, const uint32_t * in0, const uint32_t in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui32Sui64(const int64_t size, const uint32_t * in0, const uint64_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui32Sui8(const int64_t size, const uint32_t * in0, const uint8_t in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, uint8_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui64Md(const int64_t size, const uint64_t * in0, const double * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, double, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui64Mi16(const int64_t size, const uint64_t * in0, const int16_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, int16_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui64Mi32(const int64_t size, const uint64_t * in0, const int32_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, int32_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui64Mi64(const int64_t size, const uint64_t * in0, const int64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, int64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui64Mi8(const int64_t size, const uint64_t * in0, const int8_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, int8_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui64Mui16(const int64_t size, const uint64_t * in0, const uint16_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, uint16_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui64Mui32(const int64_t size, const uint64_t * in0, const uint32_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, uint32_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui64Mui64(const int64_t size, const uint64_t * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui64Mui8(const int64_t size, const uint64_t * in0, const uint8_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, uint8_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui64Sd(const int64_t size, const uint64_t * in0, const double in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, double, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui64Si16(const int64_t size, const uint64_t * in0, const int16_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, int16_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui64Si32(const int64_t size, const uint64_t * in0, const int32_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, int32_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui64Si64(const int64_t size, const uint64_t * in0, const int64_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, int64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui64Si8(const int64_t size, const uint64_t * in0, const int8_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, int8_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui64Sui16(const int64_t size, const uint64_t * in0, const uint16_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, uint16_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui64Sui32(const int64_t size, const uint64_t * in0, const uint32_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, uint32_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui64Sui64(const int64_t size, const uint64_t * in0, const uint64_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui64Sui8(const int64_t size, const uint64_t * in0, const uint8_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, uint8_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui8Md(const int64_t size, const uint8_t * in0, const double * in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, double, uint8_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_Mui8Mi16(const int64_t size, const uint8_t * in0, const int16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, int16_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mui8Mi32(const int64_t size, const uint8_t * in0, const int32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, int32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui8Mi64(const int64_t size, const uint8_t * in0, const int64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, int64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui8Mi8(const int64_t size, const uint8_t * in0, const int8_t * in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, int8_t, uint8_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_Mui8Mui16(const int64_t size, const uint8_t * in0, const uint16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mui8Mui32(const int64_t size, const uint8_t * in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui8Mui64(const int64_t size, const uint8_t * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui8Mui8(const int64_t size, const uint8_t * in0, const uint8_t * in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, uint8_t, uint8_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_Mui8Sd(const int64_t size, const uint8_t * in0, const double in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, double, uint8_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_Mui8Si16(const int64_t size, const uint8_t * in0, const int16_t in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, int16_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mui8Si32(const int64_t size, const uint8_t * in0, const int32_t in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, int32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui8Si64(const int64_t size, const uint8_t * in0, const int64_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, int64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui8Si8(const int64_t size, const uint8_t * in0, const int8_t in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, int8_t, uint8_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_Mui8Sui16(const int64_t size, const uint8_t * in0, const uint16_t in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Mui8Sui32(const int64_t size, const uint8_t * in0, const uint32_t in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Mui8Sui64(const int64_t size, const uint8_t * in0, const uint64_t in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Mui8Sui8(const int64_t size, const uint8_t * in0, const uint8_t in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, uint8_t, uint8_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_ScMc(const int64_t size, const double in0_re, const double in0_im, const double * in1_re, const double * in1_im, double ** out_re, double ** out_im)
-{
-    jit::vect::binary<jit::functors::dotpower<const jit::cpx_t &, const jit::cpx_t &, jit::cpx_t>>(size, jit::vect::WrapVecIn<jit::cpx_t>(in0_re, in0_im), jit::vect::WrapVecIn<jit::cpx_t *>(in1_re, in1_im), jit::vect::WrapOut<jit::cpx_t>(out_re, out_im));
-}
-void dotpower_ScMd(const int64_t size, const double in0_re, const double in0_im, const double * in1, double ** out_re, double ** out_im)
-{
-    jit::vect::binary<jit::functors::dotpower<const jit::cpx_t &, double, jit::cpx_t>>(size, jit::vect::WrapVecIn<jit::cpx_t>(in0_re, in0_im), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<jit::cpx_t>(out_re, out_im));
-}
-void dotpower_SdMc(const int64_t size, const double in0, const double * in1_re, const double * in1_im, double ** out_re, double ** out_im)
-{
-    jit::vect::binary<jit::functors::dotpower<double, const jit::cpx_t &, jit::cpx_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<jit::cpx_t *>(in1_re, in1_im), jit::vect::WrapOut<jit::cpx_t>(out_re, out_im));
-}
-void dotpower_SdMd(const int64_t size, const double in0, const double * in1, double ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, double, double>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<double>(out));
-}
-void dotpower_SdMi16(const int64_t size, const double in0, const int16_t * in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, int16_t, int16_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_SdMi32(const int64_t size, const double in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_SdMi64(const int64_t size, const double in0, const int64_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_SdMi8(const int64_t size, const double in0, const int8_t * in1, int8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, int8_t, int8_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int8_t>(out));
-}
-void dotpower_SdMui16(const int64_t size, const double in0, const uint16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_SdMui32(const int64_t size, const double in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_SdMui64(const int64_t size, const double in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_SdMui8(const int64_t size, const double in0, const uint8_t * in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, uint8_t, uint8_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_Si16Md(const int64_t size, const int16_t in0, const double * in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, double, int16_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_Si16Mi16(const int64_t size, const int16_t in0, const int16_t * in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, int16_t, int16_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_Si16Mi32(const int64_t size, const int16_t in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Si16Mi64(const int64_t size, const int16_t in0, const int64_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Si16Mi8(const int64_t size, const int16_t in0, const int8_t * in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, int8_t, int16_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_Si16Mui16(const int64_t size, const int16_t in0, const uint16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Si16Mui32(const int64_t size, const int16_t in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Si16Mui64(const int64_t size, const int16_t in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Si16Mui8(const int64_t size, const int16_t in0, const uint8_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, uint8_t, uint16_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Si32Md(const int64_t size, const int32_t in0, const double * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, double, int32_t>>(size, jit::vect::WrapVecIn<const int32_t>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Si32Mi16(const int64_t size, const int32_t in0, const int16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Si32Mi32(const int64_t size, const int32_t in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Si32Mi64(const int64_t size, const int32_t in0, const int64_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const int32_t>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Si32Mi8(const int64_t size, const int32_t in0, const int8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Si32Mui16(const int64_t size, const int32_t in0, const uint16_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, uint16_t, uint32_t>>(size, jit::vect::WrapVecIn<const int32_t>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Si32Mui32(const int64_t size, const int32_t in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const int32_t>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Si32Mui64(const int64_t size, const int32_t in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const int32_t>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Si32Mui8(const int64_t size, const int32_t in0, const uint8_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, uint8_t, uint32_t>>(size, jit::vect::WrapVecIn<const int32_t>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Si64Md(const int64_t size, const int64_t in0, const double * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, double, int64_t>>(size, jit::vect::WrapVecIn<const int64_t>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Si64Mi16(const int64_t size, const int64_t in0, const int16_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, int16_t, int64_t>>(size, jit::vect::WrapVecIn<const int64_t>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Si64Mi32(const int64_t size, const int64_t in0, const int32_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, int32_t, int64_t>>(size, jit::vect::WrapVecIn<const int64_t>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Si64Mi64(const int64_t size, const int64_t in0, const int64_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const int64_t>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Si64Mi8(const int64_t size, const int64_t in0, const int8_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, int8_t, int64_t>>(size, jit::vect::WrapVecIn<const int64_t>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Si64Mui16(const int64_t size, const int64_t in0, const uint16_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, uint16_t, uint64_t>>(size, jit::vect::WrapVecIn<const int64_t>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Si64Mui32(const int64_t size, const int64_t in0, const uint32_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, uint32_t, uint64_t>>(size, jit::vect::WrapVecIn<const int64_t>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Si64Mui64(const int64_t size, const int64_t in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const int64_t>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Si64Mui8(const int64_t size, const int64_t in0, const uint8_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, uint8_t, uint64_t>>(size, jit::vect::WrapVecIn<const int64_t>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Si8Md(const int64_t size, const int8_t in0, const double * in1, int8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, double, int8_t>>(size, jit::vect::WrapVecIn<const int8_t>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int8_t>(out));
-}
-void dotpower_Si8Mi16(const int64_t size, const int8_t in0, const int16_t * in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, int16_t, int16_t>>(size, jit::vect::WrapVecIn<const int8_t>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_Si8Mi32(const int64_t size, const int8_t in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Si8Mi64(const int64_t size, const int8_t in0, const int64_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const int8_t>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Si8Mi8(const int64_t size, const int8_t in0, const int8_t * in1, int8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, int8_t, int8_t>>(size, jit::vect::WrapVecIn<const int8_t>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int8_t>(out));
-}
-void dotpower_Si8Mui16(const int64_t size, const int8_t in0, const uint16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const int8_t>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Si8Mui32(const int64_t size, const int8_t in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const int8_t>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Si8Mui64(const int64_t size, const int8_t in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const int8_t>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Si8Mui8(const int64_t size, const int8_t in0, const uint8_t * in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, uint8_t, uint8_t>>(size, jit::vect::WrapVecIn<const int8_t>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_Sui16Md(const int64_t size, const uint16_t in0, const double * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, double, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Sui16Mi16(const int64_t size, const uint16_t in0, const int16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, int16_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Sui16Mi32(const int64_t size, const uint16_t in0, const int32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, int32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint16_t>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Sui16Mi64(const int64_t size, const uint16_t in0, const int64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, int64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint16_t>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Sui16Mi8(const int64_t size, const uint16_t in0, const int8_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, int8_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Sui16Mui16(const int64_t size, const uint16_t in0, const uint16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Sui16Mui32(const int64_t size, const uint16_t in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint16_t>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Sui16Mui64(const int64_t size, const uint16_t in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint16_t>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Sui16Mui8(const int64_t size, const uint16_t in0, const uint8_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, uint8_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Sui32Md(const int64_t size, const uint32_t in0, const double * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, double, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Sui32Mi16(const int64_t size, const uint32_t in0, const int16_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, int16_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Sui32Mi32(const int64_t size, const uint32_t in0, const int32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, int32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Sui32Mi64(const int64_t size, const uint32_t in0, const int64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, int64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint32_t>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Sui32Mi8(const int64_t size, const uint32_t in0, const int8_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, int8_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Sui32Mui16(const int64_t size, const uint32_t in0, const uint16_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, uint16_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Sui32Mui32(const int64_t size, const uint32_t in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Sui32Mui64(const int64_t size, const uint32_t in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint32_t>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Sui32Mui8(const int64_t size, const uint32_t in0, const uint8_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, uint8_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Sui64Md(const int64_t size, const uint64_t in0, const double * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, double, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Sui64Mi16(const int64_t size, const uint64_t in0, const int16_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, int16_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Sui64Mi32(const int64_t size, const uint64_t in0, const int32_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, int32_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Sui64Mi64(const int64_t size, const uint64_t in0, const int64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, int64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Sui64Mi8(const int64_t size, const uint64_t in0, const int8_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, int8_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Sui64Mui16(const int64_t size, const uint64_t in0, const uint16_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, uint16_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Sui64Mui32(const int64_t size, const uint64_t in0, const uint32_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, uint32_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Sui64Mui64(const int64_t size, const uint64_t in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Sui64Mui8(const int64_t size, const uint64_t in0, const uint8_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, uint8_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Sui8Md(const int64_t size, const uint8_t in0, const double * in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, double, uint8_t>>(size, jit::vect::WrapVecIn<const uint8_t>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_Sui8Mi16(const int64_t size, const uint8_t in0, const int16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, int16_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint8_t>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Sui8Mi32(const int64_t size, const uint8_t in0, const int32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, int32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint8_t>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Sui8Mi64(const int64_t size, const uint8_t in0, const int64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, int64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint8_t>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Sui8Mi8(const int64_t size, const uint8_t in0, const int8_t * in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, int8_t, uint8_t>>(size, jit::vect::WrapVecIn<const uint8_t>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_Sui8Mui16(const int64_t size, const uint8_t in0, const uint16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint8_t>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Sui8Mui32(const int64_t size, const uint8_t in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint8_t>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Sui8Mui64(const int64_t size, const uint8_t in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint8_t>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Sui8Mui8(const int64_t size, const uint8_t in0, const uint8_t * in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, uint8_t, uint8_t>>(size, jit::vect::WrapVecIn<const uint8_t>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_UcUc(const int64_t size, const double * in0_re, const double * in0_im, const double * in1_re, const double * in1_im, double ** out_re, double ** out_im)
-{
-    jit::vect::binary<jit::functors::dotpower<const jit::cpx_t &, const jit::cpx_t &, jit::cpx_t>>(size, jit::vect::WrapVecIn<jit::cpx_t *>(in0_re, in0_im), jit::vect::WrapVecIn<jit::cpx_t *>(in1_re, in1_im), jit::vect::WrapOut<jit::cpx_t>(out_re, out_im));
-}
-void dotpower_UcUd(const int64_t size, const double * in0_re, const double * in0_im, const double * in1, double ** out_re, double ** out_im)
-{
-    jit::vect::binary<jit::functors::dotpower<const jit::cpx_t &, double, jit::cpx_t>>(size, jit::vect::WrapVecIn<jit::cpx_t *>(in0_re, in0_im), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<jit::cpx_t>(out_re, out_im));
-}
-void dotpower_UdUc(const int64_t size, const double * in0, const double * in1_re, const double * in1_im, double ** out_re, double ** out_im)
-{
-    jit::vect::binary<jit::functors::dotpower<double, const jit::cpx_t &, jit::cpx_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<jit::cpx_t *>(in1_re, in1_im), jit::vect::WrapOut<jit::cpx_t>(out_re, out_im));
-}
-void dotpower_UdUd(const int64_t size, const double * in0, const double * in1, double ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, double, double>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<double>(out));
-}
-void dotpower_UdUi16(const int64_t size, const double * in0, const int16_t * in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, int16_t, int16_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_UdUi32(const int64_t size, const double * in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_UdUi64(const int64_t size, const double * in0, const int64_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_UdUi8(const int64_t size, const double * in0, const int8_t * in1, int8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, int8_t, int8_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int8_t>(out));
-}
-void dotpower_UdUui16(const int64_t size, const double * in0, const uint16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_UdUui32(const int64_t size, const double * in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_UdUui64(const int64_t size, const double * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_UdUui8(const int64_t size, const double * in0, const uint8_t * in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<double, uint8_t, uint8_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_Ui16Ud(const int64_t size, const int16_t * in0, const double * in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, double, int16_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_Ui16Ui16(const int64_t size, const int16_t * in0, const int16_t * in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, int16_t, int16_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_Ui16Ui32(const int64_t size, const int16_t * in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Ui16Ui64(const int64_t size, const int16_t * in0, const int64_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Ui16Ui8(const int64_t size, const int16_t * in0, const int8_t * in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, int8_t, int16_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_Ui16Uui16(const int64_t size, const int16_t * in0, const uint16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Ui16Uui32(const int64_t size, const int16_t * in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Ui16Uui64(const int64_t size, const int16_t * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Ui16Uui8(const int64_t size, const int16_t * in0, const uint8_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int16_t, uint8_t, uint16_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Ui32Ud(const int64_t size, const int32_t * in0, const double * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, double, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Ui32Ui16(const int64_t size, const int32_t * in0, const int16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Ui32Ui32(const int64_t size, const int32_t * in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Ui32Ui64(const int64_t size, const int32_t * in0, const int64_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Ui32Ui8(const int64_t size, const int32_t * in0, const int8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Ui32Uui16(const int64_t size, const int32_t * in0, const uint16_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, uint16_t, uint32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Ui32Uui32(const int64_t size, const int32_t * in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Ui32Uui64(const int64_t size, const int32_t * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Ui32Uui8(const int64_t size, const int32_t * in0, const uint8_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int32_t, uint8_t, uint32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Ui64Ud(const int64_t size, const int64_t * in0, const double * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, double, int64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Ui64Ui16(const int64_t size, const int64_t * in0, const int16_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, int16_t, int64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Ui64Ui32(const int64_t size, const int64_t * in0, const int32_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, int32_t, int64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Ui64Ui64(const int64_t size, const int64_t * in0, const int64_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Ui64Ui8(const int64_t size, const int64_t * in0, const int8_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, int8_t, int64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Ui64Uui16(const int64_t size, const int64_t * in0, const uint16_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, uint16_t, uint64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Ui64Uui32(const int64_t size, const int64_t * in0, const uint32_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, uint32_t, uint64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Ui64Uui64(const int64_t size, const int64_t * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Ui64Uui8(const int64_t size, const int64_t * in0, const uint8_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int64_t, uint8_t, uint64_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Ui8Ud(const int64_t size, const int8_t * in0, const double * in1, int8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, double, int8_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int8_t>(out));
-}
-void dotpower_Ui8Ui16(const int64_t size, const int8_t * in0, const int16_t * in1, int16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, int16_t, int16_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int16_t>(out));
-}
-void dotpower_Ui8Ui32(const int64_t size, const int8_t * in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void dotpower_Ui8Ui64(const int64_t size, const int8_t * in0, const int64_t * in1, int64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, int64_t, int64_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int64_t>(out));
-}
-void dotpower_Ui8Ui8(const int64_t size, const int8_t * in0, const int8_t * in1, int8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, int8_t, int8_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int8_t>(out));
-}
-void dotpower_Ui8Uui16(const int64_t size, const int8_t * in0, const uint16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Ui8Uui32(const int64_t size, const int8_t * in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Ui8Uui64(const int64_t size, const int8_t * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Ui8Uui8(const int64_t size, const int8_t * in0, const uint8_t * in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<int8_t, uint8_t, uint8_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_Uui16Ud(const int64_t size, const uint16_t * in0, const double * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, double, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Uui16Ui16(const int64_t size, const uint16_t * in0, const int16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, int16_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Uui16Ui32(const int64_t size, const uint16_t * in0, const int32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, int32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Uui16Ui64(const int64_t size, const uint16_t * in0, const int64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, int64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Uui16Ui8(const int64_t size, const uint16_t * in0, const int8_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, int8_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Uui16Uui16(const int64_t size, const uint16_t * in0, const uint16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Uui16Uui32(const int64_t size, const uint16_t * in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Uui16Uui64(const int64_t size, const uint16_t * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Uui16Uui8(const int64_t size, const uint16_t * in0, const uint8_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint16_t, uint8_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Uui32Ud(const int64_t size, const uint32_t * in0, const double * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, double, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Uui32Ui16(const int64_t size, const uint32_t * in0, const int16_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, int16_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Uui32Ui32(const int64_t size, const uint32_t * in0, const int32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, int32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Uui32Ui64(const int64_t size, const uint32_t * in0, const int64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, int64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Uui32Ui8(const int64_t size, const uint32_t * in0, const int8_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, int8_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Uui32Uui16(const int64_t size, const uint32_t * in0, const uint16_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, uint16_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Uui32Uui32(const int64_t size, const uint32_t * in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Uui32Uui64(const int64_t size, const uint32_t * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Uui32Uui8(const int64_t size, const uint32_t * in0, const uint8_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint32_t, uint8_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Uui64Ud(const int64_t size, const uint64_t * in0, const double * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, double, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Uui64Ui16(const int64_t size, const uint64_t * in0, const int16_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, int16_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Uui64Ui32(const int64_t size, const uint64_t * in0, const int32_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, int32_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Uui64Ui64(const int64_t size, const uint64_t * in0, const int64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, int64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Uui64Ui8(const int64_t size, const uint64_t * in0, const int8_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, int8_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Uui64Uui16(const int64_t size, const uint64_t * in0, const uint16_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, uint16_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Uui64Uui32(const int64_t size, const uint64_t * in0, const uint32_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, uint32_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Uui64Uui64(const int64_t size, const uint64_t * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Uui64Uui8(const int64_t size, const uint64_t * in0, const uint8_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint64_t, uint8_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Uui8Ud(const int64_t size, const uint8_t * in0, const double * in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, double, uint8_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_Uui8Ui16(const int64_t size, const uint8_t * in0, const int16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, int16_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Uui8Ui32(const int64_t size, const uint8_t * in0, const int32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, int32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Uui8Ui64(const int64_t size, const uint8_t * in0, const int64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, int64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Uui8Ui8(const int64_t size, const uint8_t * in0, const int8_t * in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, int8_t, uint8_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void dotpower_Uui8Uui16(const int64_t size, const uint8_t * in0, const uint16_t * in1, uint16_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, uint16_t, uint16_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<uint16_t>(out));
-}
-void dotpower_Uui8Uui32(const int64_t size, const uint8_t * in0, const uint32_t * in1, uint32_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, uint32_t, uint32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<uint32_t>(out));
-}
-void dotpower_Uui8Uui64(const int64_t size, const uint8_t * in0, const uint64_t * in1, uint64_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, uint64_t, uint64_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<uint64_t>(out));
-}
-void dotpower_Uui8Uui8(const int64_t size, const uint8_t * in0, const uint8_t * in1, uint8_t ** out)
-{
-    jit::vect::binary<jit::functors::dotpower<uint8_t, uint8_t, uint8_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<uint8_t>(out));
-}
-void ge_MdMd(const int64_t size, const double * in0, const double * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, double, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_MdMi16(const int64_t size, const double * in0, const int16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_MdMi32(const int64_t size, const double * in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_MdMi64(const int64_t size, const double * in0, const int64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_MdMi8(const int64_t size, const double * in0, const int8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_MdMui16(const int64_t size, const double * in0, const uint16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_MdMui32(const int64_t size, const double * in0, const uint32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_MdMui64(const int64_t size, const double * in0, const uint64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_MdMui8(const int64_t size, const double * in0, const uint8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_MdSd(const int64_t size, const double * in0, const double in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, double, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_MdSi16(const int64_t size, const double * in0, const int16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_MdSi32(const int64_t size, const double * in0, const int32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_MdSi64(const int64_t size, const double * in0, const int64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_MdSi8(const int64_t size, const double * in0, const int8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_MdSui16(const int64_t size, const double * in0, const uint16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_MdSui32(const int64_t size, const double * in0, const uint32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_MdSui64(const int64_t size, const double * in0, const uint64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_MdSui8(const int64_t size, const double * in0, const uint8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const double *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Md(const int64_t size, const int16_t * in0, const double * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, double, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Mi16(const int64_t size, const int16_t * in0, const int16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Mi32(const int64_t size, const int16_t * in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Mi64(const int64_t size, const int16_t * in0, const int64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Mi8(const int64_t size, const int16_t * in0, const int8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Mui16(const int64_t size, const int16_t * in0, const uint16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Mui32(const int64_t size, const int16_t * in0, const uint32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Mui64(const int64_t size, const int16_t * in0, const uint64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Mui8(const int64_t size, const int16_t * in0, const uint8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Sd(const int64_t size, const int16_t * in0, const double in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, double, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Si16(const int64_t size, const int16_t * in0, const int16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Si32(const int64_t size, const int16_t * in0, const int32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Si64(const int64_t size, const int16_t * in0, const int64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Si8(const int64_t size, const int16_t * in0, const int8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Sui16(const int64_t size, const int16_t * in0, const uint16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Sui32(const int64_t size, const int16_t * in0, const uint32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Sui64(const int64_t size, const int16_t * in0, const uint64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi16Sui8(const int64_t size, const int16_t * in0, const uint8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Md(const int64_t size, const int32_t * in0, const double * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, double, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Mi16(const int64_t size, const int32_t * in0, const int16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Mi32(const int64_t size, const int32_t * in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Mi64(const int64_t size, const int32_t * in0, const int64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Mi8(const int64_t size, const int32_t * in0, const int8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Mui16(const int64_t size, const int32_t * in0, const uint16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Mui32(const int64_t size, const int32_t * in0, const uint32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Mui64(const int64_t size, const int32_t * in0, const uint64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Mui8(const int64_t size, const int32_t * in0, const uint8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Sd(const int64_t size, const int32_t * in0, const double in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, double, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Si16(const int64_t size, const int32_t * in0, const int16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Si32(const int64_t size, const int32_t * in0, const int32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Si64(const int64_t size, const int32_t * in0, const int64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Si8(const int64_t size, const int32_t * in0, const int8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Sui16(const int64_t size, const int32_t * in0, const uint16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Sui32(const int64_t size, const int32_t * in0, const uint32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Sui64(const int64_t size, const int32_t * in0, const uint64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi32Sui8(const int64_t size, const int32_t * in0, const uint8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Md(const int64_t size, const int64_t * in0, const double * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, double, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Mi16(const int64_t size, const int64_t * in0, const int16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Mi32(const int64_t size, const int64_t * in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Mi64(const int64_t size, const int64_t * in0, const int64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Mi8(const int64_t size, const int64_t * in0, const int8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Mui16(const int64_t size, const int64_t * in0, const uint16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Mui32(const int64_t size, const int64_t * in0, const uint32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Mui64(const int64_t size, const int64_t * in0, const uint64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Mui8(const int64_t size, const int64_t * in0, const uint8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Sd(const int64_t size, const int64_t * in0, const double in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, double, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Si16(const int64_t size, const int64_t * in0, const int16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Si32(const int64_t size, const int64_t * in0, const int32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Si64(const int64_t size, const int64_t * in0, const int64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Si8(const int64_t size, const int64_t * in0, const int8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Sui16(const int64_t size, const int64_t * in0, const uint16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Sui32(const int64_t size, const int64_t * in0, const uint32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Sui64(const int64_t size, const int64_t * in0, const uint64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi64Sui8(const int64_t size, const int64_t * in0, const uint8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int64_t, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const int64_t *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Md(const int64_t size, const int8_t * in0, const double * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, double, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Mi16(const int64_t size, const int8_t * in0, const int16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Mi32(const int64_t size, const int8_t * in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Mi64(const int64_t size, const int8_t * in0, const int64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Mi8(const int64_t size, const int8_t * in0, const int8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Mui16(const int64_t size, const int8_t * in0, const uint16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Mui32(const int64_t size, const int8_t * in0, const uint32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Mui64(const int64_t size, const int8_t * in0, const uint64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Mui8(const int64_t size, const int8_t * in0, const uint8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Sd(const int64_t size, const int8_t * in0, const double in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, double, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Si16(const int64_t size, const int8_t * in0, const int16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Si32(const int64_t size, const int8_t * in0, const int32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Si64(const int64_t size, const int8_t * in0, const int64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Si8(const int64_t size, const int8_t * in0, const int8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Sui16(const int64_t size, const int8_t * in0, const uint16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Sui32(const int64_t size, const int8_t * in0, const uint32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Sui64(const int64_t size, const int8_t * in0, const uint64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mi8Sui8(const int64_t size, const int8_t * in0, const uint8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int8_t, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const int8_t *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Md(const int64_t size, const uint16_t * in0, const double * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, double, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Mi16(const int64_t size, const uint16_t * in0, const int16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Mi32(const int64_t size, const uint16_t * in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Mi64(const int64_t size, const uint16_t * in0, const int64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Mi8(const int64_t size, const uint16_t * in0, const int8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Mui16(const int64_t size, const uint16_t * in0, const uint16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Mui32(const int64_t size, const uint16_t * in0, const uint32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Mui64(const int64_t size, const uint16_t * in0, const uint64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Mui8(const int64_t size, const uint16_t * in0, const uint8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Sd(const int64_t size, const uint16_t * in0, const double in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, double, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Si16(const int64_t size, const uint16_t * in0, const int16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Si32(const int64_t size, const uint16_t * in0, const int32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Si64(const int64_t size, const uint16_t * in0, const int64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Si8(const int64_t size, const uint16_t * in0, const int8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Sui16(const int64_t size, const uint16_t * in0, const uint16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Sui32(const int64_t size, const uint16_t * in0, const uint32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Sui64(const int64_t size, const uint16_t * in0, const uint64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui16Sui8(const int64_t size, const uint16_t * in0, const uint8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint16_t, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const uint16_t *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Md(const int64_t size, const uint32_t * in0, const double * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, double, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Mi16(const int64_t size, const uint32_t * in0, const int16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Mi32(const int64_t size, const uint32_t * in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Mi64(const int64_t size, const uint32_t * in0, const int64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Mi8(const int64_t size, const uint32_t * in0, const int8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Mui16(const int64_t size, const uint32_t * in0, const uint16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Mui32(const int64_t size, const uint32_t * in0, const uint32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Mui64(const int64_t size, const uint32_t * in0, const uint64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Mui8(const int64_t size, const uint32_t * in0, const uint8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Sd(const int64_t size, const uint32_t * in0, const double in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, double, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Si16(const int64_t size, const uint32_t * in0, const int16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Si32(const int64_t size, const uint32_t * in0, const int32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Si64(const int64_t size, const uint32_t * in0, const int64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Si8(const int64_t size, const uint32_t * in0, const int8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Sui16(const int64_t size, const uint32_t * in0, const uint16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Sui32(const int64_t size, const uint32_t * in0, const uint32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Sui64(const int64_t size, const uint32_t * in0, const uint64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui32Sui8(const int64_t size, const uint32_t * in0, const uint8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint32_t, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const uint32_t *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Md(const int64_t size, const uint64_t * in0, const double * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, double, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Mi16(const int64_t size, const uint64_t * in0, const int16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Mi32(const int64_t size, const uint64_t * in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Mi64(const int64_t size, const uint64_t * in0, const int64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Mi8(const int64_t size, const uint64_t * in0, const int8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Mui16(const int64_t size, const uint64_t * in0, const uint16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Mui32(const int64_t size, const uint64_t * in0, const uint32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Mui64(const int64_t size, const uint64_t * in0, const uint64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Mui8(const int64_t size, const uint64_t * in0, const uint8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Sd(const int64_t size, const uint64_t * in0, const double in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, double, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Si16(const int64_t size, const uint64_t * in0, const int16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Si32(const int64_t size, const uint64_t * in0, const int32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Si64(const int64_t size, const uint64_t * in0, const int64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Si8(const int64_t size, const uint64_t * in0, const int8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Sui16(const int64_t size, const uint64_t * in0, const uint16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Sui32(const int64_t size, const uint64_t * in0, const uint32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Sui64(const int64_t size, const uint64_t * in0, const uint64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui64Sui8(const int64_t size, const uint64_t * in0, const uint8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint64_t, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const uint64_t *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Md(const int64_t size, const uint8_t * in0, const double * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, double, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Mi16(const int64_t size, const uint8_t * in0, const int16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Mi32(const int64_t size, const uint8_t * in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Mi64(const int64_t size, const uint8_t * in0, const int64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Mi8(const int64_t size, const uint8_t * in0, const int8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Mui16(const int64_t size, const uint8_t * in0, const uint16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Mui32(const int64_t size, const uint8_t * in0, const uint32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Mui64(const int64_t size, const uint8_t * in0, const uint64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Mui8(const int64_t size, const uint8_t * in0, const uint8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Sd(const int64_t size, const uint8_t * in0, const double in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, double, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const double>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Si16(const int64_t size, const uint8_t * in0, const int16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Si32(const int64_t size, const uint8_t * in0, const int32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Si64(const int64_t size, const uint8_t * in0, const int64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Si8(const int64_t size, const uint8_t * in0, const int8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const int8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Sui16(const int64_t size, const uint8_t * in0, const uint16_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint16_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Sui32(const int64_t size, const uint8_t * in0, const uint32_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint32_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Sui64(const int64_t size, const uint8_t * in0, const uint64_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint64_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Mui8Sui8(const int64_t size, const uint8_t * in0, const uint8_t in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<uint8_t, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const uint8_t *>(in0), jit::vect::WrapVecIn<const uint8_t>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_SdMd(const int64_t size, const double in0, const double * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, double, int32_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_SdMi16(const int64_t size, const double in0, const int16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_SdMi32(const int64_t size, const double in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_SdMi64(const int64_t size, const double in0, const int64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_SdMi8(const int64_t size, const double in0, const int8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_SdMui16(const int64_t size, const double in0, const uint16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_SdMui32(const int64_t size, const double in0, const uint32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_SdMui64(const int64_t size, const double in0, const uint64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_SdMui8(const int64_t size, const double in0, const uint8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<double, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const double>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Si16Md(const int64_t size, const int16_t in0, const double * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, double, int32_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Si16Mi16(const int64_t size, const int16_t in0, const int16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Si16Mi32(const int64_t size, const int16_t in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Si16Mi64(const int64_t size, const int16_t in0, const int64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Si16Mi8(const int64_t size, const int16_t in0, const int8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, int8_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const int8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Si16Mui16(const int64_t size, const int16_t in0, const uint16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, uint16_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const uint16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Si16Mui32(const int64_t size, const int16_t in0, const uint32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, uint32_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const uint32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Si16Mui64(const int64_t size, const int16_t in0, const uint64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, uint64_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const uint64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Si16Mui8(const int64_t size, const int16_t in0, const uint8_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int16_t, uint8_t, int32_t>>(size, jit::vect::WrapVecIn<const int16_t>(in0), jit::vect::WrapVecIn<const uint8_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Si32Md(const int64_t size, const int32_t in0, const double * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, double, int32_t>>(size, jit::vect::WrapVecIn<const int32_t>(in0), jit::vect::WrapVecIn<const double *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Si32Mi16(const int64_t size, const int32_t in0, const int16_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, int16_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t>(in0), jit::vect::WrapVecIn<const int16_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Si32Mi32(const int64_t size, const int32_t in0, const int32_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, int32_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t>(in0), jit::vect::WrapVecIn<const int32_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Si32Mi64(const int64_t size, const int32_t in0, const int64_t * in1, int32_t ** out)
-{
-    jit::vect::binary<jit::functors::ge<int32_t, int64_t, int32_t>>(size, jit::vect::WrapVecIn<const int32_t>(in0), jit::vect::WrapVecIn<const int64_t *>(in1), jit::vect::WrapOut<int32_t>(out));
-}
-void ge_Si32Mi8(const int64_t size, const int32_t in0, cons