⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oxanf.h

📁 OXCC is a multipass, interpreting C compiler with several language extensions. It generates an Archi
💻 H
📖 第 1 页 / 共 2 页
字号:
	} funcd;
	struct {
		unsigned char numptrs;
		unsigned char hassegs;
		unsigned char quals[8];
		unsigned short declnum;
	} ptrinf;
	struct {
		unsigned short seg[8];
	} seginf;
	struct {
		unsigned char tfofs;
		unsigned char fsize;
		unsigned char type;
		unsigned char pad;
	} bfinf;
	struct {
		unsigned long membercnt;
		unsigned long susize;
		short symnum;
		unsigned short quals;
	} suinf;
	struct {
		unsigned short memdcl[8];
	} sum;
	struct {
		unsigned long offset;
		short symnum;
		unsigned short declnum;
		unsigned short cdeclnum;	/* container_declnum */
		unsigned char fieldofs;		/* bitfields only */
		unsigned char fieldsiz;
	} memb;
	struct {
		unsigned short major;
		unsigned short minor;
		char code_format;
		char target_hardware;
		char target_debugger;
		char target_os;
		char memory_model;
		char obj_format;
		char target_assembler;
		char pads[4];
		char opt_level;
	} hdr;
	struct {
		long symnum;
		unsigned long hidden_offset;
		unsigned long argsize;
		short segid;
		unsigned short tempmax;
	} funcdef;
	struct {
		long tempmax;
	} funcexit;
	struct {
		unsigned long v1;
		unsigned long v2;
		unsigned long v3;
		short segid;
		short unused;
	} segdef;
	struct {
		unsigned long spot;
		short rsym;
		short rsize;
		unsigned long base;
		long offset;
	} reloc;
	struct {
		long line;
		long filenamenum;
	} line;
	struct {
		long label;
	} jmp;
	struct {
		unsigned char shift;
		unsigned char size;
		unsigned char sign;
	} bfield;
} *PopI;
#define POPI ((PopI)(p+8))
#define DATI (POPI->s)

typedef struct _nd
{
	unsigned char dtype;
	unsigned char quals;
	unsigned char opsize;
	unsigned char flags;
	long size;
	DATUM *data;
	unsigned short atype;
} ND, *PND;

#define OFFSET data->ulng.d[2]
#define DECLNUM data->ushrt.d[6]
#define SYMNUM data->shrt.d[7]
#define TMPNUM data->ulng.d[2]
#define POFS data->ulng.d[4]
#define ARGSIZE data->ulng.d[1]
#define ARGOFS data->ulng.d[0]

#endif /* NEED_ANFDEFS */

enum genopcodes {nilop=0,
/*01 -- instructions */
	assignop=1,plusop,minusop,mulop,divop,
	lshop,rshop,modop,orop,xorop,

/*11*/
	andop,eqop,neqop,ltop,gtop,
	leop,geop,negop,complop,notop,

/*21*/
	copyop,clrdatop,truthop,jmptrueop,jmpfalseop,
	jmpgotoop,nopop,callop,retvoidop,ljmptrueop,

/*31*/ ljmpfalseop,

/*41*/
	pushop=41,popop,functionop,emitop,signxtdop,

/*64 */
	jmploopop=64,jmpcontinueop,jmpbreakop,regainop,retstructop,
	retdataop,grabop,switchop,argop,callfuncop,

/*74*/
	compsavop,getbitfieldop,putbitfieldop,aliastmpop,castop,
	funcstartop,funcstopop,

/*84 -- address temp creators */
	duptmpop=84,derefop,getvalop,totmpop,

/*101 -- statements */
	labelop=101,gfuncdefop,sfuncdefop,nestedfuncdefop,funcexitop,
	nestedfuncexitop,expstmtop,ifstmtop,ifelsestmtop,switchstmtop,

/*111*/
	whilestmtop,dostmtop,forstmtop,asmstmtop,initstmtop,
	lineop,

/*131 -- expressions */
	condop=131,twopathop,logicalop,binopop,strelemop,
	ptrelemop,arrayelemop,arraydimsop,ptrdimsop,funcallop,

/*141*/
	argloadop,preincrdecop,compoundop,postincrdecop,unopop,

/*161 -- info */
	symbop=161,casevalop,caserangeop,switchidop,	
	headerop,trailerop,declop,ptrinfop,maxtempop,

/*171*/
	memberinfop,arrayinfop,structinfop,funcptrinfop,funcinfop,
	paraminfop,bfieldinfop,symoffsetop,symblockop,dataop,

/*181*/
	datablockop,mallocblockop,thunkblockop,bssblockop,glodatop,
	globssop,glofuncop,extvarop,extfuncop,relocop,
	stringblockop,
/*192*/
	segdefop,anfblockop,extlocop,endfileop,endallop,
	endop
}; 

