Warning: Attempt to read property "date" on null in /usr/local/www/websvn.planix.org/blame.php on line 247

Warning: Attempt to read property "msg" on null in /usr/local/www/websvn.planix.org/blame.php on line 247
WebSVN – planix.SVN – Blame – /os/branches/planix-v0/sys/src/cmd/6a/lex.c – Rev 2

Subversion Repositories planix.SVN

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#define	EXTERN
2
#include "a.h"
3
#include "y.tab.h"
4
#include <ctype.h>
5
 
6
void
7
main(int argc, char *argv[])
8
{
9
	char *p;
10
	int nout, nproc, status, i, c;
11
 
12
	thechar = '6';
13
	thestring = "amd64";
14
	memset(debug, 0, sizeof(debug));
15
	cinit();
16
	outfile = 0;
17
	include[ninclude++] = ".";
18
	ARGBEGIN {
19
	default:
20
		c = ARGC();
21
		if(c >= 0 || c < sizeof(debug))
22
			debug[c] = 1;
23
		break;
24
 
25
	case 'o':
26
		outfile = ARGF();
27
		break;
28
 
29
	case 'D':
30
		p = ARGF();
31
		if(p)
32
			Dlist[nDlist++] = p;
33
		break;
34
 
35
	case 'I':
36
		p = ARGF();
37
		setinclude(p);
38
		break;
39
	} ARGEND
40
	if(*argv == 0) {
41
		print("usage: %ca [-options] file.s\n", thechar);
42
		errorexit();
43
	}
44
	if(argc > 1 && systemtype(Windows)){
45
		print("can't assemble multiple files on windows\n");
46
		errorexit();
47
	}
48
	if(argc > 1 && !systemtype(Windows)) {
49
		nproc = 1;
50
		if(p = getenv("NPROC"))
51
			nproc = atol(p);	/* */
52
		c = 0;
53
		nout = 0;
54
		for(;;) {
55
			while(nout < nproc && argc > 0) {
56
				i = myfork();
57
				if(i < 0) {
58
					i = mywait(&status);
59
					if(i < 0)
60
						errorexit();
61
					if(status)
62
						c++;
63
					nout--;
64
					continue;
65
				}
66
				if(i == 0) {
67
					print("%s:\n", *argv);
68
					if(assemble(*argv))
69
						errorexit();
70
					exits(0);
71
				}
72
				nout++;
73
				argc--;
74
				argv++;
75
			}
76
			i = mywait(&status);
77
			if(i < 0) {
78
				if(c)
79
					errorexit();
80
				exits(0);
81
			}
82
			if(status)
83
				c++;
84
			nout--;
85
		}
86
	}
87
	if(assemble(argv[0]))
88
		errorexit();
89
	exits(0);
90
}
91
 
92
int
93
assemble(char *file)
94
{
95
	char ofile[100], incfile[20], *p;
96
	int i, of;
97
 
98
	strcpy(ofile, file);
99
	p = utfrrune(ofile, pathchar());
100
	if(p) {
101
		include[0] = ofile;
102
		*p++ = 0;
103
	} else
104
		p = ofile;
105
	if(outfile == 0) {
106
		outfile = p;
107
		if(outfile){
108
			p = utfrrune(outfile, '.');
109
			if(p)
110
				if(p[1] == 's' && p[2] == 0)
111
					p[0] = 0;
112
			p = utfrune(outfile, 0);
113
			p[0] = '.';
114
			p[1] = thechar;
115
			p[2] = 0;
116
		} else
117
			outfile = "/dev/null";
118
	}
119
	p = getenv("INCLUDE");
120
	if(p) {
121
		setinclude(p);
122
	} else {
123
		if(systemtype(Plan9)) {
124
			sprint(incfile,"/%s/include", thestring);
125
			setinclude(strdup(incfile));
126
		}
127
	}
128
 
129
	of = mycreat(outfile, 0664);
130
	if(of < 0) {
131
		yyerror("%ca: cannot create %s", thechar, outfile);
132
		errorexit();
133
	}
134
	Binit(&obuf, of, OWRITE);
135
 
136
	pass = 1;
137
	pinit(file);
138
	for(i=0; i<nDlist; i++)
139
		dodefine(Dlist[i]);
140
	yyparse();
141
	if(nerrors) {
142
		cclean();
143
		return nerrors;
144
	}
145
 
146
	pass = 2;
147
	outhist();
148
	pinit(file);
149
	for(i=0; i<nDlist; i++)
150
		dodefine(Dlist[i]);
151
	yyparse();
152
	cclean();
153
	return nerrors;
154
}
155
 
