00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _VM_INSTRUCTION_H_
00018 #define _VM_INSTRUCTION_H_ 1
00019
00027 #include <vm/vmconfig.h>
00028
00029
00030 namespace VM
00031 {
00032
00034 namespace INST
00035 {
00036
00042 enum ArgComb
00043 {
00044 AC_void=0,
00045 AC_i,
00046 AC_S,
00047 AC_bb,
00048 AC_sb,
00049 AC_ib,
00050 AC_Sb,
00051 AC_lb,
00052 AC_fb,
00053 AC_ffb,
00054 AC_fffb,
00055 AC_ffffb,
00056 AC_db,
00057 AC_ddb,
00058 AC_dddb,
00059 AC_ddddb,
00060 };
00061
00062
00072 enum IID
00073 {
00074 NOP=0,
00075 HLT,
00076
00077 PLB,
00078 PLS,
00079 PLI,
00080 PLL,
00081 PLF,
00082 PLD,
00083 PLF2,
00084 PLD2,
00085 PLF3,
00086 PLD3,
00087 PLF4,
00088 PLD4,
00089
00090 PLN,
00091
00092 PSB,
00093 PSS,
00094 PSI,
00095 PSL,
00096 PSP,
00097 PSA,
00098 PSF,
00099 PSD,
00100 PSF2,
00101 PSD2,
00102 PSF3,
00103 PSD3,
00104 PSF4,
00105 PSD4,
00106
00107 PGB,
00108 PGS,
00109 PGI,
00110 PGL,
00111 PGP,
00112 PGA,
00113 PGF,
00114 PGD,
00115 PGF2,
00116 PGD2,
00117 PGF3,
00118 PGD3,
00119 PGF4,
00120 PGD4,
00121
00122 PFB,
00123 PFS,
00124 PFI,
00125 PFL,
00126 PFPR,
00127 PFPW,
00128 PFAR,
00129 PFAW,
00130 PFF,
00131 PFD,
00132 PFF2,
00133 PFD2,
00134 PFF3,
00135 PFD3,
00136 PFF4,
00137 PFD4,
00138
00139 PAB,
00140 PAS,
00141 PAI,
00142 PAL,
00143 PAPR,
00144 PAPW,
00145 PAAR,
00146 PAAW,
00147 PAF,
00148 PAD,
00149
00150 PI,
00151
00152 POPV,
00153 POPP,
00154
00155 SSB,
00156 SSS,
00157 SSI,
00158 SSL,
00159 SSP,
00160 SSA,
00161 SSF,
00162 SSD,
00163 SSF2,
00164 SSD2,
00165 SSF3,
00166 SSD3,
00167 SSF4,
00168 SSD4,
00169
00170 SGB,
00171 SGS,
00172 SGI,
00173 SGL,
00174 SGP,
00175 SGA,
00176 SGF,
00177 SGD,
00178 SGF2,
00179 SGD2,
00180 SGF3,
00181 SGD3,
00182 SGF4,
00183 SGD4,
00184
00185 SFB,
00186 SFS,
00187 SFI,
00188 SFL,
00189 SFP,
00190 SFA,
00191 SFF,
00192 SFD,
00193 SFF2,
00194 SFD2,
00195 SFF3,
00196 SFD3,
00197 SFF4,
00198 SFD4,
00199
00200 SAB,
00201 SAS,
00202 SAI,
00203 SAL,
00204 SAP,
00205 SAA,
00206 SAF,
00207 SAD,
00208
00209 ADDB,
00210 ADDS,
00211 ADDI,
00212 ADDL,
00213 ADDF,
00214 ADDD,
00215 ADDF2,
00216 ADDD2,
00217 ADDF3,
00218 ADDD3,
00219 ADDF4,
00220 ADDD4,
00221
00222 SUBB,
00223 SUBS,
00224 SUBI,
00225 SUBL,
00226 SUBF,
00227 SUBD,
00228 SUBF2,
00229 SUBD2,
00230 SUBF3,
00231 SUBD3,
00232 SUBF4,
00233 SUBD4,
00234
00235 MULB,
00236 MULS,
00237 MULI,
00238 MULL,
00239 MULF,
00240 MULD,
00241
00242 DIVB,
00243 DIVS,
00244 DIVI,
00245 DIVL,
00246 DIVF,
00247 DIVD,
00248
00249 MODB,
00250 MODS,
00251 MODI,
00252 MODL,
00253 MODF,
00254 MODD,
00255
00256 NEGB,
00257 NEGS,
00258 NEGI,
00259 NEGL,
00260 NEGF,
00261 NEGD,
00262 NEGF2,
00263 NEGD2,
00264 NEGF3,
00265 NEGD3,
00266 NEGF4,
00267 NEGD4,
00268
00269 EQB,
00270 EQS,
00271 EQI,
00272 EQL,
00273 EQP,
00274 EQA,
00275 EQF,
00276 EQD,
00277 EQF2,
00278 EQD2,
00279 EQF3,
00280 EQD3,
00281 EQF4,
00282 EQD4,
00283
00284 ANDB,
00285 ANDS,
00286 ANDI,
00287 ANDL,
00288
00289 ORB,
00290 ORS,
00291 ORI,
00292 ORL,
00293
00294 XORB,
00295 XORS,
00296 XORI,
00297 XORL,
00298
00299 SHLB,
00300 SHLS,
00301 SHLI,
00302 SHLL,
00303
00304 SHRB,
00305 SHRS,
00306 SHRI,
00307 SHRL,
00308
00309 INCSB,
00310 INCSS,
00311 INCSI,
00312 INCSL,
00313 INCSF,
00314 INCSD,
00315
00316 DECSB,
00317 DECSS,
00318 DECSI,
00319 DECSL,
00320 DECSF,
00321 DECSD,
00322
00323 CVBB,
00324 CVBS,
00325 CVBI,
00326 CVBL,
00327 CVBF,
00328 CVBD,
00329 CVSB,
00330 CVSS,
00331 CVSI,
00332 CVSL,
00333 CVSF,
00334 CVSD,
00335 CVIB,
00336 CVIS,
00337 CVII,
00338 CVIL,
00339 CVIF,
00340 CVID,
00341 CVLB,
00342 CVLS,
00343 CVLI,
00344 CVLL,
00345 CVLF,
00346 CVLD,
00347 CVFB,
00348 CVFS,
00349 CVFI,
00350 CVFL,
00351 CVFF,
00352 CVFD,
00353 CVDB,
00354 CVDS,
00355 CVDI,
00356 CVDL,
00357 CVDF,
00358 CVDD,
00359
00360 JMP,
00361
00362 JNB,
00363 JNS,
00364 JNI,
00365 JNL,
00366 JNP,
00367 JNA,
00368 JNF,
00369 JND,
00370
00371 JZB,
00372 JZS,
00373 JZI,
00374 JZL,
00375 JZP,
00376 JZA,
00377 JZF,
00378 JZD,
00379
00380 ANEW,
00381 ASIZE,
00382 ACPY,
00383 ADEL,
00384
00385 ONEW,
00386 OCPY,
00387 ODEL,
00388
00389 SCAST,
00390 DCAST,
00391
00392 CALL,
00393 MCALL,
00394 VMCALL,
00395
00396 RET,
00397 RETB,
00398 RETS,
00399 RETI,
00400 RETL,
00401 RETP,
00402 RETA,
00403 RETF,
00404 RETD,
00405 RETF2,
00406 RETD2,
00407 RETF3,
00408 RETD3,
00409 RETF4,
00410 RETD4,
00411
00412 IID_LAST
00413 };
00414
00418 struct DescEntry
00419 {
00420 uint16 size;
00421 ArgComb argcomb : 16;
00422 const char *name;
00423 uint8 codemark_off;
00424
00425 uint8 typeid_off;
00426 uint8 symref_off;
00427 };
00428
00430 extern const DescEntry _inst_desc[IID_LAST];
00431
00433 inline const DescEntry *Desc(IID i)
00434 { return((i<0 || i>=IID_LAST) ? NULL : &_inst_desc[i]); }
00435
00436 }
00437
00438 }
00439
00440 #endif