1 | #ifndef X /* amd64 */ |
2 | #define X(NMemArgs, SetsZeroFlag, LeavesFlags) |
3 | #endif |
4 | |
5 | #ifndef V /* riscv64 */ |
6 | #define V(Imm) |
7 | #endif |
8 | |
9 | |
10 | #define T(a,b,c,d,e,f,g,h) { \ |
11 | {[Kw]=K##a, [Kl]=K##b, [Ks]=K##c, [Kd]=K##d}, \ |
12 | {[Kw]=K##e, [Kl]=K##f, [Ks]=K##g, [Kd]=K##h} \ |
13 | } |
14 | |
15 | |
16 | /*********************/ |
17 | /* PUBLIC OPERATIONS */ |
18 | /*********************/ |
19 | |
20 | /* Arithmetic and Bits */ |
21 | O(add, T(w,l,s,d, w,l,s,d), 1) X(2, 1, 0) V(1) |
22 | O(sub, T(w,l,s,d, w,l,s,d), 1) X(2, 1, 0) V(0) |
23 | O(neg, T(w,l,s,d, x,x,x,x), 1) X(1, 1, 0) V(0) |
24 | O(div, T(w,l,s,d, w,l,s,d), 1) X(0, 0, 0) V(0) |
25 | O(rem, T(w,l,e,e, w,l,e,e), 1) X(0, 0, 0) V(0) |
26 | O(udiv, T(w,l,e,e, w,l,e,e), 1) X(0, 0, 0) V(0) |
27 | O(urem, T(w,l,e,e, w,l,e,e), 1) X(0, 0, 0) V(0) |
28 | O(mul, T(w,l,s,d, w,l,s,d), 1) X(2, 0, 0) V(0) |
29 | O(and, T(w,l,e,e, w,l,e,e), 1) X(2, 1, 0) V(1) |
30 | O(or, T(w,l,e,e, w,l,e,e), 1) X(2, 1, 0) V(1) |
31 | O(xor, T(w,l,e,e, w,l,e,e), 1) X(2, 1, 0) V(1) |
32 | O(sar, T(w,l,e,e, w,w,e,e), 1) X(1, 1, 0) V(1) |
33 | O(shr, T(w,l,e,e, w,w,e,e), 1) X(1, 1, 0) V(1) |
34 | O(shl, T(w,l,e,e, w,w,e,e), 1) X(1, 1, 0) V(1) |
35 | |
36 | /* Comparisons */ |
37 | O(ceqw, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) V(0) |
38 | O(cnew, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) V(0) |
39 | O(csgew, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) V(0) |
40 | O(csgtw, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) V(0) |
41 | O(cslew, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) V(0) |
42 | O(csltw, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) V(1) |
43 | O(cugew, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) V(0) |
44 | O(cugtw, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) V(0) |
45 | O(culew, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) V(0) |
46 | O(cultw, T(w,w,e,e, w,w,e,e), 1) X(0, 1, 0) V(1) |
47 | |
48 | O(ceql, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) V(0) |
49 | O(cnel, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) V(0) |
50 | O(csgel, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) V(0) |
51 | O(csgtl, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) V(0) |
52 | O(cslel, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) V(0) |
53 | O(csltl, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) V(1) |
54 | O(cugel, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) V(0) |
55 | O(cugtl, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) V(0) |
56 | O(culel, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) V(0) |
57 | O(cultl, T(l,l,e,e, l,l,e,e), 1) X(0, 1, 0) V(1) |
58 | |
59 | O(ceqs, T(s,s,e,e, s,s,e,e), 1) X(0, 1, 0) V(0) |
60 | O(cges, T(s,s,e,e, s,s,e,e), 1) X(0, 1, 0) V(0) |
61 | O(cgts, T(s,s,e,e, s,s,e,e), 1) X(0, 1, 0) V(0) |
62 | O(cles, T(s,s,e,e, s,s,e,e), 1) X(0, 1, 0) V(0) |
63 | O(clts, T(s,s,e,e, s,s,e,e), 1) X(0, 1, 0) V(0) |
64 | O(cnes, T(s,s,e,e, s,s,e,e), 1) X(0, 1, 0) V(0) |
65 | O(cos, T(s,s,e,e, s,s,e,e), 1) X(0, 1, 0) V(0) |
66 | O(cuos, T(s,s,e,e, s,s,e,e), 1) X(0, 1, 0) V(0) |
67 | |
68 | O(ceqd, T(d,d,e,e, d,d,e,e), 1) X(0, 1, 0) V(0) |
69 | O(cged, T(d,d,e,e, d,d,e,e), 1) X(0, 1, 0) V(0) |
70 | O(cgtd, T(d,d,e,e, d,d,e,e), 1) X(0, 1, 0) V(0) |
71 | O(cled, T(d,d,e,e, d,d,e,e), 1) X(0, 1, 0) V(0) |
72 | O(cltd, T(d,d,e,e, d,d,e,e), 1) X(0, 1, 0) V(0) |
73 | O(cned, T(d,d,e,e, d,d,e,e), 1) X(0, 1, 0) V(0) |
74 | O(cod, T(d,d,e,e, d,d,e,e), 1) X(0, 1, 0) V(0) |
75 | O(cuod, T(d,d,e,e, d,d,e,e), 1) X(0, 1, 0) V(0) |
76 | |
77 | /* Memory */ |
78 | O(storeb, T(w,e,e,e, m,e,e,e), 0) X(0, 0, 1) V(0) |
79 | O(storeh, T(w,e,e,e, m,e,e,e), 0) X(0, 0, 1) V(0) |
80 | O(storew, T(w,e,e,e, m,e,e,e), 0) X(0, 0, 1) V(0) |
81 | O(storel, T(l,e,e,e, m,e,e,e), 0) X(0, 0, 1) V(0) |
82 | O(stores, T(s,e,e,e, m,e,e,e), 0) X(0, 0, 1) V(0) |
83 | O(stored, T(d,e,e,e, m,e,e,e), 0) X(0, 0, 1) V(0) |
84 | |
85 | O(loadsb, T(m,m,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
86 | O(loadub, T(m,m,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
87 | O(loadsh, T(m,m,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
88 | O(loaduh, T(m,m,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
89 | O(loadsw, T(m,m,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
90 | O(loaduw, T(m,m,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
91 | O(load, T(m,m,m,m, x,x,x,x), 0) X(0, 0, 1) V(0) |
92 | |
93 | /* Extensions and Truncations */ |
94 | O(extsb, T(w,w,e,e, x,x,e,e), 1) X(0, 0, 1) V(0) |
95 | O(extub, T(w,w,e,e, x,x,e,e), 1) X(0, 0, 1) V(0) |
96 | O(extsh, T(w,w,e,e, x,x,e,e), 1) X(0, 0, 1) V(0) |
97 | O(extuh, T(w,w,e,e, x,x,e,e), 1) X(0, 0, 1) V(0) |
98 | O(extsw, T(e,w,e,e, e,x,e,e), 1) X(0, 0, 1) V(0) |
99 | O(extuw, T(e,w,e,e, e,x,e,e), 1) X(0, 0, 1) V(0) |
100 | |
101 | O(exts, T(e,e,e,s, e,e,e,x), 1) X(0, 0, 1) V(0) |
102 | O(truncd, T(e,e,d,e, e,e,x,e), 1) X(0, 0, 1) V(0) |
103 | O(stosi, T(s,s,e,e, x,x,e,e), 1) X(0, 0, 1) V(0) |
104 | O(stoui, T(s,s,e,e, x,x,e,e), 1) X(0, 0, 1) V(0) |
105 | O(dtosi, T(d,d,e,e, x,x,e,e), 1) X(0, 0, 1) V(0) |
106 | O(dtoui, T(d,d,e,e, x,x,e,e), 1) X(0, 0, 1) V(0) |
107 | O(swtof, T(e,e,w,w, e,e,x,x), 1) X(0, 0, 1) V(0) |
108 | O(uwtof, T(e,e,w,w, e,e,x,x), 1) X(0, 0, 1) V(0) |
109 | O(sltof, T(e,e,l,l, e,e,x,x), 1) X(0, 0, 1) V(0) |
110 | O(ultof, T(e,e,l,l, e,e,x,x), 1) X(0, 0, 1) V(0) |
111 | O(cast, T(s,d,w,l, x,x,x,x), 1) X(0, 0, 1) V(0) |
112 | |
113 | /* Stack Allocation */ |
114 | O(alloc4, T(e,l,e,e, e,x,e,e), 0) X(0, 0, 0) V(0) |
115 | O(alloc8, T(e,l,e,e, e,x,e,e), 0) X(0, 0, 0) V(0) |
116 | O(alloc16, T(e,l,e,e, e,x,e,e), 0) X(0, 0, 0) V(0) |
117 | |
118 | /* Variadic Function Helpers */ |
119 | O(vaarg, T(m,m,m,m, x,x,x,x), 0) X(0, 0, 0) V(0) |
120 | O(vastart, T(m,e,e,e, x,e,e,e), 0) X(0, 0, 0) V(0) |
121 | |
122 | O(copy, T(w,l,s,d, x,x,x,x), 0) X(0, 0, 1) V(0) |
123 | |
124 | |
125 | /****************************************/ |
126 | /* INTERNAL OPERATIONS (keep nop first) */ |
127 | /****************************************/ |
128 | |
129 | /* Miscellaneous and Architecture-Specific Operations */ |
130 | O(nop, T(x,x,x,x, x,x,x,x), 0) X(0, 0, 1) V(0) |
131 | O(addr, T(m,m,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
132 | O(swap, T(w,l,s,d, w,l,s,d), 0) X(1, 0, 0) V(0) |
133 | O(sign, T(w,l,e,e, x,x,e,e), 0) X(0, 0, 0) V(0) |
134 | O(salloc, T(e,l,e,e, e,x,e,e), 0) X(0, 0, 0) V(0) |
135 | O(xidiv, T(w,l,e,e, x,x,e,e), 0) X(1, 0, 0) V(0) |
136 | O(xdiv, T(w,l,e,e, x,x,e,e), 0) X(1, 0, 0) V(0) |
137 | O(xcmp, T(w,l,s,d, w,l,s,d), 0) X(1, 1, 0) V(0) |
138 | O(xtest, T(w,l,e,e, w,l,e,e), 0) X(1, 1, 0) V(0) |
139 | O(acmp, T(w,l,e,e, w,l,e,e), 0) X(0, 0, 0) V(0) |
140 | O(acmn, T(w,l,e,e, w,l,e,e), 0) X(0, 0, 0) V(0) |
141 | O(afcmp, T(e,e,s,d, e,e,s,d), 0) X(0, 0, 0) V(0) |
142 | O(reqz, T(w,l,e,e, x,x,e,e), 0) X(0, 0, 0) V(0) |
143 | O(rnez, T(w,l,e,e, x,x,e,e), 0) X(0, 0, 0) V(0) |
144 | |
145 | /* Arguments, Parameters, and Calls */ |
146 | O(par, T(x,x,x,x, x,x,x,x), 0) X(0, 0, 0) V(0) |
147 | O(parc, T(e,x,e,e, e,x,e,e), 0) X(0, 0, 0) V(0) |
148 | O(pare, T(e,x,e,e, e,x,e,e), 0) X(0, 0, 0) V(0) |
149 | O(arg, T(w,l,s,d, x,x,x,x), 0) X(0, 0, 0) V(0) |
150 | O(argc, T(e,x,e,e, e,l,e,e), 0) X(0, 0, 0) V(0) |
151 | O(arge, T(e,l,e,e, e,x,e,e), 0) X(0, 0, 0) V(0) |
152 | O(argv, T(x,x,x,x, x,x,x,x), 0) X(0, 0, 0) V(0) |
153 | O(call, T(m,m,m,m, x,x,x,x), 0) X(0, 0, 0) V(0) |
154 | |
155 | /* Flags Setting */ |
156 | O(flagieq, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
157 | O(flagine, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
158 | O(flagisge, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
159 | O(flagisgt, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
160 | O(flagisle, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
161 | O(flagislt, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
162 | O(flagiuge, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
163 | O(flagiugt, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
164 | O(flagiule, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
165 | O(flagiult, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
166 | O(flagfeq, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
167 | O(flagfge, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
168 | O(flagfgt, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
169 | O(flagfle, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
170 | O(flagflt, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
171 | O(flagfne, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
172 | O(flagfo, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
173 | O(flagfuo, T(x,x,e,e, x,x,e,e), 0) X(0, 0, 1) V(0) |
174 | |
175 | |
176 | #undef T |
177 | #undef X |
178 | #undef V |
179 | #undef O |
180 | |
181 | /* |
182 | | column -t -o ' ' |
183 | */ |
184 | |