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