aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/8a/lex.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/8a/lex.c')
-rw-r--r--src/cmd/8a/lex.c914
1 files changed, 0 insertions, 914 deletions
diff --git a/src/cmd/8a/lex.c b/src/cmd/8a/lex.c
deleted file mode 100644
index 846f6c6daf..0000000000
--- a/src/cmd/8a/lex.c
+++ /dev/null
@@ -1,914 +0,0 @@
-// Inferno utils/8a/lex.c
-// http://code.google.com/p/inferno-os/source/browse/utils/8a/lex.c
-//
-// Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
-// Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
-// Portions Copyright © 1997-1999 Vita Nuova Limited
-// Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
-// Portions Copyright © 2004,2006 Bruce Ellis
-// Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
-// Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
-// Portions Copyright © 2009 The Go Authors. All rights reserved.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy
-// of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights
-// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-// copies of the Software, and to permit persons to whom the Software is
-// furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in
-// all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-// THE SOFTWARE.
-
-#define EXTERN
-#include <u.h>
-#include <libc.h>
-#include "a.h"
-#include "y.tab.h"
-
-enum
-{
- Plan9 = 1<<0,
- Unix = 1<<1,
- Windows = 1<<2,
-};
-
-int
-systemtype(int sys)
-{
-#ifdef _WIN32
- return sys&Windows;
-#else
- return sys&Plan9;
-#endif
-}
-
-int
-pathchar(void)
-{
- return '/';
-}
-
-int
-Lconv(Fmt *fp)
-{
- return linklinefmt(ctxt, fp);
-}
-
-void
-dodef(char *p)
-{
- if(nDlist%8 == 0)
- Dlist = allocn(Dlist, nDlist*sizeof(char *),
- 8*sizeof(char *));
- Dlist[nDlist++] = p;
-}
-
-void
-usage(void)
-{
- print("usage: %ca [options] file.c...\n", thechar);
- flagprint(1);
- errorexit();
-}
-void
-main(int argc, char *argv[])
-{
- char *p;
-
- thechar = '8';
- thestring = "386";
-
- ctxt = linknew(&link386);
- ctxt->diag = yyerror;
- ctxt->bso = &bstdout;
- ctxt->enforce_data_order = 1;
- Binit(&bstdout, 1, OWRITE);
- listinit8();
- fmtinstall('L', Lconv);
-
- // Allow GOARCH=thestring or GOARCH=thestringsuffix,
- // but not other values.
- p = getgoarch();
- if(strncmp(p, thestring, strlen(thestring)) != 0)
- sysfatal("cannot use %cc with GOARCH=%s", thechar, p);
-
- ensuresymb(NSYMB);
- memset(debug, 0, sizeof(debug));
- cinit();
- outfile = 0;
- setinclude(".");
-
- flagfn1("D", "name[=value]: add #define", dodef);
- flagfn1("I", "dir: add dir to include path", setinclude);
- flagcount("S", "print assembly and machine code", &debug['S']);
- flagcount("m", "debug preprocessor macros", &debug['m']);
- flagstr("o", "file: set output file", &outfile);
- flagstr("trimpath", "prefix: remove prefix from recorded source file paths", &ctxt->trimpath);
-
- flagparse(&argc, &argv, usage);
- ctxt->debugasm = debug['S'];
-
- if(argc < 1)
- usage();
- if(argc > 1){
- print("can't assemble multiple files\n");
- errorexit();
- }
-
- if(assemble(argv[0]))
- errorexit();
- Bflush(&bstdout);
- if(nerrors > 0)
- errorexit();
- exits(0);
-}
-
-int
-assemble(char *file)
-{
- char *ofile, *p;
- int i, of;
-
- ofile = alloc(strlen(file)+3); // +3 for .x\0 (x=thechar)
- strcpy(ofile, file);
- p = utfrrune(ofile, pathchar());
- if(p) {
- include[0] = ofile;
- *p++ = 0;
- } else
- p = ofile;
- if(outfile == 0) {
- outfile = p;
- if(outfile){
- p = utfrrune(outfile, '.');
- if(p)
- if(p[1] == 's' && p[2] == 0)
- p[0] = 0;
- p = utfrune(outfile, 0);
- p[0] = '.';
- p[1] = thechar;
- p[2] = 0;
- } else
- outfile = "/dev/null";
- }
-
- of = create(outfile, OWRITE, 0664);
- if(of < 0) {
- yyerror("%ca: cannot create %s", thechar, outfile);
- errorexit();
- }
- Binit(&obuf, of, OWRITE);
- Bprint(&obuf, "go object %s %s %s\n", getgoos(), getgoarch(), getgoversion());
- Bprint(&obuf, "!\n");
-
- for(pass = 1; pass <= 2; pass++) {
- pinit(file);
- for(i=0; i<nDlist; i++)
- dodefine(Dlist[i]);
- yyparse();
- cclean();
- if(nerrors)
- return nerrors;
- }
-
- writeobj(ctxt, &obuf);
- Bflush(&obuf);
- return 0;
-}
-
-struct
-{
- char *name;
- ushort type;
- ushort value;
-} itab[] =
-{
- "SP", LSP, NAME_AUTO,
- "SB", LSB, NAME_EXTERN,
- "FP", LFP, NAME_PARAM,
-
- "PC", LPC, TYPE_BRANCH,
-
- "AL", LBREG, REG_AL,
- "CL", LBREG, REG_CL,
- "DL", LBREG, REG_DL,
- "BL", LBREG, REG_BL,
- "AH", LBREG, REG_AH,
- "CH", LBREG, REG_CH,
- "DH", LBREG, REG_DH,
- "BH", LBREG, REG_BH,
-
- "AX", LLREG, REG_AX,
- "CX", LLREG, REG_CX,
- "DX", LLREG, REG_DX,
- "BX", LLREG, REG_BX,
-/* "SP", LLREG, REG_SP, */
- "BP", LLREG, REG_BP,
- "SI", LLREG, REG_SI,
- "DI", LLREG, REG_DI,
-
- "F0", LFREG, REG_F0+0,
- "F1", LFREG, REG_F0+1,
- "F2", LFREG, REG_F0+2,
- "F3", LFREG, REG_F0+3,
- "F4", LFREG, REG_F0+4,
- "F5", LFREG, REG_F0+5,
- "F6", LFREG, REG_F0+6,
- "F7", LFREG, REG_F0+7,
-
- "X0", LXREG, REG_X0+0,
- "X1", LXREG, REG_X0+1,
- "X2", LXREG, REG_X0+2,
- "X3", LXREG, REG_X0+3,
- "X4", LXREG, REG_X0+4,
- "X5", LXREG, REG_X0+5,
- "X6", LXREG, REG_X0+6,
- "X7", LXREG, REG_X0+7,
-
- "CS", LSREG, REG_CS,
- "SS", LSREG, REG_SS,
- "DS", LSREG, REG_DS,
- "ES", LSREG, REG_ES,
- "FS", LSREG, REG_FS,
- "GS", LSREG, REG_GS,
- "TLS", LSREG, REG_TLS,
-
- "GDTR", LBREG, REG_GDTR,
- "IDTR", LBREG, REG_IDTR,
- "LDTR", LBREG, REG_LDTR,
- "MSW", LBREG, REG_MSW,
- "TASK", LBREG, REG_TASK,
-
- "CR0", LBREG, REG_CR+0,
- "CR1", LBREG, REG_CR+1,
- "CR2", LBREG, REG_CR+2,
- "CR3", LBREG, REG_CR+3,
- "CR4", LBREG, REG_CR+4,
- "CR5", LBREG, REG_CR+5,
- "CR6", LBREG, REG_CR+6,
- "CR7", LBREG, REG_CR+7,
-
- "DR0", LBREG, REG_DR+0,
- "DR1", LBREG, REG_DR+1,
- "DR2", LBREG, REG_DR+2,
- "DR3", LBREG, REG_DR+3,
- "DR4", LBREG, REG_DR+4,
- "DR5", LBREG, REG_DR+5,
- "DR6", LBREG, REG_DR+6,
- "DR7", LBREG, REG_DR+7,
-
- "TR0", LBREG, REG_TR+0,
- "TR1", LBREG, REG_TR+1,
- "TR2", LBREG, REG_TR+2,
- "TR3", LBREG, REG_TR+3,
- "TR4", LBREG, REG_TR+4,
- "TR5", LBREG, REG_TR+5,
- "TR6", LBREG, REG_TR+6,
- "TR7", LBREG, REG_TR+7,
-
- "AAA", LTYPE0, AAAA,
- "AAD", LTYPE0, AAAD,
- "AAM", LTYPE0, AAAM,
- "AAS", LTYPE0, AAAS,
- "ADCB", LTYPE3, AADCB,
- "ADCL", LTYPE3, AADCL,
- "ADCW", LTYPE3, AADCW,
- "ADDB", LTYPE3, AADDB,
- "ADDL", LTYPE3, AADDL,
- "ADDW", LTYPE3, AADDW,
- "ADJSP", LTYPE2, AADJSP,
- "ANDB", LTYPE3, AANDB,
- "ANDL", LTYPE3, AANDL,
- "ANDW", LTYPE3, AANDW,
- "ARPL", LTYPE3, AARPL,
- "BOUNDL", LTYPE3, ABOUNDL,
- "BOUNDW", LTYPE3, ABOUNDW,
- "BSFL", LTYPE3, ABSFL,
- "BSFW", LTYPE3, ABSFW,
- "BSRL", LTYPE3, ABSRL,
- "BSRW", LTYPE3, ABSRW,
- "BSWAPL", LTYPE1, ABSWAPL,
- "BTCL", LTYPE3, ABTCL,
- "BTCW", LTYPE3, ABTCW,
- "BTL", LTYPE3, ABTL,
- "BTRL", LTYPE3, ABTRL,
- "BTRW", LTYPE3, ABTRW,
- "BTSL", LTYPE3, ABTSL,
- "BTSW", LTYPE3, ABTSW,
- "BTW", LTYPE3, ABTW,
- "BYTE", LTYPE2, ABYTE,
- "CALL", LTYPEC, ACALL,
- "CLC", LTYPE0, ACLC,
- "CLD", LTYPE0, ACLD,
- "CLI", LTYPE0, ACLI,
- "CLTS", LTYPE0, ACLTS,
- "CMC", LTYPE0, ACMC,
- "CMPB", LTYPE4, ACMPB,
- "CMPL", LTYPE4, ACMPL,
- "CMPW", LTYPE4, ACMPW,
- "CMPSB", LTYPE0, ACMPSB,
- "CMPSL", LTYPE0, ACMPSL,
- "CMPSW", LTYPE0, ACMPSW,
- "CMPXCHG8B", LTYPE1, ACMPXCHG8B,
- "CMPXCHGB", LTYPE3, ACMPXCHGB,
- "CMPXCHGL", LTYPE3, ACMPXCHGL,
- "CMPXCHGW", LTYPE3, ACMPXCHGW,
- "CPUID", LTYPE0, ACPUID,
- "DAA", LTYPE0, ADAA,
- "DAS", LTYPE0, ADAS,
- "DATA", LTYPED, ADATA,
- "DECB", LTYPE1, ADECB,
- "DECL", LTYPE1, ADECL,
- "DECW", LTYPE1, ADECW,
- "DIVB", LTYPE2, ADIVB,
- "DIVL", LTYPE2, ADIVL,
- "DIVW", LTYPE2, ADIVW,
- "END", LTYPE0, AEND,
- "ENTER", LTYPE2, AENTER,
- "GLOBL", LTYPEG, AGLOBL,
- "HLT", LTYPE0, AHLT,
- "IDIVB", LTYPE2, AIDIVB,
- "IDIVL", LTYPE2, AIDIVL,
- "IDIVW", LTYPE2, AIDIVW,
- "IMULB", LTYPE2, AIMULB,
- "IMULL", LTYPEI, AIMULL,
- "IMULW", LTYPEI, AIMULW,
- "INB", LTYPE0, AINB,
- "INL", LTYPE0, AINL,
- "INW", LTYPE0, AINW,
- "INCB", LTYPE1, AINCB,
- "INCL", LTYPE1, AINCL,
- "INCW", LTYPE1, AINCW,
- "INSB", LTYPE0, AINSB,
- "INSL", LTYPE0, AINSL,
- "INSW", LTYPE0, AINSW,
- "INT", LTYPE2, AINT,
- "INTO", LTYPE0, AINTO,
- "IRETL", LTYPE0, AIRETL,
- "IRETW", LTYPE0, AIRETW,
-
- "JOS", LTYPER, AJOS, /* overflow set (OF = 1) */
- "JO", LTYPER, AJOS, /* alternate */
- "JOC", LTYPER, AJOC, /* overflow clear (OF = 0) */
- "JNO", LTYPER, AJOC, /* alternate */
- "JCS", LTYPER, AJCS, /* carry set (CF = 1) */
- "JB", LTYPER, AJCS, /* alternate */
- "JC", LTYPER, AJCS, /* alternate */
- "JNAE", LTYPER, AJCS, /* alternate */
- "JLO", LTYPER, AJCS, /* alternate */
- "JCC", LTYPER, AJCC, /* carry clear (CF = 0) */
- "JAE", LTYPER, AJCC, /* alternate */
- "JNB", LTYPER, AJCC, /* alternate */
- "JNC", LTYPER, AJCC, /* alternate */
- "JHS", LTYPER, AJCC, /* alternate */
- "JEQ", LTYPER, AJEQ, /* equal (ZF = 1) */
- "JE", LTYPER, AJEQ, /* alternate */
- "JZ", LTYPER, AJEQ, /* alternate */
- "JNE", LTYPER, AJNE, /* not equal (ZF = 0) */
- "JNZ", LTYPER, AJNE, /* alternate */
- "JLS", LTYPER, AJLS, /* lower or same (unsigned) (CF = 1 || ZF = 1) */
- "JBE", LTYPER, AJLS, /* alternate */
- "JNA", LTYPER, AJLS, /* alternate */
- "JHI", LTYPER, AJHI, /* higher (unsigned) (CF = 0 && ZF = 0) */
- "JA", LTYPER, AJHI, /* alternate */
- "JNBE", LTYPER, AJHI, /* alternate */
- "JMI", LTYPER, AJMI, /* negative (minus) (SF = 1) */
- "JS", LTYPER, AJMI, /* alternate */
- "JPL", LTYPER, AJPL, /* non-negative (plus) (SF = 0) */
- "JNS", LTYPER, AJPL, /* alternate */
- "JPS", LTYPER, AJPS, /* parity set (PF = 1) */
- "JP", LTYPER, AJPS, /* alternate */
- "JPE", LTYPER, AJPS, /* alternate */
- "JPC", LTYPER, AJPC, /* parity clear (PF = 0) */
- "JNP", LTYPER, AJPC, /* alternate */
- "JPO", LTYPER, AJPC, /* alternate */
- "JLT", LTYPER, AJLT, /* less than (signed) (SF != OF) */
- "JL", LTYPER, AJLT, /* alternate */
- "JNGE", LTYPER, AJLT, /* alternate */
- "JGE", LTYPER, AJGE, /* greater than or equal (signed) (SF = OF) */
- "JNL", LTYPER, AJGE, /* alternate */
- "JLE", LTYPER, AJLE, /* less than or equal (signed) (ZF = 1 || SF != OF) */
- "JNG", LTYPER, AJLE, /* alternate */
- "JGT", LTYPER, AJGT, /* greater than (signed) (ZF = 0 && SF = OF) */
- "JG", LTYPER, AJGT, /* alternate */
- "JNLE", LTYPER, AJGT, /* alternate */
-
- "JCXZL", LTYPER, AJCXZL,
- "JCXZW", LTYPER, AJCXZW,
- "JMP", LTYPEC, AJMP,
- "LAHF", LTYPE0, ALAHF,
- "LARL", LTYPE3, ALARL,
- "LARW", LTYPE3, ALARW,
- "LEAL", LTYPE3, ALEAL,
- "LEAW", LTYPE3, ALEAW,
- "LEAVEL", LTYPE0, ALEAVEL,
- "LEAVEW", LTYPE0, ALEAVEW,
- "LOCK", LTYPE0, ALOCK,
- "LODSB", LTYPE0, ALODSB,
- "LODSL", LTYPE0, ALODSL,
- "LODSW", LTYPE0, ALODSW,
- "LONG", LTYPE2, ALONG,
- "LOOP", LTYPER, ALOOP,
- "LOOPEQ", LTYPER, ALOOPEQ,
- "LOOPNE", LTYPER, ALOOPNE,
- "LSLL", LTYPE3, ALSLL,
- "LSLW", LTYPE3, ALSLW,
- "MOVB", LTYPE3, AMOVB,
- "MOVL", LTYPEM, AMOVL,
- "MOVW", LTYPEM, AMOVW,
- "MOVQ", LTYPEM, AMOVQ,
- "MOVBLSX", LTYPE3, AMOVBLSX,
- "MOVBLZX", LTYPE3, AMOVBLZX,
- "MOVBWSX", LTYPE3, AMOVBWSX,
- "MOVBWZX", LTYPE3, AMOVBWZX,
- "MOVWLSX", LTYPE3, AMOVWLSX,
- "MOVWLZX", LTYPE3, AMOVWLZX,
- "MOVSB", LTYPE0, AMOVSB,
- "MOVSL", LTYPE0, AMOVSL,
- "MOVSW", LTYPE0, AMOVSW,
- "MULB", LTYPE2, AMULB,
- "MULL", LTYPE2, AMULL,
- "MULW", LTYPE2, AMULW,
- "NEGB", LTYPE1, ANEGB,
- "NEGL", LTYPE1, ANEGL,
- "NEGW", LTYPE1, ANEGW,
- "NOP", LTYPEN, ANOP,
- "NOTB", LTYPE1, ANOTB,
- "NOTL", LTYPE1, ANOTL,
- "NOTW", LTYPE1, ANOTW,
- "ORB", LTYPE3, AORB,
- "ORL", LTYPE3, AORL,
- "ORW", LTYPE3, AORW,
- "OUTB", LTYPE0, AOUTB,
- "OUTL", LTYPE0, AOUTL,
- "OUTW", LTYPE0, AOUTW,
- "OUTSB", LTYPE0, AOUTSB,
- "OUTSL", LTYPE0, AOUTSL,
- "OUTSW", LTYPE0, AOUTSW,
- "PAUSE", LTYPEN, APAUSE,
- "PINSRD", LTYPEX, APINSRD,
- "POPAL", LTYPE0, APOPAL,
- "POPAW", LTYPE0, APOPAW,
- "POPFL", LTYPE0, APOPFL,
- "POPFW", LTYPE0, APOPFW,
- "POPL", LTYPE1, APOPL,
- "POPW", LTYPE1, APOPW,
- "PUSHAL", LTYPE0, APUSHAL,
- "PUSHAW", LTYPE0, APUSHAW,
- "PUSHFL", LTYPE0, APUSHFL,
- "PUSHFW", LTYPE0, APUSHFW,
- "PUSHL", LTYPE2, APUSHL,
- "PUSHW", LTYPE2, APUSHW,
- "RCLB", LTYPE3, ARCLB,
- "RCLL", LTYPE3, ARCLL,
- "RCLW", LTYPE3, ARCLW,
- "RCRB", LTYPE3, ARCRB,
- "RCRL", LTYPE3, ARCRL,
- "RCRW", LTYPE3, ARCRW,
- "RDTSC", LTYPE0, ARDTSC,
- "REP", LTYPE0, AREP,
- "REPN", LTYPE0, AREPN,
- "RET", LTYPE0, ARET,
- "ROLB", LTYPE3, AROLB,
- "ROLL", LTYPE3, AROLL,
- "ROLW", LTYPE3, AROLW,
- "RORB", LTYPE3, ARORB,
- "RORL", LTYPE3, ARORL,
- "RORW", LTYPE3, ARORW,
- "SAHF", LTYPE0, ASAHF,
- "SALB", LTYPE3, ASALB,
- "SALL", LTYPE3, ASALL,
- "SALW", LTYPE3, ASALW,
- "SARB", LTYPE3, ASARB,
- "SARL", LTYPE3, ASARL,
- "SARW", LTYPE3, ASARW,
- "SBBB", LTYPE3, ASBBB,
- "SBBL", LTYPE3, ASBBL,
- "SBBW", LTYPE3, ASBBW,
- "SCASB", LTYPE0, ASCASB,
- "SCASL", LTYPE0, ASCASL,
- "SCASW", LTYPE0, ASCASW,
- "SETCC", LTYPE1, ASETCC, /* see JCC etc above for condition codes */
- "SETCS", LTYPE1, ASETCS,
- "SETEQ", LTYPE1, ASETEQ,
- "SETGE", LTYPE1, ASETGE,
- "SETGT", LTYPE1, ASETGT,
- "SETHI", LTYPE1, ASETHI,
- "SETLE", LTYPE1, ASETLE,
- "SETLS", LTYPE1, ASETLS,
- "SETLT", LTYPE1, ASETLT,
- "SETMI", LTYPE1, ASETMI,
- "SETNE", LTYPE1, ASETNE,
- "SETOC", LTYPE1, ASETOC,
- "SETOS", LTYPE1, ASETOS,
- "SETPC", LTYPE1, ASETPC,
- "SETPL", LTYPE1, ASETPL,
- "SETPS", LTYPE1, ASETPS,
- "CDQ", LTYPE0, ACDQ,
- "CWD", LTYPE0, ACWD,
- "SHLB", LTYPE3, ASHLB,
- "SHLL", LTYPES, ASHLL,
- "SHLW", LTYPES, ASHLW,
- "SHRB", LTYPE3, ASHRB,
- "SHRL", LTYPES, ASHRL,
- "SHRW", LTYPES, ASHRW,
- "STC", LTYPE0, ASTC,
- "STD", LTYPE0, ASTD,
- "STI", LTYPE0, ASTI,
- "STOSB", LTYPE0, ASTOSB,
- "STOSL", LTYPE0, ASTOSL,
- "STOSW", LTYPE0, ASTOSW,
- "SUBB", LTYPE3, ASUBB,
- "SUBL", LTYPE3, ASUBL,
- "SUBW", LTYPE3, ASUBW,
- "SYSCALL", LTYPE0, ASYSCALL,
- "TESTB", LTYPE3, ATESTB,
- "TESTL", LTYPE3, ATESTL,
- "TESTW", LTYPE3, ATESTW,
- "TEXT", LTYPET, ATEXT,
- "VERR", LTYPE2, AVERR,
- "VERW", LTYPE2, AVERW,
- "WAIT", LTYPE0, AWAIT,
- "WORD", LTYPE2, AWORD,
- "XADDB", LTYPE3, AXADDB,
- "XADDL", LTYPE3, AXADDL,
- "XADDW", LTYPE3, AXADDW,
- "XCHGB", LTYPE3, AXCHGB,
- "XCHGL", LTYPE3, AXCHGL,
- "XCHGW", LTYPE3, AXCHGW,
- "XLAT", LTYPE2, AXLAT,
- "XORB", LTYPE3, AXORB,
- "XORL", LTYPE3, AXORL,
- "XORW", LTYPE3, AXORW,
-
- "CMOVLCC", LTYPE3, ACMOVLCC,
- "CMOVLCS", LTYPE3, ACMOVLCS,
- "CMOVLEQ", LTYPE3, ACMOVLEQ,
- "CMOVLGE", LTYPE3, ACMOVLGE,
- "CMOVLGT", LTYPE3, ACMOVLGT,
- "CMOVLHI", LTYPE3, ACMOVLHI,
- "CMOVLLE", LTYPE3, ACMOVLLE,
- "CMOVLLS", LTYPE3, ACMOVLLS,
- "CMOVLLT", LTYPE3, ACMOVLLT,
- "CMOVLMI", LTYPE3, ACMOVLMI,
- "CMOVLNE", LTYPE3, ACMOVLNE,
- "CMOVLOC", LTYPE3, ACMOVLOC,
- "CMOVLOS", LTYPE3, ACMOVLOS,
- "CMOVLPC", LTYPE3, ACMOVLPC,
- "CMOVLPL", LTYPE3, ACMOVLPL,
- "CMOVLPS", LTYPE3, ACMOVLPS,
- "CMOVWCC", LTYPE3, ACMOVWCC,
- "CMOVWCS", LTYPE3, ACMOVWCS,
- "CMOVWEQ", LTYPE3, ACMOVWEQ,
- "CMOVWGE", LTYPE3, ACMOVWGE,
- "CMOVWGT", LTYPE3, ACMOVWGT,
- "CMOVWHI", LTYPE3, ACMOVWHI,
- "CMOVWLE", LTYPE3, ACMOVWLE,
- "CMOVWLS", LTYPE3, ACMOVWLS,
- "CMOVWLT", LTYPE3, ACMOVWLT,
- "CMOVWMI", LTYPE3, ACMOVWMI,
- "CMOVWNE", LTYPE3, ACMOVWNE,
- "CMOVWOC", LTYPE3, ACMOVWOC,
- "CMOVWOS", LTYPE3, ACMOVWOS,
- "CMOVWPC", LTYPE3, ACMOVWPC,
- "CMOVWPL", LTYPE3, ACMOVWPL,
- "CMOVWPS", LTYPE3, ACMOVWPS,
-
- "FMOVB", LTYPE3, AFMOVB,
- "FMOVBP", LTYPE3, AFMOVBP,
- "FMOVD", LTYPE3, AFMOVD,
- "FMOVDP", LTYPE3, AFMOVDP,
- "FMOVF", LTYPE3, AFMOVF,
- "FMOVFP", LTYPE3, AFMOVFP,
- "FMOVL", LTYPE3, AFMOVL,
- "FMOVLP", LTYPE3, AFMOVLP,
- "FMOVV", LTYPE3, AFMOVV,
- "FMOVVP", LTYPE3, AFMOVVP,
- "FMOVW", LTYPE3, AFMOVW,
- "FMOVWP", LTYPE3, AFMOVWP,
- "FMOVX", LTYPE3, AFMOVX,
- "FMOVXP", LTYPE3, AFMOVXP,
- "FCMOVCC", LTYPE3, AFCMOVCC,
- "FCMOVCS", LTYPE3, AFCMOVCS,
- "FCMOVEQ", LTYPE3, AFCMOVEQ,
- "FCMOVHI", LTYPE3, AFCMOVHI,
- "FCMOVLS", LTYPE3, AFCMOVLS,
- "FCMOVNE", LTYPE3, AFCMOVNE,
- "FCMOVNU", LTYPE3, AFCMOVNU,
- "FCMOVUN", LTYPE3, AFCMOVUN,
- "FCOMB", LTYPE3, AFCOMB,
- "FCOMBP", LTYPE3, AFCOMBP,
- "FCOMD", LTYPE3, AFCOMD,
- "FCOMDP", LTYPE3, AFCOMDP,
- "FCOMDPP", LTYPE3, AFCOMDPP,
- "FCOMF", LTYPE3, AFCOMF,
- "FCOMFP", LTYPE3, AFCOMFP,
- "FCOMI", LTYPE3, AFCOMI,
- "FCOMIP", LTYPE3, AFCOMIP,
- "FCOML", LTYPE3, AFCOML,
- "FCOMLP", LTYPE3, AFCOMLP,
- "FCOMW", LTYPE3, AFCOMW,
- "FCOMWP", LTYPE3, AFCOMWP,
- "FUCOM", LTYPE3, AFUCOM,
- "FUCOMI", LTYPE3, AFUCOMI,
- "FUCOMIP", LTYPE3, AFUCOMIP,
- "FUCOMP", LTYPE3, AFUCOMP,
- "FUCOMPP", LTYPE3, AFUCOMPP,
- "FADDW", LTYPE3, AFADDW,
- "FADDL", LTYPE3, AFADDL,
- "FADDF", LTYPE3, AFADDF,
- "FADDD", LTYPE3, AFADDD,
- "FADDDP", LTYPE3, AFADDDP,
- "FSUBDP", LTYPE3, AFSUBDP,
- "FSUBW", LTYPE3, AFSUBW,
- "FSUBL", LTYPE3, AFSUBL,
- "FSUBF", LTYPE3, AFSUBF,
- "FSUBD", LTYPE3, AFSUBD,
- "FSUBRDP", LTYPE3, AFSUBRDP,
- "FSUBRW", LTYPE3, AFSUBRW,
- "FSUBRL", LTYPE3, AFSUBRL,
- "FSUBRF", LTYPE3, AFSUBRF,
- "FSUBRD", LTYPE3, AFSUBRD,
- "FMULDP", LTYPE3, AFMULDP,
- "FMULW", LTYPE3, AFMULW,
- "FMULL", LTYPE3, AFMULL,
- "FMULF", LTYPE3, AFMULF,
- "FMULD", LTYPE3, AFMULD,
- "FDIVDP", LTYPE3, AFDIVDP,
- "FDIVW", LTYPE3, AFDIVW,
- "FDIVL", LTYPE3, AFDIVL,
- "FDIVF", LTYPE3, AFDIVF,
- "FDIVD", LTYPE3, AFDIVD,
- "FDIVRDP", LTYPE3, AFDIVRDP,
- "FDIVRW", LTYPE3, AFDIVRW,
- "FDIVRL", LTYPE3, AFDIVRL,
- "FDIVRF", LTYPE3, AFDIVRF,
- "FDIVRD", LTYPE3, AFDIVRD,
- "FXCHD", LTYPE3, AFXCHD,
- "FFREE", LTYPE1, AFFREE,
- "FLDCW", LTYPE2, AFLDCW,
- "FLDENV", LTYPE1, AFLDENV,
- "FRSTOR", LTYPE2, AFRSTOR,
- "FSAVE", LTYPE1, AFSAVE,
- "FSTCW", LTYPE1, AFSTCW,
- "FSTENV", LTYPE1, AFSTENV,
- "FSTSW", LTYPE1, AFSTSW,
- "F2XM1", LTYPE0, AF2XM1,
- "FABS", LTYPE0, AFABS,
- "FCHS", LTYPE0, AFCHS,
- "FCLEX", LTYPE0, AFCLEX,
- "FCOS", LTYPE0, AFCOS,
- "FDECSTP", LTYPE0, AFDECSTP,
- "FINCSTP", LTYPE0, AFINCSTP,
- "FINIT", LTYPE0, AFINIT,
- "FLD1", LTYPE0, AFLD1,
- "FLDL2E", LTYPE0, AFLDL2E,
- "FLDL2T", LTYPE0, AFLDL2T,
- "FLDLG2", LTYPE0, AFLDLG2,
- "FLDLN2", LTYPE0, AFLDLN2,
- "FLDPI", LTYPE0, AFLDPI,
- "FLDZ", LTYPE0, AFLDZ,
- "FNOP", LTYPE0, AFNOP,
- "FPATAN", LTYPE0, AFPATAN,
- "FPREM", LTYPE0, AFPREM,
- "FPREM1", LTYPE0, AFPREM1,
- "FPTAN", LTYPE0, AFPTAN,
- "FRNDINT", LTYPE0, AFRNDINT,
- "FSCALE", LTYPE0, AFSCALE,
- "FSIN", LTYPE0, AFSIN,
- "FSINCOS", LTYPE0, AFSINCOS,
- "FSQRT", LTYPE0, AFSQRT,
- "FTST", LTYPE0, AFTST,
- "FXAM", LTYPE0, AFXAM,
- "FXTRACT", LTYPE0, AFXTRACT,
- "FYL2X", LTYPE0, AFYL2X,
- "FYL2XP1", LTYPE0, AFYL2XP1,
- "LFENCE", LTYPE0, ALFENCE,
- "MFENCE", LTYPE0, AMFENCE,
- "SFENCE", LTYPE0, ASFENCE,
- "EMMS", LTYPE0, AEMMS,
- "PREFETCHT0", LTYPE2, APREFETCHT0,
- "PREFETCHT1", LTYPE2, APREFETCHT1,
- "PREFETCHT2", LTYPE2, APREFETCHT2,
- "PREFETCHNTA", LTYPE2, APREFETCHNTA,
- "UNDEF", LTYPE0, AUNDEF,
-
- "ADDPD", LTYPE3, AADDPD,
- "ADDPS", LTYPE3, AADDPS,
- "ADDSD", LTYPE3, AADDSD,
- "ADDSS", LTYPE3, AADDSS,
- "AESENC", LTYPE3, AAESENC,
- "ANDNPD", LTYPE3, AANDNPD,
- "ANDNPS", LTYPE3, AANDNPS,
- "ANDPD", LTYPE3, AANDPD,
- "ANDPS", LTYPE3, AANDPS,
- "CMPPD", LTYPEXC,ACMPPD,
- "CMPPS", LTYPEXC,ACMPPS,
- "CMPSD", LTYPEXC,ACMPSD,
- "CMPSS", LTYPEXC,ACMPSS,
- "COMISD", LTYPE3, ACOMISD,
- "COMISS", LTYPE3, ACOMISS,
- "CVTPL2PD", LTYPE3, ACVTPL2PD,
- "CVTPL2PS", LTYPE3, ACVTPL2PS,
- "CVTPD2PL", LTYPE3, ACVTPD2PL,
- "CVTPD2PS", LTYPE3, ACVTPD2PS,
- "CVTPS2PL", LTYPE3, ACVTPS2PL,
- "CVTPS2PD", LTYPE3, ACVTPS2PD,
- "CVTSD2SL", LTYPE3, ACVTSD2SL,
- "CVTSD2SS", LTYPE3, ACVTSD2SS,
- "CVTSL2SD", LTYPE3, ACVTSL2SD,
- "CVTSL2SS", LTYPE3, ACVTSL2SS,
- "CVTSS2SD", LTYPE3, ACVTSS2SD,
- "CVTSS2SL", LTYPE3, ACVTSS2SL,
- "CVTTPD2PL", LTYPE3, ACVTTPD2PL,
- "CVTTPS2PL", LTYPE3, ACVTTPS2PL,
- "CVTTSD2SL", LTYPE3, ACVTTSD2SL,
- "CVTTSS2SL", LTYPE3, ACVTTSS2SL,
- "DIVPD", LTYPE3, ADIVPD,
- "DIVPS", LTYPE3, ADIVPS,
- "DIVSD", LTYPE3, ADIVSD,
- "DIVSS", LTYPE3, ADIVSS,
- "MASKMOVOU", LTYPE3, AMASKMOVOU,
- "MASKMOVDQU", LTYPE3, AMASKMOVOU, /* syn */
- "MAXPD", LTYPE3, AMAXPD,
- "MAXPS", LTYPE3, AMAXPS,
- "MAXSD", LTYPE3, AMAXSD,
- "MAXSS", LTYPE3, AMAXSS,
- "MINPD", LTYPE3, AMINPD,
- "MINPS", LTYPE3, AMINPS,
- "MINSD", LTYPE3, AMINSD,
- "MINSS", LTYPE3, AMINSS,
- "MOVAPD", LTYPE3, AMOVAPD,
- "MOVAPS", LTYPE3, AMOVAPS,
- "MOVO", LTYPE3, AMOVO,
- "MOVOA", LTYPE3, AMOVO, /* syn */
- "MOVOU", LTYPE3, AMOVOU,
- "MOVHLPS", LTYPE3, AMOVHLPS,
- "MOVHPD", LTYPE3, AMOVHPD,
- "MOVHPS", LTYPE3, AMOVHPS,
- "MOVLHPS", LTYPE3, AMOVLHPS,
- "MOVLPD", LTYPE3, AMOVLPD,
- "MOVLPS", LTYPE3, AMOVLPS,
- "MOVMSKPD", LTYPE3, AMOVMSKPD,
- "MOVMSKPS", LTYPE3, AMOVMSKPS,
- "MOVNTO", LTYPE3, AMOVNTO,
- "MOVNTDQ", LTYPE3, AMOVNTO, /* syn */
- "MOVNTPD", LTYPE3, AMOVNTPD,
- "MOVNTPS", LTYPE3, AMOVNTPS,
- "MOVSD", LTYPE3, AMOVSD,
- "MOVSS", LTYPE3, AMOVSS,
- "MOVUPD", LTYPE3, AMOVUPD,
- "MOVUPS", LTYPE3, AMOVUPS,
- "MULPD", LTYPE3, AMULPD,
- "MULPS", LTYPE3, AMULPS,
- "MULSD", LTYPE3, AMULSD,
- "MULSS", LTYPE3, AMULSS,
- "ORPD", LTYPE3, AORPD,
- "ORPS", LTYPE3, AORPS,
- "PADDQ", LTYPE3, APADDQ,
- "PAND", LTYPE3, APAND,
- "PCMPEQB", LTYPE3, APCMPEQB,
- "PMAXSW", LTYPE3, APMAXSW,
- "PMAXUB", LTYPE3, APMAXUB,
- "PMINSW", LTYPE3, APMINSW,
- "PMINUB", LTYPE3, APMINUB,
- "PMOVMSKB", LTYPE3, APMOVMSKB,
- "PSADBW", LTYPE3, APSADBW,
- "PSHUFB", LTYPE3, APSHUFB,
- "PSHUFHW", LTYPEX, APSHUFHW,
- "PSHUFL", LTYPEX, APSHUFL,
- "PSHUFLW", LTYPEX, APSHUFLW,
- "PSUBB", LTYPE3, APSUBB,
- "PSUBL", LTYPE3, APSUBL,
- "PSUBQ", LTYPE3, APSUBQ,
- "PSUBSB", LTYPE3, APSUBSB,
- "PSUBSW", LTYPE3, APSUBSW,
- "PSUBUSB", LTYPE3, APSUBUSB,
- "PSUBUSW", LTYPE3, APSUBUSW,
- "PSUBW", LTYPE3, APSUBW,
- "PUNPCKHQDQ", LTYPE3, APUNPCKHQDQ,
- "PUNPCKLQDQ", LTYPE3, APUNPCKLQDQ,
- "PXOR", LTYPE3, APXOR,
- "RCPPS", LTYPE3, ARCPPS,
- "RCPSS", LTYPE3, ARCPSS,
- "RSQRTPS", LTYPE3, ARSQRTPS,
- "RSQRTSS", LTYPE3, ARSQRTSS,
- "SQRTPD", LTYPE3, ASQRTPD,
- "SQRTPS", LTYPE3, ASQRTPS,
- "SQRTSD", LTYPE3, ASQRTSD,
- "SQRTSS", LTYPE3, ASQRTSS,
- "SUBPD", LTYPE3, ASUBPD,
- "SUBPS", LTYPE3, ASUBPS,
- "SUBSD", LTYPE3, ASUBSD,
- "SUBSS", LTYPE3, ASUBSS,
- "UCOMISD", LTYPE3, AUCOMISD,
- "UCOMISS", LTYPE3, AUCOMISS,
- "UNPCKHPD", LTYPE3, AUNPCKHPD,
- "UNPCKHPS", LTYPE3, AUNPCKHPS,
- "UNPCKLPD", LTYPE3, AUNPCKLPD,
- "UNPCKLPS", LTYPE3, AUNPCKLPS,
- "XORPD", LTYPE3, AXORPD,
- "XORPS", LTYPE3, AXORPS,
- "USEFIELD", LTYPEN, AUSEFIELD,
- "PCDATA", LTYPEPC, APCDATA,
- "FUNCDATA", LTYPEF, AFUNCDATA,
- 0
-};
-
-void
-cinit(void)
-{
- Sym *s;
- int i;
-
- nullgen.type = TYPE_NONE;
- nullgen.index = TYPE_NONE;
-
- nerrors = 0;
- iostack = I;
- iofree = I;
- peekc = IGN;
- nhunk = 0;
- for(i=0; i<NHASH; i++)
- hash[i] = S;
- for(i=0; itab[i].name; i++) {
- s = slookup(itab[i].name);
- if(s->type != LNAME)
- yyerror("double initialization %s", itab[i].name);
- s->type = itab[i].type;
- s->value = itab[i].value;
- }
-}
-
-void
-checkscale(int scale)
-{
-
- switch(scale) {
- case 1:
- case 2:
- case 4:
- case 8:
- return;
- }
- yyerror("scale must be 1248: %d", scale);
-}
-
-void
-syminit(Sym *s)
-{
-
- s->type = LNAME;
- s->value = 0;
-}
-
-void
-cclean(void)
-{
- Addr2 g2;
-
- g2.from = nullgen;
- g2.to = nullgen;
- outcode(AEND, &g2);
-}
-
-void
-outcode(int a, Addr2 *g2)
-{
- Prog *p;
- Plist *pl;
-
- if(pass == 1)
- goto out;
-
- p = malloc(sizeof *p);
- memset(p, 0, sizeof *p);
- p->as = a;
- p->lineno = stmtline;
- p->from = g2->from;
- p->to = g2->to;
- p->pc = pc;
-
- if(lastpc == nil) {
- pl = linknewplist(ctxt);
- pl->firstpc = p;
- } else
- lastpc->link = p;
- lastpc = p;
-
-out:
- if(a != AGLOBL && a != ADATA)
- pc++;
-}
-
-#include "../cc/lexbody"
-#include "../cc/macbody"