1/* do not bother about result of operations, only ensure valid arguments 2 * and that registers not modified by the operation are not clobbered */ 3 4#define IV0 0x10000 5#define IV1 0x10001 6#define IV2 0x10002 7#define IV3 0x10003 8#define IV4 0x10004 9#define IV5 0x10005 10#define FV0 100.0 11#define FV1 101.0 12#define FV2 102.0 13#define FV3 103.0 14#define FV4 104.0 15#define FV5 105.0 16#define IR0 r0 17#define IR1 r1 18#define IR2 r2 19#define IR3 v0 20#define IR4 v1 21#define IR5 v2 22#define FR0 f0 23#define FR1 f1 24#define FR2 f2 25#define FR3 f3 26#define FR4 f4 27#define FR5 f5 28 29#define setup() \ 30 movi %r0 IV0 \ 31 movi %r1 IV1 \ 32 movi %r2 IV2 \ 33 movi %v0 IV3 \ 34 movi %v1 IV4 \ 35 movi %v2 IV5 36#define setup_f() \ 37 movi_f %f0 FV0 \ 38 movi_f %f1 FV1 \ 39 movi_f %f2 FV2 \ 40 movi_f %f3 FV3 \ 41 movi_f %f4 FV4 \ 42 movi_f %f5 FV5 43#define setup_d() \ 44 movi_d %f0 FV0 \ 45 movi_d %f1 FV1 \ 46 movi_d %f2 FV2 \ 47 movi_d %f3 FV3 \ 48 movi_d %f4 FV4 \ 49 movi_d %f5 FV5 50 51#define check(label, rn) \ 52 beqi label %IR##rn IV##rn \ 53 calli @abort \ 54label: 55#define check1(k, l, i0) \ 56 check(k##l##i0##_0, i0) 57#define check2(k, l, i0, i1) \ 58 check(k##l##i0##i1##_0, i0) \ 59 check(k##l##i0##i1##_1, i1) 60#define check3(k, l, i0, i1, i2) \ 61 check(k##l##i0##i1##i2##_0, i0) \ 62 check(k##l##i0##i1##i2##_1, i1) \ 63 check(k##l##i0##i1##i2##_2, i2) 64#define check4(k, l, i0, i1, i2, i3) \ 65 check(k##l##i0##i1##i2##i3##_0, i0) \ 66 check(k##l##i0##i1##i2##i3##_1, i1) \ 67 check(k##l##i0##i1##i2##i3##_2, i2) \ 68 check(k##l##i0##i1##i2##i3##_3, i3) 69#define check5(k, l, i0, i1, i2, i3, i4) \ 70 check(k##l##i0##i1##i2##i3##i4##_0, i0) \ 71 check(k##l##i0##i1##i2##i3##i4##_1, i1) \ 72 check(k##l##i0##i1##i2##i3##i3##_2, i2) \ 73 check(k##l##i0##i1##i2##i3##i4##_3, i3) \ 74 check(k##l##i0##i1##i2##i3##i4##_4, i4) 75#define check6(k, l, i0, i1, i2, i3, i4, i5) \ 76 check(k##l##i0##i1##i2##i3##i4##i5##_0, i0) \ 77 check(k##l##i0##i1##i2##i3##i4##i5##_1, i1) \ 78 check(k##l##i0##i1##i2##i3##i3##i5##_2, i2) \ 79 check(k##l##i0##i1##i2##i3##i4##i5##_3, i3) \ 80 check(k##l##i0##i1##i2##i3##i4##i5##_4, i4) \ 81 check(k##l##i0##i1##i2##i3##i4##i5##_5, i5) 82 83#define checkf(f, label, rn) \ 84 beqi##f label %FR##rn FV##rn \ 85 calli @abort \ 86label: 87#define checkf1(f, k, l, i0) \ 88 checkf(f, f##k##l##i0##_0, i0) 89#define checkf2(f, k, l, i0, i1) \ 90 checkf(f, f##k##l##i0##i1##_0, i0) \ 91 checkf(f, f##k##l##i0##i1##_1, i1) 92#define checkf3(f, k, l, i0, i1, i2) \ 93 checkf(f, f##k##l##i0##i1##i2##_0, i0) \ 94 checkf(f, f##k##l##i0##i1##i2##_1, i1) \ 95 checkf(f, f##k##l##i0##i1##i2##_2, i2) 96#define checkf4(f, k, l, i0, i1, i2, i3) \ 97 checkf(f, f##k##l##i0##i1##i2##i3##_0, i0) \ 98 checkf(f, f##k##l##i0##i1##i2##i3##_1, i1) \ 99 checkf(f, f##k##l##i0##i1##i2##i3##_2, i2) \ 100 checkf(f, f##k##l##i0##i1##i2##i3##_3, i3) 101#define checkf5(f, k, l, i0, i1, i2, i3, i4) \ 102 checkf(f, f##k##l##i0##i1##i2##i3##i4##_0, i0) \ 103 checkf(f, f##k##l##i0##i1##i2##i3##i4##_1, i1) \ 104 checkf(f, f##k##l##i0##i1##i2##i3##i3##_2, i2) \ 105 checkf(f, f##k##l##i0##i1##i2##i3##i4##_3, i3) \ 106 checkf(f, f##k##l##i0##i1##i2##i3##i4##_4, i4) 107#define checkf6(f, k, l, i0, i1, i2, i3, i4, i5) \ 108 checkf(f, f##k##l##i0##i1##i2##i3##i4##i5##_0, i0) \ 109 checkf(f, f##k##l##i0##i1##i2##i3##i4##i5##_1, i1) \ 110 checkf(f, f##k##l##i0##i1##i2##i3##i3##i5##_2, i2) \ 111 checkf(f, f##k##l##i0##i1##i2##i3##i4##i5##_3, i3) \ 112 checkf(f, f##k##l##i0##i1##i2##i3##i4##i5##_4, i4) \ 113 checkf(f, f##k##l##i0##i1##i2##i3##i4##i5##_5, i5) 114 115#define alui(l, op, i0, i1, i2, i3, i4, i5) \ 116 setup() \ 117 movi %IR##i0 1 \ 118 op##i %IR##i1 %IR##i0 1 \ 119 check4(i, l, i2, i3, i4, i5) 120#define aluic(l, op, i0, i1, i2, i3, i4, i5) \ 121 setup() \ 122 movi %IR##i0 1 \ 123 op##i %IR##i0 %IR##i0 1 \ 124 check5(ic, l, i1, i2, i3, i4, i5) 125#define alur(l, op, i0, i1, i2, i3, i4, i5) \ 126 setup() \ 127 movi %IR##i0 1 \ 128 movi %IR##i1 1 \ 129 op##r %IR##i2 %IR##i0 %IR##i1 \ 130 check3(r, l, i3, i4, i5) 131#define alurc0(l, op, i0, i1, i2, i3, i4, i5) \ 132 setup() \ 133 movi %IR##i0 1 \ 134 movi %IR##i1 1 \ 135 op##r %IR##i0 %IR##i0 %IR##i1 \ 136 check4(r0, l, i2, i3, i4, i5) 137#define alurc1(l, op, i0, i1, i2, i3, i4, i5) \ 138 setup() \ 139 movi %IR##i0 1 \ 140 movi %IR##i1 1 \ 141 op##r %IR##i1 %IR##i0 %IR##i1 \ 142 check4(r1, l, i2, i3, i4, i5) 143#define alurc2(l, op, i0, i1, i2, i3, i4, i5) \ 144 setup() \ 145 movi %IR##i0 1 \ 146 op##r %IR##i0 %IR##i0 %IR##i0 \ 147 check5(r2, l, i1, i2, i3, i4, i5) 148#define xalu(l, op, i0, i1, i2, i3, i4, i5) \ 149 alui(l, op, i0, i1, i2, i3, i4, i5) \ 150 aluic(l, op, i0, i1, i2, i3, i4, i5) \ 151 alur(l, op, i0, i1, i2, i3, i4, i5) \ 152 alurc0(l, op, i0, i1, i2, i3, i4, i5) \ 153 alurc1(l, op, i0, i1, i2, i3, i4, i5) \ 154 alurc2(l, op, i0, i1, i2, i3, i4, i5) 155 156#if __ia64__ 157# define alu(l, op) \ 158 xalu(l, op, 0, 1, 2, 3, 4, 5) 159#else 160# define alu(l, op) \ 161 xalu(l, op, 0, 1, 2, 3, 4, 5) \ 162 xalu(l, op, 1, 2, 3, 4, 5, 0) \ 163 xalu(l, op, 2, 3, 4, 5, 0, 1) \ 164 xalu(l, op, 3, 4, 5, 0, 1, 2) \ 165 xalu(l, op, 4, 5, 0, 1, 2, 3) \ 166 xalu(l, op, 5, 0, 1, 2, 3, 4) 167#endif 168 169#define fopi(f, l, op, f0, f1, f2, f3, f4, f5) \ 170 setup##f() \ 171 movi##f %FR##f0 1.0 \ 172 op##i##f %FR##f1 %FR##f0 1.0 \ 173 checkf4(f, i, l, f2, f3, f4, f5) 174#define fopic(f, l, op, f0, f1, f2, f3, f4, f5) \ 175 setup##f() \ 176 movi##f %FR##f0 1.0 \ 177 op##i##f %FR##f0 %FR##f0 1.0 \ 178 checkf5(f, ic, l, f1, f2, f3, f4, f5) 179#define fopr(f, l, op, f0, f1, f2, f3, f4, f5) \ 180 setup##f() \ 181 movi##f %FR##f0 1.0 \ 182 movi##f %FR##f1 1.0 \ 183 op##r##f %FR##f2 %FR##f0 %FR##f1 \ 184 checkf3(f, r, l, f3, f4, f5) 185#define foprc0(f, l, op, f0, f1, f2, f3, f4, f5) \ 186 setup##f() \ 187 movi##f %FR##f0 1.0 \ 188 movi##f %FR##f1 1.0 \ 189 op##r##f %FR##f0 %FR##f0 %FR##f1 \ 190 checkf4(f, r0, l, f2, f3, f4, f5) 191#define foprc1(f, l, op, f0, f1, f2, f3, f4, f5) \ 192 setup##f() \ 193 movi##f %FR##f0 1.0 \ 194 movi##f %FR##f1 1.0 \ 195 op##r##f %FR##f1 %FR##f0 %FR##f1 \ 196 checkf4(f, r1, l, f2, f3, f4, f5) 197#define foprc2(f, l, op, f0, f1, f2, f3, f4, f5) \ 198 setup##f() \ 199 movi##f %FR##f0 1.0 \ 200 op##r##f %FR##f0 %FR##f0 %FR##f0 \ 201 checkf5(f, r2, l, f1, f2, f3, f4, f5) 202#define xfop(f, l, op, f0, f1, f2, f3, f4, f5) \ 203 fopi(f, l, op, f0, f1, f2, f3, f4, f5) \ 204 fopic(f, l, op, f0, f1, f2, f3, f4, f5) \ 205 fopr(f, l, op, f0, f1, f2, f3, f4, f5) \ 206 foprc0(f, l, op, f0, f1, f2, f3, f4, f5) \ 207 foprc1(f, l, op, f0, f1, f2, f3, f4, f5) \ 208 foprc2(f, l, op, f0, f1, f2, f3, f4, f5) 209#if __ia64__ 210# define xxfop(l, op, f, f0, f1, f2, f3, f4, f5) \ 211 xfop(_f, l, op, f0, f1, f2, f3, f4, f5) 212#else 213# define xxfop(l, op, f, f0, f1, f2, f3, f4, f5) \ 214 xfop(_f, l, op, f0, f1, f2, f3, f4, f5) \ 215 xfop(_d, l, op, f0, f1, f2, f3, f4, f5) 216#endif 217#if __ia64__ 218# define fop(l, op) \ 219 xxfop(l, op, f, 0, 1, 2, 3, 4, 5) 220#else 221# define fop(l, op) \ 222 xxfop(l, op, f, 0, 1, 2, 3, 4, 5) \ 223 xxfop(l, op, f, 1, 2, 3, 4, 5, 0) \ 224 xxfop(l, op, f, 2, 3, 4, 5, 0, 1) \ 225 xxfop(l, op, f, 3, 4, 5, 0, 1, 2) \ 226 xxfop(l, op, f, 4, 5, 0, 1, 2, 3) \ 227 xxfop(l, op, f, 5, 0, 1, 2, 3, 4) 228#endif 229 230#define aluxii(l, op, i0, i1, i2, i3, i4, i5) \ 231 setup() \ 232 movi %IR##i0 1 \ 233 op##ci %IR##i1 %IR##i0 1 \ 234 op##xi %IR##i2 %IR##i0 1 \ 235 check3(ii, l, i3, i4, i5) 236#define aluxir(l, op, i0, i1, i2, i3, i4, i5) \ 237 setup() \ 238 movi %IR##i0 1 \ 239 op##ci %IR##i1 %IR##i0 1 \ 240 op##xr %IR##i2 %IR##i0 %IR##i1 \ 241 check3(ir, l, i3, i4, i5) 242#define aluxri(l, op, i0, i1, i2, i3, i4, i5) \ 243 setup() \ 244 movi %IR##i0 1 \ 245 movi %IR##i1 1 \ 246 op##cr %IR##i2 %IR##i0 %IR##i1 \ 247 op##xi %IR##i0 %IR##i1 1 \ 248 check3(ri, l, i3, i4, i5) 249#define aluxrr(l, op, i0, i1, i2, i3, i4, i5) \ 250 setup() \ 251 movi %IR##i0 1 \ 252 movi %IR##i1 1 \ 253 op##cr %IR##i2 %IR##i0 %IR##i1 \ 254 op##xr %IR##i2 %IR##i0 %IR##i1 \ 255 check3(rr, l, i3, i4, i5) 256#define xalux(l, op, i0, i1, i2, i3, i4, i5) \ 257 aluxii(l, op, i0, i1, i2, i3, i4, i5) \ 258 aluxir(l, op, i0, i1, i2, i3, i4, i5) \ 259 aluxri(l, op, i0, i1, i2, i3, i4, i5) \ 260 aluxrr(l, op, i0, i1, i2, i3, i4, i5) 261#if __ia64__ 262# define alux(l, op) \ 263 xalux(l, op, 0, 1, 2, 3, 4, 5) 264#else 265# define alux(l, op) \ 266 xalux(l, op, 0, 1, 2, 3, 4, 5) \ 267 xalux(l, op, 1, 2, 3, 4, 5, 0) \ 268 xalux(l, op, 2, 3, 4, 5, 0, 1) \ 269 xalux(l, op, 3, 4, 5, 0, 1, 2) \ 270 xalux(l, op, 4, 5, 0, 1, 2, 3) \ 271 xalux(l, op, 5, 0, 1, 2, 3, 4) 272#endif 273 274#define alui_u(l, op, i0, i1, i2, i3, i4, i5) \ 275 setup() \ 276 movi %IR##i0 1 \ 277 op##i_u %IR##i1 %IR##i0 1 \ 278 check4(i_u, l, i2, i3, i4, i5) 279#define aluic_u(l, op, i0, i1, i2, i3, i4, i5) \ 280 setup() \ 281 movi %IR##i0 1 \ 282 op##i_u %IR##i0 %IR##i0 1 \ 283 check5(ic_u, l, i1, i2, i3, i4, i5) 284#define alur_u(l, op, i0, i1, i2, i3, i4, i5) \ 285 setup() \ 286 movi %IR##i0 1 \ 287 movi %IR##i1 1 \ 288 op##r_u %IR##i2 %IR##i0 %IR##i1 \ 289 check3(r_u, l, i3, i4, i5) 290#define alurc0_u(l, op, i0, i1, i2, i3, i4, i5) \ 291 setup() \ 292 movi %IR##i0 1 \ 293 movi %IR##i1 1 \ 294 op##r_u %IR##i0 %IR##i0 %IR##i1 \ 295 check4(r0_u, l, i2, i3, i4, i5) 296#define alurc1_u(l, op, i0, i1, i2, i3, i4, i5) \ 297 setup() \ 298 movi %IR##i0 1 \ 299 movi %IR##i1 1 \ 300 op##r_u %IR##i1 %IR##i0 %IR##i1 \ 301 check4(r1_u, l, i2, i3, i4, i5) 302#define alurc2_u(l, op, i0, i1, i2, i3, i4, i5) \ 303 setup() \ 304 movi %IR##i0 1 \ 305 op##r_u %IR##i0 %IR##i0 %IR##i0 \ 306 check5(r2_u, l, i1, i2, i3, i4, i5) 307#define xalu_u(l, op, i0, i1, i2, i3, i4, i5) \ 308 alui_u(l, op, i0, i1, i2, i3, i4, i5) \ 309 aluic_u(l, op, i0, i1, i2, i3, i4, i5) \ 310 alur_u(l, op, i0, i1, i2, i3, i4, i5) \ 311 alurc0_u(l, op, i0, i1, i2, i3, i4, i5) \ 312 alurc1_u(l, op, i0, i1, i2, i3, i4, i5) \ 313 alurc2_u(l, op, i0, i1, i2, i3, i4, i5) 314#if __ia64__ 315# define alu_u(l, op) \ 316 xalu_u(l, op, 0, 1, 2, 3, 4, 5) 317#else 318# define alu_u(l, op) \ 319 xalu_u(l, op, 0, 1, 2, 3, 4, 5) \ 320 xalu_u(l, op, 1, 2, 3, 4, 5, 0) \ 321 xalu_u(l, op, 2, 3, 4, 5, 0, 1) \ 322 xalu_u(l, op, 3, 4, 5, 0, 1, 2) \ 323 xalu_u(l, op, 4, 5, 0, 1, 2, 3) \ 324 xalu_u(l, op, 5, 0, 1, 2, 3, 4) 325#endif 326 327#define unir(l, op, i0, i1, i2, i3, i4, i5) \ 328 setup() \ 329 movi %IR##i0 1 \ 330 op %IR##i1 %IR##i0 \ 331 check4(rr, l, i2, i3, i4, i5) 332#define unirc(l, op, i0, i1, i2, i3, i4, i5) \ 333 setup() \ 334 movi %IR##i0 1 \ 335 op %IR##i0 %IR##i0 \ 336 check5(rc, l, i1, i2, i3, i4, i5) 337#define xuni(l, op, i0, i1, i2, i3, i4, i5) \ 338 unir(l, op, i0, i1, i2, i3, i4, i5) \ 339 unirc(l, op, i0, i1, i2, i3, i4, i5) 340#if __ia64__ 341# define uni(l, op) \ 342 xuni(l, op, 0, 1, 2, 3, 4, 5) 343#else 344# define uni(l, op) \ 345 xuni(l, op, 0, 1, 2, 3, 4, 5) \ 346 xuni(l, op, 1, 2, 3, 4, 5, 0) \ 347 xuni(l, op, 2, 3, 4, 5, 0, 1) \ 348 xuni(l, op, 3, 4, 5, 0, 1, 2) \ 349 xuni(l, op, 4, 5, 0, 1, 2, 3) \ 350 xuni(l, op, 5, 0, 1, 2, 3, 4) 351#endif 352 353#define unfr(f, l, op, f0, f1, f2, f3, f4, f5) \ 354 setup##f() \ 355 movi##f %FR##f0 1 \ 356 op##f %FR##f1 %FR##f0 \ 357 checkf4(f, rr, l, f2, f3, f4, f5) 358#define unfrc(f, l, op, f0, f1, f2, f3, f4, f5) \ 359 setup##f() \ 360 movi##f %FR##f0 1 \ 361 op##f %FR##f0 %FR##f0 \ 362 checkf5(f, rc, l, f1, f2, f3, f4, f5) 363#define xunf(f, l, op, f0, f1, f2, f3, f4, f5) \ 364 unfr(f, l, op, f0, f1, f2, f3, f4, f5) \ 365 unfrc(f, l, op, f0, f1, f2, f3, f4, f5) 366#define xxunf(l, op, f0, f1, f2, f3, f4, f5) \ 367 xunf(_f, l, op, f0, f1, f2, f3, f4, f5) \ 368 xunf(_d, l, op, f0, f1, f2, f3, f4, f5) 369#if __ia64__ 370# define unf(l, op) \ 371 xxunf(l, op, 0, 1, 2, 3, 4, 5) 372#else 373# define unf(l, op) \ 374 xxunf(l, op, 0, 1, 2, 3, 4, 5) \ 375 xxunf(l, op, 1, 2, 3, 4, 5, 0) \ 376 xxunf(l, op, 2, 3, 4, 5, 0, 1) \ 377 xxunf(l, op, 3, 4, 5, 0, 1, 2) \ 378 xxunf(l, op, 4, 5, 0, 1, 2, 3) \ 379 xxunf(l, op, 5, 0, 1, 2, 3, 4) 380#endif 381 382#define fcpi(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 383 setup() \ 384 setup##f() \ 385 movi##f %FR##f0 1.0 \ 386 op##i##f %IR##r0 %FR##f0 1.0 \ 387 check5(i##f##f0, l, r1, r2, r3, r4, r5) \ 388 checkf5(f, i##r0, l, f1, f2, f3, f4, f5) 389#define fcpr(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 390 setup() \ 391 setup##f() \ 392 movi##f %FR##f0 1.0 \ 393 movi##f %FR##f1 1.0 \ 394 op##r##f %IR##r0 %FR##f0 %FR##f1 \ 395 check5(r##f##f0, l, r1, r2, r3, r4, r5) \ 396 checkf4(f, r##r0, l, f2, f3, f4, f5) 397#define fcprc(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 398 setup() \ 399 setup##f() \ 400 movi##f %FR##f0 1.0 \ 401 op##r##f %IR##r0 %FR##f0 %FR##f0 \ 402 check5(rc##f##f0, l, r1, r2, r3, r4, r5) \ 403 checkf5(f, rc##r0, l, f1, f2, f3, f4, f5) 404#if __ia64__ 405# define ifcp(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 406 fcpi(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) 407#else 408# define ifcp(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 409 fcpi(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 410 fcpr(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 411 fcprc(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 412 fcpi(f, l, op, r1,r2,r3,r4,r5,r0, f0,f1,f2,f3,f4,f5) \ 413 fcpr(f, l, op, r1,r2,r3,r4,r5,r0, f0,f1,f2,f3,f4,f5) \ 414 fcprc(f, l, op, r1,r2,r3,r4,r5,r0, f0,f1,f2,f3,f4,f5) \ 415 fcpi(f, l, op, r2,r3,r4,r5,r0,r1, f0,f1,f2,f3,f4,f5) \ 416 fcpr(f, l, op, r2,r3,r4,r5,r0,r1, f0,f1,f2,f3,f4,f5) \ 417 fcprc(f, l, op, r2,r3,r4,r5,r0,r1, f0,f1,f2,f3,f4,f5) \ 418 fcpi(f, l, op, r3,r4,r5,r0,r1,r2, f0,f1,f2,f3,f4,f5) \ 419 fcpr(f, l, op, r3,r4,r5,r0,r1,r2, f0,f1,f2,f3,f4,f5) \ 420 fcprc(f, l, op, r3,r4,r5,r0,r1,r2, f0,f1,f2,f3,f4,f5) \ 421 fcpi(f, l, op, r4,r5,r0,r1,r2,r3, f0,f1,f2,f3,f4,f5) \ 422 fcpr(f, l, op, r4,r5,r0,r1,r2,r3, f0,f1,f2,f3,f4,f5) \ 423 fcprc(f, l, op, r4,r5,r0,r1,r2,r3, f0,f1,f2,f3,f4,f5) \ 424 fcpi(f, l, op, r5,r0,r1,r2,r3,r4, f0,f1,f2,f3,f4,f5) \ 425 fcpr(f, l, op, r5,r0,r1,r2,r3,r4, f0,f1,f2,f3,f4,f5) \ 426 fcprc(f, l, op, r5,r0,r1,r2,r3,r4, f0,f1,f2,f3,f4,f5) 427#endif 428#if __ia64__ 429# define xfcp(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 430 ifcp(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) 431#else 432# define xfcp(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 433 ifcp(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 434 ifcp(f, l, op, r0,r1,r2,r3,r4,r5, f1,f2,f3,f4,f5,f0) \ 435 ifcp(f, l, op, r0,r1,r2,r3,r4,r5, f2,f3,f4,f5,f0,f1) \ 436 ifcp(f, l, op, r0,r1,r2,r3,r4,r5, f3,f4,f5,f0,f1,f2) \ 437 ifcp(f, l, op, r0,r1,r2,r3,r4,r5, f4,f5,f0,f1,f2,f3) \ 438 ifcp(f, l, op, r0,r1,r2,r3,r4,r5, f5,f0,f1,f2,f3,f4) 439#endif 440#if __ia64__ 441# define fcmp(l, op) \ 442 xfcp(_f, l, op, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5) 443#else 444# define fcmp(l, op) \ 445 xfcp(_f, l, op, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5) \ 446 xfcp(_d, l, op, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5) 447#endif 448 449#define imvi(l, i0, i1, i2, i3, i4, i5) \ 450 setup() \ 451 movi %IR##i0 1 \ 452 check5(i, l, i1, i2, i3, i4, i5) 453#define imvr(l, i0, i1, i2, i3, i4, i5) \ 454 setup() \ 455 movi %IR##i1 1 \ 456 movr %IR##i0 %IR##i1 \ 457 check4(r, l, i2, i3, i4, i5) 458#define xmvi(l, i0, i1, i2, i3, i4, i5) \ 459 imvi(l, i0, i1, i2, i3, i4, i5) \ 460 imvr(l, i0, i1, i2, i3, i4, i5) 461#if __ia64__ 462# define mvi(l) \ 463 xmvi(l, 0, 1, 2, 3, 4, 5) 464#else 465# define mvi(l) \ 466 xmvi(l, 0, 1, 2, 3, 4, 5) \ 467 xmvi(l, 1, 2, 3, 4, 5, 0) \ 468 xmvi(l, 2, 3, 4, 5, 0, 1) \ 469 xmvi(l, 3, 4, 5, 0, 1, 2) \ 470 xmvi(l, 4, 5, 0, 1, 2, 3) \ 471 xmvi(l, 5, 0, 1, 2, 3, 4) 472#endif 473 474#define fmvi(f, l, f0, f1, f2, f3, f4, f5) \ 475 setup##f() \ 476 movi##f %FR##f0 1 \ 477 checkf5(f, i, l, f1, f2, f3, f4, f5) 478#define fmvr(f, l, f0, f1, f2, f3, f4, f5) \ 479 setup##f() \ 480 movi##f %FR##f1 1 \ 481 movr##f %FR##f0 %FR##f1 \ 482 checkf4(f, r, l, f2, f3, f4, f5) 483#define xmvf(f, l, f0, f1, f2, f3, f4, f5) \ 484 fmvi(f, l, f0, f1, f2, f3, f4, f5) \ 485 fmvr(f, l, f0, f1, f2, f3, f4, f5) 486#if __ia64__ 487# define xxmvf(f, l) \ 488 xmvf(f, l, 0, 1, 2, 3, 4, 5) 489#else 490# define xxmvf(f, l) \ 491 xmvf(f, l, 0, 1, 2, 3, 4, 5) \ 492 xmvf(f, l, 1, 2, 3, 4, 5, 0) \ 493 xmvf(f, l, 2, 3, 4, 5, 0, 1) \ 494 xmvf(f, l, 3, 4, 5, 0, 1, 2) \ 495 xmvf(f, l, 4, 5, 0, 1, 2, 3) \ 496 xmvf(f, l, 5, 0, 1, 2, 3, 4) 497#endif 498#define mvf(l) \ 499 xxmvf(_f, l) \ 500 xxmvf(_d, l) 501 502#define f2fr(f, l, op, f0, f1, f2, f3, f4, f5) \ 503 setup##f() \ 504 movi##f %FR##f0 1 \ 505 op %FR##f1 %FR##f0 \ 506 checkf4(f, rr, l, f2, f3, f4, f5) 507#define f2frc(f, l, op, f0, f1, f2, f3, f4, f5) \ 508 setup##f() \ 509 movi##f %FR##f0 1 \ 510 op %FR##f0 %FR##f0 \ 511 checkf5(f, rc, l, f1, f2, f3, f4, f5) 512#define xf2f(f, l, op, f0, f1, f2, f3, f4, f5) \ 513 f2fr(f, l, op, f0, f1, f2, f3, f4, f5) \ 514 f2frc(f, l, op, f0, f1, f2, f3, f4, f5) 515#if __ia64__ 516# define f2f(l, f, op) \ 517 xf2f(f, l, op, 0, 1, 2, 3, 4, 5) 518#else 519# define f2f(l, f, op) \ 520 xf2f(f, l, op, 0, 1, 2, 3, 4, 5) \ 521 xf2f(f, l, op, 1, 2, 3, 4, 5, 0) \ 522 xf2f(f, l, op, 2, 3, 4, 5, 0, 1) \ 523 xf2f(f, l, op, 3, 4, 5, 0, 1, 2) \ 524 xf2f(f, l, op, 4, 5, 0, 1, 2, 3) \ 525 xf2f(f, l, op, 5, 0, 1, 2, 3, 4) 526#endif 527 528#define f2ir(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 529 setup() \ 530 setup##f() \ 531 movi##f %FR##f0 1 \ 532 op##f %IR##r0 %FR##f0 \ 533 check5(r##f##f0, l, r1, r2, r3, r4, r5) \ 534 checkf5(f, i##r0, l, f1, f2, f3, f4, f5) 535#if __ia64__ 536# define if2i(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 537 f2ir(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) 538# define xf2i(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 539 if2i(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) 540#else 541# define if2i(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 542 f2ir(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 543 f2ir(f, l, op, r1,r2,r3,r4,r5,r0, f0,f1,f2,f3,f4,f5) \ 544 f2ir(f, l, op, r2,r3,r4,r5,r0,r1, f0,f1,f2,f3,f4,f5) \ 545 f2ir(f, l, op, r3,r4,r5,r0,r1,r2, f0,f1,f2,f3,f4,f5) \ 546 f2ir(f, l, op, r4,r5,r0,r1,r2,r3, f0,f1,f2,f3,f4,f5) \ 547 f2ir(f, l, op, r5,r0,r1,r2,r3,r4, f0,f1,f2,f3,f4,f5) 548# define xf2i(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 549 if2i(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 550 if2i(f, l, op, r0,r1,r2,r3,r4,r5, f1,f2,f3,f4,f5,f0) \ 551 if2i(f, l, op, r0,r1,r2,r3,r4,r5, f2,f3,f4,f5,f0,f1) \ 552 if2i(f, l, op, r0,r1,r2,r3,r4,r5, f3,f4,f5,f0,f1,f2) \ 553 if2i(f, l, op, r0,r1,r2,r3,r4,r5, f4,f5,f0,f1,f2,f3) \ 554 if2i(f, l, op, r0,r1,r2,r3,r4,r5, f5,f0,f1,f2,f3,f4) 555#endif 556#define f2i(l, op) \ 557 xf2i(_f, l, op, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5) \ 558 xf2i(_d, l, op, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5) 559 560#define i2fr(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 561 setup() \ 562 setup##f() \ 563 movi %IR##r0 1 \ 564 op##f %FR##f0 %IR##r0 \ 565 check5(r##f##f0, l, r1, r2, r3, r4, r5) \ 566 checkf5(f, i##r0, l, f1, f2, f3, f4, f5) 567#if __ia64__ 568# define ii2f(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 569 i2fr(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) 570# define xi2f(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 571 ii2f(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) 572#else 573# define ii2f(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 574 i2fr(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 575 i2fr(f, l, op, r1,r2,r3,r4,r5,r0, f0,f1,f2,f3,f4,f5) \ 576 i2fr(f, l, op, r2,r3,r4,r5,r0,r1, f0,f1,f2,f3,f4,f5) \ 577 i2fr(f, l, op, r3,r4,r5,r0,r1,r2, f0,f1,f2,f3,f4,f5) \ 578 i2fr(f, l, op, r4,r5,r0,r1,r2,r3, f0,f1,f2,f3,f4,f5) \ 579 i2fr(f, l, op, r5,r0,r1,r2,r3,r4, f0,f1,f2,f3,f4,f5) 580# define xi2f(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 581 ii2f(f, l, op, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 582 ii2f(f, l, op, r0,r1,r2,r3,r4,r5, f1,f2,f3,f4,f5,f0) \ 583 ii2f(f, l, op, r0,r1,r2,r3,r4,r5, f2,f3,f4,f5,f0,f1) \ 584 ii2f(f, l, op, r0,r1,r2,r3,r4,r5, f3,f4,f5,f0,f1,f2) \ 585 ii2f(f, l, op, r0,r1,r2,r3,r4,r5, f4,f5,f0,f1,f2,f3) \ 586 ii2f(f, l, op, r0,r1,r2,r3,r4,r5, f5,f0,f1,f2,f3,f4) 587#endif 588#define i2f(l, op) \ 589 xi2f(_f, l, op, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5) \ 590 xi2f(_d, l, op, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5) 591 592#define off_c 1 593#define off_uc off_c 594#define off_s 2 595#define off_us off_s 596#define off_i 4 597#define off_ui off_i 598#define off_l 8 599#define off_f 4 600#define off_d 8 601 602#define ildi(i, l, r0, r1, r2, r3, r4, r5) \ 603 setup() \ 604 ldi##i %IR##r0 buff \ 605 check5(ldi##i, l, r1, r2, r3, r4, r5) 606#define ildr(i, l, r0, r1, r2, r3, r4, r5) \ 607 setup() \ 608 movi %IR##r1 buff \ 609 ldr##i %IR##r0 %IR##r1 \ 610 check4(ldr##i, l, r2, r3, r4, r5) 611#define ildr0(i, l, r0, r1, r2, r3, r4, r5) \ 612 setup() \ 613 movi %IR##r0 buff \ 614 ldr##i %IR##r0 %IR##r0 \ 615 check5(ldr##i, l, r1, r2, r3, r4, r5) 616#define ildxi(i, l, r0, r1, r2, r3, r4, r5) \ 617 setup() \ 618 movi %IR##r1 buff \ 619 ldxi##i %IR##r0 %IR##r1 off##i \ 620 check4(ldxi##i, l, r2, r3, r4, r5) 621#define ildxr(i, l, r0, r1, r2, r3, r4, r5) \ 622 setup() \ 623 movi %IR##r1 buff \ 624 movi %IR##r2 off##i \ 625 ldxr##i %IR##r0 %IR##r1 %IR##r2 \ 626 check3(ldxr##i, l, r3, r4, r5) 627#define ildxr0(i, l, r0, r1, r2, r3, r4, r5) \ 628 setup() \ 629 movi %IR##r1 buff \ 630 movi %IR##r0 off##i \ 631 ldxr##i %IR##r0 %IR##r1 %IR##r0 \ 632 check4(ldxr0##i, l, r2, r3, r4, r5) 633#define ildxr1(i, l, r0, r1, r2, r3, r4, r5) \ 634 setup() \ 635 movi %IR##r0 buff \ 636 movi %IR##r1 off##i \ 637 ldxr##i %IR##r0 %IR##r0 %IR##r1 \ 638 check4(ldxr1##i, l, r2, r3, r4, r5) 639#define xxldi(i, l, r0, r1, r2, r3, r4, r5) \ 640 ildi(i, l, r0, r1, r2, r3, r4, r5) \ 641 ildr(i, l, r0, r1, r2, r3, r4, r5) \ 642 ildr0(i, l, r0, r1, r2, r3, r4, r5) \ 643 ildxi(i, l, r0, r1, r2, r3, r4, r5) \ 644 ildxr(i, l, r0, r1, r2, r3, r4, r5) \ 645 ildxr0(i, l, r0, r1, r2, r3, r4, r5) \ 646 ildxr1(i, l, r0, r1, r2, r3, r4, r5) 647#if __WORDSIZE == 32 648#define xxxldi(l, r0, r1, r2, r3, r4, r5) 649#else 650#define xxxldi(l, r0, r1, r2, r3, r4, r5) \ 651 xxldi(_ui, l, r0, r1, r2, r3, r4, r5) \ 652 xxldi( _l, l, r0, r1, r2, r3, r4, r5) 653#endif 654#define xldi(l, r0, r1, r2, r3, r4, r5) \ 655 xxldi( _c, l, r0, r1, r2, r3, r4, r5) \ 656 xxldi(_uc, l, r0, r1, r2, r3, r4, r5) \ 657 xxldi( _s, l, r0, r1, r2, r3, r4, r5) \ 658 xxldi(_us, l, r0, r1, r2, r3, r4, r5) \ 659 xxldi( _i, l, r0, r1, r2, r3, r4, r5) \ 660 xxxldi(l, r0, r1, r2, r3, r4, r5) 661#if __ia64__ 662# define ldi(l) \ 663 xldi(l, 0, 1, 2, 3, 4, 5) 664#else 665# define ldi(l) \ 666 xldi(l, 0, 1, 2, 3, 4, 5) \ 667 xldi(l, 1, 2, 3, 4, 5, 0) \ 668 xldi(l, 2, 3, 4, 5, 0, 1) \ 669 xldi(l, 3, 4, 5, 0, 1, 2) \ 670 xldi(l, 4, 5, 0, 1, 2, 3) \ 671 xldi(l, 5, 0, 1, 2, 3, 4) 672#endif 673 674#define fldi(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 675 setup() \ 676 setup##f() \ 677 ldi##f %FR##f0 buff \ 678 check6(ldi##f##r0##f0, l, r0, r1, r2, r3, r4, r5) \ 679 checkf5(f, ldi##r0##f0, l, f1, f2, f3, f4, f5) 680#define fldr(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 681 setup() \ 682 setup##f() \ 683 movi %IR##r0 buff \ 684 ldr##f %FR##f0 %IR##r0 \ 685 check5(ldr##f##r0##f0, l, r1, r2, r3, r4, r5) \ 686 checkf5(f, ldr##r0##f0, l, f1, f2, f3, f4, f5) 687#define fldxi(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 688 setup() \ 689 setup##f() \ 690 movi %IR##r0 buff \ 691 ldxi##f %FR##f0 %IR##r0 off##f \ 692 check5(ldxi##f##r0##f0, l, r1, r2, r3, r4, r5) \ 693 checkf5(f, ldxi##r0##f0, l, f1, f2, f3, f4, f5) 694#define fldxr(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 695 setup() \ 696 setup##f() \ 697 movi %IR##r0 buff \ 698 movi %IR##r1 off##f \ 699 ldxr##f %FR##f0 %IR##r0 %IR##r1 \ 700 check4(ldxr##f##r0##f0, l, r2, r3, r4, r5) \ 701 checkf5(f, ldxr##r0##f0, l, f1, f2, f3, f4, f5) 702#define xldf(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 703 fldi(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 704 fldr(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 705 fldxi(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 706 fldxr(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) 707#define xxldf(l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 708 xldf(_f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 709 xldf(_d, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) 710#if __ia64__ 711# define ixldf(l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 712 xxldf(l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) 713#else 714# define fxldf(l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 715 xxldf(l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 716 xxldf(l, r0,r1,r2,r3,r4,r5, f1,f2,f3,f4,f5,f0) \ 717 xxldf(l, r0,r1,r2,r3,r4,r5, f2,f3,f4,f5,f0,f1) \ 718 xxldf(l, r0,r1,r2,r3,r4,r5, f3,f4,f5,f0,f1,f2) \ 719 xxldf(l, r0,r1,r2,r3,r4,r5, f4,f5,f0,f1,f2,f3) \ 720 xxldf(l, r0,r1,r2,r3,r4,r5, f5,f0,f1,f2,f3,f4) 721# define ixldf(l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 722 fxldf(l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 723 fxldf(l, r1,r2,r3,r4,r5,r0, f0,f1,f2,f3,f4,f5) \ 724 fxldf(l, r2,r3,r4,r5,r0,r1, f0,f1,f2,f3,f4,f5) \ 725 fxldf(l, r3,r4,r5,r0,r1,r2, f0,f1,f2,f3,f4,f5) \ 726 fxldf(l, r4,r5,r0,r1,r2,r3, f0,f1,f2,f3,f4,f5) \ 727 fxldf(l, r5,r0,r1,r2,r3,r4, f0,f1,f2,f3,f4,f5) 728#endif 729#define ldf(l) \ 730 ixldf(l, 0,1,2,3,4,5, 0,1,2,3,4,5) 731 732#define isti(i, l, r0, r1, r2, r3, r4, r5) \ 733 setup() \ 734 sti##i buff %IR##r0 \ 735 check5(sti##i, l, r1, r2, r3, r4, r5) 736#define istr(i, l, r0, r1, r2, r3, r4, r5) \ 737 setup() \ 738 movi %IR##r1 buff \ 739 str##i %IR##r1 %IR##r0 \ 740 check4(str##i, l, r2, r3, r4, r5) 741#define istr0(i, l, r0, r1, r2, r3, r4, r5) \ 742 setup() \ 743 movi %IR##r1 buff \ 744 str##i %IR##r1 %IR##r0 \ 745 check4(str0##i, l, r2, r3, r4, r5) 746#define istxi(i, l, r0, r1, r2, r3, r4, r5) \ 747 setup() \ 748 movi %IR##r1 buff \ 749 stxi##i off##i %IR##r1 %IR##r0 \ 750 check4(stxi##i, l, r2, r3, r4, r5) 751#define istxr(i, l, r0, r1, r2, r3, r4, r5) \ 752 setup() \ 753 movi %IR##r1 buff \ 754 movi %IR##r2 off##i \ 755 stxr##i %IR##r2 %IR##r1 %IR##r0 \ 756 check3(stxr##i, l, r3, r4, r5) 757#define istxr0(i, l, r0, r1, r2, r3, r4, r5) \ 758 setup() \ 759 movi %IR##r1 buff \ 760 movi %IR##r0 off##i \ 761 stxr##i %IR##r0 %IR##r1 %IR##r0 \ 762 check4(stxr0##i, l, r2, r3, r4, r5) 763#define istxr1(i, l, r0, r1, r2, r3, r4, r5) \ 764 setup() \ 765 movi %IR##r0 buff \ 766 movi %IR##r1 off##i \ 767 stxr##i %IR##r1 %IR##r0 %IR##r0 \ 768 check4(stxr1##i, l, r2, r3, r4, r5) 769#define xxsti(i, l, r0, r1, r2, r3, r4, r5) \ 770 isti(i, l, r0, r1, r2, r3, r4, r5) \ 771 istr(i, l, r0, r1, r2, r3, r4, r5) \ 772 istr0(i, l, r0, r1, r2, r3, r4, r5) \ 773 istxi(i, l, r0, r1, r2, r3, r4, r5) \ 774 istxr(i, l, r0, r1, r2, r3, r4, r5) \ 775 istxr0(i, l, r0, r1, r2, r3, r4, r5) \ 776 istxr1(i, l, r0, r1, r2, r3, r4, r5) 777#if __WORDSIZE == 32 778#define xxxsti(l, r0, r1, r2, r3, r4, r5) 779#else 780#define xxxsti(l, r0, r1, r2, r3, r4, r5) \ 781 xxsti( _l, l, r0, r1, r2, r3, r4, r5) 782#endif 783#define xsti(l, r0, r1, r2, r3, r4, r5) \ 784 xxsti( _c, l, r0, r1, r2, r3, r4, r5) \ 785 xxsti( _s, l, r0, r1, r2, r3, r4, r5) \ 786 xxsti( _i, l, r0, r1, r2, r3, r4, r5) \ 787 xxxsti(l, r0, r1, r2, r3, r4, r5) 788#if __ia64__ 789# define sti(l) \ 790 xsti(l, 0, 1, 2, 3, 4, 5) 791#else 792# define sti(l) \ 793 xsti(l, 0, 1, 2, 3, 4, 5) \ 794 xsti(l, 1, 2, 3, 4, 5, 0) \ 795 xsti(l, 2, 3, 4, 5, 0, 1) \ 796 xsti(l, 3, 4, 5, 0, 1, 2) \ 797 xsti(l, 4, 5, 0, 1, 2, 3) \ 798 xsti(l, 5, 0, 1, 2, 3, 4) 799#endif 800 801#define fsti(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 802 setup() \ 803 setup##f() \ 804 sti##f buff %FR##f0 \ 805 check6(sti##f##r0##f0, l, r0, r1, r2, r3, r4, r5) \ 806 checkf5(f, sti##r0##f0, l, f1, f2, f3, f4, f5) 807#define fstr(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 808 setup() \ 809 setup##f() \ 810 movi %IR##r0 buff \ 811 str##f %IR##r0 %FR##f0 \ 812 check5(str##f##r0##f0, l, r1, r2, r3, r4, r5) \ 813 checkf5(f, str##r0##f0, l, f1, f2, f3, f4, f5) 814#define fstxi(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 815 setup() \ 816 setup##f() \ 817 movi %IR##r0 buff \ 818 stxi##f off##f %IR##r0 %FR##f0 \ 819 check5(stxi##f##r0##f0, l, r1, r2, r3, r4, r5) \ 820 checkf5(f, stxi##r0##f0, l, f1, f2, f3, f4, f5) 821#define fstxr(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 822 setup() \ 823 setup##f() \ 824 movi %IR##r0 buff \ 825 movi %IR##r1 off##f \ 826 stxr##f %IR##r1 %IR##r0 %FR##f0 \ 827 check4(stxr##f##r0##f0, l, r2, r3, r4, r5) \ 828 checkf5(f, stxr##r0##f0, l, f1, f2, f3, f4, f5) 829#define xstf(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 830 fsti(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 831 fstr(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 832 fstxi(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 833 fstxr(f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) 834#define xxstf(l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 835 xstf(_f, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 836 xstf(_d, l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) 837#if __ia64__ 838# define ixstf(l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 839 xxstf(l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) 840#else 841# define fxstf(l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 842 xxstf(l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 843 xxstf(l, r0,r1,r2,r3,r4,r5, f1,f2,f3,f4,f5,f0) \ 844 xxstf(l, r0,r1,r2,r3,r4,r5, f2,f3,f4,f5,f0,f1) \ 845 xxstf(l, r0,r1,r2,r3,r4,r5, f3,f4,f5,f0,f1,f2) \ 846 xxstf(l, r0,r1,r2,r3,r4,r5, f4,f5,f0,f1,f2,f3) \ 847 xxstf(l, r0,r1,r2,r3,r4,r5, f5,f0,f1,f2,f3,f4) 848# define ixstf(l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 849 fxstf(l, r0,r1,r2,r3,r4,r5, f0,f1,f2,f3,f4,f5) \ 850 fxstf(l, r1,r2,r3,r4,r5,r0, f0,f1,f2,f3,f4,f5) \ 851 fxstf(l, r2,r3,r4,r5,r0,r1, f0,f1,f2,f3,f4,f5) \ 852 fxstf(l, r3,r4,r5,r0,r1,r2, f0,f1,f2,f3,f4,f5) \ 853 fxstf(l, r4,r5,r0,r1,r2,r3, f0,f1,f2,f3,f4,f5) \ 854 fxstf(l, r5,r0,r1,r2,r3,r4, f0,f1,f2,f3,f4,f5) 855#endif 856#define stf(l) \ 857 ixstf(l, 0,1,2,3,4,5, 0,1,2,3,4,5) 858 859/* Need a valid jump or simple optimization will remove it */ 860#define bri(l, op, u, il, ir, r0, r1, r2, r3, r4, r5) \ 861 setup() \ 862 movi %IR##r0 il \ 863 b##op##i##u i##l##op##r0 %IR##r0 ir \ 864 calli @abort \ 865i##l##op##r0: \ 866 check5(i, l, r1, r2, r3, r4, r5) 867#define brr(l, op, u, il, ir, r0, r1, r2, r3, r4, r5) \ 868 setup() \ 869 movi %IR##r0 il \ 870 movi %IR##r1 ir \ 871 b##op##r##u r##l##op##r0 %IR##r0 %IR##r1 \ 872 calli @abort \ 873r##l##op##r0: \ 874 check4(r, l, r2, r3, r4, r5) 875#define xjmpi(l, op, u, il, ir, r0, r1, r2, r3, r4, r5) \ 876 bri(l, op, u, il, ir, r0, r1, r2, r3, r4, r5) \ 877 brr(l, op, u, il, ir, r0, r1, r2, r3, r4, r5) 878#if __ia64__ 879# define jmpi(l, op, u, il, ir) \ 880 xjmpi(l, op, u, il, ir, 0, 1, 2, 3, 4, 5) 881#else 882# define jmpi(l, op, u, il, ir) \ 883 xjmpi(l, op, u, il, ir, 0, 1, 2, 3, 4, 5) \ 884 xjmpi(l, op, u, il, ir, 1, 2, 3, 4, 5, 0) \ 885 xjmpi(l, op, u, il, ir, 2, 3, 4, 5, 0, 1) \ 886 xjmpi(l, op, u, il, ir, 3, 4, 5, 0, 1, 2) \ 887 xjmpi(l, op, u, il, ir, 4, 5, 0, 1, 2, 3) \ 888 xjmpi(l, op, u, il, ir, 5, 0, 1, 2, 3, 4) 889#endif 890 891#define bfi(f, l, op, il, ir, f0, f1, f2, f3, f4, f5) \ 892 setup##f() \ 893 movi##f %FR##f0 il \ 894 b##op##i##f i##l##op##f##f0 %FR##f0 ir \ 895 calli @abort \ 896i##l##op##f##f0: \ 897 checkf5(f, i, l, f1, f2, f3, f4, f5) 898#define bff(f, l, op, il, ir, f0, f1, f2, f3, f4, f5) \ 899 setup##f() \ 900 movi##f %FR##f0 il \ 901 movi##f %FR##f1 ir \ 902 b##op##r##f r##l##op##f##f0 %FR##f0 %FR##f1 \ 903 calli @abort \ 904r##l##op##f##f0: \ 905 checkf4(f, r, l, f2, f3, f4, f5) 906#define xjmpf(f, l, op, il, ir, f0, f1, f2, f3, f4, f5) \ 907 bfi(f, l, op, il, ir, f0, f1, f2, f3, f4, f5) \ 908 bff(f, l, op, il, ir, f0, f1, f2, f3, f4, f5) 909#define xxjmpf(l, op, il, ir, f0, f1, f2, f3, f4, f5) \ 910 xjmpf(_f, l, op, il, ir, f0, f1, f2, f3, f4, f5) \ 911 xjmpf(_d, l, op, il, ir, f0, f1, f2, f3, f4, f5) 912#if __ia64__ 913# define jmpf(l, op, il, ir) \ 914 xxjmpf(l, op, il, ir, 0, 1, 2, 3, 4, 5) 915#else 916# define jmpf(l, op, il, ir) \ 917 xxjmpf(l, op, il, ir, 0, 1, 2, 3, 4, 5) \ 918 xxjmpf(l, op, il, ir, 1, 2, 3, 4, 5, 0) \ 919 xxjmpf(l, op, il, ir, 2, 3, 4, 5, 0, 1) \ 920 xxjmpf(l, op, il, ir, 3, 4, 5, 0, 1, 2) \ 921 xxjmpf(l, op, il, ir, 4, 5, 0, 1, 2, 3) \ 922 xxjmpf(l, op, il, ir, 5, 0, 1, 2, 3, 4) 923#endif 924 925.data 32 926buff: 927.size 16 928ok: 929.c "ok\n" 930 931.code 932 prolog 933 934 alu(__LINE__, add) 935 alux(__LINE__, add) 936 fop(__LINE__, add) 937 alu(__LINE__, sub) 938 alux(__LINE__, sub) 939 fop(__LINE__, sub) 940 alu(__LINE__, mul) 941 fop(__LINE__, mul) 942 alu(__LINE__, div) 943 alu_u(__LINE__, div) 944 fop(__LINE__, div) 945 alu(__LINE__, rem) 946 alu_u(__LINE__, rem) 947 alu(__LINE__, and) 948 alu(__LINE__, or) 949 alu(__LINE__, xor) 950 alu(__LINE__, lsh) 951 alu(__LINE__, rsh) 952 alu_u(__LINE__, rsh) 953 uni(__LINE__, negr) 954 unf(__LINE__, negr) 955 uni(__LINE__, comr) 956 unf(__LINE__, absr) 957 unf(__LINE__, sqrtr) 958 alu(__LINE__, lt) 959 alu_u(__LINE__, lt) 960 fcmp(__LINE__, lt) 961 alu(__LINE__, le) 962 alu_u(__LINE__, le) 963 fcmp(__LINE__, le) 964 alu(__LINE__, eq) 965 fcmp(__LINE__, eq) 966 alu(__LINE__, ge) 967 alu_u(__LINE__, ge) 968 fcmp(__LINE__, ge) 969 alu(__LINE__, gt) 970 alu_u(__LINE__, gt) 971 fcmp(__LINE__, gt) 972 alu(__LINE__, ne) 973 fcmp(__LINE__, ne) 974 fcmp(__LINE__, unlt) 975 fcmp(__LINE__, unle) 976 fcmp(__LINE__, uneq) 977 fcmp(__LINE__, unge) 978 fcmp(__LINE__, ungt) 979 fcmp(__LINE__, ltgt) 980 fcmp(__LINE__, ord) 981 fcmp(__LINE__, unord) 982 mvi(__LINE__) 983 mvf(__LINE__) 984 uni(__LINE__, extr_c) 985 uni(__LINE__, extr_uc) 986 uni(__LINE__, extr_s) 987 uni(__LINE__, extr_us) 988#if __WORDSIZE == 64 989 uni(__LINE__, extr_ui) 990#endif 991 uni(__LINE__, htonr) 992 f2f(__LINE__, _f, extr_d_f) 993 f2f(__LINE__, _d, extr_f_d) 994 f2i(__LINE__, truncr) 995 i2f(__LINE__, extr) 996 ldi(__LINE__) 997 ldf(__LINE__) 998 sti(__LINE__) 999 stf(__LINE__) 1000 jmpi(__LINE__, lt, , 0, 1) 1001 jmpi(__LINE__, lt, _u, 0, 1) 1002 jmpf(__LINE__, lt, 0, 1) 1003 jmpi(__LINE__, le, , 1, 1) 1004 jmpi(__LINE__, le, _u, 1, 1) 1005 jmpf(__LINE__, le, 1, 1) 1006 jmpi(__LINE__, eq, , -1, -1) 1007 jmpf(__LINE__, eq, -1, -1) 1008 jmpi(__LINE__, ge, , 2, 2) 1009 jmpi(__LINE__, ge, _u, 2, 2) 1010 jmpf(__LINE__, ge, 2, 2) 1011 jmpi(__LINE__, gt, , 2, 1) 1012 jmpi(__LINE__, gt, _u, 2, 1) 1013 jmpf(__LINE__, gt, 2, 1) 1014 jmpi(__LINE__, ne, , 3, 2) 1015 jmpf(__LINE__, ne, 3, 2) 1016 jmpi(__LINE__, ms, , 1, 1) 1017 jmpi(__LINE__, mc, , 1, 2) 1018#if __WORDSIZE == 32 1019# define ix7f 0x7fffffff 1020# define ix80 0x80000000 1021# define ixff 0xffffffff 1022#else 1023# define ix7f 0x7fffffffffffffff 1024# define ix80 0x8000000000000000 1025# define ixff 0xffffffffffffffff 1026#endif 1027 jmpi(__LINE__, oadd, , ix7f, 1) 1028 jmpi(__LINE__, oadd, _u, ixff, 1) 1029 jmpi(__LINE__, xadd, , ix80, 1) 1030 jmpi(__LINE__, xadd, _u, ix7f, 1) 1031 jmpi(__LINE__, osub, , ix80, 1) 1032 jmpi(__LINE__, osub, _u, 0, 1) 1033 jmpi(__LINE__, xsub, , ix7f, 1) 1034 jmpi(__LINE__, xsub, _u, ix80, 1) 1035 jmpf(__LINE__, unlt, 0, 1) 1036 jmpf(__LINE__, unle, 1, 1) 1037 jmpf(__LINE__, uneq, 2, 2) 1038 jmpf(__LINE__, unge, 3, 3) 1039 jmpf(__LINE__, ungt, 4, 3) 1040 jmpf(__LINE__, ltgt, 5, 4) 1041 jmpf(__LINE__, ord, 0, 0) 1042 jmpf(__LINE__, unord, 0, $(0.0 / 0.0)) 1043 1044 prepare 1045 pushargi ok 1046 ellipsis 1047 finishi @printf 1048 1049 ret 1050 epilog 1051