JIT (WIP): first files 85/17185/2
Calixte DENIZET [Wed, 9 Sep 2015 12:47:44 +0000 (14:47 +0200)]
Change-Id: I09b51a9495f4d07f19ea6c158b342b07c9521121

125 files changed:
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/jit/BaseFunctions.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/BaseFunctionsAgain.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/BaseFunctionsMacros.h [new file with mode: 0644]
scilab/modules/ast/includes/jit/BaseFunctionsMacros2.h [new file with mode: 0644]
scilab/modules/ast/includes/jit/BaseFunctionsMacros3.h [new file with mode: 0644]
scilab/modules/ast/includes/jit/Cast.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/Disassembler.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/JITArrayof.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/JITArrayofs.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/JITScalar.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/JITScalars.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/JITScilabVal.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/JITVal.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/JITValues.hxx [deleted file]
scilab/modules/ast/includes/jit/JITVisitor.hxx
scilab/modules/ast/includes/jit/MemoryManager.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/ScilabJITEventListener.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/ScilabJITTraits.hxx
scilab/modules/ast/includes/jit/base/addition.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/and.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/binary.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/binary_functors.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/elem_functions.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/equal.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/exponentiation.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/functors.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/greater_or_eq.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/greater_than.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/ldivision.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/lower_or_eq.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/lower_than.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/not_equal.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/or.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/product.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/rdivision.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/subtraction.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/tools.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/base/vectorization.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/blocks/ShortcutEval.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/FunCallInitializer.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/FunctionSignature.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITAbs.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITAngle.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITBinOp.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITBinOpCall.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITCall.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITCall1.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITCeil.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITConj.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITFloor.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITGatewayCall.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITImag.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITImult.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITLog.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITOptimizedCall1.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITReal.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITRound.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITShortcutBinOpCall.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITSign.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITSize.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITSize1.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITSqrt.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITUnaryOpCall.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/calls/JITZeros.hxx [new file with mode: 0644]
scilab/modules/ast/includes/jit/funs_interf.bak.2 [new file with mode: 0644]
scilab/modules/ast/includes/jit/funs_interf.h [new file with mode: 0644]
scilab/modules/ast/includes/jit/jit_operations.hxx [deleted file]
scilab/modules/ast/includes/types/double.hxx
scilab/modules/ast/src/cpp/jit/BaseFunctions1.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/BaseFunctions2.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/BaseFunctionsAgain.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/FunctionSignature.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITAbs.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITAddition.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITAngle.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITBinOp.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITBinOpCall.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITBreakContinueExps.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITCall.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITCallExp.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITCeil.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITComparisons.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITComplexVal.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITConj.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITEquality.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITFloor.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITForExp.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITIfExp.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITImag.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITImult.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITIntSelectExp.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITLog.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITMultiplication.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITNegation.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITNotEquality.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITOpExp.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITOpposite.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITOptimizedCall1.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITPower.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITRDivision.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITReal.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITRound.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITSelectExp.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITShortcutBinOpCall.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITShortcutOps.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITSign.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITSize.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITSqrt.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITSubtraction.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITUnaryOpCall.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITValues.cpp [deleted file]
scilab/modules/ast/src/cpp/jit/JITVisitor.cpp
scilab/modules/ast/src/cpp/jit/JITWhileExp.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/JITZeros.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/MemoryManager.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/ScilabJITEventListener.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/ShortcutEval.cpp [new file with mode: 0644]
scilab/modules/ast/src/cpp/jit/jit_operations.cpp [deleted file]
scilab/modules/ast/src/cpp/types/double.cpp
scilab/modules/core/includes/core_math.h
scilab/modules/functions/sci_gateway/cpp/sci_jit.cpp

index afdb25d..896e6b4 100644 (file)
@@ -163,10 +163,6 @@ src/cpp/analysis/VisitSimpleVar.cpp \
 src/cpp/analysis/VisitDollarVar.cpp \
 src/cpp/analysis/VisitVarDec.cpp \
 src/cpp/analysis/XBlock.cpp \
-src/cpp/jit/JITVisitor.cpp \
-src/cpp/jit/JITValues.cpp \
-src/cpp/jit/jit_operations.cpp \
-src/cpp/jit/GlobalCFunctions.cpp \
 src/cpp/analysis/check_____dotpower____.cpp \
 src/cpp/analysis/check_rand.cpp \
 src/cpp/analysis/check_____ge____.cpp \
@@ -247,7 +243,53 @@ src/cpp/analysis/check_min.cpp \
 src/cpp/analysis/check_sum.cpp \
 src/cpp/analysis/check_____ldivide____.cpp \
 src/cpp/analysis/check_acos.cpp \
-src/cpp/analysis/check_____dottimes____.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/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/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/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/ScilabJITEventListener.cpp \
+src/cpp/jit/BaseFunctions1.cpp \
+src/cpp/jit/BaseFunctions2.cpp
 
 
 if ENABLE_DEBUG
@@ -277,10 +319,11 @@ libsciast_la_CPPFLAGS = \
        -I$(top_srcdir)/modules/localization/includes \
        -I$(top_srcdir)/modules/io/includes \
        -I$(top_srcdir)/modules/fileio/includes \
+       -I$(top_srcdir)/modules/special_functions/src/cpp \
        $(LLVM_INCLUDE) \
        $(LLVM_CPPFLAGS) \
        $(LLVM_LDFLAGS) \
-    $(LLVM_LIBS) \
+        $(LLVM_LIBS) \
        $(EIGEN_CPPFLAGS) \
        $(AM_CPPFLAGS)
 
index 5f497a3..ae16809 100644 (file)
@@ -290,9 +290,6 @@ am__libsciast_la_SOURCES_DIST = src/c/operations/doublecomplex.c \
        src/cpp/analysis/VisitSimpleVar.cpp \
        src/cpp/analysis/VisitDollarVar.cpp \
        src/cpp/analysis/VisitVarDec.cpp src/cpp/analysis/XBlock.cpp \
-       src/cpp/jit/JITVisitor.cpp src/cpp/jit/JITValues.cpp \
-       src/cpp/jit/jit_operations.cpp \
-       src/cpp/jit/GlobalCFunctions.cpp \
        src/cpp/analysis/check_____dotpower____.cpp \
        src/cpp/analysis/check_rand.cpp \
        src/cpp/analysis/check_____ge____.cpp \
@@ -365,6 +362,31 @@ 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/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/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/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/ScilabJITEventListener.cpp \
+       src/cpp/jit/BaseFunctions1.cpp src/cpp/jit/BaseFunctions2.cpp \
        src/cpp/types/inspector.cpp
 am__dirstamp = $(am__leading_dot)dirstamp
 @ENABLE_DEBUG_TRUE@am__objects_1 =  \
@@ -519,10 +541,6 @@ am_libsciast_la_OBJECTS =  \
        src/cpp/analysis/libsciast_la-VisitDollarVar.lo \
        src/cpp/analysis/libsciast_la-VisitVarDec.lo \
        src/cpp/analysis/libsciast_la-XBlock.lo \
-       src/cpp/jit/libsciast_la-JITVisitor.lo \
-       src/cpp/jit/libsciast_la-JITValues.lo \
-       src/cpp/jit/libsciast_la-jit_operations.lo \
-       src/cpp/jit/libsciast_la-GlobalCFunctions.lo \
        src/cpp/analysis/libsciast_la-check_____dotpower____.lo \
        src/cpp/analysis/libsciast_la-check_rand.lo \
        src/cpp/analysis/libsciast_la-check_____ge____.lo \
@@ -604,7 +622,52 @@ am_libsciast_la_OBJECTS =  \
        src/cpp/analysis/libsciast_la-check_____ldivide____.lo \
        src/cpp/analysis/libsciast_la-check_acos.lo \
        src/cpp/analysis/libsciast_la-check_____dottimes____.lo \
-       $(am__objects_1)
+       src/cpp/jit/libsciast_la-JITVisitor.lo \
+       src/cpp/jit/libsciast_la-JITComplexVal.lo \
+       src/cpp/jit/libsciast_la-MemoryManager.lo \
+       src/cpp/jit/libsciast_la-JITCallExp.lo \
+       src/cpp/jit/libsciast_la-JITForExp.lo \
+       src/cpp/jit/libsciast_la-JITCall.lo \
+       src/cpp/jit/libsciast_la-JITSize.lo \
+       src/cpp/jit/libsciast_la-JITZeros.lo \
+       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-JITShortcutBinOpCall.lo \
+       src/cpp/jit/libsciast_la-ShortcutEval.lo \
+       src/cpp/jit/libsciast_la-JITIfExp.lo \
+       src/cpp/jit/libsciast_la-JITWhileExp.lo \
+       src/cpp/jit/libsciast_la-JITBreakContinueExps.lo \
+       src/cpp/jit/libsciast_la-JITSelectExp.lo \
+       src/cpp/jit/libsciast_la-JITIntSelectExp.lo \
+       src/cpp/jit/libsciast_la-JITOptimizedCall1.lo \
+       src/cpp/jit/libsciast_la-JITSign.lo \
+       src/cpp/jit/libsciast_la-JITSqrt.lo \
+       src/cpp/jit/libsciast_la-JITLog.lo \
+       src/cpp/jit/libsciast_la-JITAbs.lo \
+       src/cpp/jit/libsciast_la-JITAngle.lo \
+       src/cpp/jit/libsciast_la-JITReal.lo \
+       src/cpp/jit/libsciast_la-JITImag.lo \
+       src/cpp/jit/libsciast_la-JITImult.lo \
+       src/cpp/jit/libsciast_la-JITConj.lo \
+       src/cpp/jit/libsciast_la-JITFloor.lo \
+       src/cpp/jit/libsciast_la-JITCeil.lo \
+       src/cpp/jit/libsciast_la-JITRound.lo \
+       src/cpp/jit/libsciast_la-JITAddition.lo \
+       src/cpp/jit/libsciast_la-JITSubtraction.lo \
+       src/cpp/jit/libsciast_la-JITOpposite.lo \
+       src/cpp/jit/libsciast_la-JITMultiplication.lo \
+       src/cpp/jit/libsciast_la-JITEquality.lo \
+       src/cpp/jit/libsciast_la-JITShortcutOps.lo \
+       src/cpp/jit/libsciast_la-JITNotEquality.lo \
+       src/cpp/jit/libsciast_la-JITComparisons.lo \
+       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-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)
 libsciast_la_OBJECTS = $(am_libsciast_la_OBJECTS)
 AM_V_lt = $(am__v_lt_@AM_V@)
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -979,6 +1042,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
@@ -1104,9 +1168,6 @@ libsciast_la_SOURCES = src/c/operations/doublecomplex.c \
        src/cpp/analysis/VisitSimpleVar.cpp \
        src/cpp/analysis/VisitDollarVar.cpp \
        src/cpp/analysis/VisitVarDec.cpp src/cpp/analysis/XBlock.cpp \
-       src/cpp/jit/JITVisitor.cpp src/cpp/jit/JITValues.cpp \
-       src/cpp/jit/jit_operations.cpp \
-       src/cpp/jit/GlobalCFunctions.cpp \
        src/cpp/analysis/check_____dotpower____.cpp \
        src/cpp/analysis/check_rand.cpp \
        src/cpp/analysis/check_____ge____.cpp \
@@ -1178,7 +1239,33 @@ libsciast_la_SOURCES = src/c/operations/doublecomplex.c \
        src/cpp/analysis/check_sum.cpp \
        src/cpp/analysis/check_____ldivide____.cpp \
        src/cpp/analysis/check_acos.cpp \
-       src/cpp/analysis/check_____dottimes____.cpp $(am__append_1)
+       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/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/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/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/ScilabJITEventListener.cpp \
+       src/cpp/jit/BaseFunctions1.cpp src/cpp/jit/BaseFunctions2.cpp \
+       $(am__append_1)
 libsciast_la_CPPFLAGS = \
        -I$(srcdir)/src/cpp \
        -I$(srcdir)/includes/ast \
@@ -1201,10 +1288,11 @@ libsciast_la_CPPFLAGS = \
        -I$(top_srcdir)/modules/localization/includes \
        -I$(top_srcdir)/modules/io/includes \
        -I$(top_srcdir)/modules/fileio/includes \
+       -I$(top_srcdir)/modules/special_functions/src/cpp \
        $(LLVM_INCLUDE) \
        $(LLVM_CPPFLAGS) \
        $(LLVM_LDFLAGS) \
-    $(LLVM_LIBS) \
+        $(LLVM_LIBS) \
        $(EIGEN_CPPFLAGS) \
        $(AM_CPPFLAGS)
 
@@ -2043,22 +2131,6 @@ src/cpp/analysis/libsciast_la-VisitVarDec.lo:  \
 src/cpp/analysis/libsciast_la-XBlock.lo:  \
        src/cpp/analysis/$(am__dirstamp) \
        src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
-src/cpp/jit/$(am__dirstamp):
-       @$(MKDIR_P) src/cpp/jit
-       @: > src/cpp/jit/$(am__dirstamp)
-src/cpp/jit/$(DEPDIR)/$(am__dirstamp):
-       @$(MKDIR_P) src/cpp/jit/$(DEPDIR)
-       @: > 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-JITValues.lo: src/cpp/jit/$(am__dirstamp) \
-       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
-src/cpp/jit/libsciast_la-jit_operations.lo:  \
-       src/cpp/jit/$(am__dirstamp) \
-       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
-src/cpp/jit/libsciast_la-GlobalCFunctions.lo:  \
-       src/cpp/jit/$(am__dirstamp) \
-       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
 src/cpp/analysis/libsciast_la-check_____dotpower____.lo:  \
        src/cpp/analysis/$(am__dirstamp) \
        src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
@@ -2302,6 +2374,120 @@ src/cpp/analysis/libsciast_la-check_acos.lo:  \
 src/cpp/analysis/libsciast_la-check_____dottimes____.lo:  \
        src/cpp/analysis/$(am__dirstamp) \
        src/cpp/analysis/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/$(am__dirstamp):
+       @$(MKDIR_P) src/cpp/jit
+       @: > src/cpp/jit/$(am__dirstamp)
+src/cpp/jit/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/cpp/jit/$(DEPDIR)
+       @: > 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-JITComplexVal.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-MemoryManager.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITCallExp.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITForExp.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITCall.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITSize.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITZeros.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITBinOpCall.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITUnaryOpCall.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       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-JITShortcutBinOpCall.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-ShortcutEval.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITIfExp.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITWhileExp.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITBreakContinueExps.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITSelectExp.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITIntSelectExp.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITOptimizedCall1.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) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITLog.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITAbs.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITAngle.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITReal.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITImag.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITImult.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITConj.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITFloor.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITCeil.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITRound.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITAddition.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITSubtraction.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITOpposite.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITMultiplication.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITEquality.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITShortcutOps.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITNotEquality.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITComparisons.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-JITNegation.lo: src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+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-FunctionSignature.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-ScilabJITEventListener.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-BaseFunctions1.lo:  \
+       src/cpp/jit/$(am__dirstamp) \
+       src/cpp/jit/$(DEPDIR)/$(am__dirstamp)
+src/cpp/jit/libsciast_la-BaseFunctions2.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)
@@ -2489,10 +2675,52 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/ast/$(DEPDIR)/libsciast_la-shortcutvisitor.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/ast/$(DEPDIR)/libsciast_la-treevisitor.Plo@am__quote@
 @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-GlobalCFunctions.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITValues.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-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-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@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITCallExp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITCeil.Plo@am__quote@
+@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-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@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITIfExp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITImag.Plo@am__quote@
+@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-JITMultiplication.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITNegation.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITNotEquality.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITOpExp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITOpposite.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITOptimizedCall1.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITPower.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITRDivision.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITReal.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITRound.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITSelectExp.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITShortcutBinOpCall.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITShortcutOps.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITSign.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/cpp/jit/$(DEPDIR)/libsciast_la-JITSize.Plo@am__quote@
+@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-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-jit_operations.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-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@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/operations/$(DEPDIR)/libsciast_la-interface_addition.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/operations/$(DEPDIR)/libsciast_la-operations.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/cpp/operations/$(DEPDIR)/libsciast_la-types_addition.Plo@am__quote@
@@ -3660,34 +3888,6 @@ src/cpp/analysis/libsciast_la-XBlock.lo: src/cpp/analysis/XBlock.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/analysis/libsciast_la-XBlock.lo `test -f 'src/cpp/analysis/XBlock.cpp' || echo '$(srcdir)/'`src/cpp/analysis/XBlock.cpp
 
-src/cpp/jit/libsciast_la-JITVisitor.lo: src/cpp/jit/JITVisitor.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-JITVisitor.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITVisitor.Tpo -c -o src/cpp/jit/libsciast_la-JITVisitor.lo `test -f 'src/cpp/jit/JITVisitor.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITVisitor.cpp
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITVisitor.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITVisitor.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITVisitor.cpp' object='src/cpp/jit/libsciast_la-JITVisitor.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-JITVisitor.lo `test -f 'src/cpp/jit/JITVisitor.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITVisitor.cpp
-
-src/cpp/jit/libsciast_la-JITValues.lo: src/cpp/jit/JITValues.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-JITValues.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITValues.Tpo -c -o src/cpp/jit/libsciast_la-JITValues.lo `test -f 'src/cpp/jit/JITValues.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITValues.cpp
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITValues.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITValues.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITValues.cpp' object='src/cpp/jit/libsciast_la-JITValues.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-JITValues.lo `test -f 'src/cpp/jit/JITValues.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITValues.cpp
-
-src/cpp/jit/libsciast_la-jit_operations.lo: src/cpp/jit/jit_operations.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-jit_operations.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-jit_operations.Tpo -c -o src/cpp/jit/libsciast_la-jit_operations.lo `test -f 'src/cpp/jit/jit_operations.cpp' || echo '$(srcdir)/'`src/cpp/jit/jit_operations.cpp
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-jit_operations.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-jit_operations.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/jit_operations.cpp' object='src/cpp/jit/libsciast_la-jit_operations.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-jit_operations.lo `test -f 'src/cpp/jit/jit_operations.cpp' || echo '$(srcdir)/'`src/cpp/jit/jit_operations.cpp
-
-src/cpp/jit/libsciast_la-GlobalCFunctions.lo: src/cpp/jit/GlobalCFunctions.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-GlobalCFunctions.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-GlobalCFunctions.Tpo -c -o src/cpp/jit/libsciast_la-GlobalCFunctions.lo `test -f 'src/cpp/jit/GlobalCFunctions.cpp' || echo '$(srcdir)/'`src/cpp/jit/GlobalCFunctions.cpp
-@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-GlobalCFunctions.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-GlobalCFunctions.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/GlobalCFunctions.cpp' object='src/cpp/jit/libsciast_la-GlobalCFunctions.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-GlobalCFunctions.lo `test -f 'src/cpp/jit/GlobalCFunctions.cpp' || echo '$(srcdir)/'`src/cpp/jit/GlobalCFunctions.cpp
-
 src/cpp/analysis/libsciast_la-check_____dotpower____.lo: src/cpp/analysis/check_____dotpower____.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/analysis/libsciast_la-check_____dotpower____.lo -MD -MP -MF src/cpp/analysis/$(DEPDIR)/libsciast_la-check_____dotpower____.Tpo -c -o src/cpp/analysis/libsciast_la-check_____dotpower____.lo `test -f 'src/cpp/analysis/check_____dotpower____.cpp' || echo '$(srcdir)/'`src/cpp/analysis/check_____dotpower____.cpp
 @am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/analysis/$(DEPDIR)/libsciast_la-check_____dotpower____.Tpo src/cpp/analysis/$(DEPDIR)/libsciast_la-check_____dotpower____.Plo
@@ -4255,6 +4455,328 @@ src/cpp/analysis/libsciast_la-check_____dottimes____.lo: src/cpp/analysis/check_
 @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/analysis/libsciast_la-check_____dottimes____.lo `test -f 'src/cpp/analysis/check_____dottimes____.cpp' || echo '$(srcdir)/'`src/cpp/analysis/check_____dottimes____.cpp
 