#ifdef NEED_GENOPS
/* ARRAY OF STRINGS FOR PRINTING THE ENUMERATED OPCODES ABOVE, IT MUST MATCH */
/* PSEUDO ASSEMBLY LANGUAGE (anf) CODES MAY BE ADDED IN SLOTS 31-63 AND
	WILL AUTOMATICALLY BE UNDERSTOOD BY `oxcc' */

char *oxgenops[] = {"<nil>",
/*01 -- instructions */
	"mov", "add", "sub", "mul", "div", 
	"lsh", "rsh", "mod", "or", "xor",

/*11*/
	"and", "eq", "neq", "lt", "gt",
	"le", "ge", "neg","compl","not",

/*21*/
	"copydat","clrdat","truthof","jmptrue","jmpfalse",
	"jmp","nop","call","ret","ljmptrue",

/*31*/
	"ljmpfalse","","","","",
	"","","","","",

/*41 -- codes 41 to 63 not understood by bytecode generator `oxccb' */
/*		ADD NEW CODES FOR __anf__ BLOCKS HERE, NO NEED TO ENUMERATE ABOVE. */
	"push","pop","function","emit","signxtd",
	"","","","","",

/*51*/
	"","","","","",
	"","","","","",

/*61*/
	"","","",

/*64 -- codes 64 to 100 generated only by oxcc */
	"jmploop","jmpcontinue","jmpbreak","regain","retstruct",
	"retdata","grab","switch","arg","call-c",

/*74*/
	"compsave","getbitfield","putbitfield","aliastmp","cast",
	"funcstart","funcstop","","","",

/*84*/
	"duptmp","deref","getval","totmp","",
	"","","","","",

/*94*/
	"","","","","",
	"","",

/*101 -- statements */
	"Label","GFuncdef","SFuncdef","NestedFuncdef","Funcexit",
	"NestedFuncexit","ExpS","If","IfElse","Switch",

/*111*/
	"While","Do","For","Asm","Init",
	"#Line","","","","",

/*121*/
	"","","","","",
	"","","","","",

/*131 -- expressions */
	"Conditional","TwoPath","Logical","Binop","StrElem",
	"Ptrelem","ArrayElem","ArrayDim","PtrDim","FuncCall",

/*141*/
	"ArgLoad","Pre++--","Compound","Post++--","Unop",
	"","","","","",

/*151*/
	"","","","","",
	"","","","","",

/*161 -- info */
	"Symbols","CaseVal","CaseRange","SwitchId",
	"Header","Trailer","Decl","PtrInfo","MaxTemp",

/*171*/
	"Member","ArrayInfo","StructInfo","FuncPtrInfo","FuncInfo",
	"ParamInfo","BitfieldInfo","SymOffset","SymBlock","Data",

/*181*/
	"DataBlock","MallocBlock","ThunkBlock","BssBlock","Glodat",
	"Globss","Glofunc","Extvar","Extfunc","Reloc",
	"StringBlock",

/*192*/
	"SegDef","AnfBlock","Extloc","EndFile","EndAll",
	"End"
};
#else
extern char *oxgenops[];
#endif /* NEED_GENOPS */

