From 161504ba194baaa3f8f9b54d470843783cd9a9bf Mon Sep 17 00:00:00 2001 From: rlaakso Date: Mon, 8 Aug 2005 13:33:23 +0000 Subject: [PATCH] .. --- generate-sse-instructions.lisp | 110 ++- sbcl-src/makepatch.sh | 2 +- sbcl-src/patch_against_sbcl_0_9_3 | 1263 +++++++++++++++++++++++++++++++++- sbcl-src/src/compiler/x86/insts.lisp | 1241 ++++++++++++++++++++++++++++++++- sse-vop.lisp | 323 ++++----- 5 files changed, 2658 insertions(+), 281 deletions(-) rewrite sse-vop.lisp (93%) diff --git a/generate-sse-instructions.lisp b/generate-sse-instructions.lisp index e3254cf..7619416 100644 --- a/generate-sse-instructions.lisp +++ b/generate-sse-instructions.lisp @@ -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)) diff --git a/sbcl-src/makepatch.sh b/sbcl-src/makepatch.sh index 641b804..1927890 100755 --- a/sbcl-src/makepatch.sh +++ b/sbcl-src/makepatch.sh @@ -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 diff --git a/sbcl-src/patch_against_sbcl_0_9_3 b/sbcl-src/patch_against_sbcl_0_9_3 index 234ef9d..9a04742 100644 --- a/sbcl-src/patch_against_sbcl_0_9_3 +++ b/sbcl-src/patch_against_sbcl_0_9_3 @@ -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))) @@ -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)) diff --git a/sbcl-src/src/compiler/x86/insts.lisp b/sbcl-src/src/compiler/x86/insts.lisp index da683b8..b64678c 100644 --- a/sbcl-src/src/compiler/x86/insts.lisp +++ b/sbcl-src/src/compiler/x86/insts.lisp @@ -192,6 +192,7 @@ (:byte 8) (:word 16) (:dword 32) + (:qword 64) (:dqword 128) (:float 32) (:double 64))) @@ -2086,6 +2087,20 @@ (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) @@ -2134,24 +2149,1227 @@ (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 @@ -2162,7 +3380,6 @@ (emit-byte segment #x0F) (emit-byte segment #xA2))) - diff --git a/sse-vop.lisp b/sse-vop.lisp dissimilarity index 93% index bb1e880..07550d0 100644 --- a/sse-vop.lisp +++ b/sse-vop.lisp @@ -1,207 +1,116 @@ -(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) + ))) -- 2.11.4.GIT