156
struct
157
{
158
	char	*name;
159
	ushort	type;
160
	ushort	value;
161
} itab[] =
162
{
163
	"SP",		LSP,	D_AUTO,
164
	"SB",		LSB,	D_EXTERN,
165
	"FP",		LFP,	D_PARAM,
166
	"PC",		LPC,	D_BRANCH,
167
 
168
	"AL",		LBREG,	D_AL,
169
	"CL",		LBREG,	D_CL,
170
	"DL",		LBREG,	D_DL,
171
	"BL",		LBREG,	D_BL,
172
/*	"SPB",		LBREG,	D_SPB,	*/
173
	"SIB",		LBREG,	D_SIB,
174
	"DIB",		LBREG,	D_DIB,
175
	"BPB",		LBREG,	D_BPB,
176
	"R8B",		LBREG,	D_R8B,
177
	"R9B",		LBREG,	D_R9B,
178
	"R10B",		LBREG,	D_R10B,
179
	"R11B",		LBREG,	D_R11B,
180
	"R12B",		LBREG,	D_R12B,
181
	"R13B",		LBREG,	D_R13B,
182
	"R14B",		LBREG,	D_R14B,
183
	"R15B",		LBREG,	D_R15B,
184
 
185
	"AH",		LBREG,	D_AH,
186
	"CH",		LBREG,	D_CH,
187
	"DH",		LBREG,	D_DH,
188
	"BH",		LBREG,	D_BH,
189
 
190
	"AX",		LLREG,	D_AX,
191
	"CX",		LLREG,	D_CX,
192
	"DX",		LLREG,	D_DX,
193
	"BX",		LLREG,	D_BX,
194
/*	"SP",		LLREG,	D_SP,	*/
195
	"BP",		LLREG,	D_BP,
196
	"SI",		LLREG,	D_SI,
197
	"DI",		LLREG,	D_DI,
198
	"R8",		LLREG,	D_R8,
199
	"R9",		LLREG,	D_R9,
200
	"R10",		LLREG,	D_R10,
201
	"R11",		LLREG,	D_R11,
202
	"R12",		LLREG,	D_R12,
203
	"R13",		LLREG,	D_R13,
204
	"R14",		LLREG,	D_R14,
205
	"R15",		LLREG,	D_R15,
206
 
207
	"RARG",		LLREG,	REGARG,
208
 
209
	"F0",		LFREG,	D_F0+0,
210
	"F1",		LFREG,	D_F0+1,
211
	"F2",		LFREG,	D_F0+2,
212
	"F3",		LFREG,	D_F0+3,
213
	"F4",		LFREG,	D_F0+4,
214
	"F5",		LFREG,	D_F0+5,
215
	"F6",		LFREG,	D_F0+6,
216
	"F7",		LFREG,	D_F0+7,
217
 
218
	"M0",		LMREG,	D_M0+0,
219
	"M1",		LMREG,	D_M0+1,
220
	"M2",		LMREG,	D_M0+2,
221
	"M3",		LMREG,	D_M0+3,
222
	"M4",		LMREG,	D_M0+4,
223
	"M5",		LMREG,	D_M0+5,
224
	"M6",		LMREG,	D_M0+6,
225
	"M7",		LMREG,	D_M0+7,
226
 
227
	"X0",		LXREG,	D_X0+0,
228
	"X1",		LXREG,	D_X0+1,
229
	"X2",		LXREG,	D_X0+2,
230
	"X3",		LXREG,	D_X0+3,
231
	"X4",		LXREG,	D_X0+4,
232
	"X5",		LXREG,	D_X0+5,
233
	"X6",		LXREG,	D_X0+6,
234
	"X7",		LXREG,	D_X0+7,
235
	"X8",		LXREG,	D_X0+8,
236
	"X9",		LXREG,	D_X0+9,
237
	"X10",		LXREG,	D_X0+10,
238
	"X11",		LXREG,	D_X0+11,
239
	"X12",		LXREG,	D_X0+12,
240
	"X13",		LXREG,	D_X0+13,
241
	"X14",		LXREG,	D_X0+14,
242
	"X15",		LXREG,	D_X0+15,
243
 
244
	"CS",		LSREG,	D_CS,
245
	"SS",		LSREG,	D_SS,
246
	"DS",		LSREG,	D_DS,
247
	"ES",		LSREG,	D_ES,
248
	"FS",		LSREG,	D_FS,
249
	"GS",		LSREG,	D_GS,
250
 
251
	"GDTR",		LBREG,	D_GDTR,
252
	"IDTR",		LBREG,	D_IDTR,
253
	"LDTR",		LBREG,	D_LDTR,
254
	"MSW",		LBREG,	D_MSW,
255
	"TASK",		LBREG,	D_TASK,
256
 
257
	"CR0",		LBREG,	D_CR+0,
258
	"CR1",		LBREG,	D_CR+1,
259
	"CR2",		LBREG,	D_CR+2,
260
	"CR3",		LBREG,	D_CR+3,
261
	"CR4",		LBREG,	D_CR+4,
262
	"CR5",		LBREG,	D_CR+5,
263
	"CR6",		LBREG,	D_CR+6,
264
	"CR7",		LBREG,	D_CR+7,
265
	"CR8",		LBREG,	D_CR+8,
266
	"CR9",		LBREG,	D_CR+9,
267
	"CR10",		LBREG,	D_CR+10,
268
	"CR11",		LBREG,	D_CR+11,
269
	"CR12",		LBREG,	D_CR+12,
270
	"CR13",		LBREG,	D_CR+13,
271
	"CR14",		LBREG,	D_CR+14,
272
	"CR15",		LBREG,	D_CR+15,
273
 
274
	"DR0",		LBREG,	D_DR+0,
275
	"DR1",		LBREG,	D_DR+1,
276
	"DR2",		LBREG,	D_DR+2,
277
	"DR3",		LBREG,	D_DR+3,
278
	"DR4",		LBREG,	D_DR+4,
279
	"DR5",		LBREG,	D_DR+5,
280
	"DR6",		LBREG,	D_DR+6,
281
	"DR7",		LBREG,	D_DR+7,
282
 
283
	"TR0",		LBREG,	D_TR+0,
284
	"TR1",		LBREG,	D_TR+1,
285
	"TR2",		LBREG,	D_TR+2,
286
	"TR3",		LBREG,	D_TR+3,
287
	"TR4",		LBREG,	D_TR+4,
288
	"TR5",		LBREG,	D_TR+5,
289
	"TR6",		LBREG,	D_TR+6,
290
	"TR7",		LBREG,	D_TR+7,
291
 
292
	"AAA",		LTYPE0,	AAAA,
293
	"AAD",		LTYPE0,	AAAD,
294
	"AAM",		LTYPE0,	AAAM,
295
	"AAS",		LTYPE0,	AAAS,
296
	"ADCB",		LTYPE3,	AADCB,
297
	"ADCL",		LTYPE3,	AADCL,
298
	"ADCQ",		LTYPE3,	AADCQ,
299
	"ADCW",		LTYPE3,	AADCW,
300
	"ADDB",		LTYPE3,	AADDB,
301
	"ADDL",		LTYPE3,	AADDL,
302
	"ADDQ",		LTYPE3,	AADDQ,
303
	"ADDW",		LTYPE3,	AADDW,
304
	"ADJSP",	LTYPE2,	AADJSP,
305
	"ANDB",		LTYPE3,	AANDB,
306
	"ANDL",		LTYPE3,	AANDL,
307
	"ANDQ",		LTYPE3,	AANDQ,
308
	"ANDW",		LTYPE3,	AANDW,
309
	"ARPL",		LTYPE3,	AARPL,
310
	"BOUNDL",	LTYPE3,	ABOUNDL,
311
	"BOUNDW",	LTYPE3,	ABOUNDW,
312
	"BSFL",		LTYPE3,	ABSFL,
313
	"BSFQ",		LTYPE3,	ABSFQ,
314
	"BSFW",		LTYPE3,	ABSFW,
315
	"BSRL",		LTYPE3,	ABSRL,
316
	"BSRQ",		LTYPE3,	ABSRQ,
317
	"BSRW",		LTYPE3,	ABSRW,
318
	"BTCL",		LTYPE3,	ABTCL,
319
	"BTCQ",		LTYPE3,	ABTCQ,
320
	"BTCW",		LTYPE3,	ABTCW,
321
	"BTL",		LTYPE3,	ABTL,
322
	"BTQ",		LTYPE3,	ABTQ,
323
	"BTRL",		LTYPE3,	ABTRL,
324
	"BTRQ",		LTYPE3,	ABTRQ,
325
	"BTRW",		LTYPE3,	ABTRW,
326
	"BTSL",		LTYPE3,	ABTSL,
327
	"BTSQ",		LTYPE3,	ABTSQ,
328
	"BTSW",		LTYPE3,	ABTSW,
329
	"BTW",		LTYPE3,	ABTW,
330
	"BYTE",		LTYPE2,	ABYTE,
331
	"CALL",		LTYPEC,	ACALL,
332
	"CLC",		LTYPE0,	ACLC,
333
	"CLD",		LTYPE0,	ACLD,
334
	"CLI",		LTYPE0,	ACLI,
335
	"CLTS",		LTYPE0,	ACLTS,
336
	"CMC",		LTYPE0,	ACMC,
337
	"CMPB",		LTYPE4,	ACMPB,
338
	"CMPL",		LTYPE4,	ACMPL,
339
	"CMPQ",		LTYPE4,	ACMPQ,
340
	"CMPW",		LTYPE4,	ACMPW,
341
	"CMPSB",	LTYPE0,	ACMPSB,
342
	"CMPSL",	LTYPE0,	ACMPSL,
343
	"CMPSQ",	LTYPE0,	ACMPSQ,
344
	"CMPSW",	LTYPE0,	ACMPSW,
345
	"CMPXCHG8B",	LTYPE1,	ACMPXCHG8B,
346
	"CMPXCHGB",	LTYPE3,	ACMPXCHGB,	/* LTYPE3? */
347
	"CMPXCHGL",	LTYPE3,	ACMPXCHGL,
348
	"CMPXCHGQ",	LTYPE3,	ACMPXCHGQ,
349
	"CMPXCHGW",	LTYPE3,	ACMPXCHGW,
350
	"CPUID",	LTYPE0,	ACPUID,
351
	"DAA",		LTYPE0,	ADAA,
352
	"DAS",		LTYPE0,	ADAS,
353
	"DATA",		LTYPED,	ADATA,
354
	"DECB",		LTYPE1,	ADECB,
355
	"DECL",		LTYPE1,	ADECL,
356
	"DECQ",		LTYPE1,	ADECQ,
357
	"DECW",		LTYPE1,	ADECW,
358
	"DIVB",		LTYPE2,	ADIVB,
359
	"DIVL",		LTYPE2,	ADIVL,
360
	"DIVQ",		LTYPE2,	ADIVQ,
361
	"DIVW",		LTYPE2,	ADIVW,
362
	"EMMS",		LTYPE0,	AEMMS,
363
	"END",		LTYPE0,	AEND,
364
	"ENTER",	LTYPE2,	AENTER,
365
	"GLOBL",	LTYPET,	AGLOBL,
366
	"HLT",		LTYPE0,	AHLT,
367
	"IDIVB",	LTYPE2,	AIDIVB,
368
	"IDIVL",	LTYPE2,	AIDIVL,
369
	"IDIVQ",	LTYPE2,	AIDIVQ,
370
	"IDIVW",	LTYPE2,	AIDIVW,
371
	"IMULB",	LTYPEI,	AIMULB,
372
	"IMULL",	LTYPEI,	AIMULL,
373
	"IMULQ",	LTYPEI,	AIMULQ,
374
	"IMULW",	LTYPEI,	AIMULW,
375
	"INB",		LTYPE0,	AINB,
376
	"INL",		LTYPE0,	AINL,
377
	"INW",		LTYPE0,	AINW,
378
	"INCB",		LTYPE1,	AINCB,
379
	"INCL",		LTYPE1,	AINCL,
380
	"INCQ",		LTYPE1,	AINCQ,
381
	"INCW",		LTYPE1,	AINCW,
382
	"INSB",		LTYPE0,	AINSB,
383
	"INSL",		LTYPE0,	AINSL,
384
	"INSW",		LTYPE0,	AINSW,
385
	"INT",		LTYPE2,	AINT,
386
	"INTO",		LTYPE0,	AINTO,
387
	"INVD",		LTYPE0,	AINVD,
388
	"INVLPG",	LTYPE2,	AINVLPG,
389
	"IRETL",	LTYPE0,	AIRETL,
390
	"IRETQ",	LTYPE0,	AIRETQ,
391
	"IRETW",	LTYPE0,	AIRETW,
392
 
393
	"JOS",		LTYPER,	AJOS,
394
	"JO",		LTYPER,	AJOS,	/* alternate */
395
	"JOC",		LTYPER,	AJOC,
396
	"JNO",		LTYPER,	AJOC,	/* alternate */
397
	"JCS",		LTYPER,	AJCS,
398
	"JB",		LTYPER,	AJCS,	/* alternate */
399
	"JC",		LTYPER,	AJCS,	/* alternate */
400
	"JNAE",		LTYPER,	AJCS,	/* alternate */
401
	"JLO",		LTYPER,	AJCS,	/* alternate */
402
	"JCC",		LTYPER,	AJCC,
403
	"JAE",		LTYPER,	AJCC,	/* alternate */
404
	"JNB",		LTYPER,	AJCC,	/* alternate */
405
	"JNC",		LTYPER,	AJCC,	/* alternate */
406
	"JHS",		LTYPER,	AJCC,	/* alternate */
407
	"JEQ",		LTYPER,	AJEQ,
408
	"JE",		LTYPER,	AJEQ,	/* alternate */
409
	"JZ",		LTYPER,	AJEQ,	/* alternate */
410
	"JNE",		LTYPER,	AJNE,
411
	"JNZ",		LTYPER,	AJNE,	/* alternate */
412
	"JLS",		LTYPER,	AJLS,
413
	"JBE",		LTYPER,	AJLS,	/* alternate */
414
	"JNA",		LTYPER,	AJLS,	/* alternate */
415
	"JHI",		LTYPER,	AJHI,
416
	"JA",		LTYPER,	AJHI,	/* alternate */
417
	"JNBE",		LTYPER,	AJHI,	/* alternate */
418
	"JMI",		LTYPER,	AJMI,
419
	"JS",		LTYPER,	AJMI,	/* alternate */
420
	"JPL",		LTYPER,	AJPL,
421
	"JNS",		LTYPER,	AJPL,	/* alternate */
422
	"JPS",		LTYPER,	AJPS,
423
	"JP",		LTYPER,	AJPS,	/* alternate */
424
	"JPE",		LTYPER,	AJPS,	/* alternate */
425
	"JPC",		LTYPER,	AJPC,
426
	"JNP",		LTYPER,	AJPC,	/* alternate */
427
	"JPO",		LTYPER,	AJPC,	/* alternate */
428
	"JLT",		LTYPER,	AJLT,
429
	"JL",		LTYPER,	AJLT,	/* alternate */
430
	"JNGE",		LTYPER,	AJLT,	/* alternate */
431
	"JGE",		LTYPER,	AJGE,
432
	"JNL",		LTYPER,	AJGE,	/* alternate */
433
	"JLE",		LTYPER,	AJLE,
434
	"JNG",		LTYPER,	AJLE,	/* alternate */
435
	"JGT",		LTYPER,	AJGT,
436
	"JG",		LTYPER,	AJGT,	/* alternate */
437
	"JNLE",		LTYPER,	AJGT,	/* alternate */
438
 
439
	"JCXZ",		LTYPER,	AJCXZ,
440
	"JMP",		LTYPEC,	AJMP,
441
	"LAHF",		LTYPE0,	ALAHF,
442
	"LARL",		LTYPE3,	ALARL,
443
	"LARW",		LTYPE3,	ALARW,
444
	"LEAL",		LTYPE3,	ALEAL,
445
	"LEAQ",		LTYPE3,	ALEAQ,
446
	"LEAW",		LTYPE3,	ALEAW,
447
	"LEAVEL",	LTYPE0,	ALEAVEL,
448
	"LEAVEQ",	LTYPE0,	ALEAVEQ,
449
	"LEAVEW",	LTYPE0,	ALEAVEW,
450
	"LFENCE",	LTYPE0,	ALFENCE,
451
	"LOCK",		LTYPE0,	ALOCK,
452
	"LODSB",	LTYPE0,	ALODSB,
453
	"LODSL",	LTYPE0,	ALODSL,
454
	"LODSQ",	LTYPE0,	ALODSQ,
455
	"LODSW",	LTYPE0,	ALODSW,
456
	"LONG",		LTYPE2,	ALONG,
457
	"LOOP",		LTYPER,	ALOOP,
458
	"LOOPEQ",	LTYPER,	ALOOPEQ,
459
	"LOOPNE",	LTYPER,	ALOOPNE,
460
	"LSLL",		LTYPE3,	ALSLL,
461
	"LSLW",		LTYPE3,	ALSLW,
462
	"MFENCE",	LTYPE0,	AMFENCE,
463
	"MODE",		LTYPE2,	AMODE,
464
	"MOVB",		LTYPE3,	AMOVB,
465
	"MOVL",		LTYPEM,	AMOVL,
466
	"MOVQ",		LTYPEM,	AMOVQ,
467
	"MOVW",		LTYPEM,	AMOVW,
468
	"MOVBLSX",	LTYPE3, AMOVBLSX,
469
	"MOVBLZX",	LTYPE3, AMOVBLZX,
470
	"MOVBQSX",	LTYPE3,	AMOVBQSX,
471
	"MOVBQZX",	LTYPE3,	AMOVBQZX,
472
	"MOVBWSX",	LTYPE3, AMOVBWSX,
473
	"MOVBWZX",	LTYPE3, AMOVBWZX,
474
	"MOVLQSX",	LTYPE3, AMOVLQSX,
475
	"MOVLQZX",	LTYPE3, AMOVLQZX,
476
	"MOVNTIL",	LTYPE3,	AMOVNTIL,
477
	"MOVNTIQ",	LTYPE3,	AMOVNTIQ,
478
	"MOVWLSX",	LTYPE3, AMOVWLSX,
479
	"MOVWLZX",	LTYPE3, AMOVWLZX,
480
	"MOVWQSX",	LTYPE3,	AMOVWQSX,
481
	"MOVWQZX",	LTYPE3,	AMOVWQZX,
482
	"MOVSB",	LTYPE0,	AMOVSB,
483
	"MOVSL",	LTYPE0,	AMOVSL,
484
	"MOVSQ",	LTYPE0,	AMOVSQ,
485
	"MOVSW",	LTYPE0,	AMOVSW,
486
	"MULB",		LTYPE2,	AMULB,
487
	"MULL",		LTYPE2,	AMULL,
488
	"MULQ",		LTYPE2,	AMULQ,
489
	"MULW",		LTYPE2,	AMULW,
490
	"NEGB",		LTYPE1,	ANEGB,
491
	"NEGL",		LTYPE1,	ANEGL,
492
	"NEGQ",		LTYPE1,	ANEGQ,
493
	"NEGW",		LTYPE1,	ANEGW,
494
	"NOP",		LTYPEN,	ANOP,
495
	"NOTB",		LTYPE1,	ANOTB,
496
	"NOTL",		LTYPE1,	ANOTL,
497
	"NOTQ",		LTYPE1,	ANOTQ,
498
	"NOTW",		LTYPE1,	ANOTW,
499
	"ORB",		LTYPE3,	AORB,
500
	"ORL",		LTYPE3,	AORL,
501
	"ORQ",		LTYPE3,	AORQ,
502
	"ORW",		LTYPE3,	AORW,
503
	"OUTB",		LTYPE0,	AOUTB,
504
	"OUTL",		LTYPE0,	AOUTL,
505
	"OUTW",		LTYPE0,	AOUTW,
506
	"OUTSB",	LTYPE0,	AOUTSB,
507
	"OUTSL",	LTYPE0,	AOUTSL,
508
	"OUTSW",	LTYPE0,	AOUTSW,
509
	"POPAL",	LTYPE0,	APOPAL,
510
	"POPAW",	LTYPE0,	APOPAW,
511
	"POPFL",	LTYPE0,	APOPFL,
512
	"POPFQ",	LTYPE0,	APOPFQ,
513
	"POPFW",	LTYPE0,	APOPFW,
514
	"POPL",		LTYPE1,	APOPL,
515
	"POPQ",		LTYPE1,	APOPQ,
516
	"POPW",		LTYPE1,	APOPW,
517
	"PUSHAL",	LTYPE0,	APUSHAL,
518
	"PUSHAW",	LTYPE0,	APUSHAW,
519
	"PUSHFL",	LTYPE0,	APUSHFL,
520
	"PUSHFQ",	LTYPE0,	APUSHFQ,
521
	"PUSHFW",	LTYPE0,	APUSHFW,
522
	"PUSHL",	LTYPE2,	APUSHL,
523
	"PUSHQ",	LTYPE2,	APUSHQ,
524
	"PUSHW",	LTYPE2,	APUSHW,
525
	"RCLB",		LTYPE3,	ARCLB,
526
	"RCLL",		LTYPE3,	ARCLL,
527
	"RCLQ",		LTYPE3,	ARCLQ,
528
	"RCLW",		LTYPE3,	ARCLW,
529
	"RCRB",		LTYPE3,	ARCRB,
530
	"RCRL",		LTYPE3,	ARCRL,
531
	"RCRQ",		LTYPE3,	ARCRQ,
532
	"RCRW",		LTYPE3,	ARCRW,
533
	"RDMSR",	LTYPE0,	ARDMSR,
534
	"RDPMC",	LTYPE0,	ARDPMC,
535
	"RDTSC",	LTYPE0,	ARDTSC,
536
	"REP",		LTYPE0,	AREP,
537
	"REPN",		LTYPE0,	AREPN,
538
	"RET",		LTYPE0,	ARET,
539
	"RETFL",	LTYPERT,ARETFL,
540
	"RETFW",	LTYPERT,ARETFW,
541
	"RETFQ",	LTYPERT,ARETFQ,
542
	"ROLB",		LTYPE3,	AROLB,
543
	"ROLL",		LTYPE3,	AROLL,
544
	"ROLQ",		LTYPE3,	AROLQ,
545
	"ROLW",		LTYPE3,	AROLW,
546
	"RORB",		LTYPE3,	ARORB,
547
	"RORL",		LTYPE3,	ARORL,
548
	"RORQ",		LTYPE3,	ARORQ,
549
	"RORW",		LTYPE3,	ARORW,
550
	"RSM",		LTYPE0,	ARSM,
551
	"SAHF",		LTYPE0,	ASAHF,
552
	"SALB",		LTYPE3,	ASALB,
553
	"SALL",		LTYPE3,	ASALL,
554
	"SALQ",		LTYPE3,	ASALQ,
555
	"SALW",		LTYPE3,	ASALW,
556
	"SARB",		LTYPE3,	ASARB,
557
	"SARL",		LTYPE3,	ASARL,
558
	"SARQ",		LTYPE3,	ASARQ,
559
	"SARW",		LTYPE3,	ASARW,
560
	"SBBB",		LTYPE3,	ASBBB,
561
	"SBBL",		LTYPE3,	ASBBL,
562
	"SBBQ",		LTYPE3,	ASBBQ,
563
	"SBBW",		LTYPE3,	ASBBW,
564
	"SCASB",	LTYPE0,	ASCASB,
565
	"SCASL",	LTYPE0,	ASCASL,
566
	"SCASQ",	LTYPE0,	ASCASQ,
567
	"SCASW",	LTYPE0,	ASCASW,
568
	"SETCC",	LTYPE1,	ASETCC,
569
	"SETCS",	LTYPE1,	ASETCS,
570
	"SETEQ",	LTYPE1,	ASETEQ,
571
	"SETGE",	LTYPE1,	ASETGE,
572
	"SETGT",	LTYPE1,	ASETGT,
573
	"SETHI",	LTYPE1,	ASETHI,
574
	"SETLE",	LTYPE1,	ASETLE,
575
	"SETLS",	LTYPE1,	ASETLS,
576
	"SETLT",	LTYPE1,	ASETLT,
577
	"SETMI",	LTYPE1,	ASETMI,
578
	"SETNE",	LTYPE1,	ASETNE,
579
	"SETOC",	LTYPE1,	ASETOC,
580
	"SETOS",	LTYPE1,	ASETOS,
581
	"SETPC",	LTYPE1,	ASETPC,
582
	"SETPL",	LTYPE1,	ASETPL,
583
	"SETPS",	LTYPE1,	ASETPS,
584
	"SFENCE",	LTYPE0,	ASFENCE,
585
	"CDQ",		LTYPE0,	ACDQ,
586
	"CWD",		LTYPE0,	ACWD,
587
	"CQO",		LTYPE0,	ACQO,
588
	"SHLB",		LTYPE3,	ASHLB,
589
	"SHLL",		LTYPES,	ASHLL,
590
	"SHLQ",		LTYPES,	ASHLQ,
591
	"SHLW",		LTYPES,	ASHLW,
592
	"SHRB",		LTYPE3,	ASHRB,
593
	"SHRL",		LTYPES,	ASHRL,
594
	"SHRQ",		LTYPES,	ASHRQ,
595
	"SHRW",		LTYPES,	ASHRW,
596
	"STC",		LTYPE0,	ASTC,
597
	"STD",		LTYPE0,	ASTD,
598
	"STI",		LTYPE0,	ASTI,
599
	"STOSB",	LTYPE0,	ASTOSB,
600
	"STOSL",	LTYPE0,	ASTOSL,
601
	"STOSQ",	LTYPE0,	ASTOSQ,
602
	"STOSW",	LTYPE0,	ASTOSW,
603
	"SUBB",		LTYPE3,	ASUBB,
604
	"SUBL",		LTYPE3,	ASUBL,
605
	"SUBQ",		LTYPE3,	ASUBQ,
606
	"SUBW",		LTYPE3,	ASUBW,
607
	"SYSCALL",	LTYPE0,	ASYSCALL,
608
	"SYSRET",	LTYPE0,	ASYSRET,
609
	"SWAPGS",	LTYPE0,	ASWAPGS,
610
	"TESTB",	LTYPE3,	ATESTB,
611
	"TESTL",	LTYPE3,	ATESTL,
612
	"TESTQ",	LTYPE3,	ATESTQ,
613
	"TESTW",	LTYPE3,	ATESTW,
614
	"TEXT",		LTYPET,	ATEXT,
615
	"VERR",		LTYPE2,	AVERR,
616
	"VERW",		LTYPE2,	AVERW,
617
	"QUAD",		LTYPE2,	AQUAD,
618
	"WAIT",		LTYPE0,	AWAIT,
619
	"WBINVD",	LTYPE0,	AWBINVD,
620
	"WRMSR",	LTYPE0,	AWRMSR,
621
	"WORD",		LTYPE2,	AWORD,
622
	"XADDB",	LTYPE3,	AXADDB,
623
	"XADDL",	LTYPE3,	AXADDL,
624
	"XADDQ",	LTYPE3,	AXADDQ,
625
	"XADDW",	LTYPE3,	AXADDW,
626
	"XCHGB",	LTYPE3,	AXCHGB,
627
	"XCHGL",	LTYPE3,	AXCHGL,
628
	"XCHGQ",	LTYPE3,	AXCHGQ,
629
	"XCHGW",	LTYPE3,	AXCHGW,
630
	"XLAT",		LTYPE2,	AXLAT,
631
	"XORB",		LTYPE3,	AXORB,
632
	"XORL",		LTYPE3,	AXORL,
633
	"XORQ",		LTYPE3,	AXORQ,
634
	"XORW",		LTYPE3,	AXORW,
635
 
636
	"CMOVLCC",	LTYPE3,	ACMOVLCC,
637
	"CMOVLCS",	LTYPE3,	ACMOVLCS,
638
	"CMOVLEQ",	LTYPE3,	ACMOVLEQ,
639
	"CMOVLGE",	LTYPE3,	ACMOVLGE,
640
	"CMOVLGT",	LTYPE3,	ACMOVLGT,
641
	"CMOVLHI",	LTYPE3,	ACMOVLHI,
642
	"CMOVLLE",	LTYPE3,	ACMOVLLE,
643
	"CMOVLLS",	LTYPE3,	ACMOVLLS,
644
	"CMOVLLT",	LTYPE3,	ACMOVLLT,
645
	"CMOVLMI",	LTYPE3,	ACMOVLMI,
646
	"CMOVLNE",	LTYPE3,	ACMOVLNE,
647
	"CMOVLOC",	LTYPE3,	ACMOVLOC,
648
	"CMOVLOS",	LTYPE3,	ACMOVLOS,
649
	"CMOVLPC",	LTYPE3,	ACMOVLPC,
650
	"CMOVLPL",	LTYPE3,	ACMOVLPL,
651
	"CMOVLPS",	LTYPE3,	ACMOVLPS,
652
	"CMOVQCC",	LTYPE3,	ACMOVQCC,
653
	"CMOVQCS",	LTYPE3,	ACMOVQCS,
654
	"CMOVQEQ",	LTYPE3,	ACMOVQEQ,
655
	"CMOVQGE",	LTYPE3,	ACMOVQGE,
656
	"CMOVQGT",	LTYPE3,	ACMOVQGT,
657
	"CMOVQHI",	LTYPE3,	ACMOVQHI,
658
	"CMOVQLE",	LTYPE3,	ACMOVQLE,
659
	"CMOVQLS",	LTYPE3,	ACMOVQLS,
660
	"CMOVQLT",	LTYPE3,	ACMOVQLT,
661
	"CMOVQMI",	LTYPE3,	ACMOVQMI,
662
	"CMOVQNE",	LTYPE3,	ACMOVQNE,
663
	"CMOVQOC",	LTYPE3,	ACMOVQOC,
664
	"CMOVQOS",	LTYPE3,	ACMOVQOS,
665
	"CMOVQPC",	LTYPE3,	ACMOVQPC,
666
	"CMOVQPL",	LTYPE3,	ACMOVQPL,
667
	"CMOVQPS",	LTYPE3,	ACMOVQPS,
668
	"CMOVWCC",	LTYPE3,	ACMOVWCC,
669
	"CMOVWCS",	LTYPE3,	ACMOVWCS,
670
	"CMOVWEQ",	LTYPE3,	ACMOVWEQ,
671
	"CMOVWGE",	LTYPE3,	ACMOVWGE,
672
	"CMOVWGT",	LTYPE3,	ACMOVWGT,
673
	"CMOVWHI",	LTYPE3,	ACMOVWHI,
674
	"CMOVWLE",	LTYPE3,	ACMOVWLE,
675
	"CMOVWLS",	LTYPE3,	ACMOVWLS,
676
	"CMOVWLT",	LTYPE3,	ACMOVWLT,
677
	"CMOVWMI",	LTYPE3,	ACMOVWMI,
678
	"CMOVWNE",	LTYPE3,	ACMOVWNE,
679
	"CMOVWOC",	LTYPE3,	ACMOVWOC,
680
	"CMOVWOS",	LTYPE3,	ACMOVWOS,
681
	"CMOVWPC",	LTYPE3,	ACMOVWPC,
682
	"CMOVWPL",	LTYPE3,	ACMOVWPL,
683
	"CMOVWPS",	LTYPE3,	ACMOVWPS,
684
 
685
	"FMOVB",	LTYPE3, AFMOVB,
686
	"FMOVBP",	LTYPE3, AFMOVBP,
687
	"FMOVD",	LTYPE3, AFMOVD,
688
	"FMOVDP",	LTYPE3, AFMOVDP,
689
	"FMOVF",	LTYPE3, AFMOVF,
690
	"FMOVFP",	LTYPE3, AFMOVFP,
691
	"FMOVL",	LTYPE3, AFMOVL,
692
	"FMOVLP",	LTYPE3, AFMOVLP,
693
	"FMOVV",	LTYPE3, AFMOVV,
694
	"FMOVVP",	LTYPE3, AFMOVVP,
695
	"FMOVW",	LTYPE3, AFMOVW,
696
	"FMOVWP",	LTYPE3, AFMOVWP,
697
	"FMOVX",	LTYPE3, AFMOVX,
698
	"FMOVXP",	LTYPE3, AFMOVXP,
699
	"FCOMB",	LTYPE3, AFCOMB,
700
	"FCOMBP",	LTYPE3, AFCOMBP,
701
	"FCOMD",	LTYPE3, AFCOMD,
702
	"FCOMDP",	LTYPE3, AFCOMDP,
703
	"FCOMDPP",	LTYPE3, AFCOMDPP,
704
	"FCOMF",	LTYPE3, AFCOMF,
705
	"FCOMFP",	LTYPE3, AFCOMFP,
706
	"FCOML",	LTYPE3, AFCOML,
707
	"FCOMLP",	LTYPE3, AFCOMLP,
708
	"FCOMW",	LTYPE3, AFCOMW,
709
	"FCOMWP",	LTYPE3, AFCOMWP,
710
	"FUCOM",	LTYPE3, AFUCOM,
711
	"FUCOMP",	LTYPE3, AFUCOMP,
712
	"FUCOMPP",	LTYPE3, AFUCOMPP,
713
	"FADDW",	LTYPE3, AFADDW,
714
	"FADDL",	LTYPE3, AFADDL,
715
	"FADDF",	LTYPE3, AFADDF,
716
	"FADDD",	LTYPE3, AFADDD,
717
	"FADDDP",	LTYPE3, AFADDDP,
718
	"FSUBDP",	LTYPE3, AFSUBDP,
719
	"FSUBW",	LTYPE3, AFSUBW,
720
	"FSUBL",	LTYPE3, AFSUBL,
721
	"FSUBF",	LTYPE3, AFSUBF,
722
	"FSUBD",	LTYPE3, AFSUBD,
723
	"FSUBRDP",	LTYPE3, AFSUBRDP,
724
	"FSUBRW",	LTYPE3, AFSUBRW,
725
	"FSUBRL",	LTYPE3, AFSUBRL,
726
	"FSUBRF",	LTYPE3, AFSUBRF,
727
	"FSUBRD",	LTYPE3, AFSUBRD,
728
	"FMULDP",	LTYPE3, AFMULDP,
729
	"FMULW",	LTYPE3, AFMULW,
730
	"FMULL",	LTYPE3, AFMULL,
731
	"FMULF",	LTYPE3, AFMULF,
732
	"FMULD",	LTYPE3, AFMULD,
733
	"FDIVDP",	LTYPE3, AFDIVDP,
734
	"FDIVW",	LTYPE3, AFDIVW,
735
	"FDIVL",	LTYPE3, AFDIVL,
736
	"FDIVF",	LTYPE3, AFDIVF,
737
	"FDIVD",	LTYPE3, AFDIVD,
738
	"FDIVRDP",	LTYPE3, AFDIVRDP,
739
	"FDIVRW",	LTYPE3, AFDIVRW,
740
	"FDIVRL",	LTYPE3, AFDIVRL,
741
	"FDIVRF",	LTYPE3, AFDIVRF,
742
	"FDIVRD",	LTYPE3, AFDIVRD,
743
	"FXCHD",	LTYPE3, AFXCHD,
744
	"FFREE",	LTYPE1, AFFREE,
745
	"FLDCW",	LTYPE2, AFLDCW,
746
	"FLDENV",	LTYPE1, AFLDENV,
747
	"FRSTOR",	LTYPE2, AFRSTOR,
748
	"FSAVE",	LTYPE1, AFSAVE,
749
	"FSTCW",	LTYPE1, AFSTCW,
750
	"FSTENV",	LTYPE1, AFSTENV,
751
	"FSTSW",	LTYPE1, AFSTSW,
752
	"F2XM1",	LTYPE0, AF2XM1,
753
	"FABS",		LTYPE0, AFABS,
754
	"FCHS",		LTYPE0, AFCHS,
755
	"FCLEX",	LTYPE0, AFCLEX,
756
	"FCOS",		LTYPE0, AFCOS,
757
	"FDECSTP",	LTYPE0, AFDECSTP,
758
	"FINCSTP",	LTYPE0, AFINCSTP,
759
	"FINIT",	LTYPE0, AFINIT,
760
	"FLD1",		LTYPE0, AFLD1,
761
	"FLDL2E",	LTYPE0, AFLDL2E,
762
	"FLDL2T",	LTYPE0, AFLDL2T,
763
	"FLDLG2",	LTYPE0, AFLDLG2,
764
	"FLDLN2",	LTYPE0, AFLDLN2,
765
	"FLDPI",	LTYPE0, AFLDPI,
766
	"FLDZ",		LTYPE0, AFLDZ,
767
	"FNOP",		LTYPE0, AFNOP,
768
	"FPATAN",	LTYPE0, AFPATAN,
769
	"FPREM",	LTYPE0, AFPREM,
770
	"FPREM1",	LTYPE0, AFPREM1,
771
	"FPTAN",	LTYPE0, AFPTAN,
772
	"FRNDINT",	LTYPE0, AFRNDINT,
773
	"FSCALE",	LTYPE0, AFSCALE,
774
	"FSIN",		LTYPE0, AFSIN,
775
	"FSINCOS",	LTYPE0, AFSINCOS,
776
	"FSQRT",	LTYPE0, AFSQRT,
777
	"FTST",		LTYPE0, AFTST,
778
	"FXAM",		LTYPE0, AFXAM,
779
	"FXTRACT",	LTYPE0, AFXTRACT,
780
	"FYL2X",	LTYPE0, AFYL2X,
781
	"FYL2XP1",	LTYPE0, AFYL2XP1,
782
 
783
	"ADDPD",	LTYPE3,	AADDPD,
784
	"ADDPS",	LTYPE3,	AADDPS,
785
	"ADDSD",	LTYPE3,	AADDSD,
786
	"ADDSS",	LTYPE3,	AADDSS,
787
	"ANDNPD",	LTYPE3,	AANDNPD,
788
	"ANDNPS",	LTYPE3,	AANDNPS,
789
	"ANDPD",	LTYPE3,	AANDPD,
790
	"ANDPS",	LTYPE3,	AANDPS,
791
	"CMPPD",	LTYPEXC,ACMPPD,
792
	"CMPPS",	LTYPEXC,ACMPPS,
793
	"CMPSD",	LTYPEXC,ACMPSD,
794
	"CMPSS",	LTYPEXC,ACMPSS,
795
	"COMISD",	LTYPE3,	ACOMISD,
796
	"COMISS",	LTYPE3,	ACOMISS,
797
	"CVTPL2PD",	LTYPE3,	ACVTPL2PD,
798
	"CVTPL2PS",	LTYPE3,	ACVTPL2PS,
799
	"CVTPD2PL",	LTYPE3,	ACVTPD2PL,
800
	"CVTPD2PS",	LTYPE3,	ACVTPD2PS,
801
	"CVTPS2PL",	LTYPE3,	ACVTPS2PL,
802
	"PF2IW",	LTYPE3,	APF2IW,
803
	"PF2IL",	LTYPE3,	APF2IL,
804
	"PF2ID",	LTYPE3,	APF2IL,	/* syn */
805
	"PI2FL",	LTYPE3,	API2FL,
806
	"PI2FD",	LTYPE3,	API2FL,	/* syn */
807
	"PI2FW",	LTYPE3,	API2FW,
808
	"CVTPS2PD",	LTYPE3,	ACVTPS2PD,
809
	"CVTSD2SL",	LTYPE3,	ACVTSD2SL,
810
	"CVTSD2SQ",	LTYPE3,	ACVTSD2SQ,
811
	"CVTSD2SS",	LTYPE3,	ACVTSD2SS,
812
	"CVTSL2SD",	LTYPE3,	ACVTSL2SD,
813
	"CVTSQ2SD",	LTYPE3,	ACVTSQ2SD,
814
	"CVTSL2SS",	LTYPE3,	ACVTSL2SS,
815
	"CVTSQ2SS",	LTYPE3,	ACVTSQ2SS,
816
	"CVTSS2SD",	LTYPE3,	ACVTSS2SD,
817
	"CVTSS2SL",	LTYPE3,	ACVTSS2SL,
818
	"CVTSS2SQ",	LTYPE3,	ACVTSS2SQ,
819
	"CVTTPD2PL",	LTYPE3,	ACVTTPD2PL,
820
	"CVTTPS2PL",	LTYPE3,	ACVTTPS2PL,
821
	"CVTTSD2SL",	LTYPE3,	ACVTTSD2SL,
822
	"CVTTSD2SQ",	LTYPE3,	ACVTTSD2SQ,
823
	"CVTTSS2SL",	LTYPE3,	ACVTTSS2SL,
824
	"CVTTSS2SQ",	LTYPE3,	ACVTTSS2SQ,
825
	"DIVPD",	LTYPE3,	ADIVPD,
826
	"DIVPS",	LTYPE3,	ADIVPS,
827
	"DIVSD",	LTYPE3,	ADIVSD,
828
	"DIVSS",	LTYPE3,	ADIVSS,
829
	"FXRSTOR",	LTYPE2,	AFXRSTOR,
830
	"FXRSTOR64",	LTYPE2,	AFXRSTOR64,
831
	"FXSAVE",	LTYPE1,	AFXSAVE,
832
	"FXSAVE64",	LTYPE1,	AFXSAVE64,
833
	"LDMXCSR",	LTYPE2,	ALDMXCSR,
834
	"MASKMOVOU",	LTYPE3,	AMASKMOVOU,
835
	"MASKMOVDQU",	LTYPE3,	AMASKMOVOU,	/* syn */
836
	"MASKMOVQ",	LTYPE3,	AMASKMOVQ,
837
	"MAXPD",	LTYPE3,	AMAXPD,
838
	"MAXPS",	LTYPE3,	AMAXPS,
839
	"MAXSD",	LTYPE3,	AMAXSD,
840
	"MAXSS",	LTYPE3,	AMAXSS,
841
	"MINPD",	LTYPE3,	AMINPD,
842
	"MINPS",	LTYPE3,	AMINPS,
843
	"MINSD",	LTYPE3,	AMINSD,
844
	"MINSS",	LTYPE3,	AMINSS,
845
	"MOVAPD",	LTYPE3,	AMOVAPD,
846
	"MOVAPS",	LTYPE3,	AMOVAPS,
847
	"MOVD",		LTYPE3,	AMOVQ,	/* syn */
848
	"MOVDQ2Q",	LTYPE3,	AMOVQ,	/* syn */
849
	"MOVO",		LTYPE3,	AMOVO,
850
	"MOVOA",	LTYPE3,	AMOVO,	/* syn */
851
	"MOVOU",	LTYPE3,	AMOVOU,
852
	"MOVHLPS",	LTYPE3,	AMOVHLPS,
853
	"MOVHPD",	LTYPE3,	AMOVHPD,
854
	"MOVHPS",	LTYPE3,	AMOVHPS,
855
	"MOVLHPS",	LTYPE3,	AMOVLHPS,
856
	"MOVLPD",	LTYPE3,	AMOVLPD,
857
	"MOVLPS",	LTYPE3,	AMOVLPS,
858
	"MOVMSKPD",	LTYPE3,	AMOVMSKPD,
859
	"MOVMSKPS",	LTYPE3,	AMOVMSKPS,
860
	"MOVNTO",	LTYPE3,	AMOVNTO,
861
	"MOVNTDQ",	LTYPE3,	AMOVNTO,	/* syn */
862
	"MOVNTPD",	LTYPE3,	AMOVNTPD,
863
	"MOVNTPS",	LTYPE3,	AMOVNTPS,
864
	"MOVNTQ",	LTYPE3,	AMOVNTQ,
865
	"MOVQOZX",	LTYPE3,	AMOVQOZX,
866
	"MOVSD",	LTYPE3,	AMOVSD,
867
	"MOVSS",	LTYPE3,	AMOVSS,
868
	"MOVUPD",	LTYPE3,	AMOVUPD,
869
	"MOVUPS",	LTYPE3,	AMOVUPS,
870
	"MULPD",	LTYPE3,	AMULPD,
871
	"MULPS",	LTYPE3,	AMULPS,
872
	"MULSD",	LTYPE3,	AMULSD,
873
	"MULSS",	LTYPE3,	AMULSS,
874
	"ORPD",		LTYPE3,	AORPD,
875
	"ORPS",		LTYPE3,	AORPS,
876
	"PACKSSLW",	LTYPE3,	APACKSSLW,
877
	"PACKSSWB",	LTYPE3,	APACKSSWB,
878
	"PACKUSWB",	LTYPE3,	APACKUSWB,
879
	"PADDB",	LTYPE3,	APADDB,
880
	"PADDL",	LTYPE3,	APADDL,
881
	"PADDQ",	LTYPE3,	APADDQ,
882
	"PADDSB",	LTYPE3,	APADDSB,
883
	"PADDSW",	LTYPE3,	APADDSW,
884
	"PADDUSB",	LTYPE3,	APADDUSB,
885
	"PADDUSW",	LTYPE3,	APADDUSW,
886
	"PADDW",	LTYPE3,	APADDW,
887
	"PAND",		LTYPE3, APAND,
888
	"PANDB",	LTYPE3,	APANDB,
889
	"PANDL",	LTYPE3,	APANDL,
890
	"PANDSB",	LTYPE3,	APANDSB,
891
	"PANDSW",	LTYPE3,	APANDSW,
892
	"PANDUSB",	LTYPE3,	APANDUSB,
893
	"PANDUSW",	LTYPE3,	APANDUSW,
894
	"PANDW",	LTYPE3,	APANDW,
895
	"PANDN",	LTYPE3, APANDN,
896
	"PAVGB",	LTYPE3,	APAVGB,
897
	"PAVGW",	LTYPE3,	APAVGW,
898
	"PCMPEQB",	LTYPE3,	APCMPEQB,
899
	"PCMPEQL",	LTYPE3,	APCMPEQL,
900
	"PCMPEQW",	LTYPE3,	APCMPEQW,
901
	"PCMPGTB",	LTYPE3,	APCMPGTB,
902
	"PCMPGTL",	LTYPE3,	APCMPGTL,	
903
	"PCMPGTW",	LTYPE3,	APCMPGTW,
904
	"PEXTRW",	LTYPEX,	APEXTRW,
905
	"PINSRW",	LTYPEX,	APINSRW,
906
	"PMADDWL",	LTYPE3,	APMADDWL,
907
	"PMAXSW",	LTYPE3,	APMAXSW,
908
	"PMAXUB",	LTYPE3,	APMAXUB,
909
	"PMINSW",	LTYPE3,	APMINSW,
910
	"PMINUB",	LTYPE3,	APMINUB,
911
	"PMOVMSKB",	LTYPE3,	APMOVMSKB,
912
	"PMULHRW",	LTYPE3,	APMULHRW,
913
	"PMULHUW",	LTYPE3,	APMULHUW,
914
	"PMULHW",	LTYPE3,	APMULHW,
915
	"PMULLW",	LTYPE3,	APMULLW,
916
	"PMULULQ",	LTYPE3,	APMULULQ,
917
	"POR",		LTYPE3,	APOR,
918
	"PSADBW",	LTYPE3,	APSADBW,
919
	"PSHUFHW",	LTYPEX,	APSHUFHW,
920
	"PSHUFL",	LTYPEX,	APSHUFL,
921
	"PSHUFLW",	LTYPEX,	APSHUFLW,
922
	"PSHUFW",	LTYPEX, APSHUFW,
923
	"PSLLO",	LTYPE3,	APSLLO,
924
	"PSLLDQ",	LTYPE3,	APSLLO,	/* syn */
925
	"PSLLL",	LTYPE3,	APSLLL,
926
	"PSLLQ",	LTYPE3,	APSLLQ,
927
	"PSLLW",	LTYPE3,	APSLLW,
928
	"PSRAL",	LTYPE3,	APSRAL,
929
	"PSRAW",	LTYPE3,	APSRAW,
930
	"PSRLO",	LTYPE3,	APSRLO,
931
	"PSRLDQ",	LTYPE3,	APSRLO,	/* syn */
932
	"PSRLL",	LTYPE3,	APSRLL,
933
	"PSRLQ",	LTYPE3,	APSRLQ,
934
	"PSRLW",	LTYPE3,	APSRLW,
935
	"PSUBB",	LTYPE3,	APSUBB,
936
	"PSUBL",	LTYPE3,	APSUBL,
937
	"PSUBQ",	LTYPE3,	APSUBQ,
938
	"PSUBSB",	LTYPE3,	APSUBSB,
939
	"PSUBSW",	LTYPE3,	APSUBSW,
940
	"PSUBUSB",	LTYPE3,	APSUBUSB,
941
	"PSUBUSW",	LTYPE3,	APSUBUSW,
942
	"PSUBW",	LTYPE3,	APSUBW,
943
	"PUNPCKHBW",	LTYPE3,	APUNPCKHBW,
944
	"PUNPCKHLQ",	LTYPE3,	APUNPCKHLQ,
945
	"PUNPCKHQDQ",	LTYPE3,	APUNPCKHQDQ,
946
	"PUNPCKHWL",	LTYPE3,	APUNPCKHWL,
947
	"PUNPCKLBW",	LTYPE3,	APUNPCKLBW,
948
	"PUNPCKLLQ",	LTYPE3,	APUNPCKLLQ,
949
	"PUNPCKLQDQ",	LTYPE3,	APUNPCKLQDQ,
950
	"PUNPCKLWL",	LTYPE3,	APUNPCKLWL,
951
	"PXOR",		LTYPE3,	APXOR,
952
	"RCPPS",	LTYPE3,	ARCPPS,
953
	"RCPSS",	LTYPE3,	ARCPSS,
954
	"RSQRTPS",	LTYPE3,	ARSQRTPS,
955
	"RSQRTSS",	LTYPE3,	ARSQRTSS,
956
	"SHUFPD",	LTYPEX,	ASHUFPD,
957
	"SHUFPS",	LTYPEX,	ASHUFPS,
958
	"SQRTPD",	LTYPE3,	ASQRTPD,
959
	"SQRTPS",	LTYPE3,	ASQRTPS,
960
	"SQRTSD",	LTYPE3,	ASQRTSD,
961
	"SQRTSS",	LTYPE3,	ASQRTSS,
962
	"STMXCSR",	LTYPE1,	ASTMXCSR,
963
	"SUBPD",	LTYPE3,	ASUBPD,
964
	"SUBPS",	LTYPE3,	ASUBPS,
965
	"SUBSD",	LTYPE3,	ASUBSD,
966
	"SUBSS",	LTYPE3,	ASUBSS,
967
	"UCOMISD",	LTYPE3,	AUCOMISD,
968
	"UCOMISS",	LTYPE3,	AUCOMISS,
969
	"UNPCKHPD",	LTYPE3,	AUNPCKHPD,
970
	"UNPCKHPS",	LTYPE3,	AUNPCKHPS,
971
	"UNPCKLPD",	LTYPE3,	AUNPCKLPD,
972
	"UNPCKLPS",	LTYPE3,	AUNPCKLPS,
973
	"XORPD",	LTYPE3,	AXORPD,
974
	"XORPS",	LTYPE3,	AXORPS,
975
 
976
 
977
};
978
 
