00001
00002 #include <basix/int.hpp>
00003 #include <basix/table.hpp>
00004 #include <basix/glue.hpp>
00005
00006 #define int_literal(x) as_int (as_string (x))
00007
00008 namespace mmx {
00009 static mmx_table(generic, generic)
00010 GLUE_1 (const mmx_table(generic, generic) &arg_1) {
00011 return -arg_1;
00012 }
00013
00014 static mmx_table(generic, generic)
00015 GLUE_2 (const mmx_table(generic, generic) &arg_1) {
00016 return square (arg_1);
00017 }
00018
00019 static mmx_table(generic, generic)
00020 GLUE_3 (const mmx_table(generic, generic) &arg_1, const mmx_table(generic, generic) &arg_2) {
00021 return arg_1 + arg_2;
00022 }
00023
00024 static mmx_table(generic, generic)
00025 GLUE_4 (const mmx_table(generic, generic) &arg_1, const mmx_table(generic, generic) &arg_2) {
00026 return arg_1 - arg_2;
00027 }
00028
00029 static mmx_table(generic, generic)
00030 GLUE_5 (const mmx_table(generic, generic) &arg_1, const mmx_table(generic, generic) &arg_2) {
00031 return arg_1 * arg_2;
00032 }
00033
00034 static mmx_table(generic, generic)
00035 GLUE_6 (const mmx_table(generic, generic) &arg_1, const mmx_table(generic, generic) &arg_2) {
00036 return arg_1 / arg_2;
00037 }
00038
00039 static bool
00040 GLUE_7 (const mmx_table(generic, generic) &arg_1, const mmx_table(generic, generic) &arg_2) {
00041 return arg_1 <= arg_2;
00042 }
00043
00044 static bool
00045 GLUE_8 (const mmx_table(generic, generic) &arg_1, const mmx_table(generic, generic) &arg_2) {
00046 return arg_1 >= arg_2;
00047 }
00048
00049 static bool
00050 GLUE_9 (const mmx_table(generic, generic) &arg_1, const mmx_table(generic, generic) &arg_2) {
00051 return arg_1 < arg_2;
00052 }
00053
00054 static bool
00055 GLUE_10 (const mmx_table(generic, generic) &arg_1, const mmx_table(generic, generic) &arg_2) {
00056 return arg_1 > arg_2;
00057 }
00058
00059 static mmx_table(generic, generic)
00060 GLUE_11 (const mmx_table(generic, generic) &arg_1) {
00061 return sqrt (arg_1);
00062 }
00063
00064 static mmx_table(generic, generic)
00065 GLUE_12 (const mmx_table(generic, generic) &arg_1) {
00066 return exp (arg_1);
00067 }
00068
00069 static mmx_table(generic, generic)
00070 GLUE_13 (const mmx_table(generic, generic) &arg_1) {
00071 return log (arg_1);
00072 }
00073
00074 static mmx_table(generic, generic)
00075 GLUE_14 (const mmx_table(generic, generic) &arg_1, const mmx_table(generic, generic) &arg_2) {
00076 return pow (arg_1, arg_2);
00077 }
00078
00079 static mmx_table(generic, generic)
00080 GLUE_15 (const mmx_table(generic, generic) &arg_1) {
00081 return cos (arg_1);
00082 }
00083
00084 static mmx_table(generic, generic)
00085 GLUE_16 (const mmx_table(generic, generic) &arg_1) {
00086 return sin (arg_1);
00087 }
00088
00089 static mmx_table(generic, generic)
00090 GLUE_17 (const mmx_table(generic, generic) &arg_1) {
00091 return tan (arg_1);
00092 }
00093
00094 static mmx_table(generic, generic)
00095 GLUE_18 (const mmx_table(generic, generic) &arg_1) {
00096 return acos (arg_1);
00097 }
00098
00099 static mmx_table(generic, generic)
00100 GLUE_19 (const mmx_table(generic, generic) &arg_1) {
00101 return asin (arg_1);
00102 }
00103
00104 static mmx_table(generic, generic)
00105 GLUE_20 (const mmx_table(generic, generic) &arg_1) {
00106 return atan (arg_1);
00107 }
00108
00109 void
00110 glue_table_generic () {
00111 static bool done = false;
00112 if (done) return;
00113 done = true;
00114 call_glue (string ("glue_basix_table_generic"));
00115 define ("-", GLUE_1);
00116 define ("square", GLUE_2);
00117 define ("+", GLUE_3);
00118 define ("-", GLUE_4);
00119 define ("*", GLUE_5);
00120 define ("/", GLUE_6);
00121 define ("<=", GLUE_7);
00122 define (">=", GLUE_8);
00123 define ("<", GLUE_9);
00124 define (">", GLUE_10);
00125 define ("sqrt", GLUE_11);
00126 define ("exp", GLUE_12);
00127 define ("log", GLUE_13);
00128 define ("^", GLUE_14);
00129 define ("cos", GLUE_15);
00130 define ("sin", GLUE_16);
00131 define ("tan", GLUE_17);
00132 define ("arccos", GLUE_18);
00133 define ("arcsin", GLUE_19);
00134 define ("arctan", GLUE_20);
00135 }
00136 }