mirror of https://github.com/golang/go.git
772 lines
24 KiB
Go
772 lines
24 KiB
Go
// 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++
|
|
}
|
|
}
|