979
void
980
cinit(void)
981
{
982
	Sym *s;
983
	int i;
984
 
985
	nullgen.sym = S;
986
	nullgen.offset = 0;
987
	if(FPCHIP)
988
		nullgen.dval = 0;
989
	for(i=0; i<sizeof(nullgen.sval); i++)
990
		nullgen.sval[i] = 0;
991
	nullgen.type = D_NONE;
992
	nullgen.index = D_NONE;
993
	nullgen.scale = 0;
994
 
995
	nerrors = 0;
996
	iostack = I;
997
	iofree = I;
998
	peekc = IGN;
999
	nhunk = 0;
1000
	for(i=0; i<NHASH; i++)
1001
		hash[i] = S;
1002
	for(i=0; itab[i].name; i++) {
1003
		s = slookup(itab[i].name);
1004
		if(s->type != LNAME)
1005
			yyerror("double initialization %s", itab[i].name);
1006
		s->type = itab[i].type;
1007
		s->value = itab[i].value;
1008
	}
1009
 
1010
	pathname = allocn(pathname, 0, 100);
1011
	if(mygetwd(pathname, 99) == 0) {
1012
		pathname = allocn(pathname, 100, 900);
1013
		if(mygetwd(pathname, 999) == 0)
1014
			strcpy(pathname, "/???");
1015
	}
1016
}
1017
 
