..
authorrlaakso <rlaakso>
Mon, 8 Aug 2005 13:33:23 +0000 (8 13:33 +0000)
committerrlaakso <rlaakso>
Mon, 8 Aug 2005 13:33:23 +0000 (8 13:33 +0000)
generate-sse-instructions.lisp
sbcl-src/makepatch.sh
sbcl-src/patch_against_sbcl_0_9_3
sbcl-src/src/compiler/x86/insts.lisp
sse-vop.lisp

index e3254cf..7619416 100644 (file)
@@ -7,49 +7,16 @@ http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/26568.pd
 
 TODO:
 
-CMPPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
-CMPPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
-CMPSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
-CMPSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
-
 FXRSTOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
 FXSAVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
 
-HADDPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
-HADDPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
-HSUBPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
-HSUBPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
-
-LDDQU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
 LDMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
 
-MASKMOVDQU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
-
-MOVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
-MOVDDUP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
 MOVDQ2Q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
 
-MOVHLPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
-
-MOVLHPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
-
-MOVMSKPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
-MOVMSKPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
-MOVNTDQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
-MOVNTPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
-MOVNTPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
-
 MOVQ2DQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
 
-MOVSHDUP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
-MOVSLDUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
-
-PEXTRW. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
-PINSRW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
-
-PSHUFD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
-PSHUFHW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
-PSHUFLW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
+(ib-forms:)
 PSLLD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
 PSLLDQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
 PSLLQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
@@ -61,8 +28,6 @@ PSRLDQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
 PSRLQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
 PSRLW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
 
-SHUFPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
-SHUFPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
 STMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
 
 
