#ifndef X /* amd64 */ #define X(NMemArgs, SetsZeroFlag, LeavesFlags) #endif #define T(a,b,c,d,e,f,g,h) { \ {[Kw]=K##a, [Kl]=K##b, [Ks]=K##c, [Kd]=K##d}, \ {[Kw]=K##e, [Kl]=K##f, [Ks]=K##g, [Kd]=K##h} \ } /*********************/ /* PUBLIC OPERATIONS */ /*********************/ /* Arithmetic and Bits */ O(add, T(w,l,s,d, w,l,s,d), 1) X(2, 1, 0) O(sub, T(w,l,s,d, w,l,s,d), 1) X(2, 1, 0) O(div, T(w,l,s,d, w,l,s,d), 1) X(0, 0, 0) O(rem, T(w,l,e,e, w,l,e,e), 1) X(0, 0, 0) O(udiv, T(w,l,e,e, w,l,e,e), 1) X(0, 0, 0) O(urem, T(w,l,e,e, w,l,e,e), 1) X(0, 0, 0) O(mul, T(w,l,s,d, w,l,s,d), 1) X(2, 0, 0) O(and, T(w,l,e,e, w,l,e,e), 1) X(2, 1, 0) O(or, T(w,l,e,e, w,l,e,e), 1) X(2, 1, 0) O(xor, T(w,l,e,e, w,l,e,e), 1) X(2, 1, 0) O(sar, T(w,l,e,e, w,w,e,e), 1) X(1, 1, 0) O(shr, T(w,l,e,e, w,w,e,e), 1) X(1, 1, 0) O(shl, T(w,l,e,e, w,w,e,e), 1) X(1, 1, 0) /* Comparisons */ O(ceqw, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) O(cnew, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) O(csgew, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) O(csgtw, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) O(cslew, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) O(csltw, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) O(cugew, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) O(cugtw, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) O(culew, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) O(cultw, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) O(ceql, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) O(cnel, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) O(csgel, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) O(csgtl, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) O(cslel, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) O(csltl, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) O(cugel, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) O(cugtl, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) O(culel, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) O(cultl, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) O(ceqs, T(s,s,e,e, s,s,e,e), 1) X(0, 1, 0) O(cges, T(s,s,e,e, s,s,e,e), 1) X(0, 1, 0) O(cgts, T(s,s,e,e, s,s,e,e), 1) X(0, 1, 0) O(cles, T(s,s,e,e, s,s,e,e), 1) X(0, 1, 0) O(clts, T(s,s,e,e, s,s,e,e), 1) X(0, 1, 0) O(cnes, T(s,s,e,e, s,s,e,e), 1) X(0, 1, 0) O(cos, T(s,s,e,e, s,s,e,e), 1) X(0, 1, 0) O(cuos, T(s,s,e,e, s,s,e,e), 1) X(0, 1, 0) O(ceqd, T(d,d,e,e, d,d,e,e), 1) X(0, 1, 0) O(cged, T(d,d,e,e, d,d,e,e), 1) X(0, 1, 0) O(cgtd, T(d,d,e,e, d,d,e,e), 1) X(0, 1, 0) O(cled, T(d,d,e,e, d,d,e,e), 1) X(0, 1, 0) O(cltd, T(d,d,e,e, d,d,e,e), 1) X(0, 1, 0) O(cned, T(d,d,e,e, d,d,e,e), 1) X(0, 1, 0) O(cod, T(d,d,e,e, d,d,e,e), 1) X(0, 1, 0) O(cuod, T(d,d,e,e, d,d,e,e), 1) X(0, 1, 0) /* Memory */ O(storeb, T(w,e,e,e, m,e,e,e), 0) X(0, 0, 1) O(storeh, T(w,e,e,e, m,e,e,e), 0) X(0, 0, 1) O(storew, T(w,e,e,e, m,e,e,e), 0) X(0, 0, 1) O(storel, T(l,e,e,e, m,e,e,e), 0) X(0, 0, 1) O(stores, T(s,e,e,e, m,e,e,e), 0) X(0, 0, 1) O(stored, T(d,e,e,e, m,e,e,e), 0) X(0, 0, 1) O(loadsb, T(m,m,e,e, x,x,e,e), 0) X(0, 0, 1) O(loadub, T(m,m,e,e, x,x,e,e), 0) X(0, 0, 1) O(loadsh, T(m,m,e,e, x,x,e,e), 0) X(0, 0, 1) O(loaduh, T(m,m,e,e, x,x,e,e), 0) X(0, 0, 1) O(loadsw, T(m,m,e,e, x,x,e,e), 0) X(0, 0, 1) O(loaduw, T(m,m,e,e, x,x,e,e), 0) X(0, 0, 1) O(load, T(m,m,m,m, x,x,x,x), 0) X(0, 0, 1) /* Extensions and Truncations */ O(extsb, T(w,w,e,e, x,x,e,e), 1) X(0, 0, 1) O(extub, T(w,w,e,e, x,x,e,e), 1) X(0, 0, 1) O(extsh, T(w,w,e,e, x,x,e,e), 1) X(0, 0, 1) O(extuh, T(w,w,e,e, x,x,e,e), 1) X(0, 0, 1) O(extsw, T(e,w,e,e, e,x,e,e), 1) X(0, 0, 1) O(extuw, T(e,w,e,e, e,x,e,e), 1) X(0, 0, 1) O(exts, T(e,e,e,s, e,e,e,x), 1) X(0, 0, 1) O(truncd, T(e,e,d,e, e,e,x,e), 1) X(0, 0, 1) O(stosi, T(s,s,e,e, x,x,e,e), 1) X(0, 0, 1) O(dtosi, T(d,d,e,e, x,x,e,e), 1) X(0, 0, 1) O(swtof, T(e,e,w,w, e,e,x,x), 1) X(0, 0, 1) O(sltof, T(e,e,l,l, e,e,x,x), 1) X(0, 0, 1) O(cast, T(s,d,w,l, x,x,x,x), 1) X(0, 0, 1) /* Stack Allocation */ O(alloc4, T(e,l,e,e, e,x,e,e), 0) X(0, 0, 0) O(alloc8, T(e,l,e,e, e,x,e,e), 0) X(0, 0, 0) O(alloc16, T(e,l,e,e, e,x,e,e), 0) X(0, 0, 0) /* Variadic Function Helpers */ O(vaarg, T(m,m,m,m, x,x,x,x), 0) X(0, 0, 0) O(vastart, T(m,e,e,e, x,e,e,e), 0) X(0, 0, 0) O(copy, T(w,l,s,d, x,x,x,x), 0) X(0, 0, 1) /****************************************/ /* INTERNAL OPERATIONS (keep nop first) */ /****************************************/ /* Miscellaneous and Architecture-Specific Operations */ O(nop, T(x,x,x,x, x,x,x,x), 0) X(0, 0, 1) O(addr, T(m,m,e,e, x,x,e,e), 0) X(0, 0, 1) O(swap, T(w,l,s,d, w,l,s,d), 0) X(1, 0, 0) O(sign, T(w,l,e,e, x,x,e,e), 0) X(0, 0, 0) O(salloc, T(e,l,e,e, e,x,e,e), 0) X(0, 0, 0) O(xidiv, T(w,l,e,e, x,x,e,e), 0) X(1, 0, 0) O(xdiv, T(w,l,e,e, x,x,e,e), 0) X(1, 0, 0) O(xcmp, T(w,l,s,d, w,l,s,d), 0) X(1, 1, 0) O(xtest, T(w,l,e,e, w,l,e,e), 0) X(1, 1, 0) O(acmp, T(w,l,e,e, w,l,e,e), 0) X(0, 0, 0) O(acmn, T(w,l,e,e, w,l,e,e), 0) X(0, 0, 0) O(afcmp, T(e,e,s,d, e,e,s,d), 0) X(0, 0, 0) /* Arguments, Parameters, and Calls */ O(par, T(x,x,x,x, x,x,x,x), 0) X(0, 0, 0) O(parc, T(e,x,e,e, e,x,e,e), 0) X(0, 0, 0) O(pare, T(x,x,x,x, x,x,x,x), 0) X(0, 0, 0) O(arg, T(w,l,s,d, x,x,x,x), 0) X(0, 0, 0) O(argc, T(e,x,e,e, e,l,e,e), 0) X(0, 0, 0) O(arge, T(w,l,s,d, x,x,x,x), 0) X(0, 0, 0) O(call, T(m,m,m,m, x,x,x,x), 0) X(0, 0, 0) O(vacall, T(m,m,m,m, x,x,x,x), 0) X(0, 0, 0) /* Flags Setting */ O(flagieq, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) O(flagine, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) O(flagisge, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) O(flagisgt, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) O(flagisle, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) O(flagislt, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) O(flagiuge, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) O(flagiugt, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) O(flagiule, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) O(flagiult, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) O(flagfeq, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) O(flagfge, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) O(flagfgt, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) O(flagfle, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) O(flagflt, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) O(flagfne, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) O(flagfo, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) O(flagfuo, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) #undef T #undef X #undef O /* | column -t -o ' ' */