1018
void
1019
checkscale(int scale)
1020
{
1021
 
1022
	switch(scale) {
1023
	case 1:
1024
	case 2:
1025
	case 4:
1026
	case 8:
1027
		return;
1028
	}
1029
	yyerror("scale must be 1248: %d", scale);
1030
}
1031
 
1032
void
1033
syminit(Sym *s)
1034
{
1035
 
1036
	s->type = LNAME;
1037
	s->value = 0;
1038
}
1039
 
1040
void
1041
cclean(void)
1042
{
1043
	Gen2 g2;
1044
 
1045
	g2.from = nullgen;
1046
	g2.to = nullgen;
1047
	outcode(AEND, &g2);
1048
	Bflush(&obuf);
1049
}
1050
 
1051
void
1052
zname(char *n, int t, int s)
1053
{
1054
 
1055
	Bputc(&obuf, ANAME);		/* as(2) */
1056
	Bputc(&obuf, ANAME>>8);
1057
	Bputc(&obuf, t);		/* type */
1058
	Bputc(&obuf, s);		/* sym */
1059
	while(*n) {
1060
		Bputc(&obuf, *n);
1061
		n++;
1062
	}
1063
	Bputc(&obuf, 0);
1064
}
1065
 
1066
void
1067
zaddr(Gen *a, int s)
1068
{
1069
	long l;
1070
	int i, t;
1071
	char *n;
1072
	Ieee e;
1073
 
1074
	t = 0;
1075
	if(a->index != D_NONE || a->scale != 0)
1076
		t |= T_INDEX;
1077
	if(a->offset != 0) {
1078
		t |= T_OFFSET;
1079
		l = a->offset;
1080
		if((vlong)l != a->offset)
1081
			t |= T_64;
1082
	}
1083
	if(s != 0)
1084
		t |= T_SYM;
1085
 
1086
	switch(a->type) {
1087
	default:
1088
		t |= T_TYPE;
1089
		break;
1090
	case D_FCONST:
1091
		t |= T_FCONST;
1092
		break;
1093
	case D_SCONST:
1094
		t |= T_SCONST;
1095
		break;
1096
	case D_NONE:
1097
		break;
1098
	}
1099
	Bputc(&obuf, t);
1100
 
1101
	if(t & T_INDEX) {	/* implies index, scale */
1102
		Bputc(&obuf, a->index);
1103
		Bputc(&obuf, a->scale);
1104
	}
1105
	if(t & T_OFFSET) {	/* implies offset */
1106
		l = a->offset;
1107
		Bputc(&obuf, l);
1108
		Bputc(&obuf, l>>8);
1109
		Bputc(&obuf, l>>16);
1110
		Bputc(&obuf, l>>24);
1111
		if(t & T_64) {
1112
			l = a->offset>>32;
1113
			Bputc(&obuf, l);
1114
			Bputc(&obuf, l>>8);
1115
			Bputc(&obuf, l>>16);
1116
			Bputc(&obuf, l>>24);
1117
		}
1118
	}
1119
	if(t & T_SYM)		/* implies sym */
1120
		Bputc(&obuf, s);
1121
	if(t & T_FCONST) {
1122
		ieeedtod(&e, a->dval);
1123
		l = e.l;
1124
		Bputc(&obuf, l);
1125
		Bputc(&obuf, l>>8);
1126
		Bputc(&obuf, l>>16);
1127
		Bputc(&obuf, l>>24);
1128
		l = e.h;
1129
		Bputc(&obuf, l);
1130
		Bputc(&obuf, l>>8);
1131
		Bputc(&obuf, l>>16);
1132
		Bputc(&obuf, l>>24);
1133
		return;
1134
	}
1135
	if(t & T_SCONST) {
1136
		n = a->sval;
1137
		for(i=0; i<NSNAME; i++) {
1138
			Bputc(&obuf, *n);
1139
			n++;
1140
		}
1141
		return;
1142
	}
1143
	if(t & T_TYPE)
1144
		Bputc(&obuf, a->type);
1145
}
1146
 
