1 // Inferno utils/8a/lex.c
2 // http://code.google.com/p/inferno-os/source/browse/utils/8a/lex.c
4 // Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
5 // Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
6 // Portions Copyright © 1997-1999 Vita Nuova Limited
7 // Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
8 // Portions Copyright © 2004,2006 Bruce Ellis
9 // Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
10 // Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
11 // Portions Copyright © 2009 The Go Authors. All rights reserved.
13 // Permission is hereby granted, free of charge, to any person obtaining a copy
14 // of this software and associated documentation files (the "Software"), to deal
15 // in the Software without restriction, including without limitation the rights
16 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17 // copies of the Software, and to permit persons to whom the Software is
18 // furnished to do so, subject to the following conditions:
20 // The above copyright notice and this permission notice shall be included in
21 // all copies or substantial portions of the Software.
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
31 //go:generate go tool yacc a.y
38 "cmd/internal/obj/i386"
63 asm.Thelinkarch = &i386.Link386
70 func (yy) Lex(v *yySymType) int {
80 func (yy) Error(msg string) {
81 asm.Yyerror("%s", msg)
88 var lexinit = []asm.Lextab{
89 {"SP", LSP, i386.D_AUTO},
90 {"SB", LSB, i386.D_EXTERN},
91 {"FP", LFP, i386.D_PARAM},
92 {"PC", LPC, i386.D_BRANCH},
93 {"AL", LBREG, i386.D_AL},
94 {"CL", LBREG, i386.D_CL},
95 {"DL", LBREG, i386.D_DL},
96 {"BL", LBREG, i386.D_BL},
97 {"AH", LBREG, i386.D_AH},
98 {"CH", LBREG, i386.D_CH},
99 {"DH", LBREG, i386.D_DH},
100 {"BH", LBREG, i386.D_BH},
101 {"AX", LLREG, i386.D_AX},
102 {"CX", LLREG, i386.D_CX},
103 {"DX", LLREG, i386.D_DX},
104 {"BX", LLREG, i386.D_BX},
105 /* "SP", LLREG, D_SP, */
106 {"BP", LLREG, i386.D_BP},
107 {"SI", LLREG, i386.D_SI},
108 {"DI", LLREG, i386.D_DI},
109 {"F0", LFREG, i386.D_F0 + 0},
110 {"F1", LFREG, i386.D_F0 + 1},
111 {"F2", LFREG, i386.D_F0 + 2},
112 {"F3", LFREG, i386.D_F0 + 3},
113 {"F4", LFREG, i386.D_F0 + 4},
114 {"F5", LFREG, i386.D_F0 + 5},
115 {"F6", LFREG, i386.D_F0 + 6},
116 {"F7", LFREG, i386.D_F0 + 7},
117 {"X0", LXREG, i386.D_X0 + 0},
118 {"X1", LXREG, i386.D_X0 + 1},
119 {"X2", LXREG, i386.D_X0 + 2},
120 {"X3", LXREG, i386.D_X0 + 3},
121 {"X4", LXREG, i386.D_X0 + 4},
122 {"X5", LXREG, i386.D_X0 + 5},
123 {"X6", LXREG, i386.D_X0 + 6},
124 {"X7", LXREG, i386.D_X0 + 7},
125 {"CS", LSREG, i386.D_CS},
126 {"SS", LSREG, i386.D_SS},
127 {"DS", LSREG, i386.D_DS},
128 {"ES", LSREG, i386.D_ES},
129 {"FS", LSREG, i386.D_FS},
130 {"GS", LSREG, i386.D_GS},
131 {"TLS", LSREG, i386.D_TLS},
132 {"GDTR", LBREG, i386.D_GDTR},
133 {"IDTR", LBREG, i386.D_IDTR},
134 {"LDTR", LBREG, i386.D_LDTR},
135 {"MSW", LBREG, i386.D_MSW},
136 {"TASK", LBREG, i386.D_TASK},
137 {"CR0", LBREG, i386.D_CR + 0},
138 {"CR1", LBREG, i386.D_CR + 1},
139 {"CR2", LBREG, i386.D_CR + 2},
140 {"CR3", LBREG, i386.D_CR + 3},
141 {"CR4", LBREG, i386.D_CR + 4},
142 {"CR5", LBREG, i386.D_CR + 5},
143 {"CR6", LBREG, i386.D_CR + 6},
144 {"CR7", LBREG, i386.D_CR + 7},
145 {"DR0", LBREG, i386.D_DR + 0},
146 {"DR1", LBREG, i386.D_DR + 1},
147 {"DR2", LBREG, i386.D_DR + 2},
148 {"DR3", LBREG, i386.D_DR + 3},
149 {"DR4", LBREG, i386.D_DR + 4},
150 {"DR5", LBREG, i386.D_DR + 5},
151 {"DR6", LBREG, i386.D_DR + 6},
152 {"DR7", LBREG, i386.D_DR + 7},
153 {"TR0", LBREG, i386.D_TR + 0},
154 {"TR1", LBREG, i386.D_TR + 1},
155 {"TR2", LBREG, i386.D_TR + 2},
156 {"TR3", LBREG, i386.D_TR + 3},
157 {"TR4", LBREG, i386.D_TR + 4},
158 {"TR5", LBREG, i386.D_TR + 5},
159 {"TR6", LBREG, i386.D_TR + 6},
160 {"TR7", LBREG, i386.D_TR + 7},
161 {"AAA", LTYPE0, i386.AAAA},
162 {"AAD", LTYPE0, i386.AAAD},
163 {"AAM", LTYPE0, i386.AAAM},
164 {"AAS", LTYPE0, i386.AAAS},
165 {"ADCB", LTYPE3, i386.AADCB},
166 {"ADCL", LTYPE3, i386.AADCL},
167 {"ADCW", LTYPE3, i386.AADCW},
168 {"ADDB", LTYPE3, i386.AADDB},
169 {"ADDL", LTYPE3, i386.AADDL},
170 {"ADDW", LTYPE3, i386.AADDW},
171 {"ADJSP", LTYPE2, i386.AADJSP},
172 {"ANDB", LTYPE3, i386.AANDB},
173 {"ANDL", LTYPE3, i386.AANDL},
174 {"ANDW", LTYPE3, i386.AANDW},
175 {"ARPL", LTYPE3, i386.AARPL},
176 {"BOUNDL", LTYPE3, i386.ABOUNDL},
177 {"BOUNDW", LTYPE3, i386.ABOUNDW},
178 {"BSFL", LTYPE3, i386.ABSFL},
179 {"BSFW", LTYPE3, i386.ABSFW},
180 {"BSRL", LTYPE3, i386.ABSRL},
181 {"BSRW", LTYPE3, i386.ABSRW},
182 {"BSWAPL", LTYPE1, i386.ABSWAPL},
183 {"BTCL", LTYPE3, i386.ABTCL},
184 {"BTCW", LTYPE3, i386.ABTCW},
185 {"BTL", LTYPE3, i386.ABTL},
186 {"BTRL", LTYPE3, i386.ABTRL},
187 {"BTRW", LTYPE3, i386.ABTRW},
188 {"BTSL", LTYPE3, i386.ABTSL},
189 {"BTSW", LTYPE3, i386.ABTSW},
190 {"BTW", LTYPE3, i386.ABTW},
191 {"BYTE", LTYPE2, i386.ABYTE},
192 {"CALL", LTYPEC, i386.ACALL},
193 {"CLC", LTYPE0, i386.ACLC},
194 {"CLD", LTYPE0, i386.ACLD},
195 {"CLI", LTYPE0, i386.ACLI},
196 {"CLTS", LTYPE0, i386.ACLTS},
197 {"CMC", LTYPE0, i386.ACMC},
198 {"CMPB", LTYPE4, i386.ACMPB},
199 {"CMPL", LTYPE4, i386.ACMPL},
200 {"CMPW", LTYPE4, i386.ACMPW},
201 {"CMPSB", LTYPE0, i386.ACMPSB},
202 {"CMPSL", LTYPE0, i386.ACMPSL},
203 {"CMPSW", LTYPE0, i386.ACMPSW},
204 {"CMPXCHG8B", LTYPE1, i386.ACMPXCHG8B},
205 {"CMPXCHGB", LTYPE3, i386.ACMPXCHGB},
206 {"CMPXCHGL", LTYPE3, i386.ACMPXCHGL},
207 {"CMPXCHGW", LTYPE3, i386.ACMPXCHGW},
208 {"CPUID", LTYPE0, i386.ACPUID},
209 {"DAA", LTYPE0, i386.ADAA},
210 {"DAS", LTYPE0, i386.ADAS},
211 {"DATA", LTYPED, i386.ADATA},
212 {"DECB", LTYPE1, i386.ADECB},
213 {"DECL", LTYPE1, i386.ADECL},
214 {"DECW", LTYPE1, i386.ADECW},
215 {"DIVB", LTYPE2, i386.ADIVB},
216 {"DIVL", LTYPE2, i386.ADIVL},
217 {"DIVW", LTYPE2, i386.ADIVW},
218 {"END", LTYPE0, i386.AEND},
219 {"ENTER", LTYPE2, i386.AENTER},
220 {"GLOBL", LTYPEG, i386.AGLOBL},
221 {"HLT", LTYPE0, i386.AHLT},
222 {"IDIVB", LTYPE2, i386.AIDIVB},
223 {"IDIVL", LTYPE2, i386.AIDIVL},
224 {"IDIVW", LTYPE2, i386.AIDIVW},
225 {"IMULB", LTYPE2, i386.AIMULB},
226 {"IMULL", LTYPEI, i386.AIMULL},
227 {"IMULW", LTYPEI, i386.AIMULW},
228 {"INB", LTYPE0, i386.AINB},
229 {"INL", LTYPE0, i386.AINL},
230 {"INW", LTYPE0, i386.AINW},
231 {"INCB", LTYPE1, i386.AINCB},
232 {"INCL", LTYPE1, i386.AINCL},
233 {"INCW", LTYPE1, i386.AINCW},
234 {"INSB", LTYPE0, i386.AINSB},
235 {"INSL", LTYPE0, i386.AINSL},
236 {"INSW", LTYPE0, i386.AINSW},
237 {"INT", LTYPE2, i386.AINT},
238 {"INTO", LTYPE0, i386.AINTO},
239 {"IRETL", LTYPE0, i386.AIRETL},
240 {"IRETW", LTYPE0, i386.AIRETW},
241 {"JOS", LTYPER, i386.AJOS}, /* overflow set (OF = 1) */
242 {"JO", LTYPER, i386.AJOS}, /* alternate */
243 {"JOC", LTYPER, i386.AJOC}, /* overflow clear (OF = 0) */
244 {"JNO", LTYPER, i386.AJOC}, /* alternate */
245 {"JCS", LTYPER, i386.AJCS}, /* carry set (CF = 1) */
246 {"JB", LTYPER, i386.AJCS}, /* alternate */
247 {"JC", LTYPER, i386.AJCS}, /* alternate */
248 {"JNAE", LTYPER, i386.AJCS}, /* alternate */
249 {"JLO", LTYPER, i386.AJCS}, /* alternate */
250 {"JCC", LTYPER, i386.AJCC}, /* carry clear (CF = 0) */
251 {"JAE", LTYPER, i386.AJCC}, /* alternate */
252 {"JNB", LTYPER, i386.AJCC}, /* alternate */
253 {"JNC", LTYPER, i386.AJCC}, /* alternate */
254 {"JHS", LTYPER, i386.AJCC}, /* alternate */
255 {"JEQ", LTYPER, i386.AJEQ}, /* equal (ZF = 1) */
256 {"JE", LTYPER, i386.AJEQ}, /* alternate */
257 {"JZ", LTYPER, i386.AJEQ}, /* alternate */
258 {"JNE", LTYPER, i386.AJNE}, /* not equal (ZF = 0) */
259 {"JNZ", LTYPER, i386.AJNE}, /* alternate */
260 {"JLS", LTYPER, i386.AJLS}, /* lower or same (unsigned) (CF = 1 || ZF = 1) */
261 {"JBE", LTYPER, i386.AJLS}, /* alternate */
262 {"JNA", LTYPER, i386.AJLS}, /* alternate */
263 {"JHI", LTYPER, i386.AJHI}, /* higher (unsigned) (CF = 0 && ZF = 0) */
264 {"JA", LTYPER, i386.AJHI}, /* alternate */
265 {"JNBE", LTYPER, i386.AJHI}, /* alternate */
266 {"JMI", LTYPER, i386.AJMI}, /* negative (minus) (SF = 1) */
267 {"JS", LTYPER, i386.AJMI}, /* alternate */
268 {"JPL", LTYPER, i386.AJPL}, /* non-negative (plus) (SF = 0) */
269 {"JNS", LTYPER, i386.AJPL}, /* alternate */
270 {"JPS", LTYPER, i386.AJPS}, /* parity set (PF = 1) */
271 {"JP", LTYPER, i386.AJPS}, /* alternate */
272 {"JPE", LTYPER, i386.AJPS}, /* alternate */
273 {"JPC", LTYPER, i386.AJPC}, /* parity clear (PF = 0) */
274 {"JNP", LTYPER, i386.AJPC}, /* alternate */
275 {"JPO", LTYPER, i386.AJPC}, /* alternate */
276 {"JLT", LTYPER, i386.AJLT}, /* less than (signed) (SF != OF) */
277 {"JL", LTYPER, i386.AJLT}, /* alternate */
278 {"JNGE", LTYPER, i386.AJLT}, /* alternate */
279 {"JGE", LTYPER, i386.AJGE}, /* greater than or equal (signed) (SF = OF) */
280 {"JNL", LTYPER, i386.AJGE}, /* alternate */
281 {"JLE", LTYPER, i386.AJLE}, /* less than or equal (signed) (ZF = 1 || SF != OF) */
282 {"JNG", LTYPER, i386.AJLE}, /* alternate */
283 {"JGT", LTYPER, i386.AJGT}, /* greater than (signed) (ZF = 0 && SF = OF) */
284 {"JG", LTYPER, i386.AJGT}, /* alternate */
285 {"JNLE", LTYPER, i386.AJGT}, /* alternate */
286 {"JCXZL", LTYPER, i386.AJCXZL},
287 {"JCXZW", LTYPER, i386.AJCXZW},
288 {"JMP", LTYPEC, i386.AJMP},
289 {"LAHF", LTYPE0, i386.ALAHF},
290 {"LARL", LTYPE3, i386.ALARL},
291 {"LARW", LTYPE3, i386.ALARW},
292 {"LEAL", LTYPE3, i386.ALEAL},
293 {"LEAW", LTYPE3, i386.ALEAW},
294 {"LEAVEL", LTYPE0, i386.ALEAVEL},
295 {"LEAVEW", LTYPE0, i386.ALEAVEW},
296 {"LOCK", LTYPE0, i386.ALOCK},
297 {"LODSB", LTYPE0, i386.ALODSB},
298 {"LODSL", LTYPE0, i386.ALODSL},
299 {"LODSW", LTYPE0, i386.ALODSW},
300 {"LONG", LTYPE2, i386.ALONG},
301 {"LOOP", LTYPER, i386.ALOOP},
302 {"LOOPEQ", LTYPER, i386.ALOOPEQ},
303 {"LOOPNE", LTYPER, i386.ALOOPNE},
304 {"LSLL", LTYPE3, i386.ALSLL},
305 {"LSLW", LTYPE3, i386.ALSLW},
306 {"MOVB", LTYPE3, i386.AMOVB},
307 {"MOVL", LTYPEM, i386.AMOVL},
308 {"MOVW", LTYPEM, i386.AMOVW},
309 {"MOVQ", LTYPEM, i386.AMOVQ},
310 {"MOVBLSX", LTYPE3, i386.AMOVBLSX},
311 {"MOVBLZX", LTYPE3, i386.AMOVBLZX},
312 {"MOVBWSX", LTYPE3, i386.AMOVBWSX},
313 {"MOVBWZX", LTYPE3, i386.AMOVBWZX},
314 {"MOVWLSX", LTYPE3, i386.AMOVWLSX},
315 {"MOVWLZX", LTYPE3, i386.AMOVWLZX},
316 {"MOVSB", LTYPE0, i386.AMOVSB},
317 {"MOVSL", LTYPE0, i386.AMOVSL},
318 {"MOVSW", LTYPE0, i386.AMOVSW},
319 {"MULB", LTYPE2, i386.AMULB},
320 {"MULL", LTYPE2, i386.AMULL},
321 {"MULW", LTYPE2, i386.AMULW},
322 {"NEGB", LTYPE1, i386.ANEGB},
323 {"NEGL", LTYPE1, i386.ANEGL},
324 {"NEGW", LTYPE1, i386.ANEGW},
325 {"NOP", LTYPEN, i386.ANOP},
326 {"NOTB", LTYPE1, i386.ANOTB},
327 {"NOTL", LTYPE1, i386.ANOTL},
328 {"NOTW", LTYPE1, i386.ANOTW},
329 {"ORB", LTYPE3, i386.AORB},
330 {"ORL", LTYPE3, i386.AORL},
331 {"ORW", LTYPE3, i386.AORW},
332 {"OUTB", LTYPE0, i386.AOUTB},
333 {"OUTL", LTYPE0, i386.AOUTL},
334 {"OUTW", LTYPE0, i386.AOUTW},
335 {"OUTSB", LTYPE0, i386.AOUTSB},
336 {"OUTSL", LTYPE0, i386.AOUTSL},
337 {"OUTSW", LTYPE0, i386.AOUTSW},
338 {"PAUSE", LTYPEN, i386.APAUSE},
339 {"PINSRD", LTYPEX, i386.APINSRD},
340 {"POPAL", LTYPE0, i386.APOPAL},
341 {"POPAW", LTYPE0, i386.APOPAW},
342 {"POPFL", LTYPE0, i386.APOPFL},
343 {"POPFW", LTYPE0, i386.APOPFW},
344 {"POPL", LTYPE1, i386.APOPL},
345 {"POPW", LTYPE1, i386.APOPW},
346 {"PUSHAL", LTYPE0, i386.APUSHAL},
347 {"PUSHAW", LTYPE0, i386.APUSHAW},
348 {"PUSHFL", LTYPE0, i386.APUSHFL},
349 {"PUSHFW", LTYPE0, i386.APUSHFW},
350 {"PUSHL", LTYPE2, i386.APUSHL},
351 {"PUSHW", LTYPE2, i386.APUSHW},
352 {"RCLB", LTYPE3, i386.ARCLB},
353 {"RCLL", LTYPE3, i386.ARCLL},
354 {"RCLW", LTYPE3, i386.ARCLW},
355 {"RCRB", LTYPE3, i386.ARCRB},
356 {"RCRL", LTYPE3, i386.ARCRL},
357 {"RCRW", LTYPE3, i386.ARCRW},
358 {"RDTSC", LTYPE0, i386.ARDTSC},
359 {"REP", LTYPE0, i386.AREP},
360 {"REPN", LTYPE0, i386.AREPN},
361 {"RET", LTYPE0, i386.ARET},
362 {"ROLB", LTYPE3, i386.AROLB},
363 {"ROLL", LTYPE3, i386.AROLL},
364 {"ROLW", LTYPE3, i386.AROLW},
365 {"RORB", LTYPE3, i386.ARORB},
366 {"RORL", LTYPE3, i386.ARORL},
367 {"RORW", LTYPE3, i386.ARORW},
368 {"SAHF", LTYPE0, i386.ASAHF},
369 {"SALB", LTYPE3, i386.ASALB},
370 {"SALL", LTYPE3, i386.ASALL},
371 {"SALW", LTYPE3, i386.ASALW},
372 {"SARB", LTYPE3, i386.ASARB},
373 {"SARL", LTYPE3, i386.ASARL},
374 {"SARW", LTYPE3, i386.ASARW},
375 {"SBBB", LTYPE3, i386.ASBBB},
376 {"SBBL", LTYPE3, i386.ASBBL},
377 {"SBBW", LTYPE3, i386.ASBBW},
378 {"SCASB", LTYPE0, i386.ASCASB},
379 {"SCASL", LTYPE0, i386.ASCASL},
380 {"SCASW", LTYPE0, i386.ASCASW},
381 {"SETCC", LTYPE1, i386.ASETCC}, /* see JCC etc above for condition codes */
382 {"SETCS", LTYPE1, i386.ASETCS},
383 {"SETEQ", LTYPE1, i386.ASETEQ},
384 {"SETGE", LTYPE1, i386.ASETGE},
385 {"SETGT", LTYPE1, i386.ASETGT},
386 {"SETHI", LTYPE1, i386.ASETHI},
387 {"SETLE", LTYPE1, i386.ASETLE},
388 {"SETLS", LTYPE1, i386.ASETLS},
389 {"SETLT", LTYPE1, i386.ASETLT},
390 {"SETMI", LTYPE1, i386.ASETMI},
391 {"SETNE", LTYPE1, i386.ASETNE},
392 {"SETOC", LTYPE1, i386.ASETOC},
393 {"SETOS", LTYPE1, i386.ASETOS},
394 {"SETPC", LTYPE1, i386.ASETPC},
395 {"SETPL", LTYPE1, i386.ASETPL},
396 {"SETPS", LTYPE1, i386.ASETPS},
397 {"CDQ", LTYPE0, i386.ACDQ},
398 {"CWD", LTYPE0, i386.ACWD},
399 {"SHLB", LTYPE3, i386.ASHLB},
400 {"SHLL", LTYPES, i386.ASHLL},
401 {"SHLW", LTYPES, i386.ASHLW},
402 {"SHRB", LTYPE3, i386.ASHRB},
403 {"SHRL", LTYPES, i386.ASHRL},
404 {"SHRW", LTYPES, i386.ASHRW},
405 {"STC", LTYPE0, i386.ASTC},
406 {"STD", LTYPE0, i386.ASTD},
407 {"STI", LTYPE0, i386.ASTI},
408 {"STOSB", LTYPE0, i386.ASTOSB},
409 {"STOSL", LTYPE0, i386.ASTOSL},
410 {"STOSW", LTYPE0, i386.ASTOSW},
411 {"SUBB", LTYPE3, i386.ASUBB},
412 {"SUBL", LTYPE3, i386.ASUBL},
413 {"SUBW", LTYPE3, i386.ASUBW},
414 {"SYSCALL", LTYPE0, i386.ASYSCALL},
415 {"TESTB", LTYPE3, i386.ATESTB},
416 {"TESTL", LTYPE3, i386.ATESTL},
417 {"TESTW", LTYPE3, i386.ATESTW},
418 {"TEXT", LTYPET, i386.ATEXT},
419 {"VERR", LTYPE2, i386.AVERR},
420 {"VERW", LTYPE2, i386.AVERW},
421 {"WAIT", LTYPE0, i386.AWAIT},
422 {"WORD", LTYPE2, i386.AWORD},
423 {"XADDB", LTYPE3, i386.AXADDB},
424 {"XADDL", LTYPE3, i386.AXADDL},
425 {"XADDW", LTYPE3, i386.AXADDW},
426 {"XCHGB", LTYPE3, i386.AXCHGB},
427 {"XCHGL", LTYPE3, i386.AXCHGL},
428 {"XCHGW", LTYPE3, i386.AXCHGW},
429 {"XLAT", LTYPE2, i386.AXLAT},
430 {"XORB", LTYPE3, i386.AXORB},
431 {"XORL", LTYPE3, i386.AXORL},
432 {"XORW", LTYPE3, i386.AXORW},
433 {"CMOVLCC", LTYPE3, i386.ACMOVLCC},
434 {"CMOVLCS", LTYPE3, i386.ACMOVLCS},
435 {"CMOVLEQ", LTYPE3, i386.ACMOVLEQ},
436 {"CMOVLGE", LTYPE3, i386.ACMOVLGE},
437 {"CMOVLGT", LTYPE3, i386.ACMOVLGT},
438 {"CMOVLHI", LTYPE3, i386.ACMOVLHI},
439 {"CMOVLLE", LTYPE3, i386.ACMOVLLE},
440 {"CMOVLLS", LTYPE3, i386.ACMOVLLS},
441 {"CMOVLLT", LTYPE3, i386.ACMOVLLT},
442 {"CMOVLMI", LTYPE3, i386.ACMOVLMI},
443 {"CMOVLNE", LTYPE3, i386.ACMOVLNE},
444 {"CMOVLOC", LTYPE3, i386.ACMOVLOC},
445 {"CMOVLOS", LTYPE3, i386.ACMOVLOS},
446 {"CMOVLPC", LTYPE3, i386.ACMOVLPC},
447 {"CMOVLPL", LTYPE3, i386.ACMOVLPL},
448 {"CMOVLPS", LTYPE3, i386.ACMOVLPS},
449 {"CMOVWCC", LTYPE3, i386.ACMOVWCC},
450 {"CMOVWCS", LTYPE3, i386.ACMOVWCS},
451 {"CMOVWEQ", LTYPE3, i386.ACMOVWEQ},
452 {"CMOVWGE", LTYPE3, i386.ACMOVWGE},
453 {"CMOVWGT", LTYPE3, i386.ACMOVWGT},
454 {"CMOVWHI", LTYPE3, i386.ACMOVWHI},
455 {"CMOVWLE", LTYPE3, i386.ACMOVWLE},
456 {"CMOVWLS", LTYPE3, i386.ACMOVWLS},
457 {"CMOVWLT", LTYPE3, i386.ACMOVWLT},
458 {"CMOVWMI", LTYPE3, i386.ACMOVWMI},
459 {"CMOVWNE", LTYPE3, i386.ACMOVWNE},
460 {"CMOVWOC", LTYPE3, i386.ACMOVWOC},
461 {"CMOVWOS", LTYPE3, i386.ACMOVWOS},
462 {"CMOVWPC", LTYPE3, i386.ACMOVWPC},
463 {"CMOVWPL", LTYPE3, i386.ACMOVWPL},
464 {"CMOVWPS", LTYPE3, i386.ACMOVWPS},
465 {"FMOVB", LTYPE3, i386.AFMOVB},
466 {"FMOVBP", LTYPE3, i386.AFMOVBP},
467 {"FMOVD", LTYPE3, i386.AFMOVD},
468 {"FMOVDP", LTYPE3, i386.AFMOVDP},
469 {"FMOVF", LTYPE3, i386.AFMOVF},
470 {"FMOVFP", LTYPE3, i386.AFMOVFP},
471 {"FMOVL", LTYPE3, i386.AFMOVL},
472 {"FMOVLP", LTYPE3, i386.AFMOVLP},
473 {"FMOVV", LTYPE3, i386.AFMOVV},
474 {"FMOVVP", LTYPE3, i386.AFMOVVP},
475 {"FMOVW", LTYPE3, i386.AFMOVW},
476 {"FMOVWP", LTYPE3, i386.AFMOVWP},
477 {"FMOVX", LTYPE3, i386.AFMOVX},
478 {"FMOVXP", LTYPE3, i386.AFMOVXP},
479 {"FCMOVCC", LTYPE3, i386.AFCMOVCC},
480 {"FCMOVCS", LTYPE3, i386.AFCMOVCS},
481 {"FCMOVEQ", LTYPE3, i386.AFCMOVEQ},
482 {"FCMOVHI", LTYPE3, i386.AFCMOVHI},
483 {"FCMOVLS", LTYPE3, i386.AFCMOVLS},
484 {"FCMOVNE", LTYPE3, i386.AFCMOVNE},
485 {"FCMOVNU", LTYPE3, i386.AFCMOVNU},
486 {"FCMOVUN", LTYPE3, i386.AFCMOVUN},
487 {"FCOMB", LTYPE3, i386.AFCOMB},
488 {"FCOMBP", LTYPE3, i386.AFCOMBP},
489 {"FCOMD", LTYPE3, i386.AFCOMD},
490 {"FCOMDP", LTYPE3, i386.AFCOMDP},
491 {"FCOMDPP", LTYPE3, i386.AFCOMDPP},
492 {"FCOMF", LTYPE3, i386.AFCOMF},
493 {"FCOMFP", LTYPE3, i386.AFCOMFP},
494 {"FCOMI", LTYPE3, i386.AFCOMI},
495 {"FCOMIP", LTYPE3, i386.AFCOMIP},
496 {"FCOML", LTYPE3, i386.AFCOML},
497 {"FCOMLP", LTYPE3, i386.AFCOMLP},
498 {"FCOMW", LTYPE3, i386.AFCOMW},
499 {"FCOMWP", LTYPE3, i386.AFCOMWP},
500 {"FUCOM", LTYPE3, i386.AFUCOM},
501 {"FUCOMI", LTYPE3, i386.AFUCOMI},
502 {"FUCOMIP", LTYPE3, i386.AFUCOMIP},
503 {"FUCOMP", LTYPE3, i386.AFUCOMP},
504 {"FUCOMPP", LTYPE3, i386.AFUCOMPP},
505 {"FADDW", LTYPE3, i386.AFADDW},
506 {"FADDL", LTYPE3, i386.AFADDL},
507 {"FADDF", LTYPE3, i386.AFADDF},
508 {"FADDD", LTYPE3, i386.AFADDD},
509 {"FADDDP", LTYPE3, i386.AFADDDP},
510 {"FSUBDP", LTYPE3, i386.AFSUBDP},
511 {"FSUBW", LTYPE3, i386.AFSUBW},
512 {"FSUBL", LTYPE3, i386.AFSUBL},
513 {"FSUBF", LTYPE3, i386.AFSUBF},
514 {"FSUBD", LTYPE3, i386.AFSUBD},
515 {"FSUBRDP", LTYPE3, i386.AFSUBRDP},
516 {"FSUBRW", LTYPE3, i386.AFSUBRW},
517 {"FSUBRL", LTYPE3, i386.AFSUBRL},
518 {"FSUBRF", LTYPE3, i386.AFSUBRF},
519 {"FSUBRD", LTYPE3, i386.AFSUBRD},
520 {"FMULDP", LTYPE3, i386.AFMULDP},
521 {"FMULW", LTYPE3, i386.AFMULW},
522 {"FMULL", LTYPE3, i386.AFMULL},
523 {"FMULF", LTYPE3, i386.AFMULF},
524 {"FMULD", LTYPE3, i386.AFMULD},
525 {"FDIVDP", LTYPE3, i386.AFDIVDP},
526 {"FDIVW", LTYPE3, i386.AFDIVW},
527 {"FDIVL", LTYPE3, i386.AFDIVL},
528 {"FDIVF", LTYPE3, i386.AFDIVF},
529 {"FDIVD", LTYPE3, i386.AFDIVD},
530 {"FDIVRDP", LTYPE3, i386.AFDIVRDP},
531 {"FDIVRW", LTYPE3, i386.AFDIVRW},
532 {"FDIVRL", LTYPE3, i386.AFDIVRL},
533 {"FDIVRF", LTYPE3, i386.AFDIVRF},
534 {"FDIVRD", LTYPE3, i386.AFDIVRD},
535 {"FXCHD", LTYPE3, i386.AFXCHD},
536 {"FFREE", LTYPE1, i386.AFFREE},
537 {"FLDCW", LTYPE2, i386.AFLDCW},
538 {"FLDENV", LTYPE1, i386.AFLDENV},
539 {"FRSTOR", LTYPE2, i386.AFRSTOR},
540 {"FSAVE", LTYPE1, i386.AFSAVE},
541 {"FSTCW", LTYPE1, i386.AFSTCW},
542 {"FSTENV", LTYPE1, i386.AFSTENV},
543 {"FSTSW", LTYPE1, i386.AFSTSW},
544 {"F2XM1", LTYPE0, i386.AF2XM1},
545 {"FABS", LTYPE0, i386.AFABS},
546 {"FCHS", LTYPE0, i386.AFCHS},
547 {"FCLEX", LTYPE0, i386.AFCLEX},
548 {"FCOS", LTYPE0, i386.AFCOS},
549 {"FDECSTP", LTYPE0, i386.AFDECSTP},
550 {"FINCSTP", LTYPE0, i386.AFINCSTP},
551 {"FINIT", LTYPE0, i386.AFINIT},
552 {"FLD1", LTYPE0, i386.AFLD1},
553 {"FLDL2E", LTYPE0, i386.AFLDL2E},
554 {"FLDL2T", LTYPE0, i386.AFLDL2T},
555 {"FLDLG2", LTYPE0, i386.AFLDLG2},
556 {"FLDLN2", LTYPE0, i386.AFLDLN2},
557 {"FLDPI", LTYPE0, i386.AFLDPI},
558 {"FLDZ", LTYPE0, i386.AFLDZ},
559 {"FNOP", LTYPE0, i386.AFNOP},
560 {"FPATAN", LTYPE0, i386.AFPATAN},
561 {"FPREM", LTYPE0, i386.AFPREM},
562 {"FPREM1", LTYPE0, i386.AFPREM1},
563 {"FPTAN", LTYPE0, i386.AFPTAN},
564 {"FRNDINT", LTYPE0, i386.AFRNDINT},
565 {"FSCALE", LTYPE0, i386.AFSCALE},
566 {"FSIN", LTYPE0, i386.AFSIN},
567 {"FSINCOS", LTYPE0, i386.AFSINCOS},
568 {"FSQRT", LTYPE0, i386.AFSQRT},
569 {"FTST", LTYPE0, i386.AFTST},
570 {"FXAM", LTYPE0, i386.AFXAM},
571 {"FXTRACT", LTYPE0, i386.AFXTRACT},
572 {"FYL2X", LTYPE0, i386.AFYL2X},
573 {"FYL2XP1", LTYPE0, i386.AFYL2XP1},
574 {"LFENCE", LTYPE0, i386.ALFENCE},
575 {"MFENCE", LTYPE0, i386.AMFENCE},
576 {"SFENCE", LTYPE0, i386.ASFENCE},
577 {"EMMS", LTYPE0, i386.AEMMS},
578 {"PREFETCHT0", LTYPE2, i386.APREFETCHT0},
579 {"PREFETCHT1", LTYPE2, i386.APREFETCHT1},
580 {"PREFETCHT2", LTYPE2, i386.APREFETCHT2},
581 {"PREFETCHNTA", LTYPE2, i386.APREFETCHNTA},
582 {"UNDEF", LTYPE0, i386.AUNDEF},
583 {"ADDPD", LTYPE3, i386.AADDPD},
584 {"ADDPS", LTYPE3, i386.AADDPS},
585 {"ADDSD", LTYPE3, i386.AADDSD},
586 {"ADDSS", LTYPE3, i386.AADDSS},
587 {"AESENC", LTYPE3, i386.AAESENC},
588 {"ANDNPD", LTYPE3, i386.AANDNPD},
589 {"ANDNPS", LTYPE3, i386.AANDNPS},
590 {"ANDPD", LTYPE3, i386.AANDPD},
591 {"ANDPS", LTYPE3, i386.AANDPS},
592 {"CMPPD", LTYPEXC, i386.ACMPPD},
593 {"CMPPS", LTYPEXC, i386.ACMPPS},
594 {"CMPSD", LTYPEXC, i386.ACMPSD},
595 {"CMPSS", LTYPEXC, i386.ACMPSS},
596 {"COMISD", LTYPE3, i386.ACOMISD},
597 {"COMISS", LTYPE3, i386.ACOMISS},
598 {"CVTPL2PD", LTYPE3, i386.ACVTPL2PD},
599 {"CVTPL2PS", LTYPE3, i386.ACVTPL2PS},
600 {"CVTPD2PL", LTYPE3, i386.ACVTPD2PL},
601 {"CVTPD2PS", LTYPE3, i386.ACVTPD2PS},
602 {"CVTPS2PL", LTYPE3, i386.ACVTPS2PL},
603 {"CVTPS2PD", LTYPE3, i386.ACVTPS2PD},
604 {"CVTSD2SL", LTYPE3, i386.ACVTSD2SL},
605 {"CVTSD2SS", LTYPE3, i386.ACVTSD2SS},
606 {"CVTSL2SD", LTYPE3, i386.ACVTSL2SD},
607 {"CVTSL2SS", LTYPE3, i386.ACVTSL2SS},
608 {"CVTSS2SD", LTYPE3, i386.ACVTSS2SD},
609 {"CVTSS2SL", LTYPE3, i386.ACVTSS2SL},
610 {"CVTTPD2PL", LTYPE3, i386.ACVTTPD2PL},
611 {"CVTTPS2PL", LTYPE3, i386.ACVTTPS2PL},
612 {"CVTTSD2SL", LTYPE3, i386.ACVTTSD2SL},
613 {"CVTTSS2SL", LTYPE3, i386.ACVTTSS2SL},
614 {"DIVPD", LTYPE3, i386.ADIVPD},
615 {"DIVPS", LTYPE3, i386.ADIVPS},
616 {"DIVSD", LTYPE3, i386.ADIVSD},
617 {"DIVSS", LTYPE3, i386.ADIVSS},
618 {"MASKMOVOU", LTYPE3, i386.AMASKMOVOU},
619 {"MASKMOVDQU", LTYPE3, i386.AMASKMOVOU}, /* syn */
620 {"MAXPD", LTYPE3, i386.AMAXPD},
621 {"MAXPS", LTYPE3, i386.AMAXPS},
622 {"MAXSD", LTYPE3, i386.AMAXSD},
623 {"MAXSS", LTYPE3, i386.AMAXSS},
624 {"MINPD", LTYPE3, i386.AMINPD},
625 {"MINPS", LTYPE3, i386.AMINPS},
626 {"MINSD", LTYPE3, i386.AMINSD},
627 {"MINSS", LTYPE3, i386.AMINSS},
628 {"MOVAPD", LTYPE3, i386.AMOVAPD},
629 {"MOVAPS", LTYPE3, i386.AMOVAPS},
630 {"MOVO", LTYPE3, i386.AMOVO},
631 {"MOVOA", LTYPE3, i386.AMOVO}, /* syn */
632 {"MOVOU", LTYPE3, i386.AMOVOU},
633 {"MOVHLPS", LTYPE3, i386.AMOVHLPS},
634 {"MOVHPD", LTYPE3, i386.AMOVHPD},
635 {"MOVHPS", LTYPE3, i386.AMOVHPS},
636 {"MOVLHPS", LTYPE3, i386.AMOVLHPS},
637 {"MOVLPD", LTYPE3, i386.AMOVLPD},
638 {"MOVLPS", LTYPE3, i386.AMOVLPS},
639 {"MOVMSKPD", LTYPE3, i386.AMOVMSKPD},
640 {"MOVMSKPS", LTYPE3, i386.AMOVMSKPS},
641 {"MOVNTO", LTYPE3, i386.AMOVNTO},
642 {"MOVNTDQ", LTYPE3, i386.AMOVNTO}, /* syn */
643 {"MOVNTPD", LTYPE3, i386.AMOVNTPD},
644 {"MOVNTPS", LTYPE3, i386.AMOVNTPS},
645 {"MOVSD", LTYPE3, i386.AMOVSD},
646 {"MOVSS", LTYPE3, i386.AMOVSS},
647 {"MOVUPD", LTYPE3, i386.AMOVUPD},
648 {"MOVUPS", LTYPE3, i386.AMOVUPS},
649 {"MULPD", LTYPE3, i386.AMULPD},
650 {"MULPS", LTYPE3, i386.AMULPS},
651 {"MULSD", LTYPE3, i386.AMULSD},
652 {"MULSS", LTYPE3, i386.AMULSS},
653 {"ORPD", LTYPE3, i386.AORPD},
654 {"ORPS", LTYPE3, i386.AORPS},
655 {"PADDQ", LTYPE3, i386.APADDQ},
656 {"PAND", LTYPE3, i386.APAND},
657 {"PCMPEQB", LTYPE3, i386.APCMPEQB},
658 {"PMAXSW", LTYPE3, i386.APMAXSW},
659 {"PMAXUB", LTYPE3, i386.APMAXUB},
660 {"PMINSW", LTYPE3, i386.APMINSW},
661 {"PMINUB", LTYPE3, i386.APMINUB},
662 {"PMOVMSKB", LTYPE3, i386.APMOVMSKB},
663 {"PSADBW", LTYPE3, i386.APSADBW},
664 {"PSHUFB", LTYPE3, i386.APSHUFB},
665 {"PSHUFHW", LTYPEX, i386.APSHUFHW},
666 {"PSHUFL", LTYPEX, i386.APSHUFL},
667 {"PSHUFLW", LTYPEX, i386.APSHUFLW},
668 {"PSUBB", LTYPE3, i386.APSUBB},
669 {"PSUBL", LTYPE3, i386.APSUBL},
670 {"PSUBQ", LTYPE3, i386.APSUBQ},
671 {"PSUBSB", LTYPE3, i386.APSUBSB},
672 {"PSUBSW", LTYPE3, i386.APSUBSW},
673 {"PSUBUSB", LTYPE3, i386.APSUBUSB},
674 {"PSUBUSW", LTYPE3, i386.APSUBUSW},
675 {"PSUBW", LTYPE3, i386.APSUBW},
676 {"PUNPCKHQDQ", LTYPE3, i386.APUNPCKHQDQ},
677 {"PUNPCKLQDQ", LTYPE3, i386.APUNPCKLQDQ},
678 {"PXOR", LTYPE3, i386.APXOR},
679 {"RCPPS", LTYPE3, i386.ARCPPS},
680 {"RCPSS", LTYPE3, i386.ARCPSS},
681 {"RSQRTPS", LTYPE3, i386.ARSQRTPS},
682 {"RSQRTSS", LTYPE3, i386.ARSQRTSS},
683 {"SQRTPD", LTYPE3, i386.ASQRTPD},
684 {"SQRTPS", LTYPE3, i386.ASQRTPS},
685 {"SQRTSD", LTYPE3, i386.ASQRTSD},
686 {"SQRTSS", LTYPE3, i386.ASQRTSS},
687 {"SUBPD", LTYPE3, i386.ASUBPD},
688 {"SUBPS", LTYPE3, i386.ASUBPS},
689 {"SUBSD", LTYPE3, i386.ASUBSD},
690 {"SUBSS", LTYPE3, i386.ASUBSS},
691 {"UCOMISD", LTYPE3, i386.AUCOMISD},
692 {"UCOMISS", LTYPE3, i386.AUCOMISS},
693 {"UNPCKHPD", LTYPE3, i386.AUNPCKHPD},
694 {"UNPCKHPS", LTYPE3, i386.AUNPCKHPS},
695 {"UNPCKLPD", LTYPE3, i386.AUNPCKLPD},
696 {"UNPCKLPS", LTYPE3, i386.AUNPCKLPS},
697 {"XORPD", LTYPE3, i386.AXORPD},
698 {"XORPS", LTYPE3, i386.AXORPS},
699 {"USEFIELD", LTYPEN, i386.AUSEFIELD},
700 {"PCDATA", LTYPEPC, i386.APCDATA},
701 {"FUNCDATA", LTYPEF, i386.AFUNCDATA},
705 nullgen.Type_ = i386.D_NONE
706 nullgen.Index = i386.D_NONE
709 func checkscale(scale int8) {
718 yyerror("scale must be 1248: %d", scale)
721 func syminit(s *asm.Sym) {
731 outcode(i386.AEND, &g2)
741 func outcode(a int, g2 *Addr2) {
759 pl = obj.Linknewplist(asm.Ctxt)
768 if a != i386.AGLOBL && a != i386.ADATA {