1 // stop compiling if NORECBUILD build (only for Visual Studio)
2 #if !(defined(_MSC_VER) && defined(PCSX2_NORECBUILD))
3
4 #include "ix86-64.h"
5
6 /**********************/
7 /* 3DNOW instructions */
8 /**********************/
9
10 /* femms */
FEMMS(void)11 void FEMMS( void )
12 {
13 write16( 0x0E0F );
14 }
15
PFCMPEQMtoR(x86IntRegType to,uptr from)16 void PFCMPEQMtoR( x86IntRegType to, uptr from )
17 {
18 MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
19 write8( 0xB0 );
20 }
21
PFCMPGTMtoR(x86IntRegType to,uptr from)22 void PFCMPGTMtoR( x86IntRegType to, uptr from )
23 {
24 MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
25 write8( 0xA0 );
26 }
27
PFCMPGEMtoR(x86IntRegType to,uptr from)28 void PFCMPGEMtoR( x86IntRegType to, uptr from )
29 {
30 MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
31 write8( 0x90 );
32 }
33
PFADDMtoR(x86IntRegType to,uptr from)34 void PFADDMtoR( x86IntRegType to, uptr from )
35 {
36 MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
37 write8( 0x9E );
38 }
39
PFADDRtoR(x86IntRegType to,x86IntRegType from)40 void PFADDRtoR( x86IntRegType to, x86IntRegType from )
41 {
42 RexRB(0, to, from);
43 write16( 0x0F0F );
44 ModRM( 3, to, from );
45 write8( 0x9E );
46 }
47
PFSUBMtoR(x86IntRegType to,uptr from)48 void PFSUBMtoR( x86IntRegType to, uptr from )
49 {
50 MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
51 write8( 0x9A );
52 }
53
PFSUBRtoR(x86IntRegType to,x86IntRegType from)54 void PFSUBRtoR( x86IntRegType to, x86IntRegType from )
55 {
56 RexRB(0, to, from);
57 write16( 0x0F0F );
58 ModRM( 3, to, from );
59 write8( 0x9A );
60 }
61
PFMULMtoR(x86IntRegType to,uptr from)62 void PFMULMtoR( x86IntRegType to, uptr from )
63 {
64 MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
65 write8( 0xB4 );
66 }
67
PFMULRtoR(x86IntRegType to,x86IntRegType from)68 void PFMULRtoR( x86IntRegType to, x86IntRegType from )
69 {
70 RexRB(0, to, from);
71 write16( 0x0F0F );
72 ModRM( 3, to, from );
73 write8( 0xB4 );
74 }
75
PFRCPMtoR(x86IntRegType to,uptr from)76 void PFRCPMtoR( x86IntRegType to, uptr from )
77 {
78 MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
79 write8( 0x96 );
80 }
81
PFRCPRtoR(x86IntRegType to,x86IntRegType from)82 void PFRCPRtoR( x86IntRegType to, x86IntRegType from )
83 {
84 RexRB(0, to, from);
85 write16( 0x0F0F );
86 ModRM( 3, to, from );
87 write8( 0x96 );
88 }
89
PFRCPIT1RtoR(x86IntRegType to,x86IntRegType from)90 void PFRCPIT1RtoR( x86IntRegType to, x86IntRegType from )
91 {
92 RexRB(0, to, from);
93 write16( 0x0F0F );
94 ModRM( 3, to, from );
95 write8( 0xA6 );
96 }
97
PFRCPIT2RtoR(x86IntRegType to,x86IntRegType from)98 void PFRCPIT2RtoR( x86IntRegType to, x86IntRegType from )
99 {
100 RexRB(0, to, from);
101 write16( 0x0F0F );
102 ModRM( 3, to, from );
103 write8( 0xB6 );
104 }
105
PFRSQRTRtoR(x86IntRegType to,x86IntRegType from)106 void PFRSQRTRtoR( x86IntRegType to, x86IntRegType from )
107 {
108 RexRB(0, to, from);
109 write16( 0x0F0F );
110 ModRM( 3, to, from );
111 write8( 0x97 );
112 }
113
PFRSQIT1RtoR(x86IntRegType to,x86IntRegType from)114 void PFRSQIT1RtoR( x86IntRegType to, x86IntRegType from )
115 {
116 RexRB(0, to, from);
117 write16( 0x0F0F );
118 ModRM( 3, to, from );
119 write8( 0xA7 );
120 }
121
PF2IDMtoR(x86IntRegType to,uptr from)122 void PF2IDMtoR( x86IntRegType to, uptr from )
123 {
124 MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
125 write8( 0x1D );
126 }
127
PF2IDRtoR(x86IntRegType to,x86IntRegType from)128 void PF2IDRtoR( x86IntRegType to, x86IntRegType from )
129 {
130 RexRB(0, to, from);
131 write16( 0x0F0F );
132 ModRM( 3, to, from );
133 write8( 0x1D );
134 }
135
PI2FDMtoR(x86IntRegType to,uptr from)136 void PI2FDMtoR( x86IntRegType to, uptr from )
137 {
138 MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
139 write8( 0x0D );
140 }
141
PI2FDRtoR(x86IntRegType to,x86IntRegType from)142 void PI2FDRtoR( x86IntRegType to, x86IntRegType from )
143 {
144 RexRB(0, to, from);
145 write16( 0x0F0F );
146 ModRM( 3, to, from );
147 write8( 0x0D );
148 }
149
PFMAXMtoR(x86IntRegType to,uptr from)150 void PFMAXMtoR( x86IntRegType to, uptr from )
151 {
152 MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
153 write8( 0xA4 );
154 }
155
PFMAXRtoR(x86IntRegType to,x86IntRegType from)156 void PFMAXRtoR( x86IntRegType to, x86IntRegType from )
157 {
158 RexRB(0, to, from);
159 write16( 0x0F0F );
160 ModRM( 3, to, from );
161 write8( 0xA4 );
162 }
163
PFMINMtoR(x86IntRegType to,uptr from)164 void PFMINMtoR( x86IntRegType to, uptr from )
165 {
166 MEMADDR_OP(0, VAROP2(0x0F, 0x0F), true, to, from, 1);
167 write8( 0x94 );
168 }
169
PFMINRtoR(x86IntRegType to,x86IntRegType from)170 void PFMINRtoR( x86IntRegType to, x86IntRegType from )
171 {
172 RexRB(0, to, from);
173 write16( 0x0F0F );
174 ModRM( 3, to, from );
175 write8( 0x94 );
176 }
177
178 #endif
179