00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00040 #include "topcode.h"
00041 #include "isa_pseudo_gen.h"
00042
00043 main()
00044 {
00045 ISA_Pseudo_Begin("ia64");
00046
00047
00048
00049 Machine_To_Pseudo(TOP_alloc, TOP_alloc_3);
00050 Map_Arg("RESULT(0)", "RESULT(0)");
00051 Map_Arg("OPND(0)", "0");
00052 Map_Arg("OPND(1)", "OPND(1)");
00053 Map_Arg("OPND(2)", "OPND(0) - OPND(1)");
00054 Map_Arg("OPND(3)", "OPND(2)");
00055
00056 Machine_To_Pseudo(TOP_br, TOP_br_cond);
00057 Require("OPND(0) == 0");
00058 Require("OPND(1) == 0");
00059 Map_Arg("OPND(0)", "OPND(2)");
00060 Map_Arg("OPND(1)", "OPND(3)");
00061 Map_Arg("OPND(2)", "OPND(4)");
00062
00063 Machine_To_Pseudo(TOP_br_r, TOP_br_r_cond);
00064 Require("OPND(0) == 0");
00065 Require("OPND(1) == 0");
00066 Map_Arg("OPND(0)", "OPND(2)");
00067 Map_Arg("OPND(1)", "OPND(3)");
00068 Map_Arg("OPND(2)", "OPND(4)");
00069
00070 Machine_To_Pseudo(TOP_brl, TOP_brl_cond);
00071 Require("OPND(0) == 0");
00072 Require("OPND(1) == 0");
00073 Map_Arg("OPND(0)", "OPND(2)");
00074 Map_Arg("OPND(1)", "OPND(3)");
00075 Map_Arg("OPND(2)", "OPND(4)");
00076
00077 Machine_To_Pseudo(TOP_fabs, TOP_fmerge_s);
00078 Require("OPND(1) == 0");
00079 Map_Arg("RESULT(0)", "RESULT(0)");
00080 Map_Arg("OPND(0)", "OPND(0)");
00081 Map_Arg("OPND(1)", "OPND(2)");
00082
00083 Machine_To_Pseudo(TOP_fadd, TOP_fma);
00084 Require("OPND(3) == 1");
00085 Map_Arg("RESULT(0)", "RESULT(0)");
00086 Map_Arg("OPND(0)", "OPND(0)");
00087 Map_Arg("OPND(1)", "OPND(1)");
00088 Map_Arg("OPND(2)", "OPND(2)");
00089 Map_Arg("OPND(3)", "OPND(4)");
00090
00091 Machine_To_Pseudo(TOP_fadd_d, TOP_fma_d);
00092 Require("OPND(3) == 1");
00093 Map_Arg("RESULT(0)", "RESULT(0)");
00094 Map_Arg("OPND(0)", "OPND(0)");
00095 Map_Arg("OPND(1)", "OPND(1)");
00096 Map_Arg("OPND(2)", "OPND(2)");
00097 Map_Arg("OPND(3)", "OPND(4)");
00098
00099 Machine_To_Pseudo(TOP_fadd_s, TOP_fma_s);
00100 Require("OPND(3) == 1");
00101 Map_Arg("RESULT(0)", "RESULT(0)");
00102 Map_Arg("OPND(0)", "OPND(0)");
00103 Map_Arg("OPND(1)", "OPND(1)");
00104 Map_Arg("OPND(2)", "OPND(2)");
00105 Map_Arg("OPND(3)", "OPND(4)");
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116 Machine_To_Pseudo(TOP_fmpy, TOP_fma);
00117 Require("OPND(4) == 0");
00118 Map_Arg("RESULT(0)", "RESULT(0)");
00119 Map_Arg("OPND(0)", "OPND(0)");
00120 Map_Arg("OPND(1)", "OPND(1)");
00121 Map_Arg("OPND(2)", "OPND(2)");
00122 Map_Arg("OPND(3)", "OPND(3)");
00123
00124 Machine_To_Pseudo(TOP_fmpy_s, TOP_fma_s);
00125 Require("OPND(4) == 0");
00126 Map_Arg("RESULT(0)", "RESULT(0)");
00127 Map_Arg("OPND(0)", "OPND(0)");
00128 Map_Arg("OPND(1)", "OPND(1)");
00129 Map_Arg("OPND(2)", "OPND(2)");
00130 Map_Arg("OPND(3)", "OPND(3)");
00131
00132 Machine_To_Pseudo(TOP_fmpy_d, TOP_fma_d);
00133 Require("OPND(4) == 0");
00134 Map_Arg("RESULT(0)", "RESULT(0)");
00135 Map_Arg("OPND(0)", "OPND(0)");
00136 Map_Arg("OPND(1)", "OPND(1)");
00137 Map_Arg("OPND(2)", "OPND(2)");
00138 Map_Arg("OPND(3)", "OPND(3)");
00139
00140 Machine_To_Pseudo(TOP_fneg, TOP_fmerge_ns);
00141 Require("OPND(1) == OPND(2)");
00142 Map_Arg("RESULT(0)", "RESULT(0)");
00143 Map_Arg("OPND(0)", "OPND(0)");
00144 Map_Arg("OPND(1)", "OPND(1)");
00145
00146 Machine_To_Pseudo(TOP_fnegabs, TOP_fmerge_ns);
00147 Require("OPND(1) == 0");
00148 Map_Arg("RESULT(0)", "RESULT(0)");
00149 Map_Arg("OPND(0)", "OPND(0)");
00150 Map_Arg("OPND(1)", "OPND(2)");
00151
00152 Machine_To_Pseudo(TOP_fnmpy, TOP_fnma);
00153 Require("OPND(4) == 0");
00154 Map_Arg("RESULT(0)", "RESULT(0)");
00155 Map_Arg("OPND(0)", "OPND(0)");
00156 Map_Arg("OPND(1)", "OPND(1)");
00157 Map_Arg("OPND(2)", "OPND(2)");
00158 Map_Arg("OPND(3)", "OPND(3)");
00159
00160 Machine_To_Pseudo(TOP_fnmpy_s, TOP_fnma_s);
00161 Require("OPND(4) == 0");
00162 Map_Arg("RESULT(0)", "RESULT(0)");
00163 Map_Arg("OPND(0)", "OPND(0)");
00164 Map_Arg("OPND(1)", "OPND(1)");
00165 Map_Arg("OPND(2)", "OPND(2)");
00166 Map_Arg("OPND(3)", "OPND(3)");
00167
00168 Machine_To_Pseudo(TOP_fnmpy_d, TOP_fnma_d);
00169 Require("OPND(4) == 0");
00170 Map_Arg("RESULT(0)", "RESULT(0)");
00171 Map_Arg("OPND(0)", "OPND(0)");
00172 Map_Arg("OPND(1)", "OPND(1)");
00173 Map_Arg("OPND(2)", "OPND(2)");
00174 Map_Arg("OPND(3)", "OPND(3)");
00175
00176 Machine_To_Pseudo(TOP_fnorm, TOP_fma);
00177 Require("OPND(3) == 1");
00178 Require("OPND(4) == 0");
00179 Map_Arg("RESULT(0)", "RESULT(0)");
00180 Map_Arg("OPND(0)", "OPND(0)");
00181 Map_Arg("OPND(1)", "OPND(1)");
00182 Map_Arg("OPND(2)", "OPND(2)");
00183
00184 Machine_To_Pseudo(TOP_fnorm_s, TOP_fma_s);
00185 Require("OPND(3) == 1");
00186 Require("OPND(4) == 0");
00187 Map_Arg("RESULT(0)", "RESULT(0)");
00188 Map_Arg("OPND(0)", "OPND(0)");
00189 Map_Arg("OPND(1)", "OPND(1)");
00190 Map_Arg("OPND(2)", "OPND(2)");
00191
00192 Machine_To_Pseudo(TOP_fnorm_d, TOP_fma_d);
00193 Require("OPND(3) == 1");
00194 Require("OPND(4) == 0");
00195 Map_Arg("RESULT(0)", "RESULT(0)");
00196 Map_Arg("OPND(0)", "OPND(0)");
00197 Map_Arg("OPND(1)", "OPND(1)");
00198 Map_Arg("OPND(2)", "OPND(2)");
00199
00200 Machine_To_Pseudo(TOP_fpabs, TOP_fpmerge_s);
00201 Require("OPND(1) == 0");
00202 Map_Arg("RESULT(0)", "RESULT(0)");
00203 Map_Arg("OPND(0)", "OPND(0)");
00204 Map_Arg("OPND(1)", "OPND(2)");
00205
00206 Machine_To_Pseudo(TOP_fpmpy, TOP_fpma);
00207 Require("OPND(4) == 0");
00208 Map_Arg("RESULT(0)", "RESULT(0)");
00209 Map_Arg("OPND(0)", "OPND(0)");
00210 Map_Arg("OPND(1)", "OPND(1)");
00211 Map_Arg("OPND(2)", "OPND(2)");
00212 Map_Arg("OPND(3)", "OPND(3)");
00213
00214 Machine_To_Pseudo(TOP_fpneg, TOP_fpmerge_ns);
00215 Require("OPND(1) == OPND(2)");
00216 Map_Arg("RESULT(0)", "RESULT(0)");
00217 Map_Arg("OPND(0)", "OPND(0)");
00218 Map_Arg("OPND(1)", "OPND(1)");
00219
00220 Machine_To_Pseudo(TOP_fpnegabs, TOP_fpmerge_ns);
00221 Require("OPND(1) == 0");
00222 Map_Arg("RESULT(0)", "RESULT(0)");
00223 Map_Arg("OPND(0)", "OPND(0)");
00224 Map_Arg("OPND(1)", "OPND(2)");
00225
00226 Machine_To_Pseudo(TOP_fpnmpy, TOP_fpnma);
00227 Require("OPND(4) == 0");
00228 Map_Arg("RESULT(0)", "RESULT(0)");
00229 Map_Arg("OPND(0)", "OPND(0)");
00230 Map_Arg("OPND(1)", "OPND(1)");
00231 Map_Arg("OPND(2)", "OPND(2)");
00232 Map_Arg("OPND(3)", "OPND(3)");
00233
00234 Machine_To_Pseudo(TOP_fsub, TOP_fms);
00235 Require("OPND(3) == 1");
00236 Map_Arg("RESULT(0)", "RESULT(0)");
00237 Map_Arg("OPND(0)", "OPND(0)");
00238 Map_Arg("OPND(1)", "OPND(1)");
00239 Map_Arg("OPND(2)", "OPND(2)");
00240 Map_Arg("OPND(3)", "OPND(4)");
00241
00242 Machine_To_Pseudo(TOP_fsub_s, TOP_fms_s);
00243 Require("OPND(3) == 1");
00244 Map_Arg("RESULT(0)", "RESULT(0)");
00245 Map_Arg("OPND(0)", "OPND(0)");
00246 Map_Arg("OPND(1)", "OPND(1)");
00247 Map_Arg("OPND(2)", "OPND(2)");
00248 Map_Arg("OPND(3)", "OPND(4)");
00249
00250 Machine_To_Pseudo(TOP_fsub_d, TOP_fms_d);
00251 Require("OPND(3) == 1");
00252 Map_Arg("RESULT(0)", "RESULT(0)");
00253 Map_Arg("OPND(0)", "OPND(0)");
00254 Map_Arg("OPND(1)", "OPND(1)");
00255 Map_Arg("OPND(2)", "OPND(2)");
00256 Map_Arg("OPND(3)", "OPND(4)");
00257
00258 Machine_To_Pseudo(TOP_mov_t_br, TOP_mov_t_br_i);
00259 Require("OPND(1) == 1");
00260 Require("OPND(2) == 0");
00261 Require("OPND(4) == 0");
00262 Map_Arg("RESULT(0)", "RESULT(0)");
00263 Map_Arg("OPND(0)", "OPND(0)");
00264 Map_Arg("OPND(1)", "OPND(3)");
00265
00266 Machine_To_Pseudo(TOP_mov_f, TOP_fmerge_s);
00267 Require("OPND(1) == OPND(2)");
00268 Map_Arg("RESULT(0)", "RESULT(0)");
00269 Map_Arg("OPND(0)", "OPND(0)");
00270 Map_Arg("OPND(1)", "OPND(1)");
00271
00272 Machine_To_Pseudo(TOP_mov, TOP_adds);
00273 Require("OPND(1) == 0");
00274 Map_Arg("RESULT(0)", "RESULT(0)");
00275 Map_Arg("OPND(0)", "OPND(0)");
00276 Map_Arg("OPND(1)", "OPND(2)");
00277
00278 Machine_To_Pseudo(TOP_mov_i, TOP_addl);
00279 Require("OPND(2) == 0");
00280 Map_Arg("RESULT(0)", "RESULT(0)");
00281 Map_Arg("OPND(0)", "OPND(0)");
00282 Map_Arg("OPND(1)", "OPND(1)");
00283
00284 Machine_To_Pseudo(TOP_shl_i, TOP_dep_z);
00285 Require("OPND(2) == 64 - OPND(3)");
00286 Map_Arg("RESULT(0)", "RESULT(0)");
00287 Map_Arg("OPND(0)", "OPND(0)");
00288 Map_Arg("OPND(1)", "OPND(1)");
00289 Map_Arg("OPND(2)", "OPND(2)");
00290
00291 Machine_To_Pseudo(TOP_shr_i, TOP_extr);
00292 Require("OPND(2) == 64 - OPND(3)");
00293 Map_Arg("RESULT(0)", "RESULT(0)");
00294 Map_Arg("OPND(0)", "OPND(0)");
00295 Map_Arg("OPND(1)", "OPND(1)");
00296 Map_Arg("OPND(2)", "OPND(2)");
00297
00298 Machine_To_Pseudo(TOP_shr_i_u, TOP_extr_u);
00299 Require("OPND(2) == 64 - OPND(3)");
00300 Map_Arg("RESULT(0)", "RESULT(0)");
00301 Map_Arg("OPND(0)", "OPND(0)");
00302 Map_Arg("OPND(1)", "OPND(1)");
00303 Map_Arg("OPND(2)", "OPND(2)");
00304
00305 Machine_To_Pseudo(TOP_xmpy_l, TOP_xma_l);
00306 Require("OPND(3) == 0");
00307 Map_Arg("RESULT(0)", "RESULT(0)");
00308 Map_Arg("OPND(0)", "OPND(0)");
00309 Map_Arg("OPND(1)", "OPND(1)");
00310 Map_Arg("OPND(2)", "OPND(2)");
00311
00312 Machine_To_Pseudo(TOP_xmpy_h, TOP_xma_h);
00313 Require("OPND(3) == 0");
00314 Map_Arg("RESULT(0)", "RESULT(0)");
00315 Map_Arg("OPND(0)", "OPND(0)");
00316 Map_Arg("OPND(1)", "OPND(1)");
00317 Map_Arg("OPND(2)", "OPND(2)");
00318
00319 Machine_To_Pseudo(TOP_xmpy_hu, TOP_xma_hu);
00320 Require("OPND(3) == 0");
00321 Map_Arg("RESULT(0)", "RESULT(0)");
00322 Map_Arg("OPND(0)", "OPND(0)");
00323 Map_Arg("OPND(1)", "OPND(1)");
00324 Map_Arg("OPND(2)", "OPND(2)");
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336 Pseudo_To_Machine(TOP_alloc_3, TOP_alloc);
00337 Map_Arg("RESULT(0)", "RESULT(0)");
00338 Map_Arg("OPND(0)", "OPND(0) + OPND(1) + OPND(2)");
00339 Map_Arg("OPND(1)", "OPND(0) + OPND(1)");
00340 Map_Arg("OPND(2)", "OPND(3)");
00341
00342 Pseudo_To_Machine(TOP_dep_z, TOP_shl_i);
00343 Map_Arg("RESULT(0)", "RESULT(0)");
00344 Map_Arg("OPND(0)", "OPND(0)");
00345 Map_Arg("OPND(1)", "OPND(1)");
00346 Map_Arg("OPND(2)", "OPND(2)");
00347 Map_Arg("OPND(3)", "64 - OPND(2)");
00348
00349 Pseudo_To_Machine(TOP_extr, TOP_shr_i);
00350 Map_Arg("RESULT(0)", "RESULT(0)");
00351 Map_Arg("OPND(0)", "OPND(0)");
00352 Map_Arg("OPND(1)", "OPND(1)");
00353 Map_Arg("OPND(2)", "OPND(2)");
00354 Map_Arg("OPND(3)", "64 - OPND(2)");
00355
00356 Pseudo_To_Machine(TOP_extr_u, TOP_shr_i_u);
00357 Map_Arg("RESULT(0)", "RESULT(0)");
00358 Map_Arg("OPND(0)", "OPND(0)");
00359 Map_Arg("OPND(1)", "OPND(1)");
00360 Map_Arg("OPND(2)", "OPND(2)");
00361 Map_Arg("OPND(3)", "64 - OPND(2)");
00362
00363 ISA_Pseudo_End();
00364 return 0;
00365 }