@@ -88,6 +53,8 @@ STMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
          (andnps #x0F #x55)
          (andps #x0F #x54)
          (divps #x0F #x5E)
+         (haddps #xF2 #x0F #x7C)
+         (hsubps #xF2 #x0F #x7D)
          (maxps #x0F #x5F)
          (minps #x0F #x5D)
          (mulps #x0F #x59)
@@ -106,10 +73,12 @@ STMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
          (andnpd #x66 #x0F #x55)
          (andpd #x66 #x0F #x54)
          (divpd #x66 #x0F #x5E)
+         (haddpd #x66 #x0F #x7C)
+         (hsubpd #x66 #x0F #x7D)
          (maxpd #x66 #x0F #x5F)
          (minpd #x66 #x0F #x5D)
          (mulpd #x66 #x0F #x59)
-         (orps #x66 #x0F #x56)
+         (orpd #x66 #x0F #x56)
          (sqrtpd #x66 #x0F #x51)
          (subpd #x66 #x0F #x5C)
          (unpckhpd #x66 #x0F #x15)
@@ -238,7 +207,20 @@ STMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
          (cvttps2pi #x0F #x2C)
          (cvttsd2si #xF2 #x0F #x2C)
          (cvttss2si #xF3 #x0F #x2C)
-         
+
+         ;; misc
+         (lddqu #xF2 #x0F #xF0)
+         (maskmovdqu #x66 #x0F #xF7)
+         (movddup #xF2 #x0F #x12)
+         (movhlps #x0F #x12)
+         (movlhps #x0F #x16)
+         (movmskpd #x66 #x0F #x50)
+         (movmskps #x0F #x50)
+         (movntdq #x66 #x0F #XE7)
+         (movntpd #x66 #x0F #x2B)
+         (movntps #x0F #x2B)
+         (movshdup #xF3 #x0F #x16)
+         (movsldup #xF3 #x0F #x12)
          )
        do
        (format stream "~S~%~%"
@@ -247,12 +229,64 @@ STMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
                   ,@(emit-ops ops)
                   (emit-ea segment src (reg-tn-encoding dst))))))
 
+
+  ;; INSTRUCTIONS WITH /r IB8
+  (loop for (inst . ops) in 
+       '(
+         (pextrw #X66 #x0F #xC5)
+         (pinsrw #x66 #x0F #xC4)
+
+         (pshufd #x66 #x0F #x70)
+         (pshufhw #xF3 #x0F #x70)
+         (pshuflw #xF2 #x0F #x70)
+
+         (shufpd #x66 #x0F #xC6)
+         (shufps #x0F #xC6)
+         
+         )
+       do
+       (format stream "~S~%~%"
+               `(define-instruction ,(intern (symbol-name inst)) (segment dst src byte)
+                 (:emitter
+                  ,@(emit-ops ops)
+                  (emit-ea segment src (reg-tn-encoding dst))
+                  (emit-sized-immediate segment :byte byte)
+                  ))))
+
+  ;; COMPARE
+  (loop for (inst . ops) in 
+       '(
+         (cmppd #x66 #x0F #xC2)
+         (cmpps #x0F #xC2)
+         (cmpsd #xF2 #x0F #xC2)
+         (cmpss #xF3 #x0F #xC2)
+         )
+       do
+       (format stream "~S~%~%"
+               `(define-instruction ,(intern (symbol-name inst)) (segment dst src cond)
+                 (:emitter
+                  ,@(emit-ops ops)
+                  (emit-ea segment src (reg-tn-encoding dst))
+                  (emit-sized-immediate segment :byte (cdr (assoc cond
+                                                                  '((:eq . #b000) (:e . #b000) (:z . #b000)
+                                                                    (:l . #b001) (:nge . #b001)
+                                                                    (:le . #b010) (:ng . #b010)
+                                                                    (:unord . #b011)
+                                                                    (:ne . #b100) (:nz . #b100)
+                                                                    (:nl . #b101) (:ge . #b101)
+                                                                    (:nle . #b110) (:g . #b110)
+                                                                    (:ord . #b111)
+                                                                    ))))
+                  ))))
+
   ;; MOVES
   (loop for (inst ops-m2r ops-r2m) in
        '(
          (movapd (#x66 #x0F #x28) (#x66 #x0F #x29))
          (movaps (#x0F #x28) (#x0F #x29))
 
+         (movd (#x66 #x0F #x6E) (#x66 #x0F #x7E))
+
          (movdqa (#x66 #x0F #x6F) (#x66 #x0F #x7F))
          (movdqu (#xF3 #x0F #x6F) (#xF3 #x0F #x7F))
 
index 641b804..1927890 100755 (executable)
@@ -1,4 +1,4 @@
 #!/bin/sh
 find . -name '.emacs*' |xargs rm  2>/dev/null
 find . -name '*~' |xargs rm 2>/dev/null
-diff -Naur src-093 src > patch_against_sbcl_0_9_3
+diff -x "CVS*" -Naur src-093 src > patch_against_sbcl_0_9_3
index 234ef9d..9a04742 100644 (file)
@@ -1,15 +1,16 @@
-diff -Naur src-093/compiler/x86/insts.lisp src/compiler/x86/insts.lisp
---- src-093/compiler/x86/insts.lisp    2005-08-05 15:31:17.723664255 +0300
-+++ src/compiler/x86/insts.lisp        2005-08-05 15:42:36.536109257 +0300
-@@ -192,6 +192,7 @@
+diff -x 'CVS*' -Naur src-093/compiler/x86/insts.lisp src/compiler/x86/insts.lisp
+--- src-093/compiler/x86/insts.lisp    2005-08-05 16:13:29.000000000 +0300
++++ src/compiler/x86/insts.lisp        2005-08-08 16:30:23.352842152 +0300
+@@ -192,6 +192,8 @@
      (:byte 8)
      (:word 16)
      (:dword 32)
++    (:qword 64)
 +    (:dqword 128)
      (:float 32)
      (:double 64)))
  
-@@ -671,7 +672,7 @@
+@@ -671,7 +673,7 @@
  
  (defun reg-tn-encoding (tn)
    (declare (type tn tn))
@@ -18,7 +19,7 @@ diff -Naur src-093/compiler/x86/insts.lisp src/compiler/x86/insts.lisp
    (let ((offset (tn-offset tn)))
      (logior (ash (logand offset 1) 2)
              (ash offset -1))))
-@@ -718,6 +719,8 @@
+@@ -718,6 +720,8 @@
       (ecase (sb-name (sc-sb (tn-sc thing)))
         (registers
          (emit-mod-reg-r/m-byte segment #b11 reg (reg-tn-encoding thing)))
@@ -27,7 +28,7 @@ diff -Naur src-093/compiler/x86/insts.lisp src/compiler/x86/insts.lisp
         (stack
          ;; Convert stack tns into an index off of EBP.
          (let ((disp (- (* (1+ (tn-offset thing)) n-word-bytes))))
-@@ -830,6 +833,10 @@
+@@ -830,6 +834,10 @@
    (and (tn-p thing)
         (eq (sb-name (sc-sb (tn-sc thing))) 'registers)))
  
@@ -38,7 +39,7 @@ diff -Naur src-093/compiler/x86/insts.lisp src/compiler/x86/insts.lisp
  (defun accumulator-p (thing)
    (and (register-p thing)
         (= (tn-offset thing) 0)))
-@@ -2042,6 +2049,123 @@
+@@ -2042,6 +2050,1339 @@
    (:emitter
     (emit-header-data segment return-pc-header-widetag)))
  \f
@@ -79,6 +80,20 @@ diff -Naur src-093/compiler/x86/insts.lisp src/compiler/x86/insts.lisp
 +                              (EMIT-BYTE SEGMENT 94)
 +                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
 +
++(DEFINE-INSTRUCTION HADDPS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 124)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION HSUBPS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 125)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
 +(DEFINE-INSTRUCTION MAXPS
 +                    (SEGMENT DST SRC)
 +                    (:EMITTER (EMIT-BYTE SEGMENT 15)
@@ -127,24 +142,1227 @@ diff -Naur src-093/compiler/x86/insts.lisp src/compiler/x86/insts.lisp
 +                              (EMIT-BYTE SEGMENT 92)
 +                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
 +
++(DEFINE-INSTRUCTION UNPCKHPS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 21)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION UNPCKLPS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 20)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
 +(DEFINE-INSTRUCTION XORPS
 +                    (SEGMENT DST SRC)
 +                    (:EMITTER (EMIT-BYTE SEGMENT 15)
 +                              (EMIT-BYTE SEGMENT 87)
 +                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
 +
-+;;; SSE MOVE
++(DEFINE-INSTRUCTION ADDPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 88)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION ADDSUBPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 208)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION ANDNPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 85)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION ANDPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 84)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION DIVPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 94)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION HADDPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 124)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION HSUBPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 125)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MAXPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 95)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MINPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 93)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MULPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 89)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION ORPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 86)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION SQRTPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 81)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION SUBPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 92)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION UNPCKHPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 21)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION UNPCKLPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 20)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION XORPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 87)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION ADDSD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 88)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION COMISD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 47)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION DIVSD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 94)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MAXSD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 95)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MINSD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 93)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MULSD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 89)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION SQRTSD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 81)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION SUBSD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 92)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION UCOMISD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 46)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION ADDSS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 88)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION COMISS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 47)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION DIVSS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 94)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MAXSS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 95)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MINSS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 93)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MULSS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 89)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION RCPSS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 83)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION RSQRTSS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 82)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION SQRTSS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 81)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION SUBSS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 92)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION UCOMISS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 46)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PACKSSDW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 107)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PACKSSWB
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 99)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PACKUSWB
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 103)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PADDB
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 252)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PADDD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 254)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PADDQ
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 212)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PADDSB
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 236)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PADDSW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 237)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PADDUSB
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 220)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PADDUSW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 221)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PADDW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 253)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PAND
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 219)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PANDN
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 223)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PAVGB
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 224)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PAVGW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 227)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PCMPEQB
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 116)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PCMPEQD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 118)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PCMPEQW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 117)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PCMPGTB
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 100)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PCMPGTD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 102)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PCMPGTW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 101)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PMADDWD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 245)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PMAXSW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 238)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PMAXUB
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 222)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PMINSW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 234)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PMINUB
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 218)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PMOVMSKB
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 215)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PMULHUW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 228)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PMULHW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 229)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PMULLW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 213)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PMULUDQ
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 244)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION POR
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 235)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PSADBW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 246)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PSSLD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 242)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PSLLQ
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 243)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PSLLW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 241)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PSRAD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 226)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PSRAW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 226)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PSRLD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 210)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PSRLQ
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 211)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PSRLW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 209)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PSUBB
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 248)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PSUBD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 250)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PSUBQ
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 251)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PSUBSB
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 232)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PSUBSW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 233)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PSUBUSB
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 216)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PSUBUSW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 217)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PSUBW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 249)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PUNPCKHBW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 104)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PUNPCKHDQ
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 106)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PUNPCKHQDQ
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 109)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PUNPCKHWD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 105)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PUNPCKLBW
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 96)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PUNPCKLDQ
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 98)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PUNPCKLQDQ
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 108)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PUNPCKLWD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 97)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PXOR
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 239)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTDQ2PD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 230)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTDQ2PS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 91)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTPD2DQ
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 230)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTPD2PI
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 45)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTPD2PS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 90)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTPI2PD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 42)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTPI2PS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 42)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTPS2DQ
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 91)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTPS2PD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 90)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTPS2PI
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 45)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTSD2SI
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 45)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTSD2SS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 90)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTSI2SD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 42)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTSI2SS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 42)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTSS2SD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 90)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTSS2SI
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 45)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTTPD2DQ
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 230)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTTPD2PI
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 44)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTTPS2DQ
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 91)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTTPS2PI
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 44)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTTSD2SI
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 44)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION CVTTSS2SI
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 44)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION LDDQU
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 240)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MASKMOVDQU
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 247)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MOVDDUP
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 18)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MOVHLPS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 18)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MOVLHPS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 22)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MOVMSKPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 80)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MOVMSKPS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 80)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MOVNTDQ
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 231)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MOVNTPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 43)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MOVNTPS
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 43)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MOVSHDUP
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 22)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION MOVSLDUP
++                    (SEGMENT DST SRC)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 18)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
++
++(DEFINE-INSTRUCTION PEXTRW
++                    (SEGMENT DST SRC BYTE)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 197)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
++                              (EMIT-SIZED-IMMEDIATE SEGMENT :BYTE BYTE)))
++
++(DEFINE-INSTRUCTION PINSRW
++                    (SEGMENT DST SRC BYTE)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 196)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
++                              (EMIT-SIZED-IMMEDIATE SEGMENT :BYTE BYTE)))
++
++(DEFINE-INSTRUCTION PSHUFD
++                    (SEGMENT DST SRC BYTE)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 112)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
++                              (EMIT-SIZED-IMMEDIATE SEGMENT :BYTE BYTE)))
++
++(DEFINE-INSTRUCTION PSHUFHW
++                    (SEGMENT DST SRC BYTE)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 112)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
++                              (EMIT-SIZED-IMMEDIATE SEGMENT :BYTE BYTE)))
++
++(DEFINE-INSTRUCTION PSHUFLW
++                    (SEGMENT DST SRC BYTE)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 112)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
++                              (EMIT-SIZED-IMMEDIATE SEGMENT :BYTE BYTE)))
++
++(DEFINE-INSTRUCTION SHUFPD
++                    (SEGMENT DST SRC BYTE)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 198)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
++                              (EMIT-SIZED-IMMEDIATE SEGMENT :BYTE BYTE)))
++
++(DEFINE-INSTRUCTION SHUFPS
++                    (SEGMENT DST SRC BYTE)
++                    (:EMITTER (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 198)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
++                              (EMIT-SIZED-IMMEDIATE SEGMENT :BYTE BYTE)))
++
++(DEFINE-INSTRUCTION CMPPD
++                    (SEGMENT DST SRC COND)
++                    (:EMITTER (EMIT-BYTE SEGMENT 102)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 194)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
++                              (EMIT-SIZED-IMMEDIATE SEGMENT
++                                                    :BYTE
++                                                    (CDR
++                                                     (ASSOC COND
++                                                            '((:EQ . 0)
++                                                              (:E . 0) (:Z . 0)
++                                                              (:L . 1)
++                                                              (:NGE . 1)
++                                                              (:LE . 2)
++                                                              (:NG . 2)
++                                                              (:UNORD . 3)
++                                                              (:NE . 4)
++                                                              (:NZ . 4)
++                                                              (:NL . 5)
++                                                              (:GE . 5)
++                                                              (:NLE . 6)
++                                                              (:G . 6)
++                                                              (:ORD . 7)))))))
++
++(DEFINE-INSTRUCTION CMPPS
++                    (SEGMENT DST SRC COND)
++                    (:EMITTER (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 194)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
++                              (EMIT-SIZED-IMMEDIATE SEGMENT
++                                                    :BYTE
++                                                    (CDR
++                                                     (ASSOC COND
++                                                            '((:EQ . 0)
++                                                              (:E . 0) (:Z . 0)
++                                                              (:L . 1)
++                                                              (:NGE . 1)
++                                                              (:LE . 2)
++                                                              (:NG . 2)
++                                                              (:UNORD . 3)
++                                                              (:NE . 4)
++                                                              (:NZ . 4)
++                                                              (:NL . 5)
++                                                              (:GE . 5)
++                                                              (:NLE . 6)
++                                                              (:G . 6)
++                                                              (:ORD . 7)))))))
++
++(DEFINE-INSTRUCTION CMPSD
++                    (SEGMENT DST SRC COND)
++                    (:EMITTER (EMIT-BYTE SEGMENT 242)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 194)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
++                              (EMIT-SIZED-IMMEDIATE SEGMENT
++                                                    :BYTE
++                                                    (CDR
++                                                     (ASSOC COND
++                                                            '((:EQ . 0)
++                                                              (:E . 0) (:Z . 0)
++                                                              (:L . 1)
++                                                              (:NGE . 1)
++                                                              (:LE . 2)
++                                                              (:NG . 2)
++                                                              (:UNORD . 3)
++                                                              (:NE . 4)
++                                                              (:NZ . 4)
++                                                              (:NL . 5)
++                                                              (:GE . 5)
++                                                              (:NLE . 6)
++                                                              (:G . 6)
++                                                              (:ORD . 7)))))))
++
++(DEFINE-INSTRUCTION CMPSS
++                    (SEGMENT DST SRC COND)
++                    (:EMITTER (EMIT-BYTE SEGMENT 243)
++                              (EMIT-BYTE SEGMENT 15)
++                              (EMIT-BYTE SEGMENT 194)
++                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
++                              (EMIT-SIZED-IMMEDIATE SEGMENT
++                                                    :BYTE
++                                                    (CDR
++                                                     (ASSOC COND
++                                                            '((:EQ . 0)
++                                                              (:E . 0) (:Z . 0)
++                                                              (:L . 1)
++                                                              (:NGE . 1)
++                                                              (:LE . 2)
++                                                              (:NG . 2)
++                                                              (:UNORD . 3)
++                                                              (:NE . 4)
++                                                              (:NZ . 4)
++                                                              (:NL . 5)
++                                                              (:GE . 5)
++                                                              (:NLE . 6)
++                                                              (:G . 6)
++                                                              (:ORD . 7)))))))
++
++(DEFINE-INSTRUCTION MOVAPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER
++                     (COND
++                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102)
++                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 40)
++                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
++                      (T (EMIT-BYTE SEGMENT 102)
++                         (EMIT-BYTE SEGMENT 15)
++                         (EMIT-BYTE SEGMENT 41)
++                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
++
++(DEFINE-INSTRUCTION MOVAPS
++                    (SEGMENT DST SRC)
++                    (:EMITTER
++                     (COND
++                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 15)
++                       (EMIT-BYTE SEGMENT 40)
++                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
++                      (T (EMIT-BYTE SEGMENT 15)
++                         (EMIT-BYTE SEGMENT 41)
++                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
++
++(DEFINE-INSTRUCTION MOVD
++                    (SEGMENT DST SRC)
++                    (:EMITTER
++                     (COND
++                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102)
++                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 110)
++                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
++                      (T (EMIT-BYTE SEGMENT 102)
++                         (EMIT-BYTE SEGMENT 15)
++                         (EMIT-BYTE SEGMENT 126)
++                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
++
++(DEFINE-INSTRUCTION MOVDQA
++                    (SEGMENT DST SRC)
++                    (:EMITTER
++                     (COND
++                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102)
++                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 111)
++                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
++                      (T (EMIT-BYTE SEGMENT 102)
++                         (EMIT-BYTE SEGMENT 15)
++                         (EMIT-BYTE SEGMENT 127)
++                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
++
++(DEFINE-INSTRUCTION MOVDQU
++                    (SEGMENT DST SRC)
++                    (:EMITTER
++                     (COND
++                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 243)
++                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 111)
++                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
++                      (T (EMIT-BYTE SEGMENT 243)
++                         (EMIT-BYTE SEGMENT 15)
++                         (EMIT-BYTE SEGMENT 127)
++                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
++
++(DEFINE-INSTRUCTION MOVHPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER
++                     (COND
++                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102)
++                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 22)
++                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
++                      (T (EMIT-BYTE SEGMENT 102)
++                         (EMIT-BYTE SEGMENT 15)
++                         (EMIT-BYTE SEGMENT 23)
++                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
++
++(DEFINE-INSTRUCTION MOVHPS
++                    (SEGMENT DST SRC)
++                    (:EMITTER
++                     (COND
++                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 15)
++                       (EMIT-BYTE SEGMENT 22)
++                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
++                      (T (EMIT-BYTE SEGMENT 15)
++                         (EMIT-BYTE SEGMENT 23)
++                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
++
++(DEFINE-INSTRUCTION MOVLPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER
++                     (COND
++                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102)
++                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 18)
++                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
++                      (T (EMIT-BYTE SEGMENT 102)
++                         (EMIT-BYTE SEGMENT 15)
++                         (EMIT-BYTE SEGMENT 19)
++                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
++
++(DEFINE-INSTRUCTION MOVLPS
++                    (SEGMENT DST SRC)
++                    (:EMITTER
++                     (COND
++                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 15)
++                       (EMIT-BYTE SEGMENT 18)
++                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
++                      (T (EMIT-BYTE SEGMENT 15)
++                         (EMIT-BYTE SEGMENT 19)
++                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
++
++(DEFINE-INSTRUCTION MOVQ
++                    (SEGMENT DST SRC)
++                    (:EMITTER
++                     (COND
++                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 243)
++                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 126)
++                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
++                      (T (EMIT-BYTE SEGMENT 102)
++                         (EMIT-BYTE SEGMENT 15)
++                         (EMIT-BYTE SEGMENT 214)
++                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
++
++(DEFINE-INSTRUCTION MOVSD
++                    (SEGMENT DST SRC)
++                    (:EMITTER
++                     (COND
++                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 242)
++                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 16)
++                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
++                      (T (EMIT-BYTE SEGMENT 242)
++                         (EMIT-BYTE SEGMENT 15)
++                         (EMIT-BYTE SEGMENT 17)
++                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
++
++(DEFINE-INSTRUCTION MOVSS
++                    (SEGMENT DST SRC)
++                    (:EMITTER
++                     (COND
++                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 243)
++                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 16)
++                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
++                      (T (EMIT-BYTE SEGMENT 243)
++                         (EMIT-BYTE SEGMENT 15)
++                         (EMIT-BYTE SEGMENT 17)
++                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
++
++(DEFINE-INSTRUCTION MOVUPD
++                    (SEGMENT DST SRC)
++                    (:EMITTER
++                     (COND
++                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102)
++                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 16)
++                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
++                      (T (EMIT-BYTE SEGMENT 102)
++                         (EMIT-BYTE SEGMENT 15)
++                         (EMIT-BYTE SEGMENT 17)
++                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
++
++(DEFINE-INSTRUCTION MOVUPS
++                    (SEGMENT DST SRC)
++                    (:EMITTER
++                     (COND
++                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 15)
++                       (EMIT-BYTE SEGMENT 16)
++                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
++                      (T (EMIT-BYTE SEGMENT 15)
++                         (EMIT-BYTE SEGMENT 17)
++                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
 +
-+(DEFINE-INSTRUCTION MOVUPS (SEGMENT DST SRC)
-+  (:EMITTER
-+   (COND
-+     ((SSE-REGISTER-P DST) 
-+      (EMIT-BYTE SEGMENT 15)
-+      (EMIT-BYTE SEGMENT 16)
-+      (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
-+     (T (EMIT-BYTE SEGMENT 15)
-+      (EMIT-BYTE SEGMENT 17)
-+      (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
 +
 +
 +;;; CPUID
@@ -155,16 +1373,15 @@ diff -Naur src-093/compiler/x86/insts.lisp src/compiler/x86/insts.lisp
 +   (emit-byte segment #x0F)
 +   (emit-byte segment #xA2)))
 +
-+    
 +
 +
 +
  ;;;; fp instructions
  ;;;;
  ;;;; FIXME: This section said "added by jrd", which should end up in CREDITS.
-diff -Naur src-093/compiler/x86/vm.lisp src/compiler/x86/vm.lisp
---- src-093/compiler/x86/vm.lisp       2005-08-05 15:32:19.810183044 +0300
-+++ src/compiler/x86/vm.lisp   2005-08-05 15:38:26.784310770 +0300
+diff -x 'CVS*' -Naur src-093/compiler/x86/vm.lisp src/compiler/x86/vm.lisp
+--- src-093/compiler/x86/vm.lisp       2005-08-05 16:13:29.000000000 +0300
++++ src/compiler/x86/vm.lisp   2005-08-08 16:32:19.609588299 +0300
 @@ -21,7 +21,8 @@
    (defvar *byte-register-names* (make-array 8 :initial-element nil))
    (defvar *word-register-names* (make-array 16 :initial-element nil))
index da683b8..b64678c 100644 (file)
     (:byte 8)
     (:word 16)
     (:dword 32)
+    (:qword 64)
     (:dqword 128)
     (:float 32)
     (:double 64)))
                               (EMIT-BYTE SEGMENT 94)
                               (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
 
+(DEFINE-INSTRUCTION HADDPS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 124)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION HSUBPS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 125)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
 (DEFINE-INSTRUCTION MAXPS
                     (SEGMENT DST SRC)
                     (:EMITTER (EMIT-BYTE SEGMENT 15)
                               (EMIT-BYTE SEGMENT 92)
                               (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
 
+(DEFINE-INSTRUCTION UNPCKHPS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 21)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION UNPCKLPS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 20)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
 (DEFINE-INSTRUCTION XORPS
                     (SEGMENT DST SRC)
                     (:EMITTER (EMIT-BYTE SEGMENT 15)
                               (EMIT-BYTE SEGMENT 87)
                               (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
 
-;;; SSE MOVE
+(DEFINE-INSTRUCTION ADDPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 88)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION ADDSUBPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 208)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION ANDNPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 85)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION ANDPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 84)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION DIVPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 94)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION HADDPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 124)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION HSUBPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 125)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MAXPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 95)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MINPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 93)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MULPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 89)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION ORPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 86)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION SQRTPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 81)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION SUBPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 92)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION UNPCKHPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 21)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION UNPCKLPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 20)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION XORPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 87)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION ADDSD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 88)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION COMISD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 47)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION DIVSD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 94)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MAXSD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 95)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MINSD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 93)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MULSD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 89)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION SQRTSD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 81)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION SUBSD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 92)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION UCOMISD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 46)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION ADDSS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 88)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION COMISS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 47)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION DIVSS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 94)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MAXSS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 95)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MINSS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 93)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MULSS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 89)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION RCPSS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 83)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION RSQRTSS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 82)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION SQRTSS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 81)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION SUBSS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 92)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION UCOMISS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 46)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PACKSSDW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 107)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PACKSSWB
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 99)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PACKUSWB
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 103)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PADDB
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 252)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PADDD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 254)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PADDQ
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 212)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PADDSB
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 236)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PADDSW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 237)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PADDUSB
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 220)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PADDUSW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 221)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PADDW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 253)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PAND
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 219)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PANDN
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 223)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PAVGB
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 224)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PAVGW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 227)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PCMPEQB
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 116)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PCMPEQD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 118)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PCMPEQW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 117)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PCMPGTB
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 100)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PCMPGTD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 102)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PCMPGTW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 101)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PMADDWD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 245)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PMAXSW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 238)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PMAXUB
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 222)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PMINSW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 234)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PMINUB
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 218)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PMOVMSKB
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 215)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PMULHUW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 228)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PMULHW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 229)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PMULLW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 213)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PMULUDQ
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 244)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION POR
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 235)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PSADBW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 246)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PSSLD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 242)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PSLLQ
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 243)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PSLLW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 241)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PSRAD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 226)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PSRAW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 226)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PSRLD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 210)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PSRLQ
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 211)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PSRLW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 209)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PSUBB
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 248)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PSUBD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 250)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PSUBQ
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 251)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PSUBSB
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 232)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PSUBSW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 233)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PSUBUSB
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 216)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PSUBUSW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 217)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PSUBW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 249)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PUNPCKHBW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 104)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PUNPCKHDQ
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 106)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PUNPCKHQDQ
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 109)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PUNPCKHWD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 105)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PUNPCKLBW
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 96)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PUNPCKLDQ
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 98)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PUNPCKLQDQ
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 108)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PUNPCKLWD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 97)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PXOR
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 239)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTDQ2PD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 230)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTDQ2PS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 91)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTPD2DQ
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 230)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTPD2PI
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 45)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTPD2PS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 90)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTPI2PD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 42)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTPI2PS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 42)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTPS2DQ
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 91)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTPS2PD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 90)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTPS2PI
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 45)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTSD2SI
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 45)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTSD2SS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 90)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTSI2SD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 42)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTSI2SS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 42)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTSS2SD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 90)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTSS2SI
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 45)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTTPD2DQ
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 230)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTTPD2PI
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 44)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTTPS2DQ
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 91)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTTPS2PI
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 44)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTTSD2SI
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 44)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION CVTTSS2SI
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 44)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION LDDQU
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 240)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MASKMOVDQU
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 247)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MOVDDUP
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 18)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MOVHLPS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 18)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MOVLHPS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 22)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MOVMSKPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 80)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MOVMSKPS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 80)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MOVNTDQ
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 231)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MOVNTPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 43)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MOVNTPS
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 43)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MOVSHDUP
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 22)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION MOVSLDUP
+                    (SEGMENT DST SRC)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 18)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))))
+
+(DEFINE-INSTRUCTION PEXTRW
+                    (SEGMENT DST SRC BYTE)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 197)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
+                              (EMIT-SIZED-IMMEDIATE SEGMENT :BYTE BYTE)))
+
+(DEFINE-INSTRUCTION PINSRW
+                    (SEGMENT DST SRC BYTE)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 196)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
+                              (EMIT-SIZED-IMMEDIATE SEGMENT :BYTE BYTE)))
+
+(DEFINE-INSTRUCTION PSHUFD
+                    (SEGMENT DST SRC BYTE)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 112)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
+                              (EMIT-SIZED-IMMEDIATE SEGMENT :BYTE BYTE)))
+
+(DEFINE-INSTRUCTION PSHUFHW
+                    (SEGMENT DST SRC BYTE)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 112)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
+                              (EMIT-SIZED-IMMEDIATE SEGMENT :BYTE BYTE)))
+
+(DEFINE-INSTRUCTION PSHUFLW
+                    (SEGMENT DST SRC BYTE)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 112)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
+                              (EMIT-SIZED-IMMEDIATE SEGMENT :BYTE BYTE)))
+
+(DEFINE-INSTRUCTION SHUFPD
+                    (SEGMENT DST SRC BYTE)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 198)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
+                              (EMIT-SIZED-IMMEDIATE SEGMENT :BYTE BYTE)))
+
+(DEFINE-INSTRUCTION SHUFPS
+                    (SEGMENT DST SRC BYTE)
+                    (:EMITTER (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 198)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
+                              (EMIT-SIZED-IMMEDIATE SEGMENT :BYTE BYTE)))
+
+(DEFINE-INSTRUCTION CMPPD
+                    (SEGMENT DST SRC COND)
+                    (:EMITTER (EMIT-BYTE SEGMENT 102)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 194)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
+                              (EMIT-SIZED-IMMEDIATE SEGMENT
+                                                    :BYTE
+                                                    (CDR
+                                                     (ASSOC COND
+                                                            '((:EQ . 0)
+                                                              (:E . 0) (:Z . 0)
+                                                              (:L . 1)
+                                                              (:NGE . 1)
+                                                              (:LE . 2)
+                                                              (:NG . 2)
+                                                              (:UNORD . 3)
+                                                              (:NE . 4)
+                                                              (:NZ . 4)
+                                                              (:NL . 5)
+                                                              (:GE . 5)
+                                                              (:NLE . 6)
+                                                              (:G . 6)
+                                                              (:ORD . 7)))))))
+
+(DEFINE-INSTRUCTION CMPPS
+                    (SEGMENT DST SRC COND)
+                    (:EMITTER (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 194)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
+                              (EMIT-SIZED-IMMEDIATE SEGMENT
+                                                    :BYTE
+                                                    (CDR
+                                                     (ASSOC COND
+                                                            '((:EQ . 0)
+                                                              (:E . 0) (:Z . 0)
+                                                              (:L . 1)
+                                                              (:NGE . 1)
+                                                              (:LE . 2)
+                                                              (:NG . 2)
+                                                              (:UNORD . 3)
+                                                              (:NE . 4)
+                                                              (:NZ . 4)
+                                                              (:NL . 5)
+                                                              (:GE . 5)
+                                                              (:NLE . 6)
+                                                              (:G . 6)
+                                                              (:ORD . 7)))))))
+
+(DEFINE-INSTRUCTION CMPSD
+                    (SEGMENT DST SRC COND)
+                    (:EMITTER (EMIT-BYTE SEGMENT 242)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 194)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
+                              (EMIT-SIZED-IMMEDIATE SEGMENT
+                                                    :BYTE
+                                                    (CDR
+                                                     (ASSOC COND
+                                                            '((:EQ . 0)
+                                                              (:E . 0) (:Z . 0)
+                                                              (:L . 1)
+                                                              (:NGE . 1)
+                                                              (:LE . 2)
+                                                              (:NG . 2)
+                                                              (:UNORD . 3)
+                                                              (:NE . 4)
+                                                              (:NZ . 4)
+                                                              (:NL . 5)
+                                                              (:GE . 5)
+                                                              (:NLE . 6)
+                                                              (:G . 6)
+                                                              (:ORD . 7)))))))
+
+(DEFINE-INSTRUCTION CMPSS
+                    (SEGMENT DST SRC COND)
+                    (:EMITTER (EMIT-BYTE SEGMENT 243)
+                              (EMIT-BYTE SEGMENT 15)
+                              (EMIT-BYTE SEGMENT 194)
+                              (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))
+                              (EMIT-SIZED-IMMEDIATE SEGMENT
+                                                    :BYTE
+                                                    (CDR
+                                                     (ASSOC COND
+                                                            '((:EQ . 0)
+                                                              (:E . 0) (:Z . 0)
+                                                              (:L . 1)
+                                                              (:NGE . 1)
+                                                              (:LE . 2)
+                                                              (:NG . 2)
+                                                              (:UNORD . 3)
+                                                              (:NE . 4)
+                                                              (:NZ . 4)
+                                                              (:NL . 5)
+                                                              (:GE . 5)
+                                                              (:NLE . 6)
+                                                              (:G . 6)
+                                                              (:ORD . 7)))))))
+
+(DEFINE-INSTRUCTION MOVAPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER
+                     (COND
+                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102)
+                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 40)
+                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
+                      (T (EMIT-BYTE SEGMENT 102)
+                         (EMIT-BYTE SEGMENT 15)
+                         (EMIT-BYTE SEGMENT 41)
+                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
+
+(DEFINE-INSTRUCTION MOVAPS
+                    (SEGMENT DST SRC)
+                    (:EMITTER
+                     (COND
+                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 15)
+                       (EMIT-BYTE SEGMENT 40)
+                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
+                      (T (EMIT-BYTE SEGMENT 15)
+                         (EMIT-BYTE SEGMENT 41)
+                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
+
+(DEFINE-INSTRUCTION MOVD
+                    (SEGMENT DST SRC)
+                    (:EMITTER
+                     (COND
+                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102)
+                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 110)
+                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
+                      (T (EMIT-BYTE SEGMENT 102)
+                         (EMIT-BYTE SEGMENT 15)
+                         (EMIT-BYTE SEGMENT 126)
+                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
+
+(DEFINE-INSTRUCTION MOVDQA
+                    (SEGMENT DST SRC)
+                    (:EMITTER
+                     (COND
+                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102)
+                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 111)
+                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
+                      (T (EMIT-BYTE SEGMENT 102)
+                         (EMIT-BYTE SEGMENT 15)
+                         (EMIT-BYTE SEGMENT 127)
+                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
+
+(DEFINE-INSTRUCTION MOVDQU
+                    (SEGMENT DST SRC)
+                    (:EMITTER
+                     (COND
+                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 243)
+                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 111)
+                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
+                      (T (EMIT-BYTE SEGMENT 243)
+                         (EMIT-BYTE SEGMENT 15)
+                         (EMIT-BYTE SEGMENT 127)
+                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
+
+(DEFINE-INSTRUCTION MOVHPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER
+                     (COND
+                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102)
+                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 22)
+                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
+                      (T (EMIT-BYTE SEGMENT 102)
+                         (EMIT-BYTE SEGMENT 15)
+                         (EMIT-BYTE SEGMENT 23)
+                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
+
+(DEFINE-INSTRUCTION MOVHPS
+                    (SEGMENT DST SRC)
+                    (:EMITTER
+                     (COND
+                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 15)
+                       (EMIT-BYTE SEGMENT 22)
+                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
+                      (T (EMIT-BYTE SEGMENT 15)
+                         (EMIT-BYTE SEGMENT 23)
+                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
+
+(DEFINE-INSTRUCTION MOVLPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER
+                     (COND
+                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102)
+                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 18)
+                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
+                      (T (EMIT-BYTE SEGMENT 102)
+                         (EMIT-BYTE SEGMENT 15)
+                         (EMIT-BYTE SEGMENT 19)
+                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
+
+(DEFINE-INSTRUCTION MOVLPS
+                    (SEGMENT DST SRC)
+                    (:EMITTER
+                     (COND
+                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 15)
+                       (EMIT-BYTE SEGMENT 18)
+                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
+                      (T (EMIT-BYTE SEGMENT 15)
+                         (EMIT-BYTE SEGMENT 19)
+                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
+
+(DEFINE-INSTRUCTION MOVQ
+                    (SEGMENT DST SRC)
+                    (:EMITTER
+                     (COND
+                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 243)
+                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 126)
+                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
+                      (T (EMIT-BYTE SEGMENT 102)
+                         (EMIT-BYTE SEGMENT 15)
+                         (EMIT-BYTE SEGMENT 214)
+                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
+
+(DEFINE-INSTRUCTION MOVSD
+                    (SEGMENT DST SRC)
+                    (:EMITTER
+                     (COND
+                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 242)
+                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 16)
+                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
+                      (T (EMIT-BYTE SEGMENT 242)
+                         (EMIT-BYTE SEGMENT 15)
+                         (EMIT-BYTE SEGMENT 17)
+                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
+
+(DEFINE-INSTRUCTION MOVSS
+                    (SEGMENT DST SRC)
+                    (:EMITTER
+                     (COND
+                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 243)
+                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 16)
+                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
+                      (T (EMIT-BYTE SEGMENT 243)
+                         (EMIT-BYTE SEGMENT 15)
+                         (EMIT-BYTE SEGMENT 17)
+                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
+
+(DEFINE-INSTRUCTION MOVUPD
+                    (SEGMENT DST SRC)
+                    (:EMITTER
+                     (COND
+                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102)
+                       (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 16)
+                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
+                      (T (EMIT-BYTE SEGMENT 102)
+                         (EMIT-BYTE SEGMENT 15)
+                         (EMIT-BYTE SEGMENT 17)
+                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
+
+(DEFINE-INSTRUCTION MOVUPS
+                    (SEGMENT DST SRC)
+                    (:EMITTER
+                     (COND
+                      ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 15)
+                       (EMIT-BYTE SEGMENT 16)
+                       (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
+                      (T (EMIT-BYTE SEGMENT 15)
+                         (EMIT-BYTE SEGMENT 17)
+                         (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
 
-(DEFINE-INSTRUCTION MOVUPS (SEGMENT DST SRC)
-  (:EMITTER
-   (COND
-     ((SSE-REGISTER-P DST) 
-      (EMIT-BYTE SEGMENT 15)
-      (EMIT-BYTE SEGMENT 16)
-      (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST)))
-     (T (EMIT-BYTE SEGMENT 15)
-       (EMIT-BYTE SEGMENT 17)
-       (EMIT-EA SEGMENT DST (REG-TN-ENCODING SRC))))))
 
 
 ;;; CPUID
    (emit-byte segment #x0F)
    (emit-byte segment #xA2)))
 
-    
 
 
 
dissimilarity index 93%
index bb1e880..07550d0 100644 (file)
-(in-package :sb-vm)
-
-(defmacro vect-ea (vect idx)
-  `(make-ea :dword :base ,vect :index ,idx
-    :disp (- (* vector-data-offset n-word-bytes) other-pointer-lowtag)))
-
-
-(define-vop (%sse-add/simple-array-single-float-1)
-    (:policy :fast-safe)
-  
-  (:args (result :scs (descriptor-reg))
-        (vect1 :scs (descriptor-reg))
-        (vect2 :scs (descriptor-reg))
-        (index :scs (unsigned-reg)))
-
-  (:arg-types simple-array-single-float simple-array-single-float simple-array-single-float fixnum)
-
-  (:temporary (:sc sse-reg) sse-temp1)
-  (:temporary (:sc sse-reg) sse-temp2)
-
-  (:generator 10
-
-             ;; scale index by 4 (size-of single-float)
-             (inst shl index 2)
-
-             ;; load
-             (inst movups sse-temp1 (vect-ea vect1 index))
-             (inst movups sse-temp2 (vect-ea vect2 index))
-
-             ;; operate
-             (inst addps sse-temp1 sse-temp2)
-
-             ;; store
-             (inst movups (vect-ea result index) sse-temp1)
-             ))
-
-(define-vop (%sse-sub/simple-array-single-float-1)
-    (:policy :fast-safe)
-  
-  (:args (result :scs (descriptor-reg))
-        (vect1 :scs (descriptor-reg))
-        (vect2 :scs (descriptor-reg))
-        (index :scs (unsigned-reg)))
-
-  (:arg-types simple-array-single-float simple-array-single-float simple-array-single-float fixnum)
-
-  (:temporary (:sc sse-reg) sse-temp1)
-  (:temporary (:sc sse-reg) sse-temp2)
-
-  (:generator 10
-
-             ;; scale index by 4 (size-of single-float)
-             (inst shl index 2)
-
-             ;; load
-             (inst movups sse-temp1 (vect-ea vect1 index))
-             (inst movups sse-temp2 (vect-ea vect2 index))
-
-             ;; operate
-             (inst subps sse-temp1 sse-temp2)
-
-             ;; store
-             (inst movups (vect-ea result index) sse-temp1)
-             ))
-
-(define-vop (%sse-mul/simple-array-single-float-1)
-    (:policy :fast-safe)
-  
-  (:args (result :scs (descriptor-reg))
-        (vect1 :scs (descriptor-reg))
-        (vect2 :scs (descriptor-reg))
-        (index :scs (unsigned-reg)))
-
-  (:arg-types simple-array-single-float simple-array-single-float simple-array-single-float fixnum)
-
-  (:temporary (:sc sse-reg) sse-temp1)
-  (:temporary (:sc sse-reg) sse-temp2)
-
-  (:generator 10
-
-             ;; scale index by 4 (size-of single-float)
-             (inst shl index 2)
-
-             ;; load
-             (inst movups sse-temp1 (vect-ea vect1 index))
-             (inst movups sse-temp2 (vect-ea vect2 index))
-
-             ;; operate
-             (inst mulps sse-temp1 sse-temp2)
-
-             ;; store
-             (inst movups (vect-ea result index) sse-temp1)
-             ))
-
-(define-vop (%sse-div/simple-array-single-float-1)
-    (:policy :fast-safe)
-  
-  (:args (result :scs (descriptor-reg))
-        (vect1 :scs (descriptor-reg))
-        (vect2 :scs (descriptor-reg))
-        (index :scs (unsigned-reg)))
-
-  (:arg-types simple-array-single-float simple-array-single-float simple-array-single-float fixnum)
-
-  (:temporary (:sc sse-reg) sse-temp1)
-  (:temporary (:sc sse-reg) sse-temp2)
-
-  (:generator 10
-
-             ;; scale index by 4 (size-of single-float)
-             (inst shl index 2)
-
-             ;; load
-             (inst movups sse-temp1 (vect-ea vect1 index))
-             (inst movups sse-temp2 (vect-ea vect2 index))
-
-             ;; operate
-             (inst divps sse-temp1 sse-temp2)
-
-             ;; store
-             (inst movups (vect-ea result index) sse-temp1)
-             ))
-
-(define-vop (%sse-sqrt/simple-array-single-float-1)
-    (:policy :fast-safe)
-  
-  (:args (result :scs (descriptor-reg))
-        (vect1 :scs (descriptor-reg))
-        (index :scs (unsigned-reg)))
-
-  (:arg-types simple-array-single-float simple-array-single-float fixnum)
-
-  (:temporary (:sc sse-reg) sse-temp1)
-  (:temporary (:sc sse-reg) sse-temp2)
-
-  (:generator 10
-
-             ;; scale index by 4 (size-of single-float)
-             (inst shl index 2)
-
-             ;; load
-             (inst movups sse-temp1 (vect-ea vect1 index))
-
-             ;; operate
-             (inst sqrtps sse-temp2 sse-temp1)
-
-             ;; store
-             (inst movups (vect-ea result index) sse-temp2)
-             ))
-
-
-(define-vop (%sse-recip/simple-array-single-float-1)
-    (:policy :fast-safe)
-  
-  (:args (result :scs (descriptor-reg))
-        (vect1 :scs (descriptor-reg))
-        (index :scs (unsigned-reg)))
-
-  (:arg-types simple-array-single-float simple-array-single-float fixnum)
-
-  (:temporary (:sc sse-reg) sse-temp1)
-  (:temporary (:sc sse-reg) sse-temp2)
-
-  (:generator 10
-
-             ;; scale index by 4 (size-of single-float)
-             (inst shl index 2)
-
-             ;; load
-             (inst movups sse-temp1 (vect-ea vect1 index))
-
-             ;; operate
-             (inst rcpps sse-temp2 sse-temp1)
-
-             ;; store
-             (inst movups (vect-ea result index) sse-temp2)
-             ))
-
-
-(define-vop (%sse-recip-sqrt/simple-array-single-float-1)
-    (:policy :fast-safe)
-  
-  (:args (result :scs (descriptor-reg))
-        (vect1 :scs (descriptor-reg))
-        (index :scs (unsigned-reg)))
-
-  (:arg-types simple-array-single-float simple-array-single-float fixnum)
-
-  (:temporary (:sc sse-reg) sse-temp1)
-  (:temporary (:sc sse-reg) sse-temp2)
-
-  (:generator 10
-
-             ;; scale index by 4 (size-of single-float)
-             (inst shl index 2)
-
-             ;; load
-             (inst movups sse-temp1 (vect-ea vect1 index))
-
-             ;; operate
-             (inst rsqrtps sse-temp2 sse-temp1)
-
-             ;; store
-             (inst movups (vect-ea result index) sse-temp2)
-             ))
-
-
+(in-package :sb-vm)
+
+(defmacro vect-ea (vect idx)
+  `(make-ea :dword :base ,vect :index ,idx
+    :disp (- (* vector-data-offset n-word-bytes) other-pointer-lowtag)))
+
+;; TWO-ARG SSE VOPs
+(loop for (op-name type mov-inst op-inst) in
+      '(
+       (add    single-float movups addps)
+       (addsub single-float movups addsubps)
+       (andnot single-float movups andnps)
+       (and    single-float movups andps)
+       (div    single-float movups divps)
+       (hadd   single-float movups haddps)
+       (hsub   single-float movups hsubps)
+       (max    single-float movups maxps)
+       (min    single-float movups minps)
+       (mul    single-float movups mulps)
+       (or     single-float movups orps)
+       (sub    single-float movups subps)
+       (xor    single-float movups xorps)
+
+       (add    double-float movupd addpd)
+       (addsub double-float movupd addsubpd)
+       (andnot double-float movupd andnpd)
+       (and    double-float movupd andpd)
+       (div    double-float movupd divpd)
+       (hadd   double-float movupd haddpd)
+       (hsub   double-float movupd hsubpd)
+       (max    double-float movupd maxpd)
+       (min    double-float movupd minpd)
+       (mul    double-float movupd mulpd)
+       (or     double-float movupd orpd)
+       (sub    double-float movupd subpd)
+       (xor    double-float movupd xorpd)
+       )
+      do
+      
+      `(define-vop (,(intern (format nil "%SSE-~A/SIMPLE-ARRAY-~A-1" op-name type)))
+       (:policy :fast-safe)
+
+       ;;(:guard (member :sse2 *backend-subfeatures*))
+
+       (:args 
+        (result :scs (descriptor-reg))
+        (vect1 :scs (descriptor-reg))
+        (vect2 :scs (descriptor-reg))
+        (index :scs (unsigned-reg)))
+
+       (:arg-types 
+        ,(intern (format nil "SIMPLE-ARRAY-~A" type))
+        ,(intern (format nil "SIMPLE-ARRAY-~A" type))
+        ,(intern (format nil "SIMPLE-ARRAY-~A" type))
+        fixnum)
+
+       (:temporary (:sc sse-reg) sse-temp1)
+       (:temporary (:sc sse-reg) sse-temp2)
+
+       (:generator 10
+
+        ;; scale index by 4 (size-of single-float)
+        (inst shl index 2)
+
+        ;; load
+        (inst ,mov-inst sse-temp1 (vect-ea vect1 index))
+        (inst ,mov-inst sse-temp2 (vect-ea vect2 index))
+
+        ;; operate
+        (inst ,op-inst sse-temp1 sse-temp2)
+
+        ;; store
+        (inst ,mov-inst (vect-ea result index) sse-temp1)
+        )))
+
+;; SINGLE-ARG SSE VOPs
+(loop for (op-name type mov-inst op-inst) in
+      '(
+       (recip  single-float movups rcpps)
+       (rsqrt  single-float movups rsqrtps)
+       (sqrt   single-float movups sqrtps)
+       (sqrt   double-float movupd sqrtpd)
+       )
+      do
+      
+      `(define-vop (,(intern (format nil "%SSE-~A/SIMPLE-ARRAY-~A-1" op-name type)))
+       (:policy :fast-safe)
+
+       ;;(:guard (member :sse2 *backend-subfeatures*))
+
+       (:args 
+        (result :scs (descriptor-reg))
+        (vect1 :scs (descriptor-reg))
+        (index :scs (unsigned-reg)))
+
+       (:arg-types 
+        ,(intern (format nil "SIMPLE-ARRAY-~A" type))
+        ,(intern (format nil "SIMPLE-ARRAY-~A" type))
+        fixnum)
+
+       (:temporary (:sc sse-reg) sse-temp1)
+
+       (:generator 10
+
+        ;; scale index by 4 (size-of single-float)
+        (inst shl index 2)
+
+        ;; load
+        (inst ,mov-inst sse-temp1 (vect-ea vect1 index))
+
+        ;; operate
+        (inst ,op-inst sse-temp1)
+
+        ;; store
+        (inst ,mov-inst (vect-ea result index) sse-temp1)
+        )))