blob: bbd8610ec4f05df977a4d87b7ddfe0f1dba38e46 [file] [log] [blame]
// 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, obj.NAME_AUTO},
{"SB", LSB, obj.NAME_EXTERN},
{"FP", LFP, obj.NAME_PARAM},
{"PC", LPC, obj.TYPE_BRANCH},
{"AL", LBREG, i386.REG_AL},
{"CL", LBREG, i386.REG_CL},
{"DL", LBREG, i386.REG_DL},
{"BL", LBREG, i386.REG_BL},
{"AH", LBREG, i386.REG_AH},
{"CH", LBREG, i386.REG_CH},
{"DH", LBREG, i386.REG_DH},
{"BH", LBREG, i386.REG_BH},
{"AX", LLREG, i386.REG_AX},
{"CX", LLREG, i386.REG_CX},
{"DX", LLREG, i386.REG_DX},
{"BX", LLREG, i386.REG_BX},
/* "SP", LLREG, REG_SP, */
{"BP", LLREG, i386.REG_BP},
{"SI", LLREG, i386.REG_SI},
{"DI", LLREG, i386.REG_DI},
{"F0", LFREG, i386.REG_F0 + 0},
{"F1", LFREG, i386.REG_F0 + 1},
{"F2", LFREG, i386.REG_F0 + 2},
{"F3", LFREG, i386.REG_F0 + 3},
{"F4", LFREG, i386.REG_F0 + 4},
{"F5", LFREG, i386.REG_F0 + 5},
{"F6", LFREG, i386.REG_F0 + 6},
{"F7", LFREG, i386.REG_F0 + 7},
{"X0", LXREG, i386.REG_X0 + 0},
{"X1", LXREG, i386.REG_X0 + 1},
{"X2", LXREG, i386.REG_X0 + 2},
{"X3", LXREG, i386.REG_X0 + 3},
{"X4", LXREG, i386.REG_X0 + 4},
{"X5", LXREG, i386.REG_X0 + 5},
{"X6", LXREG, i386.REG_X0 + 6},
{"X7", LXREG, i386.REG_X0 + 7},
{"CS", LSREG, i386.REG_CS},
{"SS", LSREG, i386.REG_SS},
{"DS", LSREG, i386.REG_DS},
{"ES", LSREG, i386.REG_ES},
{"FS", LSREG, i386.REG_FS},
{"GS", LSREG, i386.REG_GS},
{"TLS", LSREG, i386.REG_TLS},
{"GDTR", LBREG, i386.REG_GDTR},
{"IDTR", LBREG, i386.REG_IDTR},
{"LDTR", LBREG, i386.REG_LDTR},
{"MSW", LBREG, i386.REG_MSW},
{"TASK", LBREG, i386.REG_TASK},
{"CR0", LBREG, i386.REG_CR + 0},
{"CR1", LBREG, i386.REG_CR + 1},
{"CR2", LBREG, i386.REG_CR + 2},
{"CR3", LBREG, i386.REG_CR + 3},
{"CR4", LBREG, i386.REG_CR + 4},
{"CR5", LBREG, i386.REG_CR + 5},
{"CR6", LBREG, i386.REG_CR + 6},
{"CR7", LBREG, i386.REG_CR + 7},
{"DR0", LBREG, i386.REG_DR + 0},
{"DR1", LBREG, i386.REG_DR + 1},
{"DR2", LBREG, i386.REG_DR + 2},
{"DR3", LBREG, i386.REG_DR + 3},
{"DR4", LBREG, i386.REG_DR + 4},
{"DR5", LBREG, i386.REG_DR + 5},
{"DR6", LBREG, i386.REG_DR + 6},
{"DR7", LBREG, i386.REG_DR + 7},
{"TR0", LBREG, i386.REG_TR + 0},
{"TR1", LBREG, i386.REG_TR + 1},
{"TR2", LBREG, i386.REG_TR + 2},
{"TR3", LBREG, i386.REG_TR + 3},
{"TR4", LBREG, i386.REG_TR + 4},
{"TR5", LBREG, i386.REG_TR + 5},
{"TR6", LBREG, i386.REG_TR + 6},
{"TR7", LBREG, i386.REG_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, obj.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, obj.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, obj.AEND},
{"ENTER", LTYPE2, i386.AENTER},
{"GLOBL", LTYPEG, obj.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, obj.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, obj.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, obj.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, obj.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, obj.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, obj.AUSEFIELD},
{"PCDATA", LTYPEPC, obj.APCDATA},
{"FUNCDATA", LTYPEF, obj.AFUNCDATA},
}
func cinit() {
nullgen.Type = i386.REG_NONE
nullgen.Index = i386.REG_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(obj.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 != obj.AGLOBL && a != obj.ADATA {
asm.PC++
}
}