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

📄 sym.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
/*	@(#)sym.c 1.1 92/07/30 SMI	*//* *	Micro-assembler symbol-table management *		sym.c	1.0	2 JUN. 85 */#include "micro.h"SYMBOL syms[NSYM], *cursym = syms;char   strings[NSTRING], *curstring = strings;RESERVED *rhash[NHASH];SYMBOL   *shash[NHASH];RESERVED words[] = {	/*   Pseudo-ops                    */	{ "org",	Pseudo, 1,         },	{ "sccsid",     Pseudo, 2,         },	{ "routine",    Pseudo, 3,         },	/*   Microcode address source      */	{ "map",	Branch1, 000, 0,	 },	{ "call",	Branch1, 020, 2,	 },	{ "next",	Branch1, 040, 0,	 },	{ "rtn",	Branch1, 060, 0,	 },	/*   Jump contional code	   */	{ "jmp",	Branch2, 001, 1,	},	{ "jgt",	Branch2, 002, 1,	},	{ "jge",	Branch2, 003, 1,	},	{ "jlt",	Branch2, 004, 1,	},	{ "jle",	Branch2, 005, 1,	},	{ "jeq",	Branch2, 006, 1,	},	{ "jne",	Branch2, 007, 1,	},	{ "jloop0",	Branch2, 010, 1,	},	{ "jloop",	Branch2, 011, 1,	},	{ "jwerr",	Branch2, 012, 1,	},	{ "jnowerr",	Branch2, 013, 1,	},	{ "jclr",	Branch2, 014, 1,	},	/*   State			   */	{ "idl1",	State, 0,	},	{ "idl2",	State, 6,	},	{ "hng",	State, 5,	},	/*   Latch 			   */	{ "cstat",	Latch, 2, 1,	},	{ "unimpl",	Latch, 4, 2,	},	{ "restore",	Latch, 1, 2,	},	{ "cdata",	Latch, 1, 3,	},	/*   Weitek Load control	   */	{ "lnop",	Loadctrl, 0, 1,	},	{ "lf",		Loadctrl, 1, 0,	},	{ "lbs",	Loadctrl, 2, 1, },	{ "lbsf",	Loadctrl, 3, 0,	},	{ "lbl",	Loadctrl, 4, 1,	},	{ "lblf",	Loadctrl, 5, 0,	},	{ "lbm",	Loadctrl, 6, 1,	},	{ "lbmf",	Loadctrl, 7, 0,	},	{ "las",	Loadctrl, 10, 1,},	{ "lasf",	Loadctrl, 11, 0,},	{ "lal",	Loadctrl, 12, 1,},	{ "lalf",	Loadctrl, 13, 0,},	{ "lam",	Loadctrl, 14, 1,},	{ "lamf",	Loadctrl, 15, 0,},	{ "lmap",	Loadctrl, 16, 2,},	/*   Weitek multiply function 	   */	{ "fmap",	Function, 0200, 2,},	{ "smul",	Function,  0, 0,},	{ "dmul",	Function,  1, 0,},	{ "smwa",	Function,  2, 0,},	{ "dmwa",	Function,  3, 0,},	{ "smwb",	Function,  4, 0,},	{ "dmwb",	Function,  5, 0,},	{ "smwab",	Function,  6, 0,},	{ "dmwab",	Function,  7, 0,},	{ "smma",	Function,  8, 0,},	{ "dmma",	Function,  9, 0,},	{ "smwama",	Function, 10, 0,},	{ "dmwama",	Function, 11, 0,},	{ "smwbma",	Function, 12, 0,},	{ "dmwbma",	Function, 13, 0,},	{ "smwabma",	Function, 14, 0,},	{ "dmwabma",	Function, 15, 0,},	{ "smmb",	Function, 16, 0,},	{ "dmmb",	Function, 17, 0,},	{ "smwamb",	Function, 18, 0,},	{ "dmwamb",	Function, 19, 0,},	{ "smwbmb",	Function, 20, 0,},	{ "dmwbmb",	Function, 21, 0,},	{ "smwabmb",	Function, 22, 0,},	{ "dmwabmb",	Function, 23, 0,},	{ "smmab",	Function, 24, 0,},	{ "dmmab",	Function, 25, 0,},	{ "smwamab",	Function, 26, 0,},	{ "dmwamab",	Function, 27, 0,},	{ "smwbmab",	Function, 28, 0,},	{ "dmwbmab",	Function, 29, 0,},	{ "smwabmab",	Function, 30, 0,},	{ "dmwabmab",	Function, 31, 0,},	{ "smn", 	Function, 32, 0,},	{ "dmn", 	Function, 33, 0,},	{ "smwan",	Function, 34, 0,},	{ "dmwan",	Function, 35, 0,},	{ "smwbn",	Function, 36, 0,},	{ "dmwbn",	Function, 37, 0,},	{ "smwabn",	Function, 38, 0,},	{ "dmwabn",	Function, 39, 0,},	{ "smman",	Function, 40, 0,},	{ "dmman",	Function, 41, 0,},	{ "smwaman",	Function, 42, 0,},	{ "dmwaman",	Function, 43, 0,},	{ "smwbman",	Function, 44, 0,},	{ "dmwbman",	Function, 45, 0,},	{ "smwabman",	Function, 46, 0,},	{ "dmwabman",	Function, 47, 0,},	{ "smmbn",	Function, 48, 0,},	{ "dmmbn",	Function, 49, 0,},	{ "smwambn",	Function, 50, 0,},	{ "dmwambn",	Function, 51, 0,},	{ "smwbmbn",	Function, 52, 0,},	{ "dmwbmbn",	Function, 53, 0,},	{ "smwabmbn",	Function, 54, 0,},	{ "dmwabmbn",	Function, 55, 0,},	{ "smmabn",	Function, 56, 0,},	{ "dmmabn",	Function, 57, 0,},	{ "smwamabn",	Function, 58, 0,},	{ "dmwamabn",	Function, 59, 0,},	{ "smwbmabn",	Function, 60, 0,},	{ "dmwbmabn",	Function, 61, 0,},	{ "smwabmabn",	Function, 62, 0,},	{ "dmwabmabn",	Function, 63, 0,},	/*   Weitek alu function	   */	{ "ssub",	Function,  0, 1,},	{ "dsub",	Function,  1, 1,},	{ "sdiff",	Function,  2, 1,},	{ "ddiff",	Function,  3, 1,},	{ "ssubm",	Function,  4, 1,},	{ "dsubm",	Function,  5, 1,},	{ "sdiv",	Function,  6, 1,},	{ "ddiv",	Function,  7, 1,},	{ "sneg",	Function,  8, 1,},	{ "dneg",	Function,  9, 1,},	{ "sdiva",	Function, 14, 1,},	{ "ddiva",	Function, 15, 1,},	{ "sadd",	Function, 16, 1,},	{ "dadd",	Function, 17, 1,},	{ "ssum",	Function, 18, 1,},	{ "dsum",	Function, 19, 1,},	{ "saddm",	Function, 20, 1,},	{ "daddm",	Function, 21, 1,},	{ "sdivb",	Function, 22, 1,},	{ "ddivb",	Function, 23, 1,},	{ "sident",	Function, 24, 1,},	{ "dident", 	Function, 25, 1,},	{ "sabs",	Function, 28, 1,},	{ "dabs",	Function, 29, 1,},	{ "sdivab",	Function, 30, 1,},	{ "ddivab",	Function, 31, 1,},	{ "scmp",	Function, 32, 1,},	{ "dcmp", 	Function, 33, 1,},	{ "scmpm",	Function, 36, 1,},	{ "dcmpm",	Function, 37, 1,},	{ "scmp0", 	Function, 40, 1,},	{ "dcmp0",	Function, 41, 1,},	{ "sexct", 	Function, 48, 1,},	{ "dexct",	Function, 49, 1,},	{ "swdnrm",	Function, 50, 1,},	{ "dwdnrm",	Function, 51, 1,},	{ "sinxct",	Function, 52, 1,},	{ "dinxct",	Function, 53, 1,},	{ "scvtint",	Function, 56, 1,},	{ "dcvtint",	Function, 57, 1,},	{ "sfloat",	Function, 58, 1,},	{ "dfloat",	Function, 59, 1,},	{ "dcvts",	Function, 60, 1,},	{ "scvtd",	Function, 61, 1,},	/*   Mode			   */	{ "lmode3.0",	Mode, 8, 0x0,	},	{ "lmode7.4",	Mode, 8, 0x10,	},	{ "lmodeb.8",	Mode, 8, 0x20,	},	{ "lmodef.c",	Mode, 8, 0x30,	},	{ "lmodeusr",	Mode, 8, 0x40,	},	/*   CSL- control		   */	{ "csl",	Csl, 0,	},	{ "cslc",	Csl, 1,	},	{ "csla",	Csl, 2,	},	{ "cslac",	Csl, 3, },	{ "cslm",	Csl, 4,	},	{ "cslmc",	Csl, 5,	},	{ "cslma",	Csl, 6,	},	{ "cslmac",	Csl, 7,	},	/*   CSUX- control		   */	{ "csux",	Csux, 0,	},	{ "csuxc",	Csux, 1,	},	{ "csuxa",	Csux, 2,	},	{ "csuxac",	Csux, 3,	},	{ "csuxm",	Csux, 4,	},	{ "csuxmc",	Csux, 5,	},	{ "csuxma",	Csux, 6,	},	{ "csuxmac",	Csux, 7,	},	/*   U+ control			   */	{ "ulsw",	U, 0,	},	{ "umsw",	U, 1,	},	{ "usp",	U, 1,	},	/*   WOE- control		   */	{ "woec",	Woe, 1,	},	{ "woea",	Woe, 2,	},	{ "woem",	Woe, 4,	},	/*   Data muxing		   */	{ "opdmsw",	Datactrl, 044, 1,	},	{ "opdsp",	Datactrl, 044, 1,	},	{ "opdlsw",	Datactrl, 042, 1,	},	{ "reg",	Datactrl, 050, 0,	},	{ "dtor",	Datactrl, 021, 0,	},	/*   Recovery register control	   */	{ "recoe",	Recoe, 2,	},	{ "recclk",	Reclk, 1,	},	/*   Ram WE-			   */	{ "ramwe",	Ramwe, 1, 	},	/*   Ram CS-			   */	{ "rcsmsw",	Ramcs, 2, 1,	},	{ "rcssp",	Ramcs, 2, 1,	},	{ "rcslsw",	Ramcs, 1, 2,	},	/*   Pointers			   */	{ "ptr1",	Pointer, 1, 0,	},	{ "ptr2",	Pointer, 2, 0,	},	{ "ptr3",	Pointer, 3, 0,	},	{ "ptr4",	Pointer, 4, 0,	},	{ "ptr5",	Pointer, 5, 0,	},	{ "ldptr",	Pointer, 0, 1,	},	{ "imm2",	Pointer, 6, 1,	},	{ "imm3",	Pointer, 7, 1,	},	{ "lpreg",	Pointer, 6, 2,	},	{ "mreg",	Pointer, 7, 2,	},	{ (char *)0,	Tnull,  0,   0, }};extern SYMBOL syms[];init_symtab(){   int i;    for (i = 0; i < NSYM; i++) {	syms[i].defined = False;    }}inthashval( s )     char *s;{    register int val = 0;    while (*s) {	val = (val<<1) + *s++;    }    val %= NHASH;    if (val < 0) val += NHASH;    return val;}voidresw_hash(){    RESERVED *rp, **pp;    rp = words;    while (rp->name) {	pp = rhash + hashval(rp->name);	rp->next_hash = *pp;	*pp = rp;	rp++;    }}RESERVED *resw_lookup( s )    char *s;{    register RESERVED *rp;    rp = rhash[hashval(s)];    while (rp && strcmp(s,rp->name))	rp = rp->next_hash;    return rp;}SYMBOL *lookup( s )    char *s;{    register SYMBOL *sp;    sp = shash[hashval(s)];    while ( sp && strcmp( s, sp->name ))	sp = sp->next_hash;    return sp;}SYMBOL *enter( s )    char *s;{    register SYMBOL *sp;    SYMBOL **pp;    register char *cp;    int leng;    leng = strlen(s);    cp = curstring;    if ( curstring+leng > &strings[NSTRING-2])	fatal( "out of string space");    while( *cp++ = *s++)	;    if (cursym >= &syms[NSYM])	fatal( "out of symbol space");    sp = cursym++;    pp = shash + hashval(sp->name = curstring);    curstring = cp;    sp->next_hash = *pp;    *pp = sp;    sp->node = 0;    sp->addr = 0;    return sp;}SYMBOL *firstsym(){    return (cursym == syms)? (SYMBOL *)0 : syms;}SYMBOL *nextsym( sp )    SYMBOL *sp;{    sp++;    return (sp==cursym)? (SYMBOL *)0 : sp;}

⌨️ 快捷键说明

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