| // 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. |
| |
| //go:generate go tool yacc a.y |
| |
| package main |
| |
| import ( |
| "cmd/internal/asm" |
| "cmd/internal/obj" |
| "cmd/internal/obj/i386" |
| ) |
| |
| var ( |
| yyerror = asm.Yyerror |
| nullgen obj.Addr |
| stmtline int32 |
| ) |
| |
| func main() { |
| cinit() |
| |
| asm.LSCONST = LSCONST |
| asm.LCONST = LCONST |
| asm.LFCONST = LFCONST |
| asm.LNAME = LNAME |
| asm.LVAR = LVAR |
| asm.LLAB = LLAB |
| |
| asm.Lexinit = lexinit |
| asm.Cclean = cclean |
| asm.Yyparse = yyparse |
| |
| asm.Thechar = '8' |
| asm.Thestring = "386" |
| asm.Thelinkarch = &i386.Link386 |
| |
| asm.Main() |
| } |
| |
| type yy struct{} |
| |
| func (yy) Lex(v *yySymType) int { |
| var av asm.Yylval |
| tok := asm.Yylex(&av) |
| v.sym = av.Sym |
| v.lval = av.Lval |
| v.sval = av.Sval |
| v.dval = av.Dval |
| return tok |
| } |
| |
| func (yy) Error(msg string) { |
| asm.Yyerror("%s", msg) |
| } |
| |
| func yyparse() { |
| yyParse(yy{}) |
| } |
| |
| var lexinit = []asm.Lextab{ |
| {"SP", LSP, i386.D_AUTO}, |
| {"SB", LSB, i386.D_EXTERN}, |
| {"FP", LFP, i386.D_PARAM}, |
| {"PC", LPC, i386.D_BRANCH}, |
| {"AL", LBREG, i386.D_AL}, |
| {"CL", LBREG, i386.D_CL}, |
| {"DL", LBREG, i386.D_DL}, |
| {"BL", LBREG, i386.D_BL}, |
| {"AH", LBREG, i386.D_AH}, |
| {"CH", LBREG, i386.D_CH}, |
| {"DH", LBREG, i386.D_DH}, |
| {"BH", LBREG, i386.D_BH}, |
| {"AX", LLREG, i386.D_AX}, |
| {"CX", LLREG, i386.D_CX}, |
| {"DX", LLREG, i386.D_DX}, |
| {"BX", LLREG, i386.D_BX}, |
| /* "SP", LLREG, D_SP, */ |
| {"BP", LLREG, i386.D_BP}, |
| {"SI", LLREG, i386.D_SI}, |
| {"DI", LLREG, i386.D_DI}, |
| {"F0", LFREG, i386.D_F0 + 0}, |
| {"F1", LFREG, i386.D_F0 + 1}, |
| {"F2", LFREG, i386.D_F0 + 2}, |
| {"F3", LFREG, i386.D_F0 + 3}, |
| {"F4", LFREG, i386.D_F0 + 4}, |
| {"F5", LFREG, i386.D_F0 + 5}, |
| {"F6", LFREG, i386.D_F0 + 6}, |
| {"F7", LFREG, i386.D_F0 + 7}, |
| {"X0", LXREG, i386.D_X0 + 0}, |
| {"X1", LXREG, i386.D_X0 + 1}, |
| {"X2", LXREG, i386.D_X0 + 2}, |
| {"X3", LXREG, i386.D_X0 + 3}, |
| {"X4", LXREG, i386.D_X0 + 4}, |
| {"X5", LXREG, i386.D_X0 + 5}, |
| {"X6", LXREG, i386.D_X0 + 6}, |
| {"X7", LXREG, i386.D_X0 + 7}, |
| {"CS", LSREG, i386.D_CS}, |
| {"SS", LSREG, i386.D_SS}, |
| {"DS", LSREG, i386.D_DS}, |
| {"ES", LSREG, i386.D_ES}, |
| {"FS", LSREG, i386.D_FS}, |
| {"GS", LSREG, i386.D_GS}, |
| {"TLS", LSREG, i386.D_TLS}, |
| {"GDTR", LBREG, i386.D_GDTR}, |
| {"IDTR", LBREG, i386.D_IDTR}, |
| {"LDTR", LBREG, i386.D_LDTR}, |
| {"MSW", LBREG, i386.D_MSW}, |
| {"TASK", LBREG, i386.D_TASK}, |
| {"CR0", LBREG, i386.D_CR + 0}, |
| {"CR1", LBREG, i386.D_CR + 1}, |
| {"CR2", LBREG, i386.D_CR + 2}, |
| {"CR3", LBREG, i386.D_CR + 3}, |
| {"CR4", LBREG, i386.D_CR + 4}, |
| {"CR5", LBREG, i386.D_CR + 5}, |
| {"CR6", LBREG, i386.D_CR + 6}, |
| {"CR7", LBREG, i386.D_CR + 7}, |
| {"DR0", LBREG, i386.D_DR + 0}, |
| {"DR1", LBREG, i386.D_DR + 1}, |
| {"DR2", LBREG, i386.D_DR + 2}, |
| {"DR3", LBREG, i386.D_DR + 3}, |
| {"DR4", LBREG, i386.D_DR + 4}, |
| {"DR5", LBREG, i386.D_DR + 5}, |
| {"DR6", LBREG, i386.D_DR + 6}, |
| {"DR7", LBREG, i386.D_DR + 7}, |
| {"TR0", LBREG, i386.D_TR + 0}, |
| {"TR1", LBREG, i386.D_TR + 1}, |
| {"TR2", LBREG, i386.D_TR + 2}, |
| {"TR3", LBREG, i386.D_TR + 3}, |
| {"TR4", LBREG, i386.D_TR + 4}, |
| {"TR5", LBREG, i386.D_TR + 5}, |
| {"TR6", LBREG, i386.D_TR + 6}, |
| {"TR7", LBREG, i386.D_TR + 7}, |
| {"AAA", LTYPE0, i386.AAAA}, |
| {"AAD", LTYPE0, i386.AAAD}, |
| {"AAM", LTYPE0, i386.AAAM}, |
| {"AAS", LTYPE0, i386.AAAS}, |
| {"ADCB", LTYPE3, i386.AADCB}, |
| {"ADCL", LTYPE3, i386.AADCL}, |
| {"ADCW", LTYPE3, i386.AADCW}, |
| {"ADDB", LTYPE3, i386.AADDB}, |
| {"ADDL", LTYPE3, i386.AADDL}, |
| {"ADDW", LTYPE3, i386.AADDW}, |
| {"ADJSP", LTYPE2, i386.AADJSP}, |
| {"ANDB", LTYPE3, i386.AANDB}, |
| {"ANDL", LTYPE3, i386.AANDL}, |
| {"ANDW", LTYPE3, i386.AANDW}, |
| {"ARPL", LTYPE3, i386.AARPL}, |
| {"BOUNDL", LTYPE3, i386.ABOUNDL}, |
| {"BOUNDW", LTYPE3, i386.ABOUNDW}, |
| {"BSFL", LTYPE3, i386.ABSFL}, |
| {"BSFW", LTYPE3, i386.ABSFW}, |
| {"BSRL", LTYPE3, i386.ABSRL}, |
| {"BSRW", LTYPE3, i386.ABSRW}, |
| {"BSWAPL", LTYPE1, i386.ABSWAPL}, |
| {"BTCL", LTYPE3, i386.ABTCL}, |
| {"BTCW", LTYPE3, i386.ABTCW}, |
| {"BTL", LTYPE3, i386.ABTL}, |
| {"BTRL", LTYPE3, i386.ABTRL}, |
| {"BTRW", LTYPE3, i386.ABTRW}, |
| {"BTSL", LTYPE3, i386.ABTSL}, |
| {"BTSW", LTYPE3, i386.ABTSW}, |
| {"BTW", LTYPE3, i386.ABTW}, |
| {"BYTE", LTYPE2, i386.ABYTE}, |
| {"CALL", LTYPEC, i386.ACALL}, |
| {"CLC", LTYPE0, i386.ACLC}, |
| {"CLD", LTYPE0, i386.ACLD}, |
| {"CLI", LTYPE0, i386.ACLI}, |
| {"CLTS", LTYPE0, i386.ACLTS}, |
| {"CMC", LTYPE0, i386.ACMC}, |
| {"CMPB", LTYPE4, i386.ACMPB}, |
| {"CMPL", LTYPE4, i386.ACMPL}, |
| {"CMPW", LTYPE4, i386.ACMPW}, |
| {"CMPSB", LTYPE0, i386.ACMPSB}, |
| {"CMPSL", LTYPE0, i386.ACMPSL}, |
| {"CMPSW", LTYPE0, i386.ACMPSW}, |
| {"CMPXCHG8B", LTYPE1, i386.ACMPXCHG8B}, |
| {"CMPXCHGB", LTYPE3, i386.ACMPXCHGB}, |
| {"CMPXCHGL", LTYPE3, i386.ACMPXCHGL}, |
| {"CMPXCHGW", LTYPE3, i386.ACMPXCHGW}, |
| {"CPUID", LTYPE0, i386.ACPUID}, |
| {"DAA", LTYPE0, i386.ADAA}, |
| {"DAS", LTYPE0, i386.ADAS}, |
| {"DATA", LTYPED, i386.ADATA}, |
| {"DECB", LTYPE1, i386.ADECB}, |
| {"DECL", LTYPE1, i386.ADECL}, |
| {"DECW", LTYPE1, i386.ADECW}, |
| {"DIVB", LTYPE2, i386.ADIVB}, |
| {"DIVL", LTYPE2, i386.ADIVL}, |
| {"DIVW", LTYPE2, i386.ADIVW}, |
| {"END", LTYPE0, i386.AEND}, |
| {"ENTER", LTYPE2, i386.AENTER}, |
| {"GLOBL", LTYPEG, i386.AGLOBL}, |
| {"HLT", LTYPE0, i386.AHLT}, |
| {"IDIVB", LTYPE2, i386.AIDIVB}, |
| {"IDIVL", LTYPE2, i386.AIDIVL}, |
| {"IDIVW", LTYPE2, i386.AIDIVW}, |
| {"IMULB", LTYPE2, i386.AIMULB}, |
| {"IMULL", LTYPEI, i386.AIMULL}, |
| {"IMULW", LTYPEI, i386.AIMULW}, |
| {"INB", LTYPE0, i386.AINB}, |
| {"INL", LTYPE0, i386.AINL}, |
| {"INW", LTYPE0, i386.AINW}, |
| {"INCB", LTYPE1, i386.AINCB}, |
| {"INCL", LTYPE1, i386.AINCL}, |
| {"INCW", LTYPE1, i386.AINCW}, |
| {"INSB", LTYPE0, i386.AINSB}, |
| {"INSL", LTYPE0, i386.AINSL}, |
| {"INSW", LTYPE0, i386.AINSW}, |
| {"INT", LTYPE2, i386.AINT}, |
| {"INTO", LTYPE0, i386.AINTO}, |
| {"IRETL", LTYPE0, i386.AIRETL}, |
| {"IRETW", LTYPE0, i386.AIRETW}, |
| {"JOS", LTYPER, i386.AJOS}, /* overflow set (OF = 1) */ |
| {"JO", LTYPER, i386.AJOS}, /* alternate */ |
| {"JOC", LTYPER, i386.AJOC}, /* overflow clear (OF = 0) */ |
| {"JNO", LTYPER, i386.AJOC}, /* alternate */ |
| {"JCS", LTYPER, i386.AJCS}, /* carry set (CF = 1) */ |
| {"JB", LTYPER, i386.AJCS}, /* alternate */ |
| {"JC", LTYPER, i386.AJCS}, /* alternate */ |
| {"JNAE", LTYPER, i386.AJCS}, /* alternate */ |
| {"JLO", LTYPER, i386.AJCS}, /* alternate */ |
| {"JCC", LTYPER, i386.AJCC}, /* carry clear (CF = 0) */ |
| {"JAE", LTYPER, i386.AJCC}, /* alternate */ |
| {"JNB", LTYPER, i386.AJCC}, /* alternate */ |
| {"JNC", LTYPER, i386.AJCC}, /* alternate */ |
| {"JHS", LTYPER, i386.AJCC}, /* alternate */ |
| {"JEQ", LTYPER, i386.AJEQ}, /* equal (ZF = 1) */ |
| {"JE", LTYPER, i386.AJEQ}, /* alternate */ |
| {"JZ", LTYPER, i386.AJEQ}, /* alternate */ |
| {"JNE", LTYPER, i386.AJNE}, /* not equal (ZF = 0) */ |
| {"JNZ", LTYPER, i386.AJNE}, /* alternate */ |
| {"JLS", LTYPER, i386.AJLS}, /* lower or same (unsigned) (CF = 1 || ZF = 1) */ |
| {"JBE", LTYPER, i386.AJLS}, /* alternate */ |
| {"JNA", LTYPER, i386.AJLS}, /* alternate */ |
| {"JHI", LTYPER, i386.AJHI}, /* higher (unsigned) (CF = 0 && ZF = 0) */ |
| {"JA", LTYPER, i386.AJHI}, /* alternate */ |
| {"JNBE", LTYPER, i386.AJHI}, /* alternate */ |
| {"JMI", LTYPER, i386.AJMI}, /* negative (minus) (SF = 1) */ |
| {"JS", LTYPER, i386.AJMI}, /* alternate */ |
| {"JPL", LTYPER, i386.AJPL}, /* non-negative (plus) (SF = 0) */ |
| {"JNS", LTYPER, i386.AJPL}, /* alternate */ |
| {"JPS", LTYPER, i386.AJPS}, /* parity set (PF = 1) */ |
| {"JP", LTYPER, i386.AJPS}, /* alternate */ |
| {"JPE", LTYPER, i386.AJPS}, /* alternate */ |
| {"JPC", LTYPER, i386.AJPC}, /* parity clear (PF = 0) */ |
| {"JNP", LTYPER, i386.AJPC}, /* alternate */ |
| {"JPO", LTYPER, i386.AJPC}, /* alternate */ |
| {"JLT", LTYPER, i386.AJLT}, /* less than (signed) (SF != OF) */ |
| {"JL", LTYPER, i386.AJLT}, /* alternate */ |
| {"JNGE", LTYPER, i386.AJLT}, /* alternate */ |
| {"JGE", LTYPER, i386.AJGE}, /* greater than or equal (signed) (SF = OF) */ |
| {"JNL", LTYPER, i386.AJGE}, /* alternate */ |
| {"JLE", LTYPER, i386.AJLE}, /* less than or equal (signed) (ZF = 1 || SF != OF) */ |
| {"JNG", LTYPER, i386.AJLE}, /* alternate */ |
| {"JGT", LTYPER, i386.AJGT}, /* greater than (signed) (ZF = 0 && SF = OF) */ |
| {"JG", LTYPER, i386.AJGT}, /* alternate */ |
| {"JNLE", LTYPER, i386.AJGT}, /* alternate */ |
| {"JCXZL", LTYPER, i386.AJCXZL}, |
| {"JCXZW", LTYPER, i386.AJCXZW}, |
| {"JMP", LTYPEC, i386.AJMP}, |
| {"LAHF", LTYPE0, i386.ALAHF}, |
| {"LARL", LTYPE3, i386.ALARL}, |
| {"LARW", LTYPE3, i386.ALARW}, |
| {"LEAL", LTYPE3, i386.ALEAL}, |
| {"LEAW", LTYPE3, i386.ALEAW}, |
| {"LEAVEL", LTYPE0, i386.ALEAVEL}, |
| {"LEAVEW", LTYPE0, i386.ALEAVEW}, |
| {"LOCK", LTYPE0, i386.ALOCK}, |
| {"LODSB", LTYPE0, i386.ALODSB}, |
| {"LODSL", LTYPE0, i386.ALODSL}, |
| {"LODSW", LTYPE0, i386.ALODSW}, |
| {"LONG", LTYPE2, i386.ALONG}, |
| {"LOOP", LTYPER, i386.ALOOP}, |
| {"LOOPEQ", LTYPER, i386.ALOOPEQ}, |
| {"LOOPNE", LTYPER, i386.ALOOPNE}, |
| {"LSLL", LTYPE3, i386.ALSLL}, |
| {"LSLW", LTYPE3, i386.ALSLW}, |
| {"MOVB", LTYPE3, i386.AMOVB}, |
| {"MOVL", LTYPEM, i386.AMOVL}, |
| {"MOVW", LTYPEM, i386.AMOVW}, |
| {"MOVQ", LTYPEM, i386.AMOVQ}, |
| {"MOVBLSX", LTYPE3, i386.AMOVBLSX}, |
| {"MOVBLZX", LTYPE3, i386.AMOVBLZX}, |
| {"MOVBWSX", LTYPE3, i386.AMOVBWSX}, |
| {"MOVBWZX", LTYPE3, i386.AMOVBWZX}, |
| {"MOVWLSX", LTYPE3, i386.AMOVWLSX}, |
| {"MOVWLZX", LTYPE3, i386.AMOVWLZX}, |
| {"MOVSB", LTYPE0, i386.AMOVSB}, |
| {"MOVSL", LTYPE0, i386.AMOVSL}, |
| {"MOVSW", LTYPE0, i386.AMOVSW}, |
| {"MULB", LTYPE2, i386.AMULB}, |
| {"MULL", LTYPE2, i386.AMULL}, |
| {"MULW", LTYPE2, i386.AMULW}, |
| {"NEGB", LTYPE1, i386.ANEGB}, |
| {"NEGL", LTYPE1, i386.ANEGL}, |
| {"NEGW", LTYPE1, i386.ANEGW}, |
| {"NOP", LTYPEN, i386.ANOP}, |
| {"NOTB", LTYPE1, i386.ANOTB}, |
| {"NOTL", LTYPE1, i386.ANOTL}, |
| {"NOTW", LTYPE1, i386.ANOTW}, |
| {"ORB", LTYPE3, i386.AORB}, |
| {"ORL", LTYPE3, i386.AORL}, |
| {"ORW", LTYPE3, i386.AORW}, |
| {"OUTB", LTYPE0, i386.AOUTB}, |
| {"OUTL", LTYPE0, i386.AOUTL}, |
| {"OUTW", LTYPE0, i386.AOUTW}, |
| {"OUTSB", LTYPE0, i386.AOUTSB}, |
| {"OUTSL", LTYPE0, i386.AOUTSL}, |
| {"OUTSW", LTYPE0, i386.AOUTSW}, |
| {"PAUSE", LTYPEN, i386.APAUSE}, |
| {"PINSRD", LTYPEX, i386.APINSRD}, |
| {"POPAL", LTYPE0, i386.APOPAL}, |
| {"POPAW", LTYPE0, i386.APOPAW}, |
| {"POPFL", LTYPE0, i386.APOPFL}, |
| {"POPFW", LTYPE0, i386.APOPFW}, |
| {"POPL", LTYPE1, i386.APOPL}, |
| {"POPW", LTYPE1, i386.APOPW}, |
| {"PUSHAL", LTYPE0, i386.APUSHAL}, |
| {"PUSHAW", LTYPE0, i386.APUSHAW}, |
| {"PUSHFL", LTYPE0, i386.APUSHFL}, |
| {"PUSHFW", LTYPE0, i386.APUSHFW}, |
| {"PUSHL", LTYPE2, i386.APUSHL}, |
| {"PUSHW", LTYPE2, i386.APUSHW}, |
| {"RCLB", LTYPE3, i386.ARCLB}, |
| {"RCLL", LTYPE3, i386.ARCLL}, |
| {"RCLW", LTYPE3, i386.ARCLW}, |
| {"RCRB", LTYPE3, i386.ARCRB}, |
| {"RCRL", LTYPE3, i386.ARCRL}, |
| {"RCRW", LTYPE3, i386.ARCRW}, |
| {"RDTSC", LTYPE0, i386.ARDTSC}, |
| {"REP", LTYPE0, i386.AREP}, |
| {"REPN", LTYPE0, i386.AREPN}, |
| {"RET", LTYPE0, i386.ARET}, |
| {"ROLB", LTYPE3, i386.AROLB}, |
| {"ROLL", LTYPE3, i386.AROLL}, |
| {"ROLW", LTYPE3, i386.AROLW}, |
| {"RORB", LTYPE3, i386.ARORB}, |
| {"RORL", LTYPE3, i386.ARORL}, |
| {"RORW", LTYPE3, i386.ARORW}, |
| {"SAHF", LTYPE0, i386.ASAHF}, |
| {"SALB", LTYPE3, i386.ASALB}, |
| {"SALL", LTYPE3, i386.ASALL}, |
| {"SALW", LTYPE3, i386.ASALW}, |
| {"SARB", LTYPE3, i386.ASARB}, |
| {"SARL", LTYPE3, i386.ASARL}, |
| {"SARW", LTYPE3, i386.ASARW}, |
| {"SBBB", LTYPE3, i386.ASBBB}, |
| {"SBBL", LTYPE3, i386.ASBBL}, |
| {"SBBW", LTYPE3, i386.ASBBW}, |
| {"SCASB", LTYPE0, i386.ASCASB}, |
| {"SCASL", LTYPE0, i386.ASCASL}, |
| {"SCASW", LTYPE0, i386.ASCASW}, |
| {"SETCC", LTYPE1, i386.ASETCC}, /* see JCC etc above for condition codes */ |
| {"SETCS", LTYPE1, i386.ASETCS}, |
| {"SETEQ", LTYPE1, i386.ASETEQ}, |
| {"SETGE", LTYPE1, i386.ASETGE}, |
| {"SETGT", LTYPE1, i386.ASETGT}, |
| {"SETHI", LTYPE1, i386.ASETHI}, |
| {"SETLE", LTYPE1, i386.ASETLE}, |
| {"SETLS", LTYPE1, i386.ASETLS}, |
| {"SETLT", LTYPE1, i386.ASETLT}, |
| {"SETMI", LTYPE1, i386.ASETMI}, |
| {"SETNE", LTYPE1, i386.ASETNE}, |
| {"SETOC", LTYPE1, i386.ASETOC}, |
| {"SETOS", LTYPE1, i386.ASETOS}, |
| {"SETPC", LTYPE1, i386.ASETPC}, |
| {"SETPL", LTYPE1, i386.ASETPL}, |
| {"SETPS", LTYPE1, i386.ASETPS}, |
| {"CDQ", LTYPE0, i386.ACDQ}, |
| {"CWD", LTYPE0, i386.ACWD}, |
| {"SHLB", LTYPE3, i386.ASHLB}, |
| {"SHLL", LTYPES, i386.ASHLL}, |
| {"SHLW", LTYPES, i386.ASHLW}, |
| {"SHRB", LTYPE3, i386.ASHRB}, |
| {"SHRL", LTYPES, i386.ASHRL}, |
| {"SHRW", LTYPES, i386.ASHRW}, |
| {"STC", LTYPE0, i386.ASTC}, |
| {"STD", LTYPE0, i386.ASTD}, |
| {"STI", LTYPE0, i386.ASTI}, |
| {"STOSB", LTYPE0, i386.ASTOSB}, |
| {"STOSL", LTYPE0, i386.ASTOSL}, |
| {"STOSW", LTYPE0, i386.ASTOSW}, |
| {"SUBB", LTYPE3, i386.ASUBB}, |
| {"SUBL", LTYPE3, i386.ASUBL}, |
| {"SUBW", LTYPE3, i386.ASUBW}, |
| {"SYSCALL", LTYPE0, i386.ASYSCALL}, |
| {"TESTB", LTYPE3, i386.ATESTB}, |
| {"TESTL", LTYPE3, i386.ATESTL}, |
| {"TESTW", LTYPE3, i386.ATESTW}, |
| {"TEXT", LTYPET, i386.ATEXT}, |
| {"VERR", LTYPE2, i386.AVERR}, |
| {"VERW", LTYPE2, i386.AVERW}, |
| {"WAIT", LTYPE0, i386.AWAIT}, |
| {"WORD", LTYPE2, i386.AWORD}, |
| {"XADDB", LTYPE3, i386.AXADDB}, |
| {"XADDL", LTYPE3, i386.AXADDL}, |
| {"XADDW", LTYPE3, i386.AXADDW}, |
| {"XCHGB", LTYPE3, i386.AXCHGB}, |
| {"XCHGL", LTYPE3, i386.AXCHGL}, |
| {"XCHGW", LTYPE3, i386.AXCHGW}, |
| {"XLAT", LTYPE2, i386.AXLAT}, |
| {"XORB", LTYPE3, i386.AXORB}, |
| {"XORL", LTYPE3, i386.AXORL}, |
| {"XORW", LTYPE3, i386.AXORW}, |
| {"CMOVLCC", LTYPE3, i386.ACMOVLCC}, |
| {"CMOVLCS", LTYPE3, i386.ACMOVLCS}, |
| {"CMOVLEQ", LTYPE3, i386.ACMOVLEQ}, |
| {"CMOVLGE", LTYPE3, i386.ACMOVLGE}, |
| {"CMOVLGT", LTYPE3, i386.ACMOVLGT}, |
| {"CMOVLHI", LTYPE3, i386.ACMOVLHI}, |
| {"CMOVLLE", LTYPE3, i386.ACMOVLLE}, |
| {"CMOVLLS", LTYPE3, i386.ACMOVLLS}, |
| {"CMOVLLT", LTYPE3, i386.ACMOVLLT}, |
| {"CMOVLMI", LTYPE3, i386.ACMOVLMI}, |
| {"CMOVLNE", LTYPE3, i386.ACMOVLNE}, |
| {"CMOVLOC", LTYPE3, i386.ACMOVLOC}, |
| {"CMOVLOS", LTYPE3, i386.ACMOVLOS}, |
| {"CMOVLPC", LTYPE3, i386.ACMOVLPC}, |
| {"CMOVLPL", LTYPE3, i386.ACMOVLPL}, |
| {"CMOVLPS", LTYPE3, i386.ACMOVLPS}, |
| {"CMOVWCC", LTYPE3, i386.ACMOVWCC}, |
| {"CMOVWCS", LTYPE3, i386.ACMOVWCS}, |
| {"CMOVWEQ", LTYPE3, i386.ACMOVWEQ}, |
| {"CMOVWGE", LTYPE3, i386.ACMOVWGE}, |
| {"CMOVWGT", LTYPE3, i386.ACMOVWGT}, |
| {"CMOVWHI", LTYPE3, i386.ACMOVWHI}, |
| {"CMOVWLE", LTYPE3, i386.ACMOVWLE}, |
| {"CMOVWLS", LTYPE3, i386.ACMOVWLS}, |
| {"CMOVWLT", LTYPE3, i386.ACMOVWLT}, |
| {"CMOVWMI", LTYPE3, i386.ACMOVWMI}, |
| {"CMOVWNE", LTYPE3, i386.ACMOVWNE}, |
| {"CMOVWOC", LTYPE3, i386.ACMOVWOC}, |
| {"CMOVWOS", LTYPE3, i386.ACMOVWOS}, |
| {"CMOVWPC", LTYPE3, i386.ACMOVWPC}, |
| {"CMOVWPL", LTYPE3, i386.ACMOVWPL}, |
| {"CMOVWPS", LTYPE3, i386.ACMOVWPS}, |
| {"FMOVB", LTYPE3, i386.AFMOVB}, |
| {"FMOVBP", LTYPE3, i386.AFMOVBP}, |
| {"FMOVD", LTYPE3, i386.AFMOVD}, |
| {"FMOVDP", LTYPE3, i386.AFMOVDP}, |
| {"FMOVF", LTYPE3, i386.AFMOVF}, |
| {"FMOVFP", LTYPE3, i386.AFMOVFP}, |
| {"FMOVL", LTYPE3, i386.AFMOVL}, |
| {"FMOVLP", LTYPE3, i386.AFMOVLP}, |
| {"FMOVV", LTYPE3, i386.AFMOVV}, |
| {"FMOVVP", LTYPE3, i386.AFMOVVP}, |
| {"FMOVW", LTYPE3, i386.AFMOVW}, |
| {"FMOVWP", LTYPE3, i386.AFMOVWP}, |
| {"FMOVX", LTYPE3, i386.AFMOVX}, |
| {"FMOVXP", LTYPE3, i386.AFMOVXP}, |
| {"FCMOVCC", LTYPE3, i386.AFCMOVCC}, |
| {"FCMOVCS", LTYPE3, i386.AFCMOVCS}, |
| {"FCMOVEQ", LTYPE3, i386.AFCMOVEQ}, |
| {"FCMOVHI", LTYPE3, i386.AFCMOVHI}, |
| {"FCMOVLS", LTYPE3, i386.AFCMOVLS}, |
| {"FCMOVNE", LTYPE3, i386.AFCMOVNE}, |
| {"FCMOVNU", LTYPE3, i386.AFCMOVNU}, |
| {"FCMOVUN", LTYPE3, i386.AFCMOVUN}, |
| {"FCOMB", LTYPE3, i386.AFCOMB}, |
| {"FCOMBP", LTYPE3, i386.AFCOMBP}, |
| {"FCOMD", LTYPE3, i386.AFCOMD}, |
| {"FCOMDP", LTYPE3, i386.AFCOMDP}, |
| {"FCOMDPP", LTYPE3, i386.AFCOMDPP}, |
| {"FCOMF", LTYPE3, i386.AFCOMF}, |
| {"FCOMFP", LTYPE3, i386.AFCOMFP}, |
| {"FCOMI", LTYPE3, i386.AFCOMI}, |
| {"FCOMIP", LTYPE3, i386.AFCOMIP}, |
| {"FCOML", LTYPE3, i386.AFCOML}, |
| {"FCOMLP", LTYPE3, i386.AFCOMLP}, |
| {"FCOMW", LTYPE3, i386.AFCOMW}, |
| {"FCOMWP", LTYPE3, i386.AFCOMWP}, |
| {"FUCOM", LTYPE3, i386.AFUCOM}, |
| {"FUCOMI", LTYPE3, i386.AFUCOMI}, |
| {"FUCOMIP", LTYPE3, i386.AFUCOMIP}, |
| {"FUCOMP", LTYPE3, i386.AFUCOMP}, |
| {"FUCOMPP", LTYPE3, i386.AFUCOMPP}, |
| {"FADDW", LTYPE3, i386.AFADDW}, |
| {"FADDL", LTYPE3, i386.AFADDL}, |
| {"FADDF", LTYPE3, i386.AFADDF}, |
| {"FADDD", LTYPE3, i386.AFADDD}, |
| {"FADDDP", LTYPE3, i386.AFADDDP}, |
| {"FSUBDP", LTYPE3, i386.AFSUBDP}, |
| {"FSUBW", LTYPE3, i386.AFSUBW}, |
| {"FSUBL", LTYPE3, i386.AFSUBL}, |
| {"FSUBF", LTYPE3, i386.AFSUBF}, |
| {"FSUBD", LTYPE3, i386.AFSUBD}, |
| {"FSUBRDP", LTYPE3, i386.AFSUBRDP}, |
| {"FSUBRW", LTYPE3, i386.AFSUBRW}, |
| {"FSUBRL", LTYPE3, i386.AFSUBRL}, |
| {"FSUBRF", LTYPE3, i386.AFSUBRF}, |
| {"FSUBRD", LTYPE3, i386.AFSUBRD}, |
| {"FMULDP", LTYPE3, i386.AFMULDP}, |
| {"FMULW", LTYPE3, i386.AFMULW}, |
| {"FMULL", LTYPE3, i386.AFMULL}, |
| {"FMULF", LTYPE3, i386.AFMULF}, |
| {"FMULD", LTYPE3, i386.AFMULD}, |
| {"FDIVDP", LTYPE3, i386.AFDIVDP}, |
| {"FDIVW", LTYPE3, i386.AFDIVW}, |
| {"FDIVL", LTYPE3, i386.AFDIVL}, |
| {"FDIVF", LTYPE3, i386.AFDIVF}, |
| {"FDIVD", LTYPE3, i386.AFDIVD}, |
| {"FDIVRDP", LTYPE3, i386.AFDIVRDP}, |
| {"FDIVRW", LTYPE3, i386.AFDIVRW}, |
| {"FDIVRL", LTYPE3, i386.AFDIVRL}, |
| {"FDIVRF", LTYPE3, i386.AFDIVRF}, |
| {"FDIVRD", LTYPE3, i386.AFDIVRD}, |
| {"FXCHD", LTYPE3, i386.AFXCHD}, |
| {"FFREE", LTYPE1, i386.AFFREE}, |
| {"FLDCW", LTYPE2, i386.AFLDCW}, |
| {"FLDENV", LTYPE1, i386.AFLDENV}, |
| {"FRSTOR", LTYPE2, i386.AFRSTOR}, |
| {"FSAVE", LTYPE1, i386.AFSAVE}, |
| {"FSTCW", LTYPE1, i386.AFSTCW}, |
| {"FSTENV", LTYPE1, i386.AFSTENV}, |
| {"FSTSW", LTYPE1, i386.AFSTSW}, |
| {"F2XM1", LTYPE0, i386.AF2XM1}, |
| {"FABS", LTYPE0, i386.AFABS}, |
| {"FCHS", LTYPE0, i386.AFCHS}, |
| {"FCLEX", LTYPE0, i386.AFCLEX}, |
| {"FCOS", LTYPE0, i386.AFCOS}, |
| {"FDECSTP", LTYPE0, i386.AFDECSTP}, |
| {"FINCSTP", LTYPE0, i386.AFINCSTP}, |
| {"FINIT", LTYPE0, i386.AFINIT}, |
| {"FLD1", LTYPE0, i386.AFLD1}, |
| {"FLDL2E", LTYPE0, i386.AFLDL2E}, |
| {"FLDL2T", LTYPE0, i386.AFLDL2T}, |
| {"FLDLG2", LTYPE0, i386.AFLDLG2}, |
| {"FLDLN2", LTYPE0, i386.AFLDLN2}, |
| {"FLDPI", LTYPE0, i386.AFLDPI}, |
| {"FLDZ", LTYPE0, i386.AFLDZ}, |
| {"FNOP", LTYPE0, i386.AFNOP}, |
| {"FPATAN", LTYPE0, i386.AFPATAN}, |
| {"FPREM", LTYPE0, i386.AFPREM}, |
| {"FPREM1", LTYPE0, i386.AFPREM1}, |
| {"FPTAN", LTYPE0, i386.AFPTAN}, |
| {"FRNDINT", LTYPE0, i386.AFRNDINT}, |
| {"FSCALE", LTYPE0, i386.AFSCALE}, |
| {"FSIN", LTYPE0, i386.AFSIN}, |
| {"FSINCOS", LTYPE0, i386.AFSINCOS}, |
| {"FSQRT", LTYPE0, i386.AFSQRT}, |
| {"FTST", LTYPE0, i386.AFTST}, |
| {"FXAM", LTYPE0, i386.AFXAM}, |
| {"FXTRACT", LTYPE0, i386.AFXTRACT}, |
| {"FYL2X", LTYPE0, i386.AFYL2X}, |
| {"FYL2XP1", LTYPE0, i386.AFYL2XP1}, |
| {"LFENCE", LTYPE0, i386.ALFENCE}, |
| {"MFENCE", LTYPE0, i386.AMFENCE}, |
| {"SFENCE", LTYPE0, i386.ASFENCE}, |
| {"EMMS", LTYPE0, i386.AEMMS}, |
| {"PREFETCHT0", LTYPE2, i386.APREFETCHT0}, |
| {"PREFETCHT1", LTYPE2, i386.APREFETCHT1}, |
| {"PREFETCHT2", LTYPE2, i386.APREFETCHT2}, |
| {"PREFETCHNTA", LTYPE2, i386.APREFETCHNTA}, |
| {"UNDEF", LTYPE0, i386.AUNDEF}, |
| {"ADDPD", LTYPE3, i386.AADDPD}, |
| {"ADDPS", LTYPE3, i386.AADDPS}, |
| {"ADDSD", LTYPE3, i386.AADDSD}, |
| {"ADDSS", LTYPE3, i386.AADDSS}, |
| {"AESENC", LTYPE3, i386.AAESENC}, |
| {"ANDNPD", LTYPE3, i386.AANDNPD}, |
| {"ANDNPS", LTYPE3, i386.AANDNPS}, |
| {"ANDPD", LTYPE3, i386.AANDPD}, |
| {"ANDPS", LTYPE3, i386.AANDPS}, |
| {"CMPPD", LTYPEXC, i386.ACMPPD}, |
| {"CMPPS", LTYPEXC, i386.ACMPPS}, |
| {"CMPSD", LTYPEXC, i386.ACMPSD}, |
| {"CMPSS", LTYPEXC, i386.ACMPSS}, |
| {"COMISD", LTYPE3, i386.ACOMISD}, |
| {"COMISS", LTYPE3, i386.ACOMISS}, |
| {"CVTPL2PD", LTYPE3, i386.ACVTPL2PD}, |
| {"CVTPL2PS", LTYPE3, i386.ACVTPL2PS}, |
| {"CVTPD2PL", LTYPE3, i386.ACVTPD2PL}, |
| {"CVTPD2PS", LTYPE3, i386.ACVTPD2PS}, |
| {"CVTPS2PL", LTYPE3, i386.ACVTPS2PL}, |
| {"CVTPS2PD", LTYPE3, i386.ACVTPS2PD}, |
| {"CVTSD2SL", LTYPE3, i386.ACVTSD2SL}, |
| {"CVTSD2SS", LTYPE3, i386.ACVTSD2SS}, |
| {"CVTSL2SD", LTYPE3, i386.ACVTSL2SD}, |
| {"CVTSL2SS", LTYPE3, i386.ACVTSL2SS}, |
| {"CVTSS2SD", LTYPE3, i386.ACVTSS2SD}, |
| {"CVTSS2SL", LTYPE3, i386.ACVTSS2SL}, |
| {"CVTTPD2PL", LTYPE3, i386.ACVTTPD2PL}, |
| {"CVTTPS2PL", LTYPE3, i386.ACVTTPS2PL}, |
| {"CVTTSD2SL", LTYPE3, i386.ACVTTSD2SL}, |
| {"CVTTSS2SL", LTYPE3, i386.ACVTTSS2SL}, |
| {"DIVPD", LTYPE3, i386.ADIVPD}, |
| {"DIVPS", LTYPE3, i386.ADIVPS}, |
| {"DIVSD", LTYPE3, i386.ADIVSD}, |
| {"DIVSS", LTYPE3, i386.ADIVSS}, |
| {"MASKMOVOU", LTYPE3, i386.AMASKMOVOU}, |
| {"MASKMOVDQU", LTYPE3, i386.AMASKMOVOU}, /* syn */ |
| {"MAXPD", LTYPE3, i386.AMAXPD}, |
| {"MAXPS", LTYPE3, i386.AMAXPS}, |
| {"MAXSD", LTYPE3, i386.AMAXSD}, |
| {"MAXSS", LTYPE3, i386.AMAXSS}, |
| {"MINPD", LTYPE3, i386.AMINPD}, |
| {"MINPS", LTYPE3, i386.AMINPS}, |
| {"MINSD", LTYPE3, i386.AMINSD}, |
| {"MINSS", LTYPE3, i386.AMINSS}, |
| {"MOVAPD", LTYPE3, i386.AMOVAPD}, |
| {"MOVAPS", LTYPE3, i386.AMOVAPS}, |
| {"MOVO", LTYPE3, i386.AMOVO}, |
| {"MOVOA", LTYPE3, i386.AMOVO}, /* syn */ |
| {"MOVOU", LTYPE3, i386.AMOVOU}, |
| {"MOVHLPS", LTYPE3, i386.AMOVHLPS}, |
| {"MOVHPD", LTYPE3, i386.AMOVHPD}, |
| {"MOVHPS", LTYPE3, i386.AMOVHPS}, |
| {"MOVLHPS", LTYPE3, i386.AMOVLHPS}, |
| {"MOVLPD", LTYPE3, i386.AMOVLPD}, |
| {"MOVLPS", LTYPE3, i386.AMOVLPS}, |
| {"MOVMSKPD", LTYPE3, i386.AMOVMSKPD}, |
| {"MOVMSKPS", LTYPE3, i386.AMOVMSKPS}, |
| {"MOVNTO", LTYPE3, i386.AMOVNTO}, |
| {"MOVNTDQ", LTYPE3, i386.AMOVNTO}, /* syn */ |
| {"MOVNTPD", LTYPE3, i386.AMOVNTPD}, |
| {"MOVNTPS", LTYPE3, i386.AMOVNTPS}, |
| {"MOVSD", LTYPE3, i386.AMOVSD}, |
| {"MOVSS", LTYPE3, i386.AMOVSS}, |
| {"MOVUPD", LTYPE3, i386.AMOVUPD}, |
| {"MOVUPS", LTYPE3, i386.AMOVUPS}, |
| {"MULPD", LTYPE3, i386.AMULPD}, |
| {"MULPS", LTYPE3, i386.AMULPS}, |
| {"MULSD", LTYPE3, i386.AMULSD}, |
| {"MULSS", LTYPE3, i386.AMULSS}, |
| {"ORPD", LTYPE3, i386.AORPD}, |
| {"ORPS", LTYPE3, i386.AORPS}, |
| {"PADDQ", LTYPE3, i386.APADDQ}, |
| {"PAND", LTYPE3, i386.APAND}, |
| {"PCMPEQB", LTYPE3, i386.APCMPEQB}, |
| {"PMAXSW", LTYPE3, i386.APMAXSW}, |
| {"PMAXUB", LTYPE3, i386.APMAXUB}, |
| {"PMINSW", LTYPE3, i386.APMINSW}, |
| {"PMINUB", LTYPE3, i386.APMINUB}, |
| {"PMOVMSKB", LTYPE3, i386.APMOVMSKB}, |
| {"PSADBW", LTYPE3, i386.APSADBW}, |
| {"PSHUFB", LTYPE3, i386.APSHUFB}, |
| {"PSHUFHW", LTYPEX, i386.APSHUFHW}, |
| {"PSHUFL", LTYPEX, i386.APSHUFL}, |
| {"PSHUFLW", LTYPEX, i386.APSHUFLW}, |
| {"PSUBB", LTYPE3, i386.APSUBB}, |
| {"PSUBL", LTYPE3, i386.APSUBL}, |
| {"PSUBQ", LTYPE3, i386.APSUBQ}, |
| {"PSUBSB", LTYPE3, i386.APSUBSB}, |
| {"PSUBSW", LTYPE3, i386.APSUBSW}, |
| {"PSUBUSB", LTYPE3, i386.APSUBUSB}, |
| {"PSUBUSW", LTYPE3, i386.APSUBUSW}, |
| {"PSUBW", LTYPE3, i386.APSUBW}, |
| {"PUNPCKHQDQ", LTYPE3, i386.APUNPCKHQDQ}, |
| {"PUNPCKLQDQ", LTYPE3, i386.APUNPCKLQDQ}, |
| {"PXOR", LTYPE3, i386.APXOR}, |
| {"RCPPS", LTYPE3, i386.ARCPPS}, |
| {"RCPSS", LTYPE3, i386.ARCPSS}, |
| {"RSQRTPS", LTYPE3, i386.ARSQRTPS}, |
| {"RSQRTSS", LTYPE3, i386.ARSQRTSS}, |
| {"SQRTPD", LTYPE3, i386.ASQRTPD}, |
| {"SQRTPS", LTYPE3, i386.ASQRTPS}, |
| {"SQRTSD", LTYPE3, i386.ASQRTSD}, |
| {"SQRTSS", LTYPE3, i386.ASQRTSS}, |
| {"SUBPD", LTYPE3, i386.ASUBPD}, |
| {"SUBPS", LTYPE3, i386.ASUBPS}, |
| {"SUBSD", LTYPE3, i386.ASUBSD}, |
| {"SUBSS", LTYPE3, i386.ASUBSS}, |
| {"UCOMISD", LTYPE3, i386.AUCOMISD}, |
| {"UCOMISS", LTYPE3, i386.AUCOMISS}, |
| {"UNPCKHPD", LTYPE3, i386.AUNPCKHPD}, |
| {"UNPCKHPS", LTYPE3, i386.AUNPCKHPS}, |
| {"UNPCKLPD", LTYPE3, i386.AUNPCKLPD}, |
| {"UNPCKLPS", LTYPE3, i386.AUNPCKLPS}, |
| {"XORPD", LTYPE3, i386.AXORPD}, |
| {"XORPS", LTYPE3, i386.AXORPS}, |
| {"USEFIELD", LTYPEN, i386.AUSEFIELD}, |
| {"PCDATA", LTYPEPC, i386.APCDATA}, |
| {"FUNCDATA", LTYPEF, i386.AFUNCDATA}, |
| } |
| |
| func cinit() { |
| nullgen.Type_ = i386.D_NONE |
| nullgen.Index = i386.D_NONE |
| } |
| |
| func checkscale(scale int8) { |
| switch scale { |
| case 1, |
| 2, |
| 4, |
| 8: |
| return |
| } |
| |
| yyerror("scale must be 1248: %d", scale) |
| } |
| |
| func syminit(s *asm.Sym) { |
| s.Type = LNAME |
| s.Value = 0 |
| } |
| |
| func cclean() { |
| var g2 Addr2 |
| |
| g2.from = nullgen |
| g2.to = nullgen |
| outcode(i386.AEND, &g2) |
| } |
| |
| var lastpc *obj.Prog |
| |
| type Addr2 struct { |
| from obj.Addr |
| to obj.Addr |
| } |
| |
| func outcode(a int, g2 *Addr2) { |
| var p *obj.Prog |
| var pl *obj.Plist |
| |
| if asm.Pass == 1 { |
| goto out |
| } |
| |
| p = new(obj.Prog) |
| *p = obj.Prog{} |
| p.Ctxt = asm.Ctxt |
| p.As = int16(a) |
| p.Lineno = stmtline |
| p.From = g2.from |
| p.To = g2.to |
| p.Pc = int64(asm.PC) |
| |
| if lastpc == nil { |
| pl = obj.Linknewplist(asm.Ctxt) |
| pl.Firstpc = p |
| } else { |
| |
| lastpc.Link = p |
| } |
| lastpc = p |
| |
| out: |
| if a != i386.AGLOBL && a != i386.ADATA { |
| asm.PC++ |
| } |
| } |