1147
void
1148
outcode(int a, Gen2 *g2)
1149
{
1150
	int sf, st, t;
1151
	Sym *s;
1152
 
1153
	if(pass == 1)
1154
		goto out;
1155
 
1156
jackpot:
1157
	sf = 0;
1158
	s = g2->from.sym;
1159
	while(s != S) {
1160
		sf = s->sym;
1161
		if(sf < 0 || sf >= NSYM)
1162
			sf = 0;
1163
		t = g2->from.type;
1164
		if(t == D_ADDR)
1165
			t = g2->from.index;
1166
		if(h[sf].type == t)
1167
		if(h[sf].sym == s)
1168
			break;
1169
		zname(s->name, t, sym);
1170
		s->sym = sym;
1171
		h[sym].sym = s;
1172
		h[sym].type = t;
1173
		sf = sym;
1174
		sym++;
1175
		if(sym >= NSYM)
1176
			sym = 1;
1177
		break;
1178
	}
1179
	st = 0;
1180
	s = g2->to.sym;
1181
	while(s != S) {
1182
		st = s->sym;
1183
		if(st < 0 || st >= NSYM)
1184
			st = 0;
1185
		t = g2->to.type;
1186
		if(t == D_ADDR)
1187
			t = g2->to.index;
1188
		if(h[st].type == t)
1189
		if(h[st].sym == s)
1190
			break;
1191
		zname(s->name, t, sym);
1192
		s->sym = sym;
1193
		h[sym].sym = s;
1194
		h[sym].type = t;
1195
		st = sym;
1196
		sym++;
1197
		if(sym >= NSYM)
1198
			sym = 1;
1199
		if(st == sf)
1200
			goto jackpot;
1201
		break;
1202
	}
1203
	Bputc(&obuf, a);
1204
	Bputc(&obuf, a>>8);
1205
	Bputc(&obuf, lineno);
1206
	Bputc(&obuf, lineno>>8);
1207
	Bputc(&obuf, lineno>>16);
1208
	Bputc(&obuf, lineno>>24);
1209
	zaddr(&g2->from, sf);
1210
	zaddr(&g2->to, st);
1211
 
1212
out:
1213
	if(a != AGLOBL && a != ADATA && a != AMODE)
1214
		pc++;
1215
}
1216
 
