1
2
3
4
5 package main
6
7 import (
8 "bytes"
9 "io/ioutil"
10 "path/filepath"
11 "regexp"
12 "strings"
13 "sync"
14 "testing"
15
16 "golang.org/x/arch/x86/xeddata"
17 )
18
19 func newTestContext(t testing.TB) *context {
20 ctx := &context{xedPath: filepath.Join("testdata", "xedpath")}
21 db, err := xeddata.NewDatabase(ctx.xedPath)
22 if err != nil {
23 t.Fatalf("open test database: %v", err)
24 }
25 ctx.db = db
26 return ctx
27 }
28
29 func newStringSet(keys ...string) map[string]bool {
30 set := make(map[string]bool)
31 for _, k := range keys {
32 set[k] = true
33 }
34 return set
35 }
36
37 func generateToString(t *testing.T) string {
38 ctx := newTestContext(t)
39 buildTables(ctx)
40 var buf bytes.Buffer
41 writeTables(&buf, ctx)
42 return buf.String()
43 }
44
45 func TestOutput(t *testing.T) {
46
47
48
49
50
51
52 type testCase struct {
53 opcode string
54 ytabs string
55 optabLines string
56 }
57 var testCases []testCase
58 {
59 opcodeRE := regexp.MustCompile(`as: ([A-Z][A-Z0-9]*)`)
60 data, err := ioutil.ReadFile(filepath.Join("testdata", "golden.txt"))
61 if err != nil {
62 t.Fatalf("read golden file: %v", err)
63 }
64 for _, entry := range bytes.Split(data, []byte("======")) {
65 parts := bytes.Split(entry, []byte("----"))
66 ytabs := parts[0]
67 optabLines := parts[1]
68 opcode := opcodeRE.FindSubmatch(optabLines)[1]
69 testCases = append(testCases, testCase{
70 ytabs: strings.TrimSpace(string(ytabs)),
71 optabLines: strings.TrimSpace(string(optabLines)),
72 opcode: string(opcode)[len("A"):],
73 })
74 }
75 }
76
77 output := generateToString(t)
78 for _, tc := range testCases {
79 if !strings.Contains(output, tc.ytabs) {
80 t.Errorf("%s: ytabs not matched", tc.opcode)
81 }
82 if !strings.Contains(output, tc.optabLines) {
83 t.Errorf("%s: optab lines not matched", tc.opcode)
84 }
85 }
86 }
87
88 func TestOutputStability(t *testing.T) {
89
90
91
92
93
94 const count = 8
95
96 want := generateToString(t)
97 var wg sync.WaitGroup
98 for i := 0; i < count; i++ {
99 wg.Add(1)
100 go func(i int) {
101 if want != generateToString(t) {
102 t.Errorf("output #%d mismatches", i)
103 }
104 wg.Done()
105 }(i)
106 }
107 wg.Wait()
108 }
109
110 func TestOpcodeCoverage(t *testing.T) {
111
112
113
114
115 expectedOpcodes := newStringSet(
116 "ANDNL",
117 "ANDNQ",
118 "BEXTRL",
119 "BEXTRQ",
120 "BLSIL",
121 "BLSIQ",
122 "BLSMSKL",
123 "BLSMSKQ",
124 "BLSRL",
125 "BLSRQ",
126 "BZHIL",
127 "BZHIQ",
128 "KADDB",
129 "KADDD",
130 "KADDQ",
131 "KADDW",
132 "KANDB",
133 "KANDD",
134 "KANDNB",
135 "KANDND",
136 "KANDNQ",
137 "KANDNW",
138 "KANDQ",
139 "KANDW",
140 "KMOVB",
141 "KMOVD",
142 "KMOVQ",
143 "KMOVW",
144 "KNOTB",
145 "KNOTD",
146 "KNOTQ",
147 "KNOTW",
148 "KORB",
149 "KORD",
150 "KORQ",
151 "KORTESTB",
152 "KORTESTD",
153 "KORTESTQ",
154 "KORTESTW",
155 "KORW",
156 "KSHIFTLB",
157 "KSHIFTLD",
158 "KSHIFTLQ",
159 "KSHIFTLW",
160 "KSHIFTRB",
161 "KSHIFTRD",
162 "KSHIFTRQ",
163 "KSHIFTRW",
164 "KTESTB",
165 "KTESTD",
166 "KTESTQ",
167 "KTESTW",
168 "KUNPCKBW",
169 "KUNPCKDQ",
170 "KUNPCKWD",
171 "KXNORB",
172 "KXNORD",
173 "KXNORQ",
174 "KXNORW",
175 "KXORB",
176 "KXORD",
177 "KXORQ",
178 "KXORW",
179 "MULXL",
180 "MULXQ",
181 "PDEPL",
182 "PDEPQ",
183 "PEXTL",
184 "PEXTQ",
185 "RORXL",
186 "RORXQ",
187 "SARXL",
188 "SARXQ",
189 "SHLXL",
190 "SHLXQ",
191 "SHRXL",
192 "SHRXQ",
193 "V4FMADDPS",
194 "V4FMADDSS",
195 "V4FNMADDPS",
196 "V4FNMADDSS",
197 "VADDPD",
198 "VADDPS",
199 "VADDSD",
200 "VADDSS",
201 "VADDSUBPD",
202 "VADDSUBPS",
203 "VAESDEC",
204 "VAESDECLAST",
205 "VAESENC",
206 "VAESENCLAST",
207 "VAESIMC",
208 "VAESKEYGENASSIST",
209 "VALIGND",
210 "VALIGNQ",
211 "VANDNPD",
212 "VANDNPS",
213 "VANDPD",
214 "VANDPS",
215 "VBLENDMPD",
216 "VBLENDMPS",
217 "VBLENDPD",
218 "VBLENDPS",
219 "VBLENDVPD",
220 "VBLENDVPS",
221 "VBROADCASTF128",
222 "VBROADCASTF32X2",
223 "VBROADCASTF32X4",
224 "VBROADCASTF32X8",
225 "VBROADCASTF64X2",
226 "VBROADCASTF64X4",
227 "VBROADCASTI128",
228 "VBROADCASTI32X2",
229 "VBROADCASTI32X4",
230 "VBROADCASTI32X8",
231 "VBROADCASTI64X2",
232 "VBROADCASTI64X4",
233 "VBROADCASTSD",
234 "VBROADCASTSS",
235 "VCMPPD",
236 "VCMPPS",
237 "VCMPSD",
238 "VCMPSS",
239 "VCOMISD",
240 "VCOMISS",
241 "VCOMPRESSPD",
242 "VCOMPRESSPS",
243 "VCVTDQ2PD",
244 "VCVTDQ2PS",
245 "VCVTPD2DQ",
246 "VCVTPD2DQX",
247 "VCVTPD2DQY",
248 "VCVTPD2PS",
249 "VCVTPD2PSX",
250 "VCVTPD2PSY",
251 "VCVTPD2QQ",
252 "VCVTPD2UDQ",
253 "VCVTPD2UDQX",
254 "VCVTPD2UDQY",
255 "VCVTPD2UQQ",
256 "VCVTPH2PS",
257 "VCVTPS2DQ",
258 "VCVTPS2PD",
259 "VCVTPS2PH",
260 "VCVTPS2QQ",
261 "VCVTPS2UDQ",
262 "VCVTPS2UQQ",
263 "VCVTQQ2PD",
264 "VCVTQQ2PS",
265 "VCVTQQ2PSX",
266 "VCVTQQ2PSY",
267 "VCVTSD2SI",
268 "VCVTSD2SIQ",
269 "VCVTSD2SS",
270 "VCVTSD2USIL",
271 "VCVTSD2USIQ",
272 "VCVTSI2SDL",
273 "VCVTSI2SDQ",
274 "VCVTSI2SSL",
275 "VCVTSI2SSQ",
276 "VCVTSS2SD",
277 "VCVTSS2SI",
278 "VCVTSS2SIQ",
279 "VCVTSS2USIL",
280 "VCVTSS2USIQ",
281 "VCVTTPD2DQ",
282 "VCVTTPD2DQX",
283 "VCVTTPD2DQY",
284 "VCVTTPD2QQ",
285 "VCVTTPD2UDQ",
286 "VCVTTPD2UDQX",
287 "VCVTTPD2UDQY",
288 "VCVTTPD2UQQ",
289 "VCVTTPS2DQ",
290 "VCVTTPS2QQ",
291 "VCVTTPS2UDQ",
292 "VCVTTPS2UQQ",
293 "VCVTTSD2SI",
294 "VCVTTSD2SIQ",
295 "VCVTTSD2USIL",
296 "VCVTTSD2USIQ",
297 "VCVTTSS2SI",
298 "VCVTTSS2SIQ",
299 "VCVTTSS2USIL",
300 "VCVTTSS2USIQ",
301 "VCVTUDQ2PD",
302 "VCVTUDQ2PS",
303 "VCVTUQQ2PD",
304 "VCVTUQQ2PS",
305 "VCVTUQQ2PSX",
306 "VCVTUQQ2PSY",
307 "VCVTUSI2SDL",
308 "VCVTUSI2SDQ",
309 "VCVTUSI2SSL",
310 "VCVTUSI2SSQ",
311 "VDBPSADBW",
312 "VDIVPD",
313 "VDIVPS",
314 "VDIVSD",
315 "VDIVSS",
316 "VDPPD",
317 "VDPPS",
318 "VEXP2PD",
319 "VEXP2PS",
320 "VEXPANDPD",
321 "VEXPANDPS",
322 "VEXTRACTF128",
323 "VEXTRACTF32X4",
324 "VEXTRACTF32X8",
325 "VEXTRACTF64X2",
326 "VEXTRACTF64X4",
327 "VEXTRACTI128",
328 "VEXTRACTI32X4",
329 "VEXTRACTI32X8",
330 "VEXTRACTI64X2",
331 "VEXTRACTI64X4",
332 "VEXTRACTPS",
333 "VFIXUPIMMPD",
334 "VFIXUPIMMPS",
335 "VFIXUPIMMSD",
336 "VFIXUPIMMSS",
337 "VFMADD132PD",
338 "VFMADD132PS",
339 "VFMADD132SD",
340 "VFMADD132SS",
341 "VFMADD213PD",
342 "VFMADD213PS",
343 "VFMADD213SD",
344 "VFMADD213SS",
345 "VFMADD231PD",
346 "VFMADD231PS",
347 "VFMADD231SD",
348 "VFMADD231SS",
349 "VFMADDPD",
350 "VFMADDPS",
351 "VFMADDSD",
352 "VFMADDSS",
353 "VFMADDSUB132PD",
354 "VFMADDSUB132PS",
355 "VFMADDSUB213PD",
356 "VFMADDSUB213PS",
357 "VFMADDSUB231PD",
358 "VFMADDSUB231PS",
359 "VFMADDSUBPD",
360 "VFMADDSUBPS",
361 "VFMSUB132PD",
362 "VFMSUB132PS",
363 "VFMSUB132SD",
364 "VFMSUB132SS",
365 "VFMSUB213PD",
366 "VFMSUB213PS",
367 "VFMSUB213SD",
368 "VFMSUB213SS",
369 "VFMSUB231PD",
370 "VFMSUB231PS",
371 "VFMSUB231SD",
372 "VFMSUB231SS",
373 "VFMSUBADD132PD",
374 "VFMSUBADD132PS",
375 "VFMSUBADD213PD",
376 "VFMSUBADD213PS",
377 "VFMSUBADD231PD",
378 "VFMSUBADD231PS",
379 "VFMSUBADDPD",
380 "VFMSUBADDPS",
381 "VFMSUBPD",
382 "VFMSUBPS",
383 "VFMSUBSD",
384 "VFMSUBSS",
385 "VFNMADD132PD",
386 "VFNMADD132PS",
387 "VFNMADD132SD",
388 "VFNMADD132SS",
389 "VFNMADD213PD",
390 "VFNMADD213PS",
391 "VFNMADD213SD",
392 "VFNMADD213SS",
393 "VFNMADD231PD",
394 "VFNMADD231PS",
395 "VFNMADD231SD",
396 "VFNMADD231SS",
397 "VFNMADDPD",
398 "VFNMADDPS",
399 "VFNMADDSD",
400 "VFNMADDSS",
401 "VFNMSUB132PD",
402 "VFNMSUB132PS",
403 "VFNMSUB132SD",
404 "VFNMSUB132SS",
405 "VFNMSUB213PD",
406 "VFNMSUB213PS",
407 "VFNMSUB213SD",
408 "VFNMSUB213SS",
409 "VFNMSUB231PD",
410 "VFNMSUB231PS",
411 "VFNMSUB231SD",
412 "VFNMSUB231SS",
413 "VFNMSUBPD",
414 "VFNMSUBPS",
415 "VFNMSUBSD",
416 "VFNMSUBSS",
417 "VFPCLASSPDX",
418 "VFPCLASSPDY",
419 "VFPCLASSPDZ",
420 "VFPCLASSPSX",
421 "VFPCLASSPSY",
422 "VFPCLASSPSZ",
423 "VFPCLASSSD",
424 "VFPCLASSSS",
425 "VGATHERDPD",
426 "VGATHERDPS",
427 "VGATHERPF0DPD",
428 "VGATHERPF0DPS",
429 "VGATHERPF0QPD",
430 "VGATHERPF0QPS",
431 "VGATHERPF1DPD",
432 "VGATHERPF1DPS",
433 "VGATHERPF1QPD",
434 "VGATHERPF1QPS",
435 "VGATHERQPD",
436 "VGATHERQPS",
437 "VGETEXPPD",
438 "VGETEXPPS",
439 "VGETEXPSD",
440 "VGETEXPSS",
441 "VGETMANTPD",
442 "VGETMANTPS",
443 "VGETMANTSD",
444 "VGETMANTSS",
445 "VGF2P8AFFINEINVQB",
446 "VGF2P8AFFINEQB",
447 "VGF2P8MULB",
448 "VHADDPD",
449 "VHADDPS",
450 "VHSUBPD",
451 "VHSUBPS",
452 "VINSERTF128",
453 "VINSERTF32X4",
454 "VINSERTF32X8",
455 "VINSERTF64X2",
456 "VINSERTF64X4",
457 "VINSERTI128",
458 "VINSERTI32X4",
459 "VINSERTI32X8",
460 "VINSERTI64X2",
461 "VINSERTI64X4",
462 "VINSERTPS",
463 "VLDDQU",
464 "VLDMXCSR",
465 "VMASKMOVDQU",
466 "VMASKMOVPD",
467 "VMASKMOVPS",
468 "VMAXPD",
469 "VMAXPS",
470 "VMAXSD",
471 "VMAXSS",
472 "VMINPD",
473 "VMINPS",
474 "VMINSD",
475 "VMINSS",
476 "VMOVAPD",
477 "VMOVAPS",
478 "VMOVD",
479 "VMOVDDUP",
480 "VMOVDQA",
481 "VMOVDQA32",
482 "VMOVDQA64",
483 "VMOVDQU",
484 "VMOVDQU16",
485 "VMOVDQU32",
486 "VMOVDQU64",
487 "VMOVDQU8",
488 "VMOVHLPS",
489 "VMOVHPD",
490 "VMOVHPS",
491 "VMOVLHPS",
492 "VMOVLPD",
493 "VMOVLPS",
494 "VMOVMSKPD",
495 "VMOVMSKPS",
496 "VMOVNTDQ",
497 "VMOVNTDQA",
498 "VMOVNTPD",
499 "VMOVNTPS",
500 "VMOVQ",
501 "VMOVSD",
502 "VMOVSHDUP",
503 "VMOVSLDUP",
504 "VMOVSS",
505 "VMOVUPD",
506 "VMOVUPS",
507 "VMPSADBW",
508 "VMULPD",
509 "VMULPS",
510 "VMULSD",
511 "VMULSS",
512 "VORPD",
513 "VORPS",
514 "VP4DPWSSD",
515 "VP4DPWSSDS",
516 "VPABSB",
517 "VPABSD",
518 "VPABSQ",
519 "VPABSW",
520 "VPACKSSDW",
521 "VPACKSSWB",
522 "VPACKUSDW",
523 "VPACKUSWB",
524 "VPADDB",
525 "VPADDD",
526 "VPADDQ",
527 "VPADDSB",
528 "VPADDSW",
529 "VPADDUSB",
530 "VPADDUSW",
531 "VPADDW",
532 "VPALIGNR",
533 "VPAND",
534 "VPANDD",
535 "VPANDN",
536 "VPANDND",
537 "VPANDNQ",
538 "VPANDQ",
539 "VPAVGB",
540 "VPAVGW",
541 "VPBLENDD",
542 "VPBLENDMB",
543 "VPBLENDMD",
544 "VPBLENDMQ",
545 "VPBLENDMW",
546 "VPBLENDVB",
547 "VPBLENDW",
548 "VPBROADCASTB",
549 "VPBROADCASTD",
550 "VPBROADCASTMB2Q",
551 "VPBROADCASTMW2D",
552 "VPBROADCASTQ",
553 "VPBROADCASTW",
554 "VPCLMULQDQ",
555 "VPCMPB",
556 "VPCMPD",
557 "VPCMPEQB",
558 "VPCMPEQD",
559 "VPCMPEQQ",
560 "VPCMPEQW",
561 "VPCMPESTRI",
562 "VPCMPESTRM",
563 "VPCMPGTB",
564 "VPCMPGTD",
565 "VPCMPGTQ",
566 "VPCMPGTW",
567 "VPCMPISTRI",
568 "VPCMPISTRM",
569 "VPCMPQ",
570 "VPCMPUB",
571 "VPCMPUD",
572 "VPCMPUQ",
573 "VPCMPUW",
574 "VPCMPW",
575 "VPCOMPRESSB",
576 "VPCOMPRESSD",
577 "VPCOMPRESSQ",
578 "VPCOMPRESSW",
579 "VPCONFLICTD",
580 "VPCONFLICTQ",
581 "VPDPBUSD",
582 "VPDPBUSDS",
583 "VPDPWSSD",
584 "VPDPWSSDS",
585 "VPERM2F128",
586 "VPERM2I128",
587 "VPERMB",
588 "VPERMD",
589 "VPERMI2B",
590 "VPERMI2D",
591 "VPERMI2PD",
592 "VPERMI2PS",
593 "VPERMI2Q",
594 "VPERMI2W",
595 "VPERMIL2PD",
596 "VPERMIL2PS",
597 "VPERMILPD",
598 "VPERMILPS",
599 "VPERMPD",
600 "VPERMPS",
601 "VPERMQ",
602 "VPERMT2B",
603 "VPERMT2D",
604 "VPERMT2PD",
605 "VPERMT2PS",
606 "VPERMT2Q",
607 "VPERMT2W",
608 "VPERMW",
609 "VPEXPANDB",
610 "VPEXPANDD",
611 "VPEXPANDQ",
612 "VPEXPANDW",
613 "VPEXTRB",
614 "VPEXTRD",
615 "VPEXTRQ",
616 "VPEXTRW",
617 "VPGATHERDD",
618 "VPGATHERDQ",
619 "VPGATHERQD",
620 "VPGATHERQQ",
621 "VPHADDD",
622 "VPHADDSW",
623 "VPHADDW",
624 "VPHMINPOSUW",
625 "VPHSUBD",
626 "VPHSUBSW",
627 "VPHSUBW",
628 "VPINSRB",
629 "VPINSRD",
630 "VPINSRQ",
631 "VPINSRW",
632 "VPLZCNTD",
633 "VPLZCNTQ",
634 "VPMADD52HUQ",
635 "VPMADD52LUQ",
636 "VPMADDUBSW",
637 "VPMADDWD",
638 "VPMASKMOVD",
639 "VPMASKMOVQ",
640 "VPMAXSB",
641 "VPMAXSD",
642 "VPMAXSQ",
643 "VPMAXSW",
644 "VPMAXUB",
645 "VPMAXUD",
646 "VPMAXUQ",
647 "VPMAXUW",
648 "VPMINSB",
649 "VPMINSD",
650 "VPMINSQ",
651 "VPMINSW",
652 "VPMINUB",
653 "VPMINUD",
654 "VPMINUQ",
655 "VPMINUW",
656 "VPMOVB2M",
657 "VPMOVD2M",
658 "VPMOVDB",
659 "VPMOVDW",
660 "VPMOVM2B",
661 "VPMOVM2D",
662 "VPMOVM2Q",
663 "VPMOVM2W",
664 "VPMOVMSKB",
665 "VPMOVQ2M",
666 "VPMOVQB",
667 "VPMOVQD",
668 "VPMOVQW",
669 "VPMOVSDB",
670 "VPMOVSDW",
671 "VPMOVSQB",
672 "VPMOVSQD",
673 "VPMOVSQW",
674 "VPMOVSWB",
675 "VPMOVSXBD",
676 "VPMOVSXBQ",
677 "VPMOVSXBW",
678 "VPMOVSXDQ",
679 "VPMOVSXWD",
680 "VPMOVSXWQ",
681 "VPMOVUSDB",
682 "VPMOVUSDW",
683 "VPMOVUSQB",
684 "VPMOVUSQD",
685 "VPMOVUSQW",
686 "VPMOVUSWB",
687 "VPMOVW2M",
688 "VPMOVWB",
689 "VPMOVZXBD",
690 "VPMOVZXBQ",
691 "VPMOVZXBW",
692 "VPMOVZXDQ",
693 "VPMOVZXWD",
694 "VPMOVZXWQ",
695 "VPMULDQ",
696 "VPMULHRSW",
697 "VPMULHUW",
698 "VPMULHW",
699 "VPMULLD",
700 "VPMULLQ",
701 "VPMULLW",
702 "VPMULTISHIFTQB",
703 "VPMULUDQ",
704 "VPOPCNTB",
705 "VPOPCNTD",
706 "VPOPCNTQ",
707 "VPOPCNTW",
708 "VPOR",
709 "VPORD",
710 "VPORQ",
711 "VPROLD",
712 "VPROLQ",
713 "VPROLVD",
714 "VPROLVQ",
715 "VPRORD",
716 "VPRORQ",
717 "VPRORVD",
718 "VPRORVQ",
719 "VPSADBW",
720 "VPSCATTERDD",
721 "VPSCATTERDQ",
722 "VPSCATTERQD",
723 "VPSCATTERQQ",
724 "VPSHLDD",
725 "VPSHLDQ",
726 "VPSHLDVD",
727 "VPSHLDVQ",
728 "VPSHLDVW",
729 "VPSHLDW",
730 "VPSHRDD",
731 "VPSHRDQ",
732 "VPSHRDVD",
733 "VPSHRDVQ",
734 "VPSHRDVW",
735 "VPSHRDW",
736 "VPSHUFB",
737 "VPSHUFBITQMB",
738 "VPSHUFD",
739 "VPSHUFHW",
740 "VPSHUFLW",
741 "VPSIGNB",
742 "VPSIGND",
743 "VPSIGNW",
744 "VPSLLD",
745 "VPSLLDQ",
746 "VPSLLQ",
747 "VPSLLVD",
748 "VPSLLVQ",
749 "VPSLLVW",
750 "VPSLLW",
751 "VPSRAD",
752 "VPSRAQ",
753 "VPSRAVD",
754 "VPSRAVQ",
755 "VPSRAVW",
756 "VPSRAW",
757 "VPSRLD",
758 "VPSRLDQ",
759 "VPSRLQ",
760 "VPSRLVD",
761 "VPSRLVQ",
762 "VPSRLVW",
763 "VPSRLW",
764 "VPSUBB",
765 "VPSUBD",
766 "VPSUBQ",
767 "VPSUBSB",
768 "VPSUBSW",
769 "VPSUBUSB",
770 "VPSUBUSW",
771 "VPSUBW",
772 "VPTERNLOGD",
773 "VPTERNLOGQ",
774 "VPTEST",
775 "VPTESTMB",
776 "VPTESTMD",
777 "VPTESTMQ",
778 "VPTESTMW",
779 "VPTESTNMB",
780 "VPTESTNMD",
781 "VPTESTNMQ",
782 "VPTESTNMW",
783 "VPUNPCKHBW",
784 "VPUNPCKHDQ",
785 "VPUNPCKHQDQ",
786 "VPUNPCKHWD",
787 "VPUNPCKLBW",
788 "VPUNPCKLDQ",
789 "VPUNPCKLQDQ",
790 "VPUNPCKLWD",
791 "VPXOR",
792 "VPXORD",
793 "VPXORQ",
794 "VRANGEPD",
795 "VRANGEPS",
796 "VRANGESD",
797 "VRANGESS",
798 "VRCP14PD",
799 "VRCP14PS",
800 "VRCP14SD",
801 "VRCP14SS",
802 "VRCP28PD",
803 "VRCP28PS",
804 "VRCP28SD",
805 "VRCP28SS",
806 "VRCPPS",
807 "VRCPSS",
808 "VREDUCEPD",
809 "VREDUCEPS",
810 "VREDUCESD",
811 "VREDUCESS",
812 "VRNDSCALEPD",
813 "VRNDSCALEPS",
814 "VRNDSCALESD",
815 "VRNDSCALESS",
816 "VROUNDPD",
817 "VROUNDPS",
818 "VROUNDSD",
819 "VROUNDSS",
820 "VRSQRT14PD",
821 "VRSQRT14PS",
822 "VRSQRT14SD",
823 "VRSQRT14SS",
824 "VRSQRT28PD",
825 "VRSQRT28PS",
826 "VRSQRT28SD",
827 "VRSQRT28SS",
828 "VRSQRTPS",
829 "VRSQRTSS",
830 "VSCALEFPD",
831 "VSCALEFPS",
832 "VSCALEFSD",
833 "VSCALEFSS",
834 "VSCATTERDPD",
835 "VSCATTERDPS",
836 "VSCATTERPF0DPD",
837 "VSCATTERPF0DPS",
838 "VSCATTERPF0QPD",
839 "VSCATTERPF0QPS",
840 "VSCATTERPF1DPD",
841 "VSCATTERPF1DPS",
842 "VSCATTERPF1QPD",
843 "VSCATTERPF1QPS",
844 "VSCATTERQPD",
845 "VSCATTERQPS",
846 "VSHUFF32X4",
847 "VSHUFF64X2",
848 "VSHUFI32X4",
849 "VSHUFI64X2",
850 "VSHUFPD",
851 "VSHUFPS",
852 "VSQRTPD",
853 "VSQRTPS",
854 "VSQRTSD",
855 "VSQRTSS",
856 "VSTMXCSR",
857 "VSUBPD",
858 "VSUBPS",
859 "VSUBSD",
860 "VSUBSS",
861 "VTESTPD",
862 "VTESTPS",
863 "VUCOMISD",
864 "VUCOMISS",
865 "VUNPCKHPD",
866 "VUNPCKHPS",
867 "VUNPCKLPD",
868 "VUNPCKLPS",
869 "VXORPD",
870 "VXORPS",
871 "VZEROALL",
872 "VZEROUPPER")
873
874
875
876 amdOpcodes := newStringSet(
877 "VFMADDPD",
878 "VFMADDPS",
879 "VFMADDSD",
880 "VFMADDSS",
881 "VFMADDSUBPD",
882 "VFMADDSUBPS",
883 "VFMSUBADDPD",
884 "VFMSUBADDPS",
885 "VFMSUBPD",
886 "VFMSUBPS",
887 "VFMSUBSD",
888 "VFMSUBSS",
889 "VFNMADDPD",
890 "VFNMADDPS",
891 "VFNMADDSD",
892 "VFNMADDSS",
893 "VFNMSUBPD",
894 "VFNMSUBPS",
895 "VFNMSUBSD",
896 "VFNMSUBSS",
897 "VPERMIL2PD",
898 "VPERMIL2PS")
899
900 ctx := newTestContext(t)
901 buildTables(ctx)
902
903 for op := range amdOpcodes {
904 delete(expectedOpcodes, op)
905 }
906 for op := range ctx.optabs {
907 delete(expectedOpcodes, op)
908 }
909
910 for op := range expectedOpcodes {
911 t.Errorf("missing opcode: %s", op)
912 }
913 }
914
View as plain text