00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "instruction.h"
00018
00019 namespace VM
00020 {
00021 namespace INST
00022 {
00023
00024 const DescEntry _inst_desc[IID_LAST]=
00025 {
00026 { 2, AC_void, "nop", 0, 0, 0 },
00027 { 2, AC_void, "hlt", 0, 0, 0 },
00028
00029 { 4, AC_bb, "plb", 0, 0, 0 },
00030 { 6, AC_sb, "pls", 0, 0, 0 },
00031 { 8, AC_ib, "pli", 0, 0, 0 },
00032 { 12, AC_lb, "pll", 0, 0, 0 },
00033 { 8, AC_fb, "plf", 0, 0, 0 },
00034 { 12, AC_db, "pld", 0, 0, 0 },
00035 { 12, AC_ffb, "plf2", 0, 0, 0 },
00036 { 20, AC_ddb, "pld2", 0, 0, 0 },
00037 { 16, AC_fffb, "plf3", 0, 0, 0 },
00038 { 28, AC_dddb, "pld3", 0, 0, 0 },
00039 { 20, AC_ffffb, "plf4", 0, 0, 0 },
00040 { 36, AC_ddddb, "pld4", 0, 0, 0 },
00041
00042 { 2, AC_void, "pln", 0, 0, 0 },
00043
00044 { 8, AC_ib, "psb", 0, 0, 0 },
00045 { 8, AC_ib, "pss", 0, 0, 0 },
00046 { 8, AC_ib, "psi", 0, 0, 0 },
00047 { 8, AC_ib, "psl", 0, 0, 0 },
00048 { 8, AC_ib, "psp", 0, 0, 0 },
00049 { 8, AC_ib, "psa", 0, 0, 0 },
00050 { 8, AC_ib, "psf", 0, 0, 0 },
00051 { 8, AC_ib, "psd", 0, 0, 0 },
00052 { 8, AC_ib, "psf2", 0, 0, 0 },
00053 { 8, AC_ib, "psd2", 0, 0, 0 },
00054 { 8, AC_ib, "psf3", 0, 0, 0 },
00055 { 8, AC_ib, "psd3", 0, 0, 0 },
00056 { 8, AC_ib, "psf4", 0, 0, 0 },
00057 { 8, AC_ib, "psd4", 0, 0, 0 },
00058
00059 { 8, AC_Sb, "pgb", 0, 0, 4 },
00060 { 8, AC_Sb, "pgs", 0, 0, 4 },
00061 { 8, AC_Sb, "pgi", 0, 0, 4 },
00062 { 8, AC_Sb, "pgl", 0, 0, 4 },
00063 { 8, AC_Sb, "pgp", 0, 0, 4 },
00064 { 8, AC_Sb, "pga", 0, 0, 4 },
00065 { 8, AC_Sb, "pgf", 0, 0, 4 },
00066 { 8, AC_Sb, "pgd", 0, 0, 4 },
00067 { 8, AC_Sb, "pgf2", 0, 0, 4 },
00068 { 8, AC_Sb, "pgd2", 0, 0, 4 },
00069 { 8, AC_Sb, "pgf3", 0, 0, 4 },
00070 { 8, AC_Sb, "pgd3", 0, 0, 4 },
00071 { 8, AC_Sb, "pgf4", 0, 0, 4 },
00072 { 8, AC_Sb, "pgd4", 0, 0, 4 },
00073
00074 { 8, AC_ib, "pfb", 0, 0, 0 },
00075 { 8, AC_ib, "pfs", 0, 0, 0 },
00076 { 8, AC_ib, "pfi", 0, 0, 0 },
00077 { 8, AC_ib, "pfl", 0, 0, 0 },
00078 { 8, AC_ib, "pfpr", 0, 0, 0 },
00079 { 8, AC_ib, "pfpw", 0, 0, 0 },
00080 { 8, AC_ib, "pfar", 0, 0, 0 },
00081 { 8, AC_ib, "pfaw", 0, 0, 0 },
00082 { 8, AC_ib, "pff", 0, 0, 0 },
00083 { 8, AC_ib, "pfd", 0, 0, 0 },
00084 { 8, AC_ib, "pff2", 0, 0, 0 },
00085 { 8, AC_ib, "pfd2", 0, 0, 0 },
00086 { 8, AC_ib, "pff3", 0, 0, 0 },
00087 { 8, AC_ib, "pfd3", 0, 0, 0 },
00088 { 8, AC_ib, "pff4", 0, 0, 0 },
00089 { 8, AC_ib, "pfd4", 0, 0, 0 },
00090
00091 { 2, AC_void, "pab", 0, 0, 0 },
00092 { 2, AC_void, "pas", 0, 0, 0 },
00093 { 2, AC_void, "pai", 0, 0, 0 },
00094 { 2, AC_void, "pal", 0, 0, 0 },
00095 { 2, AC_void, "papr", 0, 0, 0 },
00096 { 2, AC_void, "papw", 0, 0, 0 },
00097 { 2, AC_void, "paar", 0, 0, 0 },
00098 { 2, AC_void, "paaw", 0, 0, 0 },
00099 { 2, AC_void, "paf", 0, 0, 0 },
00100 { 2, AC_void, "pad", 0, 0, 0 },
00101
00102 { 6, AC_i, "pi", 0, 0, 0 },
00103
00104 { 6, AC_i, "popv", 0, 0, 0 },
00105 { 6, AC_i, "popp", 0, 0, 0 },
00106
00107 { 8, AC_ib, "ssb", 0, 0, 0 },
00108 { 8, AC_ib, "sss", 0, 0, 0 },
00109 { 8, AC_ib, "ssi", 0, 0, 0 },
00110 { 8, AC_ib, "ssl", 0, 0, 0 },
00111 { 8, AC_ib, "ssp", 0, 0, 0 },
00112 { 8, AC_ib, "ssa", 0, 0, 0 },
00113 { 8, AC_ib, "ssf", 0, 0, 0 },
00114 { 8, AC_ib, "ssd", 0, 0, 0 },
00115 { 8, AC_ib, "ssf2", 0, 0, 0 },
00116 { 8, AC_ib, "ssd2", 0, 0, 0 },
00117 { 8, AC_ib, "ssf3", 0, 0, 0 },
00118 { 8, AC_ib, "ssd3", 0, 0, 0 },
00119 { 8, AC_ib, "ssf4", 0, 0, 0 },
00120 { 8, AC_ib, "ssd4", 0, 0, 0 },
00121
00122 { 8, AC_Sb, "sgb", 0, 0, 4 },
00123 { 8, AC_Sb, "sgs", 0, 0, 4 },
00124 { 8, AC_Sb, "sgi", 0, 0, 4 },
00125 { 8, AC_Sb, "sgl", 0, 0, 4 },
00126 { 8, AC_Sb, "sgp", 0, 0, 4 },
00127 { 8, AC_Sb, "sga", 0, 0, 4 },
00128 { 8, AC_Sb, "sgf", 0, 0, 4 },
00129 { 8, AC_Sb, "sgd", 0, 0, 4 },
00130 { 8, AC_Sb, "sgf2", 0, 0, 4 },
00131 { 8, AC_Sb, "sgd2", 0, 0, 4 },
00132 { 8, AC_Sb, "sgf3", 0, 0, 4 },
00133 { 8, AC_Sb, "sgd3", 0, 0, 4 },
00134 { 8, AC_Sb, "sgf4", 0, 0, 4 },
00135 { 8, AC_Sb, "sgd4", 0, 0, 4 },
00136
00137 { 8, AC_ib, "sfb", 0, 0, 0 },
00138 { 8, AC_ib, "sfs", 0, 0, 0 },
00139 { 8, AC_ib, "sfi", 0, 0, 0 },
00140 { 8, AC_ib, "sfl", 0, 0, 0 },
00141 { 8, AC_ib, "sfp", 0, 0, 0 },
00142 { 8, AC_ib, "sfa", 0, 0, 0 },
00143 { 8, AC_ib, "sff", 0, 0, 0 },
00144 { 8, AC_ib, "sfd", 0, 0, 0 },
00145 { 8, AC_ib, "sff2", 0, 0, 0 },
00146 { 8, AC_ib, "sfd2", 0, 0, 0 },
00147 { 8, AC_ib, "sff3", 0, 0, 0 },
00148 { 8, AC_ib, "sfd3", 0, 0, 0 },
00149 { 8, AC_ib, "sff4", 0, 0, 0 },
00150 { 8, AC_ib, "sfd4", 0, 0, 0 },
00151
00152 { 2, AC_void, "sab", 0, 0, 0 },
00153 { 2, AC_void, "sas", 0, 0, 0 },
00154 { 2, AC_void, "sai", 0, 0, 0 },
00155 { 2, AC_void, "sal", 0, 0, 0 },
00156 { 2, AC_void, "sap", 0, 0, 0 },
00157 { 2, AC_void, "saa", 0, 0, 0 },
00158 { 2, AC_void, "saf", 0, 0, 0 },
00159 { 2, AC_void, "sad", 0, 0, 0 },
00160
00161 { 2, AC_void, "addb", 0, 0, 0 },
00162 { 2, AC_void, "adds", 0, 0, 0 },
00163 { 2, AC_void, "addi", 0, 0, 0 },
00164 { 2, AC_void, "addl", 0, 0, 0 },
00165 { 2, AC_void, "addf", 0, 0, 0 },
00166 { 2, AC_void, "addd", 0, 0, 0 },
00167 { 2, AC_void, "addf2", 0, 0, 0 },
00168 { 2, AC_void, "addd2", 0, 0, 0 },
00169 { 2, AC_void, "addf3", 0, 0, 0 },
00170 { 2, AC_void, "addd3", 0, 0, 0 },
00171 { 2, AC_void, "addf4", 0, 0, 0 },
00172 { 2, AC_void, "addd4", 0, 0, 0 },
00173
00174 { 2, AC_void, "subb", 0, 0, 0 },
00175 { 2, AC_void, "subs", 0, 0, 0 },
00176 { 2, AC_void, "subi", 0, 0, 0 },
00177 { 2, AC_void, "subl", 0, 0, 0 },
00178 { 2, AC_void, "subf", 0, 0, 0 },
00179 { 2, AC_void, "subd", 0, 0, 0 },
00180 { 2, AC_void, "subf2", 0, 0, 0 },
00181 { 2, AC_void, "subd2", 0, 0, 0 },
00182 { 2, AC_void, "subf3", 0, 0, 0 },
00183 { 2, AC_void, "subd3", 0, 0, 0 },
00184 { 2, AC_void, "subf4", 0, 0, 0 },
00185 { 2, AC_void, "subd4", 0, 0, 0 },
00186
00187 { 2, AC_void, "mulb", 0, 0, 0 },
00188 { 2, AC_void, "muls", 0, 0, 0 },
00189 { 2, AC_void, "muli", 0, 0, 0 },
00190 { 2, AC_void, "mull", 0, 0, 0 },
00191 { 2, AC_void, "mulf", 0, 0, 0 },
00192 { 2, AC_void, "muld", 0, 0, 0 },
00193
00194 { 2, AC_void, "divb", 0, 0, 0 },
00195 { 2, AC_void, "divs", 0, 0, 0 },
00196 { 2, AC_void, "divi", 0, 0, 0 },
00197 { 2, AC_void, "divl", 0, 0, 0 },
00198 { 2, AC_void, "divf", 0, 0, 0 },
00199 { 2, AC_void, "divd", 0, 0, 0 },
00200
00201 { 2, AC_void, "modb", 0, 0, 0 },
00202 { 2, AC_void, "mods", 0, 0, 0 },
00203 { 2, AC_void, "modi", 0, 0, 0 },
00204 { 2, AC_void, "modl", 0, 0, 0 },
00205 { 2, AC_void, "modf", 0, 0, 0 },
00206 { 2, AC_void, "modd", 0, 0, 0 },
00207
00208 { 2, AC_void, "negb", 0, 0, 0 },
00209 { 2, AC_void, "negs", 0, 0, 0 },
00210 { 2, AC_void, "negi", 0, 0, 0 },
00211 { 2, AC_void, "negl", 0, 0, 0 },
00212 { 2, AC_void, "negf", 0, 0, 0 },
00213 { 2, AC_void, "negd", 0, 0, 0 },
00214 { 2, AC_void, "negf2", 0, 0, 0 },
00215 { 2, AC_void, "negd2", 0, 0, 0 },
00216 { 2, AC_void, "negf3", 0, 0, 0 },
00217 { 2, AC_void, "negd3", 0, 0, 0 },
00218 { 2, AC_void, "negf4", 0, 0, 0 },
00219 { 2, AC_void, "negd4", 0, 0, 0 },
00220
00221 { 2, AC_void, "eqb", 0, 0, 0 },
00222 { 2, AC_void, "eqs", 0, 0, 0 },
00223 { 2, AC_void, "eqi", 0, 0, 0 },
00224 { 2, AC_void, "eql", 0, 0, 0 },
00225 { 2, AC_void, "eqp", 0, 0, 0 },
00226 { 2, AC_void, "eqa", 0, 0, 0 },
00227 { 2, AC_void, "eqf", 0, 0, 0 },
00228 { 2, AC_void, "eqd", 0, 0, 0 },
00229 { 2, AC_void, "eqf2", 0, 0, 0 },
00230 { 2, AC_void, "eqd2", 0, 0, 0 },
00231 { 2, AC_void, "eqf3", 0, 0, 0 },
00232 { 2, AC_void, "eqd3", 0, 0, 0 },
00233 { 2, AC_void, "eqf4", 0, 0, 0 },
00234 { 2, AC_void, "eqd4", 0, 0, 0 },
00235
00236 { 2, AC_void, "andb", 0, 0, 0 },
00237 { 2, AC_void, "ands", 0, 0, 0 },
00238 { 2, AC_void, "andi", 0, 0, 0 },
00239 { 2, AC_void, "andl", 0, 0, 0 },
00240
00241 { 2, AC_void, "orb", 0, 0, 0 },
00242 { 2, AC_void, "ors", 0, 0, 0 },
00243 { 2, AC_void, "ori", 0, 0, 0 },
00244 { 2, AC_void, "orl", 0, 0, 0 },
00245
00246 { 2, AC_void, "xorb", 0, 0, 0 },
00247 { 2, AC_void, "xors", 0, 0, 0 },
00248 { 2, AC_void, "xori", 0, 0, 0 },
00249 { 2, AC_void, "xorl", 0, 0, 0 },
00250
00251 { 2, AC_void, "shlb", 0, 0, 0 },
00252 { 2, AC_void, "shls", 0, 0, 0 },
00253 { 2, AC_void, "shli", 0, 0, 0 },
00254 { 2, AC_void, "shll", 0, 0, 0 },
00255
00256 { 2, AC_void, "shrb", 0, 0, 0 },
00257 { 2, AC_void, "shrs", 0, 0, 0 },
00258 { 2, AC_void, "shri", 0, 0, 0 },
00259 { 2, AC_void, "shrl", 0, 0, 0 },
00260
00261 { 6, AC_i, "incsb", 0, 0, 0 },
00262 { 6, AC_i, "incss", 0, 0, 0 },
00263 { 6, AC_i, "incsi", 0, 0, 0 },
00264 { 6, AC_i, "incsl", 0, 0, 0 },
00265 { 6, AC_i, "incsf", 0, 0, 0 },
00266 { 6, AC_i, "incsd", 0, 0, 0 },
00267
00268 { 6, AC_i, "decsb", 0, 0, 0 },
00269 { 6, AC_i, "decss", 0, 0, 0 },
00270 { 6, AC_i, "decsi", 0, 0, 0 },
00271 { 6, AC_i, "decsl", 0, 0, 0 },
00272 { 6, AC_i, "decsf", 0, 0, 0 },
00273 { 6, AC_i, "decsd", 0, 0, 0 },
00274
00275 { 2, AC_void, "cvbb", 0, 0, 0 },
00276 { 2, AC_void, "cvbs", 0, 0, 0 },
00277 { 2, AC_void, "cvbi", 0, 0, 0 },
00278 { 2, AC_void, "cvbl", 0, 0, 0 },
00279 { 2, AC_void, "cvbf", 0, 0, 0 },
00280 { 2, AC_void, "cvbd", 0, 0, 0 },
00281 { 2, AC_void, "cvsb", 0, 0, 0 },
00282 { 2, AC_void, "cvss", 0, 0, 0 },
00283 { 2, AC_void, "cvsi", 0, 0, 0 },
00284 { 2, AC_void, "cvsl", 0, 0, 0 },
00285 { 2, AC_void, "cvsf", 0, 0, 0 },
00286 { 2, AC_void, "cvsd", 0, 0, 0 },
00287 { 2, AC_void, "cvib", 0, 0, 0 },
00288 { 2, AC_void, "cvis", 0, 0, 0 },
00289 { 2, AC_void, "cvii", 0, 0, 0 },
00290 { 2, AC_void, "cvil", 0, 0, 0 },
00291 { 2, AC_void, "cvif", 0, 0, 0 },
00292 { 2, AC_void, "cvid", 0, 0, 0 },
00293 { 2, AC_void, "cvlb", 0, 0, 0 },
00294 { 2, AC_void, "cvls", 0, 0, 0 },
00295 { 2, AC_void, "cvli", 0, 0, 0 },
00296 { 2, AC_void, "cvll", 0, 0, 0 },
00297 { 2, AC_void, "cvlf", 0, 0, 0 },
00298 { 2, AC_void, "cvld", 0, 0, 0 },
00299 { 2, AC_void, "cvfb", 0, 0, 0 },
00300 { 2, AC_void, "cvfs", 0, 0, 0 },
00301 { 2, AC_void, "cvfi", 0, 0, 0 },
00302 { 2, AC_void, "cvfl", 0, 0, 0 },
00303 { 2, AC_void, "cvff", 0, 0, 0 },
00304 { 2, AC_void, "cvfd", 0, 0, 0 },
00305 { 2, AC_void, "cvdb", 0, 0, 0 },
00306 { 2, AC_void, "cvds", 0, 0, 0 },
00307 { 2, AC_void, "cvdi", 0, 0, 0 },
00308 { 2, AC_void, "cvdl", 0, 0, 0 },
00309 { 2, AC_void, "cvdf", 0, 0, 0 },
00310 { 2, AC_void, "cvdd", 0, 0, 0 },
00311
00312 { 6, AC_i, "jmp", 2, 0, 0 },
00313
00314 { 6, AC_i, "jnb", 2, 0, 0 },
00315 { 6, AC_i, "jns", 2, 0, 0 },
00316 { 6, AC_i, "jni", 2, 0, 0 },
00317 { 6, AC_i, "jnl", 2, 0, 0 },
00318 { 6, AC_i, "jnp", 2, 0, 0 },
00319 { 6, AC_i, "jna", 2, 0, 0 },
00320 { 6, AC_i, "jnf", 2, 0, 0 },
00321 { 6, AC_i, "jnd", 2, 0, 0 },
00322
00323 { 6, AC_i, "jzb", 2, 0, 0 },
00324 { 6, AC_i, "jzs", 2, 0, 0 },
00325 { 6, AC_i, "jzi", 2, 0, 0 },
00326 { 6, AC_i, "jzl", 2, 0, 0 },
00327 { 6, AC_i, "jzp", 2, 0, 0 },
00328 { 6, AC_i, "jza", 2, 0, 0 },
00329 { 6, AC_i, "jzf", 2, 0, 0 },
00330 { 6, AC_i, "jzd", 2, 0, 0 },
00331
00332 { 4, AC_bb, "anew", 0, 0, 0 },
00333 { 2, AC_void, "asize", 0, 0, 0 },
00334 { 2, AC_void, "acpy", 0, 0, 0 },
00335 { 2, AC_void, "adel", 0, 0, 0 },
00336
00337 { 6, AC_S, "onew", 0, 2, 0 },
00338 { 2, AC_void, "ocpy", 0, 0, 0 },
00339 { 2, AC_void, "odel", 0, 0, 0 },
00340
00341 { 6, AC_S, "scast", 0, 2, 0 },
00342 { 6, AC_S, "dcast", 0, 2, 0 },
00343
00344 { 6, AC_S, "call", 0, 0, 2 },
00345 { 6, AC_S, "mcall", 0, 0, 2 },
00346 { 6, AC_i, "vmcall", 0, 0, 0 },
00347
00348 { 2, AC_void, "ret", 0, 0, 0 },
00349 { 2, AC_void, "retb", 0, 0, 0 },
00350 { 2, AC_void, "rets", 0, 0, 0 },
00351 { 2, AC_void, "reti", 0, 0, 0 },
00352 { 2, AC_void, "retl", 0, 0, 0 },
00353 { 2, AC_void, "retp", 0, 0, 0 },
00354 { 2, AC_void, "reta", 0, 0, 0 },
00355 { 2, AC_void, "retf", 0, 0, 0 },
00356 { 2, AC_void, "retd", 0, 0, 0 },
00357 { 2, AC_void, "retf2", 0, 0, 0 },
00358 { 2, AC_void, "retd2", 0, 0, 0 },
00359 { 2, AC_void, "retf3", 0, 0, 0 },
00360 { 2, AC_void, "retd3", 0, 0, 0 },
00361 { 2, AC_void, "retf4", 0, 0, 0 },
00362 { 2, AC_void, "retd4", 0, 0, 0 },
00363 };
00364
00365 }
00366 }