1217
void
1218
outhist(void)
1219
{
1220
	Gen g;
1221
	Hist *h;
1222
	char *p, *q, *op, c;
1223
	int n;
1224
 
1225
	g = nullgen;
1226
	c = pathchar();
1227
	for(h = hist; h != H; h = h->link) {
1228
		p = h->name;
1229
		op = 0;
1230
		/* on windows skip drive specifier in pathname */
1231
		if(systemtype(Windows) && p && p[1] == ':'){
1232
			p += 2;
1233
			c = *p;
1234
		}
1235
		if(p && p[0] != c && h->offset == 0 && pathname){
1236
			/* on windows skip drive specifier in pathname */
1237
			if(systemtype(Windows) && pathname[1] == ':') {
1238
				op = p;
1239
				p = pathname+2;
1240
				c = *p;
1241
			} else if(pathname[0] == c){
1242
				op = p;
1243
				p = pathname;
1244
			}
1245
		}
1246
		while(p) {
1247
			q = strchr(p, c);
1248
			if(q) {
1249
				n = q-p;
1250
				if(n == 0){
1251
					n = 1;	/* leading "/" */
1252
					*p = '/';	/* don't emit "\" on windows */
1253
				}
1254
				q++;
1255
			} else {
1256
				n = strlen(p);
1257
				q = 0;
1258
			}
1259
			if(n) {
1260
				Bputc(&obuf, ANAME);
1261
				Bputc(&obuf, ANAME>>8);
1262
				Bputc(&obuf, D_FILE);	/* type */
1263
				Bputc(&obuf, 1);	/* sym */
1264
				Bputc(&obuf, '<');
1265
				Bwrite(&obuf, p, n);
1266
				Bputc(&obuf, 0);
1267
			}
1268
			p = q;
1269
			if(p == 0 && op) {
1270
				p = op;
1271
				op = 0;
1272
			}
1273
		}
1274
		g.offset = h->offset;
1275
 
1276
		Bputc(&obuf, AHISTORY);
1277
		Bputc(&obuf, AHISTORY>>8);
1278
		Bputc(&obuf, h->line);
1279
		Bputc(&obuf, h->line>>8);
1280
		Bputc(&obuf, h->line>>16);
1281
		Bputc(&obuf, h->line>>24);
1282
		zaddr(&nullgen, 0);
1283
		zaddr(&g, 0);
1284
	}
1285
}
1286
 
1287
#include "../cc/lexbody"
1288
#include "../cc/macbody"
1289
#include "../cc/compat"