lua/lopcodes.h

143 lines
3.6 KiB
C
Raw Normal View History

1997-09-17 03:25:59 +08:00
/*
1999-02-26 05:07:26 +08:00
** $Id: lopcodes.h,v 1.27 1999/02/24 17:55:51 roberto Exp roberto $
1997-09-17 03:25:59 +08:00
** Opcodes for Lua virtual machine
** See Copyright Notice in lua.h
*/
#ifndef lopcodes_h
#define lopcodes_h
/*
** NOTICE: variants of the same opcode must be consecutive: First, those
** with word parameter, then with byte parameter.
*/
1997-09-17 03:25:59 +08:00
typedef enum {
/* name parm before after side effect
-----------------------------------------------------------------------------*/
1999-02-26 05:07:26 +08:00
ENDCODE,/* - - - */
RETCODE,/* b - - */
1997-09-17 03:25:59 +08:00
1999-02-26 05:07:26 +08:00
PUSHNIL,/* b - nil_0...nil_b */
POP,/* b - - TOP-=b */
POPDUP,/* b v v TOP-=b */
1999-02-26 05:07:26 +08:00
PUSHNUMBERW,/* w - (float)w */
PUSHNUMBER,/* b - (float)b */
1999-02-09 23:59:10 +08:00
1999-02-26 05:07:26 +08:00
PUSHNUMBERNEGW,/* w - (float)-w */
PUSHNUMBERNEG,/* b - (float)-b */
1999-02-26 05:07:26 +08:00
PUSHCONSTANTW,/*w - CNST[w] */
PUSHCONSTANT,/* b - CNST[b] */
1999-02-26 05:07:26 +08:00
PUSHUPVALUE,/* b - Closure[b] */
1999-02-26 05:07:26 +08:00
PUSHLOCAL,/* b - LOC[b] */
1999-02-26 05:07:26 +08:00
GETGLOBALW,/* w - VAR[CNST[w]] */
GETGLOBAL,/* b - VAR[CNST[b]] */
1999-02-26 05:07:26 +08:00
GETTABLE,/* - i t t[i] */
1999-02-26 05:07:26 +08:00
GETDOTTEDW,/* w t t[CNST[w]] */
GETDOTTED,/* b t t[CNST[b]] */
1999-02-26 05:07:26 +08:00
PUSHSELFW,/* w t t t[CNST[w]] */
PUSHSELF,/* b t t t[CNST[b]] */
1999-02-26 05:07:26 +08:00
CREATEARRAYW,/* w - newarray(size = w) */
CREATEARRAY,/* b - newarray(size = b) */
1997-09-17 03:25:59 +08:00
1999-02-26 05:07:26 +08:00
SETLOCAL,/* b x - LOC[b]=x */
SETLOCALDUP,/* b x x LOC[b]=x */
1999-02-26 05:07:26 +08:00
SETGLOBALW,/* w x - VAR[CNST[w]]=x */
SETGLOBAL,/* b x - VAR[CNST[b]]=x */
SETGLOBALDUPW,/*w x x VAR[CNST[w]]=x */
SETGLOBALDUP,/* b x x VAR[CNST[b]]=x */
1999-02-26 05:07:26 +08:00
SETTABLEPOP,/* - v i t - t[i]=v */
SETTABLEPOPDUP,/* - v i t v t[i]=v */
1999-02-26 05:07:26 +08:00
SETTABLE,/* b v a_b...a_1 i t a_b...a_1 i t t[i]=v */
SETTABLEDUP,/* b v a_b...a_1 i t v a_b...a_1 i t t[i]=v */
1999-02-26 05:07:26 +08:00
SETLISTW,/* w c v_c...v_1 t - t[i+w*FPF]=v_i */
SETLIST,/* b c v_c...v_1 t - t[i+b*FPF]=v_i */
1999-02-26 05:07:26 +08:00
SETMAP,/* b v_b k_b ...v_0 k_0 t t t[k_i]=v_i */
1997-09-17 03:25:59 +08:00
1999-02-26 05:07:26 +08:00
NEQOP,/* - y x (x~=y)? 1 : nil */
EQOP,/* - y x (x==y)? 1 : nil */
LTOP,/* - y x (x<y)? 1 : nil */
LEOP,/* - y x (x<y)? 1 : nil */
GTOP,/* - y x (x>y)? 1 : nil */
GEOP,/* - y x (x>=y)? 1 : nil */
ADDOP,/* - y x x+y */
SUBOP,/* - y x x-y */
MULTOP,/* - y x x*y */
DIVOP,/* - y x x/y */
POWOP,/* - y x x^y */
CONCOP,/* - y x x..y */
MINUSOP,/* - x -x */
NOTOP,/* - x (x==nil)? 1 : nil */
1997-10-06 22:51:11 +08:00
1999-02-26 05:07:26 +08:00
ONTJMPW,/* w x (x!=nil)? x : - (x!=nil)? PC+=w */
ONTJMP,/* b x (x!=nil)? x : - (x!=nil)? PC+=b */
ONFJMPW,/* w x (x==nil)? x : - (x==nil)? PC+=w */
ONFJMP,/* b x (x==nil)? x : - (x==nil)? PC+=b */
JMPW,/* w - - PC+=w */
JMP,/* b - - PC+=b */
IFFJMPW,/* w x - (x==nil)? PC+=w */
IFFJMP,/* b x - (x==nil)? PC+=b */
IFTUPJMPW,/* w x - (x!=nil)? PC-=w */
IFTUPJMP,/* b x - (x!=nil)? PC-=b */
IFFUPJMPW,/* w x - (x==nil)? PC-=w */
IFFUPJMP,/* b x - (x==nil)? PC-=b */
1999-02-26 05:07:26 +08:00
CLOSUREW,/* w c v_c...v_1 closure(CNST[w], v_c...v_1) */
CLOSURE,/* b c v_c...v_1 closure(CNST[b], v_c...v_1) */
1999-02-26 05:07:26 +08:00
CALLFUNC,/* b c v_c...v_1 f r_b...r_1 f(v1,...,v_c) */
1999-02-26 05:07:26 +08:00
SETLINEW,/* w - - LINE=w */
SETLINE,/* b - - LINE=b */
1999-02-26 05:07:26 +08:00
LONGARGW,/* w (add w*(1<<16) to arg of next instruction) */
LONGARG,/* b (add b*(1<<16) to arg of next instruction) */
CHECKSTACK /* b (assert #temporaries == b; only for internal debuging!) */
1998-01-12 21:35:37 +08:00
1997-09-17 03:25:59 +08:00
} OpCode;
#define RFIELDS_PER_FLUSH 32 /* records (SETMAP) */
#define LFIELDS_PER_FLUSH 64 /* FPF - lists (SETLIST) */
1997-09-17 03:25:59 +08:00
1998-01-12 21:35:37 +08:00
#define ZEROVARARG 64
1997-09-17 03:25:59 +08:00
/* maximum value of an arg of 3 bytes; must fit in an "int" */
#if MAX_INT < (1<<24)
#define MAX_ARG MAX_INT
#else
#define MAX_ARG ((1<<24)-1)
#endif
/* maximum value of a word of 2 bytes; cannot be bigger than MAX_ARG */
#if MAX_ARG < (1<<16)
#define MAX_WORD MAX_ARG
#else
#define MAX_WORD ((1<<16)-1)
#endif
/* maximum value of a byte */
#define MAX_BYTE ((1<<8)-1)
1997-09-17 03:25:59 +08:00
#endif