5 http
://www.amd.com
/us-en
/assets
/content_type
/white_papers_and_tech_docs
/26568.pdf
10 CMPPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
11 CMPPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
12 CMPSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
13 CMPSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
15 FXRSTOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
121
16 FXSAVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
124
18 HADDPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
126
19 HADDPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
129
20 HSUBPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
132
21 HSUBPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
135
23 LDDQU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
138
24 LDMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
140
26 MASKMOVDQU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
142
28 MOVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
173
29 MOVDDUP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
176
30 MOVDQ2Q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
178
32 MOVHLPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
184
34 MOVLHPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
190
36 MOVMSKPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
196
37 MOVMSKPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
198
38 MOVNTDQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
200
39 MOVNTPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
202
40 MOVNTPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
204
42 MOVQ2DQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
208
44 MOVSHDUP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
213
45 MOVSLDUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
215
47 PEXTRW. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
284
48 PINSRW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
286
50 PSHUFD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
314
51 PSHUFHW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
317
52 PSHUFLW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
320
53 PSLLD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
323
54 PSLLDQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
326
55 PSLLQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
328
56 PSLLW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
330
57 PSRAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
333
58 PSRAW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
336
59 PSRLD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
339
60 PSRLDQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
342
61 PSRLQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
344
62 PSRLW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
347
64 SHUFPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
392
65 SHUFPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
395
66 STMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
410
71 (declaim (optimize (debug 3)))
75 collect
`(emit-byte segment
,op
) into result
76 finally
(return result
)))
79 (defun gen-ops (&optional
(stream t
))
81 ;;; instructions like:
82 ;;; ADDPS xmm1, xmm2/mem128 0F 58 /r
83 (loop for
(inst . ops
) in
85 ;; single precision float
87 (addsubps #xF2
#x0F
#xD0
)
103 ;; double precision float
104 (addpd #x66
#x0F
#x58
)
105 (addsubpd #x66
#x0F
#xD0
)
106 (andnpd #x66
#x0F
#x55
)
107 (andpd #x66
#x0F
#x54
)
108 (divpd #x66
#x0F
#x5E
)
109 (maxpd #x66
#x0F
#x5F
)
110 (minpd #x66
#x0F
#x5D
)
111 (mulpd #x66
#x0F
#x59
)
112 (orps #x66
#x0F
#x56
)
113 (sqrtpd #x66
#x0F
#x51
)
114 (subpd #x66
#x0F
#x5C
)
115 (unpckhpd #x66
#x0F
#x15
)
116 (unpcklpd #x66
#x0F
#x14
)
117 (xorpd #x66
#x0F
#x57
)
119 ;; scalar double precision float
120 (addsd #xF2
#x0F
#x58
)
121 (comisd #x66
#x0F
#x2F
)
122 (divsd #xF2
#x0F
#x5E
)
123 (maxsd #xF2
#x0F
#x5F
)
124 (minsd #xF2
#x0F
#x5D
)
125 (mulsd #xF2
#x0F
#x59
)
126 (sqrtsd #xF2
#x0F
#x51
)
127 (subsd #xF2
#x0F
#x5C
)
128 (ucomisd #x66
#x0F
#x2E
)
130 ;; scalar single precision float
131 (addss #xF3
#x0F
#x58
)
133 (divss #xF3
#x0F
#x5E
)
134 (maxss #xF3
#x0F
#x5F
)
135 (minss #xF3
#x0F
#x5D
)
136 (mulss #xF3
#x0F
#x59
)
137 (rcpss #xF3
#x0F
#x53
)
138 (rsqrtss #xF3
#x0F
#x52
)
139 (sqrtss #xF3
#x0F
#x51
)
140 (subss #xF3
#x0F
#x5C
)
145 (packssdw #x66
#x0F
#x6B
)
146 (packsswb #x66
#x0F
#x63
)
147 (packuswb #x66
#x0F
#x67
)
149 (paddb #x66
#x0F
#xFC
)
150 (paddd #x66
#x0F
#xFE
)
151 (paddq #x66
#x0F
#xD4
)
152 (paddsb #x66
#x0F
#xEC
)
153 (paddsw #x66
#x0F
#xED
)
154 (paddusb #x66
#x0F
#xDC
)
155 (paddusw #x66
#x0F
#xDD
)
156 (paddw #x66
#x0F
#xFD
)
158 (pand #x66
#x0F
#xDB
)
159 (pandn #x66
#x0F
#xDF
)
161 (pavgb #x66
#x0F
#xE0
)
162 (pavgw #x66
#x0F
#xE3
)
164 (pcmpeqb #x66
#x0F
#x74
)
165 (pcmpeqd #x66
#x0F
#x76
)
166 (pcmpeqw #x66
#x0F
#x75
)
167 (pcmpgtb #x66
#x0F
#x64
)
168 (pcmpgtd #x66
#x0F
#x66
)
169 (pcmpgtw #x66
#x0F
#x65
)
171 (pmaddwd #x66
#x0F
#xF5
)
173 (pmaxsw #x66
#x0F
#xEE
)
174 (pmaxub #x66
#x0F
#xDE
)
176 (pminsw #x66
#x0F
#xEA
)
177 (pminub #x66
#x0F
#xDA
)
179 (pmovmskb #x66
#x0F
#xD7
)
181 (pmulhuw #x66
#x0F
#xE4
)
182 (pmulhw #x66
#x0F
#xE5
)
183 (pmullw #x66
#x0F
#xD5
)
184 (pmuludq #x66
#x0F
#xF4
)
188 (psadbw #x66
#x0F
#xF6
)
189 (pssld #x66
#x0F
#xF2
)
190 (psllq #x66
#x0F
#xF3
)
191 (psllw #x66
#x0F
#xF1
)
192 (psrad #x66
#x0F
#xE2
)
193 (psraw #x66
#x0F
#xE2
)
194 (psrld #x66
#x0F
#xD2
)
195 (psrlq #x66
#x0F
#xD3
)
196 (psrlw #x66
#x0F
#xD1
)
198 (psubb #x66
#x0F
#xF8
)
199 (psubd #x66
#x0F
#xFA
)
200 (psubq #x66
#x0F
#xFB
)
201 (psubsb #x66
#x0F
#xE8
)
202 (psubsw #x66
#x0F
#xE9
)
203 (psubusb #x66
#x0F
#xD8
)
204 (psubusw #x66
#x0F
#xD9
)
205 (psubw #x66
#x0F
#xF9
)
207 (punpckhbw #x66
#x0F
#x68
)
208 (punpckhdq #x66
#x0F
#x6A
)
209 (punpckhqdq #x66
#x0F
#x6D
)
210 (punpckhwd #x66
#x0F
#x69
)
211 (punpcklbw #x66
#x0F
#x60
)
212 (punpckldq #x66
#x0F
#x62
)
213 (punpcklqdq #x66
#x0F
#x6C
)
214 (punpcklwd #x66
#x0F
#x61
)
216 (pxor #x66
#x0F
#xEF
)
219 (cvtdq2pd #xF3
#x0F
#xE6
)
221 (cvtpd2dq #xF2
#x0F
#xE6
)
222 (cvtpd2pi #x66
#x0F
#x2D
)
223 (cvtpd2ps #x66
#x0F
#x5A
)
224 (cvtpi2pd #x66
#x0F
#x2A
)
226 (cvtps2dq #x66
#x0F
#x5B
)
229 (cvtsd2si #xF2
#x0F
#x2D
)
230 (cvtsd2ss #xF2
#x0F
#x5A
)
231 (cvtsi2sd #xF2
#x0F
#x2A
)
232 (cvtsi2ss #xF3
#x0F
#x2A
)
233 (cvtss2sd #xF3
#x0F
#x5A
)
234 (cvtss2si #xF3
#x0F
#x2D
)
235 (cvttpd2dq #x66
#x0F
#xE6
)
236 (cvttpd2pi #x66
#x0F
#x2C
)
237 (cvttps2dq #xF3
#x0F
#x5B
)
238 (cvttps2pi #x0F
#x2C
)
239 (cvttsd2si #xF2
#x0F
#x2C
)
240 (cvttss2si #xF3
#x0F
#x2C
)
244 (format stream
"~S~%~%"
245 `(define-instruction ,(intern (symbol-name inst
)) (segment dst src
)
248 (emit-ea segment src
(reg-tn-encoding dst
))))))
251 (loop for
(inst ops-m2r ops-r2m
) in
253 (movapd (#x66
#x0F
#x28
) (#x66
#x0F
#x29
))
254 (movaps (#x0F
#x28
) (#x0F
#x29
))
256 (movdqa (#x66
#x0F
#x6F
) (#x66
#x0F
#x7F
))
257 (movdqu (#xF3
#x0F
#x6F
) (#xF3
#x0F
#x7F
))
259 (movhpd (#x66
#x0F
#x16
) (#x66
#x0F
#x17
))
260 (movhps (#x0F
#x16
) (#x0F
#x17
))
262 (movlpd (#x66
#x0F
#x12
) (#x66
#x0F
#x13
))
263 (movlps (#x0F
#x12
) (#x0F
#x13
))
265 (movq (#xF3
#x0F
#x7E
) (#x66
#x0F
#xD6
))
267 (movsd (#xF2
#x0F
#x10
) (#xF2
#x0F
#x11
))
269 (movss (#xF3
#x0F
#x10
) (#xF3
#x0F
#x11
))
271 (movupd (#x66
#x0F
#x10
) (#x66
#x0F
#x11
))
272 (movups (#x0F
#x10
) (#x0F
#x11
))
275 (format stream
"~S~%~%"
276 `(define-instruction ,(intern (symbol-name inst
)) (segment dst src
)
278 (cond ((sse-register-p dst
)
280 (emit-ea segment src
(reg-tn-encoding dst
)))
281 (t ,@(emit-ops ops-r2m
)
282 (emit-ea segment dst
(reg-tn-encoding src
)))))))))
284 (defun gen-ops-to-file (filename)
285 (with-open-file (stream filename
:direction
:output
:if-exists
:supersede
)