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
14 COMISD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
15 COMISS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
16 CVTDQ2PD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
17 CVTDQ2PS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
18 CVTPD2DQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
19 CVTPD2PI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
20 CVTPD2PS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
21 CVTPI2PD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
22 CVTPI2PS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
23 CVTPS2DQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
24 CVTPS2PD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
25 CVTPS2PI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
26 CVTSD2SI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
74
27 CVTSD2SS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
77
28 CVTSI2SD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
80
29 CVTSI2SS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
30 CVTSS2SD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
86
31 CVTSS2SI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
88
32 CVTTPD2DQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91
33 CVTTPD2PI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
94
34 CVTTPS2DQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
97
35 CVTTPS2PI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
100
36 CVTTSD2SI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
103
37 CVTTSS2SI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
106
38 FXRSTOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
121
39 FXSAVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
124
40 HADDPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
126
41 HADDPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
129
42 HSUBPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
132
43 HSUBPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
135
44 LDDQU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
138
45 LDMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
140
46 MASKMOVDQU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
142
47 MOVAPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
168
48 MOVAPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
170
49 MOVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
173
50 MOVDDUP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
176
51 MOVDQ2Q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
178
52 MOVDQA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
180
53 MOVDQU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
182
54 MOVHLPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
184
55 MOVHPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
186
56 MOVHPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
188
57 MOVLHPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
190
58 MOVLPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
192
59 MOVLPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
194
60 MOVMSKPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
196
61 MOVMSKPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
198
62 MOVNTDQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
200
63 MOVNTPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
202
64 MOVNTPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
204
65 MOVQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
206
66 MOVQ2DQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
208
67 MOVSD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
210
68 MOVSHDUP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
213
69 MOVSLDUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
215
70 MOVSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
217
72 PEXTRW. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
284
73 PINSRW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
286
75 PSHUFD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
314
76 PSHUFHW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
317
77 PSHUFLW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
320
78 PSLLD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
323
79 PSLLDQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
326
80 PSLLQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
328
81 PSLLW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
330
82 PSRAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
333
83 PSRAW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
336
84 PSRLD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
339
85 PSRLDQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
342
86 PSRLQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
344
87 PSRLW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
347
89 SHUFPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
392
90 SHUFPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
395
91 STMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
410
92 UCOMISD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
424
93 UCOMISS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
427
94 UNPCKHPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
430
95 UNPCKHPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
432
96 UNPCKLPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
434
97 UNPCKLPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
436
101 (declaim (optimize (debug 3)))
103 (defun emit-ops (ops)
105 collect
`(emit-byte segment
,op
) into result
106 finally
(return result
)))
109 (defun gen-ops (&optional
(stream t
))
111 ;;; instructions like:
112 ;;; ADDPS xmm1, xmm2/mem128 0F 58 /r
113 (loop for
(inst . ops
) in
115 ;; single precision float
117 (addsubps #xF2
#x0F
#xD0
)
131 ;; double precision float
132 (addpd #x66
#x0F
#x58
)
133 (addsubpd #x66
#x0F
#xD0
)
134 (andnpd #x66
#x0F
#x55
)
135 (andpd #x66
#x0F
#x54
)
136 (divpd #x66
#x0F
#x5E
)
137 (maxpd #x66
#x0F
#x5F
)
138 (minpd #x66
#x0F
#x5D
)
139 (mulpd #x66
#x0F
#x59
)
140 (orps #x66
#x0F
#x56
)
141 (sqrtpd #x66
#x0F
#x51
)
142 (subpd #x66
#x0F
#x5C
)
143 (xorpd #x66
#x0F
#x57
)
145 ;; scalar double precision float
146 (addsd #xF2
#x0F
#x58
)
147 (divsd #xF2
#x0F
#x5E
)
148 (maxsd #xF2
#x0F
#x5F
)
149 (minsd #xF2
#x0F
#x5D
)
150 (mulsd #xF2
#x0F
#x59
)
151 (sqrtsd #xF2
#x0F
#x51
)
152 (subsd #xF2
#x0F
#x5C
)
154 ;; scalar single precision float
155 (addss #xF3
#x0F
#x58
)
156 (divss #xF3
#x0F
#x5E
)
157 (maxss #xF3
#x0F
#x5F
)
158 (minss #xF3
#x0F
#x5D
)
159 (mulss #xF3
#x0F
#x59
)
160 (rcpss #xF3
#x0F
#x53
)
161 (rsqrtss #xF3
#x0F
#x52
)
162 (sqrtss #xF3
#x0F
#x51
)
163 (subss #xF3
#x0F
#x5C
)
166 (packssdw #x66
#x0F
#x6B
)
167 (packsswb #x66
#x0F
#x63
)
168 (packuswb #x66
#x0F
#x67
)
170 (paddb #x66
#x0F
#xFC
)
171 (paddd #x66
#x0F
#xFE
)
172 (paddq #x66
#x0F
#xD4
)
173 (paddsb #x66
#x0F
#xEC
)
174 (paddsw #x66
#x0F
#xED
)
175 (paddusb #x66
#x0F
#xDC
)
176 (paddusw #x66
#x0F
#xDD
)
177 (paddw #x66
#x0F
#xFD
)
179 (pand #x66
#x0F
#xDB
)
180 (pandn #x66
#x0F
#xDF
)
182 (pavgb #x66
#x0F
#xE0
)
183 (pavgw #x66
#x0F
#xE3
)
185 (pcmpeqb #x66
#x0F
#x74
)
186 (pcmpeqd #x66
#x0F
#x76
)
187 (pcmpeqw #x66
#x0F
#x75
)
188 (pcmpgtb #x66
#x0F
#x64
)
189 (pcmpgtd #x66
#x0F
#x66
)
190 (pcmpgtw #x66
#x0F
#x65
)
192 (pmaddwd #x66
#x0F
#xF5
)
194 (pmaxsw #x66
#x0F
#xEE
)
195 (pmaxub #x66
#x0F
#xDE
)
197 (pminsw #x66
#x0F
#xEA
)
198 (pminub #x66
#x0F
#xDA
)
200 (pmovmskb #x66
#x0F
#xD7
)
202 (pmulhuw #x66
#x0F
#xE4
)
203 (pmulhw #x66
#x0F
#xE5
)
204 (pmullw #x66
#x0F
#xD5
)
205 (pmuludq #x66
#x0F
#xF4
)
209 (psadbw #x66
#x0F
#xF6
)
210 (pssld #x66
#x0F
#xF2
)
211 (psllq #x66
#x0F
#xF3
)
212 (psllw #x66
#x0F
#xF1
)
213 (psrad #x66
#x0F
#xE2
)
214 (psraw #x66
#x0F
#xE2
)
215 (psrld #x66
#x0F
#xD2
)
216 (psrlq #x66
#x0F
#xD3
)
217 (psrlw #x66
#x0F
#xD1
)
219 (psubb #x66
#x0F
#xF8
)
220 (psubd #x66
#x0F
#xFA
)
221 (psubq #x66
#x0F
#xFB
)
222 (psubsb #x66
#x0F
#xE8
)
223 (psubsw #x66
#x0F
#xE9
)
224 (psubusb #x66
#x0F
#xD8
)
225 (psubusw #x66
#x0F
#xD9
)
226 (psubw #x66
#x0F
#xF9
)
228 (punpckhbw #x66
#x0F
#x68
)
229 (punpckhdq #x66
#x0F
#x6A
)
230 (punpckhqdq #x66
#x0F
#x6D
)
231 (punpckhwd #x66
#x0F
#x69
)
232 (punpcklbw #x66
#x0F
#x60
)
233 (punpckldq #x66
#x0F
#x62
)
234 (punpcklqdq #x66
#x0F
#x6C
)
235 (punpcklwd #x66
#x0F
#x61
)
237 (pxor #x66
#x0F
#xEF
)
241 (format stream
"~S~%~%"
242 `(define-instruction ,(intern (symbol-name inst
)) (segment dst src
)
245 (emit-ea segment src
(reg-tn-encoding dst
))))))
248 (loop for
(inst ops-m2r ops-r2m
) in
250 (movups (#x0F
#x10
) (#x0F
#x11
))
251 (movupd (#x66
#x0F
#x10
) (#x66
#x0F
#x11
)))
253 (format stream
"~S~%~%"
254 `(define-instruction ,(intern (symbol-name inst
)) (segment dst src
)
256 (cond ((sse-register-p dst
)
258 (emit-ea segment src
(reg-tn-encoding dst
)))
259 (t ,@(emit-ops ops-r2m
)
260 (emit-ea segment dst
(reg-tn-encoding src
)))))))))
262 (defun gen-ops-to-file (filename)
263 (with-open-file (stream filename
:direction
:output
:if-exists
:supersede
)