sb-simd-cvs
Threads by month
- ----- 2025 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
August 2005
- 1 participants
- 23 discussions

[sb-simd-cvs] CVS update: sb-simd/generate-sse-vops.lisp sb-simd/example-test.lisp
by rlaakso@common-lisp.net 08 Aug '05
by rlaakso@common-lisp.net 08 Aug '05
08 Aug '05
Update of /project/sb-simd/cvsroot/sb-simd
In directory common-lisp.net:/tmp/cvs-serv14620
Modified Files:
generate-sse-vops.lisp example-test.lisp
Log Message:
..
Date: Mon Aug 8 19:26:08 2005
Author: rlaakso
Index: sb-simd/generate-sse-vops.lisp
diff -u sb-simd/generate-sse-vops.lisp:1.2 sb-simd/generate-sse-vops.lisp:1.3
--- sb-simd/generate-sse-vops.lisp:1.2 Mon Aug 8 18:23:22 2005
+++ sb-simd/generate-sse-vops.lisp Mon Aug 8 19:26:08 2005
@@ -25,8 +25,8 @@
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|#
-(defun vect-ea (vect idx)
- `(make-ea :dword :base ,vect :index ,idx
+(defun vect-ea (vect &optional (idx nil))
+ `(make-ea :dword :base ,vect ,@(if idx `(:index ,idx))
:disp (- (* vector-data-offset n-word-bytes) other-pointer-lowtag)))
(defun gen-vops-to-file (filename)
@@ -43,32 +43,32 @@
;; single float
(add single-float movups addps 4)
(addsub single-float movups addsubps 4)
- (andnot single-float movups andnps 4)
- (and single-float movups andps 4)
+;; (andnot single-float movups andnps 4)
+;; (and single-float movups andps 4)
(div single-float movups divps 4)
(hadd single-float movups haddps 4)
(hsub single-float movups hsubps 4)
(max single-float movups maxps 4)
(min single-float movups minps 4)
(mul single-float movups mulps 4)
- (or single-float movups orps 4)
+;; (or single-float movups orps 4)
(sub single-float movups subps 4)
- (xor single-float movups xorps 4)
+;; (xor single-float movups xorps 4)
;; double float
(add double-float movupd addpd 8)
(addsub double-float movupd addsubpd 8)
- (andnot double-float movupd andnpd 8)
- (and double-float movupd andpd 8)
+;; (andnot double-float movupd andnpd 8)
+;; (and double-float movupd andpd 8)
(div double-float movupd divpd 8)
(hadd double-float movupd haddpd 8)
(hsub double-float movupd hsubpd 8)
(max double-float movupd maxpd 8)
(min double-float movupd minpd 8)
(mul double-float movupd mulpd 8)
- (or double-float movupd orpd 8)
+;; (or double-float movupd orpd 8)
(sub double-float movupd subpd 8)
- (xor double-float movupd xorpd 8)
+;; (xor double-float movupd xorpd 8)
;; unsigned byte 8
(add unsigned-byte-8 movdqu paddb 1)
@@ -150,6 +150,61 @@
;; store
(inst ,mov-inst ,(vect-ea 'result 'index) sse-temp1)
))))
+
+ ;; TWO-ARG SSE VOPs w/ DIFFERENT ARG TYPES
+ (loop for (op-name type1 type2 mov-inst1 mov-inst2 op-inst elem-width) in
+ '(
+ (andnot single-float unsigned-byte-8 movups movdqu andnps 4)
+ (and single-float unsigned-byte-8 movups movdqu andps 4)
+ (or single-float unsigned-byte-8 movups movdqu orps 4)
+ (xor single-float unsigned-byte-8 movups movdqu xorps 4)
+
+ (andnot double-float unsigned-byte-8 movupd movdqu andnpd 4)
+ (and double-float unsigned-byte-8 movupd movdqu andpd 4)
+ (or double-float unsigned-byte-8 movupd movdqu orpd 4)
+ (xor double-float unsigned-byte-8 movupd movdqu xorpd 4)
+ )
+ do
+ (format stream "~S~%~%"
+ `(define-vop (,(intern (let ((name (format nil "%SSE-~A/SIMPLE-ARRAY-~A/SIMPLE-ARRAY-~A-1" op-name type1 type2)))
+ (format t "; defining VOP ~A..~%" name)
+ name)))
+
+ (: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" type2))
+ ,(intern (format nil "SIMPLE-ARRAY-~A" type1))
+ ,(intern (format nil "SIMPLE-ARRAY-~A" type2))
+ 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 ,(floor (log elem-width 2)))
+
+ ;; load
+ (inst ,mov-inst1 sse-temp1 ,(vect-ea 'vect1 'index))
+ (inst ,mov-inst2 sse-temp2 ,(vect-ea 'vect2))
+
+ ;; operate
+ (inst ,op-inst sse-temp1 sse-temp2)
+
+ ;; store
+ (inst ,mov-inst2 ,(vect-ea 'result 'index) sse-temp1)
+ ))))
+
;; SINGLE-ARG SSE VOPs
(loop for (op-name type mov-inst op-inst elem-width) in
Index: sb-simd/example-test.lisp
diff -u sb-simd/example-test.lisp:1.2 sb-simd/example-test.lisp:1.3
--- sb-simd/example-test.lisp:1.2 Mon Aug 8 17:56:01 2005
+++ sb-simd/example-test.lisp Mon Aug 8 19:26:08 2005
@@ -39,3 +39,55 @@
(format t "After: ~S~%~S~%" arr1 arr2)
))
+
+(defparameter +sse-highbit-single-float-mask+ (make-array 16 :element-type '(unsigned-byte 8)
+ :initial-contents '(0 0 0 128
+ 0 0 0 128
+ 0 0 0 128
+ 0 0 0 128)))
+(defparameter +sse-lowbits-single-float-mask+ (make-array 16 :element-type '(unsigned-byte 8)
+ :initial-contents '(255 255 255 127
+ 255 255 255 127
+ 255 255 255 127
+ 255 255 255 127)))
+
+(defun sign (float-array)
+ (let ((res (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0)))
+
+ (sb-sys:%primitive sb-vm::%SSE-AND/SIMPLE-ARRAY-SINGLE-FLOAT/SIMPLE-ARRAY-UNSIGNED-BYTE-8-1
+ res
+ float-array
+ +sse-highbit-single-float-mask+
+ 0)
+ (values-list (mapcar #'(lambda (x) (/= x 0)) (list (aref res 3) (aref res 7) (aref res 11) (aref res 15))))))
+
+(defun %neg (float-array)
+ (let ((res (make-array 4 :element-type 'single-float :initial-element 0f0)))
+
+ (sb-sys:%primitive sb-vm::%SSE-XOR/SIMPLE-ARRAY-SINGLE-FLOAT/SIMPLE-ARRAY-UNSIGNED-BYTE-8-1
+ res
+ float-array
+ +sse-highbit-single-float-mask+
+ 0)
+ res))
+
+(defun %abs (float-array)
+ (let ((res (make-array 4 :element-type 'single-float :initial-element 0f0)))
+
+ (sb-sys:%primitive sb-vm::%SSE-AND/SIMPLE-ARRAY-SINGLE-FLOAT/SIMPLE-ARRAY-UNSIGNED-BYTE-8-1
+ res
+ float-array
+ +sse-lowbits-single-float-mask+
+ 0)
+ res))
+
+(defun test-sign ()
+ (let ((arr1 (make-array 10 :element-type 'single-float :initial-element 0f0)))
+ (loop for i from 0 below 10 do (setf (aref arr1 i)
+ (float (* (expt -1 i) (- (* (1+ i) 10) (* 2 i i))))))
+ (format t "array: ~S~%" arr1)
+ (multiple-value-bind (s1 s2 s3 s4) (sign arr1)
+ (format t "sign0->3: ~A ~A ~A ~A~%" s1 s2 s3 s4))
+ (format t "neg: ~S~%" (%neg arr1))
+ (format t "abs: ~S~%" (%abs arr1))
+ t))
\ No newline at end of file
1
0

[sb-simd-cvs] CVS update: sb-simd/scratch/sse2.lisp sb-simd/scratch/sse.lisp sb-simd/scratch/foo.lisp sb-simd/scratch/asm-t1.asm sb-simd/scratch/README sb-simd/scratch/.emacs.desktop
by rlaakso@common-lisp.net 08 Aug '05
by rlaakso@common-lisp.net 08 Aug '05
08 Aug '05
Update of /project/sb-simd/cvsroot/sb-simd/scratch
In directory common-lisp.net:/tmp/cvs-serv10469/scratch
Removed Files:
sse2.lisp sse.lisp foo.lisp asm-t1.asm README .emacs.desktop
Log Message:
..
Date: Mon Aug 8 18:23:48 2005
Author: rlaakso
1
0

[sb-simd-cvs] CVS update: sb-simd/generate-sse-vops.lisp sb-simd/generate-sse-instructions.lisp sb-simd/cpuid.lisp sb-simd/cpuid-vop.lisp
by rlaakso@common-lisp.net 08 Aug '05
by rlaakso@common-lisp.net 08 Aug '05
08 Aug '05
Update of /project/sb-simd/cvsroot/sb-simd
In directory common-lisp.net:/tmp/cvs-serv10430
Modified Files:
generate-sse-vops.lisp generate-sse-instructions.lisp
cpuid.lisp cpuid-vop.lisp
Log Message:
..
Date: Mon Aug 8 18:23:22 2005
Author: rlaakso
Index: sb-simd/generate-sse-vops.lisp
diff -u sb-simd/generate-sse-vops.lisp:1.1 sb-simd/generate-sse-vops.lisp:1.2
--- sb-simd/generate-sse-vops.lisp:1.1 Mon Aug 8 17:56:01 2005
+++ sb-simd/generate-sse-vops.lisp Mon Aug 8 18:23:22 2005
@@ -1,3 +1,30 @@
+#|
+Copyright (c) 2005 Risto Laakso
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|#
+
(defun vect-ea (vect idx)
`(make-ea :dword :base ,vect :index ,idx
:disp (- (* vector-data-offset n-word-bytes) other-pointer-lowtag)))
Index: sb-simd/generate-sse-instructions.lisp
diff -u sb-simd/generate-sse-instructions.lisp:1.4 sb-simd/generate-sse-instructions.lisp:1.5
--- sb-simd/generate-sse-instructions.lisp:1.4 Mon Aug 8 15:33:29 2005
+++ sb-simd/generate-sse-instructions.lisp Mon Aug 8 18:23:22 2005
@@ -1,4 +1,30 @@
#|
+Copyright (c) 2005 Risto Laakso
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|#
+#|
instruction reference:
Index: sb-simd/cpuid.lisp
diff -u sb-simd/cpuid.lisp:1.1.1.1 sb-simd/cpuid.lisp:1.2
--- sb-simd/cpuid.lisp:1.1.1.1 Fri Aug 5 15:13:29 2005
+++ sb-simd/cpuid.lisp Mon Aug 8 18:23:22 2005
@@ -1,3 +1,29 @@
+#|
+Copyright (c) 2005 Risto Laakso
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|#
(defpackage :cpuid (:use :cl))
(in-package :cpuid)
Index: sb-simd/cpuid-vop.lisp
diff -u sb-simd/cpuid-vop.lisp:1.1.1.1 sb-simd/cpuid-vop.lisp:1.2
--- sb-simd/cpuid-vop.lisp:1.1.1.1 Fri Aug 5 15:13:29 2005
+++ sb-simd/cpuid-vop.lisp Mon Aug 8 18:23:22 2005
@@ -1,3 +1,29 @@
+#|
+Copyright (c) 2005 Risto Laakso
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+|#
(in-package :sb-c)
(ignore-errors (defknown cl-user::%read-cpu (unsigned-byte-32 simple-array-unsigned-byte-16) nil))
1
0

[sb-simd-cvs] CVS update: sb-simd/load.lisp sb-simd/generate-sse-vops.lisp sb-simd/example-test.lisp sb-simd/.cvsignore sb-simd/sse-vop.lisp
by rlaakso@common-lisp.net 08 Aug '05
by rlaakso@common-lisp.net 08 Aug '05
08 Aug '05
Update of /project/sb-simd/cvsroot/sb-simd
In directory common-lisp.net:/tmp/cvs-serv8012
Modified Files:
example-test.lisp .cvsignore
Added Files:
load.lisp generate-sse-vops.lisp
Removed Files:
sse-vop.lisp
Log Message:
..
Date: Mon Aug 8 17:56:01 2005
Author: rlaakso
Index: sb-simd/example-test.lisp
diff -u sb-simd/example-test.lisp:1.1.1.1 sb-simd/example-test.lisp:1.2
--- sb-simd/example-test.lisp:1.1.1.1 Fri Aug 5 15:13:29 2005
+++ sb-simd/example-test.lisp Mon Aug 8 17:56:01 2005
@@ -10,14 +10,32 @@
(aref arr2 i) (float i)))
(format t "Before: ~S~%~S~%" arr1 arr2)
+ (format t "b <- a + b, idx 0~%")
- (sb-sys:%primitive sb-vm::%sse-sqrt/simple-array-single-float-1 arr2 arr1 4)
+ (sb-sys:%primitive sb-vm::%sse-add/simple-array-single-float-1 arr2 arr2 arr1 0)
(format t "After: ~S~%~S~%" arr1 arr2)
- (sb-sys:%primitive sb-vm::%sse-recip/simple-array-single-float-1 arr1 arr2 4)
+ (format t "a <- sqrt(b), idx 4~%")
+
+ (sb-sys:%primitive sb-vm::%sse-sqrt/simple-array-single-float-1 arr1 arr2 4)
(format t "After: ~S~%~S~%" arr1 arr2)
))
+(defun test-2 ()
+ (let ((arr1 (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0))
+ (arr2 (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0)))
+
+ (loop for i from 0 below 16 do (setf (aref arr1 i) (* (1+ i) 10)
+ (aref arr2 i) (1+ i)))
+
+ (format t "Before: ~S~%~S~%" arr1 arr2)
+ (format t "b <- a+b, idx 4~%")
+
+ (sb-sys:%primitive sb-vm::%sse-add/simple-array-unsigned-byte-8-1 arr2 arr1 arr2 4)
+
+ (format t "After: ~S~%~S~%" arr1 arr2)
+
+ ))
Index: sb-simd/.cvsignore
diff -u sb-simd/.cvsignore:1.2 sb-simd/.cvsignore:1.3
--- sb-simd/.cvsignore:1.2 Mon Aug 8 12:35:37 2005
+++ sb-simd/.cvsignore Mon Aug 8 17:56:01 2005
@@ -1,3 +1,4 @@
.emacs.desktop
*.fasl
sse-insts.lisp
+sse-vops.lisp
1
0

[sb-simd-cvs] CVS update: sb-simd/sse-vop.lisp sb-simd/generate-sse-instructions.lisp
by rlaakso@common-lisp.net 08 Aug '05
by rlaakso@common-lisp.net 08 Aug '05
08 Aug '05
Update of /project/sb-simd/cvsroot/sb-simd
In directory common-lisp.net:/tmp/cvs-serv31523
Modified Files:
sse-vop.lisp generate-sse-instructions.lisp
Log Message:
..
Date: Mon Aug 8 15:33:29 2005
Author: rlaakso
Index: sb-simd/sse-vop.lisp
diff -u sb-simd/sse-vop.lisp:1.1.1.1 sb-simd/sse-vop.lisp:1.2
--- sb-simd/sse-vop.lisp:1.1.1.1 Fri Aug 5 15:13:29 2005
+++ sb-simd/sse-vop.lisp Mon Aug 8 15:33:29 2005
@@ -4,204 +4,113 @@
`(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)
-(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)
+ ;;(:guard (member :sse2 *backend-subfeatures*))
- (: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))
+ (: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
+ ,(intern (format nil "SIMPLE-ARRAY-~A" type))
+ ,(intern (format nil "SIMPLE-ARRAY-~A" type))
+ ,(intern (format nil "SIMPLE-ARRAY-~A" type))
+ fixnum)
- (:arg-types simple-array-single-float simple-array-single-float fixnum)
+ (:temporary (:sc sse-reg) sse-temp1)
+ (:temporary (:sc sse-reg) sse-temp2)
- (:temporary (:sc sse-reg) sse-temp1)
- (:temporary (:sc sse-reg) sse-temp2)
+ (:generator 10
- (:generator 10
+ ;; scale index by 4 (size-of single-float)
+ (inst shl index 2)
- ;; 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))
- ;; load
- (inst movups sse-temp1 (vect-ea vect1 index))
+ ;; operate
+ (inst ,op-inst sse-temp1 sse-temp2)
- ;; operate
- (inst sqrtps sse-temp2 sse-temp1)
+ ;; store
+ (inst ,mov-inst (vect-ea result index) sse-temp1)
+ )))
- ;; store
- (inst movups (vect-ea result index) sse-temp2)
- ))
+;; 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*))
-(define-vop (%sse-recip/simple-array-single-float-1)
- (:policy :fast-safe)
-
- (:args (result :scs (descriptor-reg))
+ (: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
+ (:arg-types
+ ,(intern (format nil "SIMPLE-ARRAY-~A" type))
+ ,(intern (format nil "SIMPLE-ARRAY-~A" type))
+ fixnum)
- ;; scale index by 4 (size-of single-float)
- (inst shl index 2)
+ (:temporary (:sc sse-reg) sse-temp1)
- ;; load
- (inst movups sse-temp1 (vect-ea vect1 index))
+ (:generator 10
- ;; operate
- (inst rsqrtps sse-temp2 sse-temp1)
+ ;; scale index by 4 (size-of single-float)
+ (inst shl index 2)
- ;; store
- (inst movups (vect-ea result index) sse-temp2)
- ))
+ ;; 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)
+ )))
Index: sb-simd/generate-sse-instructions.lisp
diff -u sb-simd/generate-sse-instructions.lisp:1.3 sb-simd/generate-sse-instructions.lisp:1.4
--- sb-simd/generate-sse-instructions.lisp:1.3 Mon Aug 8 12:59:52 2005
+++ sb-simd/generate-sse-instructions.lisp Mon Aug 8 15:33:29 2005
@@ -7,49 +7,16 @@
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 @@
PSRLQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
PSRLW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
-SHUFPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
-SHUFPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
STMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
@@ -88,6 +53,8 @@
(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 @@
(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 @@
(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,11 +229,63 @@
,@(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))
1
0

[sb-simd-cvs] CVS update: sb-simd/sbcl-src/patch_against_sbcl_0_9_3 sb-simd/sbcl-src/makepatch.sh
by rlaakso@common-lisp.net 08 Aug '05
by rlaakso@common-lisp.net 08 Aug '05
08 Aug '05
Update of /project/sb-simd/cvsroot/sb-simd/sbcl-src
In directory common-lisp.net:/tmp/cvs-serv31523/sbcl-src
Modified Files:
patch_against_sbcl_0_9_3 makepatch.sh
Log Message:
..
Date: Mon Aug 8 15:33:25 2005
Author: rlaakso
Index: sb-simd/sbcl-src/patch_against_sbcl_0_9_3
diff -u sb-simd/sbcl-src/patch_against_sbcl_0_9_3:1.1.1.1 sb-simd/sbcl-src/patch_against_sbcl_0_9_3:1.2
--- sb-simd/sbcl-src/patch_against_sbcl_0_9_3:1.1.1.1 Fri Aug 5 15:13:29 2005
+++ sb-simd/sbcl-src/patch_against_sbcl_0_9_3 Mon Aug 8 15:33:25 2005
@@ -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 @@
(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 @@
(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 @@
(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 @@
+ (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 @@
+ (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 @@
+ (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: sb-simd/sbcl-src/makepatch.sh
diff -u sb-simd/sbcl-src/makepatch.sh:1.1.1.1 sb-simd/sbcl-src/makepatch.sh:1.2
--- sb-simd/sbcl-src/makepatch.sh:1.1.1.1 Fri Aug 5 15:13:29 2005
+++ sb-simd/sbcl-src/makepatch.sh Mon Aug 8 15:33:25 2005
@@ -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
1
0

[sb-simd-cvs] CVS update: sb-simd/sbcl-src/src/compiler/x86/insts.lisp
by rlaakso@common-lisp.net 08 Aug '05
by rlaakso@common-lisp.net 08 Aug '05
08 Aug '05
Update of /project/sb-simd/cvsroot/sb-simd/sbcl-src/src/compiler/x86
In directory common-lisp.net:/tmp/cvs-serv31523/sbcl-src/src/compiler/x86
Modified Files:
insts.lisp
Log Message:
..
Date: Mon Aug 8 15:33:23 2005
Author: rlaakso
Index: sb-simd/sbcl-src/src/compiler/x86/insts.lisp
diff -u sb-simd/sbcl-src/src/compiler/x86/insts.lisp:1.1.1.1 sb-simd/sbcl-src/src/compiler/x86/insts.lisp:1.2
--- sb-simd/sbcl-src/src/compiler/x86/insts.lisp:1.1.1.1 Fri Aug 5 15:13:29 2005
+++ sb-simd/sbcl-src/src/compiler/x86/insts.lisp Mon Aug 8 15:33:23 2005
@@ -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)))
-
1
0

[sb-simd-cvs] CVS update: sb-simd/generate-sse-instructions.lisp
by rlaakso@common-lisp.net 08 Aug '05
by rlaakso@common-lisp.net 08 Aug '05
08 Aug '05
Update of /project/sb-simd/cvsroot/sb-simd
In directory common-lisp.net:/tmp/cvs-serv19950
Modified Files:
generate-sse-instructions.lisp
Log Message:
..
Date: Mon Aug 8 12:59:53 2005
Author: rlaakso
Index: sb-simd/generate-sse-instructions.lisp
diff -u sb-simd/generate-sse-instructions.lisp:1.2 sb-simd/generate-sse-instructions.lisp:1.3
--- sb-simd/generate-sse-instructions.lisp:1.2 Mon Aug 8 12:35:37 2005
+++ sb-simd/generate-sse-instructions.lisp Mon Aug 8 12:59:52 2005
@@ -11,63 +11,38 @@
CMPPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
CMPSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
CMPSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
-COMISD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
-COMISS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
-CVTDQ2PD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
-CVTDQ2PS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
-CVTPD2DQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
-CVTPD2PI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
-CVTPD2PS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
-CVTPI2PD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
-CVTPI2PS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
-CVTPS2DQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
-CVTPS2PD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
-CVTPS2PI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
-CVTSD2SI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
-CVTSD2SS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
-CVTSI2SD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
-CVTSI2SS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
-CVTSS2SD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
-CVTSS2SI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
-CVTTPD2DQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
-CVTTPD2PI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
-CVTTPS2DQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
-CVTTPS2PI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
-CVTTSD2SI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
-CVTTSS2SI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
+
FXRSTOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
FXSAVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
+
HADDPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
HADDPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
HSUBPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
HSUBPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
+
LDDQU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
LDMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
+
MASKMOVDQU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
-MOVAPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
-MOVAPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
+
MOVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
MOVDDUP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
MOVDQ2Q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
-MOVDQA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
-MOVDQU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
+
MOVHLPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
-MOVHPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
-MOVHPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
+
MOVLHPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
-MOVLPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
-MOVLPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
+
MOVMSKPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
MOVMSKPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
MOVNTDQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
MOVNTPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
MOVNTPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
-MOVQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
+
MOVQ2DQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
-MOVSD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
+
MOVSHDUP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
MOVSLDUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
-MOVSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
PEXTRW. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
PINSRW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
@@ -89,12 +64,7 @@
SHUFPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
SHUFPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
STMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
-UCOMISD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
-UCOMISS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
-UNPCKHPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
-UNPCKHPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
-UNPCKLPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
-UNPCKLPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
+
|#
@@ -126,6 +96,8 @@
(rsqrtps #x0F #x52)
(sqrtps #x0F #x51)
(subps #x0F #x5C)
+ (unpckhps #x0F #x15)
+ (unpcklps #x0F #x14)
(xorps #x0F #x57)
;; double precision float
@@ -140,19 +112,24 @@
(orps #x66 #x0F #x56)
(sqrtpd #x66 #x0F #x51)
(subpd #x66 #x0F #x5C)
+ (unpckhpd #x66 #x0F #x15)
+ (unpcklpd #x66 #x0F #x14)
(xorpd #x66 #x0F #x57)
;; scalar double precision float
(addsd #xF2 #x0F #x58)
+ (comisd #x66 #x0F #x2F)
(divsd #xF2 #x0F #x5E)
(maxsd #xF2 #x0F #x5F)
(minsd #xF2 #x0F #x5D)
(mulsd #xF2 #x0F #x59)
(sqrtsd #xF2 #x0F #x51)
(subsd #xF2 #x0F #x5C)
+ (ucomisd #x66 #x0F #x2E)
;; scalar single precision float
(addss #xF3 #x0F #x58)
+ (comiss #x0F #x2F)
(divss #xF3 #x0F #x5E)
(maxss #xF3 #x0F #x5F)
(minss #xF3 #x0F #x5D)
@@ -161,6 +138,8 @@
(rsqrtss #xF3 #x0F #x52)
(sqrtss #xF3 #x0F #x51)
(subss #xF3 #x0F #x5C)
+ (ucomiss #x0F #x2E)
+
;; packed integer
(packssdw #x66 #x0F #x6B)
@@ -235,6 +214,30 @@
(punpcklwd #x66 #x0F #x61)
(pxor #x66 #x0F #xEF)
+
+ ;; convert
+ (cvtdq2pd #xF3 #x0F #xE6)
+ (cvtdq2ps #x0F #x5B)
+ (cvtpd2dq #xF2 #x0F #xE6)
+ (cvtpd2pi #x66 #x0F #x2D)
+ (cvtpd2ps #x66 #x0F #x5A)
+ (cvtpi2pd #x66 #x0F #x2A)
+ (cvtpi2ps #x0F #x2A)
+ (cvtps2dq #x66 #x0F #x5B)
+ (cvtps2pd #x0F #x5A)
+ (cvtps2pi #x0F #x2D)
+ (cvtsd2si #xF2 #x0F #x2D)
+ (cvtsd2ss #xF2 #x0F #x5A)
+ (cvtsi2sd #xF2 #x0F #x2A)
+ (cvtsi2ss #xF3 #x0F #x2A)
+ (cvtss2sd #xF3 #x0F #x5A)
+ (cvtss2si #xF3 #x0F #x2D)
+ (cvttpd2dq #x66 #x0F #xE6)
+ (cvttpd2pi #x66 #x0F #x2C)
+ (cvttps2dq #xF3 #x0F #x5B)
+ (cvttps2pi #x0F #x2C)
+ (cvttsd2si #xF2 #x0F #x2C)
+ (cvttss2si #xF3 #x0F #x2C)
)
do
@@ -244,11 +247,30 @@
,@(emit-ops ops)
(emit-ea segment src (reg-tn-encoding dst))))))
- ;; MOVUPS
+ ;; MOVES
(loop for (inst ops-m2r ops-r2m) in
'(
+ (movapd (#x66 #x0F #x28) (#x66 #x0F #x29))
+ (movaps (#x0F #x28) (#x0F #x29))
+
+ (movdqa (#x66 #x0F #x6F) (#x66 #x0F #x7F))
+ (movdqu (#xF3 #x0F #x6F) (#xF3 #x0F #x7F))
+
+ (movhpd (#x66 #x0F #x16) (#x66 #x0F #x17))
+ (movhps (#x0F #x16) (#x0F #x17))
+
+ (movlpd (#x66 #x0F #x12) (#x66 #x0F #x13))
+ (movlps (#x0F #x12) (#x0F #x13))
+
+ (movq (#xF3 #x0F #x7E) (#x66 #x0F #xD6))
+
+ (movsd (#xF2 #x0F #x10) (#xF2 #x0F #x11))
+
+ (movss (#xF3 #x0F #x10) (#xF3 #x0F #x11))
+
+ (movupd (#x66 #x0F #x10) (#x66 #x0F #x11))
(movups (#x0F #x10) (#x0F #x11))
- (movupd (#x66 #x0F #x10) (#x66 #x0F #x11)))
+ )
do
(format stream "~S~%~%"
`(define-instruction ,(intern (symbol-name inst)) (segment dst src)
1
0

[sb-simd-cvs] CVS update: sb-simd/generate-sse-instructions.lisp sb-simd/.cvsignore
by rlaakso@common-lisp.net 08 Aug '05
by rlaakso@common-lisp.net 08 Aug '05
08 Aug '05
Update of /project/sb-simd/cvsroot/sb-simd
In directory common-lisp.net:/tmp/cvs-serv18920
Modified Files:
generate-sse-instructions.lisp .cvsignore
Log Message:
..
Date: Mon Aug 8 12:35:38 2005
Author: rlaakso
Index: sb-simd/generate-sse-instructions.lisp
diff -u sb-simd/generate-sse-instructions.lisp:1.1.1.1 sb-simd/generate-sse-instructions.lisp:1.2
--- sb-simd/generate-sse-instructions.lisp:1.1.1.1 Fri Aug 5 15:13:29 2005
+++ sb-simd/generate-sse-instructions.lisp Mon Aug 8 12:35:37 2005
@@ -4,6 +4,98 @@
http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/265…
+
+TODO:
+
+CMPPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
+CMPPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
+CMPSD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
+CMPSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
+COMISD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
+COMISS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
+CVTDQ2PD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
+CVTDQ2PS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
+CVTPD2DQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
+CVTPD2PI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
+CVTPD2PS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
+CVTPI2PD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
+CVTPI2PS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
+CVTPS2DQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
+CVTPS2PD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
+CVTPS2PI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
+CVTSD2SI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
+CVTSD2SS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
+CVTSI2SD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
+CVTSI2SS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
+CVTSS2SD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
+CVTSS2SI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
+CVTTPD2DQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
+CVTTPD2PI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
+CVTTPS2DQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
+CVTTPS2PI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
+CVTTSD2SI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
+CVTTSS2SI. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
+FXRSTOR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
+FXSAVE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
+HADDPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
+HADDPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
+HSUBPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
+HSUBPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
+LDDQU. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
+LDMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
+MASKMOVDQU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
+MOVAPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
+MOVAPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
+MOVD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
+MOVDDUP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
+MOVDQ2Q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
+MOVDQA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
+MOVDQU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
+MOVHLPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
+MOVHPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
+MOVHPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
+MOVLHPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
+MOVLPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
+MOVLPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
+MOVMSKPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
+MOVMSKPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
+MOVNTDQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
+MOVNTPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
+MOVNTPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
+MOVQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
+MOVQ2DQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
+MOVSD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
+MOVSHDUP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
+MOVSLDUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
+MOVSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
+
+PEXTRW. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
+PINSRW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
+
+PSHUFD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
+PSHUFHW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
+PSHUFLW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
+PSLLD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
+PSLLDQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
+PSLLQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
+PSLLW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
+PSRAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
+PSRAW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
+PSRLD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
+PSRLDQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
+PSRLQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
+PSRLW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
+
+SHUFPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
+SHUFPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
+STMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
+UCOMISD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
+UCOMISS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
+UNPCKHPD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
+UNPCKHPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
+UNPCKLPD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
+UNPCKLPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
+
|#
(declaim (optimize (debug 3)))
@@ -16,8 +108,7 @@
(defun gen-ops (&optional (stream t))
- ;; single prec packed sse
- ;;; like :
+ ;;; instructions like:
;;; ADDPS xmm1, xmm2/mem128 0F 58 /r
(loop for (inst . ops) in
'(
@@ -36,6 +127,7 @@
(sqrtps #x0F #x51)
(subps #x0F #x5C)
(xorps #x0F #x57)
+
;; double precision float
(addpd #x66 #x0F #x58)
(addsubpd #x66 #x0F #xD0)
@@ -46,11 +138,104 @@
(minpd #x66 #x0F #x5D)
(mulpd #x66 #x0F #x59)
(orps #x66 #x0F #x56)
- (rcppd #x66 #x0F #x53)
- (rsqrtpd #x66 #x0F #x52)
(sqrtpd #x66 #x0F #x51)
(subpd #x66 #x0F #x5C)
(xorpd #x66 #x0F #x57)
+
+ ;; scalar double precision float
+ (addsd #xF2 #x0F #x58)
+ (divsd #xF2 #x0F #x5E)
+ (maxsd #xF2 #x0F #x5F)
+ (minsd #xF2 #x0F #x5D)
+ (mulsd #xF2 #x0F #x59)
+ (sqrtsd #xF2 #x0F #x51)
+ (subsd #xF2 #x0F #x5C)
+
+ ;; scalar single precision float
+ (addss #xF3 #x0F #x58)
+ (divss #xF3 #x0F #x5E)
+ (maxss #xF3 #x0F #x5F)
+ (minss #xF3 #x0F #x5D)
+ (mulss #xF3 #x0F #x59)
+ (rcpss #xF3 #x0F #x53)
+ (rsqrtss #xF3 #x0F #x52)
+ (sqrtss #xF3 #x0F #x51)
+ (subss #xF3 #x0F #x5C)
+
+ ;; packed integer
+ (packssdw #x66 #x0F #x6B)
+ (packsswb #x66 #x0F #x63)
+ (packuswb #x66 #x0F #x67)
+
+ (paddb #x66 #x0F #xFC)
+ (paddd #x66 #x0F #xFE)
+ (paddq #x66 #x0F #xD4)
+ (paddsb #x66 #x0F #xEC)
+ (paddsw #x66 #x0F #xED)
+ (paddusb #x66 #x0F #xDC)
+ (paddusw #x66 #x0F #xDD)
+ (paddw #x66 #x0F #xFD)
+
+ (pand #x66 #x0F #xDB)
+ (pandn #x66 #x0F #xDF)
+
+ (pavgb #x66 #x0F #xE0)
+ (pavgw #x66 #x0F #xE3)
+
+ (pcmpeqb #x66 #x0F #x74)
+ (pcmpeqd #x66 #x0F #x76)
+ (pcmpeqw #x66 #x0F #x75)
+ (pcmpgtb #x66 #x0F #x64)
+ (pcmpgtd #x66 #x0F #x66)
+ (pcmpgtw #x66 #x0F #x65)
+
+ (pmaddwd #x66 #x0F #xF5)
+
+ (pmaxsw #x66 #x0F #xEE)
+ (pmaxub #x66 #x0F #xDE)
+
+ (pminsw #x66 #x0F #xEA)
+ (pminub #x66 #x0F #xDA)
+
+ (pmovmskb #x66 #x0F #xD7)
+
+ (pmulhuw #x66 #x0F #xE4)
+ (pmulhw #x66 #x0F #xE5)
+ (pmullw #x66 #x0F #xD5)
+ (pmuludq #x66 #x0F #xF4)
+
+ (por #x66 #x0F #xEB)
+
+ (psadbw #x66 #x0F #xF6)
+ (pssld #x66 #x0F #xF2)
+ (psllq #x66 #x0F #xF3)
+ (psllw #x66 #x0F #xF1)
+ (psrad #x66 #x0F #xE2)
+ (psraw #x66 #x0F #xE2)
+ (psrld #x66 #x0F #xD2)
+ (psrlq #x66 #x0F #xD3)
+ (psrlw #x66 #x0F #xD1)
+
+ (psubb #x66 #x0F #xF8)
+ (psubd #x66 #x0F #xFA)
+ (psubq #x66 #x0F #xFB)
+ (psubsb #x66 #x0F #xE8)
+ (psubsw #x66 #x0F #xE9)
+ (psubusb #x66 #x0F #xD8)
+ (psubusw #x66 #x0F #xD9)
+ (psubw #x66 #x0F #xF9)
+
+ (punpckhbw #x66 #x0F #x68)
+ (punpckhdq #x66 #x0F #x6A)
+ (punpckhqdq #x66 #x0F #x6D)
+ (punpckhwd #x66 #x0F #x69)
+ (punpcklbw #x66 #x0F #x60)
+ (punpckldq #x66 #x0F #x62)
+ (punpcklqdq #x66 #x0F #x6C)
+ (punpcklwd #x66 #x0F #x61)
+
+ (pxor #x66 #x0F #xEF)
+
)
do
(format stream "~S~%~%"
Index: sb-simd/.cvsignore
diff -u sb-simd/.cvsignore:1.1 sb-simd/.cvsignore:1.2
--- sb-simd/.cvsignore:1.1 Mon Aug 8 11:57:48 2005
+++ sb-simd/.cvsignore Mon Aug 8 12:35:37 2005
@@ -1 +1,3 @@
.emacs.desktop
+*.fasl
+sse-insts.lisp
1
0
Update of /project/sb-simd/cvsroot/sb-simd
In directory common-lisp.net:/tmp/cvs-serv15654
Added Files:
.cvsignore
Log Message:
..
Date: Mon Aug 8 11:57:48 2005
Author: rlaakso
1
0