diff Bison-Flex/Compiler-StackBase/vm_code.h @ 0:db40c85cad7a default tip

upload sample source
author nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
date Mon, 09 May 2011 03:11:59 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Bison-Flex/Compiler-StackBase/vm_code.h	Mon May 09 03:11:59 2011 +0900
@@ -0,0 +1,77 @@
+//
+// 仮想CPUの命令コード割り当て
+//
+//		(c)2008 Chihiro.SAKAMOTO HyperWorks
+//
+#ifdef	VM_ENUMDEF
+#define	VMCODE0(code_, name_)	code_,
+#define	VMCODE1(code_, name_)	code_,
+#endif
+#ifdef	VM_CREATE
+#define	VMCODE0(code_, name_)	void name_()			{ statement.push_back(CVMCode(code_)); }
+#define	VMCODE1(code_, name_)	void name_(int arg1)	{ statement.push_back(CVMCode(code_, arg1)); }
+#endif
+#ifdef	VM_SWITCHTABLE
+#define	VMCODE0(code_, name_)	case code_: name_(); break;
+#define	VMCODE1(code_, name_)	case code_: name_(value()); break;
+#endif
+#ifdef	VM_NAMETABLE
+#define	VMCODE0(code_, name_)	#name_,
+#define	VMCODE1(code_, name_)	#name_,
+#endif
+
+VMCODE1(VM_PUSHCONST,			PushConst)
+VMCODE1(VM_PUSHSTRING,			PushString)
+VMCODE1(VM_PUSHVALUE,			PushValue)
+VMCODE1(VM_PUSHLOCAL,			PushLocal)
+VMCODE1(VM_PUSHARRAY,			PushArray)
+VMCODE1(VM_PUSHLOCALARRAY,		PushLocalArray)
+VMCODE1(VM_PUSHLOCALREF,		PushLocalRef)
+VMCODE1(VM_PUSHLOCALARRAYREF,	PushLocalArrayRef)
+VMCODE1(VM_PUSHADDR,			PushAddr)
+VMCODE1(VM_PUSHARRAYADDR,		PushArrayAddr)
+VMCODE1(VM_POPVALUE,			PopValue)
+VMCODE1(VM_POPLOCAL,			PopLocal)
+VMCODE1(VM_POPARRAY,			PopArray)
+VMCODE1(VM_POPLOCALARRAY,		PopLocalArray)
+VMCODE1(VM_POPLOCALREF,			PopLocalRef)
+VMCODE1(VM_POPLOCALARRAYREF,	PopLocalArrayRef)
+VMCODE1(VM_ALLOCSTACK,			OpAllocStack)
+VMCODE0(VM_POP,					OpPop)
+VMCODE0(VM_NEG,					OpNeg)
+VMCODE0(VM_EQ,					OpEq)
+VMCODE0(VM_NE,					OpNe)
+VMCODE0(VM_GT,					OpGt)
+VMCODE0(VM_GE,					OpGe)
+VMCODE0(VM_LT,					OpLt)
+VMCODE0(VM_LE,					OpLe)
+VMCODE0(VM_LOGAND,				OpLogAnd)
+VMCODE0(VM_LOGOR,				OpLogOr)
+VMCODE0(VM_AND,					OpAnd)
+VMCODE0(VM_OR,					OpOr)
+VMCODE0(VM_LSHIFT,				OpLeftShift)
+VMCODE0(VM_RSHIFT,				OpRightShift)
+VMCODE0(VM_ADD,					OpAdd)
+VMCODE0(VM_SUB,					OpSub)
+VMCODE0(VM_MUL,					OpMul)
+VMCODE0(VM_DIV,					OpDiv)
+VMCODE0(VM_MOD,					OpMod)
+VMCODE0(VM_STREQ,				OpStrEq)
+VMCODE0(VM_STRNE,				OpStrNe)
+VMCODE0(VM_STRGT,				OpStrGt)
+VMCODE0(VM_STRGE,				OpStrGe)
+VMCODE0(VM_STRLT,				OpStrLt)
+VMCODE0(VM_STRLE,				OpStrLe)
+VMCODE0(VM_STRADD,				OpStrAdd)
+VMCODE1(VM_JMP,					OpJmp)
+VMCODE1(VM_JMPC,				OpJmpC)
+VMCODE1(VM_JMPNC,				OpJmpNC)
+VMCODE1(VM_TEST,				OpTest)
+VMCODE1(VM_CALL,				OpCall)
+VMCODE1(VM_SYSCALL,				OpSysCall)
+VMCODE0(VM_RETURN,				OpReturn)
+VMCODE0(VM_RETURNV,				OpReturnV)
+VMCODE0(VM_HALT,				OpHalt)
+
+#undef	VMCODE0
+#undef	VMCODE1