xref: /inferno-os/utils/qa/lex.c (revision 45a20ab721a513710138340faff3d59a31c3e01e)
174a4d8c2SCharles.Forsyth #define	EXTERN
274a4d8c2SCharles.Forsyth #include "a.h"
374a4d8c2SCharles.Forsyth #include "y.tab.h"
474a4d8c2SCharles.Forsyth #include <ctype.h>
574a4d8c2SCharles.Forsyth 
674a4d8c2SCharles.Forsyth void
main(int argc,char * argv[])774a4d8c2SCharles.Forsyth main(int argc, char *argv[])
874a4d8c2SCharles.Forsyth {
974a4d8c2SCharles.Forsyth 	char *p;
1074a4d8c2SCharles.Forsyth 	int nout, nproc, status, i, c;
1174a4d8c2SCharles.Forsyth 
1274a4d8c2SCharles.Forsyth 	thechar = 'q';
1374a4d8c2SCharles.Forsyth 	thestring = "power";
1474a4d8c2SCharles.Forsyth 	memset(debug, 0, sizeof(debug));
1574a4d8c2SCharles.Forsyth 	cinit();
1674a4d8c2SCharles.Forsyth 	outfile = 0;
1774a4d8c2SCharles.Forsyth 	include[ninclude++] = ".";
1874a4d8c2SCharles.Forsyth 	ARGBEGIN {
1974a4d8c2SCharles.Forsyth 	default:
2074a4d8c2SCharles.Forsyth 		c = ARGC();
2174a4d8c2SCharles.Forsyth 		if(c >= 0 || c < sizeof(debug))
2274a4d8c2SCharles.Forsyth 			debug[c] = 1;
2374a4d8c2SCharles.Forsyth 		break;
2474a4d8c2SCharles.Forsyth 
2574a4d8c2SCharles.Forsyth 	case 'o':
2674a4d8c2SCharles.Forsyth 		outfile = ARGF();
2774a4d8c2SCharles.Forsyth 		break;
2874a4d8c2SCharles.Forsyth 
2974a4d8c2SCharles.Forsyth 	case 'D':
3074a4d8c2SCharles.Forsyth 		p = ARGF();
3174a4d8c2SCharles.Forsyth 		if(p)
3274a4d8c2SCharles.Forsyth 			Dlist[nDlist++] = p;
3374a4d8c2SCharles.Forsyth 		break;
3474a4d8c2SCharles.Forsyth 
3574a4d8c2SCharles.Forsyth 	case 'I':
3674a4d8c2SCharles.Forsyth 		p = ARGF();
3774a4d8c2SCharles.Forsyth 		setinclude(p);
3874a4d8c2SCharles.Forsyth 		break;
3974a4d8c2SCharles.Forsyth 	} ARGEND
4074a4d8c2SCharles.Forsyth 	if(*argv == 0) {
4174a4d8c2SCharles.Forsyth 		print("usage: %ca [-options] file.s\n", thechar);
4274a4d8c2SCharles.Forsyth 		errorexit();
4374a4d8c2SCharles.Forsyth 	}
4474a4d8c2SCharles.Forsyth 	if(argc > 1 && systemtype(Windows)){
4574a4d8c2SCharles.Forsyth 		print("can't assemble multiple files on windows\n");
4674a4d8c2SCharles.Forsyth 		errorexit();
4774a4d8c2SCharles.Forsyth 	}
4874a4d8c2SCharles.Forsyth 	if(argc > 1) {
4974a4d8c2SCharles.Forsyth 		nproc = 1;
5074a4d8c2SCharles.Forsyth 		if(p = getenv("NPROC"))
5174a4d8c2SCharles.Forsyth 			nproc = atol(p);
5274a4d8c2SCharles.Forsyth 		c = 0;
5374a4d8c2SCharles.Forsyth 		nout = 0;
5474a4d8c2SCharles.Forsyth 		for(;;) {
5574a4d8c2SCharles.Forsyth 			while(nout < nproc && argc > 0) {
5674a4d8c2SCharles.Forsyth 				i = myfork();
5774a4d8c2SCharles.Forsyth 				if(i < 0) {
5874a4d8c2SCharles.Forsyth 					i = mywait(&status);
5974a4d8c2SCharles.Forsyth 					if(i < 0)
6074a4d8c2SCharles.Forsyth 						errorexit();
6174a4d8c2SCharles.Forsyth 					if(status)
6274a4d8c2SCharles.Forsyth 						c++;
6374a4d8c2SCharles.Forsyth 					nout--;
6474a4d8c2SCharles.Forsyth 					continue;
6574a4d8c2SCharles.Forsyth 				}
6674a4d8c2SCharles.Forsyth 				if(i == 0) {
6774a4d8c2SCharles.Forsyth 					print("%s:\n", *argv);
6874a4d8c2SCharles.Forsyth 					if(assemble(*argv))
6974a4d8c2SCharles.Forsyth 						errorexit();
7074a4d8c2SCharles.Forsyth 					exits(0);
7174a4d8c2SCharles.Forsyth 				}
7274a4d8c2SCharles.Forsyth 				nout++;
7374a4d8c2SCharles.Forsyth 				argc--;
7474a4d8c2SCharles.Forsyth 				argv++;
7574a4d8c2SCharles.Forsyth 			}
7674a4d8c2SCharles.Forsyth 			i = mywait(&status);
7774a4d8c2SCharles.Forsyth 			if(i < 0) {
7874a4d8c2SCharles.Forsyth 				if(c)
7974a4d8c2SCharles.Forsyth 					errorexit();
8074a4d8c2SCharles.Forsyth 				exits(0);
8174a4d8c2SCharles.Forsyth 			}
8274a4d8c2SCharles.Forsyth 			if(status)
8374a4d8c2SCharles.Forsyth 				c++;
8474a4d8c2SCharles.Forsyth 			nout--;
8574a4d8c2SCharles.Forsyth 		}
8674a4d8c2SCharles.Forsyth 	}
8774a4d8c2SCharles.Forsyth 	if(assemble(argv[0]))
8874a4d8c2SCharles.Forsyth 		errorexit();
8974a4d8c2SCharles.Forsyth 	exits(0);
9074a4d8c2SCharles.Forsyth }
9174a4d8c2SCharles.Forsyth 
9274a4d8c2SCharles.Forsyth int
assemble(char * file)9374a4d8c2SCharles.Forsyth assemble(char *file)
9474a4d8c2SCharles.Forsyth {
9574a4d8c2SCharles.Forsyth 	char ofile[100], incfile[20], *p;
9674a4d8c2SCharles.Forsyth 	int i, of;
9774a4d8c2SCharles.Forsyth 
9874a4d8c2SCharles.Forsyth 	strcpy(ofile, file);
9974a4d8c2SCharles.Forsyth 	if(p = strrchr(ofile, pathchar())) {
10074a4d8c2SCharles.Forsyth 		include[0] = ofile;
10174a4d8c2SCharles.Forsyth 		*p++ = 0;
10274a4d8c2SCharles.Forsyth 	} else
10374a4d8c2SCharles.Forsyth 		p = ofile;
10474a4d8c2SCharles.Forsyth 	if(outfile == 0) {
10574a4d8c2SCharles.Forsyth 		outfile = p;
10674a4d8c2SCharles.Forsyth 		if(p = strrchr(outfile, '.'))
10774a4d8c2SCharles.Forsyth 			if(p[1] == 's' && p[2] == 0)
10874a4d8c2SCharles.Forsyth 				p[0] = 0;
10974a4d8c2SCharles.Forsyth 		p = strrchr(outfile, 0);
11074a4d8c2SCharles.Forsyth 		p[0] = '.';
11174a4d8c2SCharles.Forsyth 		p[1] = thechar;
11274a4d8c2SCharles.Forsyth 		p[2] = 0;
11374a4d8c2SCharles.Forsyth 	}
11474a4d8c2SCharles.Forsyth 	p = getenv("INCLUDE");
11574a4d8c2SCharles.Forsyth 	if(p) {
11674a4d8c2SCharles.Forsyth 		setinclude(p);
11774a4d8c2SCharles.Forsyth 	} else {
11874a4d8c2SCharles.Forsyth 		if(systemtype(Plan9)) {
11974a4d8c2SCharles.Forsyth 			sprint(incfile,"/%s/include", thestring);
12074a4d8c2SCharles.Forsyth 			setinclude(strdup(incfile));
12174a4d8c2SCharles.Forsyth 		}
12274a4d8c2SCharles.Forsyth 	}
12374a4d8c2SCharles.Forsyth 
12474a4d8c2SCharles.Forsyth 	of = mycreat(outfile, 0664);
12574a4d8c2SCharles.Forsyth 	if(of < 0) {
12674a4d8c2SCharles.Forsyth 		yyerror("%ca: cannot create %s", thechar, outfile);
12774a4d8c2SCharles.Forsyth 		errorexit();
12874a4d8c2SCharles.Forsyth 	}
12974a4d8c2SCharles.Forsyth 	Binit(&obuf, of, OWRITE);
13074a4d8c2SCharles.Forsyth 
13174a4d8c2SCharles.Forsyth 	pass = 1;
13274a4d8c2SCharles.Forsyth 	nosched = 0;
13374a4d8c2SCharles.Forsyth 	pinit(file);
13474a4d8c2SCharles.Forsyth 	for(i=0; i<nDlist; i++)
13574a4d8c2SCharles.Forsyth 		dodefine(Dlist[i]);
13674a4d8c2SCharles.Forsyth 	yyparse();
13774a4d8c2SCharles.Forsyth 	if(nerrors) {
13874a4d8c2SCharles.Forsyth 		cclean();
13974a4d8c2SCharles.Forsyth 		return nerrors;
14074a4d8c2SCharles.Forsyth 	}
14174a4d8c2SCharles.Forsyth 
14274a4d8c2SCharles.Forsyth 	pass = 2;
14374a4d8c2SCharles.Forsyth 	nosched = 0;
14474a4d8c2SCharles.Forsyth 	outhist();
14574a4d8c2SCharles.Forsyth 	pinit(file);
14674a4d8c2SCharles.Forsyth 	for(i=0; i<nDlist; i++)
14774a4d8c2SCharles.Forsyth 		dodefine(Dlist[i]);
14874a4d8c2SCharles.Forsyth 	yyparse();
14974a4d8c2SCharles.Forsyth 	cclean();
15074a4d8c2SCharles.Forsyth 	return nerrors;
15174a4d8c2SCharles.Forsyth }
15274a4d8c2SCharles.Forsyth 
15374a4d8c2SCharles.Forsyth struct
15474a4d8c2SCharles.Forsyth {
15574a4d8c2SCharles.Forsyth 	char	*name;
15674a4d8c2SCharles.Forsyth 	ushort	type;
15774a4d8c2SCharles.Forsyth 	ushort	value;
15874a4d8c2SCharles.Forsyth } itab[] =
15974a4d8c2SCharles.Forsyth {
16074a4d8c2SCharles.Forsyth 	"SP",		LSP,	D_AUTO,
16174a4d8c2SCharles.Forsyth 	"SB",		LSB,	D_EXTERN,
16274a4d8c2SCharles.Forsyth 	"FP",		LFP,	D_PARAM,
16374a4d8c2SCharles.Forsyth 	"PC",		LPC,	D_BRANCH,
16474a4d8c2SCharles.Forsyth 
16574a4d8c2SCharles.Forsyth 	"LR",		LLR,	D_LR,
16674a4d8c2SCharles.Forsyth 	"CTR",		LCTR,	D_CTR,
16774a4d8c2SCharles.Forsyth 
16874a4d8c2SCharles.Forsyth 	"XER",		LSPREG,	D_XER,
16974a4d8c2SCharles.Forsyth 	"MSR",		LMSR,	D_MSR,
17074a4d8c2SCharles.Forsyth 	"FPSCR",	LFPSCR,	D_FPSCR,
17174a4d8c2SCharles.Forsyth 	"SPR",		LSPR,	D_SPR,
172d67b7dadSforsyth 	"DCR",		LDCR,	D_DCR,
17374a4d8c2SCharles.Forsyth 
17474a4d8c2SCharles.Forsyth 	"SEG",		LSEG,	D_SREG,
17574a4d8c2SCharles.Forsyth 
17674a4d8c2SCharles.Forsyth 	"CR",		LCR,	0,
17774a4d8c2SCharles.Forsyth 	"CR0",		LCREG,	0,
17874a4d8c2SCharles.Forsyth 	"CR1",		LCREG,	1,
17974a4d8c2SCharles.Forsyth 	"CR2",		LCREG,	2,
18074a4d8c2SCharles.Forsyth 	"CR3",		LCREG,	3,
18174a4d8c2SCharles.Forsyth 	"CR4",		LCREG,	4,
18274a4d8c2SCharles.Forsyth 	"CR5",		LCREG,	5,
18374a4d8c2SCharles.Forsyth 	"CR6",		LCREG,	6,
18474a4d8c2SCharles.Forsyth 	"CR7",		LCREG,	7,
18574a4d8c2SCharles.Forsyth 
18674a4d8c2SCharles.Forsyth 	"R",		LR,	0,
18774a4d8c2SCharles.Forsyth 	"R0",		LREG,	0,
18874a4d8c2SCharles.Forsyth 	"R1",		LREG,	1,
18974a4d8c2SCharles.Forsyth 	"R2",		LREG,	2,
19074a4d8c2SCharles.Forsyth 	"R3",		LREG,	3,
19174a4d8c2SCharles.Forsyth 	"R4",		LREG,	4,
19274a4d8c2SCharles.Forsyth 	"R5",		LREG,	5,
19374a4d8c2SCharles.Forsyth 	"R6",		LREG,	6,
19474a4d8c2SCharles.Forsyth 	"R7",		LREG,	7,
19574a4d8c2SCharles.Forsyth 	"R8",		LREG,	8,
19674a4d8c2SCharles.Forsyth 	"R9",		LREG,	9,
19774a4d8c2SCharles.Forsyth 	"R10",		LREG,	10,
19874a4d8c2SCharles.Forsyth 	"R11",		LREG,	11,
19974a4d8c2SCharles.Forsyth 	"R12",		LREG,	12,
20074a4d8c2SCharles.Forsyth 	"R13",		LREG,	13,
20174a4d8c2SCharles.Forsyth 	"R14",		LREG,	14,
20274a4d8c2SCharles.Forsyth 	"R15",		LREG,	15,
20374a4d8c2SCharles.Forsyth 	"R16",		LREG,	16,
20474a4d8c2SCharles.Forsyth 	"R17",		LREG,	17,
20574a4d8c2SCharles.Forsyth 	"R18",		LREG,	18,
20674a4d8c2SCharles.Forsyth 	"R19",		LREG,	19,
20774a4d8c2SCharles.Forsyth 	"R20",		LREG,	20,
20874a4d8c2SCharles.Forsyth 	"R21",		LREG,	21,
20974a4d8c2SCharles.Forsyth 	"R22",		LREG,	22,
21074a4d8c2SCharles.Forsyth 	"R23",		LREG,	23,
21174a4d8c2SCharles.Forsyth 	"R24",		LREG,	24,
21274a4d8c2SCharles.Forsyth 	"R25",		LREG,	25,
21374a4d8c2SCharles.Forsyth 	"R26",		LREG,	26,
21474a4d8c2SCharles.Forsyth 	"R27",		LREG,	27,
21574a4d8c2SCharles.Forsyth 	"R28",		LREG,	28,
21674a4d8c2SCharles.Forsyth 	"R29",		LREG,	29,
21774a4d8c2SCharles.Forsyth 	"R30",		LREG,	30,
21874a4d8c2SCharles.Forsyth 	"R31",		LREG,	31,
21974a4d8c2SCharles.Forsyth 
22074a4d8c2SCharles.Forsyth 	"F",		LF,	0,
22174a4d8c2SCharles.Forsyth 	"F0",		LFREG,	0,
22274a4d8c2SCharles.Forsyth 	"F1",		LFREG,	1,
22374a4d8c2SCharles.Forsyth 	"F2",		LFREG,	2,
22474a4d8c2SCharles.Forsyth 	"F3",		LFREG,	3,
22574a4d8c2SCharles.Forsyth 	"F4",		LFREG,	4,
22674a4d8c2SCharles.Forsyth 	"F5",		LFREG,	5,
22774a4d8c2SCharles.Forsyth 	"F6",		LFREG,	6,
22874a4d8c2SCharles.Forsyth 	"F7",		LFREG,	7,
22974a4d8c2SCharles.Forsyth 	"F8",		LFREG,	8,
23074a4d8c2SCharles.Forsyth 	"F9",		LFREG,	9,
23174a4d8c2SCharles.Forsyth 	"F10",		LFREG,	10,
23274a4d8c2SCharles.Forsyth 	"F11",		LFREG,	11,
23374a4d8c2SCharles.Forsyth 	"F12",		LFREG,	12,
23474a4d8c2SCharles.Forsyth 	"F13",		LFREG,	13,
23574a4d8c2SCharles.Forsyth 	"F14",		LFREG,	14,
23674a4d8c2SCharles.Forsyth 	"F15",		LFREG,	15,
23774a4d8c2SCharles.Forsyth 	"F16",		LFREG,	16,
23874a4d8c2SCharles.Forsyth 	"F17",		LFREG,	17,
23974a4d8c2SCharles.Forsyth 	"F18",		LFREG,	18,
24074a4d8c2SCharles.Forsyth 	"F19",		LFREG,	19,
24174a4d8c2SCharles.Forsyth 	"F20",		LFREG,	20,
24274a4d8c2SCharles.Forsyth 	"F21",		LFREG,	21,
24374a4d8c2SCharles.Forsyth 	"F22",		LFREG,	22,
24474a4d8c2SCharles.Forsyth 	"F23",		LFREG,	23,
24574a4d8c2SCharles.Forsyth 	"F24",		LFREG,	24,
24674a4d8c2SCharles.Forsyth 	"F25",		LFREG,	25,
24774a4d8c2SCharles.Forsyth 	"F26",		LFREG,	26,
24874a4d8c2SCharles.Forsyth 	"F27",		LFREG,	27,
24974a4d8c2SCharles.Forsyth 	"F28",		LFREG,	28,
25074a4d8c2SCharles.Forsyth 	"F29",		LFREG,	29,
25174a4d8c2SCharles.Forsyth 	"F30",		LFREG,	30,
25274a4d8c2SCharles.Forsyth 	"F31",		LFREG,	31,
25374a4d8c2SCharles.Forsyth 
25474a4d8c2SCharles.Forsyth 	"CREQV",	LCROP, ACREQV,
25574a4d8c2SCharles.Forsyth 	"CRXOR",	LCROP, ACRXOR,
25674a4d8c2SCharles.Forsyth 	"CRAND",	LCROP, ACRAND,
25774a4d8c2SCharles.Forsyth 	"CROR",		LCROP, ACROR,
25874a4d8c2SCharles.Forsyth 	"CRANDN",	LCROP, ACRANDN,
25974a4d8c2SCharles.Forsyth 	"CRORN",	LCROP, ACRORN,
26074a4d8c2SCharles.Forsyth 	"CRNAND",	LCROP, ACRNAND,
26174a4d8c2SCharles.Forsyth 	"CRNOR",	LCROP, ACRNOR,
26274a4d8c2SCharles.Forsyth 
26374a4d8c2SCharles.Forsyth 	"ADD",		LADDW, AADD,
26474a4d8c2SCharles.Forsyth 	"ADDV",		LADDW, AADDV,
26574a4d8c2SCharles.Forsyth 	"ADDCC",	LADDW, AADDCC,
26674a4d8c2SCharles.Forsyth 	"ADDVCC",	LADDW, AADDVCC,
26774a4d8c2SCharles.Forsyth 	"ADDC",		LADDW, AADDC,
26874a4d8c2SCharles.Forsyth 	"ADDCV",	LADDW, AADDCV,
26974a4d8c2SCharles.Forsyth 	"ADDCCC",	LADDW, AADDCCC,
27074a4d8c2SCharles.Forsyth 	"ADDCVCC",	LADDW, AADDCVCC,
27174a4d8c2SCharles.Forsyth 	"ADDE",		LLOGW, AADDE,
27274a4d8c2SCharles.Forsyth 	"ADDEV",	LLOGW, AADDEV,
27374a4d8c2SCharles.Forsyth 	"ADDECC",	LLOGW, AADDECC,
27474a4d8c2SCharles.Forsyth 	"ADDEVCC",	LLOGW, AADDEVCC,
27574a4d8c2SCharles.Forsyth 
27674a4d8c2SCharles.Forsyth 	"ADDME",	LABS, AADDME,
27774a4d8c2SCharles.Forsyth 	"ADDMEV",	LABS, AADDMEV,
27874a4d8c2SCharles.Forsyth 	"ADDMECC",	LABS, AADDMECC,
27974a4d8c2SCharles.Forsyth 	"ADDMEVCC",	LABS, AADDMEVCC,
28074a4d8c2SCharles.Forsyth 	"ADDZE",	LABS, AADDZE,
28174a4d8c2SCharles.Forsyth 	"ADDZEV",	LABS, AADDZEV,
28274a4d8c2SCharles.Forsyth 	"ADDZECC",	LABS, AADDZECC,
28374a4d8c2SCharles.Forsyth 	"ADDZEVCC",	LABS, AADDZEVCC,
28474a4d8c2SCharles.Forsyth 
28574a4d8c2SCharles.Forsyth 	"SUB",		LADDW, ASUB,
28674a4d8c2SCharles.Forsyth 	"SUBV",		LADDW, ASUBV,
28774a4d8c2SCharles.Forsyth 	"SUBCC",	LADDW, ASUBCC,
28874a4d8c2SCharles.Forsyth 	"SUBVCC",	LADDW, ASUBVCC,
28974a4d8c2SCharles.Forsyth 	"SUBE",		LLOGW, ASUBE,
29074a4d8c2SCharles.Forsyth 	"SUBECC",	LLOGW, ASUBECC,
29174a4d8c2SCharles.Forsyth 	"SUBEV",	LLOGW, ASUBEV,
29274a4d8c2SCharles.Forsyth 	"SUBEVCC",	LLOGW, ASUBEVCC,
29374a4d8c2SCharles.Forsyth 	"SUBC",		LADDW, ASUBC,
29474a4d8c2SCharles.Forsyth 	"SUBCCC",	LADDW, ASUBCCC,
29574a4d8c2SCharles.Forsyth 	"SUBCV",	LADDW, ASUBCV,
29674a4d8c2SCharles.Forsyth 	"SUBCVCC",	LADDW, ASUBCVCC,
29774a4d8c2SCharles.Forsyth 
29874a4d8c2SCharles.Forsyth 	"SUBME",	LABS, ASUBME,
29974a4d8c2SCharles.Forsyth 	"SUBMEV",	LABS, ASUBMEV,
30074a4d8c2SCharles.Forsyth 	"SUBMECC",	LABS, ASUBMECC,
30174a4d8c2SCharles.Forsyth 	"SUBMEVCC",	LABS, ASUBMEVCC,
30274a4d8c2SCharles.Forsyth 	"SUBZE",	LABS, ASUBZE,
30374a4d8c2SCharles.Forsyth 	"SUBZEV",	LABS, ASUBZEV,
30474a4d8c2SCharles.Forsyth 	"SUBZECC",	LABS, ASUBZECC,
30574a4d8c2SCharles.Forsyth 	"SUBZEVCC",	LABS, ASUBZEVCC,
30674a4d8c2SCharles.Forsyth 
30774a4d8c2SCharles.Forsyth 	"AND",		LADDW, AAND,
30874a4d8c2SCharles.Forsyth 	"ANDCC",	LADDW, AANDCC,	/* includes andil & andiu */
30974a4d8c2SCharles.Forsyth 	"ANDN",		LLOGW, AANDN,
31074a4d8c2SCharles.Forsyth 	"ANDNCC",	LLOGW, AANDNCC,
31174a4d8c2SCharles.Forsyth 	"EQV",		LLOGW, AEQV,
31274a4d8c2SCharles.Forsyth 	"EQVCC",	LLOGW, AEQVCC,
31374a4d8c2SCharles.Forsyth 	"NAND",		LLOGW, ANAND,
31474a4d8c2SCharles.Forsyth 	"NANDCC",	LLOGW, ANANDCC,
31574a4d8c2SCharles.Forsyth 	"NOR",		LLOGW, ANOR,
31674a4d8c2SCharles.Forsyth 	"NORCC",	LLOGW, ANORCC,
31774a4d8c2SCharles.Forsyth 	"OR",		LADDW, AOR,	/* includes oril & oriu */
31874a4d8c2SCharles.Forsyth 	"ORCC",		LADDW, AORCC,
31974a4d8c2SCharles.Forsyth 	"ORN",		LLOGW, AORN,
32074a4d8c2SCharles.Forsyth 	"ORNCC",	LLOGW, AORNCC,
32174a4d8c2SCharles.Forsyth 	"XOR",		LADDW, AXOR,	/* includes xoril & xoriu */
32274a4d8c2SCharles.Forsyth 	"XORCC",	LLOGW, AXORCC,
32374a4d8c2SCharles.Forsyth 
32474a4d8c2SCharles.Forsyth 	"EXTSB",	LABS,	AEXTSB,
32574a4d8c2SCharles.Forsyth 	"EXTSBCC",	LABS,	AEXTSBCC,
32674a4d8c2SCharles.Forsyth 	"EXTSH",	LABS, AEXTSH,
32774a4d8c2SCharles.Forsyth 	"EXTSHCC",	LABS, AEXTSHCC,
32874a4d8c2SCharles.Forsyth 
32974a4d8c2SCharles.Forsyth 	"CNTLZW",	LABS, ACNTLZW,
33074a4d8c2SCharles.Forsyth 	"CNTLZWCC",	LABS, ACNTLZWCC,
33174a4d8c2SCharles.Forsyth 
33274a4d8c2SCharles.Forsyth 	"RLWMI",	LRLWM, ARLWMI,
33374a4d8c2SCharles.Forsyth 	"RLWMICC",	LRLWM, ARLWMICC,
33474a4d8c2SCharles.Forsyth 	"RLWNM",	LRLWM, ARLWNM,
33574a4d8c2SCharles.Forsyth 	"RLWNMCC", LRLWM, ARLWNMCC,
33674a4d8c2SCharles.Forsyth 
33774a4d8c2SCharles.Forsyth 	"SLW",		LSHW, ASLW,
33874a4d8c2SCharles.Forsyth 	"SLWCC",	LSHW, ASLWCC,
33974a4d8c2SCharles.Forsyth 	"SRW",		LSHW, ASRW,
34074a4d8c2SCharles.Forsyth 	"SRWCC",	LSHW, ASRWCC,
34174a4d8c2SCharles.Forsyth 	"SRAW",		LSHW, ASRAW,
34274a4d8c2SCharles.Forsyth 	"SRAWCC",	LSHW, ASRAWCC,
34374a4d8c2SCharles.Forsyth 
34474a4d8c2SCharles.Forsyth 	"BR",		LBRA, ABR,
34574a4d8c2SCharles.Forsyth 	"BC",		LBRA, ABC,
34674a4d8c2SCharles.Forsyth 	"BCL",		LBRA, ABC,
34774a4d8c2SCharles.Forsyth 	"BL",		LBRA, ABL,
34874a4d8c2SCharles.Forsyth 	"BEQ",		LBRA, ABEQ,
34974a4d8c2SCharles.Forsyth 	"BNE",		LBRA, ABNE,
35074a4d8c2SCharles.Forsyth 	"BGT",		LBRA, ABGT,
35174a4d8c2SCharles.Forsyth 	"BGE",		LBRA, ABGE,
35274a4d8c2SCharles.Forsyth 	"BLT",		LBRA, ABLT,
35374a4d8c2SCharles.Forsyth 	"BLE",		LBRA, ABLE,
35474a4d8c2SCharles.Forsyth 	"BVC",		LBRA, ABVC,
35574a4d8c2SCharles.Forsyth 	"BVS",		LBRA, ABVS,
35674a4d8c2SCharles.Forsyth 
35774a4d8c2SCharles.Forsyth 	"CMP",		LCMP, ACMP,
35874a4d8c2SCharles.Forsyth 	"CMPU",		LCMP, ACMPU,
35974a4d8c2SCharles.Forsyth 
36074a4d8c2SCharles.Forsyth 	"DIVW",		LLOGW, ADIVW,
36174a4d8c2SCharles.Forsyth 	"DIVWV",	LLOGW, ADIVWV,
36274a4d8c2SCharles.Forsyth 	"DIVWCC",	LLOGW, ADIVWCC,
36374a4d8c2SCharles.Forsyth 	"DIVWVCC",	LLOGW, ADIVWVCC,
36474a4d8c2SCharles.Forsyth 	"DIVWU",	LLOGW, ADIVWU,
36574a4d8c2SCharles.Forsyth 	"DIVWUV",	LLOGW, ADIVWUV,
36674a4d8c2SCharles.Forsyth 	"DIVWUCC",	LLOGW, ADIVWUCC,
36774a4d8c2SCharles.Forsyth 	"DIVWUVCC",	LLOGW, ADIVWUVCC,
36874a4d8c2SCharles.Forsyth 
36974a4d8c2SCharles.Forsyth 	"FABS",		LFCONV,	AFABS,
37074a4d8c2SCharles.Forsyth 	"FABSCC",	LFCONV,	AFABSCC,
37174a4d8c2SCharles.Forsyth 	"FNEG",		LFCONV,	AFNEG,
37274a4d8c2SCharles.Forsyth 	"FNEGCC",	LFCONV,	AFNEGCC,
37374a4d8c2SCharles.Forsyth 	"FNABS",	LFCONV,	AFNABS,
37474a4d8c2SCharles.Forsyth 	"FNABSCC",	LFCONV,	AFNABSCC,
37574a4d8c2SCharles.Forsyth 
37674a4d8c2SCharles.Forsyth 	"FADD",		LFADD,	AFADD,
37774a4d8c2SCharles.Forsyth 	"FADDCC",	LFADD,	AFADDCC,
37874a4d8c2SCharles.Forsyth 	"FSUB",		LFADD,  AFSUB,
37974a4d8c2SCharles.Forsyth 	"FSUBCC",	LFADD,	AFSUBCC,
38074a4d8c2SCharles.Forsyth 	"FMUL",		LFADD,	AFMUL,
38174a4d8c2SCharles.Forsyth 	"FMULCC",	LFADD,	AFMULCC,
38274a4d8c2SCharles.Forsyth 	"FDIV",		LFADD,	AFDIV,
38374a4d8c2SCharles.Forsyth 	"FDIVCC",	LFADD,	AFDIVCC,
38474a4d8c2SCharles.Forsyth 	"FRSP",		LFCONV,	AFRSP,
38574a4d8c2SCharles.Forsyth 	"FRSPCC",	LFCONV,	AFRSPCC,
38674a4d8c2SCharles.Forsyth 
38774a4d8c2SCharles.Forsyth 	"FMADD",	LFMA, AFMADD,
38874a4d8c2SCharles.Forsyth 	"FMADDCC",	LFMA, AFMADDCC,
38974a4d8c2SCharles.Forsyth 	"FMSUB",	LFMA, AFMSUB,
39074a4d8c2SCharles.Forsyth 	"FMSUBCC",	LFMA, AFMSUBCC,
39174a4d8c2SCharles.Forsyth 	"FNMADD",	LFMA, AFNMADD,
39274a4d8c2SCharles.Forsyth 	"FNMADDCC",	LFMA, AFNMADDCC,
39374a4d8c2SCharles.Forsyth 	"FNMSUB",	LFMA, AFNMSUB,
39474a4d8c2SCharles.Forsyth 	"FNMSUBCC",	LFMA, AFNMSUBCC,
39574a4d8c2SCharles.Forsyth 	"FMADDS",	LFMA, AFMADDS,
39674a4d8c2SCharles.Forsyth 	"FMADDSCC",	LFMA, AFMADDSCC,
39774a4d8c2SCharles.Forsyth 	"FMSUBS",	LFMA, AFMSUBS,
39874a4d8c2SCharles.Forsyth 	"FMSUBSCC",	LFMA, AFMSUBSCC,
39974a4d8c2SCharles.Forsyth 	"FNMADDS",	LFMA, AFNMADDS,
40074a4d8c2SCharles.Forsyth 	"FNMADDSCC",	LFMA, AFNMADDSCC,
40174a4d8c2SCharles.Forsyth 	"FNMSUBS",	LFMA, AFNMSUBS,
40274a4d8c2SCharles.Forsyth 	"FNMSUBSCC",	LFMA, AFNMSUBSCC,
40374a4d8c2SCharles.Forsyth 
40474a4d8c2SCharles.Forsyth 	"FCMPU",	LFCMP, AFCMPU,
40574a4d8c2SCharles.Forsyth 	"FCMPO",	LFCMP, AFCMPO,
40674a4d8c2SCharles.Forsyth 	"MTFSB0",	LMTFSB, AMTFSB0,
40774a4d8c2SCharles.Forsyth 	"MTFSB1",	LMTFSB,	AMTFSB1,
40874a4d8c2SCharles.Forsyth 
40974a4d8c2SCharles.Forsyth 	"FMOVD",	LFMOV, AFMOVD,
41074a4d8c2SCharles.Forsyth 	"FMOVS",	LFMOV, AFMOVS,
41174a4d8c2SCharles.Forsyth 	"FMOVDCC",	LFCONV,	AFMOVDCC,	/* fmr. */
41274a4d8c2SCharles.Forsyth 
41374a4d8c2SCharles.Forsyth 	"GLOBL",	LTEXT, AGLOBL,
41474a4d8c2SCharles.Forsyth 
41574a4d8c2SCharles.Forsyth 	"MOVB",		LMOVB, AMOVB,
41674a4d8c2SCharles.Forsyth 	"MOVBZ",	LMOVB, AMOVBZ,
41774a4d8c2SCharles.Forsyth 	"MOVBU",	LMOVB, AMOVBU,
41874a4d8c2SCharles.Forsyth 	"MOVBZU", LMOVB, AMOVBZU,
41974a4d8c2SCharles.Forsyth 	"MOVH",		LMOVB, AMOVH,
42074a4d8c2SCharles.Forsyth 	"MOVHZ",	LMOVB, AMOVHZ,
42174a4d8c2SCharles.Forsyth 	"MOVHU",	LMOVB, AMOVHU,
42274a4d8c2SCharles.Forsyth 	"MOVHZU", LMOVB, AMOVHZU,
42374a4d8c2SCharles.Forsyth 	"MOVHBR", 	LXMV, AMOVHBR,
42474a4d8c2SCharles.Forsyth 	"MOVWBR",	LXMV, AMOVWBR,
42574a4d8c2SCharles.Forsyth 	"MOVW",		LMOVW, AMOVW,
42674a4d8c2SCharles.Forsyth 	"MOVWU",	LMOVW, AMOVWU,
42774a4d8c2SCharles.Forsyth 	"MOVMW",	LMOVMW, AMOVMW,
42874a4d8c2SCharles.Forsyth 	"MOVFL",	LMOVW,	AMOVFL,
42974a4d8c2SCharles.Forsyth 
43074a4d8c2SCharles.Forsyth 	"MULLW",	LADDW, AMULLW,		/* includes multiply immediate 10-139 */
43174a4d8c2SCharles.Forsyth 	"MULLWV",	LLOGW, AMULLWV,
43274a4d8c2SCharles.Forsyth 	"MULLWCC",	LLOGW, AMULLWCC,
43374a4d8c2SCharles.Forsyth 	"MULLWVCC",	LLOGW, AMULLWVCC,
43474a4d8c2SCharles.Forsyth 
43574a4d8c2SCharles.Forsyth 	"MULHW",	LLOGW, AMULHW,
43674a4d8c2SCharles.Forsyth 	"MULHWCC",	LLOGW, AMULHWCC,
43774a4d8c2SCharles.Forsyth 	"MULHWU",	LLOGW, AMULHWU,
43874a4d8c2SCharles.Forsyth 	"MULHWUCC",	LLOGW, AMULHWUCC,
43974a4d8c2SCharles.Forsyth 
44074a4d8c2SCharles.Forsyth 	"NEG",		LABS, ANEG,
44174a4d8c2SCharles.Forsyth 	"NEGV",		LABS, ANEGV,
44274a4d8c2SCharles.Forsyth 	"NEGCC",	LABS, ANEGCC,
44374a4d8c2SCharles.Forsyth 	"NEGVCC",	LABS, ANEGVCC,
44474a4d8c2SCharles.Forsyth 
44574a4d8c2SCharles.Forsyth 	"NOP",		LNOP, ANOP,	/* ori 0,0,0 */
44674a4d8c2SCharles.Forsyth 	"SYSCALL",	LNOP, ASYSCALL,
44774a4d8c2SCharles.Forsyth 
44874a4d8c2SCharles.Forsyth 	"RETURN",	LRETRN, ARETURN,
44974a4d8c2SCharles.Forsyth 	"RFI",		LRETRN,	ARFI,
45074a4d8c2SCharles.Forsyth 	"RFCI",		LRETRN,	ARFCI,
45174a4d8c2SCharles.Forsyth 
45274a4d8c2SCharles.Forsyth 	"DATA",		LDATA, ADATA,
45374a4d8c2SCharles.Forsyth 	"END",		LEND, AEND,
45474a4d8c2SCharles.Forsyth 	"TEXT",		LTEXT, ATEXT,
45574a4d8c2SCharles.Forsyth 
45674a4d8c2SCharles.Forsyth 	/* IBM powerpc embedded  */
45774a4d8c2SCharles.Forsyth 	"MACCHW", LMA, AMACCHW,
45874a4d8c2SCharles.Forsyth 	"MACCHWCC", LMA, AMACCHWCC,
45974a4d8c2SCharles.Forsyth 	"MACCHWS", LMA, AMACCHWS,
46074a4d8c2SCharles.Forsyth 	"MACCHWSCC", LMA, AMACCHWSCC,
46174a4d8c2SCharles.Forsyth 	"MACCHWSU", LMA, AMACCHWSU,
46274a4d8c2SCharles.Forsyth 	"MACCHWSUCC", LMA, AMACCHWSUCC,
46374a4d8c2SCharles.Forsyth 	"MACCHWSUV", LMA, AMACCHWSUV,
46474a4d8c2SCharles.Forsyth 	"MACCHWSUVCC", LMA, AMACCHWSUVCC,
46574a4d8c2SCharles.Forsyth 	"MACCHWSV", LMA, AMACCHWSV,
46674a4d8c2SCharles.Forsyth 	"MACCHWSVCC", LMA, AMACCHWSVCC,
46774a4d8c2SCharles.Forsyth 	"MACCHWU", LMA, AMACCHWU,
46874a4d8c2SCharles.Forsyth 	"MACCHWUCC", LMA, AMACCHWUCC,
46974a4d8c2SCharles.Forsyth 	"MACCHWUV", LMA, AMACCHWUV,
47074a4d8c2SCharles.Forsyth 	"MACCHWUVCC", LMA, AMACCHWUVCC,
47174a4d8c2SCharles.Forsyth 	"MACCHWV", LMA, AMACCHWV,
47274a4d8c2SCharles.Forsyth 	"MACCHWVCC", LMA, AMACCHWVCC,
47374a4d8c2SCharles.Forsyth 	"MACHHW", LMA, AMACHHW,
47474a4d8c2SCharles.Forsyth 	"MACHHWCC", LMA, AMACHHWCC,
47574a4d8c2SCharles.Forsyth 	"MACHHWS", LMA, AMACHHWS,
47674a4d8c2SCharles.Forsyth 	"MACHHWSCC", LMA, AMACHHWSCC,
47774a4d8c2SCharles.Forsyth 	"MACHHWSU", LMA, AMACHHWSU,
47874a4d8c2SCharles.Forsyth 	"MACHHWSUCC", LMA, AMACHHWSUCC,
47974a4d8c2SCharles.Forsyth 	"MACHHWSUV", LMA, AMACHHWSUV,
48074a4d8c2SCharles.Forsyth 	"MACHHWSUVCC", LMA, AMACHHWSUVCC,
48174a4d8c2SCharles.Forsyth 	"MACHHWSV", LMA, AMACHHWSV,
48274a4d8c2SCharles.Forsyth 	"MACHHWSVCC", LMA, AMACHHWSVCC,
48374a4d8c2SCharles.Forsyth 	"MACHHWU", LMA, AMACHHWU,
48474a4d8c2SCharles.Forsyth 	"MACHHWUCC", LMA, AMACHHWUCC,
48574a4d8c2SCharles.Forsyth 	"MACHHWUV", LMA, AMACHHWUV,
48674a4d8c2SCharles.Forsyth 	"MACHHWUVCC", LMA, AMACHHWUVCC,
48774a4d8c2SCharles.Forsyth 	"MACHHWV", LMA, AMACHHWV,
48874a4d8c2SCharles.Forsyth 	"MACHHWVCC", LMA, AMACHHWVCC,
48974a4d8c2SCharles.Forsyth 	"MACLHW", LMA, AMACLHW,
49074a4d8c2SCharles.Forsyth 	"MACLHWCC", LMA, AMACLHWCC,
49174a4d8c2SCharles.Forsyth 	"MACLHWS", LMA, AMACLHWS,
49274a4d8c2SCharles.Forsyth 	"MACLHWSCC", LMA, AMACLHWSCC,
49374a4d8c2SCharles.Forsyth 	"MACLHWSU", LMA, AMACLHWSU,
49474a4d8c2SCharles.Forsyth 	"MACLHWSUCC", LMA, AMACLHWSUCC,
49574a4d8c2SCharles.Forsyth 	"MACLHWSUV", LMA, AMACLHWSUV,
49674a4d8c2SCharles.Forsyth 	"MACLHWSUVCC", LMA, AMACLHWSUVCC,
49774a4d8c2SCharles.Forsyth 	"MACLHWSV", LMA, AMACLHWSV,
49874a4d8c2SCharles.Forsyth 	"MACLHWSVCC", LMA, AMACLHWSVCC,
49974a4d8c2SCharles.Forsyth 	"MACLHWU", LMA, AMACLHWU,
50074a4d8c2SCharles.Forsyth 	"MACLHWUCC", LMA, AMACLHWUCC,
50174a4d8c2SCharles.Forsyth 	"MACLHWUV", LMA, AMACLHWUV,
50274a4d8c2SCharles.Forsyth 	"MACLHWUVCC", LMA, AMACLHWUVCC,
50374a4d8c2SCharles.Forsyth 	"MACLHWV", LMA, AMACLHWV,
50474a4d8c2SCharles.Forsyth 	"MACLHWVCC", LMA, AMACLHWVCC,
50574a4d8c2SCharles.Forsyth 	"MULCHW",	LLOGW, AMULCHW,
50674a4d8c2SCharles.Forsyth 	"MULCHWCC",	LLOGW, AMULCHWCC,
50774a4d8c2SCharles.Forsyth 	"MULCHWU",	LLOGW, AMULCHWU,
50874a4d8c2SCharles.Forsyth 	"MULCHWUCC",	LLOGW, AMULCHWUCC,
50974a4d8c2SCharles.Forsyth 	"MULHHW",	LLOGW, AMULHHW,
51074a4d8c2SCharles.Forsyth 	"MULHHWCC",	LLOGW, AMULHHWCC,
51174a4d8c2SCharles.Forsyth 	"MULHHWU",	LLOGW, AMULHHWU,
51274a4d8c2SCharles.Forsyth 	"MULHHWUCC",	LLOGW, AMULHHWUCC,
51374a4d8c2SCharles.Forsyth 	"MULLHW",	LLOGW, AMULLHW,
51474a4d8c2SCharles.Forsyth 	"MULLHWCC",	LLOGW, AMULLHWCC,
51574a4d8c2SCharles.Forsyth 	"MULLHWU",	LLOGW, AMULLHWU,
51674a4d8c2SCharles.Forsyth 	"MULLHWUCC",	LLOGW, AMULLHWUCC,
51774a4d8c2SCharles.Forsyth 	"NMACCHW", LMA, ANMACCHW,
51874a4d8c2SCharles.Forsyth 	"NMACCHWCC", LMA, ANMACCHWCC,
51974a4d8c2SCharles.Forsyth 	"NMACCHWS", LMA, ANMACCHWS,
52074a4d8c2SCharles.Forsyth 	"NMACCHWSCC", LMA, ANMACCHWSCC,
52174a4d8c2SCharles.Forsyth 	"NMACCHWSV", LMA, ANMACCHWSV,
52274a4d8c2SCharles.Forsyth 	"NMACCHWSVCC", LMA, ANMACCHWSVCC,
52374a4d8c2SCharles.Forsyth 	"NMACCHWV", LMA, ANMACCHWV,
52474a4d8c2SCharles.Forsyth 	"NMACCHWVCC", LMA, ANMACCHWVCC,
52574a4d8c2SCharles.Forsyth 	"NMACHHW", LMA, ANMACHHW,
52674a4d8c2SCharles.Forsyth 	"NMACHHWCC", LMA, ANMACHHWCC,
52774a4d8c2SCharles.Forsyth 	"NMACHHWS", LMA, ANMACHHWS,
52874a4d8c2SCharles.Forsyth 	"NMACHHWSCC", LMA, ANMACHHWSCC,
52974a4d8c2SCharles.Forsyth 	"NMACHHWSV", LMA, ANMACHHWSV,
53074a4d8c2SCharles.Forsyth 	"NMACHHWSVCC", LMA, ANMACHHWSVCC,
53174a4d8c2SCharles.Forsyth 	"NMACHHWV", LMA, ANMACHHWV,
53274a4d8c2SCharles.Forsyth 	"NMACHHWVCC", LMA, ANMACHHWVCC,
53374a4d8c2SCharles.Forsyth 	"NMACLHW", LMA, ANMACLHW,
53474a4d8c2SCharles.Forsyth 	"NMACLHWCC", LMA, ANMACLHWCC,
53574a4d8c2SCharles.Forsyth 	"NMACLHWS", LMA, ANMACLHWS,
53674a4d8c2SCharles.Forsyth 	"NMACLHWSCC", LMA, ANMACLHWSCC,
53774a4d8c2SCharles.Forsyth 	"NMACLHWSV", LMA, ANMACLHWSV,
53874a4d8c2SCharles.Forsyth 	"NMACLHWSVCC", LMA, ANMACLHWSVCC,
53974a4d8c2SCharles.Forsyth 	"NMACLHWV", LMA, ANMACLHWV,
54074a4d8c2SCharles.Forsyth 	"NMACLHWVCC", LMA, ANMACLHWVCC,
54174a4d8c2SCharles.Forsyth 
542d67b7dadSforsyth 	/* optional on 32-bit */
543d67b7dadSforsyth 	"FRES", LFCONV, AFRES,
544d67b7dadSforsyth 	"FRESCC", LFCONV, AFRESCC,
545d67b7dadSforsyth 	"FRSQRTE", LFCONV, AFRSQRTE,
546d67b7dadSforsyth 	"FRSQRTECC", LFCONV, AFRSQRTECC,
547d67b7dadSforsyth 	"FSEL", LFMA, AFSEL,
548d67b7dadSforsyth 	"FSELCC", LFMA, AFSELCC,
549d67b7dadSforsyth 	"FSQRT", LFCONV, AFSQRT,
550d67b7dadSforsyth 	"FSQRTCC", LFCONV, AFSQRTCC,
551d67b7dadSforsyth 	"FSQRTS", LFCONV, AFSQRTS,
552d67b7dadSforsyth 	"FSQRTSCC", LFCONV, AFSQRTSCC,
553d67b7dadSforsyth 
554d67b7dadSforsyth 	/* parallel, cross, and secondary (fp2) */
555d67b7dadSforsyth 	"FPSEL", LFMA, AFPSEL,
556d67b7dadSforsyth 	"FPMUL", LFADD, AFPMUL,
557d67b7dadSforsyth 	"FXMUL", LFADD, AFXMUL,
558d67b7dadSforsyth 	"FXPMUL", LFADD, AFXPMUL,
559d67b7dadSforsyth 	"FXSMUL", LFADD, AFXSMUL,
560d67b7dadSforsyth 	"FPADD", LFADD, AFPADD,
561d67b7dadSforsyth 	"FPSUB", LFADD, AFPSUB,
562d67b7dadSforsyth 	"FPRE", LFCONV, AFPRE,
563d67b7dadSforsyth 	"FPRSQRTE", LFCONV, AFPRSQRTE,
564d67b7dadSforsyth 	"FPMADD", LFMA, AFPMADD,
565d67b7dadSforsyth 	"FXMADD", LFMA, AFXMADD,
566d67b7dadSforsyth 	"FXCPMADD", LFMA, AFXCPMADD,
567d67b7dadSforsyth 	"FXCSMADD", LFMA, AFXCSMADD,
568d67b7dadSforsyth 	"FPNMADD", LFMA, AFPNMADD,
569d67b7dadSforsyth 	"FXNMADD", LFMA, AFXNMADD,
570d67b7dadSforsyth 	"FXCPNMADD", LFMA, AFXCPNMADD,
571d67b7dadSforsyth 	"FXCSNMADD", LFMA, AFXCSNMADD,
572d67b7dadSforsyth 	"FPMSUB", LFMA, AFPMSUB,
573d67b7dadSforsyth 	"FXMSUB", LFMA, AFXMSUB,
574d67b7dadSforsyth 	"FXCPMSUB", LFMA, AFXCPMSUB,
575d67b7dadSforsyth 	"FXCSMSUB", LFMA, AFXCSMSUB,
576d67b7dadSforsyth 	"FPNMSUB", LFMA, AFPNMSUB,
577d67b7dadSforsyth 	"FXNMSUB", LFMA, AFXNMSUB,
578d67b7dadSforsyth 	"FXCPNMSUB", LFMA, AFXCPNMSUB,
579d67b7dadSforsyth 	"FXCSNMSUB", LFMA, AFXCSNMSUB,
580d67b7dadSforsyth 	"FPABS", LFCONV, AFPABS,
581d67b7dadSforsyth 	"FPNEG", LFCONV, AFPNEG,
582d67b7dadSforsyth 	"FPRSP", LFCONV, AFPRSP,
583d67b7dadSforsyth 	"FPNABS", LFCONV, AFPNABS,
584d67b7dadSforsyth 	"FSMOVD", LFMOV, AFSMOVD,
585d67b7dadSforsyth 	"FSCMP", LFCMP, AFSCMP,
586d67b7dadSforsyth 	"FSABS", LFCONV, AFSABS,
587d67b7dadSforsyth 	"FSNEG", LFCONV, AFSNEG,
588d67b7dadSforsyth 	"FSNABS", LFCONV, AFSNABS,
589d67b7dadSforsyth 	"FPCTIW", LFCONV, AFPCTIW,
590d67b7dadSforsyth 	"FPCTIWZ", LFCONV, AFPCTIWZ,
591d67b7dadSforsyth 	"FMOVSPD", LFCONV, AFMOVSPD,
592d67b7dadSforsyth 	"FMOVPSD", LFCONV, AFMOVPSD,
593d67b7dadSforsyth 	"FXCPNPMA", LFMA, AFXCPNPMA,
594d67b7dadSforsyth 	"FXCSNPMA", LFMA, AFXCSNPMA,
595d67b7dadSforsyth 	"FXCPNSMA", LFMA, AFXCPNSMA,
596d67b7dadSforsyth 	"FXCSNSMA", LFMA, AFXCSNSMA,
597d67b7dadSforsyth 	"FXCXNPMA", LFMA, AFXCXNPMA,
598d67b7dadSforsyth 	"FXCXNSMA", LFMA, AFXCXNSMA,
599d67b7dadSforsyth 	"FXCXMA", LFMA, AFXCXMA,
600d67b7dadSforsyth 	"FXCXNMS", LFMA, AFXCXNMS,
601d67b7dadSforsyth 
602d67b7dadSforsyth 	/* parallel, cross, and secondary load and store (fp2) */
603d67b7dadSforsyth 	"FSMOVS", LFMOVX, AFSMOVS,
604d67b7dadSforsyth 	"FSMOVSU", LFMOVX, AFSMOVSU,
605d67b7dadSforsyth 	"FSMOVD", LFMOVX, AFSMOVD,
606d67b7dadSforsyth 	"FSMOVDU", LFMOVX, AFSMOVDU,
607d67b7dadSforsyth 	"FXMOVS", LFMOVX, AFXMOVS,
608d67b7dadSforsyth 	"FXMOVSU", LFMOVX, AFXMOVSU,
609d67b7dadSforsyth 	"FXMOVD", LFMOVX, AFXMOVD,
610d67b7dadSforsyth 	"FXMOVDU", LFMOVX, AFXMOVDU,
611d67b7dadSforsyth 	"FPMOVS", LFMOVX, AFPMOVS,
612d67b7dadSforsyth 	"FPMOVSU", LFMOVX, AFPMOVSU,
613d67b7dadSforsyth 	"FPMOVD", LFMOVX, AFPMOVD,
614d67b7dadSforsyth 	"FPMOVDU", LFMOVX, AFPMOVDU,
615d67b7dadSforsyth 	"FPMOVIW", LFMOVX, AFPMOVIW,
616d67b7dadSforsyth 
617d67b7dadSforsyth 	"AFMOVSPD",	LFMOV,	AFMOVSPD,
618d67b7dadSforsyth 	"AFMOVPSD",	LFMOV,	AFMOVPSD,
619d67b7dadSforsyth 
62074a4d8c2SCharles.Forsyth 	/* special instructions */
62174a4d8c2SCharles.Forsyth 	"DCBF",		LXOP,	ADCBF,
62274a4d8c2SCharles.Forsyth 	"DCBI",		LXOP,	ADCBI,
62374a4d8c2SCharles.Forsyth 	"DCBST",	LXOP,	ADCBST,
62474a4d8c2SCharles.Forsyth 	"DCBT",		LXOP,	ADCBT,
62574a4d8c2SCharles.Forsyth 	"DCBTST",	LXOP,	ADCBTST,
62674a4d8c2SCharles.Forsyth 	"DCBZ",		LXOP,	ADCBZ,
62774a4d8c2SCharles.Forsyth 	"ICBI",		LXOP,	AICBI,
62874a4d8c2SCharles.Forsyth 
62974a4d8c2SCharles.Forsyth 	"ECIWX",	LXLD,	AECIWX,
63074a4d8c2SCharles.Forsyth 	"ECOWX",	LXST,	AECOWX,
63174a4d8c2SCharles.Forsyth 	"LWAR", LXLD, ALWAR,
63274a4d8c2SCharles.Forsyth 	"STWCCC", LXST, ASTWCCC,
63374a4d8c2SCharles.Forsyth 	"EIEIO",	LRETRN,	AEIEIO,
63474a4d8c2SCharles.Forsyth 	"TLBIE",	LNOP,	ATLBIE,
63574a4d8c2SCharles.Forsyth 	"LSW",	LXLD, ALSW,
63674a4d8c2SCharles.Forsyth 	"STSW",	LXST, ASTSW,
63774a4d8c2SCharles.Forsyth 
63874a4d8c2SCharles.Forsyth 	"ISYNC",	LRETRN, AISYNC,
63974a4d8c2SCharles.Forsyth 	"SYNC",		LRETRN, ASYNC,
64074a4d8c2SCharles.Forsyth /*	"TW",		LADDW,	ATW,*/
64174a4d8c2SCharles.Forsyth 
64274a4d8c2SCharles.Forsyth 	"WORD",		LWORD, AWORD,
64374a4d8c2SCharles.Forsyth 	"SCHED",	LSCHED, 0,
64474a4d8c2SCharles.Forsyth 	"NOSCHED",	LSCHED,	0x80,
64574a4d8c2SCharles.Forsyth 
64674a4d8c2SCharles.Forsyth 	0
64774a4d8c2SCharles.Forsyth };
64874a4d8c2SCharles.Forsyth 
64974a4d8c2SCharles.Forsyth void
cinit(void)65074a4d8c2SCharles.Forsyth cinit(void)
65174a4d8c2SCharles.Forsyth {
65274a4d8c2SCharles.Forsyth 	Sym *s;
65374a4d8c2SCharles.Forsyth 	int i;
65474a4d8c2SCharles.Forsyth 
65574a4d8c2SCharles.Forsyth 	nullgen.sym = S;
65674a4d8c2SCharles.Forsyth 	nullgen.offset = 0;
65774a4d8c2SCharles.Forsyth 	nullgen.type = D_NONE;
65874a4d8c2SCharles.Forsyth 	nullgen.name = D_NONE;
65974a4d8c2SCharles.Forsyth 	nullgen.reg = NREG;
66074a4d8c2SCharles.Forsyth 	nullgen.xreg = NREG;
66174a4d8c2SCharles.Forsyth 	if(FPCHIP)
66274a4d8c2SCharles.Forsyth 		nullgen.dval = 0;
66374a4d8c2SCharles.Forsyth 	for(i=0; i<sizeof(nullgen.sval); i++)
66474a4d8c2SCharles.Forsyth 		nullgen.sval[i] = 0;
66574a4d8c2SCharles.Forsyth 
66674a4d8c2SCharles.Forsyth 	nerrors = 0;
66774a4d8c2SCharles.Forsyth 	iostack = I;
66874a4d8c2SCharles.Forsyth 	iofree = I;
66974a4d8c2SCharles.Forsyth 	peekc = IGN;
67074a4d8c2SCharles.Forsyth 	nhunk = 0;
67174a4d8c2SCharles.Forsyth 	for(i=0; i<NHASH; i++)
67274a4d8c2SCharles.Forsyth 		hash[i] = S;
67374a4d8c2SCharles.Forsyth 	for(i=0; itab[i].name; i++) {
67474a4d8c2SCharles.Forsyth 		s = slookup(itab[i].name);
67574a4d8c2SCharles.Forsyth 		s->type = itab[i].type;
67674a4d8c2SCharles.Forsyth 		s->value = itab[i].value;
67774a4d8c2SCharles.Forsyth 	}
67874a4d8c2SCharles.Forsyth 	ALLOCN(pathname, 0, 100);
67974a4d8c2SCharles.Forsyth 	if(mygetwd(pathname, 99) == 0) {
68074a4d8c2SCharles.Forsyth 		ALLOCN(pathname, 100, 900);
68174a4d8c2SCharles.Forsyth 		if(mygetwd(pathname, 999) == 0)
682*45a20ab7Sforsyth 			strcpy(pathname, "/?");
68374a4d8c2SCharles.Forsyth 	}
68474a4d8c2SCharles.Forsyth }
68574a4d8c2SCharles.Forsyth 
68674a4d8c2SCharles.Forsyth void
syminit(Sym * s)68774a4d8c2SCharles.Forsyth syminit(Sym *s)
68874a4d8c2SCharles.Forsyth {
68974a4d8c2SCharles.Forsyth 
69074a4d8c2SCharles.Forsyth 	s->type = LNAME;
69174a4d8c2SCharles.Forsyth 	s->value = 0;
69274a4d8c2SCharles.Forsyth }
69374a4d8c2SCharles.Forsyth 
69474a4d8c2SCharles.Forsyth void
cclean(void)69574a4d8c2SCharles.Forsyth cclean(void)
69674a4d8c2SCharles.Forsyth {
69774a4d8c2SCharles.Forsyth 
69874a4d8c2SCharles.Forsyth 	outcode(AEND, &nullgen, NREG, &nullgen);
69974a4d8c2SCharles.Forsyth 	Bflush(&obuf);
70074a4d8c2SCharles.Forsyth }
70174a4d8c2SCharles.Forsyth 
70274a4d8c2SCharles.Forsyth void
zname(char * n,int t,int s)70374a4d8c2SCharles.Forsyth zname(char *n, int t, int s)
70474a4d8c2SCharles.Forsyth {
70574a4d8c2SCharles.Forsyth 
70674a4d8c2SCharles.Forsyth 	Bputc(&obuf, ANAME);
707d67b7dadSforsyth 	Bputc(&obuf, ANAME>>8);
70874a4d8c2SCharles.Forsyth 	Bputc(&obuf, t);	/* type */
70974a4d8c2SCharles.Forsyth 	Bputc(&obuf, s);	/* sym */
71074a4d8c2SCharles.Forsyth 	while(*n) {
71174a4d8c2SCharles.Forsyth 		Bputc(&obuf, *n);
71274a4d8c2SCharles.Forsyth 		n++;
71374a4d8c2SCharles.Forsyth 	}
71474a4d8c2SCharles.Forsyth 	Bputc(&obuf, 0);
71574a4d8c2SCharles.Forsyth }
71674a4d8c2SCharles.Forsyth 
71774a4d8c2SCharles.Forsyth void
zaddr(Gen * a,int s)71874a4d8c2SCharles.Forsyth zaddr(Gen *a, int s)
71974a4d8c2SCharles.Forsyth {
72074a4d8c2SCharles.Forsyth 	long l;
72174a4d8c2SCharles.Forsyth 	int i;
72274a4d8c2SCharles.Forsyth 	char *n;
72374a4d8c2SCharles.Forsyth 	Ieee e;
72474a4d8c2SCharles.Forsyth 
72574a4d8c2SCharles.Forsyth 	Bputc(&obuf, a->type);
72674a4d8c2SCharles.Forsyth 	Bputc(&obuf, a->reg);
72774a4d8c2SCharles.Forsyth 	Bputc(&obuf, s);
72874a4d8c2SCharles.Forsyth 	Bputc(&obuf, a->name);
72974a4d8c2SCharles.Forsyth 	switch(a->type) {
73074a4d8c2SCharles.Forsyth 	default:
73174a4d8c2SCharles.Forsyth 		print("unknown type %d\n", a->type);
73274a4d8c2SCharles.Forsyth 		exits("arg");
73374a4d8c2SCharles.Forsyth 
73474a4d8c2SCharles.Forsyth 	case D_NONE:
73574a4d8c2SCharles.Forsyth 	case D_REG:
73674a4d8c2SCharles.Forsyth 	case D_FREG:
73774a4d8c2SCharles.Forsyth 	case D_CREG:
73874a4d8c2SCharles.Forsyth 	case D_FPSCR:
73974a4d8c2SCharles.Forsyth 	case D_MSR:
74074a4d8c2SCharles.Forsyth 	case D_SREG:
74174a4d8c2SCharles.Forsyth 	case D_OPT:
74274a4d8c2SCharles.Forsyth 		break;
74374a4d8c2SCharles.Forsyth 
7446e425a9dSCharles.Forsyth 	case D_DCR:
74574a4d8c2SCharles.Forsyth 	case D_SPR:
74674a4d8c2SCharles.Forsyth 	case D_OREG:
74774a4d8c2SCharles.Forsyth 	case D_CONST:
74874a4d8c2SCharles.Forsyth 	case D_BRANCH:
74974a4d8c2SCharles.Forsyth 		l = a->offset;
75074a4d8c2SCharles.Forsyth 		Bputc(&obuf, l);
75174a4d8c2SCharles.Forsyth 		Bputc(&obuf, l>>8);
75274a4d8c2SCharles.Forsyth 		Bputc(&obuf, l>>16);
75374a4d8c2SCharles.Forsyth 		Bputc(&obuf, l>>24);
75474a4d8c2SCharles.Forsyth 		break;
75574a4d8c2SCharles.Forsyth 
75674a4d8c2SCharles.Forsyth 	case D_SCONST:
75774a4d8c2SCharles.Forsyth 		n = a->sval;
75874a4d8c2SCharles.Forsyth 		for(i=0; i<NSNAME; i++) {
75974a4d8c2SCharles.Forsyth 			Bputc(&obuf, *n);
76074a4d8c2SCharles.Forsyth 			n++;
76174a4d8c2SCharles.Forsyth 		}
76274a4d8c2SCharles.Forsyth 		break;
76374a4d8c2SCharles.Forsyth 
76474a4d8c2SCharles.Forsyth 	case D_FCONST:
76574a4d8c2SCharles.Forsyth 		ieeedtod(&e, a->dval);
76674a4d8c2SCharles.Forsyth 		Bputc(&obuf, e.l);
76774a4d8c2SCharles.Forsyth 		Bputc(&obuf, e.l>>8);
76874a4d8c2SCharles.Forsyth 		Bputc(&obuf, e.l>>16);
76974a4d8c2SCharles.Forsyth 		Bputc(&obuf, e.l>>24);
77074a4d8c2SCharles.Forsyth 		Bputc(&obuf, e.h);
77174a4d8c2SCharles.Forsyth 		Bputc(&obuf, e.h>>8);
77274a4d8c2SCharles.Forsyth 		Bputc(&obuf, e.h>>16);
77374a4d8c2SCharles.Forsyth 		Bputc(&obuf, e.h>>24);
77474a4d8c2SCharles.Forsyth 		break;
77574a4d8c2SCharles.Forsyth 	}
77674a4d8c2SCharles.Forsyth }
77774a4d8c2SCharles.Forsyth 
77874a4d8c2SCharles.Forsyth int
outsim(Gen * g)77974a4d8c2SCharles.Forsyth outsim(Gen *g)
78074a4d8c2SCharles.Forsyth {
78174a4d8c2SCharles.Forsyth 	Sym *s;
78274a4d8c2SCharles.Forsyth 	int sno, t;
78374a4d8c2SCharles.Forsyth 
78474a4d8c2SCharles.Forsyth 	s = g->sym;
78574a4d8c2SCharles.Forsyth 	if(s == S)
78674a4d8c2SCharles.Forsyth 		return 0;
78774a4d8c2SCharles.Forsyth 	sno = s->sym;
78874a4d8c2SCharles.Forsyth 	if(sno < 0 || sno >= NSYM)
78974a4d8c2SCharles.Forsyth 		sno = 0;
79074a4d8c2SCharles.Forsyth 	t = g->name;
79174a4d8c2SCharles.Forsyth 	if(h[sno].type == t && h[sno].sym == s)
79274a4d8c2SCharles.Forsyth 		return sno;
79374a4d8c2SCharles.Forsyth 	zname(s->name, t, sym);
79474a4d8c2SCharles.Forsyth 	s->sym = sym;
79574a4d8c2SCharles.Forsyth 	h[sym].sym = s;
79674a4d8c2SCharles.Forsyth 	h[sym].type = t;
79774a4d8c2SCharles.Forsyth 	sno = sym;
79874a4d8c2SCharles.Forsyth 	sym++;
79974a4d8c2SCharles.Forsyth 	if(sym >= NSYM)
80074a4d8c2SCharles.Forsyth 		sym = 1;
80174a4d8c2SCharles.Forsyth 	return sno;
80274a4d8c2SCharles.Forsyth }
80374a4d8c2SCharles.Forsyth 
80474a4d8c2SCharles.Forsyth void
outcode(int a,Gen * g1,int reg,Gen * g2)80574a4d8c2SCharles.Forsyth outcode(int a, Gen *g1, int reg, Gen *g2)
80674a4d8c2SCharles.Forsyth {
80774a4d8c2SCharles.Forsyth 	int sf, st;
80874a4d8c2SCharles.Forsyth 
80974a4d8c2SCharles.Forsyth 	if(a != AGLOBL && a != ADATA)
81074a4d8c2SCharles.Forsyth 		pc++;
81174a4d8c2SCharles.Forsyth 	if(pass == 1)
81274a4d8c2SCharles.Forsyth 		return;
81374a4d8c2SCharles.Forsyth 	if(g1->xreg != NREG) {
81474a4d8c2SCharles.Forsyth 		if(reg != NREG || g2->xreg != NREG)
81574a4d8c2SCharles.Forsyth 			yyerror("bad addressing modes");
81674a4d8c2SCharles.Forsyth 		reg = g1->xreg;
81774a4d8c2SCharles.Forsyth 	} else
81874a4d8c2SCharles.Forsyth 	if(g2->xreg != NREG) {
81974a4d8c2SCharles.Forsyth 		if(reg != NREG)
82074a4d8c2SCharles.Forsyth 			yyerror("bad addressing modes");
82174a4d8c2SCharles.Forsyth 		reg = g2->xreg;
82274a4d8c2SCharles.Forsyth 	}
82374a4d8c2SCharles.Forsyth 	do {
82474a4d8c2SCharles.Forsyth 		sf = outsim(g1);
82574a4d8c2SCharles.Forsyth 		st = outsim(g2);
82674a4d8c2SCharles.Forsyth 	} while(sf != 0 && st == sf);
82774a4d8c2SCharles.Forsyth 	Bputc(&obuf, a);
828d67b7dadSforsyth 	Bputc(&obuf, a>>8);
82974a4d8c2SCharles.Forsyth 	Bputc(&obuf, reg|nosched);
83074a4d8c2SCharles.Forsyth 	Bputc(&obuf, lineno);
83174a4d8c2SCharles.Forsyth 	Bputc(&obuf, lineno>>8);
83274a4d8c2SCharles.Forsyth 	Bputc(&obuf, lineno>>16);
83374a4d8c2SCharles.Forsyth 	Bputc(&obuf, lineno>>24);
83474a4d8c2SCharles.Forsyth 	zaddr(g1, sf);
83574a4d8c2SCharles.Forsyth 	zaddr(g2, st);
83674a4d8c2SCharles.Forsyth }
83774a4d8c2SCharles.Forsyth 
83874a4d8c2SCharles.Forsyth void
outgcode(int a,Gen * g1,int reg,Gen * g2,Gen * g3)83974a4d8c2SCharles.Forsyth outgcode(int a, Gen *g1, int reg, Gen *g2, Gen *g3)
84074a4d8c2SCharles.Forsyth {
84174a4d8c2SCharles.Forsyth 	int s1, s2, s3, flag;
84274a4d8c2SCharles.Forsyth 
84374a4d8c2SCharles.Forsyth 	if(a != AGLOBL && a != ADATA)
84474a4d8c2SCharles.Forsyth 		pc++;
84574a4d8c2SCharles.Forsyth 	if(pass == 1)
84674a4d8c2SCharles.Forsyth 		return;
84774a4d8c2SCharles.Forsyth 	do {
84874a4d8c2SCharles.Forsyth 		s1 = outsim(g1);
84974a4d8c2SCharles.Forsyth 		s2 = outsim(g2);
85074a4d8c2SCharles.Forsyth 		s3 = outsim(g3);
85174a4d8c2SCharles.Forsyth 	} while(s1 && (s2 && s1 == s2 || s3 && s1 == s3) || s2 && (s3 && s2 == s3));
85274a4d8c2SCharles.Forsyth 	flag = 0;
85374a4d8c2SCharles.Forsyth 	if(g2->type != D_NONE)
85474a4d8c2SCharles.Forsyth 		flag = 0x40;	/* flags extra operand */
85574a4d8c2SCharles.Forsyth 	Bputc(&obuf, a);
856d67b7dadSforsyth 	Bputc(&obuf, a>>8);
85774a4d8c2SCharles.Forsyth 	Bputc(&obuf, reg | nosched | flag);
85874a4d8c2SCharles.Forsyth 	Bputc(&obuf, lineno);
85974a4d8c2SCharles.Forsyth 	Bputc(&obuf, lineno>>8);
86074a4d8c2SCharles.Forsyth 	Bputc(&obuf, lineno>>16);
86174a4d8c2SCharles.Forsyth 	Bputc(&obuf, lineno>>24);
86274a4d8c2SCharles.Forsyth 	zaddr(g1, s1);
86374a4d8c2SCharles.Forsyth 	if(flag)
86474a4d8c2SCharles.Forsyth 		zaddr(g2, s2);
86574a4d8c2SCharles.Forsyth 	zaddr(g3, s3);
86674a4d8c2SCharles.Forsyth }
86774a4d8c2SCharles.Forsyth 
86874a4d8c2SCharles.Forsyth void
outhist(void)86974a4d8c2SCharles.Forsyth outhist(void)
87074a4d8c2SCharles.Forsyth {
87174a4d8c2SCharles.Forsyth 	Gen g;
87274a4d8c2SCharles.Forsyth 	Hist *h;
87374a4d8c2SCharles.Forsyth 	char *p, *q, *op, c;
87474a4d8c2SCharles.Forsyth 	int n;
87574a4d8c2SCharles.Forsyth 
87674a4d8c2SCharles.Forsyth 	g = nullgen;
87774a4d8c2SCharles.Forsyth 	c = pathchar();
87874a4d8c2SCharles.Forsyth 	for(h = hist; h != H; h = h->link) {
87974a4d8c2SCharles.Forsyth 		p = h->name;
88074a4d8c2SCharles.Forsyth 		op = 0;
88174a4d8c2SCharles.Forsyth 		/* on windows skip drive specifier in pathname */
88274a4d8c2SCharles.Forsyth 		if(systemtype(Windows) && p && p[1] == ':'){
88374a4d8c2SCharles.Forsyth 			p += 2;
88474a4d8c2SCharles.Forsyth 			c = *p;
88574a4d8c2SCharles.Forsyth 		}
88674a4d8c2SCharles.Forsyth 		if(p && p[0] != c && h->offset == 0 && pathname){
88774a4d8c2SCharles.Forsyth 			/* on windows skip drive specifier in pathname */
88874a4d8c2SCharles.Forsyth 			if(systemtype(Windows) && pathname[1] == ':') {
88974a4d8c2SCharles.Forsyth 				op = p;
89074a4d8c2SCharles.Forsyth 				p = pathname+2;
89174a4d8c2SCharles.Forsyth 				c = *p;
89274a4d8c2SCharles.Forsyth 			} else if(pathname[0] == c){
89374a4d8c2SCharles.Forsyth 				op = p;
89474a4d8c2SCharles.Forsyth 				p = pathname;
89574a4d8c2SCharles.Forsyth 			}
89674a4d8c2SCharles.Forsyth 		}
89774a4d8c2SCharles.Forsyth 		while(p) {
89874a4d8c2SCharles.Forsyth 			q = strchr(p, c);
89974a4d8c2SCharles.Forsyth 			if(q) {
90074a4d8c2SCharles.Forsyth 				n = q-p;
90174a4d8c2SCharles.Forsyth 				if(n == 0){
90274a4d8c2SCharles.Forsyth 					n = 1;	/* leading "/" */
90374a4d8c2SCharles.Forsyth 					*p = '/';	/* don't emit "\" on windows */
90474a4d8c2SCharles.Forsyth 				}
90574a4d8c2SCharles.Forsyth 				q++;
90674a4d8c2SCharles.Forsyth 			} else {
90774a4d8c2SCharles.Forsyth 				n = strlen(p);
90874a4d8c2SCharles.Forsyth 				q = 0;
90974a4d8c2SCharles.Forsyth 			}
91074a4d8c2SCharles.Forsyth 			if(n) {
91174a4d8c2SCharles.Forsyth 				Bputc(&obuf, ANAME);
912d67b7dadSforsyth 				Bputc(&obuf, ANAME>>8);
91374a4d8c2SCharles.Forsyth 				Bputc(&obuf, D_FILE);	/* type */
91474a4d8c2SCharles.Forsyth 				Bputc(&obuf, 1);	/* sym */
91574a4d8c2SCharles.Forsyth 				Bputc(&obuf, '<');
91674a4d8c2SCharles.Forsyth 				Bwrite(&obuf, p, n);
91774a4d8c2SCharles.Forsyth 				Bputc(&obuf, 0);
91874a4d8c2SCharles.Forsyth 			}
91974a4d8c2SCharles.Forsyth 			p = q;
92074a4d8c2SCharles.Forsyth 			if(p == 0 && op) {
92174a4d8c2SCharles.Forsyth 				p = op;
92274a4d8c2SCharles.Forsyth 				op = 0;
92374a4d8c2SCharles.Forsyth 			}
92474a4d8c2SCharles.Forsyth 		}
92574a4d8c2SCharles.Forsyth 		g.offset = h->offset;
92674a4d8c2SCharles.Forsyth 
92774a4d8c2SCharles.Forsyth 		Bputc(&obuf, AHISTORY);
928d67b7dadSforsyth 		Bputc(&obuf, AHISTORY>>8);
92974a4d8c2SCharles.Forsyth 		Bputc(&obuf, 0);
93074a4d8c2SCharles.Forsyth 		Bputc(&obuf, h->line);
93174a4d8c2SCharles.Forsyth 		Bputc(&obuf, h->line>>8);
93274a4d8c2SCharles.Forsyth 		Bputc(&obuf, h->line>>16);
93374a4d8c2SCharles.Forsyth 		Bputc(&obuf, h->line>>24);
93474a4d8c2SCharles.Forsyth 		zaddr(&nullgen, 0);
93574a4d8c2SCharles.Forsyth 		zaddr(&g, 0);
93674a4d8c2SCharles.Forsyth 	}
93774a4d8c2SCharles.Forsyth }
93874a4d8c2SCharles.Forsyth 
93974a4d8c2SCharles.Forsyth #include "../cc/lexbody"
94074a4d8c2SCharles.Forsyth #include "../cc/macbody"
941