1use super::super::opcodes::*;
2use crate::core::emitter::*;
3use crate::core::operand::*;
4use crate::x86::assembler::*;
5use crate::x86::operands::*;
6
7const NOREG: Operand = Operand::new();
9
10pub trait MmxEmmsEmitter {
22 fn mmx_emms(&mut self);
23}
24
25impl<'a> MmxEmmsEmitter for Assembler<'a> {
26 fn mmx_emms(&mut self) {
27 self.emit(MMX_EMMS, &NOREG, &NOREG, &NOREG, &NOREG);
28 }
29}
30
31pub trait MmxMovdG2mEmitter<A, B> {
44 fn mmx_movd_g2m(&mut self, op0: A, op1: B);
45}
46
47impl<'a> MmxMovdG2mEmitter<Mm, Gpd> for Assembler<'a> {
48 fn mmx_movd_g2m(&mut self, op0: Mm, op1: Gpd) {
49 self.emit(
50 MMX_MOVD_G2MRR,
51 op0.as_operand(),
52 op1.as_operand(),
53 &NOREG,
54 &NOREG,
55 );
56 }
57}
58
59impl<'a> MmxMovdG2mEmitter<Mm, Mem> for Assembler<'a> {
60 fn mmx_movd_g2m(&mut self, op0: Mm, op1: Mem) {
61 self.emit(
62 MMX_MOVD_G2MRM,
63 op0.as_operand(),
64 op1.as_operand(),
65 &NOREG,
66 &NOREG,
67 );
68 }
69}
70
71pub trait MmxMovdM2gEmitter<A, B> {
84 fn mmx_movd_m2g(&mut self, op0: A, op1: B);
85}
86
87impl<'a> MmxMovdM2gEmitter<Gpd, Mm> for Assembler<'a> {
88 fn mmx_movd_m2g(&mut self, op0: Gpd, op1: Mm) {
89 self.emit(
90 MMX_MOVD_M2GRR,
91 op0.as_operand(),
92 op1.as_operand(),
93 &NOREG,
94 &NOREG,
95 );
96 }
97}
98
99impl<'a> MmxMovdM2gEmitter<Mem, Mm> for Assembler<'a> {
100 fn mmx_movd_m2g(&mut self, op0: Mem, op1: Mm) {
101 self.emit(
102 MMX_MOVD_M2GMR,
103 op0.as_operand(),
104 op1.as_operand(),
105 &NOREG,
106 &NOREG,
107 );
108 }
109}
110
111pub trait MmxMovqEmitter<A, B> {
125 fn mmx_movq(&mut self, op0: A, op1: B);
126}
127
128impl<'a> MmxMovqEmitter<Mm, Mm> for Assembler<'a> {
129 fn mmx_movq(&mut self, op0: Mm, op1: Mm) {
130 self.emit(
131 MMX_MOVQRR,
132 op0.as_operand(),
133 op1.as_operand(),
134 &NOREG,
135 &NOREG,
136 );
137 }
138}
139
140impl<'a> MmxMovqEmitter<Mm, Mem> for Assembler<'a> {
141 fn mmx_movq(&mut self, op0: Mm, op1: Mem) {
142 self.emit(
143 MMX_MOVQRM,
144 op0.as_operand(),
145 op1.as_operand(),
146 &NOREG,
147 &NOREG,
148 );
149 }
150}
151
152impl<'a> MmxMovqEmitter<Mem, Mm> for Assembler<'a> {
153 fn mmx_movq(&mut self, op0: Mem, op1: Mm) {
154 self.emit(
155 MMX_MOVQMR,
156 op0.as_operand(),
157 op1.as_operand(),
158 &NOREG,
159 &NOREG,
160 );
161 }
162}
163
164pub trait MmxMovqG2mEmitter<A, B> {
177 fn mmx_movq_g2m(&mut self, op0: A, op1: B);
178}
179
180impl<'a> MmxMovqG2mEmitter<Mm, Gpd> for Assembler<'a> {
181 fn mmx_movq_g2m(&mut self, op0: Mm, op1: Gpd) {
182 self.emit(
183 MMX_MOVQ_G2MRR,
184 op0.as_operand(),
185 op1.as_operand(),
186 &NOREG,
187 &NOREG,
188 );
189 }
190}
191
192impl<'a> MmxMovqG2mEmitter<Mm, Mem> for Assembler<'a> {
193 fn mmx_movq_g2m(&mut self, op0: Mm, op1: Mem) {
194 self.emit(
195 MMX_MOVQ_G2MRM,
196 op0.as_operand(),
197 op1.as_operand(),
198 &NOREG,
199 &NOREG,
200 );
201 }
202}
203
204pub trait MmxMovqM2gEmitter<A, B> {
217 fn mmx_movq_m2g(&mut self, op0: A, op1: B);
218}
219
220impl<'a> MmxMovqM2gEmitter<Gpd, Mm> for Assembler<'a> {
221 fn mmx_movq_m2g(&mut self, op0: Gpd, op1: Mm) {
222 self.emit(
223 MMX_MOVQ_M2GRR,
224 op0.as_operand(),
225 op1.as_operand(),
226 &NOREG,
227 &NOREG,
228 );
229 }
230}
231
232impl<'a> MmxMovqM2gEmitter<Mem, Mm> for Assembler<'a> {
233 fn mmx_movq_m2g(&mut self, op0: Mem, op1: Mm) {
234 self.emit(
235 MMX_MOVQ_M2GMR,
236 op0.as_operand(),
237 op1.as_operand(),
238 &NOREG,
239 &NOREG,
240 );
241 }
242}
243
244pub trait MmxPackssdwEmitter<A, B> {
257 fn mmx_packssdw(&mut self, op0: A, op1: B);
258}
259
260impl<'a> MmxPackssdwEmitter<Mm, Mm> for Assembler<'a> {
261 fn mmx_packssdw(&mut self, op0: Mm, op1: Mm) {
262 self.emit(
263 MMX_PACKSSDWRR,
264 op0.as_operand(),
265 op1.as_operand(),
266 &NOREG,
267 &NOREG,
268 );
269 }
270}
271
272impl<'a> MmxPackssdwEmitter<Mm, Mem> for Assembler<'a> {
273 fn mmx_packssdw(&mut self, op0: Mm, op1: Mem) {
274 self.emit(
275 MMX_PACKSSDWRM,
276 op0.as_operand(),
277 op1.as_operand(),
278 &NOREG,
279 &NOREG,
280 );
281 }
282}
283
284pub trait MmxPacksswbEmitter<A, B> {
297 fn mmx_packsswb(&mut self, op0: A, op1: B);
298}
299
300impl<'a> MmxPacksswbEmitter<Mm, Mm> for Assembler<'a> {
301 fn mmx_packsswb(&mut self, op0: Mm, op1: Mm) {
302 self.emit(
303 MMX_PACKSSWBRR,
304 op0.as_operand(),
305 op1.as_operand(),
306 &NOREG,
307 &NOREG,
308 );
309 }
310}
311
312impl<'a> MmxPacksswbEmitter<Mm, Mem> for Assembler<'a> {
313 fn mmx_packsswb(&mut self, op0: Mm, op1: Mem) {
314 self.emit(
315 MMX_PACKSSWBRM,
316 op0.as_operand(),
317 op1.as_operand(),
318 &NOREG,
319 &NOREG,
320 );
321 }
322}
323
324pub trait MmxPackuswbEmitter<A, B> {
337 fn mmx_packuswb(&mut self, op0: A, op1: B);
338}
339
340impl<'a> MmxPackuswbEmitter<Mm, Mm> for Assembler<'a> {
341 fn mmx_packuswb(&mut self, op0: Mm, op1: Mm) {
342 self.emit(
343 MMX_PACKUSWBRR,
344 op0.as_operand(),
345 op1.as_operand(),
346 &NOREG,
347 &NOREG,
348 );
349 }
350}
351
352impl<'a> MmxPackuswbEmitter<Mm, Mem> for Assembler<'a> {
353 fn mmx_packuswb(&mut self, op0: Mm, op1: Mem) {
354 self.emit(
355 MMX_PACKUSWBRM,
356 op0.as_operand(),
357 op1.as_operand(),
358 &NOREG,
359 &NOREG,
360 );
361 }
362}
363
364pub trait MmxPaddbEmitter<A, B> {
377 fn mmx_paddb(&mut self, op0: A, op1: B);
378}
379
380impl<'a> MmxPaddbEmitter<Mm, Mm> for Assembler<'a> {
381 fn mmx_paddb(&mut self, op0: Mm, op1: Mm) {
382 self.emit(
383 MMX_PADDBRR,
384 op0.as_operand(),
385 op1.as_operand(),
386 &NOREG,
387 &NOREG,
388 );
389 }
390}
391
392impl<'a> MmxPaddbEmitter<Mm, Mem> for Assembler<'a> {
393 fn mmx_paddb(&mut self, op0: Mm, op1: Mem) {
394 self.emit(
395 MMX_PADDBRM,
396 op0.as_operand(),
397 op1.as_operand(),
398 &NOREG,
399 &NOREG,
400 );
401 }
402}
403
404pub trait MmxPadddEmitter<A, B> {
417 fn mmx_paddd(&mut self, op0: A, op1: B);
418}
419
420impl<'a> MmxPadddEmitter<Mm, Mm> for Assembler<'a> {
421 fn mmx_paddd(&mut self, op0: Mm, op1: Mm) {
422 self.emit(
423 MMX_PADDDRR,
424 op0.as_operand(),
425 op1.as_operand(),
426 &NOREG,
427 &NOREG,
428 );
429 }
430}
431
432impl<'a> MmxPadddEmitter<Mm, Mem> for Assembler<'a> {
433 fn mmx_paddd(&mut self, op0: Mm, op1: Mem) {
434 self.emit(
435 MMX_PADDDRM,
436 op0.as_operand(),
437 op1.as_operand(),
438 &NOREG,
439 &NOREG,
440 );
441 }
442}
443
444pub trait MmxPaddqEmitter<A, B> {
457 fn mmx_paddq(&mut self, op0: A, op1: B);
458}
459
460impl<'a> MmxPaddqEmitter<Mm, Mm> for Assembler<'a> {
461 fn mmx_paddq(&mut self, op0: Mm, op1: Mm) {
462 self.emit(
463 MMX_PADDQRR,
464 op0.as_operand(),
465 op1.as_operand(),
466 &NOREG,
467 &NOREG,
468 );
469 }
470}
471
472impl<'a> MmxPaddqEmitter<Mm, Mem> for Assembler<'a> {
473 fn mmx_paddq(&mut self, op0: Mm, op1: Mem) {
474 self.emit(
475 MMX_PADDQRM,
476 op0.as_operand(),
477 op1.as_operand(),
478 &NOREG,
479 &NOREG,
480 );
481 }
482}
483
484pub trait MmxPaddsbEmitter<A, B> {
497 fn mmx_paddsb(&mut self, op0: A, op1: B);
498}
499
500impl<'a> MmxPaddsbEmitter<Mm, Mm> for Assembler<'a> {
501 fn mmx_paddsb(&mut self, op0: Mm, op1: Mm) {
502 self.emit(
503 MMX_PADDSBRR,
504 op0.as_operand(),
505 op1.as_operand(),
506 &NOREG,
507 &NOREG,
508 );
509 }
510}
511
512impl<'a> MmxPaddsbEmitter<Mm, Mem> for Assembler<'a> {
513 fn mmx_paddsb(&mut self, op0: Mm, op1: Mem) {
514 self.emit(
515 MMX_PADDSBRM,
516 op0.as_operand(),
517 op1.as_operand(),
518 &NOREG,
519 &NOREG,
520 );
521 }
522}
523
524pub trait MmxPaddswEmitter<A, B> {
537 fn mmx_paddsw(&mut self, op0: A, op1: B);
538}
539
540impl<'a> MmxPaddswEmitter<Mm, Mm> for Assembler<'a> {
541 fn mmx_paddsw(&mut self, op0: Mm, op1: Mm) {
542 self.emit(
543 MMX_PADDSWRR,
544 op0.as_operand(),
545 op1.as_operand(),
546 &NOREG,
547 &NOREG,
548 );
549 }
550}
551
552impl<'a> MmxPaddswEmitter<Mm, Mem> for Assembler<'a> {
553 fn mmx_paddsw(&mut self, op0: Mm, op1: Mem) {
554 self.emit(
555 MMX_PADDSWRM,
556 op0.as_operand(),
557 op1.as_operand(),
558 &NOREG,
559 &NOREG,
560 );
561 }
562}
563
564pub trait MmxPaddusbEmitter<A, B> {
577 fn mmx_paddusb(&mut self, op0: A, op1: B);
578}
579
580impl<'a> MmxPaddusbEmitter<Mm, Mm> for Assembler<'a> {
581 fn mmx_paddusb(&mut self, op0: Mm, op1: Mm) {
582 self.emit(
583 MMX_PADDUSBRR,
584 op0.as_operand(),
585 op1.as_operand(),
586 &NOREG,
587 &NOREG,
588 );
589 }
590}
591
592impl<'a> MmxPaddusbEmitter<Mm, Mem> for Assembler<'a> {
593 fn mmx_paddusb(&mut self, op0: Mm, op1: Mem) {
594 self.emit(
595 MMX_PADDUSBRM,
596 op0.as_operand(),
597 op1.as_operand(),
598 &NOREG,
599 &NOREG,
600 );
601 }
602}
603
604pub trait MmxPadduswEmitter<A, B> {
617 fn mmx_paddusw(&mut self, op0: A, op1: B);
618}
619
620impl<'a> MmxPadduswEmitter<Mm, Mm> for Assembler<'a> {
621 fn mmx_paddusw(&mut self, op0: Mm, op1: Mm) {
622 self.emit(
623 MMX_PADDUSWRR,
624 op0.as_operand(),
625 op1.as_operand(),
626 &NOREG,
627 &NOREG,
628 );
629 }
630}
631
632impl<'a> MmxPadduswEmitter<Mm, Mem> for Assembler<'a> {
633 fn mmx_paddusw(&mut self, op0: Mm, op1: Mem) {
634 self.emit(
635 MMX_PADDUSWRM,
636 op0.as_operand(),
637 op1.as_operand(),
638 &NOREG,
639 &NOREG,
640 );
641 }
642}
643
644pub trait MmxPaddwEmitter<A, B> {
657 fn mmx_paddw(&mut self, op0: A, op1: B);
658}
659
660impl<'a> MmxPaddwEmitter<Mm, Mm> for Assembler<'a> {
661 fn mmx_paddw(&mut self, op0: Mm, op1: Mm) {
662 self.emit(
663 MMX_PADDWRR,
664 op0.as_operand(),
665 op1.as_operand(),
666 &NOREG,
667 &NOREG,
668 );
669 }
670}
671
672impl<'a> MmxPaddwEmitter<Mm, Mem> for Assembler<'a> {
673 fn mmx_paddw(&mut self, op0: Mm, op1: Mem) {
674 self.emit(
675 MMX_PADDWRM,
676 op0.as_operand(),
677 op1.as_operand(),
678 &NOREG,
679 &NOREG,
680 );
681 }
682}
683
684pub trait MmxPandEmitter<A, B> {
697 fn mmx_pand(&mut self, op0: A, op1: B);
698}
699
700impl<'a> MmxPandEmitter<Mm, Mm> for Assembler<'a> {
701 fn mmx_pand(&mut self, op0: Mm, op1: Mm) {
702 self.emit(
703 MMX_PANDRR,
704 op0.as_operand(),
705 op1.as_operand(),
706 &NOREG,
707 &NOREG,
708 );
709 }
710}
711
712impl<'a> MmxPandEmitter<Mm, Mem> for Assembler<'a> {
713 fn mmx_pand(&mut self, op0: Mm, op1: Mem) {
714 self.emit(
715 MMX_PANDRM,
716 op0.as_operand(),
717 op1.as_operand(),
718 &NOREG,
719 &NOREG,
720 );
721 }
722}
723
724pub trait MmxPandnEmitter<A, B> {
737 fn mmx_pandn(&mut self, op0: A, op1: B);
738}
739
740impl<'a> MmxPandnEmitter<Mm, Mm> for Assembler<'a> {
741 fn mmx_pandn(&mut self, op0: Mm, op1: Mm) {
742 self.emit(
743 MMX_PANDNRR,
744 op0.as_operand(),
745 op1.as_operand(),
746 &NOREG,
747 &NOREG,
748 );
749 }
750}
751
752impl<'a> MmxPandnEmitter<Mm, Mem> for Assembler<'a> {
753 fn mmx_pandn(&mut self, op0: Mm, op1: Mem) {
754 self.emit(
755 MMX_PANDNRM,
756 op0.as_operand(),
757 op1.as_operand(),
758 &NOREG,
759 &NOREG,
760 );
761 }
762}
763
764pub trait MmxPcmpeqbEmitter<A, B> {
777 fn mmx_pcmpeqb(&mut self, op0: A, op1: B);
778}
779
780impl<'a> MmxPcmpeqbEmitter<Mm, Mm> for Assembler<'a> {
781 fn mmx_pcmpeqb(&mut self, op0: Mm, op1: Mm) {
782 self.emit(
783 MMX_PCMPEQBRR,
784 op0.as_operand(),
785 op1.as_operand(),
786 &NOREG,
787 &NOREG,
788 );
789 }
790}
791
792impl<'a> MmxPcmpeqbEmitter<Mm, Mem> for Assembler<'a> {
793 fn mmx_pcmpeqb(&mut self, op0: Mm, op1: Mem) {
794 self.emit(
795 MMX_PCMPEQBRM,
796 op0.as_operand(),
797 op1.as_operand(),
798 &NOREG,
799 &NOREG,
800 );
801 }
802}
803
804pub trait MmxPcmpeqdEmitter<A, B> {
817 fn mmx_pcmpeqd(&mut self, op0: A, op1: B);
818}
819
820impl<'a> MmxPcmpeqdEmitter<Mm, Mm> for Assembler<'a> {
821 fn mmx_pcmpeqd(&mut self, op0: Mm, op1: Mm) {
822 self.emit(
823 MMX_PCMPEQDRR,
824 op0.as_operand(),
825 op1.as_operand(),
826 &NOREG,
827 &NOREG,
828 );
829 }
830}
831
832impl<'a> MmxPcmpeqdEmitter<Mm, Mem> for Assembler<'a> {
833 fn mmx_pcmpeqd(&mut self, op0: Mm, op1: Mem) {
834 self.emit(
835 MMX_PCMPEQDRM,
836 op0.as_operand(),
837 op1.as_operand(),
838 &NOREG,
839 &NOREG,
840 );
841 }
842}
843
844pub trait MmxPcmpeqwEmitter<A, B> {
857 fn mmx_pcmpeqw(&mut self, op0: A, op1: B);
858}
859
860impl<'a> MmxPcmpeqwEmitter<Mm, Mm> for Assembler<'a> {
861 fn mmx_pcmpeqw(&mut self, op0: Mm, op1: Mm) {
862 self.emit(
863 MMX_PCMPEQWRR,
864 op0.as_operand(),
865 op1.as_operand(),
866 &NOREG,
867 &NOREG,
868 );
869 }
870}
871
872impl<'a> MmxPcmpeqwEmitter<Mm, Mem> for Assembler<'a> {
873 fn mmx_pcmpeqw(&mut self, op0: Mm, op1: Mem) {
874 self.emit(
875 MMX_PCMPEQWRM,
876 op0.as_operand(),
877 op1.as_operand(),
878 &NOREG,
879 &NOREG,
880 );
881 }
882}
883
884pub trait MmxPcmpgtbEmitter<A, B> {
897 fn mmx_pcmpgtb(&mut self, op0: A, op1: B);
898}
899
900impl<'a> MmxPcmpgtbEmitter<Mm, Mm> for Assembler<'a> {
901 fn mmx_pcmpgtb(&mut self, op0: Mm, op1: Mm) {
902 self.emit(
903 MMX_PCMPGTBRR,
904 op0.as_operand(),
905 op1.as_operand(),
906 &NOREG,
907 &NOREG,
908 );
909 }
910}
911
912impl<'a> MmxPcmpgtbEmitter<Mm, Mem> for Assembler<'a> {
913 fn mmx_pcmpgtb(&mut self, op0: Mm, op1: Mem) {
914 self.emit(
915 MMX_PCMPGTBRM,
916 op0.as_operand(),
917 op1.as_operand(),
918 &NOREG,
919 &NOREG,
920 );
921 }
922}
923
924pub trait MmxPcmpgtdEmitter<A, B> {
937 fn mmx_pcmpgtd(&mut self, op0: A, op1: B);
938}
939
940impl<'a> MmxPcmpgtdEmitter<Mm, Mm> for Assembler<'a> {
941 fn mmx_pcmpgtd(&mut self, op0: Mm, op1: Mm) {
942 self.emit(
943 MMX_PCMPGTDRR,
944 op0.as_operand(),
945 op1.as_operand(),
946 &NOREG,
947 &NOREG,
948 );
949 }
950}
951
952impl<'a> MmxPcmpgtdEmitter<Mm, Mem> for Assembler<'a> {
953 fn mmx_pcmpgtd(&mut self, op0: Mm, op1: Mem) {
954 self.emit(
955 MMX_PCMPGTDRM,
956 op0.as_operand(),
957 op1.as_operand(),
958 &NOREG,
959 &NOREG,
960 );
961 }
962}
963
964pub trait MmxPcmpgtwEmitter<A, B> {
977 fn mmx_pcmpgtw(&mut self, op0: A, op1: B);
978}
979
980impl<'a> MmxPcmpgtwEmitter<Mm, Mm> for Assembler<'a> {
981 fn mmx_pcmpgtw(&mut self, op0: Mm, op1: Mm) {
982 self.emit(
983 MMX_PCMPGTWRR,
984 op0.as_operand(),
985 op1.as_operand(),
986 &NOREG,
987 &NOREG,
988 );
989 }
990}
991
992impl<'a> MmxPcmpgtwEmitter<Mm, Mem> for Assembler<'a> {
993 fn mmx_pcmpgtw(&mut self, op0: Mm, op1: Mem) {
994 self.emit(
995 MMX_PCMPGTWRM,
996 op0.as_operand(),
997 op1.as_operand(),
998 &NOREG,
999 &NOREG,
1000 );
1001 }
1002}
1003
1004pub trait MmxPmaddwdEmitter<A, B> {
1017 fn mmx_pmaddwd(&mut self, op0: A, op1: B);
1018}
1019
1020impl<'a> MmxPmaddwdEmitter<Mm, Mm> for Assembler<'a> {
1021 fn mmx_pmaddwd(&mut self, op0: Mm, op1: Mm) {
1022 self.emit(
1023 MMX_PMADDWDRR,
1024 op0.as_operand(),
1025 op1.as_operand(),
1026 &NOREG,
1027 &NOREG,
1028 );
1029 }
1030}
1031
1032impl<'a> MmxPmaddwdEmitter<Mm, Mem> for Assembler<'a> {
1033 fn mmx_pmaddwd(&mut self, op0: Mm, op1: Mem) {
1034 self.emit(
1035 MMX_PMADDWDRM,
1036 op0.as_operand(),
1037 op1.as_operand(),
1038 &NOREG,
1039 &NOREG,
1040 );
1041 }
1042}
1043
1044pub trait MmxPmulhwEmitter<A, B> {
1057 fn mmx_pmulhw(&mut self, op0: A, op1: B);
1058}
1059
1060impl<'a> MmxPmulhwEmitter<Mm, Mm> for Assembler<'a> {
1061 fn mmx_pmulhw(&mut self, op0: Mm, op1: Mm) {
1062 self.emit(
1063 MMX_PMULHWRR,
1064 op0.as_operand(),
1065 op1.as_operand(),
1066 &NOREG,
1067 &NOREG,
1068 );
1069 }
1070}
1071
1072impl<'a> MmxPmulhwEmitter<Mm, Mem> for Assembler<'a> {
1073 fn mmx_pmulhw(&mut self, op0: Mm, op1: Mem) {
1074 self.emit(
1075 MMX_PMULHWRM,
1076 op0.as_operand(),
1077 op1.as_operand(),
1078 &NOREG,
1079 &NOREG,
1080 );
1081 }
1082}
1083
1084pub trait MmxPmullwEmitter<A, B> {
1097 fn mmx_pmullw(&mut self, op0: A, op1: B);
1098}
1099
1100impl<'a> MmxPmullwEmitter<Mm, Mm> for Assembler<'a> {
1101 fn mmx_pmullw(&mut self, op0: Mm, op1: Mm) {
1102 self.emit(
1103 MMX_PMULLWRR,
1104 op0.as_operand(),
1105 op1.as_operand(),
1106 &NOREG,
1107 &NOREG,
1108 );
1109 }
1110}
1111
1112impl<'a> MmxPmullwEmitter<Mm, Mem> for Assembler<'a> {
1113 fn mmx_pmullw(&mut self, op0: Mm, op1: Mem) {
1114 self.emit(
1115 MMX_PMULLWRM,
1116 op0.as_operand(),
1117 op1.as_operand(),
1118 &NOREG,
1119 &NOREG,
1120 );
1121 }
1122}
1123
1124pub trait MmxPmuludqEmitter<A, B> {
1137 fn mmx_pmuludq(&mut self, op0: A, op1: B);
1138}
1139
1140impl<'a> MmxPmuludqEmitter<Mm, Mm> for Assembler<'a> {
1141 fn mmx_pmuludq(&mut self, op0: Mm, op1: Mm) {
1142 self.emit(
1143 MMX_PMULUDQRR,
1144 op0.as_operand(),
1145 op1.as_operand(),
1146 &NOREG,
1147 &NOREG,
1148 );
1149 }
1150}
1151
1152impl<'a> MmxPmuludqEmitter<Mm, Mem> for Assembler<'a> {
1153 fn mmx_pmuludq(&mut self, op0: Mm, op1: Mem) {
1154 self.emit(
1155 MMX_PMULUDQRM,
1156 op0.as_operand(),
1157 op1.as_operand(),
1158 &NOREG,
1159 &NOREG,
1160 );
1161 }
1162}
1163
1164pub trait MmxPorEmitter<A, B> {
1177 fn mmx_por(&mut self, op0: A, op1: B);
1178}
1179
1180impl<'a> MmxPorEmitter<Mm, Mm> for Assembler<'a> {
1181 fn mmx_por(&mut self, op0: Mm, op1: Mm) {
1182 self.emit(
1183 MMX_PORRR,
1184 op0.as_operand(),
1185 op1.as_operand(),
1186 &NOREG,
1187 &NOREG,
1188 );
1189 }
1190}
1191
1192impl<'a> MmxPorEmitter<Mm, Mem> for Assembler<'a> {
1193 fn mmx_por(&mut self, op0: Mm, op1: Mem) {
1194 self.emit(
1195 MMX_PORRM,
1196 op0.as_operand(),
1197 op1.as_operand(),
1198 &NOREG,
1199 &NOREG,
1200 );
1201 }
1202}
1203
1204pub trait MmxPslldEmitter<A, B> {
1218 fn mmx_pslld(&mut self, op0: A, op1: B);
1219}
1220
1221impl<'a> MmxPslldEmitter<Mm, Imm> for Assembler<'a> {
1222 fn mmx_pslld(&mut self, op0: Mm, op1: Imm) {
1223 self.emit(
1224 MMX_PSLLDRI,
1225 op0.as_operand(),
1226 op1.as_operand(),
1227 &NOREG,
1228 &NOREG,
1229 );
1230 }
1231}
1232
1233impl<'a> MmxPslldEmitter<Mm, Mm> for Assembler<'a> {
1234 fn mmx_pslld(&mut self, op0: Mm, op1: Mm) {
1235 self.emit(
1236 MMX_PSLLDRR,
1237 op0.as_operand(),
1238 op1.as_operand(),
1239 &NOREG,
1240 &NOREG,
1241 );
1242 }
1243}
1244
1245impl<'a> MmxPslldEmitter<Mm, Mem> for Assembler<'a> {
1246 fn mmx_pslld(&mut self, op0: Mm, op1: Mem) {
1247 self.emit(
1248 MMX_PSLLDRM,
1249 op0.as_operand(),
1250 op1.as_operand(),
1251 &NOREG,
1252 &NOREG,
1253 );
1254 }
1255}
1256
1257pub trait MmxPsllqEmitter<A, B> {
1271 fn mmx_psllq(&mut self, op0: A, op1: B);
1272}
1273
1274impl<'a> MmxPsllqEmitter<Mm, Imm> for Assembler<'a> {
1275 fn mmx_psllq(&mut self, op0: Mm, op1: Imm) {
1276 self.emit(
1277 MMX_PSLLQRI,
1278 op0.as_operand(),
1279 op1.as_operand(),
1280 &NOREG,
1281 &NOREG,
1282 );
1283 }
1284}
1285
1286impl<'a> MmxPsllqEmitter<Mm, Mm> for Assembler<'a> {
1287 fn mmx_psllq(&mut self, op0: Mm, op1: Mm) {
1288 self.emit(
1289 MMX_PSLLQRR,
1290 op0.as_operand(),
1291 op1.as_operand(),
1292 &NOREG,
1293 &NOREG,
1294 );
1295 }
1296}
1297
1298impl<'a> MmxPsllqEmitter<Mm, Mem> for Assembler<'a> {
1299 fn mmx_psllq(&mut self, op0: Mm, op1: Mem) {
1300 self.emit(
1301 MMX_PSLLQRM,
1302 op0.as_operand(),
1303 op1.as_operand(),
1304 &NOREG,
1305 &NOREG,
1306 );
1307 }
1308}
1309
1310pub trait MmxPsllwEmitter<A, B> {
1324 fn mmx_psllw(&mut self, op0: A, op1: B);
1325}
1326
1327impl<'a> MmxPsllwEmitter<Mm, Imm> for Assembler<'a> {
1328 fn mmx_psllw(&mut self, op0: Mm, op1: Imm) {
1329 self.emit(
1330 MMX_PSLLWRI,
1331 op0.as_operand(),
1332 op1.as_operand(),
1333 &NOREG,
1334 &NOREG,
1335 );
1336 }
1337}
1338
1339impl<'a> MmxPsllwEmitter<Mm, Mm> for Assembler<'a> {
1340 fn mmx_psllw(&mut self, op0: Mm, op1: Mm) {
1341 self.emit(
1342 MMX_PSLLWRR,
1343 op0.as_operand(),
1344 op1.as_operand(),
1345 &NOREG,
1346 &NOREG,
1347 );
1348 }
1349}
1350
1351impl<'a> MmxPsllwEmitter<Mm, Mem> for Assembler<'a> {
1352 fn mmx_psllw(&mut self, op0: Mm, op1: Mem) {
1353 self.emit(
1354 MMX_PSLLWRM,
1355 op0.as_operand(),
1356 op1.as_operand(),
1357 &NOREG,
1358 &NOREG,
1359 );
1360 }
1361}
1362
1363pub trait MmxPsradEmitter<A, B> {
1377 fn mmx_psrad(&mut self, op0: A, op1: B);
1378}
1379
1380impl<'a> MmxPsradEmitter<Mm, Imm> for Assembler<'a> {
1381 fn mmx_psrad(&mut self, op0: Mm, op1: Imm) {
1382 self.emit(
1383 MMX_PSRADRI,
1384 op0.as_operand(),
1385 op1.as_operand(),
1386 &NOREG,
1387 &NOREG,
1388 );
1389 }
1390}
1391
1392impl<'a> MmxPsradEmitter<Mm, Mm> for Assembler<'a> {
1393 fn mmx_psrad(&mut self, op0: Mm, op1: Mm) {
1394 self.emit(
1395 MMX_PSRADRR,
1396 op0.as_operand(),
1397 op1.as_operand(),
1398 &NOREG,
1399 &NOREG,
1400 );
1401 }
1402}
1403
1404impl<'a> MmxPsradEmitter<Mm, Mem> for Assembler<'a> {
1405 fn mmx_psrad(&mut self, op0: Mm, op1: Mem) {
1406 self.emit(
1407 MMX_PSRADRM,
1408 op0.as_operand(),
1409 op1.as_operand(),
1410 &NOREG,
1411 &NOREG,
1412 );
1413 }
1414}
1415
1416pub trait MmxPsrawEmitter<A, B> {
1430 fn mmx_psraw(&mut self, op0: A, op1: B);
1431}
1432
1433impl<'a> MmxPsrawEmitter<Mm, Imm> for Assembler<'a> {
1434 fn mmx_psraw(&mut self, op0: Mm, op1: Imm) {
1435 self.emit(
1436 MMX_PSRAWRI,
1437 op0.as_operand(),
1438 op1.as_operand(),
1439 &NOREG,
1440 &NOREG,
1441 );
1442 }
1443}
1444
1445impl<'a> MmxPsrawEmitter<Mm, Mm> for Assembler<'a> {
1446 fn mmx_psraw(&mut self, op0: Mm, op1: Mm) {
1447 self.emit(
1448 MMX_PSRAWRR,
1449 op0.as_operand(),
1450 op1.as_operand(),
1451 &NOREG,
1452 &NOREG,
1453 );
1454 }
1455}
1456
1457impl<'a> MmxPsrawEmitter<Mm, Mem> for Assembler<'a> {
1458 fn mmx_psraw(&mut self, op0: Mm, op1: Mem) {
1459 self.emit(
1460 MMX_PSRAWRM,
1461 op0.as_operand(),
1462 op1.as_operand(),
1463 &NOREG,
1464 &NOREG,
1465 );
1466 }
1467}
1468
1469pub trait MmxPsrldEmitter<A, B> {
1483 fn mmx_psrld(&mut self, op0: A, op1: B);
1484}
1485
1486impl<'a> MmxPsrldEmitter<Mm, Imm> for Assembler<'a> {
1487 fn mmx_psrld(&mut self, op0: Mm, op1: Imm) {
1488 self.emit(
1489 MMX_PSRLDRI,
1490 op0.as_operand(),
1491 op1.as_operand(),
1492 &NOREG,
1493 &NOREG,
1494 );
1495 }
1496}
1497
1498impl<'a> MmxPsrldEmitter<Mm, Mm> for Assembler<'a> {
1499 fn mmx_psrld(&mut self, op0: Mm, op1: Mm) {
1500 self.emit(
1501 MMX_PSRLDRR,
1502 op0.as_operand(),
1503 op1.as_operand(),
1504 &NOREG,
1505 &NOREG,
1506 );
1507 }
1508}
1509
1510impl<'a> MmxPsrldEmitter<Mm, Mem> for Assembler<'a> {
1511 fn mmx_psrld(&mut self, op0: Mm, op1: Mem) {
1512 self.emit(
1513 MMX_PSRLDRM,
1514 op0.as_operand(),
1515 op1.as_operand(),
1516 &NOREG,
1517 &NOREG,
1518 );
1519 }
1520}
1521
1522pub trait MmxPsrlqEmitter<A, B> {
1536 fn mmx_psrlq(&mut self, op0: A, op1: B);
1537}
1538
1539impl<'a> MmxPsrlqEmitter<Mm, Imm> for Assembler<'a> {
1540 fn mmx_psrlq(&mut self, op0: Mm, op1: Imm) {
1541 self.emit(
1542 MMX_PSRLQRI,
1543 op0.as_operand(),
1544 op1.as_operand(),
1545 &NOREG,
1546 &NOREG,
1547 );
1548 }
1549}
1550
1551impl<'a> MmxPsrlqEmitter<Mm, Mm> for Assembler<'a> {
1552 fn mmx_psrlq(&mut self, op0: Mm, op1: Mm) {
1553 self.emit(
1554 MMX_PSRLQRR,
1555 op0.as_operand(),
1556 op1.as_operand(),
1557 &NOREG,
1558 &NOREG,
1559 );
1560 }
1561}
1562
1563impl<'a> MmxPsrlqEmitter<Mm, Mem> for Assembler<'a> {
1564 fn mmx_psrlq(&mut self, op0: Mm, op1: Mem) {
1565 self.emit(
1566 MMX_PSRLQRM,
1567 op0.as_operand(),
1568 op1.as_operand(),
1569 &NOREG,
1570 &NOREG,
1571 );
1572 }
1573}
1574
1575pub trait MmxPsrlwEmitter<A, B> {
1589 fn mmx_psrlw(&mut self, op0: A, op1: B);
1590}
1591
1592impl<'a> MmxPsrlwEmitter<Mm, Imm> for Assembler<'a> {
1593 fn mmx_psrlw(&mut self, op0: Mm, op1: Imm) {
1594 self.emit(
1595 MMX_PSRLWRI,
1596 op0.as_operand(),
1597 op1.as_operand(),
1598 &NOREG,
1599 &NOREG,
1600 );
1601 }
1602}
1603
1604impl<'a> MmxPsrlwEmitter<Mm, Mm> for Assembler<'a> {
1605 fn mmx_psrlw(&mut self, op0: Mm, op1: Mm) {
1606 self.emit(
1607 MMX_PSRLWRR,
1608 op0.as_operand(),
1609 op1.as_operand(),
1610 &NOREG,
1611 &NOREG,
1612 );
1613 }
1614}
1615
1616impl<'a> MmxPsrlwEmitter<Mm, Mem> for Assembler<'a> {
1617 fn mmx_psrlw(&mut self, op0: Mm, op1: Mem) {
1618 self.emit(
1619 MMX_PSRLWRM,
1620 op0.as_operand(),
1621 op1.as_operand(),
1622 &NOREG,
1623 &NOREG,
1624 );
1625 }
1626}
1627
1628pub trait MmxPsubbEmitter<A, B> {
1641 fn mmx_psubb(&mut self, op0: A, op1: B);
1642}
1643
1644impl<'a> MmxPsubbEmitter<Mm, Mm> for Assembler<'a> {
1645 fn mmx_psubb(&mut self, op0: Mm, op1: Mm) {
1646 self.emit(
1647 MMX_PSUBBRR,
1648 op0.as_operand(),
1649 op1.as_operand(),
1650 &NOREG,
1651 &NOREG,
1652 );
1653 }
1654}
1655
1656impl<'a> MmxPsubbEmitter<Mm, Mem> for Assembler<'a> {
1657 fn mmx_psubb(&mut self, op0: Mm, op1: Mem) {
1658 self.emit(
1659 MMX_PSUBBRM,
1660 op0.as_operand(),
1661 op1.as_operand(),
1662 &NOREG,
1663 &NOREG,
1664 );
1665 }
1666}
1667
1668pub trait MmxPsubdEmitter<A, B> {
1681 fn mmx_psubd(&mut self, op0: A, op1: B);
1682}
1683
1684impl<'a> MmxPsubdEmitter<Mm, Mm> for Assembler<'a> {
1685 fn mmx_psubd(&mut self, op0: Mm, op1: Mm) {
1686 self.emit(
1687 MMX_PSUBDRR,
1688 op0.as_operand(),
1689 op1.as_operand(),
1690 &NOREG,
1691 &NOREG,
1692 );
1693 }
1694}
1695
1696impl<'a> MmxPsubdEmitter<Mm, Mem> for Assembler<'a> {
1697 fn mmx_psubd(&mut self, op0: Mm, op1: Mem) {
1698 self.emit(
1699 MMX_PSUBDRM,
1700 op0.as_operand(),
1701 op1.as_operand(),
1702 &NOREG,
1703 &NOREG,
1704 );
1705 }
1706}
1707
1708pub trait MmxPsubqEmitter<A, B> {
1721 fn mmx_psubq(&mut self, op0: A, op1: B);
1722}
1723
1724impl<'a> MmxPsubqEmitter<Mm, Mm> for Assembler<'a> {
1725 fn mmx_psubq(&mut self, op0: Mm, op1: Mm) {
1726 self.emit(
1727 MMX_PSUBQRR,
1728 op0.as_operand(),
1729 op1.as_operand(),
1730 &NOREG,
1731 &NOREG,
1732 );
1733 }
1734}
1735
1736impl<'a> MmxPsubqEmitter<Mm, Mem> for Assembler<'a> {
1737 fn mmx_psubq(&mut self, op0: Mm, op1: Mem) {
1738 self.emit(
1739 MMX_PSUBQRM,
1740 op0.as_operand(),
1741 op1.as_operand(),
1742 &NOREG,
1743 &NOREG,
1744 );
1745 }
1746}
1747
1748pub trait MmxPsubsbEmitter<A, B> {
1761 fn mmx_psubsb(&mut self, op0: A, op1: B);
1762}
1763
1764impl<'a> MmxPsubsbEmitter<Mm, Mm> for Assembler<'a> {
1765 fn mmx_psubsb(&mut self, op0: Mm, op1: Mm) {
1766 self.emit(
1767 MMX_PSUBSBRR,
1768 op0.as_operand(),
1769 op1.as_operand(),
1770 &NOREG,
1771 &NOREG,
1772 );
1773 }
1774}
1775
1776impl<'a> MmxPsubsbEmitter<Mm, Mem> for Assembler<'a> {
1777 fn mmx_psubsb(&mut self, op0: Mm, op1: Mem) {
1778 self.emit(
1779 MMX_PSUBSBRM,
1780 op0.as_operand(),
1781 op1.as_operand(),
1782 &NOREG,
1783 &NOREG,
1784 );
1785 }
1786}
1787
1788pub trait MmxPsubswEmitter<A, B> {
1801 fn mmx_psubsw(&mut self, op0: A, op1: B);
1802}
1803
1804impl<'a> MmxPsubswEmitter<Mm, Mm> for Assembler<'a> {
1805 fn mmx_psubsw(&mut self, op0: Mm, op1: Mm) {
1806 self.emit(
1807 MMX_PSUBSWRR,
1808 op0.as_operand(),
1809 op1.as_operand(),
1810 &NOREG,
1811 &NOREG,
1812 );
1813 }
1814}
1815
1816impl<'a> MmxPsubswEmitter<Mm, Mem> for Assembler<'a> {
1817 fn mmx_psubsw(&mut self, op0: Mm, op1: Mem) {
1818 self.emit(
1819 MMX_PSUBSWRM,
1820 op0.as_operand(),
1821 op1.as_operand(),
1822 &NOREG,
1823 &NOREG,
1824 );
1825 }
1826}
1827
1828pub trait MmxPsubusbEmitter<A, B> {
1841 fn mmx_psubusb(&mut self, op0: A, op1: B);
1842}
1843
1844impl<'a> MmxPsubusbEmitter<Mm, Mm> for Assembler<'a> {
1845 fn mmx_psubusb(&mut self, op0: Mm, op1: Mm) {
1846 self.emit(
1847 MMX_PSUBUSBRR,
1848 op0.as_operand(),
1849 op1.as_operand(),
1850 &NOREG,
1851 &NOREG,
1852 );
1853 }
1854}
1855
1856impl<'a> MmxPsubusbEmitter<Mm, Mem> for Assembler<'a> {
1857 fn mmx_psubusb(&mut self, op0: Mm, op1: Mem) {
1858 self.emit(
1859 MMX_PSUBUSBRM,
1860 op0.as_operand(),
1861 op1.as_operand(),
1862 &NOREG,
1863 &NOREG,
1864 );
1865 }
1866}
1867
1868pub trait MmxPsubuswEmitter<A, B> {
1881 fn mmx_psubusw(&mut self, op0: A, op1: B);
1882}
1883
1884impl<'a> MmxPsubuswEmitter<Mm, Mm> for Assembler<'a> {
1885 fn mmx_psubusw(&mut self, op0: Mm, op1: Mm) {
1886 self.emit(
1887 MMX_PSUBUSWRR,
1888 op0.as_operand(),
1889 op1.as_operand(),
1890 &NOREG,
1891 &NOREG,
1892 );
1893 }
1894}
1895
1896impl<'a> MmxPsubuswEmitter<Mm, Mem> for Assembler<'a> {
1897 fn mmx_psubusw(&mut self, op0: Mm, op1: Mem) {
1898 self.emit(
1899 MMX_PSUBUSWRM,
1900 op0.as_operand(),
1901 op1.as_operand(),
1902 &NOREG,
1903 &NOREG,
1904 );
1905 }
1906}
1907
1908pub trait MmxPsubwEmitter<A, B> {
1921 fn mmx_psubw(&mut self, op0: A, op1: B);
1922}
1923
1924impl<'a> MmxPsubwEmitter<Mm, Mm> for Assembler<'a> {
1925 fn mmx_psubw(&mut self, op0: Mm, op1: Mm) {
1926 self.emit(
1927 MMX_PSUBWRR,
1928 op0.as_operand(),
1929 op1.as_operand(),
1930 &NOREG,
1931 &NOREG,
1932 );
1933 }
1934}
1935
1936impl<'a> MmxPsubwEmitter<Mm, Mem> for Assembler<'a> {
1937 fn mmx_psubw(&mut self, op0: Mm, op1: Mem) {
1938 self.emit(
1939 MMX_PSUBWRM,
1940 op0.as_operand(),
1941 op1.as_operand(),
1942 &NOREG,
1943 &NOREG,
1944 );
1945 }
1946}
1947
1948pub trait MmxPunpckhbwEmitter<A, B> {
1961 fn mmx_punpckhbw(&mut self, op0: A, op1: B);
1962}
1963
1964impl<'a> MmxPunpckhbwEmitter<Mm, Mm> for Assembler<'a> {
1965 fn mmx_punpckhbw(&mut self, op0: Mm, op1: Mm) {
1966 self.emit(
1967 MMX_PUNPCKHBWRR,
1968 op0.as_operand(),
1969 op1.as_operand(),
1970 &NOREG,
1971 &NOREG,
1972 );
1973 }
1974}
1975
1976impl<'a> MmxPunpckhbwEmitter<Mm, Mem> for Assembler<'a> {
1977 fn mmx_punpckhbw(&mut self, op0: Mm, op1: Mem) {
1978 self.emit(
1979 MMX_PUNPCKHBWRM,
1980 op0.as_operand(),
1981 op1.as_operand(),
1982 &NOREG,
1983 &NOREG,
1984 );
1985 }
1986}
1987
1988pub trait MmxPunpckhdqEmitter<A, B> {
2001 fn mmx_punpckhdq(&mut self, op0: A, op1: B);
2002}
2003
2004impl<'a> MmxPunpckhdqEmitter<Mm, Mm> for Assembler<'a> {
2005 fn mmx_punpckhdq(&mut self, op0: Mm, op1: Mm) {
2006 self.emit(
2007 MMX_PUNPCKHDQRR,
2008 op0.as_operand(),
2009 op1.as_operand(),
2010 &NOREG,
2011 &NOREG,
2012 );
2013 }
2014}
2015
2016impl<'a> MmxPunpckhdqEmitter<Mm, Mem> for Assembler<'a> {
2017 fn mmx_punpckhdq(&mut self, op0: Mm, op1: Mem) {
2018 self.emit(
2019 MMX_PUNPCKHDQRM,
2020 op0.as_operand(),
2021 op1.as_operand(),
2022 &NOREG,
2023 &NOREG,
2024 );
2025 }
2026}
2027
2028pub trait MmxPunpckhwdEmitter<A, B> {
2041 fn mmx_punpckhwd(&mut self, op0: A, op1: B);
2042}
2043
2044impl<'a> MmxPunpckhwdEmitter<Mm, Mm> for Assembler<'a> {
2045 fn mmx_punpckhwd(&mut self, op0: Mm, op1: Mm) {
2046 self.emit(
2047 MMX_PUNPCKHWDRR,
2048 op0.as_operand(),
2049 op1.as_operand(),
2050 &NOREG,
2051 &NOREG,
2052 );
2053 }
2054}
2055
2056impl<'a> MmxPunpckhwdEmitter<Mm, Mem> for Assembler<'a> {
2057 fn mmx_punpckhwd(&mut self, op0: Mm, op1: Mem) {
2058 self.emit(
2059 MMX_PUNPCKHWDRM,
2060 op0.as_operand(),
2061 op1.as_operand(),
2062 &NOREG,
2063 &NOREG,
2064 );
2065 }
2066}
2067
2068pub trait MmxPunpcklbwEmitter<A, B> {
2081 fn mmx_punpcklbw(&mut self, op0: A, op1: B);
2082}
2083
2084impl<'a> MmxPunpcklbwEmitter<Mm, Mm> for Assembler<'a> {
2085 fn mmx_punpcklbw(&mut self, op0: Mm, op1: Mm) {
2086 self.emit(
2087 MMX_PUNPCKLBWRR,
2088 op0.as_operand(),
2089 op1.as_operand(),
2090 &NOREG,
2091 &NOREG,
2092 );
2093 }
2094}
2095
2096impl<'a> MmxPunpcklbwEmitter<Mm, Mem> for Assembler<'a> {
2097 fn mmx_punpcklbw(&mut self, op0: Mm, op1: Mem) {
2098 self.emit(
2099 MMX_PUNPCKLBWRM,
2100 op0.as_operand(),
2101 op1.as_operand(),
2102 &NOREG,
2103 &NOREG,
2104 );
2105 }
2106}
2107
2108pub trait MmxPunpckldqEmitter<A, B> {
2121 fn mmx_punpckldq(&mut self, op0: A, op1: B);
2122}
2123
2124impl<'a> MmxPunpckldqEmitter<Mm, Mm> for Assembler<'a> {
2125 fn mmx_punpckldq(&mut self, op0: Mm, op1: Mm) {
2126 self.emit(
2127 MMX_PUNPCKLDQRR,
2128 op0.as_operand(),
2129 op1.as_operand(),
2130 &NOREG,
2131 &NOREG,
2132 );
2133 }
2134}
2135
2136impl<'a> MmxPunpckldqEmitter<Mm, Mem> for Assembler<'a> {
2137 fn mmx_punpckldq(&mut self, op0: Mm, op1: Mem) {
2138 self.emit(
2139 MMX_PUNPCKLDQRM,
2140 op0.as_operand(),
2141 op1.as_operand(),
2142 &NOREG,
2143 &NOREG,
2144 );
2145 }
2146}
2147
2148pub trait MmxPunpcklwdEmitter<A, B> {
2161 fn mmx_punpcklwd(&mut self, op0: A, op1: B);
2162}
2163
2164impl<'a> MmxPunpcklwdEmitter<Mm, Mm> for Assembler<'a> {
2165 fn mmx_punpcklwd(&mut self, op0: Mm, op1: Mm) {
2166 self.emit(
2167 MMX_PUNPCKLWDRR,
2168 op0.as_operand(),
2169 op1.as_operand(),
2170 &NOREG,
2171 &NOREG,
2172 );
2173 }
2174}
2175
2176impl<'a> MmxPunpcklwdEmitter<Mm, Mem> for Assembler<'a> {
2177 fn mmx_punpcklwd(&mut self, op0: Mm, op1: Mem) {
2178 self.emit(
2179 MMX_PUNPCKLWDRM,
2180 op0.as_operand(),
2181 op1.as_operand(),
2182 &NOREG,
2183 &NOREG,
2184 );
2185 }
2186}
2187
2188pub trait MmxPxorEmitter<A, B> {
2201 fn mmx_pxor(&mut self, op0: A, op1: B);
2202}
2203
2204impl<'a> MmxPxorEmitter<Mm, Mm> for Assembler<'a> {
2205 fn mmx_pxor(&mut self, op0: Mm, op1: Mm) {
2206 self.emit(
2207 MMX_PXORRR,
2208 op0.as_operand(),
2209 op1.as_operand(),
2210 &NOREG,
2211 &NOREG,
2212 );
2213 }
2214}
2215
2216impl<'a> MmxPxorEmitter<Mm, Mem> for Assembler<'a> {
2217 fn mmx_pxor(&mut self, op0: Mm, op1: Mem) {
2218 self.emit(
2219 MMX_PXORRM,
2220 op0.as_operand(),
2221 op1.as_operand(),
2222 &NOREG,
2223 &NOREG,
2224 );
2225 }
2226}
2227
2228impl<'a> Assembler<'a> {
2229 #[inline]
2241 pub fn mmx_emms(&mut self)
2242 where
2243 Assembler<'a>: MmxEmmsEmitter,
2244 {
2245 <Self as MmxEmmsEmitter>::mmx_emms(self);
2246 }
2247 #[inline]
2260 pub fn mmx_movd_g2m<A, B>(&mut self, op0: A, op1: B)
2261 where
2262 Assembler<'a>: MmxMovdG2mEmitter<A, B>,
2263 {
2264 <Self as MmxMovdG2mEmitter<A, B>>::mmx_movd_g2m(self, op0, op1);
2265 }
2266 #[inline]
2279 pub fn mmx_movd_m2g<A, B>(&mut self, op0: A, op1: B)
2280 where
2281 Assembler<'a>: MmxMovdM2gEmitter<A, B>,
2282 {
2283 <Self as MmxMovdM2gEmitter<A, B>>::mmx_movd_m2g(self, op0, op1);
2284 }
2285 #[inline]
2299 pub fn mmx_movq<A, B>(&mut self, op0: A, op1: B)
2300 where
2301 Assembler<'a>: MmxMovqEmitter<A, B>,
2302 {
2303 <Self as MmxMovqEmitter<A, B>>::mmx_movq(self, op0, op1);
2304 }
2305 #[inline]
2318 pub fn mmx_movq_g2m<A, B>(&mut self, op0: A, op1: B)
2319 where
2320 Assembler<'a>: MmxMovqG2mEmitter<A, B>,
2321 {
2322 <Self as MmxMovqG2mEmitter<A, B>>::mmx_movq_g2m(self, op0, op1);
2323 }
2324 #[inline]
2337 pub fn mmx_movq_m2g<A, B>(&mut self, op0: A, op1: B)
2338 where
2339 Assembler<'a>: MmxMovqM2gEmitter<A, B>,
2340 {
2341 <Self as MmxMovqM2gEmitter<A, B>>::mmx_movq_m2g(self, op0, op1);
2342 }
2343 #[inline]
2356 pub fn mmx_packssdw<A, B>(&mut self, op0: A, op1: B)
2357 where
2358 Assembler<'a>: MmxPackssdwEmitter<A, B>,
2359 {
2360 <Self as MmxPackssdwEmitter<A, B>>::mmx_packssdw(self, op0, op1);
2361 }
2362 #[inline]
2375 pub fn mmx_packsswb<A, B>(&mut self, op0: A, op1: B)
2376 where
2377 Assembler<'a>: MmxPacksswbEmitter<A, B>,
2378 {
2379 <Self as MmxPacksswbEmitter<A, B>>::mmx_packsswb(self, op0, op1);
2380 }
2381 #[inline]
2394 pub fn mmx_packuswb<A, B>(&mut self, op0: A, op1: B)
2395 where
2396 Assembler<'a>: MmxPackuswbEmitter<A, B>,
2397 {
2398 <Self as MmxPackuswbEmitter<A, B>>::mmx_packuswb(self, op0, op1);
2399 }
2400 #[inline]
2413 pub fn mmx_paddb<A, B>(&mut self, op0: A, op1: B)
2414 where
2415 Assembler<'a>: MmxPaddbEmitter<A, B>,
2416 {
2417 <Self as MmxPaddbEmitter<A, B>>::mmx_paddb(self, op0, op1);
2418 }
2419 #[inline]
2432 pub fn mmx_paddd<A, B>(&mut self, op0: A, op1: B)
2433 where
2434 Assembler<'a>: MmxPadddEmitter<A, B>,
2435 {
2436 <Self as MmxPadddEmitter<A, B>>::mmx_paddd(self, op0, op1);
2437 }
2438 #[inline]
2451 pub fn mmx_paddq<A, B>(&mut self, op0: A, op1: B)
2452 where
2453 Assembler<'a>: MmxPaddqEmitter<A, B>,
2454 {
2455 <Self as MmxPaddqEmitter<A, B>>::mmx_paddq(self, op0, op1);
2456 }
2457 #[inline]
2470 pub fn mmx_paddsb<A, B>(&mut self, op0: A, op1: B)
2471 where
2472 Assembler<'a>: MmxPaddsbEmitter<A, B>,
2473 {
2474 <Self as MmxPaddsbEmitter<A, B>>::mmx_paddsb(self, op0, op1);
2475 }
2476 #[inline]
2489 pub fn mmx_paddsw<A, B>(&mut self, op0: A, op1: B)
2490 where
2491 Assembler<'a>: MmxPaddswEmitter<A, B>,
2492 {
2493 <Self as MmxPaddswEmitter<A, B>>::mmx_paddsw(self, op0, op1);
2494 }
2495 #[inline]
2508 pub fn mmx_paddusb<A, B>(&mut self, op0: A, op1: B)
2509 where
2510 Assembler<'a>: MmxPaddusbEmitter<A, B>,
2511 {
2512 <Self as MmxPaddusbEmitter<A, B>>::mmx_paddusb(self, op0, op1);
2513 }
2514 #[inline]
2527 pub fn mmx_paddusw<A, B>(&mut self, op0: A, op1: B)
2528 where
2529 Assembler<'a>: MmxPadduswEmitter<A, B>,
2530 {
2531 <Self as MmxPadduswEmitter<A, B>>::mmx_paddusw(self, op0, op1);
2532 }
2533 #[inline]
2546 pub fn mmx_paddw<A, B>(&mut self, op0: A, op1: B)
2547 where
2548 Assembler<'a>: MmxPaddwEmitter<A, B>,
2549 {
2550 <Self as MmxPaddwEmitter<A, B>>::mmx_paddw(self, op0, op1);
2551 }
2552 #[inline]
2565 pub fn mmx_pand<A, B>(&mut self, op0: A, op1: B)
2566 where
2567 Assembler<'a>: MmxPandEmitter<A, B>,
2568 {
2569 <Self as MmxPandEmitter<A, B>>::mmx_pand(self, op0, op1);
2570 }
2571 #[inline]
2584 pub fn mmx_pandn<A, B>(&mut self, op0: A, op1: B)
2585 where
2586 Assembler<'a>: MmxPandnEmitter<A, B>,
2587 {
2588 <Self as MmxPandnEmitter<A, B>>::mmx_pandn(self, op0, op1);
2589 }
2590 #[inline]
2603 pub fn mmx_pcmpeqb<A, B>(&mut self, op0: A, op1: B)
2604 where
2605 Assembler<'a>: MmxPcmpeqbEmitter<A, B>,
2606 {
2607 <Self as MmxPcmpeqbEmitter<A, B>>::mmx_pcmpeqb(self, op0, op1);
2608 }
2609 #[inline]
2622 pub fn mmx_pcmpeqd<A, B>(&mut self, op0: A, op1: B)
2623 where
2624 Assembler<'a>: MmxPcmpeqdEmitter<A, B>,
2625 {
2626 <Self as MmxPcmpeqdEmitter<A, B>>::mmx_pcmpeqd(self, op0, op1);
2627 }
2628 #[inline]
2641 pub fn mmx_pcmpeqw<A, B>(&mut self, op0: A, op1: B)
2642 where
2643 Assembler<'a>: MmxPcmpeqwEmitter<A, B>,
2644 {
2645 <Self as MmxPcmpeqwEmitter<A, B>>::mmx_pcmpeqw(self, op0, op1);
2646 }
2647 #[inline]
2660 pub fn mmx_pcmpgtb<A, B>(&mut self, op0: A, op1: B)
2661 where
2662 Assembler<'a>: MmxPcmpgtbEmitter<A, B>,
2663 {
2664 <Self as MmxPcmpgtbEmitter<A, B>>::mmx_pcmpgtb(self, op0, op1);
2665 }
2666 #[inline]
2679 pub fn mmx_pcmpgtd<A, B>(&mut self, op0: A, op1: B)
2680 where
2681 Assembler<'a>: MmxPcmpgtdEmitter<A, B>,
2682 {
2683 <Self as MmxPcmpgtdEmitter<A, B>>::mmx_pcmpgtd(self, op0, op1);
2684 }
2685 #[inline]
2698 pub fn mmx_pcmpgtw<A, B>(&mut self, op0: A, op1: B)
2699 where
2700 Assembler<'a>: MmxPcmpgtwEmitter<A, B>,
2701 {
2702 <Self as MmxPcmpgtwEmitter<A, B>>::mmx_pcmpgtw(self, op0, op1);
2703 }
2704 #[inline]
2717 pub fn mmx_pmaddwd<A, B>(&mut self, op0: A, op1: B)
2718 where
2719 Assembler<'a>: MmxPmaddwdEmitter<A, B>,
2720 {
2721 <Self as MmxPmaddwdEmitter<A, B>>::mmx_pmaddwd(self, op0, op1);
2722 }
2723 #[inline]
2736 pub fn mmx_pmulhw<A, B>(&mut self, op0: A, op1: B)
2737 where
2738 Assembler<'a>: MmxPmulhwEmitter<A, B>,
2739 {
2740 <Self as MmxPmulhwEmitter<A, B>>::mmx_pmulhw(self, op0, op1);
2741 }
2742 #[inline]
2755 pub fn mmx_pmullw<A, B>(&mut self, op0: A, op1: B)
2756 where
2757 Assembler<'a>: MmxPmullwEmitter<A, B>,
2758 {
2759 <Self as MmxPmullwEmitter<A, B>>::mmx_pmullw(self, op0, op1);
2760 }
2761 #[inline]
2774 pub fn mmx_pmuludq<A, B>(&mut self, op0: A, op1: B)
2775 where
2776 Assembler<'a>: MmxPmuludqEmitter<A, B>,
2777 {
2778 <Self as MmxPmuludqEmitter<A, B>>::mmx_pmuludq(self, op0, op1);
2779 }
2780 #[inline]
2793 pub fn mmx_por<A, B>(&mut self, op0: A, op1: B)
2794 where
2795 Assembler<'a>: MmxPorEmitter<A, B>,
2796 {
2797 <Self as MmxPorEmitter<A, B>>::mmx_por(self, op0, op1);
2798 }
2799 #[inline]
2813 pub fn mmx_pslld<A, B>(&mut self, op0: A, op1: B)
2814 where
2815 Assembler<'a>: MmxPslldEmitter<A, B>,
2816 {
2817 <Self as MmxPslldEmitter<A, B>>::mmx_pslld(self, op0, op1);
2818 }
2819 #[inline]
2833 pub fn mmx_psllq<A, B>(&mut self, op0: A, op1: B)
2834 where
2835 Assembler<'a>: MmxPsllqEmitter<A, B>,
2836 {
2837 <Self as MmxPsllqEmitter<A, B>>::mmx_psllq(self, op0, op1);
2838 }
2839 #[inline]
2853 pub fn mmx_psllw<A, B>(&mut self, op0: A, op1: B)
2854 where
2855 Assembler<'a>: MmxPsllwEmitter<A, B>,
2856 {
2857 <Self as MmxPsllwEmitter<A, B>>::mmx_psllw(self, op0, op1);
2858 }
2859 #[inline]
2873 pub fn mmx_psrad<A, B>(&mut self, op0: A, op1: B)
2874 where
2875 Assembler<'a>: MmxPsradEmitter<A, B>,
2876 {
2877 <Self as MmxPsradEmitter<A, B>>::mmx_psrad(self, op0, op1);
2878 }
2879 #[inline]
2893 pub fn mmx_psraw<A, B>(&mut self, op0: A, op1: B)
2894 where
2895 Assembler<'a>: MmxPsrawEmitter<A, B>,
2896 {
2897 <Self as MmxPsrawEmitter<A, B>>::mmx_psraw(self, op0, op1);
2898 }
2899 #[inline]
2913 pub fn mmx_psrld<A, B>(&mut self, op0: A, op1: B)
2914 where
2915 Assembler<'a>: MmxPsrldEmitter<A, B>,
2916 {
2917 <Self as MmxPsrldEmitter<A, B>>::mmx_psrld(self, op0, op1);
2918 }
2919 #[inline]
2933 pub fn mmx_psrlq<A, B>(&mut self, op0: A, op1: B)
2934 where
2935 Assembler<'a>: MmxPsrlqEmitter<A, B>,
2936 {
2937 <Self as MmxPsrlqEmitter<A, B>>::mmx_psrlq(self, op0, op1);
2938 }
2939 #[inline]
2953 pub fn mmx_psrlw<A, B>(&mut self, op0: A, op1: B)
2954 where
2955 Assembler<'a>: MmxPsrlwEmitter<A, B>,
2956 {
2957 <Self as MmxPsrlwEmitter<A, B>>::mmx_psrlw(self, op0, op1);
2958 }
2959 #[inline]
2972 pub fn mmx_psubb<A, B>(&mut self, op0: A, op1: B)
2973 where
2974 Assembler<'a>: MmxPsubbEmitter<A, B>,
2975 {
2976 <Self as MmxPsubbEmitter<A, B>>::mmx_psubb(self, op0, op1);
2977 }
2978 #[inline]
2991 pub fn mmx_psubd<A, B>(&mut self, op0: A, op1: B)
2992 where
2993 Assembler<'a>: MmxPsubdEmitter<A, B>,
2994 {
2995 <Self as MmxPsubdEmitter<A, B>>::mmx_psubd(self, op0, op1);
2996 }
2997 #[inline]
3010 pub fn mmx_psubq<A, B>(&mut self, op0: A, op1: B)
3011 where
3012 Assembler<'a>: MmxPsubqEmitter<A, B>,
3013 {
3014 <Self as MmxPsubqEmitter<A, B>>::mmx_psubq(self, op0, op1);
3015 }
3016 #[inline]
3029 pub fn mmx_psubsb<A, B>(&mut self, op0: A, op1: B)
3030 where
3031 Assembler<'a>: MmxPsubsbEmitter<A, B>,
3032 {
3033 <Self as MmxPsubsbEmitter<A, B>>::mmx_psubsb(self, op0, op1);
3034 }
3035 #[inline]
3048 pub fn mmx_psubsw<A, B>(&mut self, op0: A, op1: B)
3049 where
3050 Assembler<'a>: MmxPsubswEmitter<A, B>,
3051 {
3052 <Self as MmxPsubswEmitter<A, B>>::mmx_psubsw(self, op0, op1);
3053 }
3054 #[inline]
3067 pub fn mmx_psubusb<A, B>(&mut self, op0: A, op1: B)
3068 where
3069 Assembler<'a>: MmxPsubusbEmitter<A, B>,
3070 {
3071 <Self as MmxPsubusbEmitter<A, B>>::mmx_psubusb(self, op0, op1);
3072 }
3073 #[inline]
3086 pub fn mmx_psubusw<A, B>(&mut self, op0: A, op1: B)
3087 where
3088 Assembler<'a>: MmxPsubuswEmitter<A, B>,
3089 {
3090 <Self as MmxPsubuswEmitter<A, B>>::mmx_psubusw(self, op0, op1);
3091 }
3092 #[inline]
3105 pub fn mmx_psubw<A, B>(&mut self, op0: A, op1: B)
3106 where
3107 Assembler<'a>: MmxPsubwEmitter<A, B>,
3108 {
3109 <Self as MmxPsubwEmitter<A, B>>::mmx_psubw(self, op0, op1);
3110 }
3111 #[inline]
3124 pub fn mmx_punpckhbw<A, B>(&mut self, op0: A, op1: B)
3125 where
3126 Assembler<'a>: MmxPunpckhbwEmitter<A, B>,
3127 {
3128 <Self as MmxPunpckhbwEmitter<A, B>>::mmx_punpckhbw(self, op0, op1);
3129 }
3130 #[inline]
3143 pub fn mmx_punpckhdq<A, B>(&mut self, op0: A, op1: B)
3144 where
3145 Assembler<'a>: MmxPunpckhdqEmitter<A, B>,
3146 {
3147 <Self as MmxPunpckhdqEmitter<A, B>>::mmx_punpckhdq(self, op0, op1);
3148 }
3149 #[inline]
3162 pub fn mmx_punpckhwd<A, B>(&mut self, op0: A, op1: B)
3163 where
3164 Assembler<'a>: MmxPunpckhwdEmitter<A, B>,
3165 {
3166 <Self as MmxPunpckhwdEmitter<A, B>>::mmx_punpckhwd(self, op0, op1);
3167 }
3168 #[inline]
3181 pub fn mmx_punpcklbw<A, B>(&mut self, op0: A, op1: B)
3182 where
3183 Assembler<'a>: MmxPunpcklbwEmitter<A, B>,
3184 {
3185 <Self as MmxPunpcklbwEmitter<A, B>>::mmx_punpcklbw(self, op0, op1);
3186 }
3187 #[inline]
3200 pub fn mmx_punpckldq<A, B>(&mut self, op0: A, op1: B)
3201 where
3202 Assembler<'a>: MmxPunpckldqEmitter<A, B>,
3203 {
3204 <Self as MmxPunpckldqEmitter<A, B>>::mmx_punpckldq(self, op0, op1);
3205 }
3206 #[inline]
3219 pub fn mmx_punpcklwd<A, B>(&mut self, op0: A, op1: B)
3220 where
3221 Assembler<'a>: MmxPunpcklwdEmitter<A, B>,
3222 {
3223 <Self as MmxPunpcklwdEmitter<A, B>>::mmx_punpcklwd(self, op0, op1);
3224 }
3225 #[inline]
3238 pub fn mmx_pxor<A, B>(&mut self, op0: A, op1: B)
3239 where
3240 Assembler<'a>: MmxPxorEmitter<A, B>,
3241 {
3242 <Self as MmxPxorEmitter<A, B>>::mmx_pxor(self, op0, op1);
3243 }
3244}