1375daca8SDavid du Colombier #define EXTERN
27dd7cddfSDavid du Colombier #include "a.h"
37dd7cddfSDavid du Colombier #include "y.tab.h"
4375daca8SDavid du Colombier #include <ctype.h>
57dd7cddfSDavid du Colombier
67dd7cddfSDavid du Colombier void
main(int argc,char * argv[])77dd7cddfSDavid du Colombier main(int argc, char *argv[])
87dd7cddfSDavid du Colombier {
97dd7cddfSDavid du Colombier char *p;
107dd7cddfSDavid du Colombier int nout, nproc, status, i, c;
117dd7cddfSDavid du Colombier
127dd7cddfSDavid du Colombier thechar = 'q';
137dd7cddfSDavid du Colombier thestring = "power";
147dd7cddfSDavid du Colombier memset(debug, 0, sizeof(debug));
157dd7cddfSDavid du Colombier cinit();
167dd7cddfSDavid du Colombier outfile = 0;
177dd7cddfSDavid du Colombier include[ninclude++] = ".";
187dd7cddfSDavid du Colombier ARGBEGIN {
197dd7cddfSDavid du Colombier default:
207dd7cddfSDavid du Colombier c = ARGC();
217dd7cddfSDavid du Colombier if(c >= 0 || c < sizeof(debug))
227dd7cddfSDavid du Colombier debug[c] = 1;
237dd7cddfSDavid du Colombier break;
247dd7cddfSDavid du Colombier
257dd7cddfSDavid du Colombier case 'o':
267dd7cddfSDavid du Colombier outfile = ARGF();
277dd7cddfSDavid du Colombier break;
287dd7cddfSDavid du Colombier
297dd7cddfSDavid du Colombier case 'D':
307dd7cddfSDavid du Colombier p = ARGF();
317dd7cddfSDavid du Colombier if(p)
327dd7cddfSDavid du Colombier Dlist[nDlist++] = p;
337dd7cddfSDavid du Colombier break;
347dd7cddfSDavid du Colombier
357dd7cddfSDavid du Colombier case 'I':
367dd7cddfSDavid du Colombier p = ARGF();
377dd7cddfSDavid du Colombier setinclude(p);
387dd7cddfSDavid du Colombier break;
397dd7cddfSDavid du Colombier } ARGEND
407dd7cddfSDavid du Colombier if(*argv == 0) {
417dd7cddfSDavid du Colombier print("usage: %ca [-options] file.s\n", thechar);
427dd7cddfSDavid du Colombier errorexit();
437dd7cddfSDavid du Colombier }
447dd7cddfSDavid du Colombier if(argc > 1 && systemtype(Windows)){
457dd7cddfSDavid du Colombier print("can't assemble multiple files on windows\n");
467dd7cddfSDavid du Colombier errorexit();
477dd7cddfSDavid du Colombier }
48375daca8SDavid du Colombier if(argc > 1) {
497dd7cddfSDavid du Colombier nproc = 1;
507dd7cddfSDavid du Colombier if(p = getenv("NPROC"))
51375daca8SDavid du Colombier nproc = atol(p);
527dd7cddfSDavid du Colombier c = 0;
537dd7cddfSDavid du Colombier nout = 0;
547dd7cddfSDavid du Colombier for(;;) {
557dd7cddfSDavid du Colombier while(nout < nproc && argc > 0) {
567dd7cddfSDavid du Colombier i = myfork();
577dd7cddfSDavid du Colombier if(i < 0) {
587dd7cddfSDavid du Colombier i = mywait(&status);
597dd7cddfSDavid du Colombier if(i < 0)
607dd7cddfSDavid du Colombier errorexit();
617dd7cddfSDavid du Colombier if(status)
627dd7cddfSDavid du Colombier c++;
637dd7cddfSDavid du Colombier nout--;
647dd7cddfSDavid du Colombier continue;
657dd7cddfSDavid du Colombier }
667dd7cddfSDavid du Colombier if(i == 0) {
677dd7cddfSDavid du Colombier print("%s:\n", *argv);
687dd7cddfSDavid du Colombier if(assemble(*argv))
697dd7cddfSDavid du Colombier errorexit();
707dd7cddfSDavid du Colombier exits(0);
717dd7cddfSDavid du Colombier }
727dd7cddfSDavid du Colombier nout++;
737dd7cddfSDavid du Colombier argc--;
747dd7cddfSDavid du Colombier argv++;
757dd7cddfSDavid du Colombier }
767dd7cddfSDavid du Colombier i = mywait(&status);
777dd7cddfSDavid du Colombier if(i < 0) {
787dd7cddfSDavid du Colombier if(c)
797dd7cddfSDavid du Colombier errorexit();
807dd7cddfSDavid du Colombier exits(0);
817dd7cddfSDavid du Colombier }
827dd7cddfSDavid du Colombier if(status)
837dd7cddfSDavid du Colombier c++;
847dd7cddfSDavid du Colombier nout--;
857dd7cddfSDavid du Colombier }
867dd7cddfSDavid du Colombier }
877dd7cddfSDavid du Colombier if(assemble(argv[0]))
887dd7cddfSDavid du Colombier errorexit();
897dd7cddfSDavid du Colombier exits(0);
907dd7cddfSDavid du Colombier }
917dd7cddfSDavid du Colombier
927dd7cddfSDavid du Colombier int
assemble(char * file)937dd7cddfSDavid du Colombier assemble(char *file)
947dd7cddfSDavid du Colombier {
957dd7cddfSDavid du Colombier char ofile[100], incfile[20], *p;
967dd7cddfSDavid du Colombier int i, of;
977dd7cddfSDavid du Colombier
987dd7cddfSDavid du Colombier strcpy(ofile, file);
99375daca8SDavid du Colombier if(p = strrchr(ofile, pathchar())) {
1007dd7cddfSDavid du Colombier include[0] = ofile;
1017dd7cddfSDavid du Colombier *p++ = 0;
1027dd7cddfSDavid du Colombier } else
1037dd7cddfSDavid du Colombier p = ofile;
1047dd7cddfSDavid du Colombier if(outfile == 0) {
1057dd7cddfSDavid du Colombier outfile = p;
106375daca8SDavid du Colombier if(p = strrchr(outfile, '.'))
1077dd7cddfSDavid du Colombier if(p[1] == 's' && p[2] == 0)
1087dd7cddfSDavid du Colombier p[0] = 0;
109375daca8SDavid du Colombier p = strrchr(outfile, 0);
1107dd7cddfSDavid du Colombier p[0] = '.';
1117dd7cddfSDavid du Colombier p[1] = thechar;
1127dd7cddfSDavid du Colombier p[2] = 0;
1137dd7cddfSDavid du Colombier }
1147dd7cddfSDavid du Colombier p = getenv("INCLUDE");
1157dd7cddfSDavid du Colombier if(p) {
1167dd7cddfSDavid du Colombier setinclude(p);
1177dd7cddfSDavid du Colombier } else {
1187dd7cddfSDavid du Colombier if(systemtype(Plan9)) {
1197dd7cddfSDavid du Colombier sprint(incfile,"/%s/include", thestring);
1207dd7cddfSDavid du Colombier setinclude(strdup(incfile));
1217dd7cddfSDavid du Colombier }
1227dd7cddfSDavid du Colombier }
1237dd7cddfSDavid du Colombier
1247dd7cddfSDavid du Colombier of = mycreat(outfile, 0664);
1257dd7cddfSDavid du Colombier if(of < 0) {
1267dd7cddfSDavid du Colombier yyerror("%ca: cannot create %s", thechar, outfile);
1277dd7cddfSDavid du Colombier errorexit();
1287dd7cddfSDavid du Colombier }
1297dd7cddfSDavid du Colombier Binit(&obuf, of, OWRITE);
1307dd7cddfSDavid du Colombier
1317dd7cddfSDavid du Colombier pass = 1;
132375daca8SDavid du Colombier nosched = 0;
1337dd7cddfSDavid du Colombier pinit(file);
1347dd7cddfSDavid du Colombier for(i=0; i<nDlist; i++)
1357dd7cddfSDavid du Colombier dodefine(Dlist[i]);
1367dd7cddfSDavid du Colombier yyparse();
1377dd7cddfSDavid du Colombier if(nerrors) {
1387dd7cddfSDavid du Colombier cclean();
1397dd7cddfSDavid du Colombier return nerrors;
1407dd7cddfSDavid du Colombier }
1417dd7cddfSDavid du Colombier
1427dd7cddfSDavid du Colombier pass = 2;
143375daca8SDavid du Colombier nosched = 0;
1447dd7cddfSDavid du Colombier outhist();
1457dd7cddfSDavid du Colombier pinit(file);
1467dd7cddfSDavid du Colombier for(i=0; i<nDlist; i++)
1477dd7cddfSDavid du Colombier dodefine(Dlist[i]);
1487dd7cddfSDavid du Colombier yyparse();
1497dd7cddfSDavid du Colombier cclean();
1507dd7cddfSDavid du Colombier return nerrors;
1517dd7cddfSDavid du Colombier }
1527dd7cddfSDavid du Colombier
1537dd7cddfSDavid du Colombier struct
1547dd7cddfSDavid du Colombier {
1557dd7cddfSDavid du Colombier char *name;
1567dd7cddfSDavid du Colombier ushort type;
1577dd7cddfSDavid du Colombier ushort value;
1587dd7cddfSDavid du Colombier } itab[] =
1597dd7cddfSDavid du Colombier {
1607dd7cddfSDavid du Colombier "SP", LSP, D_AUTO,
1617dd7cddfSDavid du Colombier "SB", LSB, D_EXTERN,
1627dd7cddfSDavid du Colombier "FP", LFP, D_PARAM,
1637dd7cddfSDavid du Colombier "PC", LPC, D_BRANCH,
1647dd7cddfSDavid du Colombier
1657dd7cddfSDavid du Colombier "LR", LLR, D_LR,
1667dd7cddfSDavid du Colombier "CTR", LCTR, D_CTR,
1677dd7cddfSDavid du Colombier
1687dd7cddfSDavid du Colombier "XER", LSPREG, D_XER,
1697dd7cddfSDavid du Colombier "MSR", LMSR, D_MSR,
1707dd7cddfSDavid du Colombier "FPSCR", LFPSCR, D_FPSCR,
1717dd7cddfSDavid du Colombier "SPR", LSPR, D_SPR,
172*6891d857SDavid du Colombier "DCR", LDCR, D_DCR,
1737dd7cddfSDavid du Colombier
1747dd7cddfSDavid du Colombier "SEG", LSEG, D_SREG,
1757dd7cddfSDavid du Colombier
1767dd7cddfSDavid du Colombier "CR", LCR, 0,
1777dd7cddfSDavid du Colombier "CR0", LCREG, 0,
1787dd7cddfSDavid du Colombier "CR1", LCREG, 1,
1797dd7cddfSDavid du Colombier "CR2", LCREG, 2,
1807dd7cddfSDavid du Colombier "CR3", LCREG, 3,
1817dd7cddfSDavid du Colombier "CR4", LCREG, 4,
1827dd7cddfSDavid du Colombier "CR5", LCREG, 5,
1837dd7cddfSDavid du Colombier "CR6", LCREG, 6,
1847dd7cddfSDavid du Colombier "CR7", LCREG, 7,
1857dd7cddfSDavid du Colombier
1867dd7cddfSDavid du Colombier "R", LR, 0,
1877dd7cddfSDavid du Colombier "R0", LREG, 0,
1887dd7cddfSDavid du Colombier "R1", LREG, 1,
1897dd7cddfSDavid du Colombier "R2", LREG, 2,
1907dd7cddfSDavid du Colombier "R3", LREG, 3,
1917dd7cddfSDavid du Colombier "R4", LREG, 4,
1927dd7cddfSDavid du Colombier "R5", LREG, 5,
1937dd7cddfSDavid du Colombier "R6", LREG, 6,
1947dd7cddfSDavid du Colombier "R7", LREG, 7,
1957dd7cddfSDavid du Colombier "R8", LREG, 8,
1967dd7cddfSDavid du Colombier "R9", LREG, 9,
1977dd7cddfSDavid du Colombier "R10", LREG, 10,
1987dd7cddfSDavid du Colombier "R11", LREG, 11,
1997dd7cddfSDavid du Colombier "R12", LREG, 12,
2007dd7cddfSDavid du Colombier "R13", LREG, 13,
2017dd7cddfSDavid du Colombier "R14", LREG, 14,
2027dd7cddfSDavid du Colombier "R15", LREG, 15,
2037dd7cddfSDavid du Colombier "R16", LREG, 16,
2047dd7cddfSDavid du Colombier "R17", LREG, 17,
2057dd7cddfSDavid du Colombier "R18", LREG, 18,
2067dd7cddfSDavid du Colombier "R19", LREG, 19,
2077dd7cddfSDavid du Colombier "R20", LREG, 20,
2087dd7cddfSDavid du Colombier "R21", LREG, 21,
2097dd7cddfSDavid du Colombier "R22", LREG, 22,
2107dd7cddfSDavid du Colombier "R23", LREG, 23,
2117dd7cddfSDavid du Colombier "R24", LREG, 24,
2127dd7cddfSDavid du Colombier "R25", LREG, 25,
2137dd7cddfSDavid du Colombier "R26", LREG, 26,
2147dd7cddfSDavid du Colombier "R27", LREG, 27,
2157dd7cddfSDavid du Colombier "R28", LREG, 28,
2167dd7cddfSDavid du Colombier "R29", LREG, 29,
2177dd7cddfSDavid du Colombier "R30", LREG, 30,
2187dd7cddfSDavid du Colombier "R31", LREG, 31,
2197dd7cddfSDavid du Colombier
2207dd7cddfSDavid du Colombier "F", LF, 0,
2217dd7cddfSDavid du Colombier "F0", LFREG, 0,
2227dd7cddfSDavid du Colombier "F1", LFREG, 1,
2237dd7cddfSDavid du Colombier "F2", LFREG, 2,
2247dd7cddfSDavid du Colombier "F3", LFREG, 3,
2257dd7cddfSDavid du Colombier "F4", LFREG, 4,
2267dd7cddfSDavid du Colombier "F5", LFREG, 5,
2277dd7cddfSDavid du Colombier "F6", LFREG, 6,
2287dd7cddfSDavid du Colombier "F7", LFREG, 7,
2297dd7cddfSDavid du Colombier "F8", LFREG, 8,
2307dd7cddfSDavid du Colombier "F9", LFREG, 9,
2317dd7cddfSDavid du Colombier "F10", LFREG, 10,
2327dd7cddfSDavid du Colombier "F11", LFREG, 11,
2337dd7cddfSDavid du Colombier "F12", LFREG, 12,
2347dd7cddfSDavid du Colombier "F13", LFREG, 13,
2357dd7cddfSDavid du Colombier "F14", LFREG, 14,
2367dd7cddfSDavid du Colombier "F15", LFREG, 15,
2377dd7cddfSDavid du Colombier "F16", LFREG, 16,
2387dd7cddfSDavid du Colombier "F17", LFREG, 17,
2397dd7cddfSDavid du Colombier "F18", LFREG, 18,
2407dd7cddfSDavid du Colombier "F19", LFREG, 19,
2417dd7cddfSDavid du Colombier "F20", LFREG, 20,
2427dd7cddfSDavid du Colombier "F21", LFREG, 21,
2437dd7cddfSDavid du Colombier "F22", LFREG, 22,
2447dd7cddfSDavid du Colombier "F23", LFREG, 23,
2457dd7cddfSDavid du Colombier "F24", LFREG, 24,
2467dd7cddfSDavid du Colombier "F25", LFREG, 25,
2477dd7cddfSDavid du Colombier "F26", LFREG, 26,
2487dd7cddfSDavid du Colombier "F27", LFREG, 27,
2497dd7cddfSDavid du Colombier "F28", LFREG, 28,
2507dd7cddfSDavid du Colombier "F29", LFREG, 29,
2517dd7cddfSDavid du Colombier "F30", LFREG, 30,
2527dd7cddfSDavid du Colombier "F31", LFREG, 31,
2537dd7cddfSDavid du Colombier
2547dd7cddfSDavid du Colombier "CREQV", LCROP, ACREQV,
2557dd7cddfSDavid du Colombier "CRXOR", LCROP, ACRXOR,
2567dd7cddfSDavid du Colombier "CRAND", LCROP, ACRAND,
2577dd7cddfSDavid du Colombier "CROR", LCROP, ACROR,
2587dd7cddfSDavid du Colombier "CRANDN", LCROP, ACRANDN,
2597dd7cddfSDavid du Colombier "CRORN", LCROP, ACRORN,
2607dd7cddfSDavid du Colombier "CRNAND", LCROP, ACRNAND,
2617dd7cddfSDavid du Colombier "CRNOR", LCROP, ACRNOR,
2627dd7cddfSDavid du Colombier
2637dd7cddfSDavid du Colombier "ADD", LADDW, AADD,
2647dd7cddfSDavid du Colombier "ADDV", LADDW, AADDV,
2657dd7cddfSDavid du Colombier "ADDCC", LADDW, AADDCC,
2667dd7cddfSDavid du Colombier "ADDVCC", LADDW, AADDVCC,
2677dd7cddfSDavid du Colombier "ADDC", LADDW, AADDC,
2687dd7cddfSDavid du Colombier "ADDCV", LADDW, AADDCV,
2697dd7cddfSDavid du Colombier "ADDCCC", LADDW, AADDCCC,
2707dd7cddfSDavid du Colombier "ADDCVCC", LADDW, AADDCVCC,
2717dd7cddfSDavid du Colombier "ADDE", LLOGW, AADDE,
2727dd7cddfSDavid du Colombier "ADDEV", LLOGW, AADDEV,
2737dd7cddfSDavid du Colombier "ADDECC", LLOGW, AADDECC,
2747dd7cddfSDavid du Colombier "ADDEVCC", LLOGW, AADDEVCC,
2757dd7cddfSDavid du Colombier
2767dd7cddfSDavid du Colombier "ADDME", LABS, AADDME,
2777dd7cddfSDavid du Colombier "ADDMEV", LABS, AADDMEV,
2787dd7cddfSDavid du Colombier "ADDMECC", LABS, AADDMECC,
2797dd7cddfSDavid du Colombier "ADDMEVCC", LABS, AADDMEVCC,
2807dd7cddfSDavid du Colombier "ADDZE", LABS, AADDZE,
2817dd7cddfSDavid du Colombier "ADDZEV", LABS, AADDZEV,
2827dd7cddfSDavid du Colombier "ADDZECC", LABS, AADDZECC,
2837dd7cddfSDavid du Colombier "ADDZEVCC", LABS, AADDZEVCC,
2847dd7cddfSDavid du Colombier
2857dd7cddfSDavid du Colombier "SUB", LADDW, ASUB,
2867dd7cddfSDavid du Colombier "SUBV", LADDW, ASUBV,
2877dd7cddfSDavid du Colombier "SUBCC", LADDW, ASUBCC,
2887dd7cddfSDavid du Colombier "SUBVCC", LADDW, ASUBVCC,
2897dd7cddfSDavid du Colombier "SUBE", LLOGW, ASUBE,
2907dd7cddfSDavid du Colombier "SUBECC", LLOGW, ASUBECC,
2917dd7cddfSDavid du Colombier "SUBEV", LLOGW, ASUBEV,
2927dd7cddfSDavid du Colombier "SUBEVCC", LLOGW, ASUBEVCC,
2937dd7cddfSDavid du Colombier "SUBC", LADDW, ASUBC,
2947dd7cddfSDavid du Colombier "SUBCCC", LADDW, ASUBCCC,
2957dd7cddfSDavid du Colombier "SUBCV", LADDW, ASUBCV,
2967dd7cddfSDavid du Colombier "SUBCVCC", LADDW, ASUBCVCC,
2977dd7cddfSDavid du Colombier
2987dd7cddfSDavid du Colombier "SUBME", LABS, ASUBME,
2997dd7cddfSDavid du Colombier "SUBMEV", LABS, ASUBMEV,
3007dd7cddfSDavid du Colombier "SUBMECC", LABS, ASUBMECC,
3017dd7cddfSDavid du Colombier "SUBMEVCC", LABS, ASUBMEVCC,
3027dd7cddfSDavid du Colombier "SUBZE", LABS, ASUBZE,
3037dd7cddfSDavid du Colombier "SUBZEV", LABS, ASUBZEV,
3047dd7cddfSDavid du Colombier "SUBZECC", LABS, ASUBZECC,
3057dd7cddfSDavid du Colombier "SUBZEVCC", LABS, ASUBZEVCC,
3067dd7cddfSDavid du Colombier
3077dd7cddfSDavid du Colombier "AND", LADDW, AAND,
3087dd7cddfSDavid du Colombier "ANDCC", LADDW, AANDCC, /* includes andil & andiu */
3097dd7cddfSDavid du Colombier "ANDN", LLOGW, AANDN,
3107dd7cddfSDavid du Colombier "ANDNCC", LLOGW, AANDNCC,
3117dd7cddfSDavid du Colombier "EQV", LLOGW, AEQV,
3127dd7cddfSDavid du Colombier "EQVCC", LLOGW, AEQVCC,
3137dd7cddfSDavid du Colombier "NAND", LLOGW, ANAND,
3147dd7cddfSDavid du Colombier "NANDCC", LLOGW, ANANDCC,
3157dd7cddfSDavid du Colombier "NOR", LLOGW, ANOR,
3167dd7cddfSDavid du Colombier "NORCC", LLOGW, ANORCC,
3177dd7cddfSDavid du Colombier "OR", LADDW, AOR, /* includes oril & oriu */
3187dd7cddfSDavid du Colombier "ORCC", LADDW, AORCC,
3197dd7cddfSDavid du Colombier "ORN", LLOGW, AORN,
3207dd7cddfSDavid du Colombier "ORNCC", LLOGW, AORNCC,
3217dd7cddfSDavid du Colombier "XOR", LADDW, AXOR, /* includes xoril & xoriu */
3227dd7cddfSDavid du Colombier "XORCC", LLOGW, AXORCC,
3237dd7cddfSDavid du Colombier
3247dd7cddfSDavid du Colombier "EXTSB", LABS, AEXTSB,
3257dd7cddfSDavid du Colombier "EXTSBCC", LABS, AEXTSBCC,
3267dd7cddfSDavid du Colombier "EXTSH", LABS, AEXTSH,
3277dd7cddfSDavid du Colombier "EXTSHCC", LABS, AEXTSHCC,
3287dd7cddfSDavid du Colombier
3297dd7cddfSDavid du Colombier "CNTLZW", LABS, ACNTLZW,
3307dd7cddfSDavid du Colombier "CNTLZWCC", LABS, ACNTLZWCC,
3317dd7cddfSDavid du Colombier
3327dd7cddfSDavid du Colombier "RLWMI", LRLWM, ARLWMI,
3337dd7cddfSDavid du Colombier "RLWMICC", LRLWM, ARLWMICC,
3347dd7cddfSDavid du Colombier "RLWNM", LRLWM, ARLWNM,
3357dd7cddfSDavid du Colombier "RLWNMCC", LRLWM, ARLWNMCC,
3367dd7cddfSDavid du Colombier
33780ee5cbfSDavid du Colombier "SLW", LSHW, ASLW,
33880ee5cbfSDavid du Colombier "SLWCC", LSHW, ASLWCC,
33980ee5cbfSDavid du Colombier "SRW", LSHW, ASRW,
34080ee5cbfSDavid du Colombier "SRWCC", LSHW, ASRWCC,
34180ee5cbfSDavid du Colombier "SRAW", LSHW, ASRAW,
34280ee5cbfSDavid du Colombier "SRAWCC", LSHW, ASRAWCC,
3437dd7cddfSDavid du Colombier
3447dd7cddfSDavid du Colombier "BR", LBRA, ABR,
3457dd7cddfSDavid du Colombier "BC", LBRA, ABC,
3467dd7cddfSDavid du Colombier "BCL", LBRA, ABC,
3477dd7cddfSDavid du Colombier "BL", LBRA, ABL,
3487dd7cddfSDavid du Colombier "BEQ", LBRA, ABEQ,
3497dd7cddfSDavid du Colombier "BNE", LBRA, ABNE,
3507dd7cddfSDavid du Colombier "BGT", LBRA, ABGT,
3517dd7cddfSDavid du Colombier "BGE", LBRA, ABGE,
3527dd7cddfSDavid du Colombier "BLT", LBRA, ABLT,
3537dd7cddfSDavid du Colombier "BLE", LBRA, ABLE,
3547dd7cddfSDavid du Colombier "BVC", LBRA, ABVC,
3557dd7cddfSDavid du Colombier "BVS", LBRA, ABVS,
3567dd7cddfSDavid du Colombier
3577dd7cddfSDavid du Colombier "CMP", LCMP, ACMP,
3587dd7cddfSDavid du Colombier "CMPU", LCMP, ACMPU,
3597dd7cddfSDavid du Colombier
3607dd7cddfSDavid du Colombier "DIVW", LLOGW, ADIVW,
3617dd7cddfSDavid du Colombier "DIVWV", LLOGW, ADIVWV,
3627dd7cddfSDavid du Colombier "DIVWCC", LLOGW, ADIVWCC,
3637dd7cddfSDavid du Colombier "DIVWVCC", LLOGW, ADIVWVCC,
3647dd7cddfSDavid du Colombier "DIVWU", LLOGW, ADIVWU,
3657dd7cddfSDavid du Colombier "DIVWUV", LLOGW, ADIVWUV,
3667dd7cddfSDavid du Colombier "DIVWUCC", LLOGW, ADIVWUCC,
3677dd7cddfSDavid du Colombier "DIVWUVCC", LLOGW, ADIVWUVCC,
3687dd7cddfSDavid du Colombier
3697dd7cddfSDavid du Colombier "FABS", LFCONV, AFABS,
3707dd7cddfSDavid du Colombier "FABSCC", LFCONV, AFABSCC,
3717dd7cddfSDavid du Colombier "FNEG", LFCONV, AFNEG,
3727dd7cddfSDavid du Colombier "FNEGCC", LFCONV, AFNEGCC,
3737dd7cddfSDavid du Colombier "FNABS", LFCONV, AFNABS,
3747dd7cddfSDavid du Colombier "FNABSCC", LFCONV, AFNABSCC,
3757dd7cddfSDavid du Colombier
3767dd7cddfSDavid du Colombier "FADD", LFADD, AFADD,
3777dd7cddfSDavid du Colombier "FADDCC", LFADD, AFADDCC,
3787dd7cddfSDavid du Colombier "FSUB", LFADD, AFSUB,
3797dd7cddfSDavid du Colombier "FSUBCC", LFADD, AFSUBCC,
3807dd7cddfSDavid du Colombier "FMUL", LFADD, AFMUL,
3817dd7cddfSDavid du Colombier "FMULCC", LFADD, AFMULCC,
3827dd7cddfSDavid du Colombier "FDIV", LFADD, AFDIV,
3837dd7cddfSDavid du Colombier "FDIVCC", LFADD, AFDIVCC,
3847dd7cddfSDavid du Colombier "FRSP", LFCONV, AFRSP,
3857dd7cddfSDavid du Colombier "FRSPCC", LFCONV, AFRSPCC,
3867dd7cddfSDavid du Colombier
3877dd7cddfSDavid du Colombier "FMADD", LFMA, AFMADD,
3887dd7cddfSDavid du Colombier "FMADDCC", LFMA, AFMADDCC,
3897dd7cddfSDavid du Colombier "FMSUB", LFMA, AFMSUB,
3907dd7cddfSDavid du Colombier "FMSUBCC", LFMA, AFMSUBCC,
3917dd7cddfSDavid du Colombier "FNMADD", LFMA, AFNMADD,
3927dd7cddfSDavid du Colombier "FNMADDCC", LFMA, AFNMADDCC,
3937dd7cddfSDavid du Colombier "FNMSUB", LFMA, AFNMSUB,
3947dd7cddfSDavid du Colombier "FNMSUBCC", LFMA, AFNMSUBCC,
3957dd7cddfSDavid du Colombier "FMADDS", LFMA, AFMADDS,
3967dd7cddfSDavid du Colombier "FMADDSCC", LFMA, AFMADDSCC,
3977dd7cddfSDavid du Colombier "FMSUBS", LFMA, AFMSUBS,
3987dd7cddfSDavid du Colombier "FMSUBSCC", LFMA, AFMSUBSCC,
3997dd7cddfSDavid du Colombier "FNMADDS", LFMA, AFNMADDS,
4007dd7cddfSDavid du Colombier "FNMADDSCC", LFMA, AFNMADDSCC,
4017dd7cddfSDavid du Colombier "FNMSUBS", LFMA, AFNMSUBS,
4027dd7cddfSDavid du Colombier "FNMSUBSCC", LFMA, AFNMSUBSCC,
4037dd7cddfSDavid du Colombier
4047dd7cddfSDavid du Colombier "FCMPU", LFCMP, AFCMPU,
4057dd7cddfSDavid du Colombier "FCMPO", LFCMP, AFCMPO,
4067dd7cddfSDavid du Colombier "MTFSB0", LMTFSB, AMTFSB0,
4077dd7cddfSDavid du Colombier "MTFSB1", LMTFSB, AMTFSB1,
4087dd7cddfSDavid du Colombier
4097dd7cddfSDavid du Colombier "FMOVD", LFMOV, AFMOVD,
4107dd7cddfSDavid du Colombier "FMOVS", LFMOV, AFMOVS,
4117dd7cddfSDavid du Colombier "FMOVDCC", LFCONV, AFMOVDCC, /* fmr. */
4127dd7cddfSDavid du Colombier
4137dd7cddfSDavid du Colombier "GLOBL", LTEXT, AGLOBL,
4147dd7cddfSDavid du Colombier
4157dd7cddfSDavid du Colombier "MOVB", LMOVB, AMOVB,
4167dd7cddfSDavid du Colombier "MOVBZ", LMOVB, AMOVBZ,
4177dd7cddfSDavid du Colombier "MOVBU", LMOVB, AMOVBU,
4187dd7cddfSDavid du Colombier "MOVBZU", LMOVB, AMOVBZU,
4197dd7cddfSDavid du Colombier "MOVH", LMOVB, AMOVH,
4207dd7cddfSDavid du Colombier "MOVHZ", LMOVB, AMOVHZ,
4217dd7cddfSDavid du Colombier "MOVHU", LMOVB, AMOVHU,
4227dd7cddfSDavid du Colombier "MOVHZU", LMOVB, AMOVHZU,
4237dd7cddfSDavid du Colombier "MOVHBR", LXMV, AMOVHBR,
4247dd7cddfSDavid du Colombier "MOVWBR", LXMV, AMOVWBR,
4257dd7cddfSDavid du Colombier "MOVW", LMOVW, AMOVW,
4267dd7cddfSDavid du Colombier "MOVWU", LMOVW, AMOVWU,
4277dd7cddfSDavid du Colombier "MOVMW", LMOVMW, AMOVMW,
4287dd7cddfSDavid du Colombier "MOVFL", LMOVW, AMOVFL,
4297dd7cddfSDavid du Colombier
4307dd7cddfSDavid du Colombier "MULLW", LADDW, AMULLW, /* includes multiply immediate 10-139 */
4317dd7cddfSDavid du Colombier "MULLWV", LLOGW, AMULLWV,
4327dd7cddfSDavid du Colombier "MULLWCC", LLOGW, AMULLWCC,
4337dd7cddfSDavid du Colombier "MULLWVCC", LLOGW, AMULLWVCC,
4347dd7cddfSDavid du Colombier
4357dd7cddfSDavid du Colombier "MULHW", LLOGW, AMULHW,
4367dd7cddfSDavid du Colombier "MULHWCC", LLOGW, AMULHWCC,
4377dd7cddfSDavid du Colombier "MULHWU", LLOGW, AMULHWU,
4387dd7cddfSDavid du Colombier "MULHWUCC", LLOGW, AMULHWUCC,
4397dd7cddfSDavid du Colombier
4407dd7cddfSDavid du Colombier "NEG", LABS, ANEG,
4417dd7cddfSDavid du Colombier "NEGV", LABS, ANEGV,
4427dd7cddfSDavid du Colombier "NEGCC", LABS, ANEGCC,
4437dd7cddfSDavid du Colombier "NEGVCC", LABS, ANEGVCC,
4447dd7cddfSDavid du Colombier
4457dd7cddfSDavid du Colombier "NOP", LNOP, ANOP, /* ori 0,0,0 */
4467dd7cddfSDavid du Colombier "SYSCALL", LNOP, ASYSCALL,
4477dd7cddfSDavid du Colombier
4487dd7cddfSDavid du Colombier "RETURN", LRETRN, ARETURN,
4497dd7cddfSDavid du Colombier "RFI", LRETRN, ARFI,
450375daca8SDavid du Colombier "RFCI", LRETRN, ARFCI,
4517dd7cddfSDavid du Colombier
4527dd7cddfSDavid du Colombier "DATA", LDATA, ADATA,
4537dd7cddfSDavid du Colombier "END", LEND, AEND,
4547dd7cddfSDavid du Colombier "TEXT", LTEXT, ATEXT,
4557dd7cddfSDavid du Colombier
456375daca8SDavid du Colombier /* IBM powerpc embedded */
457375daca8SDavid du Colombier "MACCHW", LMA, AMACCHW,
458375daca8SDavid du Colombier "MACCHWCC", LMA, AMACCHWCC,
459375daca8SDavid du Colombier "MACCHWS", LMA, AMACCHWS,
460375daca8SDavid du Colombier "MACCHWSCC", LMA, AMACCHWSCC,
461375daca8SDavid du Colombier "MACCHWSU", LMA, AMACCHWSU,
462375daca8SDavid du Colombier "MACCHWSUCC", LMA, AMACCHWSUCC,
463375daca8SDavid du Colombier "MACCHWSUV", LMA, AMACCHWSUV,
464375daca8SDavid du Colombier "MACCHWSUVCC", LMA, AMACCHWSUVCC,
465375daca8SDavid du Colombier "MACCHWSV", LMA, AMACCHWSV,
466375daca8SDavid du Colombier "MACCHWSVCC", LMA, AMACCHWSVCC,
467375daca8SDavid du Colombier "MACCHWU", LMA, AMACCHWU,
468375daca8SDavid du Colombier "MACCHWUCC", LMA, AMACCHWUCC,
469375daca8SDavid du Colombier "MACCHWUV", LMA, AMACCHWUV,
470375daca8SDavid du Colombier "MACCHWUVCC", LMA, AMACCHWUVCC,
471375daca8SDavid du Colombier "MACCHWV", LMA, AMACCHWV,
472375daca8SDavid du Colombier "MACCHWVCC", LMA, AMACCHWVCC,
473375daca8SDavid du Colombier "MACHHW", LMA, AMACHHW,
474375daca8SDavid du Colombier "MACHHWCC", LMA, AMACHHWCC,
475375daca8SDavid du Colombier "MACHHWS", LMA, AMACHHWS,
476375daca8SDavid du Colombier "MACHHWSCC", LMA, AMACHHWSCC,
477375daca8SDavid du Colombier "MACHHWSU", LMA, AMACHHWSU,
478375daca8SDavid du Colombier "MACHHWSUCC", LMA, AMACHHWSUCC,
479375daca8SDavid du Colombier "MACHHWSUV", LMA, AMACHHWSUV,
480375daca8SDavid du Colombier "MACHHWSUVCC", LMA, AMACHHWSUVCC,
481375daca8SDavid du Colombier "MACHHWSV", LMA, AMACHHWSV,
482375daca8SDavid du Colombier "MACHHWSVCC", LMA, AMACHHWSVCC,
483375daca8SDavid du Colombier "MACHHWU", LMA, AMACHHWU,
484375daca8SDavid du Colombier "MACHHWUCC", LMA, AMACHHWUCC,
485375daca8SDavid du Colombier "MACHHWUV", LMA, AMACHHWUV,
486375daca8SDavid du Colombier "MACHHWUVCC", LMA, AMACHHWUVCC,
487375daca8SDavid du Colombier "MACHHWV", LMA, AMACHHWV,
488375daca8SDavid du Colombier "MACHHWVCC", LMA, AMACHHWVCC,
489375daca8SDavid du Colombier "MACLHW", LMA, AMACLHW,
490375daca8SDavid du Colombier "MACLHWCC", LMA, AMACLHWCC,
491375daca8SDavid du Colombier "MACLHWS", LMA, AMACLHWS,
492375daca8SDavid du Colombier "MACLHWSCC", LMA, AMACLHWSCC,
493375daca8SDavid du Colombier "MACLHWSU", LMA, AMACLHWSU,
494375daca8SDavid du Colombier "MACLHWSUCC", LMA, AMACLHWSUCC,
495375daca8SDavid du Colombier "MACLHWSUV", LMA, AMACLHWSUV,
496375daca8SDavid du Colombier "MACLHWSUVCC", LMA, AMACLHWSUVCC,
497375daca8SDavid du Colombier "MACLHWSV", LMA, AMACLHWSV,
498375daca8SDavid du Colombier "MACLHWSVCC", LMA, AMACLHWSVCC,
499375daca8SDavid du Colombier "MACLHWU", LMA, AMACLHWU,
500375daca8SDavid du Colombier "MACLHWUCC", LMA, AMACLHWUCC,
501375daca8SDavid du Colombier "MACLHWUV", LMA, AMACLHWUV,
502375daca8SDavid du Colombier "MACLHWUVCC", LMA, AMACLHWUVCC,
503375daca8SDavid du Colombier "MACLHWV", LMA, AMACLHWV,
504375daca8SDavid du Colombier "MACLHWVCC", LMA, AMACLHWVCC,
505375daca8SDavid du Colombier "MULCHW", LLOGW, AMULCHW,
506375daca8SDavid du Colombier "MULCHWCC", LLOGW, AMULCHWCC,
507375daca8SDavid du Colombier "MULCHWU", LLOGW, AMULCHWU,
508375daca8SDavid du Colombier "MULCHWUCC", LLOGW, AMULCHWUCC,
509375daca8SDavid du Colombier "MULHHW", LLOGW, AMULHHW,
510375daca8SDavid du Colombier "MULHHWCC", LLOGW, AMULHHWCC,
511375daca8SDavid du Colombier "MULHHWU", LLOGW, AMULHHWU,
512375daca8SDavid du Colombier "MULHHWUCC", LLOGW, AMULHHWUCC,
513375daca8SDavid du Colombier "MULLHW", LLOGW, AMULLHW,
514375daca8SDavid du Colombier "MULLHWCC", LLOGW, AMULLHWCC,
515375daca8SDavid du Colombier "MULLHWU", LLOGW, AMULLHWU,
516375daca8SDavid du Colombier "MULLHWUCC", LLOGW, AMULLHWUCC,
517375daca8SDavid du Colombier "NMACCHW", LMA, ANMACCHW,
518375daca8SDavid du Colombier "NMACCHWCC", LMA, ANMACCHWCC,
519375daca8SDavid du Colombier "NMACCHWS", LMA, ANMACCHWS,
520375daca8SDavid du Colombier "NMACCHWSCC", LMA, ANMACCHWSCC,
521375daca8SDavid du Colombier "NMACCHWSV", LMA, ANMACCHWSV,
522375daca8SDavid du Colombier "NMACCHWSVCC", LMA, ANMACCHWSVCC,
523375daca8SDavid du Colombier "NMACCHWV", LMA, ANMACCHWV,
524375daca8SDavid du Colombier "NMACCHWVCC", LMA, ANMACCHWVCC,
525375daca8SDavid du Colombier "NMACHHW", LMA, ANMACHHW,
526375daca8SDavid du Colombier "NMACHHWCC", LMA, ANMACHHWCC,
527375daca8SDavid du Colombier "NMACHHWS", LMA, ANMACHHWS,
528375daca8SDavid du Colombier "NMACHHWSCC", LMA, ANMACHHWSCC,
529375daca8SDavid du Colombier "NMACHHWSV", LMA, ANMACHHWSV,
530375daca8SDavid du Colombier "NMACHHWSVCC", LMA, ANMACHHWSVCC,
531375daca8SDavid du Colombier "NMACHHWV", LMA, ANMACHHWV,
532375daca8SDavid du Colombier "NMACHHWVCC", LMA, ANMACHHWVCC,
533375daca8SDavid du Colombier "NMACLHW", LMA, ANMACLHW,
534375daca8SDavid du Colombier "NMACLHWCC", LMA, ANMACLHWCC,
535375daca8SDavid du Colombier "NMACLHWS", LMA, ANMACLHWS,
536375daca8SDavid du Colombier "NMACLHWSCC", LMA, ANMACLHWSCC,
537375daca8SDavid du Colombier "NMACLHWSV", LMA, ANMACLHWSV,
538375daca8SDavid du Colombier "NMACLHWSVCC", LMA, ANMACLHWSVCC,
539375daca8SDavid du Colombier "NMACLHWV", LMA, ANMACLHWV,
540375daca8SDavid du Colombier "NMACLHWVCC", LMA, ANMACLHWVCC,
541375daca8SDavid du Colombier
542*6891d857SDavid du Colombier /* optional on 32-bit */
543*6891d857SDavid du Colombier "FRES", LFCONV, AFRES,
544*6891d857SDavid du Colombier "FRESCC", LFCONV, AFRESCC,
545*6891d857SDavid du Colombier "FRSQRTE", LFCONV, AFRSQRTE,
546*6891d857SDavid du Colombier "FRSQRTECC", LFCONV, AFRSQRTECC,
547*6891d857SDavid du Colombier "FSEL", LFMA, AFSEL,
548*6891d857SDavid du Colombier "FSELCC", LFMA, AFSELCC,
549*6891d857SDavid du Colombier "FSQRT", LFCONV, AFSQRT,
550*6891d857SDavid du Colombier "FSQRTCC", LFCONV, AFSQRTCC,
551*6891d857SDavid du Colombier "FSQRTS", LFCONV, AFSQRTS,
552*6891d857SDavid du Colombier "FSQRTSCC", LFCONV, AFSQRTSCC,
553*6891d857SDavid du Colombier
554*6891d857SDavid du Colombier /* parallel, cross, and secondary (fp2) */
555*6891d857SDavid du Colombier "FPSEL", LFMA, AFPSEL,
556*6891d857SDavid du Colombier "FPMUL", LFADD, AFPMUL,
557*6891d857SDavid du Colombier "FXMUL", LFADD, AFXMUL,
558*6891d857SDavid du Colombier "FXPMUL", LFADD, AFXPMUL,
559*6891d857SDavid du Colombier "FXSMUL", LFADD, AFXSMUL,
560*6891d857SDavid du Colombier "FPADD", LFADD, AFPADD,
561*6891d857SDavid du Colombier "FPSUB", LFADD, AFPSUB,
562*6891d857SDavid du Colombier "FPRE", LFCONV, AFPRE,
563*6891d857SDavid du Colombier "FPRSQRTE", LFCONV, AFPRSQRTE,
564*6891d857SDavid du Colombier "FPMADD", LFMA, AFPMADD,
565*6891d857SDavid du Colombier "FXMADD", LFMA, AFXMADD,
566*6891d857SDavid du Colombier "FXCPMADD", LFMA, AFXCPMADD,
567*6891d857SDavid du Colombier "FXCSMADD", LFMA, AFXCSMADD,
568*6891d857SDavid du Colombier "FPNMADD", LFMA, AFPNMADD,
569*6891d857SDavid du Colombier "FXNMADD", LFMA, AFXNMADD,
570*6891d857SDavid du Colombier "FXCPNMADD", LFMA, AFXCPNMADD,
571*6891d857SDavid du Colombier "FXCSNMADD", LFMA, AFXCSNMADD,
572*6891d857SDavid du Colombier "FPMSUB", LFMA, AFPMSUB,
573*6891d857SDavid du Colombier "FXMSUB", LFMA, AFXMSUB,
574*6891d857SDavid du Colombier "FXCPMSUB", LFMA, AFXCPMSUB,
575*6891d857SDavid du Colombier "FXCSMSUB", LFMA, AFXCSMSUB,
576*6891d857SDavid du Colombier "FPNMSUB", LFMA, AFPNMSUB,
577*6891d857SDavid du Colombier "FXNMSUB", LFMA, AFXNMSUB,
578*6891d857SDavid du Colombier "FXCPNMSUB", LFMA, AFXCPNMSUB,
579*6891d857SDavid du Colombier "FXCSNMSUB", LFMA, AFXCSNMSUB,
580*6891d857SDavid du Colombier "FPABS", LFCONV, AFPABS,
581*6891d857SDavid du Colombier "FPNEG", LFCONV, AFPNEG,
582*6891d857SDavid du Colombier "FPRSP", LFCONV, AFPRSP,
583*6891d857SDavid du Colombier "FPNABS", LFCONV, AFPNABS,
584*6891d857SDavid du Colombier "FSMOVD", LFMOV, AFSMOVD,
585*6891d857SDavid du Colombier "FSCMP", LFCMP, AFSCMP,
586*6891d857SDavid du Colombier "FSABS", LFCONV, AFSABS,
587*6891d857SDavid du Colombier "FSNEG", LFCONV, AFSNEG,
588*6891d857SDavid du Colombier "FSNABS", LFCONV, AFSNABS,
589*6891d857SDavid du Colombier "FPCTIW", LFCONV, AFPCTIW,
590*6891d857SDavid du Colombier "FPCTIWZ", LFCONV, AFPCTIWZ,
591*6891d857SDavid du Colombier "FMOVSPD", LFCONV, AFMOVSPD,
592*6891d857SDavid du Colombier "FMOVPSD", LFCONV, AFMOVPSD,
593*6891d857SDavid du Colombier "FXCPNPMA", LFMA, AFXCPNPMA,
594*6891d857SDavid du Colombier "FXCSNPMA", LFMA, AFXCSNPMA,
595*6891d857SDavid du Colombier "FXCPNSMA", LFMA, AFXCPNSMA,
596*6891d857SDavid du Colombier "FXCSNSMA", LFMA, AFXCSNSMA,
597*6891d857SDavid du Colombier "FXCXNPMA", LFMA, AFXCXNPMA,
598*6891d857SDavid du Colombier "FXCXNSMA", LFMA, AFXCXNSMA,
599*6891d857SDavid du Colombier "FXCXMA", LFMA, AFXCXMA,
600*6891d857SDavid du Colombier "FXCXNMS", LFMA, AFXCXNMS,
601*6891d857SDavid du Colombier
602*6891d857SDavid du Colombier /* parallel, cross, and secondary load and store (fp2) */
603*6891d857SDavid du Colombier "FSMOVS", LFMOVX, AFSMOVS,
604*6891d857SDavid du Colombier "FSMOVSU", LFMOVX, AFSMOVSU,
605*6891d857SDavid du Colombier "FSMOVD", LFMOVX, AFSMOVD,
606*6891d857SDavid du Colombier "FSMOVDU", LFMOVX, AFSMOVDU,
607*6891d857SDavid du Colombier "FXMOVS", LFMOVX, AFXMOVS,
608*6891d857SDavid du Colombier "FXMOVSU", LFMOVX, AFXMOVSU,
609*6891d857SDavid du Colombier "FXMOVD", LFMOVX, AFXMOVD,
610*6891d857SDavid du Colombier "FXMOVDU", LFMOVX, AFXMOVDU,
611*6891d857SDavid du Colombier "FPMOVS", LFMOVX, AFPMOVS,
612*6891d857SDavid du Colombier "FPMOVSU", LFMOVX, AFPMOVSU,
613*6891d857SDavid du Colombier "FPMOVD", LFMOVX, AFPMOVD,
614*6891d857SDavid du Colombier "FPMOVDU", LFMOVX, AFPMOVDU,
615*6891d857SDavid du Colombier "FPMOVIW", LFMOVX, AFPMOVIW,
616*6891d857SDavid du Colombier
617*6891d857SDavid du Colombier "AFMOVSPD", LFMOV, AFMOVSPD,
618*6891d857SDavid du Colombier "AFMOVPSD", LFMOV, AFMOVPSD,
619*6891d857SDavid du Colombier
6207dd7cddfSDavid du Colombier /* special instructions */
6217dd7cddfSDavid du Colombier "DCBF", LXOP, ADCBF,
6227dd7cddfSDavid du Colombier "DCBI", LXOP, ADCBI,
6237dd7cddfSDavid du Colombier "DCBST", LXOP, ADCBST,
6247dd7cddfSDavid du Colombier "DCBT", LXOP, ADCBT,
6257dd7cddfSDavid du Colombier "DCBTST", LXOP, ADCBTST,
6267dd7cddfSDavid du Colombier "DCBZ", LXOP, ADCBZ,
6277dd7cddfSDavid du Colombier "ICBI", LXOP, AICBI,
6287dd7cddfSDavid du Colombier
6297dd7cddfSDavid du Colombier "ECIWX", LXLD, AECIWX,
6307dd7cddfSDavid du Colombier "ECOWX", LXST, AECOWX,
6317dd7cddfSDavid du Colombier "LWAR", LXLD, ALWAR,
6327dd7cddfSDavid du Colombier "STWCCC", LXST, ASTWCCC,
6337dd7cddfSDavid du Colombier "EIEIO", LRETRN, AEIEIO,
6347dd7cddfSDavid du Colombier "TLBIE", LNOP, ATLBIE,
6357dd7cddfSDavid du Colombier "LSW", LXLD, ALSW,
6367dd7cddfSDavid du Colombier "STSW", LXST, ASTSW,
6377dd7cddfSDavid du Colombier
6387dd7cddfSDavid du Colombier "ISYNC", LRETRN, AISYNC,
6397dd7cddfSDavid du Colombier "SYNC", LRETRN, ASYNC,
6407dd7cddfSDavid du Colombier /* "TW", LADDW, ATW,*/
6417dd7cddfSDavid du Colombier
6427dd7cddfSDavid du Colombier "WORD", LWORD, AWORD,
6437dd7cddfSDavid du Colombier "SCHED", LSCHED, 0,
6447dd7cddfSDavid du Colombier "NOSCHED", LSCHED, 0x80,
6457dd7cddfSDavid du Colombier
6467dd7cddfSDavid du Colombier 0
6477dd7cddfSDavid du Colombier };
6487dd7cddfSDavid du Colombier
6497dd7cddfSDavid du Colombier void
cinit(void)6507dd7cddfSDavid du Colombier cinit(void)
6517dd7cddfSDavid du Colombier {
6527dd7cddfSDavid du Colombier Sym *s;
6537dd7cddfSDavid du Colombier int i;
6547dd7cddfSDavid du Colombier
6557dd7cddfSDavid du Colombier nullgen.sym = S;
6567dd7cddfSDavid du Colombier nullgen.offset = 0;
6577dd7cddfSDavid du Colombier nullgen.type = D_NONE;
6587dd7cddfSDavid du Colombier nullgen.name = D_NONE;
6597dd7cddfSDavid du Colombier nullgen.reg = NREG;
6607dd7cddfSDavid du Colombier nullgen.xreg = NREG;
6617dd7cddfSDavid du Colombier if(FPCHIP)
6627dd7cddfSDavid du Colombier nullgen.dval = 0;
6637dd7cddfSDavid du Colombier for(i=0; i<sizeof(nullgen.sval); i++)
6647dd7cddfSDavid du Colombier nullgen.sval[i] = 0;
6657dd7cddfSDavid du Colombier
6667dd7cddfSDavid du Colombier nerrors = 0;
6677dd7cddfSDavid du Colombier iostack = I;
6687dd7cddfSDavid du Colombier iofree = I;
6697dd7cddfSDavid du Colombier peekc = IGN;
6707dd7cddfSDavid du Colombier nhunk = 0;
6717dd7cddfSDavid du Colombier for(i=0; i<NHASH; i++)
6727dd7cddfSDavid du Colombier hash[i] = S;
6737dd7cddfSDavid du Colombier for(i=0; itab[i].name; i++) {
6747dd7cddfSDavid du Colombier s = slookup(itab[i].name);
6757dd7cddfSDavid du Colombier s->type = itab[i].type;
6767dd7cddfSDavid du Colombier s->value = itab[i].value;
6777dd7cddfSDavid du Colombier }
6787dd7cddfSDavid du Colombier ALLOCN(pathname, 0, 100);
679375daca8SDavid du Colombier if(mygetwd(pathname, 99) == 0) {
6807dd7cddfSDavid du Colombier ALLOCN(pathname, 100, 900);
681375daca8SDavid du Colombier if(mygetwd(pathname, 999) == 0)
6827dd7cddfSDavid du Colombier strcpy(pathname, "/???");
6837dd7cddfSDavid du Colombier }
6847dd7cddfSDavid du Colombier }
6857dd7cddfSDavid du Colombier
6867dd7cddfSDavid du Colombier void
syminit(Sym * s)6877dd7cddfSDavid du Colombier syminit(Sym *s)
6887dd7cddfSDavid du Colombier {
6897dd7cddfSDavid du Colombier
6907dd7cddfSDavid du Colombier s->type = LNAME;
6917dd7cddfSDavid du Colombier s->value = 0;
6927dd7cddfSDavid du Colombier }
6937dd7cddfSDavid du Colombier
6947dd7cddfSDavid du Colombier void
cclean(void)6957dd7cddfSDavid du Colombier cclean(void)
6967dd7cddfSDavid du Colombier {
6977dd7cddfSDavid du Colombier
6987dd7cddfSDavid du Colombier outcode(AEND, &nullgen, NREG, &nullgen);
6997dd7cddfSDavid du Colombier Bflush(&obuf);
7007dd7cddfSDavid du Colombier }
7017dd7cddfSDavid du Colombier
7027dd7cddfSDavid du Colombier void
zname(char * n,int t,int s)7037dd7cddfSDavid du Colombier zname(char *n, int t, int s)
7047dd7cddfSDavid du Colombier {
7057dd7cddfSDavid du Colombier
7067dd7cddfSDavid du Colombier Bputc(&obuf, ANAME);
707*6891d857SDavid du Colombier Bputc(&obuf, ANAME>>8);
7087dd7cddfSDavid du Colombier Bputc(&obuf, t); /* type */
7097dd7cddfSDavid du Colombier Bputc(&obuf, s); /* sym */
7107dd7cddfSDavid du Colombier while(*n) {
7117dd7cddfSDavid du Colombier Bputc(&obuf, *n);
7127dd7cddfSDavid du Colombier n++;
7137dd7cddfSDavid du Colombier }
7147dd7cddfSDavid du Colombier Bputc(&obuf, 0);
7157dd7cddfSDavid du Colombier }
7167dd7cddfSDavid du Colombier
7177dd7cddfSDavid du Colombier void
zaddr(Gen * a,int s)7187dd7cddfSDavid du Colombier zaddr(Gen *a, int s)
7197dd7cddfSDavid du Colombier {
7207dd7cddfSDavid du Colombier long l;
7217dd7cddfSDavid du Colombier int i;
7227dd7cddfSDavid du Colombier char *n;
7237dd7cddfSDavid du Colombier Ieee e;
7247dd7cddfSDavid du Colombier
7257dd7cddfSDavid du Colombier Bputc(&obuf, a->type);
7267dd7cddfSDavid du Colombier Bputc(&obuf, a->reg);
7277dd7cddfSDavid du Colombier Bputc(&obuf, s);
7287dd7cddfSDavid du Colombier Bputc(&obuf, a->name);
7297dd7cddfSDavid du Colombier switch(a->type) {
7307dd7cddfSDavid du Colombier default:
7317dd7cddfSDavid du Colombier print("unknown type %d\n", a->type);
7327dd7cddfSDavid du Colombier exits("arg");
7337dd7cddfSDavid du Colombier
7347dd7cddfSDavid du Colombier case D_NONE:
7357dd7cddfSDavid du Colombier case D_REG:
7367dd7cddfSDavid du Colombier case D_FREG:
7377dd7cddfSDavid du Colombier case D_CREG:
7387dd7cddfSDavid du Colombier case D_FPSCR:
7397dd7cddfSDavid du Colombier case D_MSR:
7407dd7cddfSDavid du Colombier case D_SREG:
7417dd7cddfSDavid du Colombier case D_OPT:
7427dd7cddfSDavid du Colombier break;
7437dd7cddfSDavid du Colombier
7441805eb57SDavid du Colombier case D_DCR:
7457dd7cddfSDavid du Colombier case D_SPR:
7467dd7cddfSDavid du Colombier case D_OREG:
7477dd7cddfSDavid du Colombier case D_CONST:
7487dd7cddfSDavid du Colombier case D_BRANCH:
7497dd7cddfSDavid du Colombier l = a->offset;
7507dd7cddfSDavid du Colombier Bputc(&obuf, l);
7517dd7cddfSDavid du Colombier Bputc(&obuf, l>>8);
7527dd7cddfSDavid du Colombier Bputc(&obuf, l>>16);
7537dd7cddfSDavid du Colombier Bputc(&obuf, l>>24);
7547dd7cddfSDavid du Colombier break;
7557dd7cddfSDavid du Colombier
7567dd7cddfSDavid du Colombier case D_SCONST:
7577dd7cddfSDavid du Colombier n = a->sval;
7587dd7cddfSDavid du Colombier for(i=0; i<NSNAME; i++) {
7597dd7cddfSDavid du Colombier Bputc(&obuf, *n);
7607dd7cddfSDavid du Colombier n++;
7617dd7cddfSDavid du Colombier }
7627dd7cddfSDavid du Colombier break;
7637dd7cddfSDavid du Colombier
7647dd7cddfSDavid du Colombier case D_FCONST:
7657dd7cddfSDavid du Colombier ieeedtod(&e, a->dval);
7667dd7cddfSDavid du Colombier Bputc(&obuf, e.l);
7677dd7cddfSDavid du Colombier Bputc(&obuf, e.l>>8);
7687dd7cddfSDavid du Colombier Bputc(&obuf, e.l>>16);
7697dd7cddfSDavid du Colombier Bputc(&obuf, e.l>>24);
7707dd7cddfSDavid du Colombier Bputc(&obuf, e.h);
7717dd7cddfSDavid du Colombier Bputc(&obuf, e.h>>8);
7727dd7cddfSDavid du Colombier Bputc(&obuf, e.h>>16);
7737dd7cddfSDavid du Colombier Bputc(&obuf, e.h>>24);
7747dd7cddfSDavid du Colombier break;
7757dd7cddfSDavid du Colombier }
7767dd7cddfSDavid du Colombier }
7777dd7cddfSDavid du Colombier
7787dd7cddfSDavid du Colombier int
outsim(Gen * g)7797dd7cddfSDavid du Colombier outsim(Gen *g)
7807dd7cddfSDavid du Colombier {
7817dd7cddfSDavid du Colombier Sym *s;
7827dd7cddfSDavid du Colombier int sno, t;
7837dd7cddfSDavid du Colombier
7847dd7cddfSDavid du Colombier s = g->sym;
7857dd7cddfSDavid du Colombier if(s == S)
7867dd7cddfSDavid du Colombier return 0;
7877dd7cddfSDavid du Colombier sno = s->sym;
7887dd7cddfSDavid du Colombier if(sno < 0 || sno >= NSYM)
7897dd7cddfSDavid du Colombier sno = 0;
7907dd7cddfSDavid du Colombier t = g->name;
7917dd7cddfSDavid du Colombier if(h[sno].type == t && h[sno].sym == s)
7927dd7cddfSDavid du Colombier return sno;
7937dd7cddfSDavid du Colombier zname(s->name, t, sym);
7947dd7cddfSDavid du Colombier s->sym = sym;
7957dd7cddfSDavid du Colombier h[sym].sym = s;
7967dd7cddfSDavid du Colombier h[sym].type = t;
7977dd7cddfSDavid du Colombier sno = sym;
7987dd7cddfSDavid du Colombier sym++;
7997dd7cddfSDavid du Colombier if(sym >= NSYM)
8007dd7cddfSDavid du Colombier sym = 1;
8017dd7cddfSDavid du Colombier return sno;
8027dd7cddfSDavid du Colombier }
8037dd7cddfSDavid du Colombier
8047dd7cddfSDavid du Colombier void
outcode(int a,Gen * g1,int reg,Gen * g2)8057dd7cddfSDavid du Colombier outcode(int a, Gen *g1, int reg, Gen *g2)
8067dd7cddfSDavid du Colombier {
8077dd7cddfSDavid du Colombier int sf, st;
8087dd7cddfSDavid du Colombier
8097dd7cddfSDavid du Colombier if(a != AGLOBL && a != ADATA)
8107dd7cddfSDavid du Colombier pc++;
8117dd7cddfSDavid du Colombier if(pass == 1)
8127dd7cddfSDavid du Colombier return;
8137dd7cddfSDavid du Colombier if(g1->xreg != NREG) {
8147dd7cddfSDavid du Colombier if(reg != NREG || g2->xreg != NREG)
8157dd7cddfSDavid du Colombier yyerror("bad addressing modes");
8167dd7cddfSDavid du Colombier reg = g1->xreg;
8177dd7cddfSDavid du Colombier } else
8187dd7cddfSDavid du Colombier if(g2->xreg != NREG) {
8197dd7cddfSDavid du Colombier if(reg != NREG)
8207dd7cddfSDavid du Colombier yyerror("bad addressing modes");
8217dd7cddfSDavid du Colombier reg = g2->xreg;
8227dd7cddfSDavid du Colombier }
8237dd7cddfSDavid du Colombier do {
8247dd7cddfSDavid du Colombier sf = outsim(g1);
8257dd7cddfSDavid du Colombier st = outsim(g2);
8267dd7cddfSDavid du Colombier } while(sf != 0 && st == sf);
8277dd7cddfSDavid du Colombier Bputc(&obuf, a);
828*6891d857SDavid du Colombier Bputc(&obuf, a>>8);
8297dd7cddfSDavid du Colombier Bputc(&obuf, reg|nosched);
8307dd7cddfSDavid du Colombier Bputc(&obuf, lineno);
8317dd7cddfSDavid du Colombier Bputc(&obuf, lineno>>8);
8327dd7cddfSDavid du Colombier Bputc(&obuf, lineno>>16);
8337dd7cddfSDavid du Colombier Bputc(&obuf, lineno>>24);
8347dd7cddfSDavid du Colombier zaddr(g1, sf);
8357dd7cddfSDavid du Colombier zaddr(g2, st);
8367dd7cddfSDavid du Colombier }
8377dd7cddfSDavid du Colombier
8387dd7cddfSDavid du Colombier void
outgcode(int a,Gen * g1,int reg,Gen * g2,Gen * g3)8397dd7cddfSDavid du Colombier outgcode(int a, Gen *g1, int reg, Gen *g2, Gen *g3)
8407dd7cddfSDavid du Colombier {
8417dd7cddfSDavid du Colombier int s1, s2, s3, flag;
8427dd7cddfSDavid du Colombier
8437dd7cddfSDavid du Colombier if(a != AGLOBL && a != ADATA)
8447dd7cddfSDavid du Colombier pc++;
8457dd7cddfSDavid du Colombier if(pass == 1)
8467dd7cddfSDavid du Colombier return;
8477dd7cddfSDavid du Colombier do {
8487dd7cddfSDavid du Colombier s1 = outsim(g1);
8497dd7cddfSDavid du Colombier s2 = outsim(g2);
8507dd7cddfSDavid du Colombier s3 = outsim(g3);
8517dd7cddfSDavid du Colombier } while(s1 && (s2 && s1 == s2 || s3 && s1 == s3) || s2 && (s3 && s2 == s3));
8527dd7cddfSDavid du Colombier flag = 0;
8537dd7cddfSDavid du Colombier if(g2->type != D_NONE)
8547dd7cddfSDavid du Colombier flag = 0x40; /* flags extra operand */
8557dd7cddfSDavid du Colombier Bputc(&obuf, a);
856*6891d857SDavid du Colombier Bputc(&obuf, a>>8);
8577dd7cddfSDavid du Colombier Bputc(&obuf, reg | nosched | flag);
8587dd7cddfSDavid du Colombier Bputc(&obuf, lineno);
8597dd7cddfSDavid du Colombier Bputc(&obuf, lineno>>8);
8607dd7cddfSDavid du Colombier Bputc(&obuf, lineno>>16);
8617dd7cddfSDavid du Colombier Bputc(&obuf, lineno>>24);
8627dd7cddfSDavid du Colombier zaddr(g1, s1);
8637dd7cddfSDavid du Colombier if(flag)
8647dd7cddfSDavid du Colombier zaddr(g2, s2);
8657dd7cddfSDavid du Colombier zaddr(g3, s3);
8667dd7cddfSDavid du Colombier }
8677dd7cddfSDavid du Colombier
8687dd7cddfSDavid du Colombier void
outhist(void)8697dd7cddfSDavid du Colombier outhist(void)
8707dd7cddfSDavid du Colombier {
8717dd7cddfSDavid du Colombier Gen g;
8727dd7cddfSDavid du Colombier Hist *h;
873375daca8SDavid du Colombier char *p, *q, *op, c;
8747dd7cddfSDavid du Colombier int n;
8757dd7cddfSDavid du Colombier
8767dd7cddfSDavid du Colombier g = nullgen;
877375daca8SDavid du Colombier c = pathchar();
8787dd7cddfSDavid du Colombier for(h = hist; h != H; h = h->link) {
8797dd7cddfSDavid du Colombier p = h->name;
8807dd7cddfSDavid du Colombier op = 0;
881375daca8SDavid du Colombier /* on windows skip drive specifier in pathname */
882375daca8SDavid du Colombier if(systemtype(Windows) && p && p[1] == ':'){
883375daca8SDavid du Colombier p += 2;
884375daca8SDavid du Colombier c = *p;
885375daca8SDavid du Colombier }
886375daca8SDavid du Colombier if(p && p[0] != c && h->offset == 0 && pathname){
887375daca8SDavid du Colombier /* on windows skip drive specifier in pathname */
888375daca8SDavid du Colombier if(systemtype(Windows) && pathname[1] == ':') {
889375daca8SDavid du Colombier op = p;
890375daca8SDavid du Colombier p = pathname+2;
891375daca8SDavid du Colombier c = *p;
892375daca8SDavid du Colombier } else if(pathname[0] == c){
8937dd7cddfSDavid du Colombier op = p;
8947dd7cddfSDavid du Colombier p = pathname;
8957dd7cddfSDavid du Colombier }
896375daca8SDavid du Colombier }
8977dd7cddfSDavid du Colombier while(p) {
898375daca8SDavid du Colombier q = strchr(p, c);
8997dd7cddfSDavid du Colombier if(q) {
9007dd7cddfSDavid du Colombier n = q-p;
901375daca8SDavid du Colombier if(n == 0){
9027dd7cddfSDavid du Colombier n = 1; /* leading "/" */
903375daca8SDavid du Colombier *p = '/'; /* don't emit "\" on windows */
904375daca8SDavid du Colombier }
9057dd7cddfSDavid du Colombier q++;
9067dd7cddfSDavid du Colombier } else {
9077dd7cddfSDavid du Colombier n = strlen(p);
9087dd7cddfSDavid du Colombier q = 0;
9097dd7cddfSDavid du Colombier }
9107dd7cddfSDavid du Colombier if(n) {
9117dd7cddfSDavid du Colombier Bputc(&obuf, ANAME);
912*6891d857SDavid du Colombier Bputc(&obuf, ANAME>>8);
9137dd7cddfSDavid du Colombier Bputc(&obuf, D_FILE); /* type */
9147dd7cddfSDavid du Colombier Bputc(&obuf, 1); /* sym */
9157dd7cddfSDavid du Colombier Bputc(&obuf, '<');
9167dd7cddfSDavid du Colombier Bwrite(&obuf, p, n);
9177dd7cddfSDavid du Colombier Bputc(&obuf, 0);
9187dd7cddfSDavid du Colombier }
9197dd7cddfSDavid du Colombier p = q;
9207dd7cddfSDavid du Colombier if(p == 0 && op) {
9217dd7cddfSDavid du Colombier p = op;
9227dd7cddfSDavid du Colombier op = 0;
9237dd7cddfSDavid du Colombier }
9247dd7cddfSDavid du Colombier }
9257dd7cddfSDavid du Colombier g.offset = h->offset;
9267dd7cddfSDavid du Colombier
9277dd7cddfSDavid du Colombier Bputc(&obuf, AHISTORY);
928*6891d857SDavid du Colombier Bputc(&obuf, AHISTORY>>8);
9297dd7cddfSDavid du Colombier Bputc(&obuf, 0);
9307dd7cddfSDavid du Colombier Bputc(&obuf, h->line);
9317dd7cddfSDavid du Colombier Bputc(&obuf, h->line>>8);
9327dd7cddfSDavid du Colombier Bputc(&obuf, h->line>>16);
9337dd7cddfSDavid du Colombier Bputc(&obuf, h->line>>24);
9347dd7cddfSDavid du Colombier zaddr(&nullgen, 0);
9357dd7cddfSDavid du Colombier zaddr(&g, 0);
9367dd7cddfSDavid du Colombier }
9377dd7cddfSDavid du Colombier }
9387dd7cddfSDavid du Colombier
9397dd7cddfSDavid du Colombier #include "../cc/lexbody"
9407dd7cddfSDavid du Colombier #include "../cc/macbody"
9417dd7cddfSDavid du Colombier #include "../cc/compat"
942