00001
00002 #include <basix/int.hpp>
00003 #include <basix/vector.hpp>
00004 #include <algebramix/vector_unrolled.hpp>
00005 #include <algebramix/vector_simd.hpp>
00006 #include <basix/glue.hpp>
00007
00008 #define int_literal(x) as_int (as_string (x))
00009
00010 namespace mmx {
00011 static vector<generic>
00012 GLUE_1 (const vector<generic> &arg_1) {
00013 return -arg_1;
00014 }
00015
00016 static vector<generic>
00017 GLUE_2 (const vector<generic> &arg_1) {
00018 return square (arg_1);
00019 }
00020
00021 static vector<generic>
00022 GLUE_3 (const vector<generic> &arg_1, const vector<generic> &arg_2) {
00023 return arg_1 + arg_2;
00024 }
00025
00026 static vector<generic>
00027 GLUE_4 (const vector<generic> &arg_1, const vector<generic> &arg_2) {
00028 return arg_1 - arg_2;
00029 }
00030
00031 static vector<generic>
00032 GLUE_5 (const vector<generic> &arg_1, const vector<generic> &arg_2) {
00033 return arg_1 * arg_2;
00034 }
00035
00036 static generic
00037 GLUE_6 (const vector<generic> &arg_1, const vector<generic> &arg_2) {
00038 return dot (arg_1, arg_2);
00039 }
00040
00041 static generic
00042 GLUE_7 (const vector<generic> &arg_1) {
00043 return big_mul (arg_1);
00044 }
00045
00046 static generic
00047 GLUE_8 (const vector<generic> &arg_1) {
00048 return big_add (arg_1);
00049 }
00050
00051 static bool
00052 GLUE_9 (const vector<generic> &arg_1, const vector<generic> &arg_2) {
00053 return arg_1 == arg_2;
00054 }
00055
00056 static bool
00057 GLUE_10 (const vector<generic> &arg_1, const vector<generic> &arg_2) {
00058 return arg_1 != arg_2;
00059 }
00060
00061 static vector<generic>
00062 GLUE_11 (const vector<generic> &arg_1) {
00063 return invert (arg_1);
00064 }
00065
00066 static vector<generic>
00067 GLUE_12 (const vector<generic> &arg_1, const vector<generic> &arg_2) {
00068 return arg_1 / arg_2;
00069 }
00070
00071 static bool
00072 GLUE_13 (const vector<generic> &arg_1, const vector<generic> &arg_2) {
00073 return arg_1 <= arg_2;
00074 }
00075
00076 static bool
00077 GLUE_14 (const vector<generic> &arg_1, const vector<generic> &arg_2) {
00078 return arg_1 >= arg_2;
00079 }
00080
00081 static bool
00082 GLUE_15 (const vector<generic> &arg_1, const vector<generic> &arg_2) {
00083 return arg_1 < arg_2;
00084 }
00085
00086 static bool
00087 GLUE_16 (const vector<generic> &arg_1, const vector<generic> &arg_2) {
00088 return arg_1 > arg_2;
00089 }
00090
00091 static vector<generic>
00092 GLUE_17 (const vector<generic> &arg_1, const vector<generic> &arg_2) {
00093 return inf (arg_1, arg_2);
00094 }
00095
00096 static vector<generic>
00097 GLUE_18 (const vector<generic> &arg_1, const vector<generic> &arg_2) {
00098 return sup (arg_1, arg_2);
00099 }
00100
00101 static vector<generic>
00102 GLUE_19 (const vector<generic> &arg_1, const vector<generic> &arg_2) {
00103 return pow (arg_1, arg_2);
00104 }
00105
00106 static vector<generic>
00107 GLUE_20 (const vector<generic> &arg_1) {
00108 return sqrt (arg_1);
00109 }
00110
00111 static vector<generic>
00112 GLUE_21 (const vector<generic> &arg_1) {
00113 return exp (arg_1);
00114 }
00115
00116 static vector<generic>
00117 GLUE_22 (const vector<generic> &arg_1) {
00118 return log (arg_1);
00119 }
00120
00121 static vector<generic>
00122 GLUE_23 (const vector<generic> &arg_1) {
00123 return cos (arg_1);
00124 }
00125
00126 static vector<generic>
00127 GLUE_24 (const vector<generic> &arg_1) {
00128 return sin (arg_1);
00129 }
00130
00131 static vector<generic>
00132 GLUE_25 (const vector<generic> &arg_1) {
00133 return tan (arg_1);
00134 }
00135
00136 static vector<generic>
00137 GLUE_26 (const vector<generic> &arg_1) {
00138 return acos (arg_1);
00139 }
00140
00141 static vector<generic>
00142 GLUE_27 (const vector<generic> &arg_1) {
00143 return asin (arg_1);
00144 }
00145
00146 static vector<generic>
00147 GLUE_28 (const vector<generic> &arg_1) {
00148 return atan (arg_1);
00149 }
00150
00151 static vector<generic>
00152 GLUE_29 (const vector<generic> &arg_1) {
00153 return derive (arg_1);
00154 }
00155
00156 static vector<generic>
00157 GLUE_30 (const vector<generic> &arg_1) {
00158 return integrate (arg_1);
00159 }
00160
00161 void
00162 glue_vector_generic () {
00163 static bool done = false;
00164 if (done) return;
00165 done = true;
00166 call_glue (string ("glue_basix_vector_generic"));
00167 define ("-", GLUE_1);
00168 define ("square", GLUE_2);
00169 define ("+", GLUE_3);
00170 define ("-", GLUE_4);
00171 define ("*", GLUE_5);
00172 define ("dot", GLUE_6);
00173 define ("big_mul", GLUE_7);
00174 define ("big_add", GLUE_8);
00175 define ("=", GLUE_9);
00176 define ("!=", GLUE_10);
00177 define ("invert", GLUE_11);
00178 define ("/", GLUE_12);
00179 define ("<=", GLUE_13);
00180 define (">=", GLUE_14);
00181 define ("<", GLUE_15);
00182 define (">", GLUE_16);
00183 define ("inf", GLUE_17);
00184 define ("sup", GLUE_18);
00185 define ("^", GLUE_19);
00186 define ("sqrt", GLUE_20);
00187 define ("exp", GLUE_21);
00188 define ("log", GLUE_22);
00189 define ("cos", GLUE_23);
00190 define ("sin", GLUE_24);
00191 define ("tan", GLUE_25);
00192 define ("arccos", GLUE_26);
00193 define ("arcsin", GLUE_27);
00194 define ("arctan", GLUE_28);
00195 define ("derive", GLUE_29);
00196 define ("integrate", GLUE_30);
00197 }
00198 }