+src/cpp/jit/libsciast_la-JITVisitor.lo: src/cpp/jit/JITVisitor.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-JITVisitor.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITVisitor.Tpo -c -o src/cpp/jit/libsciast_la-JITVisitor.lo `test -f 'src/cpp/jit/JITVisitor.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITVisitor.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITVisitor.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITVisitor.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITVisitor.cpp' object='src/cpp/jit/libsciast_la-JITVisitor.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-JITVisitor.lo `test -f 'src/cpp/jit/JITVisitor.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITVisitor.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
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITComplexVal.cpp' object='src/cpp/jit/libsciast_la-JITComplexVal.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-JITComplexVal.lo `test -f 'src/cpp/jit/JITComplexVal.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITComplexVal.cpp
+
+src/cpp/jit/libsciast_la-MemoryManager.lo: src/cpp/jit/MemoryManager.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-MemoryManager.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-MemoryManager.Tpo -c -o src/cpp/jit/libsciast_la-MemoryManager.lo `test -f 'src/cpp/jit/MemoryManager.cpp' || echo '$(srcdir)/'`src/cpp/jit/MemoryManager.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-MemoryManager.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-MemoryManager.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/MemoryManager.cpp' object='src/cpp/jit/libsciast_la-MemoryManager.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-MemoryManager.lo `test -f 'src/cpp/jit/MemoryManager.cpp' || echo '$(srcdir)/'`src/cpp/jit/MemoryManager.cpp
+
+src/cpp/jit/libsciast_la-JITCallExp.lo: src/cpp/jit/JITCallExp.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-JITCallExp.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITCallExp.Tpo -c -o src/cpp/jit/libsciast_la-JITCallExp.lo `test -f 'src/cpp/jit/JITCallExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITCallExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITCallExp.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITCallExp.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITCallExp.cpp' object='src/cpp/jit/libsciast_la-JITCallExp.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-JITCallExp.lo `test -f 'src/cpp/jit/JITCallExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITCallExp.cpp
+
+src/cpp/jit/libsciast_la-JITForExp.lo: src/cpp/jit/JITForExp.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-JITForExp.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITForExp.Tpo -c -o src/cpp/jit/libsciast_la-JITForExp.lo `test -f 'src/cpp/jit/JITForExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITForExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITForExp.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITForExp.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITForExp.cpp' object='src/cpp/jit/libsciast_la-JITForExp.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-JITForExp.lo `test -f 'src/cpp/jit/JITForExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITForExp.cpp
+
+src/cpp/jit/libsciast_la-JITCall.lo: src/cpp/jit/JITCall.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-JITCall.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITCall.Tpo -c -o src/cpp/jit/libsciast_la-JITCall.lo `test -f 'src/cpp/jit/JITCall.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITCall.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITCall.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITCall.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITCall.cpp' object='src/cpp/jit/libsciast_la-JITCall.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-JITCall.lo `test -f 'src/cpp/jit/JITCall.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITCall.cpp
+
+src/cpp/jit/libsciast_la-JITSize.lo: src/cpp/jit/JITSize.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-JITSize.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITSize.Tpo -c -o src/cpp/jit/libsciast_la-JITSize.lo `test -f 'src/cpp/jit/JITSize.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITSize.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITSize.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITSize.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITSize.cpp' object='src/cpp/jit/libsciast_la-JITSize.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-JITSize.lo `test -f 'src/cpp/jit/JITSize.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITSize.cpp
+
+src/cpp/jit/libsciast_la-JITZeros.lo: src/cpp/jit/JITZeros.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-JITZeros.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITZeros.Tpo -c -o src/cpp/jit/libsciast_la-JITZeros.lo `test -f 'src/cpp/jit/JITZeros.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITZeros.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITZeros.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITZeros.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITZeros.cpp' object='src/cpp/jit/libsciast_la-JITZeros.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-JITZeros.lo `test -f 'src/cpp/jit/JITZeros.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITZeros.cpp
+
+src/cpp/jit/libsciast_la-JITBinOpCall.lo: src/cpp/jit/JITBinOpCall.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-JITBinOpCall.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITBinOpCall.Tpo -c -o src/cpp/jit/libsciast_la-JITBinOpCall.lo `test -f 'src/cpp/jit/JITBinOpCall.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITBinOpCall.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITBinOpCall.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITBinOpCall.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITBinOpCall.cpp' object='src/cpp/jit/libsciast_la-JITBinOpCall.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-JITBinOpCall.lo `test -f 'src/cpp/jit/JITBinOpCall.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITBinOpCall.cpp
+
+src/cpp/jit/libsciast_la-JITUnaryOpCall.lo: src/cpp/jit/JITUnaryOpCall.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-JITUnaryOpCall.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITUnaryOpCall.Tpo -c -o src/cpp/jit/libsciast_la-JITUnaryOpCall.lo `test -f 'src/cpp/jit/JITUnaryOpCall.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITUnaryOpCall.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITUnaryOpCall.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITUnaryOpCall.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITUnaryOpCall.cpp' object='src/cpp/jit/libsciast_la-JITUnaryOpCall.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-JITUnaryOpCall.lo `test -f 'src/cpp/jit/JITUnaryOpCall.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITUnaryOpCall.cpp
+
+src/cpp/jit/libsciast_la-JITOpExp.lo: src/cpp/jit/JITOpExp.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-JITOpExp.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITOpExp.Tpo -c -o src/cpp/jit/libsciast_la-JITOpExp.lo `test -f 'src/cpp/jit/JITOpExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITOpExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITOpExp.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITOpExp.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITOpExp.cpp' object='src/cpp/jit/libsciast_la-JITOpExp.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-JITOpExp.lo `test -f 'src/cpp/jit/JITOpExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITOpExp.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
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITShortcutBinOpCall.cpp' object='src/cpp/jit/libsciast_la-JITShortcutBinOpCall.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-JITShortcutBinOpCall.lo `test -f 'src/cpp/jit/JITShortcutBinOpCall.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITShortcutBinOpCall.cpp
+
+src/cpp/jit/libsciast_la-ShortcutEval.lo: src/cpp/jit/ShortcutEval.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-ShortcutEval.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-ShortcutEval.Tpo -c -o src/cpp/jit/libsciast_la-ShortcutEval.lo `test -f 'src/cpp/jit/ShortcutEval.cpp' || echo '$(srcdir)/'`src/cpp/jit/ShortcutEval.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-ShortcutEval.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-ShortcutEval.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/ShortcutEval.cpp' object='src/cpp/jit/libsciast_la-ShortcutEval.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-ShortcutEval.lo `test -f 'src/cpp/jit/ShortcutEval.cpp' || echo '$(srcdir)/'`src/cpp/jit/ShortcutEval.cpp
+
+src/cpp/jit/libsciast_la-JITIfExp.lo: src/cpp/jit/JITIfExp.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-JITIfExp.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITIfExp.Tpo -c -o src/cpp/jit/libsciast_la-JITIfExp.lo `test -f 'src/cpp/jit/JITIfExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITIfExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITIfExp.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITIfExp.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITIfExp.cpp' object='src/cpp/jit/libsciast_la-JITIfExp.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-JITIfExp.lo `test -f 'src/cpp/jit/JITIfExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITIfExp.cpp
+
+src/cpp/jit/libsciast_la-JITWhileExp.lo: src/cpp/jit/JITWhileExp.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-JITWhileExp.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITWhileExp.Tpo -c -o src/cpp/jit/libsciast_la-JITWhileExp.lo `test -f 'src/cpp/jit/JITWhileExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITWhileExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITWhileExp.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITWhileExp.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITWhileExp.cpp' object='src/cpp/jit/libsciast_la-JITWhileExp.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-JITWhileExp.lo `test -f 'src/cpp/jit/JITWhileExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITWhileExp.cpp
+
+src/cpp/jit/libsciast_la-JITBreakContinueExps.lo: src/cpp/jit/JITBreakContinueExps.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-JITBreakContinueExps.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITBreakContinueExps.Tpo -c -o src/cpp/jit/libsciast_la-JITBreakContinueExps.lo `test -f 'src/cpp/jit/JITBreakContinueExps.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITBreakContinueExps.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITBreakContinueExps.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITBreakContinueExps.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITBreakContinueExps.cpp' object='src/cpp/jit/libsciast_la-JITBreakContinueExps.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-JITBreakContinueExps.lo `test -f 'src/cpp/jit/JITBreakContinueExps.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITBreakContinueExps.cpp
+
+src/cpp/jit/libsciast_la-JITSelectExp.lo: src/cpp/jit/JITSelectExp.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-JITSelectExp.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITSelectExp.Tpo -c -o src/cpp/jit/libsciast_la-JITSelectExp.lo `test -f 'src/cpp/jit/JITSelectExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITSelectExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITSelectExp.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITSelectExp.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITSelectExp.cpp' object='src/cpp/jit/libsciast_la-JITSelectExp.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-JITSelectExp.lo `test -f 'src/cpp/jit/JITSelectExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITSelectExp.cpp
+
+src/cpp/jit/libsciast_la-JITIntSelectExp.lo: src/cpp/jit/JITIntSelectExp.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-JITIntSelectExp.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITIntSelectExp.Tpo -c -o src/cpp/jit/libsciast_la-JITIntSelectExp.lo `test -f 'src/cpp/jit/JITIntSelectExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITIntSelectExp.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITIntSelectExp.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITIntSelectExp.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITIntSelectExp.cpp' object='src/cpp/jit/libsciast_la-JITIntSelectExp.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-JITIntSelectExp.lo `test -f 'src/cpp/jit/JITIntSelectExp.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITIntSelectExp.cpp
+
+src/cpp/jit/libsciast_la-JITOptimizedCall1.lo: src/cpp/jit/JITOptimizedCall1.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-JITOptimizedCall1.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITOptimizedCall1.Tpo -c -o src/cpp/jit/libsciast_la-JITOptimizedCall1.lo `test -f 'src/cpp/jit/JITOptimizedCall1.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITOptimizedCall1.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITOptimizedCall1.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITOptimizedCall1.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITOptimizedCall1.cpp' object='src/cpp/jit/libsciast_la-JITOptimizedCall1.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-JITOptimizedCall1.lo `test -f 'src/cpp/jit/JITOptimizedCall1.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITOptimizedCall1.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
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITSign.cpp' object='src/cpp/jit/libsciast_la-JITSign.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-JITSign.lo `test -f 'src/cpp/jit/JITSign.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITSign.cpp
+
+src/cpp/jit/libsciast_la-JITSqrt.lo: src/cpp/jit/JITSqrt.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-JITSqrt.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITSqrt.Tpo -c -o src/cpp/jit/libsciast_la-JITSqrt.lo `test -f 'src/cpp/jit/JITSqrt.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITSqrt.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITSqrt.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITSqrt.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITSqrt.cpp' object='src/cpp/jit/libsciast_la-JITSqrt.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-JITSqrt.lo `test -f 'src/cpp/jit/JITSqrt.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITSqrt.cpp
+
+src/cpp/jit/libsciast_la-JITLog.lo: src/cpp/jit/JITLog.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-JITLog.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITLog.Tpo -c -o src/cpp/jit/libsciast_la-JITLog.lo `test -f 'src/cpp/jit/JITLog.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITLog.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITLog.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITLog.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITLog.cpp' object='src/cpp/jit/libsciast_la-JITLog.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-JITLog.lo `test -f 'src/cpp/jit/JITLog.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITLog.cpp
+
+src/cpp/jit/libsciast_la-JITAbs.lo: src/cpp/jit/JITAbs.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-JITAbs.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITAbs.Tpo -c -o src/cpp/jit/libsciast_la-JITAbs.lo `test -f 'src/cpp/jit/JITAbs.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITAbs.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITAbs.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITAbs.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITAbs.cpp' object='src/cpp/jit/libsciast_la-JITAbs.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-JITAbs.lo `test -f 'src/cpp/jit/JITAbs.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITAbs.cpp
+
+src/cpp/jit/libsciast_la-JITAngle.lo: src/cpp/jit/JITAngle.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-JITAngle.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITAngle.Tpo -c -o src/cpp/jit/libsciast_la-JITAngle.lo `test -f 'src/cpp/jit/JITAngle.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITAngle.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITAngle.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITAngle.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITAngle.cpp' object='src/cpp/jit/libsciast_la-JITAngle.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-JITAngle.lo `test -f 'src/cpp/jit/JITAngle.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITAngle.cpp
+
+src/cpp/jit/libsciast_la-JITReal.lo: src/cpp/jit/JITReal.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-JITReal.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITReal.Tpo -c -o src/cpp/jit/libsciast_la-JITReal.lo `test -f 'src/cpp/jit/JITReal.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITReal.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITReal.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITReal.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITReal.cpp' object='src/cpp/jit/libsciast_la-JITReal.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-JITReal.lo `test -f 'src/cpp/jit/JITReal.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITReal.cpp
+
+src/cpp/jit/libsciast_la-JITImag.lo: src/cpp/jit/JITImag.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-JITImag.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITImag.Tpo -c -o src/cpp/jit/libsciast_la-JITImag.lo `test -f 'src/cpp/jit/JITImag.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITImag.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITImag.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITImag.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITImag.cpp' object='src/cpp/jit/libsciast_la-JITImag.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-JITImag.lo `test -f 'src/cpp/jit/JITImag.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITImag.cpp
+
+src/cpp/jit/libsciast_la-JITImult.lo: src/cpp/jit/JITImult.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-JITImult.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITImult.Tpo -c -o src/cpp/jit/libsciast_la-JITImult.lo `test -f 'src/cpp/jit/JITImult.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITImult.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITImult.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITImult.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITImult.cpp' object='src/cpp/jit/libsciast_la-JITImult.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-JITImult.lo `test -f 'src/cpp/jit/JITImult.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITImult.cpp
+
+src/cpp/jit/libsciast_la-JITConj.lo: src/cpp/jit/JITConj.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-JITConj.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITConj.Tpo -c -o src/cpp/jit/libsciast_la-JITConj.lo `test -f 'src/cpp/jit/JITConj.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITConj.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITConj.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITConj.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITConj.cpp' object='src/cpp/jit/libsciast_la-JITConj.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-JITConj.lo `test -f 'src/cpp/jit/JITConj.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITConj.cpp
+
+src/cpp/jit/libsciast_la-JITFloor.lo: src/cpp/jit/JITFloor.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-JITFloor.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITFloor.Tpo -c -o src/cpp/jit/libsciast_la-JITFloor.lo `test -f 'src/cpp/jit/JITFloor.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITFloor.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITFloor.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITFloor.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITFloor.cpp' object='src/cpp/jit/libsciast_la-JITFloor.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-JITFloor.lo `test -f 'src/cpp/jit/JITFloor.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITFloor.cpp
+
+src/cpp/jit/libsciast_la-JITCeil.lo: src/cpp/jit/JITCeil.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-JITCeil.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITCeil.Tpo -c -o src/cpp/jit/libsciast_la-JITCeil.lo `test -f 'src/cpp/jit/JITCeil.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITCeil.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITCeil.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITCeil.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITCeil.cpp' object='src/cpp/jit/libsciast_la-JITCeil.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-JITCeil.lo `test -f 'src/cpp/jit/JITCeil.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITCeil.cpp
+
+src/cpp/jit/libsciast_la-JITRound.lo: src/cpp/jit/JITRound.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-JITRound.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITRound.Tpo -c -o src/cpp/jit/libsciast_la-JITRound.lo `test -f 'src/cpp/jit/JITRound.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITRound.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITRound.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITRound.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITRound.cpp' object='src/cpp/jit/libsciast_la-JITRound.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-JITRound.lo `test -f 'src/cpp/jit/JITRound.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITRound.cpp
+
+src/cpp/jit/libsciast_la-JITAddition.lo: src/cpp/jit/JITAddition.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-JITAddition.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITAddition.Tpo -c -o src/cpp/jit/libsciast_la-JITAddition.lo `test -f 'src/cpp/jit/JITAddition.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITAddition.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITAddition.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITAddition.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITAddition.cpp' object='src/cpp/jit/libsciast_la-JITAddition.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-JITAddition.lo `test -f 'src/cpp/jit/JITAddition.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITAddition.cpp
+
+src/cpp/jit/libsciast_la-JITSubtraction.lo: src/cpp/jit/JITSubtraction.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-JITSubtraction.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITSubtraction.Tpo -c -o src/cpp/jit/libsciast_la-JITSubtraction.lo `test -f 'src/cpp/jit/JITSubtraction.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITSubtraction.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITSubtraction.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITSubtraction.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITSubtraction.cpp' object='src/cpp/jit/libsciast_la-JITSubtraction.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-JITSubtraction.lo `test -f 'src/cpp/jit/JITSubtraction.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITSubtraction.cpp
+
+src/cpp/jit/libsciast_la-JITOpposite.lo: src/cpp/jit/JITOpposite.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-JITOpposite.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITOpposite.Tpo -c -o src/cpp/jit/libsciast_la-JITOpposite.lo `test -f 'src/cpp/jit/JITOpposite.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITOpposite.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITOpposite.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITOpposite.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITOpposite.cpp' object='src/cpp/jit/libsciast_la-JITOpposite.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-JITOpposite.lo `test -f 'src/cpp/jit/JITOpposite.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITOpposite.cpp
+
+src/cpp/jit/libsciast_la-JITMultiplication.lo: src/cpp/jit/JITMultiplication.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-JITMultiplication.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITMultiplication.Tpo -c -o src/cpp/jit/libsciast_la-JITMultiplication.lo `test -f 'src/cpp/jit/JITMultiplication.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITMultiplication.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITMultiplication.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITMultiplication.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITMultiplication.cpp' object='src/cpp/jit/libsciast_la-JITMultiplication.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-JITMultiplication.lo `test -f 'src/cpp/jit/JITMultiplication.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITMultiplication.cpp
+
+src/cpp/jit/libsciast_la-JITEquality.lo: src/cpp/jit/JITEquality.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-JITEquality.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITEquality.Tpo -c -o src/cpp/jit/libsciast_la-JITEquality.lo `test -f 'src/cpp/jit/JITEquality.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITEquality.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITEquality.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITEquality.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITEquality.cpp' object='src/cpp/jit/libsciast_la-JITEquality.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-JITEquality.lo `test -f 'src/cpp/jit/JITEquality.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITEquality.cpp
+
+src/cpp/jit/libsciast_la-JITShortcutOps.lo: src/cpp/jit/JITShortcutOps.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-JITShortcutOps.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITShortcutOps.Tpo -c -o src/cpp/jit/libsciast_la-JITShortcutOps.lo `test -f 'src/cpp/jit/JITShortcutOps.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITShortcutOps.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITShortcutOps.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITShortcutOps.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITShortcutOps.cpp' object='src/cpp/jit/libsciast_la-JITShortcutOps.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-JITShortcutOps.lo `test -f 'src/cpp/jit/JITShortcutOps.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITShortcutOps.cpp
+
+src/cpp/jit/libsciast_la-JITNotEquality.lo: src/cpp/jit/JITNotEquality.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-JITNotEquality.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITNotEquality.Tpo -c -o src/cpp/jit/libsciast_la-JITNotEquality.lo `test -f 'src/cpp/jit/JITNotEquality.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITNotEquality.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITNotEquality.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITNotEquality.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITNotEquality.cpp' object='src/cpp/jit/libsciast_la-JITNotEquality.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-JITNotEquality.lo `test -f 'src/cpp/jit/JITNotEquality.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITNotEquality.cpp
+
+src/cpp/jit/libsciast_la-JITComparisons.lo: src/cpp/jit/JITComparisons.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-JITComparisons.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITComparisons.Tpo -c -o src/cpp/jit/libsciast_la-JITComparisons.lo `test -f 'src/cpp/jit/JITComparisons.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITComparisons.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITComparisons.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITComparisons.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITComparisons.cpp' object='src/cpp/jit/libsciast_la-JITComparisons.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-JITComparisons.lo `test -f 'src/cpp/jit/JITComparisons.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITComparisons.cpp
+
+src/cpp/jit/libsciast_la-JITNegation.lo: src/cpp/jit/JITNegation.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-JITNegation.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITNegation.Tpo -c -o src/cpp/jit/libsciast_la-JITNegation.lo `test -f 'src/cpp/jit/JITNegation.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITNegation.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITNegation.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITNegation.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITNegation.cpp' object='src/cpp/jit/libsciast_la-JITNegation.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-JITNegation.lo `test -f 'src/cpp/jit/JITNegation.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITNegation.cpp
+
+src/cpp/jit/libsciast_la-JITRDivision.lo: src/cpp/jit/JITRDivision.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-JITRDivision.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITRDivision.Tpo -c -o src/cpp/jit/libsciast_la-JITRDivision.lo `test -f 'src/cpp/jit/JITRDivision.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITRDivision.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITRDivision.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITRDivision.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITRDivision.cpp' object='src/cpp/jit/libsciast_la-JITRDivision.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-JITRDivision.lo `test -f 'src/cpp/jit/JITRDivision.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITRDivision.cpp
+
+src/cpp/jit/libsciast_la-JITPower.lo: src/cpp/jit/JITPower.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-JITPower.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-JITPower.Tpo -c -o src/cpp/jit/libsciast_la-JITPower.lo `test -f 'src/cpp/jit/JITPower.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITPower.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-JITPower.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-JITPower.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/JITPower.cpp' object='src/cpp/jit/libsciast_la-JITPower.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-JITPower.lo `test -f 'src/cpp/jit/JITPower.cpp' || echo '$(srcdir)/'`src/cpp/jit/JITPower.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
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/FunctionSignature.cpp' object='src/cpp/jit/libsciast_la-FunctionSignature.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-FunctionSignature.lo `test -f 'src/cpp/jit/FunctionSignature.cpp' || echo '$(srcdir)/'`src/cpp/jit/FunctionSignature.cpp
+
+src/cpp/jit/libsciast_la-ScilabJITEventListener.lo: src/cpp/jit/ScilabJITEventListener.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-ScilabJITEventListener.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-ScilabJITEventListener.Tpo -c -o src/cpp/jit/libsciast_la-ScilabJITEventListener.lo `test -f 'src/cpp/jit/ScilabJITEventListener.cpp' || echo '$(srcdir)/'`src/cpp/jit/ScilabJITEventListener.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-ScilabJITEventListener.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-ScilabJITEventListener.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/ScilabJITEventListener.cpp' object='src/cpp/jit/libsciast_la-ScilabJITEventListener.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-ScilabJITEventListener.lo `test -f 'src/cpp/jit/ScilabJITEventListener.cpp' || echo '$(srcdir)/'`src/cpp/jit/ScilabJITEventListener.cpp
+
+src/cpp/jit/libsciast_la-BaseFunctions1.lo: src/cpp/jit/BaseFunctions1.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-BaseFunctions1.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions1.Tpo -c -o src/cpp/jit/libsciast_la-BaseFunctions1.lo `test -f 'src/cpp/jit/BaseFunctions1.cpp' || echo '$(srcdir)/'`src/cpp/jit/BaseFunctions1.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions1.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions1.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/BaseFunctions1.cpp' object='src/cpp/jit/libsciast_la-BaseFunctions1.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-BaseFunctions1.lo `test -f 'src/cpp/jit/BaseFunctions1.cpp' || echo '$(srcdir)/'`src/cpp/jit/BaseFunctions1.cpp
+
+src/cpp/jit/libsciast_la-BaseFunctions2.lo: src/cpp/jit/BaseFunctions2.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-BaseFunctions2.lo -MD -MP -MF src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions2.Tpo -c -o src/cpp/jit/libsciast_la-BaseFunctions2.lo `test -f 'src/cpp/jit/BaseFunctions2.cpp' || echo '$(srcdir)/'`src/cpp/jit/BaseFunctions2.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions2.Tpo src/cpp/jit/$(DEPDIR)/libsciast_la-BaseFunctions2.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/cpp/jit/BaseFunctions2.cpp' object='src/cpp/jit/libsciast_la-BaseFunctions2.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-BaseFunctions2.lo `test -f 'src/cpp/jit/BaseFunctions2.cpp' || echo '$(srcdir)/'`src/cpp/jit/BaseFunctions2.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 696f7f2..5f506d7 100644 (file)
@@ -96,7 +96,7 @@
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>includes/ast;includes/parse;includes/exps;includes/symbol;includes/types;includes/system_env;includes/operations;includes/jit;includes/analysis;../../libs/intl;../../libs/Eigen/includes;../functions_manager/includes;../core/includes;../elementary_functions/includes;../ast/includes/operations;../localization/includes;../output_stream/includes;../string/includes;../api_scilab/includes;../threads/includes;../console/includes;../graphic_objects/includes;../dynamic_link/includes;../io/includes;../fileio/includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes/ast;includes/parse;includes/exps;includes/symbol;includes/types;includes/system_env;includes/operations;includes/jit;includes/analysis;../../libs/intl;../../libs/Eigen/includes;../functions_manager/includes;../core/includes;../elementary_functions/includes;../ast/includes/operations;../localization/includes;../output_stream/includes;../string/includes;../api_scilab/includes;../threads/includes;../console/includes;../graphic_objects/includes;../dynamic_link/includes;../io/includes;../fileio/includes;../special_functions/src/cpp;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;AST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -134,7 +134,7 @@ lib /DEF:"$(ProjectDir)string_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     </Midl>
     <ClCompile>
       <Optimization>Disabled</Optimization>
-      <AdditionalIncludeDirectories>includes/ast;includes/parse;includes/exps;includes/symbol;includes/types;includes/system_env;includes/operations;includes/jit;includes/analysis;../../libs/intl;../../libs/Eigen/includes;../functions_manager/includes;../core/includes;../elementary_functions/includes;../ast/includes/operations;../localization/includes;../output_stream/includes;../string/includes;../api_scilab/includes;../threads/includes;../console/includes;../graphic_objects/includes;../dynamic_link/includes;../io/includes;../fileio/includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes/ast;includes/parse;includes/exps;includes/symbol;includes/types;includes/system_env;includes/operations;includes/jit;includes/analysis;../../libs/intl;../../libs/Eigen/includes;../functions_manager/includes;../core/includes;../elementary_functions/includes;../ast/includes/operations;../localization/includes;../output_stream/includes;../string/includes;../api_scilab/includes;../threads/includes;../console/includes;../graphic_objects/includes;../dynamic_link/includes;../io/includes;../fileio/includes;../special_functions/src/cpp;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;AST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <MinimalRebuild>true</MinimalRebuild>
       <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -170,7 +170,7 @@ lib /DEF:"$(ProjectDir)string_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <AdditionalIncludeDirectories>includes/ast;includes/parse;includes/exps;includes/symbol;includes/types;includes/system_env;includes/operations;includes/jit;includes/analysis;../../libs/intl;../../libs/Eigen/includes;../functions_manager/includes;../core/includes;../elementary_functions/includes;../ast/includes/operations;../localization/includes;../output_stream/includes;../string/includes;../api_scilab/includes;../threads/includes;../console/includes;../graphic_objects/includes;../dynamic_link/includes;../io/includes;../fileio/includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes/ast;includes/parse;includes/exps;includes/symbol;includes/types;includes/system_env;includes/operations;includes/jit;includes/analysis;../../libs/intl;../../libs/Eigen/includes;../functions_manager/includes;../core/includes;../elementary_functions/includes;../ast/includes/operations;../localization/includes;../output_stream/includes;../string/includes;../api_scilab/includes;../threads/includes;../console/includes;../graphic_objects/includes;../dynamic_link/includes;../io/includes;../fileio/includes;../special_functions/src/cpp;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;AST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <FunctionLevelLinking>true</FunctionLevelLinking>
@@ -208,7 +208,7 @@ lib /DEF:"$(ProjectDir)string_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClCompile>
       <Optimization>MaxSpeed</Optimization>
       <IntrinsicFunctions>true</IntrinsicFunctions>
-      <AdditionalIncludeDirectories>includes/ast;includes/parse;includes/exps;includes/symbol;includes/types;includes/system_env;includes/operations;includes/jit;includes/analysis;../../libs/intl;../../libs/Eigen/includes;../functions_manager/includes;../core/includes;../elementary_functions/includes;../ast/includes/operations;../localization/includes;../output_stream/includes;../string/includes;../api_scilab/includes;../threads/includes;../console/includes;../graphic_objects/includes;../dynamic_link/includes;../io/includes;../fileio/includes;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <AdditionalIncludeDirectories>includes/ast;includes/parse;includes/exps;includes/symbol;includes/types;includes/system_env;includes/operations;includes/jit;includes/analysis;../../libs/intl;../../libs/Eigen/includes;../functions_manager/includes;../core/includes;../elementary_functions/includes;../ast/includes/operations;../localization/includes;../output_stream/includes;../string/includes;../api_scilab/includes;../threads/includes;../console/includes;../graphic_objects/includes;../dynamic_link/includes;../io/includes;../fileio/includes;../special_functions/src/cpp;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
       <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;AST_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
       <FunctionLevelLinking>true</FunctionLevelLinking>
@@ -392,9 +392,69 @@ lib /DEF:"$(ProjectDir)string_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClInclude Include="includes\exps\var.hxx" />
     <ClInclude Include="includes\exps\vardec.hxx" />
     <ClInclude Include="includes\exps\whileexp.hxx" />
-    <ClInclude Include="includes\jit\JITValues.hxx" />
+    <ClInclude Include="includes\jit\BaseFunctions.hxx" />
+    <ClInclude Include="includes\jit\BaseFunctionsAgain.hxx" />
+    <ClInclude Include="includes\jit\BaseFunctionsMacros.h" />
+    <ClInclude Include="includes\jit\BaseFunctionsMacros2.h" />
+    <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" />
+    <ClInclude Include="includes\jit\base\exponentiation.hxx" />
+    <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\ldivision.hxx" />
+    <ClInclude Include="includes\jit\base\lower_or_eq.hxx" />
+    <ClInclude Include="includes\jit\base\lower_than.hxx" />
+    <ClInclude Include="includes\jit\base\not_equal.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\vectorization.hxx" />
+    <ClInclude Include="includes\jit\blocks\ShortcutEval.hxx" />
+    <ClInclude Include="includes\jit\calls\FunCallInitializer.hxx" />
+    <ClInclude Include="includes\jit\calls\FunctionSignature.hxx" />
+    <ClInclude Include="includes\jit\calls\JITAbs.hxx" />
+    <ClInclude Include="includes\jit\calls\JITAngle.hxx" />
+    <ClInclude Include="includes\jit\calls\JITBinOp.hxx" />
+    <ClInclude Include="includes\jit\calls\JITBinOpCall.hxx" />
+    <ClInclude Include="includes\jit\calls\JITCall.hxx" />
+    <ClInclude Include="includes\jit\calls\JITCall1.hxx" />
+    <ClInclude Include="includes\jit\calls\JITCeil.hxx" />
+    <ClInclude Include="includes\jit\calls\JITConj.hxx" />
+    <ClInclude Include="includes\jit\calls\JITFloor.hxx" />
+    <ClInclude Include="includes\jit\calls\JITGatewayCall.hxx" />
+    <ClInclude Include="includes\jit\calls\JITImag.hxx" />
+    <ClInclude Include="includes\jit\calls\JITImult.hxx" />
+    <ClInclude Include="includes\jit\calls\JITLog.hxx" />
+    <ClInclude Include="includes\jit\calls\JITOptimizedCall1.hxx" />
+    <ClInclude Include="includes\jit\calls\JITReal.hxx" />
+    <ClInclude Include="includes\jit\calls\JITRound.hxx" />
+    <ClInclude Include="includes\jit\calls\JITShortcutBinOpCall.hxx" />
+    <ClInclude Include="includes\jit\calls\JITSign.hxx" />
+    <ClInclude Include="includes\jit\calls\JITSize.hxx" />
+    <ClInclude Include="includes\jit\calls\JITSize1.hxx" />
+    <ClInclude Include="includes\jit\calls\JITSqrt.hxx" />
+    <ClInclude Include="includes\jit\calls\JITUnaryOpCall.hxx" />
+    <ClInclude Include="includes\jit\calls\JITZeros.hxx" />
+    <ClInclude Include="includes\jit\Cast.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\JITScalar.hxx" />
+    <ClInclude Include="includes\jit\JITScalars.hxx" />
+    <ClInclude Include="includes\jit\JITScilabVal.hxx" />
+    <ClInclude Include="includes\jit\JITVal.hxx" />
     <ClInclude Include="includes\jit\JITVisitor.hxx" />
-    <ClInclude Include="includes\jit\jit_operations.hxx" />
+    <ClInclude Include="includes\jit\MemoryManager.hxx" />
+    <ClInclude Include="includes\jit\ScilabJITEventListener.hxx" />
     <ClInclude Include="includes\jit\ScilabJITTraits.hxx" />
     <ClInclude Include="includes\operations\doublecomplex.h" />
     <ClInclude Include="includes\operations\generic_operations.hxx" />
@@ -648,11 +708,53 @@ lib /DEF:"$(ProjectDir)string_import.def" /SUBSYSTEM:WINDOWS /MACHINE:$(Platform
     <ClCompile Include="src\cpp\ast\runvisitor.cpp" />
     <ClCompile Include="src\cpp\ast\shortcutvisitor.cpp" />
     <ClCompile Include="src\cpp\ast\visitor_common.cpp" />
-    <ClCompile Include="src\cpp\jit\GlobalCFunctions.cpp" />
-    <ClCompile Include="src\cpp\jit\JITValues.cpp" />
+    <ClCompile Include="src\cpp\jit\BaseFunctions1.cpp" />
+    <ClCompile Include="src\cpp\jit\BaseFunctions2.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\JITBinOpCall.cpp" />
+    <ClCompile Include="src\cpp\jit\JITBreakContinueExps.cpp" />
+    <ClCompile Include="src\cpp\jit\JITCall.cpp" />
+    <ClCompile Include="src\cpp\jit\JITCallExp.cpp" />
+    <ClCompile Include="src\cpp\jit\JITCeil.cpp" />
+    <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\JITEquality.cpp" />
+    <ClCompile Include="src\cpp\jit\JITFloor.cpp" />
+    <ClCompile Include="src\cpp\jit\JITForExp.cpp" />
+    <ClCompile Include="src\cpp\jit\JITIfExp.cpp" />
+    <ClCompile Include="src\cpp\jit\JITImag.cpp" />
+    <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\JITMultiplication.cpp" />
+    <ClCompile Include="src\cpp\jit\JITNegation.cpp" />
+    <ClCompile Include="src\cpp\jit\JITNotEquality.cpp" />
+    <ClCompile Include="src\cpp\jit\JITOpExp.cpp" />
+    <ClCompile Include="src\cpp\jit\JITOpposite.cpp" />
+    <ClCompile Include="src\cpp\jit\JITOptimizedCall1.cpp" />
+    <ClCompile Include="src\cpp\jit\JITPower.cpp" />
+    <ClCompile Include="src\cpp\jit\JITRDivision.cpp" />
+    <ClCompile Include="src\cpp\jit\JITReal.cpp" />
+    <ClCompile Include="src\cpp\jit\JITRound.cpp" />
+    <ClCompile Include="src\cpp\jit\JITSelectExp.cpp" />
+    <ClCompile Include="src\cpp\jit\JITShortcutBinOpCall.cpp" />
+    <ClCompile Include="src\cpp\jit\JITShortcutOps.cpp" />
+    <ClCompile Include="src\cpp\jit\JITSign.cpp" />
+    <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\JITUnaryOpCall.cpp" />
     <ClCompile Include="src\cpp\jit\JITVisitor.cpp" />
-    <ClCompile Include="src\cpp\jit\jit_operations.cpp" />
+    <ClCompile Include="src\cpp\jit\JITWhileExp.cpp" />
+    <ClCompile Include="src\cpp\jit\JITZeros.cpp" />
     <ClCompile Include="src\cpp\jit\jit_windows.cpp" />
+    <ClCompile Include="src\cpp\jit\MemoryManager.cpp" />
+    <ClCompile Include="src\cpp\jit\ScilabJITEventListener.cpp" />
+    <ClCompile Include="src\cpp\jit\ShortcutEval.cpp" />
     <ClCompile Include="src\cpp\operations\interface_addition.cpp" />
     <ClCompile Include="src\cpp\operations\operations.cpp" />
     <ClCompile Include="src\cpp\operations\types_addition.cpp" />
index 30ebc01..4bd977b 100644 (file)
     <Filter Include="Source Files\analysis">
       <UniqueIdentifier>{cc737210-ca11-42b1-99f7-444901ee9add}</UniqueIdentifier>
     </Filter>
+    <Filter Include="Header Files\jit\base">
+      <UniqueIdentifier>{fb01d053-2490-47e4-b699-c35332175ea1}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\jit\blocks">
+      <UniqueIdentifier>{315909c5-eddf-4e1c-b4d3-c1ebc985542d}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="Header Files\jit\calls">
+      <UniqueIdentifier>{c82b9718-5c92-4bf0-9feb-5d7492dabe31}</UniqueIdentifier>
+    </Filter>
   </ItemGroup>
   <ItemGroup>
     <None Include="core_Import.def">
     <ClInclude Include="includes\types\overload.hxx">
       <Filter>Header Files\types</Filter>
     </ClInclude>
-    <ClInclude Include="includes\jit\ScilabJITTraits.hxx">
-      <Filter>Header Files\jit</Filter>
-    </ClInclude>
-    <ClInclude Include="includes\jit\JITVisitor.hxx">
-      <Filter>Header Files\jit</Filter>
-    </ClInclude>
-    <ClInclude Include="includes\jit\JITValues.hxx">
-      <Filter>Header Files\jit</Filter>
-    </ClInclude>
-    <ClInclude Include="includes\jit\jit_operations.hxx">
-      <Filter>Header Files\jit</Filter>
-    </ClInclude>
     <ClInclude Include="includes\analysis\AnalysisVisitor.hxx">
       <Filter>Header Files\analysis</Filter>
     </ClInclude>
     <ClInclude Include="includes\exps\tableintselectexp.hxx">
       <Filter>Header Files\exps</Filter>
     </ClInclude>
+    <ClInclude Include="includes\jit\BaseFunctions.hxx">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\BaseFunctionsAgain.hxx">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\BaseFunctionsMacros.h">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\BaseFunctionsMacros2.h">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\BaseFunctionsMacros3.h">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\Cast.hxx">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\Disassembler.hxx">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\funs_interf.h">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\JITArrayof.hxx">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\JITArrayofs.hxx">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\JITScalar.hxx">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\JITScalars.hxx">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\JITScilabVal.hxx">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\JITVal.hxx">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\JITVisitor.hxx">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\MemoryManager.hxx">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\ScilabJITEventListener.hxx">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\ScilabJITTraits.hxx">
+      <Filter>Header Files\jit</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\addition.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <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\jit\base\elem_functions.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\equal.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\exponentiation.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\functors.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\greater_or_eq.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\greater_than.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\ldivision.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\lower_or_eq.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\lower_than.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\not_equal.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\or.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\product.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\rdivision.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\subtraction.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\tools.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\base\vectorization.hxx">
+      <Filter>Header Files\jit\base</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\blocks\ShortcutEval.hxx">
+      <Filter>Header Files\jit\blocks</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\FunCallInitializer.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\FunctionSignature.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITAbs.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITAngle.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITBinOp.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITBinOpCall.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITCall.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITCall1.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITCeil.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITConj.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITFloor.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITGatewayCall.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITImag.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITImult.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITLog.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITOptimizedCall1.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITReal.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITRound.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITShortcutBinOpCall.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITSign.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITSize.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITSize1.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITSqrt.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITUnaryOpCall.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
+    <ClInclude Include="includes\jit\calls\JITZeros.hxx">
+      <Filter>Header Files\jit\calls</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="src\cpp\ast\debugvisitor.cpp">
     <ClCompile Include="src\cpp\types\callable.cpp">
       <Filter>Source Files\types</Filter>
     </ClCompile>
-    <ClCompile Include="src\cpp\jit\JITValues.cpp">
-      <Filter>Source Files\jit</Filter>
-    </ClCompile>
-    <ClCompile Include="src\cpp\jit\JITVisitor.cpp">
-      <Filter>Source Files\jit</Filter>
-    </ClCompile>
-    <ClCompile Include="src\cpp\jit\GlobalCFunctions.cpp">
-      <Filter>Source Files\jit</Filter>
-    </ClCompile>
-    <ClCompile Include="src\cpp\jit\jit_operations.cpp">
-      <Filter>Source Files\jit</Filter>
-    </ClCompile>
     <ClCompile Include="src\cpp\operations\types_opposite.cpp">
       <Filter>Source Files\operations</Filter>
     </ClCompile>
     <ClCompile Include="src\cpp\operations\types_or.cpp">
       <Filter>Source Files\operations</Filter>
     </ClCompile>
-    <ClCompile Include="src\cpp\jit\jit_windows.cpp">
-      <Filter>Source Files\jit</Filter>
-    </ClCompile>
     <ClCompile Include="src\cpp\operations\types_dotdivide.cpp">
       <Filter>Source Files\operations</Filter>
     </ClCompile>
     <ClCompile Include="src\cpp\analysis\VisitVarDec.cpp">
       <Filter>Source Files\analysis</Filter>
     </ClCompile>
+    <ClCompile Include="src\cpp\jit\BaseFunctions1.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\BaseFunctions2.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\FunctionSignature.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\jit_windows.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITAbs.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITAddition.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITAngle.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITBinOpCall.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITBreakContinueExps.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITCall.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITCallExp.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITCeil.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITComparisons.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITComplexVal.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITConj.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITEquality.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITFloor.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITForExp.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITIfExp.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITImag.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITImult.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITIntSelectExp.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITLog.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITMultiplication.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITNegation.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITNotEquality.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITOpExp.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITOpposite.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITOptimizedCall1.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITPower.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITRDivision.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITReal.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITRound.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITSelectExp.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITShortcutBinOpCall.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITShortcutOps.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITSign.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITSize.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITSqrt.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITSubtraction.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITUnaryOpCall.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITVisitor.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITWhileExp.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\JITZeros.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\MemoryManager.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\ScilabJITEventListener.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
+    <ClCompile Include="src\cpp\jit\ShortcutEval.cpp">
+      <Filter>Source Files\jit</Filter>
+    </ClCompile>
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/scilab/modules/ast/includes/jit/BaseFunctions.hxx b/scilab/modules/ast/includes/jit/BaseFunctions.hxx
new file mode 100644 (file)
index 0000000..7fbaab8
--- /dev/null
@@ -0,0 +1,1292 @@
+/*
+ *  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_FUNCTIONS_HXX__
+#define __BASE_FUNCTIONS_HXX__
+
+#include <algorithm>
+#include <complex>
+#include <cmath>
+#include <type_traits>
+#include <vector>
+
+#include "Cast.hxx"
+/*#include "base/binary.hxx"
+#include "base/addition.hxx"
+#include "base/subtraction.hxx"
+#include "base/product.hxx"
+#include "base/rdivision.hxx"
+#include "base/ldivision.hxx"
+#include "base/exponentiation.hxx"
+#include "base/not_equal.hxx"
+#include "base/equal.hxx"
+#include "base/greater_than.hxx"
+#include "base/greater_or_eq.hxx"
+#include "base/lower_than.hxx"
+#include "base/lower_or_eq.hxx"
+#include "base/and.hxx"
+#include "base/or.hxx"
+*/
+
+#include "base/elem_functions.hxx"
+//#include "base/addition.hxx"
+#include "base/tools.hxx"
+#include "base/vectorization.hxx"
+#include "base/functors.hxx"
+#include "base/binary_functors.hxx"
+//#include "base/binary.hxx"
+
+#include "core_math.h"
+#include "faddeeva.h"
+
+extern "C"
+{
+    //#include "basic_functions.h"
+#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(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 BaseFunctions
+{
+// TODO : LLVMize all these functions to inline them !
+// TODO : several vectorizations could be merged: sin(a)+b (a,b matrices with same dims)
+//        could be transformed into for i=1:N; res(i)=sin(a(i))+b(i);end => 1 loop rather than 2 !
+
+/*template<typename T, typename U, U (F)(T), typename V = U>
+inline void vectorize(const T * x, const int64_t x_r, const int64_t x_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] = (V)F(x[i]);
+    }
+}
+
+template<std::complex<double> (CPX)(const std::complex<double> &)>
+inline void vectorize(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;
+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> z = CPX(std::complex<double>(x_re[i], x_im[i]));
+        _o_re[i] = z.real();
+        _o_im[i] = z.imag();
+    }
+}
+
+template<typename T, T (CPX)(const std::complex<double> &)>
+inline void vectorize(const double * x_re, const double * x_im, const int64_t x_r, const int64_t x_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] = CPX(std::complex<double>(x_re[i], x_im[i]));
+    }
+}
+
+template<typename T, std::complex<double> (F)(T)>
+inline void vectorize(const T * x, const int64_t x_r, const int64_t x_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> z = F(x[i]);
+        _o_re[i] = z.real();
+        _o_im[i] = z.imag();
+    }
+}
+
+template<typename T, double (RE)(T), std::complex<double> (CPX)(T), bool USECPX(T)>
+inline void vectorize(const T * x, const int64_t x_r, const int64_t x_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)
+    {
+        if (USECPX(x[i]))
+        {
+            if (!_o_im)
+            {
+                _o_im = new double[size]();
+            }
+            const std::complex<double> z = CPX(x[i]);
+            _o_re[i] = z.real();
+            _o_im[i] = z.imag();
+        }
+        else
+        {
+            _o_re[i] = RE(x[i]);
+        }
+    }
+
+    *o_im = _o_im;
+}
+
+// use it with frexp
+template<typename T, typename U, typename V, V (F)(T, U *), typename W = V>
+inline void vectorize(const T * x, const int64_t x_r, const int64_t x_c, V * o1, W * o2)
+{
+    for (int64_t i = 0; i < x_r * x_c; ++i)
+    {
+        U t;
+        o1[i] = (V)F(x[i], &t);
+        o2[i] = (W)t;
+    }
+}
+
+// use it with rand()
+template<typename T, T (F)(), typename U = T>
+inline void vectorize(const int64_t x_r, const int64_t x_c, U ** o)
+{
+const int64_t size = x_r * x_c;
+    U * _o = getPtr(o, size);
+    for (int64_t i = 0; i < x_r * x_c; ++i)
+    {
+        o[i] = (T)F();
+    }
+}*/
+
+// use it with cumsum and cumprod
+template<typename T, T (F)(T, T)>
+inline void cumulateIn(const T * x, const int64_t x_r, const int64_t x_c, T * o)
+{
+    // TODO: check x_r > 0 && x_c > 0
+    o[0] = x[0];
+    for (int64_t i = 1; i < x_r * x_c; ++i)
+    {
+        o[i] = F(o[i - 1], x[i]);
+    }
+}
+
+// use it with max(..., 'r')
+template<typename T, T (F)(T, T)>
+inline void cumulateInR(const T * x, const int64_t x_r, const int64_t x_c, T * o)
+{
+    for (int i = 0; i < x_c; ++i)
+    {
+        const T t = x[i * x_r];
+        for (int j = 1; i < x_r; ++j)
+        {
+            t = F(t, x[j + i * x_r]);
+        }
+        o[i] = t;
+    }
+}
+
+// use it with max(..., 'c')
+template<typename T, T (F)(T, T)>
+inline void cumulateInC(const T * x, const int64_t x_r, const int64_t x_c, T * o)
+{
+    for (int64_t i = 0; i < x_r; ++i)
+    {
+        const T t = x[i];
+        for (int64_t j = 1; i < x_c; ++j)
+        {
+            t = F(t, x[i + j * x_r]);
+        }
+        o[i] = t;
+    }
+}
+
+template<typename T, T (F)(T, T)>
+inline T cumulate(const T * x, const int64_t x_r, const int64_t x_c)
+{
+    T y = x[0];
+    for (int64_t i = 1; i < x_r * x_c; ++i)
+    {
+        y = F(y, x[i]);
+    }
+
+    return y;
+}
+
+template<bool B, typename T, bool (F)(T)>
+inline int breakOnM(const T * x, const int64_t x_r, const int64_t x_c)
+{
+    for (int64_t i = 0; i < x_r * x_c; ++i)
+    {
+        if (F(x[i]) == B)
+        {
+            return B;
+        }
+    }
+
+    return !B;
+}
+
+template<bool B, typename T, typename U, bool (F)(T, U)>
+inline int breakOnMM(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)
+{
+    for (int64_t i = 0; i < x_r * x_c; ++i)
+    {
+        if (F(x[i], y[i]) == B)
+        {
+            return B;
+        }
+    }
+
+    return !B;
+}
+
+template<bool B, typename T, typename U, bool (F)(T, U)>
+inline int breakOnSM(const T x, const U * y, const int64_t y_r, const int64_t y_c)
+{
+    for (int64_t i = 0; i < y_r * y_c; ++i)
+    {
+        if (F(x, y[i]) == B)
+        {
+            return B;
+        }
+    }
+
+    return !B;
+}
+
+template<bool B, typename T, typename U, bool (F)(T, U)>
+inline int breakOnMS(const T * x, const int64_t x_r, const int64_t x_c, const U y)
+{
+    for (int64_t i = 0; i < x_r * x_c; ++i)
+    {
+        if (F(x[i], y) == B)
+        {
+            return B;
+        }
+    }
+
+    return !B;
+}
+
+template<typename T, typename V, V (F)(T)>
+inline void unaryM(const T * x, const int64_t x_r, const int64_t x_c, V ** o)
+{
+    V * _o;
+    const int64_t size = x_r * x_c;
+    if (*o)
+    {
+        _o = *o;
+    }
+    else
+    {
+        _o = new V[size];
+        *o = _o;
+    }
+    for (int64_t i = 0; i < x_r * x_c; ++i)
+    {
+        _o[i] = F(x[i]);
+    }
+}
+
+template<typename T, typename V, V (F)(T)>
+inline void unaryU(const T * x, const int64_t x_r, const int64_t x_c, V ** o)
+{
+    unaryM<T, V, F>(x, x_r, x_c, o);
+}
+
+template<typename T, typename U, typename V = typename ScilabType<T, U>::type>
+inline void timesMM(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)
+{
+    V * _o;
+    const int64_t size = x_r * y_c;
+    if (*o)
+    {
+        _o = *o;
+    }
+    else
+    {
+        _o = new V[size];
+        *o = _o;
+    }
+    memset(_o, 0, size * sizeof(V));
+    for (int j = 0; j < y_c; ++j)
+    {
+        for (int k = 0; k < x_c; ++k)
+        {
+            for (int i = 0; i < x_r; ++i)
+            {
+                _o[i + x_r * j] += (V)(x[i + x_r * k] * y[k + x_c * j]);
+            }
+        }
+    }
+}
+
+// Useful to simplify something like find(A >= B)
+// It would avoid to calculate A>=B and to search the true values after.
+template<typename T, typename U, typename V, V (F)(T, U)>
+inline int findBinMM(const T * x, const int64_t x_r, const int64_t x_c, const U * y, double ** o)
+{
+    std::vector<double> v;
+    for (int64_t i = 0; i < x_r * x_c; ++i)
+    {
+        if (F(x[i], y[i]))
+        {
+            v.push_back((double)i);
+        }
+    }
+
+    const size_t s = v.size();
+    *o = new double[s];
+    memcpy(*o, &(v[0]), s * sizeof(double));
+
+    return s;
+}
+
+template<typename T, typename U, typename V, V (F)(T, U)>
+inline int findBinSM(const T x, const int64_t x_r, const int64_t x_c, const U * y, double ** o)
+{
+    std::vector<double> v;
+    for (int64_t i = 0; i < x_r * x_c; ++i)
+    {
+        if (F(x, y[i]))
+        {
+            v.push_back((double)i);
+        }
+    }
+
+    const size_t s = v.size();
+    *o = new double[s];
+    memcpy(*o, &(v[0]), s * sizeof(double));
+
+    return s;
+}
+
+template<typename T, typename U, typename V, V (F)(T, U)>
+inline int findBinMS(const T * x, const int64_t x_r, const int64_t x_c, U y, double ** o)
+{
+    std::vector<double> v;
+    for (int64_t i = 0; i < x_r * x_c; ++i)
+    {
+        if (F(x[i], y))
+        {
+            v.push_back((double)i);
+        }
+    }
+
+    const size_t s = v.size();
+    *o = new double[s];
+    memcpy(*o, &(v[0]), s * sizeof(double));
+
+    return s;
+}
+
+inline void DGEMM(double * x, int & x_r, int & x_c, int & y_c, 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, x, &x_r, y, &x_c, &zero, o, &x_r);
+}
+
+template<>
+inline void timesMM<double, double, double>(const double * x, const int64_t x_r, const int64_t x_c, const double * y, const int64_t y_r, const int64_t y_c, double ** o)
+{
+    double * _o;
+    const int64_t size = x_r * y_c;
+    if (*o)
+    {
+        _o = *o;
+    }
+    else
+    {
+        _o = new double[size];
+        *o = _o;
+    }
+
+    int _x_r = x_r;
+    int _x_c = x_c;
+    int _y_c = y_c;
+    DGEMM(const_cast<double *>(x), _x_r, _x_c, _y_c, const_cast<double *>(y), _o);
+}
+
+inline void DSQM(double * x, double * y, int x_r, double * o)
+{
+    DGEMM(x, x_r, x_r, x_r, y, o);
+}
+
+inline void inv(double * X, int x_r)
+{
+    static char one = '1';
+    static int iONE = 1;
+    static int iMONE = -1;
+
+    double norm1 = C2F(dlange)(&one, &x_r, &x_r, X, &x_r, nullptr);
+    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 U is exactly 0)
+        std::cout << "Singular matrix" << std::endl;
+        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];
+        C2F(dgecon)(&one, &x_r, X, &x_r, &norm1, &rcond, work, iwork, &info);
+        if (rcond <= std::sqrt(C2F(dlamch)("e", 1L)))
+        {
+            // Ill conditionned
+            std::cout << "Ill conditionned" << std::endl;
+        }
+        C2F(dgetri)(&x_r, X, &x_r, pivot, work, &size, &info);
+        delete[] pivot;
+        delete[] work;
+        delete[] iwork;
+    }
+}
+
+inline void inv(double * X, int & x_r, double * O)
+{
+    memcpy(O, X, x_r * x_r * sizeof(double));
+    inv(O, x_r);
+}
+
+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;
+}
+
+template<typename T>
+inline void pow2ui(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, c, d;
+                    a = y0 * X[0] + y2 * X[1];
+                    b = y0 * X[2] + y2 * X[3];
+                    c = y1 * X[0] + y3 * X[1];
+                    d = y1 * X[2] + y3 * X[3];
+                    y0 = a;
+                    y1 = c;
+                    y2 = b;
+                    y3 = d;
+                }
+
+            }
+
+            X[0] = y0;
+            X[1] = y1;
+            X[2] = y2;
+            X[3] = y3;
+        }
+    }
+}
+
+template<typename T>
+inline void pow2ui(T * X, uint64_t N, T * O)
+{
+    O[0] = X[0];
+    O[1] = X[1];
+    O[2] = X[2];
+    O[3] = X[3];
+    pow2ui(O, N);
+}
+
+inline void powM(double * X, const int x_r, double * O, uint64_t N, double * T)
+{
+    /*
+      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)
+    {
+        pow2ui(X, N, O);
+        return;
+    }
+
+    const int size = x_r * x_r;
+
+    if (N == 0)
+    {
+        // Identity matrix
+        memset(O, 0, size * sizeof(double));
+        for (int i = 0; i < x_r; ++i)
+        {
+            O[i * (x_r + 1)] = 1;
+        }
+        return;
+    }
+    else if (N == 1)
+    {
+        // X itself
+        memcpy(O, X, size * sizeof(double));
+        return;
+    }
+    else if (N == 2)
+    {
+        DSQM(X, X, x_r, O);
+        return;
+    }
+
+    //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);
+    const bool alloc = !T;
+    if (alloc)
+    {
+        T = 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)
+        {
+            DSQM(X, X, x_r, O);
+            DSQM(X, O, x_r, T);
+            std::swap(O, T);
+        }
+        else
+        {
+            DSQM(X, X, x_r, T);
+            DSQM(X, T, x_r, O);
+        }
+    }
+    else
+    {
+        if (parity)
+        {
+            DSQM(X, X, x_r, O);
+        }
+        else
+        {
+            DSQM(X, X, x_r, T);
+            std::swap(O, T);
+        }
+    }
+
+    while (mask >>= 1)
+    {
+        DSQM(O, O, x_r, T);
+        if (N & mask)
+        {
+            DSQM(X, T, x_r, O);
+        }
+        else
+        {
+            std::swap(O, T);
+        }
+    }
+
+    if (alloc)
+    {
+        delete[] T;
+    }
+}
+
+inline void powMatHelper(double * X, const int x_r, double * O, const int64_t N, double * T)
+{
+    // TODO: Actually the X^d where d is not an integer is made in the macro %s_p_s.sci
+    // So we should probably rewrite it in C++...
+    if (N >= 0)
+    {
+        powM(X, x_r, O, (uint64_t)N, T);
+    }
+    else
+    {
+        powM(X, x_r, O, (uint64_t)(-N), T);
+        inv(O, x_r);
+    }
+}
+
+inline void powMat(double * X, const int64_t x_r, const int64_t N, double ** O)
+{
+    // TODO: Actually the X^d where d is not an integer is made in the macro %s_p_s.sci
+    // So we should probably rewrite it in C++...
+    double * _O;
+    if (*O)
+    {
+        _O = *O;
+    }
+    else
+    {
+        _O = new double[x_r * x_r];
+        *O = _O;
+    }
+    powMatHelper(X, (int)x_r, _O, N, nullptr);
+}
+
+inline void powM(double * X, const int x_r, int64_t N)
+{
+    if (N >= 0)
+    {
+        powM(X, x_r, N);
+    }
+    else
+    {
+        powM(X, x_r, -N);
+        inv(X, x_r);
+    }
+}
+
+inline void powM(double * X, const int x_r, uint64_t N)
+{
+    if (x_r == 2)
+    {
+        pow2ui(X, N);
+        return;
+    }
+
+    const int size = x_r * x_r;
+
+    if (N == 0)
+    {
+        memset(X, 0, size * sizeof(double));
+        for (int i = 0; i < x_r; ++i)
+        {
+            X[i * (x_r + 1)] = 1;
+        }
+        return;
+    }
+    else if (N == 1)
+    {
+        return;
+    }
+    else if (N == 2)
+    {
+        double * T1 = new double[size];
+        DSQM(X, X, x_r, T1);
+        memcpy(X, T1, size * sizeof(double));
+        return;
+    }
+
+    double * T1 = new double[size];
+    const uint64_t l2N = analysis::tools::clzll(N);
+    if ((l2N & 1) && (N == (1 << l2N)))
+    {
+        // N is a power of 4
+        while (N >>= 2)
+        {
+            DSQM(X, X, x_r, T1);
+            DSQM(T1, T1, x_r, X);
+        }
+        delete[] T1;
+        return;
+    }
+
+    double * T2 = new double[size];
+    powM(X, x_r, T1, N >> 1, T2);
+    if (N & 1)
+    {
+        DSQM(X, T1, x_r, T2);
+        DSQM(T1, T2, x_r, X);
+    }
+    else
+    {
+        DSQM(T1, T1, x_r, X);
+    }
+
+    delete[] T1;
+    delete[] T2;
+}
+
+template<typename T>
+inline T powui(T x, uint64_t n)
+{
+    T p = x;
+    T y = (n & 1) ? x : 1;
+
+    while (n >>= 1)
+    {
+        p *= p;
+        if (n & 1)
+        {
+            y *= p;
+        }
+    }
+
+    return y;
+}
+
+template<typename T>
+inline T powi(T x, int64_t n)
+{
+    if (n >= 0)
+    {
+        return powui(x, n);
+    }
+    else
+    {
+        return 1 / powui(x, (uint64_t)(-n));
+    }
+}
+
+inline void powui(double & r, double & i, uint64_t n)
+{
+    if (i == 0)
+    {
+        r = powui(r, n);
+        return;
+    }
+
+    if (r == 0)
+    {
+        const double x = powui(i, n);
+        switch (n % 4)
+        {
+            case 0:
+                r = x;
+                i = 0;
+                return;
+            case 1:
+                r = 0;
+                i = x;
+                return;
+            case 2:
+                r = -x;
+                i = 0;
+                return;
+            case 3:
+                r = 0;
+                i = -x;
+                return;
+        }
+    }
+
+    double p_r = r;
+    double p_i = i;
+    double y_r, y_i;
+
+    if (n & 1)
+    {
+        y_r = r;
+        y_i = i;
+    }
+    else
+    {
+        y_r = 1;
+        y_i = 0;
+    }
+
+    while (n >>= 1)
+    {
+        const double s = p_r;
+        p_r = p_r * p_r - p_i * p_i;
+        p_i *= 2 * s;
+        if (n & 1)
+        {
+            const double s = y_r;
+            y_r = y_r * p_r - y_i * p_i;
+            y_i = y_i * p_r + s * p_i;
+        }
+    }
+
+    r = y_r;
+    i = y_i;
+}
+
+inline void powi(double & r, double & i, int64_t n)
+{
+    if (n >= 0)
+    {
+        powui(r, i, n);
+    }
+    else
+    {
+        powui(r, i, -n);
+        const double d = r * r + i * i;
+        r /= d;
+        i /= -d;
+    }
+}
+
+template<typename T, typename U, typename V = typename ScilabType<T, U>::type>
+inline V modulo(T x, U y)
+{
+    return x % y;
+}
+
+inline double modulo(double x, double y)
+{
+    return std::fmod(x, y);
+}
+
+template<typename T, typename U = T>
+inline U opposite(T x)
+{
+    return -x;
+}
+
+template<typename T, typename U = T>
+inline U pow2(T x)
+{
+    return x * x;
+}
+
+template<typename T, typename U = T>
+inline U powm1(T x)
+{
+    return 1 / x;
+}
+
+template<typename T>
+inline int asbool(T x)
+{
+    return x != 0;
+}
+
+template<typename T>
+inline int boolneg(T x)
+{
+    return !x;
+}
+
+template<typename T>
+inline bool asBool(T x)
+{
+    return x != 0;
+}
+
+template<typename T>
+inline bool Boolneg(T x)
+{
+    return !x;
+}
+
+template<typename T, typename U, typename V = typename ScilabType<T, U>::type>
+inline V binand(T x, U y)
+{
+    return x & y;
+}
+
+template<typename T, typename U, typename V = typename ScilabType<T, U>::type>
+inline V binor(T x, U y)
+{
+    return x | y;
+}
+
+template<typename T, typename U, typename V = typename ScilabType<T, U>::type>
+inline V binxor(T x, U y)
+{
+    return x ^ y;
+}
+
+template<typename T, typename U = T>
+inline U binneg(T x)
+{
+    return ~x;
+}
+
+template<typename T, typename U, typename V = bool>
+inline V booland(T x, U y)
+{
+    return x && y;
+}
+
+template<typename T, typename U, typename V = bool>
+inline V boolor(T x, U y)
+{
+    return x || y;
+}
+
+template<typename T, typename U, typename V = bool>
+inline V boolxor(T x, U y)
+{
+    return !x != !y;
+}
+
+template<typename T, typename U = bool>
+inline U boolneg(T x)
+{
+    return !x;
+}
+
+template<typename T>
+inline bool isStrictNegative(T x)
+{
+    return x < 0;
+}
+
+template<typename T>
+inline bool isStrictPositive(T x)
+{
+    return x > 0;
+}
+
+template<typename T>
+inline bool isAbsGreaterThan1(T x)
+{
+    return std::fabs(x) > 1;
+}
+
+template<typename T>
+inline bool getFalse(T x)
+{
+    return false;
+}
+
+template<typename T>
+inline bool getTrue(T x)
+{
+    return true;
+}
+
+
+inline void makeImplicitList(const double start, const double step, const double end, double *& out, int & r, int & c)
+{
+    double val;
+    int type = analysis::ForList64::checkList(start, end, step, val);
+
+    switch (type)
+    {
+        case 0:
+            out = nullptr;
+            r = c = 0;
+            break;
+        case 1:
+            out = new double[1];
+            out[0] = val;
+            r = c = 1;
+            break;
+        case 2:
+        {
+            uint64_t N = analysis::ForList64::size(start, end, step);
+            out = new double[N];
+            r = 1;
+            c = N;
+            double _s = start;
+            for (uint64_t i = 0; i < N; ++i, _s += step)
+            {
+                out[i] = _s;
+            }
+            break;
+        }
+        default:
+            break;
+    }
+}
+
+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);
+}
+
+inline void transp(const double * X, const int64_t x_r, const int64_t x_c, double * 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];
+        }
+    }
+}
+
+inline void transp(double * 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]);
+        }
+    }
+}
+
+inline void transp(double * 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
+        transp(X, x_r);
+    }
+    else
+    {
+        const int s = x_r * x_c;
+        double * O = new double[s];
+        oTransp(X, x_r, x_c, O, x_c, x_r);
+        memcpy(X, O, s * sizeof(double));
+        delete[] 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
+    // X/Y = (Y'\X')'
+
+    static char one = '1';
+    static char N = 'N';
+    static const double eps = C2F(dlamch)("e", 1L);
+
+    const int64_t max = std::max(y_r, y_c);
+    const int64_t min = std::min(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;
+    }
+
+    oTransp(X, x_r, x_c, Xt, max, x_r);
+    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)
+    {
+        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);
+        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)
+            std::wcerr << "Singular matrix" << std::endl;
+            lsq = true;
+            delete[] pivot;
+        }
+        else
+        {
+            double rcond = 0;
+            double * work = new double[4 * y_c];
+            int * iwork = new int[y_c];
+            C2F(dgecon)(&one, &y_c_i, Yt, &y_c_i, &norm1, &rcond, work, iwork, &info);
+            if (rcond <= 10 * eps)
+            {
+                // Ill conditionned
+                std::wcerr << "Ill conditionned" << std::endl;
+                lsq = true;
+            }
+            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);
+            }
+
+            delete[] pivot;
+            delete[] work;
+            delete[] iwork;
+        }
+    }
+
+    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;
+        }
+        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
+        }
+
+        oTransp(Xt, max, x_r, _O, x_r, y_r);
+        delete[] jpvt;
+        delete[] work;
+    }
+
+    delete[] Xt;
+    delete[] Yt;
+}
+
+/*        template<>
+        inline wchar_t * sum<wchar_t *, wchar_t *, wchar_t *>(wchar_t * x, wchar_t * y)
+        {
+            const size_t lenx = wcslen(x) * sizeof(wchar_t);
+            const size_t leny = (wcslen(y) + 1) * sizeof(wchar_t);
+            void * const s = MALLOC(lenx + leny);
+            memcpy(s, x, lenx);
+            memcpy((char *)s + lenx, y, leny);
+
+            return (wchar_t *)s;
+        }
+*/
+
+/*template<>
+  inline void binSM<wchar_t *, wchar_t *, wchar_t *, sum<wchar_t *, wchar_t *, wchar_t *>>(wchar_t * x, wchar_t * const * y, const int64_t y_r, const int64_t y_c, wchar_t ** o)
+  {
+  const size_t lenx = wcslen(x) * sizeof(wchar_t);
+  for (int64_t i = 0; i < y_r * y_c; ++i)
+  {
+  const size_t leny = (wcslen(y[i]) + 1) * sizeof(wchar_t);
+  void * const s = MALLOC(lenx + leny);
+  memcpy(s, x, lenx);
+  memcpy((char *)s + lenx, y[i], leny);
+  o[i] = (wchar_t *)s;
+  }
+  }
+
+  template<>
+  inline void binMS<wchar_t *, wchar_t *, wchar_t *, sum<wchar_t *, wchar_t *, wchar_t *>>(wchar_t * const * x, const int64_t x_r, const int64_t x_c, wchar_t * y, wchar_t ** o)
+  {
+  const size_t leny = (wcslen(y) + 1) * sizeof(wchar_t);
+  for (int64_t i = 0; i < x_r * x_c; ++i)
+  {
+  const size_t lenx = wcslen(x[i]) * sizeof(wchar_t);
+  void * const s = MALLOC(lenx + leny);
+  memcpy(s, x[i], lenx);
+  memcpy((char *)s + lenx, y, leny);
+  o[i] = (wchar_t *)s;
+  }
+  }
+*/
+
+template<unsigned int N>
+inline wchar_t * sum(wchar_t ** x)
+{
+    static_assert(N >= 3, "More than 3 strings expected in the sum");
+    size_t lens[N];
+    lens[0] = wcslen(x[0]) * sizeof(wchar_t);
+    for (unsigned int i = 1; i < N - 1; ++i)
+    {
+        lens[i] = lens[i - 1] + wcslen(x[i]) * sizeof(wchar_t);
+    }
+    lens[N - 1] = lens[N - 2] + (wcslen(x[N - 1]) + 1) * sizeof(wchar_t);
+
+    void * const s = MALLOC(lens[N - 1]);
+    memcpy(s, x[0], lens[0]);
+    for (unsigned int i = 1; i < N; ++i)
+    {
+        memcpy((char *)s + lens[i - 1], x[i], lens[i] - lens[i - 1]);
+    }
+
+    return (wchar_t *)s;
+}
+
+} // namespace BaseFunctions
+} // namespace jit
+
+#endif // __BASE_FUNCTIONS_HXX__
diff --git a/scilab/modules/ast/includes/jit/BaseFunctionsAgain.hxx b/scilab/modules/ast/includes/jit/BaseFunctionsAgain.hxx
new file mode 100644 (file)
index 0000000..d8fef3f
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ *  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_FUNCTIONS_AGAIN_HXX__
+#define __BASE_FUNCTIONS_AGAIN_HXX__
+
+namespace jit
+{
+    namespace BaseFunctions
+    {
+        template<typename std::complex<double> (F)(const std::complex<double> &)>
+        inline static void complexify(const double in_re, const double in_im, double & out_re, double & out_im)
+        {
+            const std::complex<double> z = F(std::complex<double>(in_re, in_im));
+            out_re = z.real();
+            out_im = z.imag();
+        }
+
+        template<typename std::complex<double> (F)(const std::complex<double> &)>
+        inline static void cvectorize(const double * x_re, const double * x_im, const int64_t x_r, const int64_t x_c, double ** o_re, double ** o_im)
+        {
+            double * __restrict__ _o_re;
+            double * __restrict__ _o_im;
+            const int64_t size = x_r * x_c;
+            if (*o_re)
+            {
+                _o_re = *o_re;
+                _o_im = *o_im;
+            }
+            else
+            {
+                _o_re = new double[size];
+                _o_im = new double[size];
+                *o_re = _o_re;
+            }
+
+            for (int64_t i = 0; i < size; ++i)
+            {
+                const std::complex<double> z = F(std::complex<double>(x_re[i], x_im[i]));
+                _o_re[i] = z.real();
+                _o_im[i] = z.imag();
+            }
+        }
+    }
+}
+
+#endif // __BASE_FUNCTIONS_AGAIN_HXX__
diff --git a/scilab/modules/ast/includes/jit/BaseFunctionsMacros.h b/scilab/modules/ast/includes/jit/BaseFunctionsMacros.h
new file mode 100644 (file)
index 0000000..5711f35
--- /dev/null
@@ -0,0 +1,200 @@
+/*
+ *  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_FUNCTIONS_MACROS_H__
+#define __BASE_FUNCTIONS_MACROS_H__
+
+#define __VECTORIZE__(NAME, CPPNAME, ShortTL, BaseTL, BaseTO) addSymbol(sam, "" #NAME "_M_" #ShortTL, &BaseFunctions::vectorize<BaseTL, BaseTO, CPPNAME>);
+#define __CUMULATE__(NAME, CPPNAME, ShortTL, BaseTL, BaseTO) addSymbol(sam, "" #NAME "_M_" #ShortTL, BaseFunctions::cumulate<BaseTL, CPPNAME>);
+#define __CUMULATEIN__(NAME, CPPNAME, ShortTL, BaseTL, BaseTO) addSymbol(sam, "" #NAME "_M_" #ShortTL, BaseFunctions::cumulateIn<BaseTL, CPPNAME>);
+#define __BINARY__(NAME, CPPNAME, __SM__, __MS__, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) addSymbol(sam, "" #NAME "_" #__SM__ "_" #ShortTL "_" #__MS__ "_" #ShortTR, BaseFunctions::bin##__SM__##__MS__<BaseTL, BaseTR, BaseTO, CPPNAME>);
+#define __UNARY__(NAME, CPPNAME, __SM__, ShortTL, BaseTL, BaseTO) addSymbol(sam, "" #NAME "_" #__SM__ "_" #ShortTL, BaseFunctions::unary##__SM__<BaseTL, BaseTO, CPPNAME>);
+
+#define ______ADD_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(add, BaseFunctions::sum, S, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ADD_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(add, BaseFunctions::sum, M, S, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ADD_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(add, BaseFunctions::sum, M, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ADD_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(add, BaseFunctions::sum, U, U, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______SUB_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(sub, BaseFunctions::sub, S, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______SUB_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(sub, BaseFunctions::sub, M, S, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______SUB_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(sub, BaseFunctions::sub, M, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______SUB_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(sub, BaseFunctions::sub, U, U, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______UNARYMINUS_____M__(ShortTL, BaseTL, BaseTO) __UNARY__(unaryminus, BaseFunctions::opposite, M, ShortTL, BaseTL, BaseTO)
+
+#define ______TIMES_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(times, BaseFunctions::prod, S, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______TIMES_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(times, BaseFunctions::prod, M, S, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______TIMES_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) addSymbol(sam, "times_M_" #ShortTL "_M_" #ShortTR, BaseFunctions::timesMM<BaseTL, BaseTR, BaseTO>);
+#define ______TIMES_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(times, BaseFunctions::prod, U, U, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______DOTTIMES_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(dottimes, BaseFunctions::prod, S, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTTIMES_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(dottimes, BaseFunctions::prod, M, S, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTTIMES_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(dottimes, BaseFunctions::prod, M, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTTIMES_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(dottimes, BaseFunctions::prod, U, U, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______DOTPOWER_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(dotpower, BaseFunctions::pow, S, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTPOWER_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(dotpower, BaseFunctions::pow, M, S, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTPOWER_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(dotpower, BaseFunctions::pow, M, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTPOWER_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(dotpower, BaseFunctions::pow, U, U, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______DOTRDIV_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(dotrdiv, BaseFunctions::rdiv, S, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTRDIV_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(dotrdiv, BaseFunctions::rdiv, M, S, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTRDIV_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(dotrdiv, BaseFunctions::rdiv, M, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTRDIV_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(dotrdiv, BaseFunctions::rdiv, U, U, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______NEQ_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(neq, BaseFunctions::ne, S, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______NEQ_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(neq, BaseFunctions::ne, M, S, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______NEQ_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(neq, BaseFunctions::ne, M, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______NEQ_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(neq, BaseFunctions::ne, U, U, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______EQ_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(eq, BaseFunctions::eq, S, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______EQ_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(eq, BaseFunctions::eq, M, S, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______EQ_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(eq, BaseFunctions::eq, M, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______EQ_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(eq, BaseFunctions::eq, U, U, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______LE_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(le, BaseFunctions::le, S, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LE_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(le, BaseFunctions::le, M, S, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LE_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(le, BaseFunctions::le, M, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LE_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(le, BaseFunctions::le, U, U, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______GT_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(gt, BaseFunctions::gt, S, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GT_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(gt, BaseFunctions::gt, M, S, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GT_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(gt, BaseFunctions::gt, M, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GT_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(gt, BaseFunctions::gt, U, U, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______LT_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(lt, BaseFunctions::lt, S, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LT_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(lt, BaseFunctions::lt, M, S, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LT_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(lt, BaseFunctions::lt, M, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LT_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(lt, BaseFunctions::lt, U, U, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______GE_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(ge, BaseFunctions::ge, S, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GE_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(ge, BaseFunctions::ge, M, S, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GE_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(ge, BaseFunctions::ge, M, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GE_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(ge, BaseFunctions::ge, U, U, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______AND_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(and, BaseFunctions::booland, S, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______AND_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(and, BaseFunctions::booland, M, S, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______AND_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(and, BaseFunctions::booland, M, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______AND_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(and, BaseFunctions::booland, U, U, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______ANDAND_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(andand, BaseFunctions::booland, S, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ANDAND_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(andand, BaseFunctions::booland, M, S, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ANDAND_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(andand, BaseFunctions::booland, M, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ANDAND_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(andand, BaseFunctions::booland, U, U, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______OR_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(or, BaseFunctions::boolor, S, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OR_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(or, BaseFunctions::boolor, M, S, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OR_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(or, BaseFunctions::boolor, M, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OR_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(or, BaseFunctions::boolor, U, U, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______OROR_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(oror, BaseFunctions::boolor, S, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OROR_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(oror, BaseFunctions::boolor, M, S, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OROR_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(oror, BaseFunctions::boolor, M, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OROR_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(oror, BaseFunctions::boolor, U, U, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______NOT_____M__(ShortTL, BaseTL, BaseTO) __UNARY__(not, BaseFunctions::boolneg, M, ShortTL, BaseTL, BaseTO)
+
+#define ______TRANSP_____M__(ShortTL, BaseTL, BaseTO) addSymbol(sam, "transp_M_" #ShortTL, BaseFunctions::oTransp<BaseTL>);
+
+#define __ABS_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(abs, BaseFunctions::abs, ShortTL, BaseTL, BaseTO)
+#define __COS_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(cos, std::cos, ShortTL, BaseTL, BaseTO)
+#define __SIN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(sin, std::sin, ShortTL, BaseTL, BaseTO)
+#define __TAN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(tan, std::tan, ShortTL, BaseTL, BaseTO)
+#define __TANH_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(tanh, std::tanh, ShortTL, BaseTL, BaseTO)
+#define __ATAN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(atan, std::atan, ShortTL, BaseTL, BaseTO)
+#define __COSH_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(cosh, std::cosh, ShortTL, BaseTL, BaseTO)
+#define __SINH_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(sinh, std::sinh, ShortTL, BaseTL, BaseTO)
+#define __EXP_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(exp, std::exp, ShortTL, BaseTL, BaseTO)
+#define __ERF_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(erf, std::erf, ShortTL, BaseTL, BaseTO)
+#define __ERFC_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(erfc, std::erfc, ShortTL, BaseTL, BaseTO)
+#define __SIGN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(sign, BaseFunctions::sign, ShortTL, BaseTL, BaseTO)
+#define __GAMMA_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(gamma, std::gamma, ShortTL, BaseTL, BaseTO)
+#define __GAMMALN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(gammaln, std::lgamma, ShortTL, BaseTL, BaseTO)
+#define __CEIL_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(ceil, BaseFunctions::ceil, ShortTL, BaseTL, BaseTO)
+#define __FLOOR_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(floor, BaseFunctions::floor, ShortTL, BaseTL, BaseTO)
+#define __ROUND_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(round, BaseFunctions::round, ShortTL, BaseTL, BaseTO)
+#define __INT_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(int, BaseFunctions::trunc, ShortTL, BaseTL, BaseTO)
+#define __FIX_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(fix, BaseFunctions::trunc, ShortTL, BaseTL, BaseTO)
+#define __INT8_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(int8, BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __INT16_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(int16, BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __INT32_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(int32, BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __INT64_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(int64, BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __UINT8_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(uint8, BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __UINT16_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(uint16, BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __UINT32_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(uint32, BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __UINT64_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(uint64, BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+//#define __ISINF_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(isinf, tools::isInfinite, ShortTL, BaseTL, BaseTO)
+//#define __ISNAN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(isnan, tools::isNaN, ShortTL, BaseTL, BaseTO)
+#define __MAX_M__(ShortTL, BaseTL, BaseTO) __CUMULATE__(max, BaseFunctions::max, ShortTL, BaseTL, BaseTO)
+#define __MIN_M__(ShortTL, BaseTL, BaseTO) __CUMULATE__(min, BaseFunctions::min, ShortTL, BaseTL, BaseTO)
+#define __SUM_M__(ShortTL, BaseTL, BaseTO) __CUMULATE__(sum, BaseFunctions::sum, ShortTL, BaseTL, BaseTO)
+#define __PROD_M__(ShortTL, BaseTL, BaseTO) __CUMULATE__(prod, BaseFunctions::prod, ShortTL, BaseTL, BaseTO)
+#define __CUMSUM_M__(ShortTL, BaseTL, BaseTO) __CUMULATEIN__(cumsum, BaseFunctions::sum, ShortTL, BaseTL, BaseTO)
+#define __CUMPROD_M__(ShortTL, BaseTL, BaseTO) __CUMULATEIN__(cumprod, BaseFunctions::prod, ShortTL, BaseTL, BaseTO)
+
+#define __MODULO_SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(modulo, BaseFunctions::modulo, S, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __MODULO_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(modulo, BaseFunctions::modulo, M, S, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __MODULO_MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(modulo, BaseFunctions::modulo, M, M, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __MODULO_UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(modulo, BaseFunctions::modulo, U, U, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+// NOT IMPLEMENTED FOR NOW !!
+#define ______DOTTRANSP_____M__(ShortTL, BaseTL, BaseTO)
+#define ______KRONTIMES_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______KRONTIMES_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______KRONTIMES_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______KRONTIMES_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LDIVIDE_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LDIVIDE_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LDIVIDE_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LDIVIDE_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______RDIVIDE_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______RDIVIDE_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______RDIVIDE_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______RDIVIDE_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______POWER_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______POWER_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______POWER_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______POWER_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __ZEROS_M__(ShortTL, BaseTL, BaseTO)
+#define __ZEROS_SS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __RAND_M__(ShortTL, BaseTL, BaseTO)
+#define __RAND_SS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __ONES_M__(ShortTL, BaseTL, BaseTO)
+#define __ONES_SS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __ASIN_M__(ShortTL, BaseTL, BaseTO)
+#define __ACOS_M__(ShortTL, BaseTL, BaseTO)
+#define __SQRT_M__(ShortTL, BaseTL, BaseTO)
+#define __LOG_M__(ShortTL, BaseTL, BaseTO)
+#define __SINM_M__(ShortTL, BaseTL, BaseTO)
+#define __ISINF_M__(ShortTL, BaseTL, BaseTO)
+#define __ISNAN_M__(ShortTL, BaseTL, BaseTO)
+#define __HYPOT_SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __HYPOT_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __HYPOT_MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __HYPOT_UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __SIZE_M__(ShortTL, BaseTL, BaseTO)
+#define __TYPE_M__(ShortTL, BaseTL, BaseTO)
+#define __INTTYPE_M__(ShortTL, BaseTL, BaseTO)
+#define __IMAG_M__(ShortTL, BaseTL, BaseTO)
+#define __ISSCALAR_M__(ShortTL, BaseTL, BaseTO)
+#define __AND_M__(ShortTL, BaseTL, BaseTO)
+#define __AND_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __OR_M__(ShortTL, BaseTL, BaseTO)
+#define __OR_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __IMULT_M__(ShortTL, BaseTL, BaseTO)
+#define __ISREAL_M__(ShortTL, BaseTL, BaseTO)
+#define __ISREAL_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __ARGN_S__(ShortTL, BaseTL, BaseTO)
+#define __MATRIX_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __MATRIX_MSS__(ShortT1, BaseT1, ShortT2, BaseT2, ShortT3, BaseT3, BaseTO)
+
+#endif // __BASE_FUNCTIONS_MACROS_H__
diff --git a/scilab/modules/ast/includes/jit/BaseFunctionsMacros2.h b/scilab/modules/ast/includes/jit/BaseFunctionsMacros2.h
new file mode 100644 (file)
index 0000000..7aad923
--- /dev/null
@@ -0,0 +1,221 @@
+/*
+ *  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_FUNCTIONS_MACROS2_H__
+#define __BASE_FUNCTIONS_MACROS2_H__
+
+#define __VECTORIZE__(NAME, CPPNAME, ShortTL, BaseTL, BaseTO) void NAME##_M##ShortTL(const BaseTL * __restrict__ x, const int64_t x_r, const int64_t x_c, BaseTO ** __restrict__ o) { jit::BaseFunctions::vectorize<BaseTL, BaseTO, CPPNAME>(x, x_r, x_c, o); }
+
+#define __CUMULATE__(NAME, CPPNAME, ShortTL, BaseTL, BaseTO) BaseTL NAME##_M##ShortTL(const BaseTL * x, const int64_t x_r, const int64_t x_c) { return jit::BaseFunctions::cumulate<BaseTL, CPPNAME>(x, x_r, x_c); }
+
+#define __CUMULATEIN__(NAME, CPPNAME, ShortTL, BaseTL, BaseTO) void NAME##_M##ShortTL(const BaseTL * x, const int64_t x_r, const int64_t x_c, BaseTL * o) { jit::BaseFunctions::cumulateIn<BaseTL, CPPNAME>(x, x_r, x_c, o); }
+
+#define __BINARY__SM(NAME, CPPNAME, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) void NAME##_S##ShortTL##M##ShortTR(const BaseTL x, const BaseTR * __restrict__ y, const int64_t y_r, const int64_t y_c, BaseTO ** __restrict__ o) { jit::BaseFunctions::binSM<BaseTL, BaseTR, BaseTO, CPPNAME>(x, y, y_r, y_c, o); }
+
+#define __BINARY__MS(NAME, CPPNAME, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) void NAME##_M##ShortTL##S##ShortTR(const BaseTL * __restrict__ x, const int64_t x_r, const int64_t x_c, const BaseTR y, BaseTO ** __restrict__ o) { jit::BaseFunctions::binMS<BaseTL, BaseTR, BaseTO, CPPNAME>(x, x_r, x_c, y, o); }
+
+#define __BINARY__MM(NAME, CPPNAME, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) void NAME##_M##ShortTL##M##ShortTR(const BaseTL * __restrict__ x, const int64_t x_r, const int64_t x_c, const BaseTR * __restrict__ y, const int64_t y_r, const int64_t y_c, BaseTO ** __restrict__ o) { jit::BaseFunctions::binMM<BaseTL, BaseTR, BaseTO, CPPNAME>(x, x_r, x_c, y, y_r, y_c, o); }
+
+#define __BINARY__UU(NAME, CPPNAME, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) void NAME##_U##ShortTL##U##ShortTR(const BaseTL * __restrict__ x, const int64_t x_r, const int64_t x_c, const BaseTR * __restrict__ y, const int64_t y_r, const int64_t y_c, BaseTO ** __restrict__ o) { jit::BaseFunctions::binUU<BaseTL, BaseTR, BaseTO, CPPNAME>(x, x_r, x_c, y, y_r, y_c, o); }
+
+#define __UNARY__M(NAME, CPPNAME, ShortTL, BaseTL, BaseTO) void NAME##_M##ShortTL(const BaseTL * x, const int64_t x_r, const int64_t x_c, BaseTO ** __restrict__ o) { jit::BaseFunctions::unaryM<BaseTL, BaseTO, CPPNAME>(x, x_r, x_c, o); }
+
+#define __BREAKON__SM(NAME, CPPNAME, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) int32_t breakOn_##NAME##_S##ShortTL##M##ShortTR(const BaseTL x, const BaseTR * __restrict__ y, const int64_t y_r, const int64_t y_c) { return jit::BaseFunctions::breakOnSM<false, BaseTL, BaseTR, CPPNAME>(x, y, y_r, y_c); }
+
+#define __BREAKON__MS(NAME, CPPNAME, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) int32_t breakOn_##NAME##_M##ShortTL##S##ShortTR(const BaseTL * __restrict__ x, const int64_t x_r, const int64_t x_c, const BaseTR y) { return jit::BaseFunctions::breakOnMS<false, BaseTL, BaseTR, CPPNAME>(x, x_r, x_c, y); }
+
+#define __BREAKON__MM(NAME, CPPNAME, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) int32_t breakOn_##NAME##_M##ShortTL##M##ShortTR(const BaseTL * __restrict__ x, const int64_t x_r, const int64_t x_c, const BaseTR * __restrict__ y, const int64_t y_r, const int64_t y_c) { return jit::BaseFunctions::breakOnMM<false, BaseTL, BaseTR, CPPNAME>(x, x_r, x_c, y, y_r, y_c); }
+
+
+#define ______ADD_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(add, jit::BaseFunctions::sum, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ADD_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(add, jit::BaseFunctions::sum, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ADD_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(add, jit::BaseFunctions::sum, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ADD_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(add, jit::BaseFunctions::sum, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______SUB_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(sub, jit::BaseFunctions::sub, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______SUB_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(sub, jit::BaseFunctions::sub, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______SUB_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(sub, jit::BaseFunctions::sub, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______SUB_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(sub, jit::BaseFunctions::sub, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______UNARYMINUS_____M__(ShortTL, BaseTL, BaseTO) __UNARY__M(unaryminus, jit::BaseFunctions::opposite, ShortTL, BaseTL, BaseTO)
+
+#define ______TIMES_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(times, jit::BaseFunctions::prod, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______TIMES_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(times, jit::BaseFunctions::prod, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______TIMES_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) void times_M##ShortTL##M##ShortTR(const BaseTL * __restrict__ x, const int64_t x_r, const int64_t x_c, const BaseTR * __restrict__ y, const int64_t y_r, const int64_t y_c, BaseTO ** __restrict__ o) { jit::BaseFunctions::timesMM<BaseTL, BaseTR, BaseTO>(x, x_r, x_c, y, y_r, y_c, o); }
+#define ______TIMES_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) 
+
+#define ______DOTTIMES_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(dottimes, jit::BaseFunctions::prod, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTTIMES_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(dottimes, jit::BaseFunctions::prod, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTTIMES_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(dottimes, jit::BaseFunctions::prod, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTTIMES_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(dottimes, jit::BaseFunctions::prod, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______DOTPOWER_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(dotpower, jit::BaseFunctions::pow, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTPOWER_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(dotpower, jit::BaseFunctions::pow, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTPOWER_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(dotpower, jit::BaseFunctions::pow, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTPOWER_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(dotpower, jit::BaseFunctions::pow, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______DOTRDIV_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(dotrdiv, jit::BaseFunctions::rdiv, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTRDIV_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(dotrdiv, jit::BaseFunctions::rdiv, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTRDIV_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(dotrdiv, jit::BaseFunctions::rdiv, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTRDIV_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(dotrdiv, jit::BaseFunctions::rdiv, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______NEQ_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(neq, jit::BaseFunctions::ne, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) 
+#define ______NEQ_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(neq, jit::BaseFunctions::ne, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______NEQ_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(neq, jit::BaseFunctions::ne, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______NEQ_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(neq, jit::BaseFunctions::ne, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______EQ_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(eq, jit::BaseFunctions::eq, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(eq, jit::BaseFunctions::eq, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______EQ_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(eq, jit::BaseFunctions::eq, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)__BREAKON__MS(eq, jit::BaseFunctions::eq, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______EQ_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(eq, jit::BaseFunctions::eq, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(eq, jit::BaseFunctions::eq, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______EQ_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(eq, jit::BaseFunctions::eq, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______LE_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(le, jit::BaseFunctions::le, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(le, jit::BaseFunctions::le, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LE_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(le, jit::BaseFunctions::le, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MS(le, jit::BaseFunctions::le, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LE_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(le, jit::BaseFunctions::le, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(le, jit::BaseFunctions::le, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LE_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(le, jit::BaseFunctions::le, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______GT_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(gt, jit::BaseFunctions::gt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(gt, jit::BaseFunctions::gt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GT_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(gt, jit::BaseFunctions::gt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MS(gt, jit::BaseFunctions::gt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GT_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(gt, jit::BaseFunctions::gt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(gt, jit::BaseFunctions::gt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GT_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(gt, jit::BaseFunctions::gt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______LT_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(lt, jit::BaseFunctions::lt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(lt, jit::BaseFunctions::lt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LT_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(lt, jit::BaseFunctions::lt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MS(lt, jit::BaseFunctions::lt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LT_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(lt, jit::BaseFunctions::lt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(lt, jit::BaseFunctions::lt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LT_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(lt, jit::BaseFunctions::lt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______GE_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(ge, jit::BaseFunctions::ge, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(ge, jit::BaseFunctions::ge, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GE_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(ge, jit::BaseFunctions::ge, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MS(ge, jit::BaseFunctions::ge, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GE_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(ge, jit::BaseFunctions::ge, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(ge, jit::BaseFunctions::ge, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GE_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(ge, jit::BaseFunctions::ge, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______AND_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(and, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(and, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______AND_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(and, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MS(and, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______AND_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(and, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(and, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______AND_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(and, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______ANDAND_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(andand, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(andand, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ANDAND_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(andand, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MS(andand, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ANDAND_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(andand, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(andand, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ANDAND_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(andand, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______OR_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(or, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(or, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OR_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(or, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MS(or, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OR_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(or, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(or, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OR_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(or, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______OROR_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(oror, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(oror, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OROR_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(oror, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MS(oror, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OROR_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(oror, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(oror, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OROR_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(oror, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______NOT_____M__(ShortTL, BaseTL, BaseTO) __UNARY__M(not, jit::BaseFunctions::boolneg, ShortTL, BaseTL, BaseTO)
+
+//#define ______TRANSP_____M__(ShortTL, BaseTL, BaseTO) addSymbol(sam, "transp_M_" #ShortTL, jit::BaseFunctions::oTransp<BaseTL>);
+
+#define __ABS_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(abs, jit::BaseFunctions::abs, ShortTL, BaseTL, BaseTO)
+#define __COS_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(cos, std::cos, ShortTL, BaseTL, BaseTO)
+#define __SIN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(sin, std::sin, ShortTL, BaseTL, BaseTO)
+#define __TAN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(tan, std::tan, ShortTL, BaseTL, BaseTO)
+#define __TANH_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(tanh, std::tanh, ShortTL, BaseTL, BaseTO)
+#define __ATAN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(atan, std::atan, ShortTL, BaseTL, BaseTO)
+#define __COSH_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(cosh, std::cosh, ShortTL, BaseTL, BaseTO)
+#define __SINH_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(sinh, std::sinh, ShortTL, BaseTL, BaseTO)
+#define __EXP_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(exp, std::exp, ShortTL, BaseTL, BaseTO)
+#define __ERF_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(erf, std::erf, ShortTL, BaseTL, BaseTO)
+#define __ERFC_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(erfc, std::erfc, ShortTL, BaseTL, BaseTO)
+#define __SIGN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(sign, jit::BaseFunctions::sign, ShortTL, BaseTL, BaseTO)
+#define __GAMMA_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(gamma, std::gamma, ShortTL, BaseTL, BaseTO)
+#define __GAMMALN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(gammaln, std::lgamma, ShortTL, BaseTL, BaseTO)
+#define __CEIL_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(ceil, jit::BaseFunctions::ceil, ShortTL, BaseTL, BaseTO)
+#define __FLOOR_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(floor, jit::BaseFunctions::floor, ShortTL, BaseTL, BaseTO)
+#define __ROUND_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(round, jit::BaseFunctions::round, ShortTL, BaseTL, BaseTO)
+#define __INT_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(int, jit::BaseFunctions::trunc, ShortTL, BaseTL, BaseTO)
+#define __FIX_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(fix, jit::BaseFunctions::trunc, ShortTL, BaseTL, BaseTO)
+#define __INT8_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(int8, jit::BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __INT16_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(int16, jit::BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __INT32_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(int32, jit::BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __INT64_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(int64, jit::BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __UINT8_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(uint8, jit::BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __UINT16_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(uint16, jit::BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __UINT32_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(uint32, jit::BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __UINT64_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(uint64, jit::BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+//#define __ISINF_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(isinf, tools::isInfinite, ShortTL, BaseTL, BaseTO)
+//#define __ISNAN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(isnan, tools::isNaN, ShortTL, BaseTL, BaseTO)
+#define __MAX_M__(ShortTL, BaseTL, BaseTO) __CUMULATE__(max, jit::BaseFunctions::max, ShortTL, BaseTL, BaseTO)
+#define __MIN_M__(ShortTL, BaseTL, BaseTO) __CUMULATE__(min, jit::BaseFunctions::min, ShortTL, BaseTL, BaseTO)
+#define __SUM_M__(ShortTL, BaseTL, BaseTO) __CUMULATE__(sum, jit::BaseFunctions::sum, ShortTL, BaseTL, BaseTO)
+#define __PROD_M__(ShortTL, BaseTL, BaseTO) __CUMULATE__(prod, jit::BaseFunctions::prod, ShortTL, BaseTL, BaseTO)
+#define __CUMSUM_M__(ShortTL, BaseTL, BaseTO) __CUMULATEIN__(cumsum, jit::BaseFunctions::sum, ShortTL, BaseTL, BaseTO)
+#define __CUMPROD_M__(ShortTL, BaseTL, BaseTO) __CUMULATEIN__(cumprod, jit::BaseFunctions::prod, ShortTL, BaseTL, BaseTO)
+
+// rand is a special call so no need to define it
+#define __RAND_M__(ShortTL, BaseTL, BaseTO)
+
+#define __MODULO_SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(modulo, jit::BaseFunctions::modulo, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __MODULO_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(modulo, jit::BaseFunctions::modulo, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __MODULO_MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(modulo, jit::BaseFunctions::modulo, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __MODULO_UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(modulo, jit::BaseFunctions::modulo, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+// NOT IMPLEMENTED FOR NOW !!
+#define ______TRANSP_____M__(ShortTL, BaseTL, BaseTO)
+#define ______DOTTRANSP_____M__(ShortTL, BaseTL, BaseTO)
+#define ______KRONTIMES_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______KRONTIMES_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______KRONTIMES_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______KRONTIMES_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LDIVIDE_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LDIVIDE_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LDIVIDE_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LDIVIDE_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______RDIVIDE_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______RDIVIDE_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______RDIVIDE_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______RDIVIDE_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______POWER_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______POWER_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______POWER_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______POWER_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __ZEROS_M__(ShortTL, BaseTL, BaseTO)
+#define __ZEROS_SS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __RAND_M__(ShortTL, BaseTL, BaseTO)
+#define __RAND_SS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __ONES_M__(ShortTL, BaseTL, BaseTO)
+#define __ONES_SS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __ASIN_M__(ShortTL, BaseTL, BaseTO)
+#define __ACOS_M__(ShortTL, BaseTL, BaseTO)
+#define __SQRT_M__(ShortTL, BaseTL, BaseTO)
+#define __LOG_M__(ShortTL, BaseTL, BaseTO)
+#define __SINM_M__(ShortTL, BaseTL, BaseTO)
+#define __ISINF_M__(ShortTL, BaseTL, BaseTO)
+#define __ISNAN_M__(ShortTL, BaseTL, BaseTO)
+#define __HYPOT_SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __HYPOT_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __HYPOT_MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __HYPOT_UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __SIZE_M__(ShortTL, BaseTL, BaseTO)
+#define __TYPE_M__(ShortTL, BaseTL, BaseTO)
+#define __INTTYPE_M__(ShortTL, BaseTL, BaseTO)
+#define __IMAG_M__(ShortTL, BaseTL, BaseTO)
+#define __ISSCALAR_M__(ShortTL, BaseTL, BaseTO)
+#define __AND_M__(ShortTL, BaseTL, BaseTO)
+#define __AND_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __OR_M__(ShortTL, BaseTL, BaseTO)
+#define __OR_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __IMULT_M__(ShortTL, BaseTL, BaseTO)
+#define __ISREAL_M__(ShortTL, BaseTL, BaseTO)
+#define __ISREAL_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __ARGN_S__(ShortTL, BaseTL, BaseTO)
+#define __MATRIX_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __MATRIX_MSS__(ShortT1, BaseT1, ShortT2, BaseT2, ShortT3, BaseT3, BaseTO)
+
+#endif // __BASE_FUNCTIONS_MACROS2_H__
diff --git a/scilab/modules/ast/includes/jit/BaseFunctionsMacros3.h b/scilab/modules/ast/includes/jit/BaseFunctionsMacros3.h
new file mode 100644 (file)
index 0000000..191791a
--- /dev/null
@@ -0,0 +1,315 @@
+/*
+ *  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_FUNCTIONS_MACROS3_H__
+#define __BASE_FUNCTIONS_MACROS3_H__
+
+#define DIMS(var) const int64_t var##_r, const int64_t var##_c
+#define I8_S(var) const int8_t var
+#define I16_S(var) const int16_t var
+#define I32_S(var) const int32_t var
+#define I64_S(var) const int64_t var
+#define UI8_S(var) const uint8_t var
+#define UI16_S(var) const uint16_t var
+#define UI32_S(var) const uint32_t var
+#define UI64_S(var) const uint64_t var
+#define DBL_S(var) const double var
+#define CPX_S(var) const double var_re, const double var_im
+#define BOOL_S(var) const int32_t var
+#define I8_M(var) const int8_t * var, DIMS(var)
+#define I16_M(var) const int16_t * var, DIMS(var)
+#define I32_M(var) const int32_t * var, DIMS(var)
+#define I64_M(var) const int64_t * var, DIMS(var)
+#define UI8_M(var) const uint8_t * var, DIMS(var)
+#define UI16_M(var) const uint16_t * var, DIMS(var)
+#define UI32_M(var) const uint32_t * var, DIMS(var)
+#define UI64_M(var) const uint64_t * var, DIMS(var)
+#define DBL_M(var) const double * var, DIMS(var)
+#define CPX_M(var) const double * var_re, const double * var_im, DIMS(var)
+#define BOOL_M(var) const int32_t * var, DIMS(var)
+#define DIMS_O(var) int64_t * var##_r, int64_t * var##_c
+#define I8_S_O(var) int8_t * var
+#define I16_S_O(var) int16_t * var
+#define I32_S_O(var) int32_t * var
+#define I64_S_O(var) int64_t * var
+#define UI8_S_O(var) uint8_t * var
+#define UI16_S_O(var) uint16_t * var
+#define UI32_S_O(var) uint32_t * var
+#define UI64_S_O(var) uint64_t * var
+#define DBL_S_O(var) double * var
+#define CPX_S_O(var) double * var_re, double * var_im
+#define BOOL_S_O(var) int32_t * var
+#define I8_M_O(var) int8_t ** var, DIMS_O(var)
+#define I16_M_O(var) int16_t ** var, DIMS_O(var)
+#define I32_M_O(var) int32_t ** var, DIMS_O(var)
+#define I64_M_O(var) int64_t ** var, DIMS_O(var)
+#define UI8_M_O(var) uint8_t ** var, DIMS_O(var)
+#define UI16_M_O(var) uint16_t ** var, DIMS_O(var)
+#define UI32_M_O(var) uint32_t ** var, DIMS_O(var)
+#define UI64_M_O(var) uint64_t ** var, DIMS_O(var)
+#define DBL_M_O(var) double ** var, DIMS_O(var)
+#define CPX_M_O(var) double ** var_re, double ** var_im, DIMS_O(var)
+#define BOOL_M_O(var) int32_t ** var, DIMS_O(var)
+
+#define __Args_DIMS(var) var##_r, var##_c
+#define __Args_I8_S(var) var
+#define __Args_I16_S(var) var
+#define __Args_I32_S(var) var
+#define __Args_I64_S(var) var
+#define __Args_UI8_S(var) var
+#define __Args_UI16_S(var) var
+#define __Args_UI32_S(var) var
+#define __Args_UI64_S(var) var
+#define __Args_DBL_S(var) var
+#define __Args_CPX_S(var) var_re, var_im
+#define __Args_BOOL_S(var) var
+#define __Args_I8_M(var) var, __Args_DIMS(var)
+#define __Args_I16_M(var) var, __Args_DIMS(var)
+#define __Args_I32_M(var) var, __Args_DIMS(var)
+#define __Args_I64_M(var) var, __Args_DIMS(var)
+#define __Args_UI8_M(var) var, __Args_DIMS(var)
+#define __Args_UI16_M(var) var, __Args_DIMS(var)
+#define __Args_UI32_M(var) var, __Args_DIMS(var)
+#define __Args_UI64_M(var) var, __Args_DIMS(var)
+#define __Args_DBL_M(var) var, __Args_DIMS(var)
+#define __Args_CPX_M(var) var_re, var_im, __Args_DIMS(var)
+#define __Args_BOOL_M(var) var, __Args_DIMS(var)
+#define __Args_I8_S_O(var) var
+#define __Args_I16_S_O(var) var
+#define __Args_I32_S_O(var) var
+#define __Args_I64_S_O(var) var
+#define __Args_UI8_S_O(var) var
+#define __Args_UI16_S_O(var) var
+#define __Args_UI32_S_O(var) var
+#define __Args_UI64_S_O(var) var
+#define __Args_DBL_S_O(var) var
+#define __Args_CPX_S_O(var) var_re, var_im
+#define __Args_BOOL_S_O(var) var
+#define __Args_I8_M_O(var) var, __Args_DIMS(var)
+#define __Args_I16_M_O(var) var, __Args_DIMS(var)
+#define __Args_I32_M_O(var) var, __Args_DIMS(var)
+#define __Args_I64_M_O(var) var, __Args_DIMS(var)
+#define __Args_UI8_M_O(var) var, __Args_DIMS(var)
+#define __Args_UI16_M_O(var) var, __Args_DIMS(var)
+#define __Args_UI32_M_O(var) var, __Args_DIMS(var)
+#define __Args_UI64_M_O(var) var, __Args_DIMS(var)
+#define __Args_DBL_M_O(var) var, __Args_DIMS(var)
+#define __Args_CPX_M_O(var) var_re, var_im, __Args_DIMS(var)
+#define __Args_BOOL_M_O(var) var, __Args_DIMS(var)
+
+#define __VECTORIZE__(NAME, CPPNAME, ShortTL, BaseTL, BaseTO) void NAME##_M##ShortTL(const BaseTL * __restrict__ x, const int64_t x_r, const int64_t x_c, BaseTO ** __restrict__ o) { jit::BaseFunctions::vectorize<BaseTL, BaseTO, CPPNAME>(x, x_r, x_c, o); }
+
+#define __CUMULATE__(NAME, CPPNAME, ShortTL, BaseTL, BaseTO) BaseTL NAME##_M##ShortTL(const BaseTL * x, const int64_t x_r, const int64_t x_c) { return jit::BaseFunctions::cumulate<BaseTL, CPPNAME>(x, x_r, x_c); }
+
+#define __CUMULATEIN__(NAME, CPPNAME, ShortTL, BaseTL, BaseTO) void NAME##_M##ShortTL(const BaseTL * x, const int64_t x_r, const int64_t x_c, BaseTL * o) { jit::BaseFunctions::cumulateIn<BaseTL, CPPNAME>(x, x_r, x_c, o); }
+
+#define __BINARY__SM(NAME, CPPNAME, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) void NAME##_S##ShortTL##M##ShortTR(const BaseTL x, const BaseTR * __restrict__ y, const int64_t y_r, const int64_t y_c, BaseTO ** __restrict__ o) { jit::BaseFunctions::binSM<BaseTL, BaseTR, BaseTO, CPPNAME>(x, y, y_r, y_c, o); }
+
+#define __BINARY__MS(NAME, CPPNAME, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) void NAME##_M##ShortTL##S##ShortTR(const BaseTL * __restrict__ x, const int64_t x_r, const int64_t x_c, const BaseTR y, BaseTO ** __restrict__ o) { jit::BaseFunctions::binMS<BaseTL, BaseTR, BaseTO, CPPNAME>(x, x_r, x_c, y, o); }
+
+#define __BINARY__MM(NAME, CPPNAME, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) void NAME##_M##ShortTL##M##ShortTR(const BaseTL * __restrict__ x, const int64_t x_r, const int64_t x_c, const BaseTR * __restrict__ y, const int64_t y_r, const int64_t y_c, BaseTO ** __restrict__ o) { jit::BaseFunctions::binMM<BaseTL, BaseTR, BaseTO, CPPNAME>(x, x_r, x_c, y, y_r, y_c, o); }
+
+#define __BINARY__UU(NAME, CPPNAME, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) void NAME##_U##ShortTL##U##ShortTR(const BaseTL * __restrict__ x, const int64_t x_r, const int64_t x_c, const BaseTR * __restrict__ y, const int64_t y_r, const int64_t y_c, BaseTO ** __restrict__ o) { jit::BaseFunctions::binUU<BaseTL, BaseTR, BaseTO, CPPNAME>(x, x_r, x_c, y, y_r, y_c, o); }
+
+#define __UNARY__M(NAME, CPPNAME, ShortTL, BaseTL, BaseTO) void NAME##_M##ShortTL(const BaseTL * x, const int64_t x_r, const int64_t x_c, BaseTO ** __restrict__ o) { jit::BaseFunctions::unaryM<BaseTL, BaseTO, CPPNAME>(x, x_r, x_c, o); }
+
+#define __BREAKON__SM(NAME, CPPNAME, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) int32_t breakOn_##NAME##_S##ShortTL##M##ShortTR(const BaseTL x, const BaseTR * __restrict__ y, const int64_t y_r, const int64_t y_c) { return jit::BaseFunctions::breakOnSM<false, BaseTL, BaseTR, CPPNAME>(x, y, y_r, y_c); }
+
+#define __BREAKON__MS(NAME, CPPNAME, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) int32_t breakOn_##NAME##_M##ShortTL##S##ShortTR(const BaseTL * __restrict__ x, const int64_t x_r, const int64_t x_c, const BaseTR y) { return jit::BaseFunctions::breakOnMS<false, BaseTL, BaseTR, CPPNAME>(x, x_r, x_c, y); }
+
+#define __BREAKON__MM(NAME, CPPNAME, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) int32_t breakOn_##NAME##_M##ShortTL##M##ShortTR(const BaseTL * __restrict__ x, const int64_t x_r, const int64_t x_c, const BaseTR * __restrict__ y, const int64_t y_r, const int64_t y_c) { return jit::BaseFunctions::breakOnMM<false, BaseTL, BaseTR, CPPNAME>(x, x_r, x_c, y, y_r, y_c); }
+
+
+#define __BINARY__(NAME, CPPNAME, Mangling, BaseTL, BaseTR, BaseTO) void NAME##_##Mangling(BaseTL(x), BaseTR(y), BaseTO(o)) { jit::BaseFunctions::binSM<BaseTL, BaseTR, BaseTO, CPPNAME>(x, y, y_r, y_c, o); }
+
+#define ______DOTPOWER_____(Mangling, BaseTL, BaseTR, BaseTO) __BINARY__(dotpower, jit::BaseFunctions::pow, Mangling, BaseTL, BaseTR, BaseTO)
+
+
+#define ______ADD_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(add, jit::BaseFunctions::sum, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ADD_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(add, jit::BaseFunctions::sum, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ADD_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(add, jit::BaseFunctions::sum, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ADD_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(add, jit::BaseFunctions::sum, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______SUB_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(sub, jit::BaseFunctions::sub, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______SUB_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(sub, jit::BaseFunctions::sub, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______SUB_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(sub, jit::BaseFunctions::sub, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______SUB_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(sub, jit::BaseFunctions::sub, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______UNARYMINUS_____M__(ShortTL, BaseTL, BaseTO) __UNARY__M(unaryminus, jit::BaseFunctions::opposite, ShortTL, BaseTL, BaseTO)
+
+#define ______TIMES_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(times, jit::BaseFunctions::prod, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______TIMES_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(times, jit::BaseFunctions::prod, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______TIMES_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) void times_M##ShortTL##M##ShortTR(const BaseTL * __restrict__ x, const int64_t x_r, const int64_t x_c, const BaseTR * __restrict__ y, const int64_t y_r, const int64_t y_c, BaseTO ** __restrict__ o) { jit::BaseFunctions::timesMM<BaseTL, BaseTR, BaseTO>(x, x_r, x_c, y, y_r, y_c, o); }
+#define ______TIMES_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) 
+
+#define ______DOTTIMES_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(dottimes, jit::BaseFunctions::prod, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTTIMES_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(dottimes, jit::BaseFunctions::prod, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTTIMES_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(dottimes, jit::BaseFunctions::prod, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTTIMES_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(dottimes, jit::BaseFunctions::prod, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+
+#define ______DOTRDIV_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(dotrdiv, jit::BaseFunctions::rdiv, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTRDIV_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(dotrdiv, jit::BaseFunctions::rdiv, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTRDIV_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(dotrdiv, jit::BaseFunctions::rdiv, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______DOTRDIV_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(dotrdiv, jit::BaseFunctions::rdiv, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______NEQ_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(neq, jit::BaseFunctions::ne, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) 
+#define ______NEQ_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(neq, jit::BaseFunctions::ne, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______NEQ_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(neq, jit::BaseFunctions::ne, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______NEQ_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(neq, jit::BaseFunctions::ne, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______EQ_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(eq, jit::BaseFunctions::eq, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(eq, jit::BaseFunctions::eq, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______EQ_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(eq, jit::BaseFunctions::eq, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)__BREAKON__MS(eq, jit::BaseFunctions::eq, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______EQ_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(eq, jit::BaseFunctions::eq, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(eq, jit::BaseFunctions::eq, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______EQ_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(eq, jit::BaseFunctions::eq, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______LE_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(le, jit::BaseFunctions::le, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(le, jit::BaseFunctions::le, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LE_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(le, jit::BaseFunctions::le, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MS(le, jit::BaseFunctions::le, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LE_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(le, jit::BaseFunctions::le, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(le, jit::BaseFunctions::le, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LE_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(le, jit::BaseFunctions::le, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______GT_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(gt, jit::BaseFunctions::gt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(gt, jit::BaseFunctions::gt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GT_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(gt, jit::BaseFunctions::gt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MS(gt, jit::BaseFunctions::gt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GT_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(gt, jit::BaseFunctions::gt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(gt, jit::BaseFunctions::gt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GT_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(gt, jit::BaseFunctions::gt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______LT_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(lt, jit::BaseFunctions::lt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(lt, jit::BaseFunctions::lt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LT_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(lt, jit::BaseFunctions::lt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MS(lt, jit::BaseFunctions::lt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LT_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(lt, jit::BaseFunctions::lt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(lt, jit::BaseFunctions::lt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LT_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(lt, jit::BaseFunctions::lt, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______GE_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(ge, jit::BaseFunctions::ge, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(ge, jit::BaseFunctions::ge, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GE_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(ge, jit::BaseFunctions::ge, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MS(ge, jit::BaseFunctions::ge, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GE_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(ge, jit::BaseFunctions::ge, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(ge, jit::BaseFunctions::ge, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______GE_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(ge, jit::BaseFunctions::ge, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______AND_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(and, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(and, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______AND_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(and, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MS(and, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______AND_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(and, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(and, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______AND_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(and, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______ANDAND_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(andand, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(andand, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ANDAND_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(andand, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MS(andand, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ANDAND_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(andand, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(andand, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______ANDAND_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(andand, jit::BaseFunctions::booland, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______OR_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(or, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(or, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OR_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(or, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MS(or, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OR_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(or, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(or, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OR_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(or, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______OROR_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__SM(oror, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__SM(oror, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OROR_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MS(oror, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MS(oror, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OROR_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__MM(oror, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BREAKON__MM(oror, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______OROR_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__UU(oror, jit::BaseFunctions::boolor, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+#define ______NOT_____M__(ShortTL, BaseTL, BaseTO) __UNARY__M(not, jit::BaseFunctions::boolneg, ShortTL, BaseTL, BaseTO)
+
+//#define ______TRANSP_____M__(ShortTL, BaseTL, BaseTO) addSymbol(sam, "transp_M_" #ShortTL, jit::BaseFunctions::oTransp<BaseTL>);
+
+#define __ABS_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(abs, jit::BaseFunctions::abs, ShortTL, BaseTL, BaseTO)
+#define __COS_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(cos, std::cos, ShortTL, BaseTL, BaseTO)
+#define __SIN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(sin, std::sin, ShortTL, BaseTL, BaseTO)
+#define __TAN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(tan, std::tan, ShortTL, BaseTL, BaseTO)
+#define __TANH_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(tanh, std::tanh, ShortTL, BaseTL, BaseTO)
+#define __ATAN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(atan, std::atan, ShortTL, BaseTL, BaseTO)
+#define __COSH_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(cosh, std::cosh, ShortTL, BaseTL, BaseTO)
+#define __SINH_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(sinh, std::sinh, ShortTL, BaseTL, BaseTO)
+#define __EXP_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(exp, std::exp, ShortTL, BaseTL, BaseTO)
+#define __ERF_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(erf, std::erf, ShortTL, BaseTL, BaseTO)
+#define __ERFC_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(erfc, std::erfc, ShortTL, BaseTL, BaseTO)
+#define __SIGN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(sign, jit::BaseFunctions::sign, ShortTL, BaseTL, BaseTO)
+#define __GAMMA_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(gamma, std::gamma, ShortTL, BaseTL, BaseTO)
+#define __GAMMALN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(gammaln, std::lgamma, ShortTL, BaseTL, BaseTO)
+#define __CEIL_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(ceil, jit::BaseFunctions::ceil, ShortTL, BaseTL, BaseTO)
+#define __FLOOR_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(floor, jit::BaseFunctions::floor, ShortTL, BaseTL, BaseTO)
+#define __ROUND_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(round, jit::BaseFunctions::round, ShortTL, BaseTL, BaseTO)
+#define __INT_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(int, jit::BaseFunctions::trunc, ShortTL, BaseTL, BaseTO)
+#define __FIX_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(fix, jit::BaseFunctions::trunc, ShortTL, BaseTL, BaseTO)
+#define __INT8_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(int8, jit::BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __INT16_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(int16, jit::BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __INT32_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(int32, jit::BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __INT64_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(int64, jit::BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __UINT8_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(uint8, jit::BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __UINT16_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(uint16, jit::BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __UINT32_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(uint32, jit::BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+#define __UINT64_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(uint64, jit::BaseFunctions::cast, ShortTL, BaseTL, BaseTO)
+//#define __ISINF_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(isinf, tools::isInfinite, ShortTL, BaseTL, BaseTO)
+//#define __ISNAN_M__(ShortTL, BaseTL, BaseTO) __VECTORIZE__(isnan, tools::isNaN, ShortTL, BaseTL, BaseTO)
+#define __MAX_M__(ShortTL, BaseTL, BaseTO) __CUMULATE__(max, jit::BaseFunctions::max, ShortTL, BaseTL, BaseTO)
+#define __MIN_M__(ShortTL, BaseTL, BaseTO) __CUMULATE__(min, jit::BaseFunctions::min, ShortTL, BaseTL, BaseTO)
+#define __SUM_M__(ShortTL, BaseTL, BaseTO) __CUMULATE__(sum, jit::BaseFunctions::sum, ShortTL, BaseTL, BaseTO)
+#define __PROD_M__(ShortTL, BaseTL, BaseTO) __CUMULATE__(prod, jit::BaseFunctions::prod, ShortTL, BaseTL, BaseTO)
+#define __CUMSUM_M__(ShortTL, BaseTL, BaseTO) __CUMULATEIN__(cumsum, jit::BaseFunctions::sum, ShortTL, BaseTL, BaseTO)
+#define __CUMPROD_M__(ShortTL, BaseTL, BaseTO) __CUMULATEIN__(cumprod, jit::BaseFunctions::prod, ShortTL, BaseTL, BaseTO)
+
+// rand is a special call so no need to define it
+#define __RAND_M__(ShortTL, BaseTL, BaseTO)
+
+#define __MODULO_SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(modulo, jit::BaseFunctions::modulo, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __MODULO_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(modulo, jit::BaseFunctions::modulo, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __MODULO_MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(modulo, jit::BaseFunctions::modulo, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __MODULO_UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO) __BINARY__(modulo, jit::BaseFunctions::modulo, ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+
+// NOT IMPLEMENTED FOR NOW !!
+#define ______TRANSP_____M__(ShortTL, BaseTL, BaseTO)
+#define ______DOTTRANSP_____M__(ShortTL, BaseTL, BaseTO)
+#define ______KRONTIMES_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______KRONTIMES_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______KRONTIMES_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______KRONTIMES_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LDIVIDE_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LDIVIDE_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LDIVIDE_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______LDIVIDE_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______RDIVIDE_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______RDIVIDE_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______RDIVIDE_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______RDIVIDE_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______POWER_____SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______POWER_____MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______POWER_____MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define ______POWER_____UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __ZEROS_M__(ShortTL, BaseTL, BaseTO)
+#define __ZEROS_SS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __RAND_M__(ShortTL, BaseTL, BaseTO)
+#define __RAND_SS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __ONES_M__(ShortTL, BaseTL, BaseTO)
+#define __ONES_SS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __ASIN_M__(ShortTL, BaseTL, BaseTO)
+#define __ACOS_M__(ShortTL, BaseTL, BaseTO)
+#define __SQRT_M__(ShortTL, BaseTL, BaseTO)
+#define __LOG_M__(ShortTL, BaseTL, BaseTO)
+#define __SINM_M__(ShortTL, BaseTL, BaseTO)
+#define __ISINF_M__(ShortTL, BaseTL, BaseTO)
+#define __ISNAN_M__(ShortTL, BaseTL, BaseTO)
+#define __HYPOT_SM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __HYPOT_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __HYPOT_MM__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __HYPOT_UU__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __SIZE_M__(ShortTL, BaseTL, BaseTO)
+#define __TYPE_M__(ShortTL, BaseTL, BaseTO)
+#define __INTTYPE_M__(ShortTL, BaseTL, BaseTO)
+#define __IMAG_M__(ShortTL, BaseTL, BaseTO)
+#define __ISSCALAR_M__(ShortTL, BaseTL, BaseTO)
+#define __AND_M__(ShortTL, BaseTL, BaseTO)
+#define __AND_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __OR_M__(ShortTL, BaseTL, BaseTO)
+#define __OR_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __IMULT_M__(ShortTL, BaseTL, BaseTO)
+#define __ISREAL_M__(ShortTL, BaseTL, BaseTO)
+#define __ISREAL_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __ARGN_S__(ShortTL, BaseTL, BaseTO)
+#define __MATRIX_MS__(ShortTL, BaseTL, ShortTR, BaseTR, BaseTO)
+#define __MATRIX_MSS__(ShortT1, BaseT1, ShortT2, BaseT2, ShortT3, BaseT3, BaseTO)
+
+#endif // __BASE_FUNCTIONS_MACROS3_H__
diff --git a/scilab/modules/ast/includes/jit/Cast.hxx b/scilab/modules/ast/includes/jit/Cast.hxx
new file mode 100644 (file)
index 0000000..7349f0f
--- /dev/null
@@ -0,0 +1,271 @@
+/*
+ *  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 __CAST_HXX__
+#define __CAST_HXX__
+
+#include "JITVisitor.hxx"
+
+namespace jit
+{
+
+    class Cast
+    {
+
+    public:
+
+        template<typename T>
+        inline static llvm::Value * cast(llvm::Value * v, const bool sgn, JITVisitor & jit)
+            {
+                return v->getType()->isIntegerTy() ? __Cast<T, std::is_integral<T>::value, true>::get(v, sgn, jit) : __Cast<T, std::is_integral<T>::value, false>::get(v, sgn, jit);
+            }
+
+        /**
+         * Promote value according to Scilab's rules:
+         *  - int_X+int_Y => int_max(X,Y)
+         *  - uint_X+int_Y => uint_max(X,Y)
+         *  - int_X+uint_Y => uint_max(X,Y)
+         *  - uint_X+uint_Y => uint_max(X,Y)
+         *  - double+(u)int_X => (u)int_X
+         */
+        inline static void promoteScilabValue(const bool lsign, llvm::Value *& l, const bool rsign, llvm::Value *& r, llvm::IRBuilder<> & builder)
+            {
+                llvm::Type * lt = l->getType();
+                llvm::Type * rt = r->getType();
+
+                if (lt != rt)
+                {
+                    if (lt->isIntegerTy())
+                    {
+                        if (rt->isIntegerTy())
+                        {
+                            if (lt->getIntegerBitWidth() > rt->getIntegerBitWidth())
+                            {
+                                r = rsign ? builder.CreateSExt(r, lt) : builder.CreateZExt(r, lt);
+                            }
+                            else
+                            {
+                                l = lsign ? builder.CreateSExt(l, rt) : builder.CreateZExt(l, rt);
+                            }
+                        }
+                        else
+                        {
+                            r = lsign ? builder.CreateFPToSI(r, lt) : builder.CreateFPToUI(r, lt);
+                        }
+                    }
+                    else
+                    {
+                        if (rt->isIntegerTy())
+                        {
+                            l = rsign ? builder.CreateFPToSI(l, rt) : builder.CreateFPToUI(l, rt);
+                        }
+                        else
+                        {
+                            if (lt->getPrimitiveSizeInBits() > rt->getPrimitiveSizeInBits())
+                            {
+                                r = builder.CreateFPExt(r, lt);
+                            }
+                            else
+                            {
+                                l = builder.CreateFPExt(l, rt);
+                            }
+                        }
+                    }
+                }
+            }
+
+       inline static void castInt64(llvm::Value *& v, JITVisitor & jit)
+           {
+               if (v->getType() == jit.getTy<int64_t>())
+               {
+                   v = jit.getBuilder().CreateUIToFP(v, jit.getTy<double>());
+               }
+           }
+
+       inline static void castInt1(llvm::Value *& v, JITVisitor & jit)
+           {
+               if (v->getType() == jit.getTy<bool>())
+               {
+                   v = jit.getBuilder().CreateZExt(v, jit.getTy<int32_t>());
+               }
+           }
+
+    private:
+
+        // First bool is for if typename is integral
+        // Second is for if v is integral
+        template<typename, bool, bool>
+        struct __Cast
+        {
+            inline static llvm::Value * get(llvm::Value * v, JITVisitor & jit);
+        };
+
+        template<typename T>
+        struct __Cast<T, true, true>
+        {
+            inline static llvm::Value * get(llvm::Value * v, const bool sgn, JITVisitor & jit)
+                {
+                    return jit.getBuilder().CreateIntCast(v, jit.getTy<T>(), std::is_signed<T>::value);
+                }
+        };
+
+        template<typename T>
+        struct __Cast<T, true, false>
+        {
+            inline static llvm::Value * get(llvm::Value * v, const bool sgn, JITVisitor & jit)
+                {
+                    // Workaround for bug: http://llvm.org/bugs/show_bug.cgi?id=21130
+                    // TODO: remove it when it will be fixed in llvm trunk
+                    llvm::Type * ty = jit.getTy<int64_t>();
+                    llvm::Value * i = std::is_signed<T>::value ? jit.getBuilder().CreateFPToSI(v, ty) : jit.getBuilder().CreateFPToUI(v, ty);
+                    return jit.getBuilder().CreateIntCast(i, jit.getTy<T>(), std::is_signed<T>::value);
+                }
+        };
+
+        template<typename T>
+        struct __Cast<T, false, true>
+        {
+            inline static llvm::Value * get(llvm::Value * v, const bool sgn, JITVisitor & jit)
+                {
+                    return sgn ? jit.getBuilder().CreateSIToFP(v, jit.getTy<T>()) : jit.getBuilder().CreateUIToFP(v, jit.getTy<T>());
+                }
+        };
+
+        template<typename T>
+        struct __Cast<T, false, false>
+        {
+            inline static llvm::Value * get(llvm::Value * v, const bool sgn, JITVisitor & jit)
+                {
+                    return jit.getBuilder().CreateFPCast(v, jit.getTy<T>());
+                }
+        };
+
+    };
+
+    // try to find the Scilab type in operation
+    template<bool, bool, typename, typename>
+    struct __ScilabType_Helper;
+
+    template<bool, typename, typename>
+    struct __ScilabTypeII_Helper;
+
+    template<bool, typename, typename>
+    struct __GreaterType_Helper;
+
+    template<typename, typename>
+    struct __GreaterType;
+
+    template<typename T, typename U>
+    struct __GreaterType_Helper<true, T, U>
+    {
+        typedef T type;
+    };
+
+    template<typename T, typename U>
+    struct __GreaterType_Helper<false, T, U>
+    {
+        typedef U type;
+    };
+
+    template<typename T, typename U>
+    struct __GreaterType
+    {
+        typedef typename __GreaterType_Helper<sizeof(T) >= sizeof(U), T, U>::type type;
+    };
+
+    template<typename T, typename U>
+    struct __ScilabTypeII_Helper<true, T, U>
+    {
+        typedef typename std::make_unsigned<typename __GreaterType<T, U>::type>::type type;
+    };
+
+    template<typename T, typename U>
+    struct __ScilabTypeII_Helper<false, T, U>
+    {
+        typedef typename __GreaterType<T, U>::type type;
+    };
+
+    template<typename T, typename U>
+    struct __ScilabTypeII
+    {
+        typedef typename __ScilabTypeII_Helper<std::is_unsigned<T>::value || std::is_unsigned<U>::value, T, U>::type type;
+    };
+
+    template<typename T, typename U>
+    struct __ScilabType_Helper<true, true, T, U>
+    {
+        typedef typename __ScilabTypeII<T, U>::type type;
+    };
+
+    template<typename U>
+    struct __ScilabType_Helper<true, true, bool, U>
+    {
+        typedef U type;
+    };
+
+    template<typename T>
+    struct __ScilabType_Helper<true, true, T, bool>
+    {
+        typedef T type;
+    };
+
+    template<>
+    struct __ScilabType_Helper<true, true, bool, bool>
+    {
+        typedef bool type;
+    };
+
+    template<typename T, typename U>
+    struct __ScilabType_Helper<true, false, T, U>
+    {
+        typedef T type;
+    };
+
+    template<typename U>
+    struct __ScilabType_Helper<true, false, bool, U>
+    {
+        typedef U type;
+    };
+
+    template<typename T, typename U>
+    struct __ScilabType_Helper<false, true, T, U>
+    {
+        typedef U type;
+    };
+
+    template<typename T>
+    struct __ScilabType_Helper<false, true, T, bool>
+    {
+        typedef T type;
+    };
+
+    template<typename T, typename U>
+    struct __ScilabType_Helper<false, false, T, U>
+    {
+        typedef T type;
+    };
+
+    template<typename T, typename U>
+    struct ScilabType
+    {
+        typedef typename __ScilabType_Helper<std::is_integral<T>::value, std::is_integral<U>::value, T, U>::type type;
+    };
+
+    template<typename T>
+    struct is_pure_integral
+    {
+       const static bool value = std::is_integral<T>::value && !std::is_same<T, bool>::value;
+    };
+
+} // namespace jit
+
+#endif // __CAST_HXX__
diff --git a/scilab/modules/ast/includes/jit/Disassembler.hxx b/scilab/modules/ast/includes/jit/Disassembler.hxx
new file mode 100644 (file)
index 0000000..59f7bb1
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ *  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 __DISASSEMBLER_HXX__
+#define __DISASSEMBLER_HXX__
+
+
+namespace jit
+{
+
+    class Disassembler
+    {
+
+       const llvm::MCDisassembler;
+       
+    public:
+
+       Disassembler(const Target & target, const std::string & triple, MCSubtargetInfo & STI)
+           {
+               target.createMCDisassembler(STI);
+               // TODO: on verra ca plus tard
+               
+           }
+
+       
+
+int Disassembler::disassemble(const Target &T,
+                              const std::string &Triple,
+                              MCSubtargetInfo &STI,
+                              MCStreamer &Streamer,
+                              MemoryBuffer &Buffer,
+                              SourceMgr &SM,
+                              raw_ostream &Out) {
+       
+    };
+       
+}
+
+#endif // __DISASSEMBLER_HXX__
diff --git a/scilab/modules/ast/includes/jit/JITArrayof.hxx b/scilab/modules/ast/includes/jit/JITArrayof.hxx
new file mode 100644 (file)
index 0000000..6670591
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+ *  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_ARRAYOF_HXX__
+#define __JIT_ARRAYOF_HXX__
+
+#include <cassert>
+
+#include "internal.hxx"
+#include "JITVisitor.hxx"
+#include "JITScilabVal.hxx"
+
+namespace jit
+{
+    class JITArrayof : public JITScilabVal
+    {
+
+    protected:
+       
+       llvm::Value * rows;
+       llvm::Value * cols;
+       llvm::Value * refCount;
+       llvm::Value * data;
+
+    public:
+
+       JITArrayof() : data(nullptr) { }
+       
+       JITArrayof(llvm::Value * const _data, llvm::Value * const _rows, llvm::Value * const _cols, llvm::Value * const _refCount, const std::string & name) : rows(_rows), cols(_cols), refCount(_refCount), data(_data)
+           {
+               if (!name.empty())
+               {
+                   rows->setName(name + "_r");
+                   cols->setName(name + "_c");
+                   refCount->setName(name + "_rc");
+                   data->setName(name);
+               }
+           }
+       
+       JITArrayof(JITVisitor & jit, llvm::Value * const _data, llvm::Value * const _rows, llvm::Value * const _cols, llvm::Value * const _refCount, const std::string & name) : JITArrayof(jit.getAlloca(_data), jit.getAlloca(_rows), jit.getAlloca(_cols), jit.getAlloca(_refCount), name) { }
+
+       JITArrayof(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.getValue(_data, alloc), jit.getValue(_rows, alloc), jit.getValue(_cols, alloc), jit.getValue(_refCount, alloc), name) { }
+
+       bool isValid() const override
+           { 
+               return data != nullptr;
+           }
+
+       llvm::Value * loadRows(JITVisitor & jit) const override
+           {
+               return jit.getBuilder().CreateAlignedLoad(rows, sizeof(int64_t));
+           }
+
+       llvm::Value * loadCols(JITVisitor & jit) const override
+           {
+               return jit.getBuilder().CreateAlignedLoad(cols, sizeof(int64_t));
+           }
+       
+       llvm::Value * getRows(JITVisitor & jit) const override
+           {
+               return rows;
+           }
+
+       llvm::Value * getCols(JITVisitor & jit) const override
+           {
+               return cols;
+           }
+
+       void setRefCount(llvm::Value * _refCount) override
+           {
+               refCount = _refCount;
+           }
+       
+       void setData(llvm::Value * _data) override
+           {
+               data = _data;
+           }
+
+       void setRows(llvm::Value * _rows) override
+           {
+               rows = _rows;
+           }
+
+       void setCols(llvm::Value * _cols) override
+           {
+               cols = _cols;
+           }
+
+       void storeRows(JITVisitor & jit, llvm::Value * _rows) override
+           {
+               jit.getBuilder().CreateAlignedStore(_rows, rows, sizeof(int64_t));
+           }
+
+       void storeCols(JITVisitor & jit, llvm::Value * _cols) override
+           {
+               jit.getBuilder().CreateAlignedStore(_cols, cols, sizeof(int64_t));
+           }
+
+       bool isScalar() const override
+           {
+               return false;
+           }
+
+       llvm::Value * getData(JITVisitor & jit) const override
+           {
+               return data;
+           }
+       
+       llvm::Value * loadData(JITVisitor & jit) override
+           {
+               return jit.getBuilder().CreateAlignedLoad(data, sizeof(void *));
+           }
+       
+       void storeData(JITVisitor & jit, llvm::Value * _data) override
+           {
+               jit.getBuilder().CreateAlignedStore(_data, data, sizeof(void *));
+           }
+
+       /*types::InternalType::ScilabId getScilabId() const override
+           {
+
+           }
+
+       void setScilabId(const types::InternalType::ScilabId id) override
+           {
+               
+           }
+       */
+
+       llvm::Value * getRefCount(JITVisitor & jit) const override
+           {
+               return refCount;
+               //return refCount.load(jit);
+           }
+       
+       llvm::Value * loadRefCount(JITVisitor & jit) const override
+           {
+               return nullptr;
+               //return refCount.load(jit);
+           }
+
+       void incRefCount(JITVisitor & jit) override
+           {
+               /*llvm::Value * rc_i64 = refCount.load(jit);
+               llvm::Value * rcp1_i64 = jit.getBuilder().CreateNSWAdd(rc_i64, jit.getConstant<int64_t>(1));
+               refCount.store(jit, rcp1_i64);*/
+           }
+       
+       void decRefCount(JITVisitor & jit) override
+           {
+               /*llvm::Value * rc_i64 = refCount.load(jit);
+               llvm::Value * rcp1_i64 = jit.getBuilder().CreateNSWSub(rc_i64, jit.getConstant<int64_t>(1));
+               refCount.store(jit, rcp1_i64);*/
+           }
+    };
+}
+
+#endif // __JIT_ARRAYOF_HXX__
diff --git a/scilab/modules/ast/includes/jit/JITArrayofs.hxx b/scilab/modules/ast/includes/jit/JITArrayofs.hxx
new file mode 100644 (file)
index 0000000..8f37fe1
--- /dev/null
@@ -0,0 +1,127 @@
+/*
+ *  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_ARRAYOFS_HXX__
+#define __JIT_ARRAYOFS_HXX__
+
+#include <complex>
+
+#include "internal.hxx"
+#include "JITVisitor.hxx"
+#include "JITArrayof.hxx"
+
+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(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 bool alloc, const std::string & name) : JITArrayof(jit, data, rows, cols, refCount, alloc, name) { }
+       
+       virtual ~JITArrayofT() { }
+
+       bool isSigned() const override
+           {
+               return std::is_integral<T>::value && std::is_signed<T>::value;
+           }
+
+    };
+
+    typedef JITArrayofT<double> JITArrayofDouble;
+    typedef JITArrayofT<int8_t> JITArrayofInt8;
+    typedef JITArrayofT<int16_t> JITArrayofInt16;
+    typedef JITArrayofT<int32_t> JITArrayofInt32;
+    typedef JITArrayofT<int64_t> JITArrayofInt64;
+    typedef JITArrayofT<uint8_t> JITArrayofUInt8;
+    typedef JITArrayofT<uint16_t> JITArrayofUInt16;
+    typedef JITArrayofT<uint32_t> JITArrayofUInt32;
+    typedef JITArrayofT<uint64_t> JITArrayofUInt64;
+    typedef JITArrayofT<int32_t> JITArrayofBool;
+    typedef JITArrayofT<wchar_t> JITArrayofString;
+
+    class JITArrayofComplex : public JITArrayof
+    {
+
+       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;
+
+    };
+    
+}
+
+#endif // __JIT_ARRAYOFS_HXX__
diff --git a/scilab/modules/ast/includes/jit/JITScalar.hxx b/scilab/modules/ast/includes/jit/JITScalar.hxx
new file mode 100644 (file)
index 0000000..66fb246
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+ *  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_SCALAR_HXX__
+#define __JIT_SCALAR_HXX__
+
+#include "JITVisitor.hxx"
+#include "JITScilabVal.hxx"
+#include "Cast.hxx"
+
+namespace jit
+{
+    class JITScalar : public JITScilabVal
+    {
+
+    protected:
+       
+        llvm::Value * data;
+        bool allocated;
+
+    public:
+
+       JITScalar() : data(nullptr) { }
+       
+        JITScalar(llvm::Value * _data, const bool _allocated, const std::string & name) : data(_data), allocated(_allocated)
+            {
+               if (!name.empty())
+               {
+                   data->setName(name);
+               }
+           }
+
+       bool isValid() const override
+           { 
+               return data != nullptr;
+           }
+       
+        llvm::Value * loadRows(JITVisitor & jit) const override
+            {
+                return nullptr;
+            }
+
+        llvm::Value * loadCols(JITVisitor & jit) const override
+            {
+                return nullptr;
+            }
+
+        llvm::Value * getRows(JITVisitor & jit) const override
+            {
+                return nullptr;
+            }
+
+        llvm::Value * getCols(JITVisitor & jit) const override
+            {
+                return nullptr;
+            }
+
+       void setRefCount(llvm::Value * _refCount) override
+           {
+           }
+       
+       void setData(llvm::Value * _data) override
+           {
+               data = _data;
+           }
+
+       void setRows(llvm::Value * _rows) override
+           {
+           }
+
+       void setCols(llvm::Value * _cols) override
+           {
+           }
+
+        void storeRows(JITVisitor & jit, llvm::Value * rows) override
+            {
+
+            }
+
+        void storeCols(JITVisitor & jit, llvm::Value * cols) override
+            {
+
+            }
+
+        bool isScalar() const override
+            {
+                return true;
+            }
+
+        llvm::Value * loadData(JITVisitor & jit) override
+            {
+                if (allocated)
+                {
+                    return jit.getBuilder().CreateAlignedLoad(data, jit.getTySizeInBytes(data));
+                }
+                else
+                {
+                    return data;
+                }
+            }
+
+        llvm::Value * getData(JITVisitor & jit) const override
+            {
+                return data;
+            }
+
+        void storeData(JITVisitor & jit, llvm::Value * _data) override
+            {
+                if (allocated)
+                {
+                    jit.getBuilder().CreateAlignedStore(_data, data, jit.getTySizeInBytes(data));
+                }
+                else
+                {
+                    assert(false && "storeData mustn't be called");
+                }
+            }
+
+        /*types::InternalType::ScilabId getScilabId() const override
+          {
+
+          }
+
+          void setScilabId(const types::InternalType::ScilabId id) override
+          {
+
+          }
+        */
+
+        llvm::Value * loadRefCount(JITVisitor & jit) const override
+            {
+                return nullptr;
+            }
+
+        llvm::Value * getRefCount(JITVisitor & jit) const override
+            {
+                return nullptr;
+            }
+
+        void incRefCount(JITVisitor & jit) override
+            {
+
+            }
+
+        void decRefCount(JITVisitor & jit) override
+            {
+
+            }
+    };
+}
+
+#endif // __JIT_SCALAR_HXX__
diff --git a/scilab/modules/ast/includes/jit/JITScalars.hxx b/scilab/modules/ast/includes/jit/JITScalars.hxx
new file mode 100644 (file)
index 0000000..d1754e2
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ *  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_SCALARS_HXX__
+#define __JIT_SCALARS_HXX__
+
+#include <complex>
+
+#include "internal.hxx"
+#include "JITVisitor.hxx"
+#include "JITScalar.hxx"
+
+namespace jit
+{
+
+    template<typename T>
+    class JITScalT : public JITScalar
+    {
+       
+    public:
+
+       JITScalT(JITVisitor & jit, const std::string & name) : JITScalar(jit.getAlloca<T>(), true, name) { }
+
+       JITScalT(JITVisitor & jit, const T value, const bool alloc, const std::string & name) : JITScalar(jit.getValue(value, alloc), alloc, name) { }
+       
+       JITScalT(JITVisitor & jit, llvm::Value * const data, const bool alloc, const std::string & name) : JITScalar(jit.getValue(data, alloc, name), alloc, name) { }
+
+       JITScalT(llvm::Value * const data, const bool alloc = false, const std::string & name = "") : JITScalar(data, alloc, name) { }
+
+       virtual ~JITScalT() { }
+
+       bool isSigned() const override
+           {
+               return std::is_integral<T>::value && std::is_signed<T>::value;
+           }
+    };
+
+    typedef JITScalT<double> JITScalDouble;
+    typedef JITScalT<int8_t> JITScalInt8;
+    typedef JITScalT<int16_t> JITScalInt16;
+    typedef JITScalT<int32_t> JITScalInt32;
+    typedef JITScalT<int64_t> JITScalInt64;
+    typedef JITScalT<uint8_t> JITScalUInt8;
+    typedef JITScalT<uint16_t> JITScalUInt16;
+    typedef JITScalT<uint32_t> JITScalUInt32;
+    typedef JITScalT<uint64_t> JITScalUInt64;
+    typedef JITScalT<int32_t> JITScalBool;
+    typedef JITScalT<wchar_t> JITScalString;
+
+    class JITScalComplex : public JITScalar
+    {
+
+       llvm::Value * imag;
+       
+    public:
+
+       JITScalComplex() : JITScalar() { }
+       
+       JITScalComplex(JITVisitor & jit, const std::string & name) : JITScalar(jit.getAlloca<double>(), true, name + "_re"), imag(jit.getAlloca<double>(name + "_im"))
+           {
+           }
+
+       JITScalComplex(JITVisitor & jit, const std::complex<double> value, const bool alloc, const std::string & name) : JITScalar(jit.getValue(value.real(), alloc), alloc, name), imag(jit.getValue(value.imag(), alloc))
+           {
+               if (!name.empty())
+               {
+                   imag->setName(name);
+               }
+           }
+       
+       JITScalComplex(JITVisitor & jit, llvm::Value * const _real, llvm::Value * const _imag, const bool alloc, const std::string & name) : JITScalar(jit.getValue(_real, alloc, name), alloc, name), imag(jit.getValue(_imag, alloc, name))
+           {
+               if (!name.empty())
+               {
+                   imag->setName(name);
+               }
+           }
+
+       JITScalComplex(llvm::Value * const _real, llvm::Value * const _imag, const bool alloc = false, const std::string & name = "") : JITScalar(_real, alloc, name), imag(_imag)
+           {
+               if (!name.empty())
+               {
+                   imag->setName(name);
+               }
+           }
+
+       virtual ~JITScalComplex() { }
+
+       bool isSigned() const override { return false; }
+
+       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;
+       
+       static llvm::Type * getCpx128Ty(JITVisitor & jit);
+    };
+}
+
+#endif // __JIT_SCALARS_HXX__
diff --git a/scilab/modules/ast/includes/jit/JITScilabVal.hxx b/scilab/modules/ast/includes/jit/JITScilabVal.hxx
new file mode 100644 (file)
index 0000000..20a9bf2
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ *  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_SCILAB_VAL_HXX__
+#define __JIT_SCILAB_VAL_HXX__
+
+#include "internal.hxx"
+#include "JITVisitor.hxx"
+//#include "JITVal.hxx"
+
+namespace jit
+{
+    class JITScilabVal
+    {
+
+    public:
+
+       virtual ~JITScilabVal() { }
+       
+       virtual bool isValid() const = 0;
+       virtual llvm::Value * getRows(JITVisitor & jit) const = 0;
+       virtual llvm::Value * getCols(JITVisitor & jit) const = 0;
+       virtual llvm::Value * loadRows(JITVisitor & jit) const = 0;
+       virtual llvm::Value * loadCols(JITVisitor & jit) const = 0;
+       virtual void setData(llvm::Value * data) = 0;
+       virtual void setRows(llvm::Value * rows) = 0;
+       virtual void setCols(llvm::Value * cols) = 0;
+       virtual void setRefCount(llvm::Value * refCount) = 0;
+       virtual void storeRows(JITVisitor & jit, llvm::Value * rows) = 0;
+       virtual void storeCols(JITVisitor & jit, llvm::Value * cols) = 0;
+       virtual bool isScalar() const = 0;
+       virtual llvm::Value * getData(JITVisitor & jit) const = 0;
+       virtual llvm::Value * getReal(JITVisitor & jit) const { return getData(jit); }
+       virtual llvm::Value * getImag(JITVisitor & jit) const { return nullptr; }
+       virtual llvm::Value * loadData(JITVisitor & jit) = 0;
+       virtual llvm::Value * loadReal(JITVisitor & jit) { return loadData(jit); }
+       virtual llvm::Value * loadImag(JITVisitor & jit) { return nullptr; }
+       virtual std::pair<llvm::Value *, llvm::Value *> loadReIm(JITVisitor & jit) { return std::pair<llvm::Value *, llvm::Value *>(nullptr, nullptr); }
+       virtual void storeData(JITVisitor & jit, llvm::Value * data) = 0;
+       virtual void storeReal(JITVisitor & jit, llvm::Value * real) { storeData(jit, real); }
+       virtual void storeImag(JITVisitor & jit, llvm::Value * imag) { }
+       virtual void storeReIm(JITVisitor & jit, std::pair<llvm::Value *, llvm::Value *> imag) { }
+       virtual void setReal(llvm::Value * real) { setData(real); }
+       virtual void setImag(llvm::Value * imag) { }
+       //virtual types::InternalType::ScilabId getScilabId() const = 0;
+       //virtual void setScilabId(const types::InternalType::ScilabId id) = 0;
+       virtual llvm::Value * getRefCount(JITVisitor & jit) const = 0;
+       virtual llvm::Value * loadRefCount(JITVisitor & jit) const = 0;
+       virtual void incRefCount(JITVisitor & jit) = 0;
+       virtual void decRefCount(JITVisitor & jit) = 0;
+       virtual bool isSigned() const = 0;
+    };
+
+}
+
+#endif // __JIT_SCILAB_VAL_HXX__
diff --git a/scilab/modules/ast/includes/jit/JITVal.hxx b/scilab/modules/ast/includes/jit/JITVal.hxx
new file mode 100644 (file)
index 0000000..f073c0b
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ *  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_VAL_HXX__
+#define __JIT_VAL_HXX__
+
+#include <cassert>
+
+#include "llvm/ExecutionEngine/GenericValue.h"
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/LLVMContext.h"
+#include "llvm/IR/IRBuilder.h"
+
+#include "internal.hxx"
+#include "JITVisitor.hxx"
+#include "TIType.hxx"
+
+namespace jit
+{
+    class JITVal
+    {
+
+       llvm::Value * const value;
+       const bool alloc;
+       const bool issigned;
+
+       JITVal(llvm::Value * const _value, const bool _alloc, const bool _issigned) : value(_value), alloc(_alloc), issigned(_issigned) { }
+
+    public:
+
+       inline llvm::Type * getType() const
+           {
+               return value->getType();
+           }
+
+       inline llvm::Value * getValue() const
+           {
+               return value;
+           }
+
+       inline bool isSigned() const
+           {
+               return issigned;
+           }
+
+       inline void store(JITVisitor & jit, const JITVal & var)
+           {
+               store(jit, var.load(jit));
+           }
+
+       inline void store(JITVisitor & jit, llvm::Value * _value)
+           {
+               if (alloc)
+               {
+                   jit.getBuilder().CreateStore(_value, value);
+               }
+               else
+               {
+                   assert(false && "Cannot store a value");
+               }
+           }
+       
+       inline llvm::Value * load(JITVisitor & jit) const
+           {
+               if (alloc)
+               {
+                   return jit.getBuilder().CreateLoad(value);
+               }
+               else
+               {
+                   return value;
+               }
+           }
+
+       template<typename T>
+       inline static JITVal getAlloc(JITVisitor & jit, const std::string & name = "")
+           {
+               llvm::AllocaInst * alloca = jit.getBuilder().CreateAlloca(jit.getTy<T>(), nullptr, name);
+               alloca->setAlignment(jit.getTySizeInBytes<T>());
+               
+               return JITVal(alloca, true, std::is_integral<T>::value && std::is_signed<T>::value);
+           }
+
+       template<typename T>
+       inline static JITVal getAlloc(JITVisitor & jit, const T val, const std::string & name = "")
+           {
+               llvm::AllocaInst * alloca = jit.getBuilder().CreateAlloca(jit.getTy<T>(), nullptr, name);
+               alloca->setAlignment(sizeof(T));
+               builder.CreateAlignedStore(jit.getConstant<T>(val), alloca, sizeof(T));
+               
+               return JITVal(alloca, true, std::is_integral<T>::value && std::is_signed<T>::value);
+           }
+
+       template<typename T>
+       inline static JITVal get(JITVisitor & jit, const T val, const std::string & name = "")
+           {
+               return JITVal(jit.getConstant<T>(val, name), false, std::is_integral<T>::value && std::is_signed<T>::value);
+           }
+
+    };
+
+} // namespace jit
+
+#endif // __JIT_VAL_HXX__
diff --git a/scilab/modules/ast/includes/jit/JITValues.hxx b/scilab/modules/ast/includes/jit/JITValues.hxx
deleted file mode 100644 (file)
index 9a702a0..0000000
+++ /dev/null
@@ -1,296 +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 __JIT_VALUES_HXX__
-#define __JIT_VALUES_HXX__
-
-#include "llvm/ExecutionEngine/GenericValue.h"
-#include "llvm/IR/Instructions.h"
-#include "llvm/IR/LLVMContext.h"
-#include "llvm/IR/IRBuilder.h"
-
-#include "internal.hxx"
-#include "JITVisitor.hxx"
-#include "TIType.hxx"
-
-namespace jit
-{
-class JITVal
-{
-
-public:
-
-    JITVal(llvm::Value * _val, llvm::Type * _type) : val(_val), type(_type) { }
-
-    virtual bool is_scalar() const = 0;
-    virtual int get_type_size() const = 0;
-    virtual types::InternalType::ScilabId get_scilab_id() const = 0;
-    virtual void store(llvm::Value * x, JITVisitor & visitor) const = 0;
-    virtual void store(llvm::Value * x, llvm::Value * free, JITVisitor & visitor) const = 0;
-    virtual void storeR(llvm::Value * _r, JITVisitor & visitor) const = 0;
-    virtual void storeC(llvm::Value * _c, JITVisitor & visitor) const = 0;
-    virtual llvm::Value * load(JITVisitor & visitor) const = 0;
-    virtual llvm::Value * loadR(JITVisitor & visitor) const = 0;
-    virtual llvm::Value * loadC(JITVisitor & visitor) const = 0;
-    virtual llvm::Value * getR() const = 0;
-    virtual llvm::Value * getC() const = 0;
-    virtual llvm::Value * get_must_free() const = 0;
-    virtual void free() = 0;
-
-    inline llvm::Value * get_value() const
-    {
-        return val;
-    }
-
-    inline llvm::Type * get_type() const
-    {
-        return type;
-    }
-
-    inline bool is_null() const
-    {
-        return !val;
-    }
-
-    void store(JITVal & x, JITVisitor & visitor) const
-    {
-        if (is_scalar())
-        {
-            store(x.val, visitor);
-        }
-        else
-        {
-            store(x.val, x.get_must_free(), visitor);
-            storeR(x.getR(), visitor);
-            storeC(x.getC(), visitor);
-        }
-    }
-
-    static JITVal * get(JITVisitor & visitor, types::InternalType * const pIT, const bool alloc = false, const std::string & name = "");
-    static JITVal * get(JITVisitor & visitor, const analysis::TIType & t, const bool alloc = false, const std::string & name = "");
-
-protected:
-
-    llvm::Value * val;
-    llvm::Type * type;
-
-    template<typename T>
-    inline static llvm::Value * load(llvm::Value * v, bool _scalar, llvm::IRBuilder<> & builder)
-    {
-        if (llvm::isa<llvm::AllocaInst>(v))
-        {
-            return builder.CreateAlignedLoad(llvm::cast<llvm::AllocaInst>(v), _scalar ? sizeof(T) : sizeof(T *));
-        }
-
-        return v;
-    }
-
-    template<typename T>
-    inline static void store(llvm::Value * v, llvm::Value * x, bool _scalar, llvm::IRBuilder<> & builder)
-    {
-        if (llvm::isa<llvm::AllocaInst>(v))
-        {
-            llvm::Value * _x = llvm::isa<llvm::AllocaInst>(x) ? builder.CreateAlignedLoad(llvm::cast<llvm::AllocaInst>(x), sizeof(T)) : x;
-
-            builder.CreateAlignedStore(_x, llvm::cast<llvm::AllocaInst>(v), _scalar ? sizeof(T) : sizeof(T *));
-        }
-        else
-        {
-            throw ast::InternalError("Scilab: Cannot store a value !");
-        }
-    }
-};
-
-template<typename T>
-class JITScalarVal : public JITVal
-{
-public:
-
-    JITScalarVal(JITVisitor & visitor, T _val, bool alloc = false, const std::string & name = "") : JITVal(alloc ? visitor.getAlloca(_val, name) : visitor.getConstant(_val), getLLVMTy<T>(visitor.getContext())) { }
-
-    JITScalarVal(JITVisitor & visitor, JITVal * _val, const std::string & name = "") : JITVal(visitor.getAlloca(_val->get_value(), _val->get_type(), _val->get_type_size(), name), _val->get_type()) { }
-
-    JITScalarVal(JITVisitor & visitor, llvm::Value * _val) : JITVal(_val, getLLVMTy<T>(visitor.getContext())) { }
-
-    inline bool is_scalar() const
-    {
-        return true;
-    }
-
-    inline int get_type_size() const
-    {
-        return sizeof(T);
-    }
-
-    inline types::InternalType::ScilabId get_scilab_id() const
-    {
-        return types::InternalType::IdScalarDouble;
-    }
-
-    inline void store(llvm::Value * x, JITVisitor & visitor) const
-    {
-        JITVal::store<T>(this->val, x, true, visitor.getBuilder());
-    }
-
-    inline void store(llvm::Value * x, llvm::Value * free, JITVisitor & visitor) const { }
-
-    inline void storeR(llvm::Value * _r, JITVisitor & visitor) const { }
-    inline void storeC(llvm::Value * _c, JITVisitor & visitor) const { }
-
-    llvm::Value * load(JITVisitor & visitor) const
-    {
-        return JITVal::load<T>(val, true, visitor.getBuilder());
-    }
-
-    inline llvm::Value * loadR(JITVisitor & visitor) const
-    {
-        return JITVisitor::ONE;
-    }
-    inline llvm::Value * loadC(JITVisitor & visitor) const
-    {
-        return JITVisitor::ONE;
-    }
-
-    inline llvm::Value * getR() const
-    {
-        return nullptr;
-    }
-    inline llvm::Value * getC() const
-    {
-        return nullptr;
-    }
-
-
-    inline llvm::Value * get_must_free() const
-    {
-        return nullptr;
-    }
-
-    inline void free() { }
-};
-
-template<typename T>
-class JITMatrixVal : public JITVal
-{
-    llvm::Value * r;
-    llvm::Value * c;
-    llvm::Value * must_be_freed;
-
-public:
-
-    JITMatrixVal(JITVisitor & visitor, const int _r, const int _c, T * _val, const bool alloc = false, const std::string & name = "") : JITVal(alloc ? visitor.getAllocaPtr(_val, name) : visitor.getConstantPtr(_val), getLLVMTy<T * >(visitor.getContext())),
-        r(alloc ? visitor.getAlloca(_r, name + "_row") : visitor.getConstant(_r)),
-        c(alloc ? visitor.getAlloca(_c, name + "_col") : visitor.getConstant(_c)),
-        must_be_freed(alloc ? visitor.getAlloca<bool>(false, name + "_MBF") : visitor.getConstant(false))
-    {
-    }
-
-    JITMatrixVal(JITVisitor & visitor, llvm::Value * _r, llvm::Value * _c, llvm::Value * _val) : JITVal(/*visitor.getAllocaPtr<T>(_val)*/_val, getLLVMTy<T * >(visitor.getContext())), r(_r), c(_c), must_be_freed(visitor.getConstant(true/*visitor.getAlloca<bool>(true, "must_be_freed_t")*/))
-    {
-    }
-
-    inline llvm::Value * get_must_free() const
-    {
-        return must_be_freed;
-    }
-
-    inline void free() { }
-
-    inline bool is_scalar() const
-    {
-        return false;
-    }
-
-    inline int get_type_size() const
-    {
-        return sizeof(T*);
-    }
-
-    inline types::InternalType::ScilabId get_scilab_id() const
-    {
-        return types::InternalType::IdDouble;
-    }
-
-    static void debug(double * p)
-    {
-        std::cout << "free=" << (void*)p << std::endl;
-    }
-
-    inline void store(llvm::Value * x, llvm::Value * free, JITVisitor & visitor) const
-    {
-        llvm::Function * func = &visitor.getFunction();
-        llvm::LLVMContext & context = visitor.getContext();
-        llvm::IRBuilder<> & builder = visitor.getBuilder();
-        llvm::BasicBlock * cur_block = builder.GetInsertBlock();
-
-        llvm::BasicBlock * BBThen = llvm::BasicBlock::Create(context, "", func);
-        llvm::BasicBlock * BBElse = llvm::BasicBlock::Create(context, "", func);
-
-        builder.CreateCondBr(JITVal::load<bool>(must_be_freed, false, visitor.getBuilder()), BBThen, BBElse);
-
-        builder.SetInsertPoint(BBThen);
-
-        //llvm::Value * toCall = visitor.getPointer(reinterpret_cast<void *>(&debug), getLLVMPtrFuncTy<void, double *>(context));
-        //builder.CreateCall(toCall, load(visitor));
-        llvm::Value * _free = llvm::CallInst::CreateFree(load(visitor), BBThen);
-        BBThen->getInstList().push_back(llvm::cast<llvm::Instruction>(_free));
-
-        builder.CreateBr(BBElse);
-        builder.SetInsertPoint(BBElse);
-        store(x, visitor);
-        JITVal::store<bool>(must_be_freed, free, false, visitor.getBuilder());
-    }
-
-    inline void store(llvm::Value * x, JITVisitor & visitor) const
-    {
-        JITVal::store<T>(this->val, x, false, visitor.getBuilder());
-    }
-
-    inline void storeR(llvm::Value * _r, JITVisitor & visitor) const
-    {
-        JITVal::store<int>(this->r, _r, true, visitor.getBuilder());
-    }
-
-    inline void storeC(llvm::Value * _c, JITVisitor & visitor) const
-    {
-        JITVal::store<int>(this->c, _c, true, visitor.getBuilder());
-    }
-
-    inline llvm::Value * load(JITVisitor & visitor) const
-    {
-        return JITVal::load<T>(val, false, visitor.getBuilder());
-    }
-
-    inline llvm::Value * loadR(JITVisitor & visitor) const
-    {
-        return JITVal::load<int>(r, true, visitor.getBuilder());
-    }
-
-    inline llvm::Value * loadC(JITVisitor & visitor) const
-    {
-        return JITVal::load<int>(c, true, visitor.getBuilder());
-    }
-
-    inline llvm::Value * getR() const
-    {
-        return r;
-    }
-    inline llvm::Value * getC() const
-    {
-        return c;
-    }
-};
-
-
-} // namespace jit
-
-#endif // __JIT_VALUES_HXX__
index 8d6a732..a39b780 100644 (file)
 #ifndef __JIT_VISITOR_HXX__
 #define __JIT_VISITOR_HXX__
 
+#include <complex>
 #include <map>
 #include <memory>
+#include <queue>
+#include <stack>
+#include <unordered_map>
+#include <unordered_set>
+#include <vector>
 
 //#include "llvm/IR/Verifier.h"
 #include "llvm/ExecutionEngine/GenericValue.h"
 #include "llvm/IR/Module.h"
 #include "llvm/Support/TargetSelect.h"
 //#include "llvm/Support/raw_ostream.h"
+
 #include "llvm/PassManager.h"
 #include "llvm/Analysis/Passes.h"
 #include "llvm/Transforms/Scalar.h"
+#include "llvm/Transforms/Vectorize.h"
+
 #include "llvm/ADT/Triple.h"
 #include "llvm/Support/Host.h"
 
 #include "visitor.hxx"
 #include "allexp.hxx"
 #include "allvar.hxx"
-#include "ScilabJITTraits.hxx"
 #include "AnalysisVisitor.hxx"
 
+#include "calls/JITBinOpCall.hxx"
+#include "calls/JITUnaryOpCall.hxx"
+#include "calls/JITShortcutBinOpCall.hxx"
+
 #include "dynlib_ast.h"
 
 namespace jit
 {
 
-class JITVal;
-
-class EXTERN_AST JITVisitor : public ast::ConstVisitor
-{
-    typedef std::map<symbol::Symbol, std::shared_ptr<JITVal>> JITSymbolMap;
-
-    static const bool __init__;
-
-    const analysis::AnalysisVisitor & analysis;
-
-    std::string err;
-    llvm::LLVMContext & context;
-    llvm::Module module;
-    llvm::ExecutionEngine * engine;
-    llvm::FunctionPassManager FPM;
-    llvm::Function * function;
-    llvm::IRBuilder<> builder;
-    llvm::Type * uintptrType;
-    std::shared_ptr<JITVal> _result;
-
-    //std::map<symbol::Symbol, llvm::Value *> symMap;
-    //std::map<symbol::Symbol, JITVal> symMap2;
-
-    JITSymbolMap symMap3;
-
-    llvm::Value * start;
-    llvm::Value * step;
-    llvm::Value * end;
-public:
+    class JITScilabVal;
+    typedef std::shared_ptr<JITScilabVal> JITScilabPtr;
 
-    static llvm::Value * const ONE;
-    static llvm::Value * const TWO;
-    static llvm::Value * const THREE;
-    static llvm::Value * const FOUR;
+    class EXTERN_AST JITVisitor : public ast::ConstVisitor, public analysis::FBlockEmittedListener
+    {
 
-    JITVisitor(const analysis::AnalysisVisitor & _analysis);
+        struct OutContainer
+        {
+            union Value
+            {
+                int8_t i8;
+                int16_t i16;
+                int32_t i32;
+                int64_t i64;
+                uint8_t ui8;
+                uint16_t ui16;
+                uint32_t ui32;
+                uint64_t ui64;
+                double dbl;
+               int32_t boolean;
+                double cpx[2];
+                void * ptr;
+            };
+
+            analysis::TIType::Type type;
+            Value data;
+            uint64_t rows;
+            uint64_t cols;
+            uint64_t refcount;
+
+            OutContainer(const analysis::TIType::Type _type) : type(_type) { }
+        };
+
+        typedef std::map<symbol::Symbol, JITScilabPtr> JITSymbolMap;
+
+        static const bool __init__;
+
+        const analysis::AnalysisVisitor & analysis;
+
+        std::string err;
+        llvm::LLVMContext & context;
+        llvm::Module * module;
+       llvm::TargetMachine * target;
+        llvm::ExecutionEngine * engine;
+        llvm::FunctionPassManager FPM;
+        llvm::Function * function;
+        llvm::IRBuilder<> builder;
+        llvm::Type * uintptrType;
+        llvm::Type * dblTy;
+        llvm::Type * int8Ty;
+        llvm::Type * int16Ty;
+        llvm::Type * int32Ty;
+        llvm::Type * int64Ty;
+        llvm::Type * int1Ty;
+        llvm::Type * voidTy;
+        llvm::Type * dblPtrTy;
+        llvm::Type * int8PtrTy;
+        llvm::Type * int16PtrTy;
+        llvm::Type * int32PtrTy;
+        llvm::Type * int64PtrTy;
+        llvm::Type * int1PtrTy;
+       llvm::BasicBlock * entryBlock;
+       llvm::BasicBlock * mainBlock;
+        llvm::BasicBlock * returnBlock;
+       llvm::BasicBlock * errorBlock;
+
+        JITScilabPtr _result;
+       JITScilabPtr cpx_rvalue;
+        std::vector<JITScilabPtr> multipleLHS;
+        JITSymbolMap variables;
+        std::vector<JITScilabPtr> temps;
+       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;
+       
+    public:
+       
+       JITAddition addition;
+       JITSubtraction subtraction;
+       JITOpposite opposite;
+        JITMultiplication multiplication;
+       JITRDivision rdivision;
+       JITPower power;
+       JITEquality equality;
+       JITNotEquality not_equality;
+       JITLowerThan lower_than;
+       JITGreaterThan greater_than;
+       JITLowerOrEq lower_or_eq;
+       JITGreaterOrEq greater_or_eq;
+       JITNegation negation;
+       JITShortcutEq shortcut_eq;
+       JITShortcutNe shortcut_ne;
+       JITShortcutLt shortcut_lt;
+       JITShortcutGt shortcut_gt;
+       JITShortcutLe shortcut_le;
+       JITShortcutGe shortcut_ge;
+       
+        JITVisitor(const analysis::AnalysisVisitor & _analysis);
+       virtual ~JITVisitor();
+
+        void run();
+
+        void dump() const;
+
+        template<typename T>
+            inline llvm::Type * getTy() const
+        {
+            if (std::is_const<T>::value)
+            {
+                return getTy<typename std::remove_const<T>::type>();
+            }
+            else if (std::is_pointer<T>::value && std::is_pointer<typename std::remove_pointer<T>::type>::value)
+            {
+                return llvm::PointerType::getUnqual(getTy<typename std::remove_pointer<T>::type>());
+            }
+
+            return nullptr;
+        }
+
+        inline llvm::Type * getTy(const analysis::TIType & ty, const unsigned char level = 0) const
+        {
+            llvm::Type * lty;
+
+            switch (ty.type)
+            {
+            case analysis::TIType::BOOLEAN:
+                lty = int32Ty;
+                break;
+            case analysis::TIType::DOUBLE:
+                lty = dblTy;
+                break;
+            case analysis::TIType::INT16:
+                lty = int16Ty;
+                break;
+            case analysis::TIType::INT32:
+                lty = int32Ty;
+                break;
+            case analysis::TIType::INT64:
+                lty = int64Ty;
+                break;
+            case analysis::TIType::INT8:
+                lty = int8Ty;
+                break;
+            case analysis::TIType::UINT16:
+                lty = int16Ty;
+                break;
+            case analysis::TIType::UINT32:
+                lty = int32Ty;
+                break;
+            case analysis::TIType::UINT64:
+                lty = int64Ty;
+                break;
+            case analysis::TIType::UINT8:
+                lty = int8Ty;
+                break;
+            default:
+                lty = voidTy;
+            }
+
+            for (unsigned char i = 0; i < level; ++i)
+            {
+                lty = llvm::PointerType::getUnqual(lty);
+            }
+
+            return lty;
+        }
+
+        inline unsigned int getTySizeInBytes(const llvm::Type * ty) const
+        {
+            return ty->isPointerTy() ? sizeof(void *) : (ty->getPrimitiveSizeInBits() / 8);
+        }
+
+        inline unsigned int getTySizeInBytes(const llvm::Value * v) const
+        {
+            return getTySizeInBytes(v->getType());
+        }
+
+        template<typename T>
+            inline unsigned int getTySizeInBytes() const
+        {
+            return getTy<T>()->isPointerTy() ? sizeof(void *) : (getTy<T>()->getPrimitiveSizeInBits() / 8);
+        }
+
+        inline llvm::LLVMContext & getContext()
+        {
+            return context;
+        }
+
+        inline llvm::Module & getModule()
+        {
+            return *module;
+        }
+
+        inline llvm::IRBuilder<> & getBuilder()
+        {
+            return builder;
+        }
+
+        inline llvm::Function & getFunction()
+        {
+            return *function;
+        }
+
+        inline llvm::Type * getPtrTy()
+        {
+            return uintptrType;
+        }
+
+        inline llvm::Value * getPointer(void * const ptr)
+        {
+            llvm::Value * v = llvm::ConstantInt::get(uintptrType, reinterpret_cast<uintptr_t>(ptr));
+            v = builder.CreateIntToPtr(v, llvm::PointerType::getInt8PtrTy(context));
+
+            return v;
+        }
+
+        inline llvm::Value * getPointer(void * const ptr, llvm::Type * const type)
+        {
+            llvm::Value * v = llvm::ConstantInt::get(uintptrType, reinterpret_cast<uintptr_t>(ptr));
+            v = builder.CreateIntToPtr(v, type);
+
+            return v;
+        }
+
+        template<typename T>
+            inline llvm::Value * getValue(const T val, const bool allocated = false, const std::string & name = "")
+        {
+            if (allocated)
+            {
+                return getAlloca<T>(val, name);
+            }
+            else
+            {
+                return getConstant<T>(val, name);
+            }
+        }
+
+        inline llvm::Value * getValue(llvm::Value * val, const bool allocated = false, const std::string & name = "")
+        {
+            if (allocated)
+            {
+                return getAlloca(val, name);
+            }
+            else
+            {
+                return val;
+            }
+        }
+
+        inline llvm::Value * getBool(const bool b)
+        {
+            return b ? llvm::ConstantInt::getTrue(context) : llvm::ConstantInt::getFalse(context);
+        }
+
+
+        template<typename T, bool isPtr> struct __getConstant;
+       template<typename T> struct __getConstant<T, true>
+       {
+           inline static llvm::Value * get(JITVisitor * jit, const T val, const std::string & name = "")
+               {
+                   return jit->getPointer((void *)val, jit->getTy<T>());
+               }
+       };
+
+       template<typename T> struct __getConstant<T, false>
+       {
+           inline static llvm::Value * get(JITVisitor * jit, const T val, const std::string & name = "")
+               {
+                   return llvm::ConstantInt::get(jit->getTy<T>(), uint64_t(val), !std::is_unsigned<T>::value);
+               }
+       };
+
+       template<typename T>
+            inline llvm::Value * getConstant(const T val, const std::string & name = "")
+       {
+           return __getConstant<T, std::is_pointer<T>::value>::get(this, val, name);
+       }
+
+        template<typename T>
+            inline llvm::Value * getAlloca(const T val, const std::string & name = "")
+        {
+            llvm::AllocaInst * alloca = builder.CreateAlloca(getTy<T>(), nullptr, name);
+            alloca->setAlignment(sizeof(T));
+            builder.CreateAlignedStore(getConstant<T>(val), alloca, sizeof(T));
+
+            return alloca;
+        }
+
+        template<typename T>
+            inline llvm::Value * getAlloca(const std::string & name = "")
+        {
+            llvm::AllocaInst * alloca = builder.CreateAlloca(getTy<T>(), nullptr, name);
+            alloca->setAlignment(sizeof(T));
+
+            return alloca;
+        }
+
+        inline llvm::Value * getAlloca(llvm::Value * val, llvm::Type * type, int type_size, const std::string & name = "")
+        {
+            llvm::AllocaInst * alloca = builder.CreateAlloca(type, nullptr, name);
+            alloca->setAlignment(type_size);
+            builder.CreateAlignedStore(val, alloca, type_size);
+
+            return alloca;
+        }
+
+        inline llvm::Value * getAlloca(llvm::Value * val, const std::string & name = "")
+        {
+            return getAlloca(val, val->getType(), getTySizeInBytes(val->getType()), name);
+        }
+
+        inline JITScilabPtr & getResult()
+        {
+            return  _result;
+        }
+
+        inline void setResult(JITScilabPtr & val)
+        {
+            _result = val;
+        }
+
+        inline void setResult(JITScilabPtr && val)
+        {
+            _result = val;
+        }
+
+       inline JITScilabPtr & getTemp(const int32_t id)
+       {
+           if (id >= 0 && id < temps.size())
+           {
+               return temps[id];
+           }
+           else
+           {
+               assert(false && " Bad temp id...");
+           }
+       }
+       
+       inline void addGlobal(const std::string & name, llvm::GlobalVariable * gv)
+       {
+           globals.emplace(name, gv);
+       }
+       
+       inline llvm::GlobalVariable * getGlobal(const std::string & name)
+       {
+           auto i = globals.find(name);
+           if (i == globals.end())
+           {
+               return nullptr;
+           }
+           return i->second;
+       }
+
+       inline llvm::Value * getSpecialVar(const std::string & name) const
+       {
+           auto i = specialVars.find(name);
+           if (i != specialVars.end())
+           {
+               return i->second;
+           }
+           return nullptr;
+       }
+
+       inline void addSpecialVar(const std::string & name, llvm::Value * val)
+       {
+           specialVars.emplace(name, val);
+       }
+
+       inline llvm::BasicBlock * getEntryBlock()
+       {
+           return entryBlock;
+       }
+
+        void makeCall(const std::wstring & name, const std::vector<types::InternalType *> & in, std::vector<types::InternalType *> & out);
+
+        JITScilabPtr getScalar(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();
+
+       llvm::FunctionType * getFunctionType(const analysis::TIType & out, const std::vector<const analysis::TIType *> & types);
+
+    private:
+       
+        inline std::vector<JITScilabPtr> & getLHSContainer()
+        {
+            return multipleLHS;
+        }
+
+        inline void callThrow(const char * msg)
+        {
+            /*llvm::Value * _msg = builder.CreateGlobalStringPtr(llvm::StringRef(msg));
+              llvm::Value * v = llvm::ConstantInt::get(uintptrType, reinterpret_cast<uintptr_t>(&jit::jit_throw));
+              v = builder.CreateIntToPtr(v, getLLVMPtrFuncTy<void, char *>(context));
+              builder.CreateCall(v, _msg);*/
+        }
+
+        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();
+            args.emplace_back(getValue(x));
+            args.emplace_back(getValue(r));
+            args.emplace_back(getValue(c));
+            args.emplace_back(getValue(refc));
+        }
+
+        void visit(ast::CallExp & e, const unsigned int lhs);
+        void visit(const ast::CallExp & e);
+
+        void visit(const ast::SimpleVar & e);
+        void visit(const ast::DollarVar & e);
+        void visit(const ast::ColonVar & e);
+        void visit(const ast::ArrayListVar & e);
+        void visit(const ast::DoubleExp & e);
+        void visit(const ast::BoolExp & e);
+        void visit(const ast::StringExp & e);
+        void visit(const ast::NilExp & e);
+        void visit(const ast::CellCallExp & e);
+        void visit(const ast::OpExp & e);
+        void visit(const ast::LogicalOpExp & e);
+        void visit(const ast::AssignExp & e);
+        void visit(const ast::IfExp & e);
+        void visit(const ast::WhileExp & e);
+        void visit(const ast::ForExp & e);
+        void visit(const ast::BreakExp & e);
+        void visit(const ast::ContinueExp & e);
+        void visit(const ast::TryCatchExp & e);
+        void visit(const ast::SelectExp & e);
+       void visit(const ast::IntSelectExp & e);
+       void visit(const ast::SmallIntSelectExp & e);
+       void visit(const ast::TableIntSelectExp & e);
+       void visit(const ast::MapIntSelectExp & e);
+        void visit(const ast::CaseExp & e);
+        void visit(const ast::ReturnExp & e);
+        void visit(const ast::FieldExp & e);
+        void visit(const ast::NotExp & e);
+        void visit(const ast::TransposeExp & e);
+        void visit(const ast::MatrixExp & e);
+        void visit(const ast::MatrixLineExp & e);
+        void visit(const ast::CellExp & e);
+        void visit(const ast::SeqExp & e);
+        void visit(const ast::ArrayListExp & e);
+        void visit(const ast::AssignListExp & e);
+        void visit(const ast::VarDec & e);
+        void visit(const ast::FunctionDec & e);
+        void visit(const ast::ListExp & e);
+
+        void visit(const ast::OptimizedExp & e) { }
+        void visit(const ast::DAXPYExp & e) { }
+        void visit(const ast::MemfillExp & e) { }
+        void visit(const ast::StringSelectExp & e) { }
+        void visit(const ast::CommentExp & e) { }
+
+        void action(analysis::FunctionBlock & fblock);
+        llvm::Type * getType(const analysis::TIType::Type ty, const bool scalar);
+        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(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);
+        llvm::Value * getPtrFromIndex(const ast::CallExp & ce);
+       void runOptimizationPasses();
+       void compileModule();
+       void makeSwitch(const ast::IntSelectExp & e, const std::map<int64_t, ast::Exp *> & map);
+       void CreateBr(llvm::BasicBlock * bb);
+       void closeEntryBlock();
+
+        static bool InitializeLLVM();
+        static llvm::FunctionPassManager initFPM(llvm::Module * module, llvm::ExecutionEngine * engine, llvm::TargetMachine * target);
+        static llvm::Type * getPtrAsIntTy(llvm::Module & module, llvm::LLVMContext & ctxt);
+        static llvm::ExecutionEngine * InitializeEngine(llvm::Module * module, llvm::TargetMachine ** target);
+    };
+
+    template<>
+    inline llvm::Value * JITVisitor::getConstant<double>(const double val, const std::string & name)
+    {
+        return llvm::ConstantFP::get(context, llvm::APFloat(val));
+    }
 
-    void run();
+    template<>
+    inline llvm::Value * JITVisitor::getConstant<std::complex<double>>(const std::complex<double> val, const std::string & name)
+    {
+       llvm::Constant * re = llvm::ConstantFP::get(context, llvm::APFloat(val.real()));
+       llvm::Constant * im = llvm::ConstantFP::get(context, llvm::APFloat(val.imag()));
+        llvm::Constant * arr[] = { re, im };
+        return llvm::ConstantVector::get(llvm::ArrayRef<llvm::Constant *>(arr));
+    }
 
-    void dump() const;
+    template<>
+    inline llvm::Type * JITVisitor::getTy<double>() const
+    {
+        return dblTy;
+    }
 
-    inline llvm::LLVMContext & getContext()
+    template<>
+    inline llvm::Type * JITVisitor::getTy<bool>() const
     {
-        return context;
+        return int1Ty;
     }
 
-    inline llvm::Module & getModule()
+    template<>
+    inline llvm::Type * JITVisitor::getTy<int8_t>() const
     {
-        return module;
+        return int8Ty;
     }
 
-    inline llvm::IRBuilder<> & getBuilder()
+    template<>
+    inline llvm::Type * JITVisitor::getTy<int16_t>() const
     {
-        return builder;
+        return int16Ty;
     }
 
-    inline llvm::Function & getFunction()
+    template<>
+    inline llvm::Type * JITVisitor::getTy<int32_t>() const
     {
-        return *function;
+        return int32Ty;
     }
 
-    inline llvm::Type * getPtrTy()
+    template<>
+    inline llvm::Type * JITVisitor::getTy<int64_t>() const
     {
-        return uintptrType;
+        return int64Ty;
     }
 
-    inline llvm::Value * getPointer(void * const ptr)
+    template<>
+    inline llvm::Type * JITVisitor::getTy<uint8_t>() const
     {
-        llvm::Value * v = llvm::ConstantInt::get(uintptrType, reinterpret_cast<uintptr_t>(ptr));
-        v = builder.CreateIntToPtr(v, llvm::PointerType::getInt8PtrTy(context));
+        return int8Ty;
+    }
 
-        return v;
+    template<>
+    inline llvm::Type * JITVisitor::getTy<uint16_t>() const
+    {
+        return int16Ty;
     }
 
-    inline llvm::Value * getPointer(void * const ptr, const char * const type)
+    template<>
+    inline llvm::Type * JITVisitor::getTy<uint32_t>() const
     {
-        llvm::Value * v = llvm::ConstantInt::get(uintptrType, reinterpret_cast<uintptr_t>(ptr));
-        v = builder.CreateIntToPtr(v, llvm::PointerType::getUnqual(module.getTypeByName(type)));
+        return int32Ty;
+    }
 
-        return v;
+    template<>
+    inline llvm::Type * JITVisitor::getTy<uint64_t>() const
+    {
+        return int64Ty;
     }
 
-    inline llvm::Value * getPointer(void * const ptr, llvm::Type * const type)
+    template<>
+    inline llvm::Type * JITVisitor::getTy<void>() const
     {
-        llvm::Value * v = llvm::ConstantInt::get(uintptrType, reinterpret_cast<uintptr_t>(ptr));
-        v = builder.CreateIntToPtr(v, type);
+        return voidTy;
+    }
 
-        return v;
+    template<>
+    inline llvm::Type * JITVisitor::getTy<double *>() const
+    {
+        return dblPtrTy;
     }
 
-    template<typename T>
-    llvm::Value * getConstant(const T val)
+    template<>
+    inline llvm::Type * JITVisitor::getTy<bool *>() const
     {
-        llvm::Value * const v = llvm::ConstantInt::get(getLLVMTy<T>(context), uint64_t(val), !std::is_unsigned<T>::value);
+        return int1PtrTy;
+    }
 
-        return v;
+    template<>
+    inline llvm::Type * JITVisitor::getTy<int8_t *>() const
+    {
+        return int8PtrTy;
     }
 
-    template<typename T>
-    llvm::Value * getConstantPtr(const T * val)
+    template<>
+    inline llvm::Type * JITVisitor::getTy<int16_t *>() const
     {
-        llvm::Value * const v = getPointer((void *)val, getLLVMTy<T *>(context));
+        return int16PtrTy;
+    }
 
-        return v;
+    template<>
+    inline llvm::Type * JITVisitor::getTy<int32_t *>() const
+    {
+        return int32PtrTy;
     }
 
-    template<typename T>
-    llvm::Value * getAlloca(const T val, const std::string & name)
+    template<>
+    inline llvm::Type * JITVisitor::getTy<int64_t *>() const
     {
-        llvm::AllocaInst * alloca = builder.CreateAlloca(getLLVMTy<T>(context), 0, name.c_str());
-        alloca->setAlignment(sizeof(T));
-        builder.CreateAlignedStore(getConstant<T>(val), alloca, sizeof(T));
+        return int64PtrTy;
+    }
 
-        return alloca;
+    template<>
+    inline llvm::Type * JITVisitor::getTy<uint8_t *>() const
+    {
+        return int8PtrTy;
     }
 
-    llvm::Value * getAlloca(llvm::Value * val, llvm::Type * type, int type_size, const std::string & name)
+    template<>
+    inline llvm::Type * JITVisitor::getTy<uint16_t *>() const
     {
-        llvm::AllocaInst * alloca = builder.CreateAlloca(type, 0, name.c_str());
-        alloca->setAlignment(type_size);
-        builder.CreateAlignedStore(val, alloca, type_size);
+        return int16PtrTy;
+    }
 
-        return alloca;
+    template<>
+    inline llvm::Type * JITVisitor::getTy<uint32_t *>() const
+    {
+        return int32PtrTy;
     }
 
-    template<typename T>
-    llvm::Value * getAllocaPtr(const T * val, const std::string & name)
+    template<>
+    inline llvm::Type * JITVisitor::getTy<uint64_t *>() const
     {
-        llvm::AllocaInst * alloca = builder.CreateAlloca(getLLVMTy<T *>(context), 0, name.c_str());
-        alloca->setAlignment(sizeof(T *));
-        builder.CreateAlignedStore(getPointer((void *)val, getLLVMTy<T *>(context)), alloca, sizeof(T));
+        return int64PtrTy;
+    }
 
-        return alloca;
+    template<>
+    inline llvm::Type * JITVisitor::getTy<const double *>() const
+    {
+        return dblPtrTy;
     }
 
-    template<typename T>
-    llvm::Value * getAllocaPtr(llvm::Value * val)
+    template<>
+    inline llvm::Type * JITVisitor::getTy<const bool *>() const
     {
-        llvm::AllocaInst * alloca = builder.CreateAlloca(getLLVMTy<T *>(context), 0);
-        alloca->setAlignment(sizeof(T *));
-        builder.CreateAlignedStore(val, alloca, sizeof(T));
+        return int1PtrTy;
+    }
 
-        return alloca;
+    template<>
+    inline llvm::Type * JITVisitor::getTy<const int8_t *>() const
+    {
+        return int8PtrTy;
     }
 
-private:
+    template<>
+    inline llvm::Type * JITVisitor::getTy<const int16_t *>() const
+    {
+        return int16PtrTy;
+    }
 
-    inline void setResult(std::shared_ptr<JITVal> & val)
+    template<>
+    inline llvm::Type * JITVisitor::getTy<const int32_t *>() const
     {
-        _result = val;
+        return int32PtrTy;
     }
 
-    inline void setResult(std::shared_ptr<JITVal> && val)
+    template<>
+    inline llvm::Type * JITVisitor::getTy<const int64_t *>() const
     {
-        _result = val;
+        return int64PtrTy;
     }
 
-    inline std::shared_ptr<JITVal> & getResult()
+    template<>
+    inline llvm::Type * JITVisitor::getTy<const uint8_t *>() const
     {
-        return  _result;
+        return int8PtrTy;
     }
 
-    inline void callThrow(const char * msg)
+    template<>
+    inline llvm::Type * JITVisitor::getTy<const uint16_t *>() const
     {
-        llvm::Value * _msg = builder.CreateGlobalStringPtr(llvm::StringRef(msg));
-        llvm::Value * v = llvm::ConstantInt::get(uintptrType, reinterpret_cast<uintptr_t>(&jit::jit_throw));
-        v = builder.CreateIntToPtr(v, getLLVMPtrFuncTy<void, char *>(context));
-        builder.CreateCall(v, _msg);
+        return int16PtrTy;
     }
 
-    void visit(const ast::SimpleVar & e);
-    void visit(const ast::DollarVar & e);
-    void visit(const ast::ColonVar & e);
-    void visit(const ast::ArrayListVar & e);
-    void visit(const ast::DoubleExp & e);
-    void visit(const ast::BoolExp & e);
-    void visit(const ast::StringExp & e);
-    void visit(const ast::CommentExp & e);
-    void visit(const ast::NilExp & e);
-    void visit(const ast::CallExp & e);
-    void visit(const ast::CellCallExp & e);
-    void visit(const ast::OpExp & e);
-    void visit(const ast::LogicalOpExp & e);
-    void visit(const ast::AssignExp & e);
-    void visit(const ast::IfExp & e);
-    void visit(const ast::WhileExp & e);
-    void visit(const ast::ForExp & e);
-    void visit(const ast::BreakExp & e);
-    void visit(const ast::ContinueExp & e);
-    void visit(const ast::TryCatchExp & e);
-    void visit(const ast::SelectExp & e);
-    void visit(const ast::CaseExp & e);
-    void visit(const ast::ReturnExp & e);
-    void visit(const ast::FieldExp & e);
-    void visit(const ast::NotExp & e);
-    void visit(const ast::TransposeExp & e);
-    void visit(const ast::MatrixExp & e);
-    void visit(const ast::MatrixLineExp & e);
-    void visit(const ast::CellExp & e);
-    void visit(const ast::SeqExp & e);
-    void visit(const ast::ArrayListExp & e);
-    void visit(const ast::AssignListExp & e);
-    void visit(const ast::VarDec & e);
-    void visit(const ast::FunctionDec & e);
-    void visit(const ast::ListExp & e);
-    void visit(const ast::OptimizedExp & e);
-    void visit(const ast::DAXPYExp & e);
-    void visit(const ast::MemfillExp & e) {}
-    void visit(const ast::IntSelectExp & e) {}
-    void visit(const ast::StringSelectExp & e) {}
-};
+    template<>
+    inline llvm::Type * JITVisitor::getTy<const uint32_t *>() const
+    {
+        return int32PtrTy;
+    }
 
-template<> llvm::Value * JITVisitor::getConstant<double>(const double val);
+    template<>
+    inline llvm::Type * JITVisitor::getTy<const uint64_t *>() const
+    {
+        return int64PtrTy;
+    }
 
 } // namespace jit
 
diff --git a/scilab/modules/ast/includes/jit/MemoryManager.hxx b/scilab/modules/ast/includes/jit/MemoryManager.hxx
new file mode 100644 (file)
index 0000000..f8b6dbe
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+ *  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 __MEMORY_MANAGER_HXX__
+#define __MEMORY_MANAGER_HXX__
+
+#include <cstdint>
+#include <iostream>
+#include <memory>
+#include <unordered_map>
+
+#include "llvm/ExecutionEngine/SectionMemoryManager.h"
+
+#ifdef _MSC_VER
+#define __SCILABJIT_CAST_FUN__(x) (uint64_t)(void (*)())(x)
+#else
+#define __SCILABJIT_CAST_FUN__(x) (uint64_t)(x)
+#endif
+
+namespace jit
+{
+
+    class MemoryManager : public llvm::SectionMemoryManager
+    {
+       typedef std::unordered_map<std::string, uint64_t> SymbolsAddressMap;
+       
+       MemoryManager(const MemoryManager &) = delete;
+       void operator=(const MemoryManager &) = delete;
+       
+       static SymbolsAddressMap syms;
+       static SymbolsAddressMap init();
+       
+    public:
+
+       MemoryManager() : llvm::SectionMemoryManager() { }
+
+       virtual ~MemoryManager() { }
+       virtual uint64_t getSymbolAddress(const std::string & name);
+
+
+       virtual uint8_t *allocateCodeSection(uintptr_t Size, unsigned Alignment, unsigned SectionID, llvm::StringRef SectionName);
+       virtual uint8_t *allocateDataSection(uintptr_t Size, unsigned Alignment, unsigned SectionID, llvm::StringRef SectionName, bool isReadOnly);
+       
+       template<typename T>
+       inline static void addSymbol(const std::string & name, T address)
+           {
+               syms.emplace(name, __SCILABJIT_CAST_FUN__(address));
+           }
+
+       inline static void addSymbol(const std::string & name, uint64_t address)
+           {
+               syms.emplace(name, address);
+           }
+
+       template<typename T>
+       inline static void addSymbol(const std::string && name, T address)
+           {
+               syms.emplace(name, __SCILABJIT_CAST_FUN__(address));
+           }
+
+       inline static std::size_t getMapSize()
+           {
+               return syms.size();
+           }
+
+    private:
+
+       template<typename T>
+       inline static void addSymbol(SymbolsAddressMap & map, const std::string & name, T address)
+           {
+               map.emplace(name, __SCILABJIT_CAST_FUN__(address));
+           }
+
+       template<typename T>
+       inline static void addSymbol(SymbolsAddressMap & map, const std::string && name, T address)
+           {
+               map.emplace(name, __SCILABJIT_CAST_FUN__(address));
+           }
+    };
+    
+} // namespace jit
+
+#endif // __MEMORY_MANAGER_HXX__
diff --git a/scilab/modules/ast/includes/jit/ScilabJITEventListener.hxx b/scilab/modules/ast/includes/jit/ScilabJITEventListener.hxx
new file mode 100644 (file)
index 0000000..b4e4619
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ *  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 __SCILAB_JIT_EVENT_LISTENER_HXX__
+#define __SCILAB_JIT_EVENT_LISTENER_HXX__
+
+#include "llvm/ExecutionEngine/JITEventListener.h"
+
+namespace jit
+{
+    class ScilabJITEventListener : public llvm::JITEventListener
+    {
+
+    public:
+       
+        virtual void NotifyObjectEmitted(const llvm::ObjectImage & obj) override;
+    };
+
+
+} // namespace jit
+
+#endif // __SCILAB_JIT_EVENT_LISTENER_HXX__
index 1442b0a..cf32b02 100644 (file)
@@ -63,63 +63,7 @@ inline static llvm::Type * getPtrAsIntTy(llvm::Module & module, llvm::LLVMContex
 #endif
 }
 
-inline static llvm::FunctionPassManager initFPM(llvm::Module * module, llvm::ExecutionEngine * engine)
-{
-    llvm::FunctionPassManager FPM(module);
-
-#if LLVM_VERSION_MAJOR >= 3 && LLVM_VERSION_MINOR == 4
-    FPM.add(new llvm::DataLayout(*engine->getDataLayout()));
-#else
-    FPM.add(new llvm::DataLayoutPass(*engine->getDataLayout()));
-#endif
 
-    // createBasicAliasAnalysisPass - This pass implements the stateless alias
-    // analysis.
-    FPM.add(llvm::createBasicAliasAnalysisPass());
-
-    // Promote allocas to registers.
-    // PromoteMemoryToRegister - This pass is used to promote memory references to
-    // be register references. A simple example of the transformation performed by
-    // this pass is:
-    //
-    //        FROM CODE                           TO CODE
-    //   %X = alloca i32, i32 1                 ret i32 42
-    //   store i32 42, i32 *%X
-    //   %Y = load i32* %X
-    //   ret i32 %Y
-    FPM.add(llvm::createPromoteMemoryToRegisterPass());
-
-    // Do simple "peephole" optimizations and bit-twiddling optzns.
-    // This pass combines things like:
-    //    %Y = add int 1, %X
-    //    %Z = add int 1, %Y
-    // into:
-    //    %Z = add int 2, %X
-    FPM.add(llvm::createInstructionCombiningPass());
-
-    // Reassociate expressions.
-    // Reassociate - This pass reassociates commutative expressions in an order that
-    // is designed to promote better constant propagation, GCSE, LICM, PRE...
-    //
-    // For example:  4 + (x + 5)  ->  x + (4 + 5)
-    FPM.add(llvm::createReassociatePass());
-
-    // Eliminate Common SubExpressions.
-    // GVN - This pass performs global value numbering and redundant load
-    // elimination cotemporaneously.
-    FPM.add(llvm::createGVNPass());
-
-    // Simplify the control flow graph (deleting unreachable blocks, etc).
-    FPM.add(llvm::createCFGSimplificationPass());
-
-    FPM.add(llvm::createDeadInstEliminationPass());
-    FPM.add(llvm::createDeadCodeEliminationPass());
-    FPM.add(llvm::createLoopVectorizePass());
-
-    FPM.doInitialization();
-
-    return FPM;
-}
 
 template<typename>
 inline static llvm::Type * getLLVMTy(llvm::LLVMContext & ctxt = llvm::getGlobalContext());
@@ -391,7 +335,7 @@ inline static void putInContext_M(symbol::Context * ctxt, symbol::Variable * var
 
 static void jit_throw(const char * msg)
 {
-    throw ast::InternalError(msg);
+    throw ast::ScilabError(msg);
 }
 
 inline static bool InitializeLLVM()
diff --git a/scilab/modules/ast/includes/jit/base/addition.hxx b/scilab/modules/ast/includes/jit/base/addition.hxx
new file mode 100644 (file)
index 0000000..ab69f10
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ *  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_ADDITIONS_HXX__
+#define __BASE_ADDITIONS_HXX__
+
+#include <complex>
+
+#include "Cast.hxx"
+
+
+namespace jit
+{
+    namespace op
+    {
+
+       template<typename T, typename U, typename V>
+       struct Add
+       {
+
+           inline V operator()(T x, U y)
+               {
+                   return (V)x + (V)y;
+               }
+       };
+       
+       template<typename U>
+       struct Add<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 Add<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<>
+       struct Add<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 x + y;
+               }
+       };
+
+    } // namespace op
+
+} // namespace jit
+
+#endif // __BASE_ADDITIONS_HXX__
diff --git a/scilab/modules/ast/includes/jit/base/and.hxx b/scilab/modules/ast/includes/jit/base/and.hxx
new file mode 100644 (file)
index 0000000..9569661
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ *  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_AND_HXX__
+#define __BASE_AND_HXX__
+
+#include <complex>
+
+#include "Cast.hxx"
+
+
+namespace jit
+{
+    namespace op
+    {
+
+       template<bool are_integral, typename T, typename U, typename V>
+       struct __And_helper;
+
+       template<typename T, typename U, typename V>
+       struct __And_helper<true, T, U, V>
+       {
+           inline V operator()(T x, U y)
+               {
+                   return (V)x & (V)y;
+               }
+       };
+
+       template<typename T, typename U, typename V>
+       struct __And_helper<false, T, U, V>
+       {
+           inline V operator()(T x, U y)
+               {
+                   return (x != 0) && (y != 0);
+               }
+       };
+
+       template<typename U, typename V>
+       struct __And_helper<false, const std::complex<double> &, U, V>
+       {
+
+           inline V operator()(const std::complex<double> & x, U y)
+               {
+                   return (x != 0.) && ((double)y != 0);
+               }
+       };
+
+       template<typename T, typename V>
+       struct __And_helper<false, T, const std::complex<double> &, V>
+       {
+
+           inline V operator()(T x, const std::complex<double> & y)
+               {
+                   return ((double)x != 0.) && (y != 0.);
+               }
+       };
+
+       template<typename V>
+       struct __And_helper<false, const std::complex<double> &, const std::complex<double> &, V>
+       {
+
+           inline V operator()(const std::complex<double> & x, const std::complex<double> & y)
+               {
+                   return (x != 0.) && (y != 0.);
+               }
+       };
+
+       template<typename T, typename U, typename V>
+       struct And
+       {
+           inline V operator()(T x, U y)
+               {
+                   return __And_helper<jit::is_pure_integral<T>::value && jit::is_pure_integral<U>::value, T, U, V>()(x, y);
+               }
+       };
+
+    } // namespace op
+
+} // namespace jit
+
+#endif // __BASE_AND_HXX__
diff --git a/scilab/modules/ast/includes/jit/base/binary.hxx b/scilab/modules/ast/includes/jit/base/binary.hxx
new file mode 100644 (file)
index 0000000..1fcd843
--- /dev/null
@@ -0,0 +1,314 @@
+/*
+ *  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__
diff --git a/scilab/modules/ast/includes/jit/base/binary_functors.hxx b/scilab/modules/ast/includes/jit/base/binary_functors.hxx
new file mode 100644 (file)
index 0000000..a5d57e5
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ *  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 __JIT_BINARY_FUNCTORS_HXX__
+#define __JIT_BINARY_FUNCTORS_HXX__
+
+#include "addition.hxx"
+#include "subtraction.hxx"
+#include "product.hxx"
+#include "exponentiation.hxx"
+#include "ldivision.hxx"
+#include "rdivision.hxx"
+#include "equal.hxx"
+#include "not_equal.hxx"
+#include "greater_or_eq.hxx"
+#include "greater_than.hxx"
+#include "lower_or_eq.hxx"
+#include "lower_than.hxx"
+#include "and.hxx"
+#include "or.hxx"
+#include "tools.hxx"
+
+namespace jit
+{
+    namespace functors
+    {
+       template<typename T, typename U, typename V, 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)
+               {
+                   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>>;
+
+       template<typename T, typename U, typename V>
+       using sub = Binary<T, U, V, 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>>;
+
+       template<typename T, typename U, typename V>
+       using dotpower = Binary<T, U, V, 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>>;
+
+       template<typename T, typename U, typename V>
+       using dotrdiv = Binary<T, U, V, 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>>;
+
+       template<typename T, typename U, typename V>
+       using eq = Binary<T, U, V, 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>>;
+
+       template<typename T, typename U, typename V>
+       using ge = Binary<T, U, V, 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>>;
+
+       template<typename T, typename U, typename V>
+       using le = Binary<T, U, V, 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>>;
+
+       template<typename T, typename U, typename V>
+       using Or = Binary<T, U, V, jit::op::Or<T, U, V>>;
+       
+    } // namespace functors
+
+} // namespace jit
+
+#endif // __JIT_BINARY_FUNCTORS_HXX__
diff --git a/scilab/modules/ast/includes/jit/base/elem_functions.hxx b/scilab/modules/ast/includes/jit/base/elem_functions.hxx
new file mode 100644 (file)
index 0000000..4d9a273
--- /dev/null
@@ -0,0 +1,727 @@
+/*
+*  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_ELEM_FUNCTIONS_HXX__
+#define __BASE_ELEM_FUNCTIONS_HXX__
+
+#include <cmath>
+#include <complex>
+
+#include "Cast.hxx"
+
+#include "core_math.h"
+#include "faddeeva.h"
+
+extern "C"
+{
+#include "basic_functions.h"
+}
+
+namespace jit
+{
+namespace elem
+{
+
+template<typename T, typename U>
+struct cast
+{
+    inline U operator()(T x)
+    {
+        return (U)x;
+    }
+};
+
+template<typename T, typename U = T>
+struct abs
+{
+    inline U operator()(T x)
+    {
+        if (std::is_unsigned<T>::value)
+        {
+            return x;
+        }
+        return x >= 0 ? x : -x;
+    }
+};
+
+template<>
+struct abs<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::fabs(x);
+    }
+};
+
+template<>
+struct abs<const std::complex<double> &, double>
+{
+    inline double operator()(const std::complex<double> & z)
+    {
+        return std::hypot(z.real(), z.imag());
+    }
+};
+
+template<typename T, typename U = T>
+struct ceil
+{
+    inline U operator()(T x)
+    {
+        return x;
+    }
+};
+
+template<>
+struct ceil<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::ceil(x);
+    }
+};
+
+template<>
+struct ceil<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return std::complex<double>(std::ceil(z.real()), std::ceil(z.imag()));
+    }
+};
+
+template<typename T, typename U = T>
+struct floor
+{
+    inline U operator()(T x)
+    {
+        return x;
+    }
+};
+
+template<>
+struct floor<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::floor(x);
+    }
+};
+
+template<>
+struct floor<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return std::complex<double>(std::floor(z.real()), std::floor(z.imag()));
+    }
+};
+
+template<typename T, typename U = T>
+struct trunc
+{
+    inline U operator()(T x)
+    {
+        return x;
+    }
+};
+
+template<>
+struct trunc<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::trunc(x);
+    }
+};
+
+template<>
+struct trunc<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return std::complex<double>(std::trunc(z.real()), std::trunc(z.imag()));
+    }
+};
+
+template<typename T, typename U = T>
+struct round
+{
+    inline U operator()(T x)
+    {
+        return x;
+    }
+};
+
+template<>
+struct round<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::round(x);
+    }
+};
+
+template<>
+struct round<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return std::complex<double>(std::round(z.real()), std::round(z.imag()));
+    }
+};
+
+/*template<typename T>
+inline T min(T x, T y)
+{
+return x < y ? x : y;
+}
+
+template<typename T>
+inline T max(T x, T y)
+{
+return x > y ? x : y;
+}
+
+inline double rand()
+{
+static int * _iVal = 0;
+return durands(_iVal);
+}
+*/
+
+
+template<typename T, typename U = T>
+struct sign
+{
+    inline U operator()(T x)
+    {
+        if (std::is_unsigned<T>::value)
+        {
+            return 1;
+        }
+        else
+        {
+            return x < 0 ? -1 : 1;
+        }
+    }
+};
+
+template<>
+struct sign<double, double>
+{
+    inline double operator()(double x)
+    {
+        if (x == 0 || std::isnan(x))
+        {
+            return x;
+        }
+        return x < 0 ? -1 : 1;
+    }
+};
+
+template<>
+struct sign<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return z / std::hypot(z.real(), z.imag());
+    }
+};
+
+template<typename T, typename U = T>
+struct log2;
+
+template<>
+struct log2<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::log(x) / M_LN2;
+    }
+};
+
+template<>
+struct log2<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return std::log(z) / M_LN2;
+    }
+};
+
+template<typename T, typename U = T>
+struct log;
+
+template<>
+struct log<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::log(x);
+    }
+};
+
+template<>
+struct log<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return std::log(z);
+    }
+};
+
+template<typename T, typename U = T>
+struct log10;
+
+template<>
+struct log10<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::log10(x);
+    }
+};
+
+template<>
+struct log10<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return std::log10(z);
+    }
+};
+
+template<typename T, typename U = T>
+struct sqrt;
+
+template<>
+struct sqrt<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::sqrt(x);
+    }
+};
+
+template<>
+struct sqrt<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return std::sqrt(z);
+    }
+};
+
+template<typename T, typename U = T>
+struct sqrt_neg;
+
+template<>
+struct sqrt_neg<double, std::complex<double>>
+{
+    inline std::complex<double> operator()(double x)
+    {
+        return std::complex<double>(0, std::sqrt(-x));
+    }
+};
+
+template<typename T, typename U = T>
+struct log_neg;
+
+template<>
+struct log_neg<double, std::complex<double>>
+{
+    inline std::complex<double> operator()(double x)
+    {
+        return std::complex<double>(std::log(-x), M_PI);
+    }
+};
+
+template<typename T, typename U = T>
+struct log10_neg;
+
+template<>
+struct log10_neg<double, std::complex<double>>
+{
+    inline std::complex<double> operator()(double x)
+    {
+        return std::complex<double>(std::log10(-x), M_PI);
+    }
+};
+
+template<typename T, typename U = T>
+struct log2_neg;
+
+template<>
+struct log2_neg<double, std::complex<double>>
+{
+    inline std::complex<double> operator()(double x)
+    {
+        return std::complex<double>(std::log(-x) / M_LN2, M_PI / M_LN2);
+    }
+};
+
+//template<typename T, typename U = T>
+//struct erf;
+//
+//template<>
+//struct erf<double, double>
+//{
+//    inline double operator()(double x)
+//    {
+//        return std::erf(x);
+//    }
+//};
+//
+//template<>
+//struct erf<const std::complex<double> &, std::complex<double>>
+//{
+//    inline std::complex<double> operator()(const std::complex<double> & z)
+//    {
+//        return Faddeeva::erf(z, 0);
+//    }
+//};
+//
+//template<typename T, typename U = T>
+//struct erfc;
+//
+//template<>
+//struct erfc<double, double>
+//{
+//    inline double operator()(double x)
+//    {
+//        return std::erfc(x);
+//    }
+//};
+//
+//template<>
+//struct erfc<const std::complex<double> &, std::complex<double>>
+//{
+//    inline std::complex<double> operator()(const std::complex<double> & z)
+//    {
+//        return Faddeeva::erfc(z, 0);
+//    }
+//};
+//
+//template<typename T, typename U = T>
+//struct erfi;
+//
+//template<>
+//struct erfi<double, double>
+//{
+//    inline double operator()(double x)
+//    {
+//        return Faddeeva::erfi(x);
+//    }
+//};
+//
+//template<>
+//struct erfi<const std::complex<double> &, std::complex<double>>
+//{
+//    inline std::complex<double> operator()(const std::complex<double> & z)
+//    {
+//        return Faddeeva::erfi(z, 0);
+//    }
+//};
+//
+//template<typename T, typename U = T>
+//struct erfcx;
+//
+//template<>
+//struct erfcx<double, double>
+//{
+//    inline double operator()(double x)
+//    {
+//        return Faddeeva::erfcx(x);
+//    }
+//};
+//
+//template<>
+//struct erfcx<const std::complex<double> &, std::complex<double>>
+//{
+//    inline std::complex<double> operator()(const std::complex<double> & z)
+//    {
+//        return Faddeeva::erfcx(z, 0);
+//    }
+//};
+//
+//template<typename T, typename U = T>
+//struct dawson;
+//
+//template<>
+//struct dawson<double, double>
+//{
+//    inline double operator()(double x)
+//    {
+//        return Faddeeva::Dawson(x);
+//    }
+//};
+//
+//template<>
+//struct dawson<const std::complex<double> &, std::complex<double>>
+//{
+//    inline std::complex<double> operator()(const std::complex<double> & z)
+//    {
+//        return Faddeeva::Dawson(z, 0);
+//    }
+//};
+
+template<typename T, typename U = T>
+struct sin;
+
+template<>
+struct sin<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::sin(x);
+    }
+};
+
+template<>
+struct sin<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return std::sin(z);
+    }
+};
+
+template<typename T, typename U = T>
+struct cos;
+
+template<>
+struct cos<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::cos(x);
+    }
+};
+
+template<>
+struct cos<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return std::cos(z);
+    }
+};
+
+template<typename T, typename U = T>
+struct tan;
+
+template<>
+struct tan<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::tan(x);
+    }
+};
+
+template<>
+struct tan<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return std::tan(z);
+    }
+};
+
+template<typename T, typename U = T>
+struct tanh;
+
+template<>
+struct tanh<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::tanh(x);
+    }
+};
+
+template<>
+struct tanh<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return std::tanh(z);
+    }
+};
+
+template<typename T, typename U = T>
+struct sinh;
+
+template<>
+struct sinh<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::sinh(x);
+    }
+};
+
+template<>
+struct sinh<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return std::sinh(z);
+    }
+};
+
+template<typename T, typename U = T>
+struct cosh;
+
+template<>
+struct cosh<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::cosh(x);
+    }
+};
+
+template<>
+struct cosh<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return std::cosh(z);
+    }
+};
+
+template<typename T, typename U = T>
+struct atan;
+
+template<>
+struct atan<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::atan(x);
+    }
+};
+
+template<>
+struct atan<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return std::atan(z);
+    }
+};
+
+template<typename T, typename U = T>
+struct exp;
+
+template<>
+struct exp<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::exp(x);
+    }
+};
+
+template<>
+struct exp<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return std::exp(z);
+    }
+};
+
+template<typename T, typename U = T>
+struct tgamma;
+
+template<>
+struct tgamma<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::tgamma(x);
+    }
+};
+
+template<typename T, typename U = T>
+struct lgamma;
+
+template<>
+struct lgamma<double, double>
+{
+    inline double operator()(double x)
+    {
+        return std::lgamma(x);
+    }
+};
+
+template<typename T, typename U = T>
+struct real;
+
+template<>
+struct real<double, double>
+{
+    inline double operator()(double x)
+    {
+        return x;
+    }
+};
+
+template<>
+struct real<const std::complex<double> &, std::complex<double>>
+{
+    inline std::complex<double> operator()(const std::complex<double> & z)
+    {
+        return z.real();
+    }
+};
+
+template<typename T, typename U = T>
+struct imag;
+
+template<>
+struct imag<double, double>
+{
+    inline double operator()(double x)
+    {
+        return 0;
+    }
+};
+
+template<>
+struct imag<const std::complex<double> &, double>
+{
+    inline double operator()(const std::complex<double> & z)
+    {
+        return z.imag();
+    }
+};
+
+template<typename T>
+struct is_strict_negative;
+
+template<>
+struct is_strict_negative<double>
+{
+    inline bool operator()(double x)
+    {
+        return x < 0;
+    }
+};
+
+} // namespace BaseFunctions
+
+} // namespace jit
+
+#endif // __BASE_ELEM_FUNCTIONS_HXX__
diff --git a/scilab/modules/ast/includes/jit/base/equal.hxx b/scilab/modules/ast/includes/jit/base/equal.hxx
new file mode 100644 (file)
index 0000000..8785d34
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ *  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_EQUAL_HXX__
+#define __BASE_EQUAL_HXX__
+
+#include <complex>
+
+#include "Cast.hxx"
+
+
+namespace jit
+{
+    namespace op
+    {
+
+       template<typename T, typename U, typename V>
+       struct Eq
+       {
+           typedef typename ScilabType<T, U>::type __type;
+           
+           inline V operator()(T x, U y)
+               {
+                   return (__type)x == (__type)y;
+               }
+       };
+
+       template<typename U, typename V>
+       struct Eq<const std::complex<double> &, U, V>
+       {
+
+           inline V operator()(const std::complex<double> & x, U y)
+               {
+                   return x == (double)y;
+               }
+       };
+
+       template<typename T, typename V>
+       struct Eq<T, const std::complex<double> &, V>
+       {
+
+           inline V operator()(T x, const std::complex<double> & y)
+               {
+                   return (double)x == y;
+               }
+       };
+
+       template<typename V>
+       struct Eq<const std::complex<double> &, const std::complex<double> &, V>
+       {
+
+           inline V operator()(const std::complex<double> & x, const std::complex<double> & y)
+               {
+                   return x == y;
+               }
+       };
+               
+
+    } // namespace op
+
+} // namespace jit
+
+#endif // __BASE_EQUAL_HXX__
diff --git a/scilab/modules/ast/includes/jit/base/exponentiation.hxx b/scilab/modules/ast/includes/jit/base/exponentiation.hxx
new file mode 100644 (file)
index 0000000..7837f87
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ *  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_EXPONENTIATION_HXX__
+#define __BASE_EXPONENTIATION_HXX__
+
+#include <complex>
+
+#include "Cast.hxx"
+
+
+namespace jit
+{
+    namespace op
+    {
+
+       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 jit
+
+#endif // __BASE_EXPONENTIATION_HXX__
diff --git a/scilab/modules/ast/includes/jit/base/functors.hxx b/scilab/modules/ast/includes/jit/base/functors.hxx
new file mode 100644 (file)
index 0000000..d0263f8
--- /dev/null
@@ -0,0 +1,259 @@
+/*
+*  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 __JIT_FUNCTORS_HXX__
+#define __JIT_FUNCTORS_HXX__
+
+#include "elem_functions.hxx"
+#include "tools.hxx"
+
+namespace jit
+{
+namespace functors
+{
+template<typename T, typename U, typename F>
+struct Unary
+{
+
+    const static bool as_usual = true;
+
+    template<typename V, typename W>
+    inline void operator()(jit::vect::WrapVecIn<V> && x, jit::vect::WrapOut<W> && o, const int64_t i)
+    {
+        o[i] = F()(x[i]);
+    }
+};
+
+template<typename USECPX, typename CPX, typename RE>
+struct Unary_cpx
+{
+    const static bool as_usual = false;
+
+    template<typename V>
+    inline void operator()(jit::vect::WrapVecIn<V> && x, jit::vect::WrapOut<jit::cpx_t> && o, const int64_t i, const int64_t size)
+    {
+        const double xi = (double)x[i];
+        if (USECPX()(xi))
+        {
+            o.initIm(size);
+            o[i] = CPX()(xi);
+        }
+        else
+        {
+            o[i] = RE()(xi);
+        }
+    }
+};
+
+template<typename T, typename U>
+using sin = Unary<T, U, jit::elem::sin<T, U>>;
+
+template<typename T, typename U>
+using cos = Unary<T, U, jit::elem::cos<T, U>>;
+
+template<typename T, typename U>
+using tan = Unary<T, U, jit::elem::tan<T, U>>;
+
+template<typename T, typename U>
+using tanh = Unary<T, U, jit::elem::tanh<T, U>>;
+
+template<typename T, typename U>
+using sinh = Unary<T, U, jit::elem::sinh<T, U>>;
+
+template<typename T, typename U>
+using cosh = Unary<T, U, jit::elem::cosh<T, U>>;
+
+template<typename T, typename U>
+using atan = Unary<T, U, jit::elem::atan<T, U>>;
+
+template<typename T, typename U>
+using abs = Unary<T, U, jit::elem::abs<T, U>>;
+
+template<typename T, typename U>
+using exp = Unary<T, U, jit::elem::exp<T, U>>;
+
+template<typename T, typename U>
+using sign = Unary<T, U, jit::elem::sign<T, U>>;
+
+template<typename T, typename U>
+using gamma = Unary<T, U, jit::elem::tgamma<T, U>>;
+
+template<typename T, typename U>
+using gammaln = Unary<T, U, jit::elem::lgamma<T, U>>;
+
+template<typename T, typename U>
+using ceil = Unary<T, U, jit::elem::ceil<T, U>>;
+
+template<typename T, typename U>
+using floor = Unary<T, U, jit::elem::floor<T, U>>;
+
+template<typename T, typename U>
+using round = Unary<T, U, jit::elem::round<T, U>>;
+
+template<typename T, typename U>
+using trunc = Unary<T, U, jit::elem::trunc<T, U>>;
+
+template<typename T, typename U>
+using fix = Unary<T, U, jit::elem::trunc<T, U>>;
+
+template<typename T, typename U>
+using int8 = Unary<T, U, jit::elem::cast<T, U>>;
+
+template<typename T, typename U>
+using int16 = Unary<T, U, jit::elem::cast<T, U>>;
+
+template<typename T, typename U>
+using int32 = Unary<T, U, jit::elem::cast<T, U>>;
+
+template<typename T, typename U>
+using int64 = Unary<T, U, jit::elem::cast<T, U>>;
+
+template<typename T, typename U>
+using uint8 = Unary<T, U, jit::elem::cast<T, U>>;
+
+template<typename T, typename U>
+using uint16 = Unary<T, U, jit::elem::cast<T, U>>;
+
+template<typename T, typename U>
+using uint32 = Unary<T, U, jit::elem::cast<T, U>>;
+
+template<typename T, typename U>
+using uint64 = Unary<T, U, jit::elem::cast<T, U>>;
+
+//template<typename T, typename U>
+//using erfi = Unary<T, U, jit::elem::erfi<T, U>>;
+//
+//template<typename T, typename U>
+//using erfcx = Unary<T, U, jit::elem::erfcx<T, U>>;
+//
+//template<typename T, typename U>
+//using erf = Unary<T, U, jit::elem::erf<T, U>>;
+//
+//template<typename T, typename U>
+//using erfc = Unary<T, U, jit::elem::erfc<T, U>>;
+
+template<typename T, typename U>
+using real = Unary<T, U, jit::elem::real<T, U>>;
+
+template<typename T, typename U>
+using imag = Unary<T, U, jit::elem::imag<T, U>>;
+
+template<typename T, typename U>
+struct log
+{
+    typedef jit::functors::Unary<T, U, jit::elem::log<T, U>> F;
+    const static bool as_usual = F::as_usual;
+
+    template<typename V, typename W>
+    inline void operator()(jit::vect::WrapVecIn<V> && x, jit::vect::WrapOut<W> && o, const int64_t i)
+    {
+        F()(std::move(x), std::move(o), i);
+    }
+};
+
+template<>
+struct log<double, jit::cpx_t>
+{
+    typedef jit::functors::Unary_cpx<jit::elem::is_strict_negative<double>, jit::elem::log_neg<double, std::complex<double>>, jit::elem::log<double, double>> F;
+    const static bool as_usual = F::as_usual;
+
+    template<typename V>
+    inline void operator()(jit::vect::WrapVecIn<V> && x, jit::vect::WrapOut<jit::cpx_t> && o, const int64_t i, const int64_t size)
+    {
+        F()(std::move(x), std::move(o), i, size);
+    }
+};
+
+template<typename T, typename U>
+struct log2
+{
+    typedef jit::functors::Unary<T, U, jit::elem::log2<T, U>> F;
+    const static bool as_usual = F::as_usual;
+
+    template<typename V, typename W>
+    inline void operator()(jit::vect::WrapVecIn<V> && x, jit::vect::WrapOut<W> && o, const int64_t i)
+    {
+        F()(std::move(x), std::move(o), i);
+    }
+};
+
+template<>
+struct log2<double, jit::cpx_t>
+{
+    typedef jit::functors::Unary_cpx<jit::elem::is_strict_negative<double>, jit::elem::log2_neg<double, std::complex<double>>, jit::elem::log2<double, double>> F;
+    const static bool as_usual = F::as_usual;
+
+    template<typename V>
+    inline void operator()(jit::vect::WrapVecIn<V> && x, jit::vect::WrapOut<jit::cpx_t> && o, const int64_t i, const int64_t size)
+    {
+        F()(std::move(x), std::move(o), i, size);
+    }
+};
+
+template<typename T, typename U>
+struct log10
+{
+    typedef jit::functors::Unary<T, U, jit::elem::log10<T, U>> F;
+    const static bool as_usual = F::as_usual;
+
+    template<typename V, typename W>
+    inline void operator()(jit::vect::WrapVecIn<V> && x, jit::vect::WrapOut<W> && o, const int64_t i)
+    {
+        F()(std::move(x), std::move(o), i);
+    }
+};
+
+template<>
+struct log10<double, jit::cpx_t>
+{
+    typedef jit::functors::Unary_cpx<jit::elem::is_strict_negative<double>, jit::elem::log10_neg<double, std::complex<double>>, jit::elem::log10<double, double>> F;
+    const static bool as_usual = F::as_usual;
+
+    template<typename V>
+    inline void operator()(jit::vect::WrapVecIn<V> && x, jit::vect::WrapOut<jit::cpx_t> && o, const int64_t i, const int64_t size)
+    {
+        F()(std::move(x), std::move(o), i, size);
+    }
+};
+
+
+template<typename T, typename U>
+struct sqrt
+{
+    typedef jit::functors::Unary<T, U, jit::elem::sqrt<T, U>> F;
+    const static bool as_usual = F::as_usual;
+
+    template<typename V, typename W>
+    inline void operator()(jit::vect::WrapVecIn<V> && x, jit::vect::WrapOut<W> && o, const int64_t i)
+    {
+        F()(std::move(x), std::move(o), i);
+    }
+};
+
+template<>
+struct sqrt<double, jit::cpx_t>
+{
+    typedef jit::functors::Unary_cpx<jit::elem::is_strict_negative<double>, jit::elem::sqrt_neg<double, std::complex<double>>, jit::elem::sqrt<double, double>> F;
+    const static bool as_usual = F::as_usual;
+
+    template<typename V>
+    inline void operator()(jit::vect::WrapVecIn<V> && x, jit::vect::WrapOut<jit::cpx_t> && o, const int64_t i, const int64_t size)
+    {
+        F()(std::move(x), std::move(o), i, size);
+    }
+};
+
+} // namespace functors
+
+} // namespace jit
+
+#endif // __JIT_FUNCTORS_HXX__
diff --git a/scilab/modules/ast/includes/jit/base/greater_or_eq.hxx b/scilab/modules/ast/includes/jit/base/greater_or_eq.hxx
new file mode 100644 (file)
index 0000000..d86b29b
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ *  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_GREATER_OR_EQ_HXX__
+#define __BASE_GREATER_OR_EQ_HXX__
+
+#include "Cast.hxx"
+
+namespace jit
+{
+    namespace op
+    {
+
+       template<typename T, typename U, typename V>
+       struct Ge
+       {
+           typedef typename ScilabType<T, U>::type __type;
+           
+           inline V operator()(T x, U y)
+               {
+                   return (__type)x >= (__type)y;
+               }
+       };
+
+    } // namespace op
+
+} // namespace jit
+
+#endif // __BASE_GREATER_OR_EQ_HXX__
diff --git a/scilab/modules/ast/includes/jit/base/greater_than.hxx b/scilab/modules/ast/includes/jit/base/greater_than.hxx
new file mode 100644 (file)
index 0000000..b2b1649
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ *  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_GREATER_THAN_HXX__
+#define __BASE_GREATER_THAN_HXX__
+
+#include "Cast.hxx"
+
+namespace jit
+{
+    namespace op
+    {
+
+       template<typename T, typename U, typename V>
+       struct Gt
+       {
+           typedef typename ScilabType<T, U>::type __type;
+           
+           inline V operator()(T x, U y)
+               {
+                   return (__type)x > (__type)y;
+               }
+       };
+
+    } // namespace op
+
+} // namespace jit
+
+#endif // __BASE_GREATER_THAN_HXX__
diff --git a/scilab/modules/ast/includes/jit/base/ldivision.hxx b/scilab/modules/ast/includes/jit/base/ldivision.hxx
new file mode 100644 (file)
index 0000000..5793cba
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ *  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_LDIVISIONS_HXX__
+#define __BASE_LDIVISIONS_HXX__
+
+#include <complex>
+
+#include "Cast.hxx"
+
+
+namespace jit
+{
+    namespace op
+    {
+
+       template<typename T, typename U, typename V>
+       struct Ldiv
+       {
+
+           inline V operator()(T x, U y)
+               {
+                   return (V)y / (V)x;
+               }
+       };
+       
+       template<typename U>
+       struct Ldiv<const std::complex<double> &, U, std::complex<double>>
+       {
+
+           inline std::complex<double> operator()(const std::complex<double> & x, U y)
+               {
+                   return (double)y / x;
+               }
+       };
+
+       template<typename T>
+       struct Ldiv<T, const std::complex<double> &, std::complex<double>>
+       {
+
+           inline std::complex<double> operator()(T x, const std::complex<double> & y)
+               {
+                   return y / (double)x;
+               }
+       };
+
+       template<>
+       struct Ldiv<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 y / x;
+               }
+       };
+
+    } // namespace op
+
+} // namespace jit
+
+#endif // __BASELDIVISIONS_HXX__
diff --git a/scilab/modules/ast/includes/jit/base/lower_or_eq.hxx b/scilab/modules/ast/includes/jit/base/lower_or_eq.hxx
new file mode 100644 (file)
index 0000000..bf16c24
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ *  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_LOWER_OR_EQ_HXX__
+#define __BASE_LOWER_OR_EQ_HXX__
+
+#include "Cast.hxx"
+
+namespace jit
+{
+    namespace op
+    {
+
+       template<typename T, typename U, typename V>
+       struct Le
+       {
+           typedef typename ScilabType<T, U>::type __type;
+           
+           inline V operator()(T x, U y)
+               {
+                   return (__type)x >= (__type)y;
+               }
+       };
+
+    } // namespace op
+
+} // namespace jit
+
+#endif // __BASE_LOWER_OR_EQ_HXX__
diff --git a/scilab/modules/ast/includes/jit/base/lower_than.hxx b/scilab/modules/ast/includes/jit/base/lower_than.hxx
new file mode 100644 (file)
index 0000000..07fdd5f
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ *  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_LOWER_THAN_HXX__
+#define __BASE_LOWER_THAN_HXX__
+
+#include "Cast.hxx"
+
+namespace jit
+{
+    namespace op
+    {
+
+       template<typename T, typename U, typename V>
+       struct Lt
+       {
+           typedef typename ScilabType<T, U>::type __type;
+           
+           inline V operator()(T x, U y)
+               {
+                   return (__type)x < (__type)y;
+               }
+       };
+
+
+    } // namespace op
+
+} // namespace jit
+
+#endif // __BASE_LOWER_THAN_HXX__
diff --git a/scilab/modules/ast/includes/jit/base/not_equal.hxx b/scilab/modules/ast/includes/jit/base/not_equal.hxx
new file mode 100644 (file)
index 0000000..84ab0e1
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+ *  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_NOT_EQUAL_HXX__
+#define __BASE_NOT_EQUAL_HXX__
+
+#include <complex>
+
+#include "Cast.hxx"
+
+
+namespace jit
+{
+    namespace op
+    {
+
+       template<typename T, typename U, typename V>
+       struct Neq
+       {
+           typedef typename ScilabType<T, U>::type __type;
+           
+           inline V operator()(T x, U y)
+               {
+                   return (__type)x != (__type)y;
+               }
+       };
+
+       template<typename U, typename V>
+       struct Neq<const std::complex<double> &, U, V>
+       {
+
+           inline V operator()(const std::complex<double> & x, U y)
+               {
+                   return x != (double)y;
+               }
+       };
+
+       template<typename T, typename V>
+       struct Neq<T, const std::complex<double> &, V>
+       {
+
+           inline V operator()(T x, const std::complex<double> & y)
+               {
+                   return (double)x != y;
+               }
+       };
+
+       template<typename V>
+       struct Neq<const std::complex<double> &, const std::complex<double> &, V>
+       {
+
+           inline V operator()(const std::complex<double> & x, const std::complex<double> & y)
+               {
+                   return x != y;
+               }
+       };
+               
+    } // namespace op
+
+} // namespace jit
+
+#endif // __BASE_NOT_EQUAL_HXX__
diff --git a/scilab/modules/ast/includes/jit/base/or.hxx b/scilab/modules/ast/includes/jit/base/or.hxx
new file mode 100644 (file)
index 0000000..f7b3f92
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ *  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_OR_HXX__
+#define __BASE_OR_HXX__
+
+#include <complex>
+
+#include "Cast.hxx"
+
+namespace jit
+{
+    namespace op
+    {
+
+       template<bool are_integral, typename T, typename U, typename V>
+       struct __Or_helper;
+
+       template<typename T, typename U, typename V>
+       struct __Or_helper<true, T, U, V>
+       {
+           inline V operator()(T x, U y)
+               {
+                   return (V)x | (V)y;
+               }
+       };
+
+       template<typename T, typename U, typename V>
+       struct __Or_helper<false, T, U, V>
+       {
+           inline V operator()(T x, U y)
+               {
+                   return (x != 0) || (y != 0);
+               }
+       };
+
+       template<typename U, typename V>
+       struct __Or_helper<false, const std::complex<double> &, U, V>
+       {
+
+           inline V operator()(const std::complex<double> & x, U y)
+               {
+                   return (x != 0.) || ((double)y != 0);
+               }
+       };
+
+       template<typename T, typename V>
+       struct __Or_helper<false, T, const std::complex<double> &, V>
+       {
+
+           inline V operator()(T x, const std::complex<double> & y)
+               {
+                   return ((double)x != 0.) || (y != 0.);
+               }
+       };
+
+       template<typename V>
+       struct __Or_helper<false, const std::complex<double> &, const std::complex<double> &, V>
+       {
+
+           inline V operator()(const std::complex<double> & x, const std::complex<double> & y)
+               {
+                   return (x != 0.) || (y != 0.);
+               }
+       };
+
+       template<typename T, typename U, typename V>
+       struct Or
+       {
+           inline V operator()(T x, U y)
+               {
+                   return __Or_helper<jit::is_pure_integral<T>::value && jit::is_pure_integral<U>::value, T, U, V>()(x, y);
+               }
+       };
+
+    } // namespace op
+
+} // namespace jit
+
+#endif // __BASE_OR_HXX__
diff --git a/scilab/modules/ast/includes/jit/base/product.hxx b/scilab/modules/ast/includes/jit/base/product.hxx
new file mode 100644 (file)
index 0000000..bf76aff
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ *  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_PRODUCTS_HXX__
+#define __BASE_PRODUCTS_HXX__
+
+#include <complex>
+
+#include "Cast.hxx"
+
+
+namespace jit
+{
+    namespace op
+    {
+
+       template<type