#if NEED_ASM_OPCODES
static char *x86opcodes[] = {		
  "aaa","aad","aam","aas",
  "adc","adcb","adcw","adcl",
  "add","addb","addw","addl",
  "and","andb","andw","andl",
  "arpl",
  "bound","boundw","boundl",
  "bsf","bsfw","bsfl",
  "bsr","bsrw","bsrl",
  "bt","btw","btl",
  "btc","btcw","btcl",
  "btr","btrw","btrl",
  "bts","btsw","btsl",
  "call","cbw","cwde","clc","cld","cli","clts","cmc",
  "cmp","cmpb","cmpw","cmpl",
  "cmps","cmpsb","cmpsw","cmpsd","cmpsl",
  "cwd","cdq","daa","das",
  "dec","decb","decw","decl",
  "div","divb","divw","divl",
  "enter","hlt",
  "idiv","idivb","idivw","idivl",
  "imul","imulb","imulw","imull",
  "in","inb","inw","inl",
  "inc","incb","incw","incl",
  "ins","insb","insw","insd","insl",
  "int","into","iret","iretd",
  "ja","jae","jb","jbe","jc","jcxz","jecxz","je","jz","jg","jge","jl","jle",
  "jna","jnae","jnb","jnbe","jnc","jne","jng","jnge","jnl","jnle","jno","jnp",
  "jns","jnz","jo","jp","jpe","jpo","js","jz","jmp",
  "lea","leaw","leal",
  "leave","lgdt","lidt","lgs","lss","lds","les","lfs","lldt","lmsw","lock",
  "lods","lodsb","lodsw","lodsd","lodsl",
  "loop","loope","loopz","loopne","loopnz",
  "lsl","lslw","lsll",
  "ltr",
  "mov","movb","movw","movl",
  "movs","movsb","movsw","movsd","movsl",
  "movsx","movsxb","movsxw",
  "movzx","movzxb","movzxw",
  "mul",
  "neg","negb","negw","negl",
  "nop",
  "not","notb","notw","notl",
  "or","orb","orw","orl",
  "out","outb","outw","outl",
  "outs","outsb","outsw","outsd","outsl",
  "pop","popw","popl",
  "popa","popaw","popad","popal",
  "popf","popfw","popfd","popfl",
  "push","pushw","pushl",
  "pusha","pushad","pushal",
  "pushf","pushfd","pushfl",
  "rcl","rclb","rclw","rcll",
  "rcr","rcrb","rcrl",
  "ror","rorw","rorl",
  "rol","rolb","rolw","roll",
  "rep","repe","repz","repne","repnz",
  "ret","retn",
  "sahf",
  "sal","salb","salw","sall",
  "sar","sarb","sarw","sarl",
  "shl","shlb","shlw","shll",
  "shr","shrb","shrw","shrl",
  "sbb","sbbb","sbbw","sbbl",
  "scas","scasb","scasw","scasd","scasl",
  "seta","setae","setb","setbe","setc","sete","setg","setge","setl","setle",
  "setna","setnae","setnb","setnbe","setnc","setne","setng","setnge","setnl",
  "setnle","setno","setnp","setns","setnz","seto","setp","setpe","setpo",
  "sets","setz","sgdt","sidt",
  "shld",
  "shrd",
  "sldt","smsw","stc","std","sti",
  "stos","stosb","stosw","stosd","stosl",
  "str",
  "sub","subb","subw","subl",
  "test","testb","testw","testl",
  "verr","verrw",
  "wait",
  "xchg","xchgb","xchgw","xchgl",
  "xlat","xlatb",
  "xor","xorb","xorw","xorl",

  "fabs","fadd","fadds","faddl","faddp","fbld","fbstp","fchs","fclex",
  "fnclex","fcom","fcoms","fcoml","fcomp","fcomps","fcompl","fcompp","fcos",
  "fdecstp","fdisi","fndisi","fdiv","fdivs","fdivl","fdivp","fdivr","fdivrs",
  "fdivrl","fdivrp","feni","fneni","ffree","fiadd","fiaddw","fiadds","ficom",
  "ficomw","ficoms","ficomp","ficompw","ficomps","fidiv","fidivw","fidivs",
  "fidivr","fidivrw","fidivrs","fild","fildw","filds","fildl","fimul","fimulw",
  "fimuls","fincstp","finit","fininit","fist","fistw","fists","fistp","fistpw",
  "fistps","fistpl","fisub","fisubw","fisubs","fisubr","fisubrw","fisubrs",
  "fld","fldw","flds","fldl","fldcw","fldenv","fldlg2","fldln2","fldl2e",
  "fldl2t","fldpi","fldz","fld1","fmul","fmuls","fmull","fmult","fmulp",
  "fnop","fpatan","fprem","fprem1","fptan","frndint","frstor","fsave",
  "fnsave","fscale","fsetpm","fsin","fsincos","fsqrt","fst","fsts","fstl",
  "fstcw","fnstcw","fsetenv","fnsetenv","fstp","fstps","fstpl","fstpt",
  "fstsw","fnstsw","fsub","fsubs","fsubl","fsubp","fsubr","fsubrs","fsubrl",
  "fsubrp","ftst","fucom","fucomp","fucompp","fwait","fxam","fxch","fxtract",
  "fyl2x","fyl2xpi","f2xmi",
  0
};
static char *x86words[] = {
  "ah","al","bh","bl","ch","cl","dh","dl","ax","bx","cx","dx","ds","es","ss",
  "fs","gs","si","di","bp","sp","eax","ebx","ecx","edx","esi","edi","ebp","esp",
  "LENGTH","TYPE","SIZE","BYTE","TBYTE","WORD","DWORD","FWORD","QWORD","PTR",
  "OFFSET","EVEN","ALIGN","NEAR","FAR","SHORT","HIGH","LOW","SEG",
  "length","size","type","byte","tbyte","word","dword","fword","qword","ptr",
  "offset","even","align","near","far","short","high","low","seg",
  0
};
#endif /* NEED_ASM_OPCODES */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -