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 }