From rlaakso at common-lisp.net Fri Aug 5 13:12:25 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Fri, 5 Aug 2005 15:12:25 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: Module imported: sb-simd Message-ID: <20050805131225.EA1DC88545@common-lisp.net> Update of /project/sb-simd/cvsroot/sb-simd In directory common-lisp.net:/tmp/cvs-serv1712 Log Message: Import Status: Vendor Tag: sb-simd Release Tags: start N sb-simd/sb-simd/sse-vop.lisp N sb-simd/sb-simd/cpuid.lisp N sb-simd/sb-simd/cpuid-vop.lisp N sb-simd/sb-simd/TODO N sb-simd/sb-simd/generate-sse-instructions.lisp N sb-simd/sb-simd/example-test.lisp N sb-simd/sb-simd/sbcl-src/makepatch.sh N sb-simd/sb-simd/sbcl-src/patch_against_sbcl_0_9_3 N sb-simd/sb-simd/sbcl-src/src-093/compiler/x86/vm.lisp N sb-simd/sb-simd/sbcl-src/src-093/compiler/x86/insts.lisp N sb-simd/sb-simd/sbcl-src/src/compiler/x86/insts.lisp N sb-simd/sb-simd/sbcl-src/src/compiler/x86/vm.lisp N sb-simd/sb-simd/scratch/foo.lisp N sb-simd/sb-simd/scratch/sse2.lisp N sb-simd/sb-simd/scratch/sse.lisp N sb-simd/sb-simd/scratch/asm-t1.asm N sb-simd/sb-simd/scratch/README N sb-simd/sb-simd/scratch/.emacs.desktop No conflicts created by this import Date: Fri Aug 5 15:12:25 2005 Author: rlaakso New module sb-simd added From rlaakso at common-lisp.net Fri Aug 5 13:12:57 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Fri, 5 Aug 2005 15:12:57 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: Module imported: . Message-ID: <20050805131257.E73E488545@common-lisp.net> Update of /project/sb-simd/cvsroot/. In directory common-lisp.net:/tmp/cvs-serv1734 Log Message: Import Status: Vendor Tag: sb-simd Release Tags: start N ./sse-vop.lisp N ./cpuid.lisp N ./cpuid-vop.lisp N ./TODO N ./generate-sse-instructions.lisp N ./example-test.lisp N ./sbcl-src/makepatch.sh N ./sbcl-src/patch_against_sbcl_0_9_3 N ./sbcl-src/src-093/compiler/x86/vm.lisp N ./sbcl-src/src-093/compiler/x86/insts.lisp N ./sbcl-src/src/compiler/x86/insts.lisp N ./sbcl-src/src/compiler/x86/vm.lisp N ./scratch/foo.lisp N ./scratch/sse2.lisp N ./scratch/sse.lisp N ./scratch/asm-t1.asm N ./scratch/README N ./scratch/.emacs.desktop No conflicts created by this import Date: Fri Aug 5 15:12:57 2005 Author: rlaakso New module . added From rlaakso at common-lisp.net Fri Aug 5 13:13:30 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Fri, 5 Aug 2005 15:13:30 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: Module imported: sb-simd Message-ID: <20050805131330.30CA888545@common-lisp.net> Update of /project/sb-simd/cvsroot/sb-simd In directory common-lisp.net:/tmp/cvs-serv1751 Log Message: Import Status: Vendor Tag: sb-simd Release Tags: start N sb-simd/sse-vop.lisp N sb-simd/cpuid.lisp N sb-simd/cpuid-vop.lisp N sb-simd/TODO N sb-simd/generate-sse-instructions.lisp N sb-simd/example-test.lisp N sb-simd/sbcl-src/makepatch.sh N sb-simd/sbcl-src/patch_against_sbcl_0_9_3 N sb-simd/sbcl-src/src-093/compiler/x86/vm.lisp N sb-simd/sbcl-src/src-093/compiler/x86/insts.lisp N sb-simd/sbcl-src/src/compiler/x86/insts.lisp N sb-simd/sbcl-src/src/compiler/x86/vm.lisp N sb-simd/scratch/foo.lisp N sb-simd/scratch/sse2.lisp N sb-simd/scratch/sse.lisp N sb-simd/scratch/asm-t1.asm N sb-simd/scratch/README N sb-simd/scratch/.emacs.desktop No conflicts created by this import Date: Fri Aug 5 15:13:29 2005 Author: rlaakso New module sb-simd added From rlaakso at common-lisp.net Mon Aug 8 09:57:49 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Mon, 8 Aug 2005 11:57:49 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: sb-simd/.cvsignore Message-ID: <20050808095749.309FF88525@common-lisp.net> 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 From rlaakso at common-lisp.net Mon Aug 8 10:35:39 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Mon, 8 Aug 2005 12:35:39 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: sb-simd/generate-sse-instructions.lisp sb-simd/.cvsignore Message-ID: <20050808103539.B500F88542@common-lisp.net> 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/26568.pdf + +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 From rlaakso at common-lisp.net Mon Aug 8 10:59:56 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Mon, 8 Aug 2005 12:59:56 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: sb-simd/generate-sse-instructions.lisp Message-ID: <20050808105956.EB66D88542@common-lisp.net> 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) From rlaakso at common-lisp.net Mon Aug 8 13:33:31 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Mon, 8 Aug 2005 15:33:31 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: sb-simd/sse-vop.lisp sb-simd/generate-sse-instructions.lisp Message-ID: <20050808133331.AFE4888546@common-lisp.net> 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)) From rlaakso at common-lisp.net Mon Aug 8 13:33:29 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Mon, 8 Aug 2005 15:33:29 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: sb-simd/sbcl-src/src/compiler/x86/insts.lisp Message-ID: <20050808133329.5B3AB88542@common-lisp.net> 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))) - From rlaakso at common-lisp.net Mon Aug 8 13:33:30 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Mon, 8 Aug 2005 15:33:30 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: sb-simd/sbcl-src/patch_against_sbcl_0_9_3 sb-simd/sbcl-src/makepatch.sh Message-ID: <20050808133330.6EDF888542@common-lisp.net> 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 From rlaakso at common-lisp.net Mon Aug 8 15:56:03 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Mon, 8 Aug 2005 17:56:03 +0200 (CEST) Subject: [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 Message-ID: <20050808155603.189B088542@common-lisp.net> 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 From rlaakso at common-lisp.net Mon Aug 8 16:23:27 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Mon, 8 Aug 2005 18:23:27 +0200 (CEST) Subject: [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 Message-ID: <20050808162327.4FC5C88542@common-lisp.net> 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)) From rlaakso at common-lisp.net Mon Aug 8 16:23:51 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Mon, 8 Aug 2005 18:23:51 +0200 (CEST) Subject: [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 Message-ID: <20050808162351.4556588542@common-lisp.net> 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 From rlaakso at common-lisp.net Mon Aug 8 17:26:09 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Mon, 8 Aug 2005 19:26:09 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: sb-simd/generate-sse-vops.lisp sb-simd/example-test.lisp Message-ID: <20050808172609.37E9288542@common-lisp.net> 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 From rlaakso at common-lisp.net Tue Aug 9 09:45:42 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Tue, 9 Aug 2005 11:45:42 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: sb-simd/timing.lisp sb-simd/test-matrix.lisp sb-simd/sse-matrix.lisp sb-simd/load.lisp Message-ID: <20050809094542.01EB1880DC@common-lisp.net> Update of /project/sb-simd/cvsroot/sb-simd In directory common-lisp.net:/tmp/cvs-serv15516 Modified Files: load.lisp Added Files: timing.lisp test-matrix.lisp sse-matrix.lisp Log Message: .. Date: Tue Aug 9 11:45:37 2005 Author: rlaakso Index: sb-simd/load.lisp diff -u sb-simd/load.lisp:1.1 sb-simd/load.lisp:1.2 --- sb-simd/load.lisp:1.1 Mon Aug 8 17:56:01 2005 +++ sb-simd/load.lisp Tue Aug 9 11:45:36 2005 @@ -1,6 +1,14 @@ -(if t +(if nil (progn (load (compile-file "sse-vops.lisp")) (load (compile-file "example-test.lisp")) )) + +(if t + (progn + (load (compile-file "sse-matrix.lisp")) + (load (compile-file "timing.lisp")) + (load (compile-file "test-matrix.lisp")) + )) + From rlaakso at common-lisp.net Tue Aug 9 17:18:17 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Tue, 9 Aug 2005 19:18:17 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: sb-simd/sb-simd.asd sb-simd/detect-simd.lisp sb-simd/load.lisp Message-ID: <20050809171817.B46A688540@common-lisp.net> Update of /project/sb-simd/cvsroot/sb-simd In directory common-lisp.net:/tmp/cvs-serv15252 Modified Files: load.lisp Added Files: sb-simd.asd detect-simd.lisp Log Message: Date: Tue Aug 9 19:18:16 2005 Author: rlaakso Index: sb-simd/load.lisp diff -u sb-simd/load.lisp:1.2 sb-simd/load.lisp:1.3 --- sb-simd/load.lisp:1.2 Tue Aug 9 11:45:36 2005 +++ sb-simd/load.lisp Tue Aug 9 19:18:15 2005 @@ -4,11 +4,16 @@ (load (compile-file "example-test.lisp")) )) -(if t +(if nil (progn (load (compile-file "sse-matrix.lisp")) (load (compile-file "timing.lisp")) (load (compile-file "test-matrix.lisp")) )) +(if t + (progn + (load (compile-file "detect-simd.lisp")) + (load (compile-file "push-simd-features.lisp")) + )) From rlaakso at common-lisp.net Fri Aug 12 11:55:40 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Fri, 12 Aug 2005 13:55:40 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: sb-simd/sbcl-src/src/compiler/x86/vm.lisp sb-simd/sbcl-src/src/compiler/x86/insts.lisp Message-ID: <20050812115540.DF40788537@common-lisp.net> Update of /project/sb-simd/cvsroot/sb-simd/sbcl-src/src/compiler/x86 In directory common-lisp.net:/tmp/cvs-serv26463/sbcl-src/src/compiler/x86 Modified Files: vm.lisp insts.lisp Log Message: Date: Fri Aug 12 13:55:38 2005 Author: rlaakso Index: sb-simd/sbcl-src/src/compiler/x86/vm.lisp diff -u sb-simd/sbcl-src/src/compiler/x86/vm.lisp:1.1.1.1 sb-simd/sbcl-src/src/compiler/x86/vm.lisp:1.2 --- sb-simd/sbcl-src/src/compiler/x86/vm.lisp:1.1.1.1 Fri Aug 5 15:13:29 2005 +++ sb-simd/sbcl-src/src/compiler/x86/vm.lisp Fri Aug 12 13:55:38 2005 @@ -22,7 +22,7 @@ (defvar *word-register-names* (make-array 16 :initial-element nil)) (defvar *dword-register-names* (make-array 16 :initial-element nil)) (defvar *float-register-names* (make-array 8 :initial-element nil)) - (defvar *dqword-register-names* (make-array 8 :initial-element nil))) + (defvar *xmmword-register-names* (make-array 8 :initial-element nil))) (macrolet ((defreg (name offset size) (let ((offset-sym (symbolicate name "-OFFSET")) @@ -93,15 +93,15 @@ (defregset *float-regs* fr0 fr1 fr2 fr3 fr4 fr5 fr6 fr7) ;; sse registers - (defreg xmm0 0 :dqword) - (defreg xmm1 1 :dqword) - (defreg xmm2 2 :dqword) - (defreg xmm3 3 :dqword) - (defreg xmm4 4 :dqword) - (defreg xmm5 5 :dqword) - (defreg xmm6 6 :dqword) - (defreg xmm7 7 :dqword) - (defregset *sse-regs* xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7) + (defreg xmm0 0 :xmmword) + (defreg xmm1 1 :xmmword) + (defreg xmm2 2 :xmmword) + (defreg xmm3 3 :xmmword) + (defreg xmm4 4 :xmmword) + (defreg xmm5 5 :xmmword) + (defreg xmm6 6 :xmmword) + (defreg xmm7 7 :xmmword) + (defregset *xmm-regs* xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7) ;; registers used to pass arguments ;; @@ -130,7 +130,7 @@ ;;; the new way: (define-storage-base float-registers :finite :size 8) -(define-storage-base sse-registers :finite :size 8) +(define-storage-base xmm-registers :finite :size 8) (define-storage-base stack :unbounded :size 8) (define-storage-base constant :non-packed) @@ -334,8 +334,8 @@ :save-p t :alternate-scs (complex-long-stack)) - (sse-reg sse-registers - :locations #.*sse-regs*) + (xmm-reg xmm-registers + :locations #.*xmm-regs*) ;; a catch or unwind block (catch-block stack :element-size kludge-nondeterministic-catch-block-size)) @@ -353,7 +353,7 @@ ;;; These are used to (at least) determine operand size. (defparameter *float-sc-names* '(single-reg)) (defparameter *double-sc-names* '(double-reg double-stack)) -(defparameter *dqword-sc-names* '(sse-reg)) +(defparameter *xmmword-sc-names* '(xmm-reg)) ) ; EVAL-WHEN ;;;; miscellaneous TNs for the various registers @@ -461,7 +461,7 @@ ;; FIXME: Shouldn't this be an ERROR? (format nil "" offset sc-name)))) (float-registers (format nil "FR~D" offset)) - (sse-registers (format nil "XMM~D" offset)) + (xmm-registers (format nil "XMM~D" offset)) (stack (format nil "S~D" offset)) (constant (format nil "Const~D" offset)) (immediate-constant "Immed") Index: sb-simd/sbcl-src/src/compiler/x86/insts.lisp diff -u sb-simd/sbcl-src/src/compiler/x86/insts.lisp:1.2 sb-simd/sbcl-src/src/compiler/x86/insts.lisp:1.3 --- sb-simd/sbcl-src/src/compiler/x86/insts.lisp:1.2 Mon Aug 8 15:33:23 2005 +++ sb-simd/sbcl-src/src/compiler/x86/insts.lisp Fri Aug 12 13:55:38 2005 @@ -39,13 +39,16 @@ #(ax cx dx bx sp bp si di)) (defparameter *dword-reg-names* #(eax ecx edx ebx esp ebp esi edi)) +(defparameter *xmmword-reg-names* + #(xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7)) (defun print-reg-with-width (value width stream dstate) (declare (ignore dstate)) (princ (aref (ecase width (:byte *byte-reg-names*) (:word *word-reg-names*) - (:dword *dword-reg-names*)) + (:dword *dword-reg-names*) + (:xmmword *xmmword-reg-names*)) value) stream) ;; XXX plus should do some source-var notes @@ -193,7 +196,7 @@ (:word 16) (:dword 32) (:qword 64) - (:dqword 128) + (:xmmword 128) (:float 32) (:double 64))) @@ -680,7 +683,7 @@ (defstruct (ea (:constructor make-ea (size &key base index scale disp)) (:copier nil)) - (size nil :type (member :byte :word :dword)) + (size nil :type (member :byte :word :dword :xmmword)) (base nil :type (or tn null)) (index nil :type (or tn null)) (scale 1 :type (member 1 2 4 8)) @@ -720,7 +723,7 @@ (ecase (sb-name (sc-sb (tn-sc thing))) (registers (emit-mod-reg-r/m-byte segment #b11 reg (reg-tn-encoding thing))) - (sse-registers + (xmm-registers (emit-mod-reg-r/m-byte segment #b11 reg (reg-tn-encoding thing))) (stack ;; Convert stack tns into an index off of EBP. @@ -834,9 +837,18 @@ (and (tn-p thing) (eq (sb-name (sc-sb (tn-sc thing))) 'registers))) -(defun sse-register-p (thing) +(defun xmm-register-p (thing) (and (tn-p thing) - (eq (sb-name (sc-sb (tn-sc thing))) 'sse-registers))) + (eq (sb-name (sc-sb (tn-sc thing))) 'xmm-registers) + (member (sc-name (tn-sc thing)) *xmmword-sc-names*) + t)) + +(defun xmm-ea-p (thing) + (typecase thing + (ea (eq (ea-size thing) :xmmword)) + (tn + (and (member (sc-name (tn-sc thing)) *xmmword-sc-names*) t)) + (t nil))) (defun accumulator-p (thing) (and (register-p thing) @@ -867,6 +879,8 @@ :float) (#.*double-sc-names* :double) + (#.*xmmword-sc-names* + :xmmword) (t (error "can't tell the size of ~S ~S" thing (sc-name (tn-sc thing)))))) (ea @@ -3210,7 +3224,7 @@ (SEGMENT DST SRC) (:EMITTER (COND - ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102) + ((XMM-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) @@ -3222,7 +3236,7 @@ (SEGMENT DST SRC) (:EMITTER (COND - ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 15) + ((XMM-REGISTER-P DST) (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 40) (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))) (T (EMIT-BYTE SEGMENT 15) @@ -3233,7 +3247,7 @@ (SEGMENT DST SRC) (:EMITTER (COND - ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102) + ((XMM-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) @@ -3245,7 +3259,7 @@ (SEGMENT DST SRC) (:EMITTER (COND - ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102) + ((XMM-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) @@ -3257,7 +3271,7 @@ (SEGMENT DST SRC) (:EMITTER (COND - ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 243) + ((XMM-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) @@ -3269,7 +3283,7 @@ (SEGMENT DST SRC) (:EMITTER (COND - ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102) + ((XMM-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) @@ -3281,7 +3295,7 @@ (SEGMENT DST SRC) (:EMITTER (COND - ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 15) + ((XMM-REGISTER-P DST) (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 22) (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))) (T (EMIT-BYTE SEGMENT 15) @@ -3292,7 +3306,7 @@ (SEGMENT DST SRC) (:EMITTER (COND - ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102) + ((XMM-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) @@ -3304,7 +3318,7 @@ (SEGMENT DST SRC) (:EMITTER (COND - ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 15) + ((XMM-REGISTER-P DST) (EMIT-BYTE SEGMENT 15) (EMIT-BYTE SEGMENT 18) (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))) (T (EMIT-BYTE SEGMENT 15) @@ -3315,7 +3329,7 @@ (SEGMENT DST SRC) (:EMITTER (COND - ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 243) + ((XMM-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) @@ -3327,7 +3341,7 @@ (SEGMENT DST SRC) (:EMITTER (COND - ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 242) + ((XMM-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) @@ -3339,7 +3353,7 @@ (SEGMENT DST SRC) (:EMITTER (COND - ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 243) + ((XMM-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) @@ -3351,7 +3365,7 @@ (SEGMENT DST SRC) (:EMITTER (COND - ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102) + ((XMM-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) @@ -3363,12 +3377,92 @@ (SEGMENT DST SRC) (:EMITTER (COND - ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 15) + ((XMM-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 PSLLD-IB + (SEGMENT DST AMOUNT) + (:EMITTER (EMIT-BYTE SEGMENT 102) + (EMIT-BYTE SEGMENT 15) + (EMIT-BYTE SEGMENT 114) + (EMIT-EA SEGMENT DST 6) + (EMIT-BYTE SEGMENT AMOUNT))) + +(DEFINE-INSTRUCTION PSLLDQ-IB + (SEGMENT DST AMOUNT) + (:EMITTER (EMIT-BYTE SEGMENT 102) + (EMIT-BYTE SEGMENT 15) + (EMIT-BYTE SEGMENT 115) + (EMIT-EA SEGMENT DST 7) + (EMIT-BYTE SEGMENT AMOUNT))) + +(DEFINE-INSTRUCTION PSLLQ-IB + (SEGMENT DST AMOUNT) + (:EMITTER (EMIT-BYTE SEGMENT 102) + (EMIT-BYTE SEGMENT 15) + (EMIT-BYTE SEGMENT 115) + (EMIT-EA SEGMENT DST 6) + (EMIT-BYTE SEGMENT AMOUNT))) + +(DEFINE-INSTRUCTION PSLLW-IB + (SEGMENT DST AMOUNT) + (:EMITTER (EMIT-BYTE SEGMENT 102) + (EMIT-BYTE SEGMENT 15) + (EMIT-BYTE SEGMENT 113) + (EMIT-EA SEGMENT DST 6) + (EMIT-BYTE SEGMENT AMOUNT))) + +(DEFINE-INSTRUCTION PSRAD-IB + (SEGMENT DST AMOUNT) + (:EMITTER (EMIT-BYTE SEGMENT 102) + (EMIT-BYTE SEGMENT 15) + (EMIT-BYTE SEGMENT 114) + (EMIT-EA SEGMENT DST 4) + (EMIT-BYTE SEGMENT AMOUNT))) + +(DEFINE-INSTRUCTION PSRAW-IB + (SEGMENT DST AMOUNT) + (:EMITTER (EMIT-BYTE SEGMENT 102) + (EMIT-BYTE SEGMENT 15) + (EMIT-BYTE SEGMENT 113) + (EMIT-EA SEGMENT DST 4) + (EMIT-BYTE SEGMENT AMOUNT))) + +(DEFINE-INSTRUCTION PSRLD-IB + (SEGMENT DST AMOUNT) + (:EMITTER (EMIT-BYTE SEGMENT 102) + (EMIT-BYTE SEGMENT 15) + (EMIT-BYTE SEGMENT 114) + (EMIT-EA SEGMENT DST 2) + (EMIT-BYTE SEGMENT AMOUNT))) + +(DEFINE-INSTRUCTION PSRLDQ-IB + (SEGMENT DST AMOUNT) + (:EMITTER (EMIT-BYTE SEGMENT 102) + (EMIT-BYTE SEGMENT 15) + (EMIT-BYTE SEGMENT 115) + (EMIT-EA SEGMENT DST 3) + (EMIT-BYTE SEGMENT AMOUNT))) + +(DEFINE-INSTRUCTION PSRLQ-IB + (SEGMENT DST AMOUNT) + (:EMITTER (EMIT-BYTE SEGMENT 102) + (EMIT-BYTE SEGMENT 15) + (EMIT-BYTE SEGMENT 115) + (EMIT-EA SEGMENT DST 2) + (EMIT-BYTE SEGMENT AMOUNT))) + +(DEFINE-INSTRUCTION PSRLW-IB + (SEGMENT DST AMOUNT) + (:EMITTER (EMIT-BYTE SEGMENT 102) + (EMIT-BYTE SEGMENT 15) + (EMIT-BYTE SEGMENT 113) + (EMIT-EA SEGMENT DST 2) + (EMIT-BYTE SEGMENT AMOUNT))) From rlaakso at common-lisp.net Fri Aug 12 11:55:43 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Fri, 12 Aug 2005 13:55:43 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: sb-simd/test-seq.lisp sb-simd/sse-seq.lisp sb-simd/VOP.txt sb-simd/load.lisp sb-simd/generate-sse-instructions.lisp sb-simd/detect-simd.lisp sb-simd/TODO Message-ID: <20050812115543.22BB48854B@common-lisp.net> Update of /project/sb-simd/cvsroot/sb-simd In directory common-lisp.net:/tmp/cvs-serv26463 Modified Files: load.lisp generate-sse-instructions.lisp detect-simd.lisp TODO Added Files: test-seq.lisp sse-seq.lisp VOP.txt Log Message: Date: Fri Aug 12 13:55:40 2005 Author: rlaakso Index: sb-simd/load.lisp diff -u sb-simd/load.lisp:1.3 sb-simd/load.lisp:1.4 --- sb-simd/load.lisp:1.3 Tue Aug 9 19:18:15 2005 +++ sb-simd/load.lisp Fri Aug 12 13:55:39 2005 @@ -14,6 +14,8 @@ (if t (progn (load (compile-file "detect-simd.lisp")) - (load (compile-file "push-simd-features.lisp")) + (load (compile-file "timing.lisp")) + (load (compile-file "sse-seq.lisp")) + (load (compile-file "test-seq.lisp")) )) Index: sb-simd/generate-sse-instructions.lisp diff -u sb-simd/generate-sse-instructions.lisp:1.5 sb-simd/generate-sse-instructions.lisp:1.6 --- sb-simd/generate-sse-instructions.lisp:1.5 Mon Aug 8 18:23:22 2005 +++ sb-simd/generate-sse-instructions.lisp Fri Aug 12 13:55:39 2005 @@ -42,18 +42,6 @@ MOVQ2DQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 -(ib-forms:) -PSLLD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 -PSLLDQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 -PSLLQ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 -PSLLW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 -PSRAD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 -PSRAW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 -PSRLD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 -PSRLDQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 -PSRLQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 -PSRLW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 - STMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 @@ -339,7 +327,31 @@ ,@(emit-ops ops-m2r) (emit-ea segment src (reg-tn-encoding dst))) (t ,@(emit-ops ops-r2m) - (emit-ea segment dst (reg-tn-encoding src))))))))) + (emit-ea segment dst (reg-tn-encoding src)))))))) + + ;; misc + (loop for (name mode . opcodes) in + '( + (pslld-ib 6 #x66 #x0F #x72) + (pslldq-ib 7 #x66 #x0F #x73) + (psllq-ib 6 #x66 #x0F #x73) + (psllw-ib 6 #x66 #x0F #x71) + (psrad-ib 4 #x66 #x0F #x72) + (psraw-ib 4 #x66 #x0F #x71) + (psrld-ib 2 #x66 #x0F #x72) + (psrldq-ib 3 #x66 #x0F #x73) + (psrlq-ib 2 #x66 #x0F #x73) + (psrlw-ib 2 #x66 #x0F #x71) + ) + do + (format stream "~S~%~%" + `(define-instruction ,(intern (symbol-name name)) (segment dst amount) + (:emitter + ,@(emit-ops opcodes) + (emit-ea segment dst ,mode) + (emit-byte segment amount))))) + + ) (defun gen-ops-to-file (filename) (with-open-file (stream filename :direction :output :if-exists :supersede) Index: sb-simd/detect-simd.lisp diff -u sb-simd/detect-simd.lisp:1.1 sb-simd/detect-simd.lisp:1.2 --- sb-simd/detect-simd.lisp:1.1 Tue Aug 9 19:18:15 2005 +++ sb-simd/detect-simd.lisp Fri Aug 12 13:55:39 2005 @@ -57,11 +57,3 @@ (inst mov res edx))) - -(eval-when (:load-toplevel) - (let ((res (sb-sys:%primitive sb-vm::%detect-simd/x86))) -;; (format t "res is ~A~%" res) - (if (/= (logand res #b001) 0) (pushnew :sse sb-vm::*backend-subfeatures*)) - (if (/= (logand res #b010) 0) (pushnew :sse2 sb-vm::*backend-subfeatures*)) - (if (/= (logand res #b100) 0) (pushnew :sse3 sb-vm::*backend-subfeatures*)))) - \ No newline at end of file Index: sb-simd/TODO diff -u sb-simd/TODO:1.1.1.1 sb-simd/TODO:1.2 --- sb-simd/TODO:1.1.1.1 Fri Aug 5 15:13:29 2005 +++ sb-simd/TODO Fri Aug 12 13:55:39 2005 @@ -1,20 +1 @@ -operations from AMD manual: - - -sign: - -andps xmm0, #x8000 0000 8000 0000 .. - -neg: - -xorps xmm0, #x8000 0000 8000 0000 .. - -abs: - -andps xmm0, #x7FFF FFFF 7FFF FFFF .. - -clear: - -xorps xmm0, xmm0 - From rlaakso at common-lisp.net Fri Aug 12 14:09:55 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Fri, 12 Aug 2005 16:09:55 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: sb-simd/push-simd-features.lisp sb-simd/expand-parse-operand-temp-count.lisp sb-simd/test-seq.lisp sb-simd/sse-seq.lisp sb-simd/load.lisp Message-ID: <20050812140955.2A61488537@common-lisp.net> Update of /project/sb-simd/cvsroot/sb-simd In directory common-lisp.net:/tmp/cvs-serv3312 Modified Files: test-seq.lisp sse-seq.lisp load.lisp Added Files: push-simd-features.lisp expand-parse-operand-temp-count.lisp Log Message: Date: Fri Aug 12 16:09:53 2005 Author: rlaakso Index: sb-simd/test-seq.lisp diff -u sb-simd/test-seq.lisp:1.1 sb-simd/test-seq.lisp:1.2 --- sb-simd/test-seq.lisp:1.1 Fri Aug 12 13:55:39 2005 +++ sb-simd/test-seq.lisp Fri Aug 12 16:09:53 2005 @@ -3,14 +3,7 @@ (declaim (optimize (speed 3) (safety 0) (space 0) (debug 0))) (defun sse-seq= (seq1 seq2) - (declare (type (simple-array (unsigned-byte 8) (*)) seq1 seq2)) - (multiple-value-bind (256blocks rest) (truncate (length seq1) (floor (log (/ 256 8) 2))) - (declare (ignore rest)) - (and (= (sb-sys:%primitive sb-vm::%sse-seq= seq1 seq2) 0) - (loop for equal = t - for i from (* 256blocks 32) below (length seq1) - when (/= (aref seq1 i) (aref seq2 i)) do (setq equal nil) - finally (return equal))))) + (= (sb-sys:%primitive sb-vm::%sse-seq= seq1 seq2) 0)) (defun seq= (seq1 seq2) (declare (type (simple-array (unsigned-byte 8) (*)) seq1 seq2)) @@ -22,11 +15,11 @@ finally (return equal)))) -(defun test-seq (&optional (test-count 100000)) - (let ((arr1 (make-array #.(* 256 1024) :element-type '(unsigned-byte 8) :initial-element 0)) - (arr2 (make-array #.(* 256 1024) :element-type '(unsigned-byte 8) :initial-element 0)) - (arr3 (make-array #.(* 256 1024) :element-type '(unsigned-byte 8) :initial-element 0)) - (arr4 (make-array #.(* 256 1024) :element-type '(unsigned-byte 8) :initial-element 0)) +(defun test-seq (&optional (test-count 50000)) + (let ((arr1 (make-array #.(* 255 1025) :element-type '(unsigned-byte 8) :initial-element 0)) + (arr2 (make-array #.(* 255 1025) :element-type '(unsigned-byte 8) :initial-element 0)) + (arr3 (make-array #.(* 255 1025) :element-type '(unsigned-byte 8) :initial-element 0)) + (arr4 (make-array #.(* 255 1025) :element-type '(unsigned-byte 8) :initial-element 0)) res) (loop for i from 0 below (length arr1) @@ -37,19 +30,19 @@ )) (setf (aref arr3 1200) (mod (1+ (aref arr3 1200)) 256) - (aref arr4 256000) (mod (1+ (aref arr4 256000)) 256)) + (aref arr4 (- (length arr4) 2)) (mod (1+ (aref arr4 (- (length arr4) 2))) 256)) ;; (time (dotimes (i 100000) (sse-seq= arr1 arr2))) ;; (time (dotimes (i #.(/ 100000 30)) (seq= arr1 arr2))) (format t "; seq= a1 a2~%") - (time-sample-form #'(lambda () (dotimes (i (truncate test-count 30)) (setf res (seq= arr1 arr2))))) + (time-sample-form #'(lambda () (dotimes (i (truncate test-count 15)) (setf res (seq= arr1 arr2))))) (format t "; seq= a1 a3~%") - (time-sample-form #'(lambda () (dotimes (i (truncate test-count 30)) (setf res (seq= arr1 arr3))))) + (time-sample-form #'(lambda () (dotimes (i (truncate test-count 15)) (setf res (seq= arr1 arr3))))) (format t "; seq= a2 a4~%") - (time-sample-form #'(lambda () (dotimes (i (truncate test-count 30)) (setf res (seq= arr2 arr4))))) + (time-sample-form #'(lambda () (dotimes (i (truncate test-count 15)) (setf res (seq= arr2 arr4))))) (format t "; sse-seq= a1 a2~%") Index: sb-simd/sse-seq.lisp diff -u sb-simd/sse-seq.lisp:1.1 sb-simd/sse-seq.lisp:1.2 --- sb-simd/sse-seq.lisp:1.1 Fri Aug 12 13:55:39 2005 +++ sb-simd/sse-seq.lisp Fri Aug 12 16:09:53 2005 @@ -29,15 +29,15 @@ (:TEMPORARY (:SC XMM-REG) X4) (:TEMPORARY (:SC XMM-REG) X5) -;; (:TEMPORARY (:SC unsigned-reg :offset edx-offset) edx) - + (:TEMPORARY (:SC unsigned-reg :offset eax-offset :to (:result 0)) temp1) + (:TEMPORARY (:SC unsigned-reg :offset edx-offset) temp2) (:TEMPORARY (:SC unsigned-reg :offset ebx-offset) index) (:TEMPORARY (:SC unsigned-reg :offset ecx-offset) length) (:GENERATOR 10 (let ((top (gen-label)) -;; (top2 (gen-label)) + (top2 (gen-label)) (length-ok (gen-label)) (fail (gen-label)) (the-end (gen-label)) @@ -51,8 +51,7 @@ (inst jmp :eq length-ok) ;; not same length, fail - (inst mov result -1) - (inst jmp end) + (inst jmp fail) (emit-label length-ok) @@ -66,8 +65,8 @@ (inst xor index index) ;; zero eq-regs - (inst pxor x4 x4) - (inst pxor x5 x5) +;; (inst pxor x4 x4) +;; (inst pxor x5 x5) (emit-label top) @@ -75,6 +74,9 @@ (inst movdqu x0 (vect-ea seq1 index :xmmword)) (inst movdqu x1 (vect-ea seq2 index :xmmword)) + (inst pxor x4 x4) + (inst pxor x5 x5) + ;; load second blocks (inst movdqu x2 (make-ea :xmmword :base seq1 :index index @@ -91,9 +93,18 @@ ;; add index (inst add index 32) - ;; or bits to eq-regs (if not eq, some bits will be nonzero) - (inst por x4 x0) - (inst por x5 x2) + ;; check for non-equality + (inst pcmpeqd x4 x0) + (inst pcmpeqd x5 x2) + + (inst pmovmskb temp1 x4) + (inst pmovmskb temp2 x5) + + (inst cmp temp1 #x0000FFFF) + (inst jmp :ne fail) + + (inst cmp temp2 #x0000FFFF) + (inst jmp :ne fail) ;; loop (inst dec length) @@ -102,35 +113,46 @@ ;; all 256bit blocks done - ;; or each 32bit word from x4 to x5 - (inst por x4 x5) - (inst movdqa x0 x4) - (inst psrldq-ib x4 4) ;; this is number of bytes, not bits - (inst por x0 x4) + ;; check remaining bytes + (loadw length seq1 vector-length-slot other-pointer-lowtag) + (inst shr length 2) + (inst and length (1- (/ 256 8))) + + ;; no bytes left ? + (inst test length length) + (inst jmp :z end) - (inst psrldq-ib x4 4) - (inst por x0 x4) + (inst xor temp1 temp1) + (inst xor temp2 temp2) - (inst psrldq-ib x4 4) - (inst por x0 x4) + (emit-label top2) - ;; now low 32bits of x0 will be non-zero if seq's not equal + ;; test bytes + (inst movzx temp1 (vect-ea seq1 index :byte)) + (inst movzx temp2 (vect-ea seq2 index :byte)) + (inst xor temp1 temp2) + (inst inc index) - (inst movd result x0) + ;; if not zero, fail + (inst test temp1 temp1) + (inst jmp :nz fail) + + ;; loop + (inst dec length) + (inst jmp :nz top2) ;; end (emit-label end) - (inst test result result) - (inst jmp :nz fail) - (inst mov result (fixnumize 0)) (inst jmp the-end) + ;; fail (emit-label fail) (inst mov result (fixnumize 1)) - + + ;; the-end (emit-label the-end) ))) Index: sb-simd/load.lisp diff -u sb-simd/load.lisp:1.4 sb-simd/load.lisp:1.5 --- sb-simd/load.lisp:1.4 Fri Aug 12 13:55:39 2005 +++ sb-simd/load.lisp Fri Aug 12 16:09:53 2005 @@ -14,6 +14,7 @@ (if t (progn (load (compile-file "detect-simd.lisp")) + (load (compile-file "expand-parse-operand-temp-count.lisp")) (load (compile-file "timing.lisp")) (load (compile-file "sse-seq.lisp")) (load (compile-file "test-seq.lisp")) From rlaakso at common-lisp.net Wed Aug 17 14:08:57 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Wed, 17 Aug 2005 16:08:57 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: sb-simd/sbcl-src/src/compiler/x86/float.lisp sb-simd/sbcl-src/src/compiler/x86/vm.lisp Message-ID: <20050817140857.368808853E@common-lisp.net> Update of /project/sb-simd/cvsroot/sb-simd/sbcl-src/src/compiler/x86 In directory common-lisp.net:/tmp/cvs-serv1850/sbcl-src/src/compiler/x86 Modified Files: vm.lisp Added Files: float.lisp Log Message: Date: Wed Aug 17 16:08:55 2005 Author: rlaakso Index: sb-simd/sbcl-src/src/compiler/x86/vm.lisp diff -u sb-simd/sbcl-src/src/compiler/x86/vm.lisp:1.2 sb-simd/sbcl-src/src/compiler/x86/vm.lisp:1.3 --- sb-simd/sbcl-src/src/compiler/x86/vm.lisp:1.2 Fri Aug 12 13:55:38 2005 +++ sb-simd/sbcl-src/src/compiler/x86/vm.lisp Wed Aug 17 16:08:55 2005 @@ -200,6 +200,7 @@ (sap-stack stack) ; System area pointers. (single-stack stack) ; single-floats (double-stack stack :element-size 2) ; double-floats. + (xmm-stack stack :element-size 4) ; xmm #!+long-float (long-stack stack :element-size 3) ; long-floats. (complex-single-stack stack :element-size 2) ; complex-single-floats @@ -304,6 +305,12 @@ :save-p t :alternate-scs (double-stack)) + ;; non-descriptor XMMs + (xmm-reg xmm-registers + :locations #.*xmm-regs* + :save-p t + :alternate-scs (xmm-stack)) + ;; non-descriptor LONG-FLOATs #!+long-float (long-reg float-registers @@ -334,8 +341,6 @@ :save-p t :alternate-scs (complex-long-stack)) - (xmm-reg xmm-registers - :locations #.*xmm-regs*) ;; a catch or unwind block (catch-block stack :element-size kludge-nondeterministic-catch-block-size)) @@ -376,7 +381,8 @@ (def-misc-reg-tns unsigned-reg eax ebx ecx edx ebp esp edi esi) (def-misc-reg-tns word-reg ax bx cx dx bp sp di si) (def-misc-reg-tns byte-reg al ah bl bh cl ch dl dh) - (def-misc-reg-tns single-reg fr0 fr1 fr2 fr3 fr4 fr5 fr6 fr7)) + (def-misc-reg-tns single-reg fr0 fr1 fr2 fr3 fr4 fr5 fr6 fr7) + (def-misc-reg-tns xmm-reg xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7)) ;;; TNs for registers used to pass arguments (defparameter *register-arg-tns* From rlaakso at common-lisp.net Wed Aug 17 14:08:58 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Wed, 17 Aug 2005 16:08:58 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: sb-simd/sbcl-src/src-093/compiler/x86/float.lisp Message-ID: <20050817140858.230358853E@common-lisp.net> Update of /project/sb-simd/cvsroot/sb-simd/sbcl-src/src-093/compiler/x86 In directory common-lisp.net:/tmp/cvs-serv1850/sbcl-src/src-093/compiler/x86 Added Files: float.lisp Log Message: Date: Wed Aug 17 16:08:56 2005 Author: rlaakso From rlaakso at common-lisp.net Wed Aug 17 14:09:06 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Wed, 17 Aug 2005 16:09:06 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: sb-simd/sbcl-src/patch_against_sbcl_0_9_3__08082005 sb-simd/sbcl-src/patch_against_sbcl_0_9_3 Message-ID: <20050817140906.A7B168853E@common-lisp.net> Update of /project/sb-simd/cvsroot/sb-simd/sbcl-src In directory common-lisp.net:/tmp/cvs-serv1850/sbcl-src Modified Files: patch_against_sbcl_0_9_3 Added Files: patch_against_sbcl_0_9_3__08082005 Log Message: Date: Wed Aug 17 16:08:58 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.2 sb-simd/sbcl-src/patch_against_sbcl_0_9_3:1.3 --- sb-simd/sbcl-src/patch_against_sbcl_0_9_3:1.2 Mon Aug 8 15:33:25 2005 +++ sb-simd/sbcl-src/patch_against_sbcl_0_9_3 Wed Aug 17 16:08:57 2005 @@ -1,16 +1,160 @@ +diff -x 'CVS*' -Naur src-093/compiler/x86/float.lisp src/compiler/x86/float.lisp +--- src-093/compiler/x86/float.lisp 2005-08-17 16:56:53.996387102 +0300 ++++ src/compiler/x86/float.lisp 2005-08-17 15:04:50.040162831 +0300 +@@ -4308,3 +4308,122 @@ + (:note "inline dummy FP register bias") + (:ignore x) + (:generator 0)) ++ ++ ++;; XMM Moves ++ ++ ++(defun ea-for-xmm-desc (tn) ++ (make-ea :xmmword :base tn ++ :disp (- (* xmm-value-slot n-word-bytes) other-pointer-lowtag))) ++ ++(defun ea-for-xmm-stack (tn) ++ (make-ea :xmmword :base ebp-tn ++ :disp (- (* (+ (tn-offset tn) ++ 4) ++ n-word-bytes)))) ++ ++(define-move-fun (load-xmm 2) (vop x y) ++ ((xmm-stack) (xmm-reg)) ++ (inst movdqu y (ea-for-xmm-stack x))) ++ ++(define-move-fun (store-xmm 2) (vop x y) ++ ((xmm-reg) (xmm-stack)) ++ (inst movdqu (ea-for-xmm-stack y) x)) ++ ++(define-move-fun (load-xmm-single 2) (vop x y) ++ ((single-stack) (xmm-reg)) ++ (inst movss y (ea-for-sf-stack x))) ++ ++(define-move-fun (store-xmm-single 2) (vop x y) ++ ((xmm-reg) (single-stack)) ++ (inst movss (ea-for-sf-stack y) x)) ++ ++ ++(define-vop (%load-xmm-from-array/single-float) ++ (:policy :fast-safe) ++ (:args (src :scs (descriptor-reg)) ++ (index :scs (unsigned-reg))) ++ (:ARG-TYPES SIMPLE-ARRAY-SINGLE-FLOAT fixnum) ++ (:results (dest :scs (xmm-reg))) ++ (:result-types xmm) ++ (:generator 1 ++ (inst shl index 2) ++ (inst movdqu dest (make-ea :xmmword :base src :index index ++ :disp (- (* VECTOR-DATA-OFFSET N-WORD-BYTES) OTHER-POINTER-LOWTAG))))) ++ ++ ++(define-vop (%store-xmm-to-array/single-float) ++ (:policy :fast-safe) ++ (:args (dest :scs (descriptor-reg)) ++ (index :scs (unsigned-reg)) ++ (src :scs (xmm-reg))) ++ (:ARG-TYPES SIMPLE-ARRAY-SINGLE-FLOAT fixnum XMM) ++ (:generator 1 ++ (inst shl index 2) ++ (inst movdqu (make-ea :xmmword :base dest :index index ++ :disp (- (* VECTOR-DATA-OFFSET N-WORD-BYTES) OTHER-POINTER-LOWTAG)) ++ src))) ++ ++ ++(define-vop (xmm-move) ++ (:args (x :scs (xmm-reg) :target y :load-if (not (location= x y)))) ++ (:results (y :scs (xmm-reg) :load-if (not (location= x y)))) ++ (:note "xmm move") ++ (:generator 0 ++ (unless (location= x y) ++ (inst movdqa y x)))) ++ ++(define-move-vop xmm-move :move (xmm-reg) (xmm-reg)) ++ ++(define-vop (move-from-xmm) ++ (:args (x :scs (xmm-reg) :to :save)) ++ (:results (y :scs (descriptor-reg))) ++ (:node-var node) ++ (:note "xmm to pointer coercion") ++ (:generator 13 ++ (with-fixed-allocation (y ++ xmm-widetag ++ xmm-size node) ++ (inst movdqu (ea-for-xmm-desc y) x)))) ++ ++(define-move-vop move-from-xmm :move (xmm-reg) (descriptor-reg)) ++ ++(define-vop (move-to-xmm) ++ (:args (x :scs (descriptor-reg))) ++ (:results (y :scs (xmm-reg))) ++ (:note "pointer to xmm coercion") ++ (:generator 2 ++ (inst movdqu y (ea-for-xmm-desc x)))) ++ ++(define-move-vop move-to-xmm :move (descriptor-reg) (xmm-reg)) ++ ++ ++(define-vop (move-xmm-arg) ++ (:args (x :scs (xmm-reg) :target y) ++ (fp :scs (any-reg) ++ :load-if (not (sc-is y xmm-reg)))) ++ (:results (y)) ++ (:note "xmm argument move") ++ (:generator 6 ++ (sc-case y ++ (xmm-reg ++ (unless (location= x y) ++ (inst movdqa y x))) ++ ++ (xmm-stack ++ (if (= (tn-offset fp) esp-offset) ++ (let* ((offset (* (tn-offset y) n-word-bytes)) ++ (ea (make-ea :xmmword :base fp :disp offset))) ++ (inst movdqu ea x)) ++ ++ (let ((ea (make-ea :xmmword :base fp ++ :disp (- (* (+ (tn-offset y) 4) ++ n-word-bytes))))) ++ (inst movdqu ea x))))))) ++ ++(define-move-vop move-xmm-arg :move-arg (xmm-reg descriptor-reg) (xmm-reg)) ++ ++(define-move-vop move-arg :move-arg (xmm-reg) (descriptor-reg)) ++ ++ 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 @@ ++++ src/compiler/x86/insts.lisp 2005-08-16 10:39:07.027823783 +0300 +@@ -39,13 +39,16 @@ + #(ax cx dx bx sp bp si di)) + (defparameter *dword-reg-names* + #(eax ecx edx ebx esp ebp esi edi)) ++(defparameter *xmmword-reg-names* ++ #(xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7)) + + (defun print-reg-with-width (value width stream dstate) + (declare (ignore dstate)) + (princ (aref (ecase width + (:byte *byte-reg-names*) + (:word *word-reg-names*) +- (:dword *dword-reg-names*)) ++ (:dword *dword-reg-names*) ++ (:xmmword *xmmword-reg-names*)) + value) + stream) + ;; XXX plus should do some source-var notes +@@ -192,6 +195,8 @@ (:byte 8) (:word 16) (:dword 32) + (:qword 64) -+ (:dqword 128) ++ (:xmmword 128) (:float 32) (:double 64))) -@@ -671,7 +673,7 @@ +@@ -671,14 +676,14 @@ (defun reg-tn-encoding (tn) (declare (type tn tn)) @@ -19,27 +163,53 @@ (let ((offset (tn-offset tn))) (logior (ash (logand offset 1) 2) (ash offset -1)))) -@@ -718,6 +720,8 @@ + + (defstruct (ea (:constructor make-ea (size &key base index scale disp)) + (:copier nil)) +- (size nil :type (member :byte :word :dword)) ++ (size nil :type (member :byte :word :dword :xmmword)) + (base nil :type (or tn null)) + (index nil :type (or tn null)) + (scale 1 :type (member 1 2 4 8)) +@@ -718,6 +723,8 @@ (ecase (sb-name (sc-sb (tn-sc thing))) (registers (emit-mod-reg-r/m-byte segment #b11 reg (reg-tn-encoding thing))) -+ (sse-registers ++ (xmm-registers + (emit-mod-reg-r/m-byte segment #b11 reg (reg-tn-encoding thing))) (stack ;; Convert stack tns into an index off of EBP. (let ((disp (- (* (1+ (tn-offset thing)) n-word-bytes)))) -@@ -830,6 +834,10 @@ +@@ -830,6 +837,19 @@ (and (tn-p thing) (eq (sb-name (sc-sb (tn-sc thing))) 'registers))) -+(defun sse-register-p (thing) ++(defun xmm-register-p (thing) + (and (tn-p thing) -+ (eq (sb-name (sc-sb (tn-sc thing))) 'sse-registers))) ++ (eq (sb-name (sc-sb (tn-sc thing))) 'xmm-registers) ++ (member (sc-name (tn-sc thing)) *xmmword-sc-names*) ++ t)) ++ ++(defun xmm-ea-p (thing) ++ (typecase thing ++ (ea (eq (ea-size thing) :xmmword)) ++ (tn ++ (and (member (sc-name (tn-sc thing)) *xmmword-sc-names*) t)) ++ (t nil))) + (defun accumulator-p (thing) (and (register-p thing) (= (tn-offset thing) 0))) -@@ -2042,6 +2050,1339 @@ +@@ -859,6 +879,8 @@ + :float) + (#.*double-sc-names* + :double) ++ (#.*xmmword-sc-names* ++ :xmmword) + (t + (error "can't tell the size of ~S ~S" thing (sc-name (tn-sc thing)))))) + (ea +@@ -2042,6 +2064,1419 @@ (:emitter (emit-header-data segment return-pc-header-widetag))) @@ -1203,7 +1373,7 @@ + (SEGMENT DST SRC) + (:EMITTER + (COND -+ ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102) ++ ((XMM-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) @@ -1215,7 +1385,7 @@ + (SEGMENT DST SRC) + (:EMITTER + (COND -+ ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 15) ++ ((XMM-REGISTER-P DST) (EMIT-BYTE SEGMENT 15) + (EMIT-BYTE SEGMENT 40) + (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))) + (T (EMIT-BYTE SEGMENT 15) @@ -1226,7 +1396,7 @@ + (SEGMENT DST SRC) + (:EMITTER + (COND -+ ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102) ++ ((XMM-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) @@ -1238,7 +1408,7 @@ + (SEGMENT DST SRC) + (:EMITTER + (COND -+ ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102) ++ ((XMM-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) @@ -1250,7 +1420,7 @@ + (SEGMENT DST SRC) + (:EMITTER + (COND -+ ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 243) ++ ((XMM-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) @@ -1262,7 +1432,7 @@ + (SEGMENT DST SRC) + (:EMITTER + (COND -+ ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102) ++ ((XMM-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) @@ -1274,7 +1444,7 @@ + (SEGMENT DST SRC) + (:EMITTER + (COND -+ ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 15) ++ ((XMM-REGISTER-P DST) (EMIT-BYTE SEGMENT 15) + (EMIT-BYTE SEGMENT 22) + (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))) + (T (EMIT-BYTE SEGMENT 15) @@ -1285,7 +1455,7 @@ + (SEGMENT DST SRC) + (:EMITTER + (COND -+ ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102) ++ ((XMM-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) @@ -1297,7 +1467,7 @@ + (SEGMENT DST SRC) + (:EMITTER + (COND -+ ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 15) ++ ((XMM-REGISTER-P DST) (EMIT-BYTE SEGMENT 15) + (EMIT-BYTE SEGMENT 18) + (EMIT-EA SEGMENT SRC (REG-TN-ENCODING DST))) + (T (EMIT-BYTE SEGMENT 15) @@ -1308,7 +1478,7 @@ + (SEGMENT DST SRC) + (:EMITTER + (COND -+ ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 243) ++ ((XMM-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) @@ -1320,7 +1490,7 @@ + (SEGMENT DST SRC) + (:EMITTER + (COND -+ ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 242) ++ ((XMM-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) @@ -1332,7 +1502,7 @@ + (SEGMENT DST SRC) + (:EMITTER + (COND -+ ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 243) ++ ((XMM-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) @@ -1344,7 +1514,7 @@ + (SEGMENT DST SRC) + (:EMITTER + (COND -+ ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 102) ++ ((XMM-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) @@ -1356,13 +1526,93 @@ + (SEGMENT DST SRC) + (:EMITTER + (COND -+ ((SSE-REGISTER-P DST) (EMIT-BYTE SEGMENT 15) ++ ((XMM-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 PSLLD-IB ++ (SEGMENT DST AMOUNT) ++ (:EMITTER (EMIT-BYTE SEGMENT 102) ++ (EMIT-BYTE SEGMENT 15) ++ (EMIT-BYTE SEGMENT 114) ++ (EMIT-EA SEGMENT DST 6) ++ (EMIT-BYTE SEGMENT AMOUNT))) ++ ++(DEFINE-INSTRUCTION PSLLDQ-IB ++ (SEGMENT DST AMOUNT) ++ (:EMITTER (EMIT-BYTE SEGMENT 102) ++ (EMIT-BYTE SEGMENT 15) ++ (EMIT-BYTE SEGMENT 115) ++ (EMIT-EA SEGMENT DST 7) ++ (EMIT-BYTE SEGMENT AMOUNT))) ++ ++(DEFINE-INSTRUCTION PSLLQ-IB ++ (SEGMENT DST AMOUNT) ++ (:EMITTER (EMIT-BYTE SEGMENT 102) ++ (EMIT-BYTE SEGMENT 15) ++ (EMIT-BYTE SEGMENT 115) ++ (EMIT-EA SEGMENT DST 6) ++ (EMIT-BYTE SEGMENT AMOUNT))) ++ ++(DEFINE-INSTRUCTION PSLLW-IB ++ (SEGMENT DST AMOUNT) ++ (:EMITTER (EMIT-BYTE SEGMENT 102) ++ (EMIT-BYTE SEGMENT 15) ++ (EMIT-BYTE SEGMENT 113) ++ (EMIT-EA SEGMENT DST 6) ++ (EMIT-BYTE SEGMENT AMOUNT))) ++ ++(DEFINE-INSTRUCTION PSRAD-IB ++ (SEGMENT DST AMOUNT) ++ (:EMITTER (EMIT-BYTE SEGMENT 102) ++ (EMIT-BYTE SEGMENT 15) ++ (EMIT-BYTE SEGMENT 114) ++ (EMIT-EA SEGMENT DST 4) ++ (EMIT-BYTE SEGMENT AMOUNT))) ++ ++(DEFINE-INSTRUCTION PSRAW-IB ++ (SEGMENT DST AMOUNT) ++ (:EMITTER (EMIT-BYTE SEGMENT 102) ++ (EMIT-BYTE SEGMENT 15) ++ (EMIT-BYTE SEGMENT 113) ++ (EMIT-EA SEGMENT DST 4) ++ (EMIT-BYTE SEGMENT AMOUNT))) ++ ++(DEFINE-INSTRUCTION PSRLD-IB ++ (SEGMENT DST AMOUNT) ++ (:EMITTER (EMIT-BYTE SEGMENT 102) ++ (EMIT-BYTE SEGMENT 15) ++ (EMIT-BYTE SEGMENT 114) ++ (EMIT-EA SEGMENT DST 2) ++ (EMIT-BYTE SEGMENT AMOUNT))) ++ ++(DEFINE-INSTRUCTION PSRLDQ-IB ++ (SEGMENT DST AMOUNT) ++ (:EMITTER (EMIT-BYTE SEGMENT 102) ++ (EMIT-BYTE SEGMENT 15) ++ (EMIT-BYTE SEGMENT 115) ++ (EMIT-EA SEGMENT DST 3) ++ (EMIT-BYTE SEGMENT AMOUNT))) ++ ++(DEFINE-INSTRUCTION PSRLQ-IB ++ (SEGMENT DST AMOUNT) ++ (:EMITTER (EMIT-BYTE SEGMENT 102) ++ (EMIT-BYTE SEGMENT 15) ++ (EMIT-BYTE SEGMENT 115) ++ (EMIT-EA SEGMENT DST 2) ++ (EMIT-BYTE SEGMENT AMOUNT))) ++ ++(DEFINE-INSTRUCTION PSRLW-IB ++ (SEGMENT DST AMOUNT) ++ (:EMITTER (EMIT-BYTE SEGMENT 102) ++ (EMIT-BYTE SEGMENT 15) ++ (EMIT-BYTE SEGMENT 113) ++ (EMIT-EA SEGMENT DST 2) ++ (EMIT-BYTE SEGMENT AMOUNT))) ++ + + +;;; CPUID @@ -1381,14 +1631,14 @@ ;;;; FIXME: This section said "added by jrd", which should end up in CREDITS. 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 ++++ src/compiler/x86/vm.lisp 2005-08-17 13:06:11.717026836 +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)) (defvar *dword-register-names* (make-array 16 :initial-element nil)) - (defvar *float-register-names* (make-array 8 :initial-element nil))) + (defvar *float-register-names* (make-array 8 :initial-element nil)) -+ (defvar *dqword-register-names* (make-array 8 :initial-element nil))) ++ (defvar *xmmword-register-names* (make-array 8 :initial-element nil))) (macrolet ((defreg (name offset size) (let ((offset-sym (symbolicate name "-OFFSET")) @@ -1397,15 +1647,15 @@ (defregset *float-regs* fr0 fr1 fr2 fr3 fr4 fr5 fr6 fr7) + ;; sse registers -+ (defreg xmm0 0 :dqword) -+ (defreg xmm1 1 :dqword) -+ (defreg xmm2 2 :dqword) -+ (defreg xmm3 3 :dqword) -+ (defreg xmm4 4 :dqword) -+ (defreg xmm5 5 :dqword) -+ (defreg xmm6 6 :dqword) -+ (defreg xmm7 7 :dqword) -+ (defregset *sse-regs* xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7) ++ (defreg xmm0 0 :xmmword) ++ (defreg xmm1 1 :xmmword) ++ (defreg xmm2 2 :xmmword) ++ (defreg xmm3 3 :xmmword) ++ (defreg xmm4 4 :xmmword) ++ (defreg xmm5 5 :xmmword) ++ (defreg xmm6 6 :xmmword) ++ (defreg xmm7 7 :xmmword) ++ (defregset *xmm-regs* xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7) + ;; registers used to pass arguments ;; @@ -1414,33 +1664,55 @@ ;;; the new way: (define-storage-base float-registers :finite :size 8) -+(define-storage-base sse-registers :finite :size 8) ++(define-storage-base xmm-registers :finite :size 8) + (define-storage-base stack :unbounded :size 8) (define-storage-base constant :non-packed) (define-storage-base immediate-constant :non-packed) -@@ -320,6 +334,8 @@ - :save-p t - :alternate-scs (complex-long-stack)) +@@ -186,6 +200,7 @@ + (sap-stack stack) ; System area pointers. + (single-stack stack) ; single-floats + (double-stack stack :element-size 2) ; double-floats. ++ (xmm-stack stack :element-size 4) ; xmm + #!+long-float + (long-stack stack :element-size 3) ; long-floats. + (complex-single-stack stack :element-size 2) ; complex-single-floats +@@ -290,6 +305,12 @@ + :save-p t + :alternate-scs (double-stack)) -+ (sse-reg sse-registers -+ :locations #.*sse-regs*) - ;; a catch or unwind block - (catch-block stack :element-size kludge-nondeterministic-catch-block-size)) - -@@ -337,6 +353,7 @@ ++ ;; non-descriptor XMMs ++ (xmm-reg xmm-registers ++ :locations #.*xmm-regs* ++ :save-p t ++ :alternate-scs (xmm-stack)) ++ + ;; non-descriptor LONG-FLOATs + #!+long-float + (long-reg float-registers +@@ -337,6 +358,7 @@ ;;; These are used to (at least) determine operand size. (defparameter *float-sc-names* '(single-reg)) (defparameter *double-sc-names* '(double-reg double-stack)) -+(defparameter *dqword-sc-names* '(sse-reg)) ++(defparameter *xmmword-sc-names* '(xmm-reg)) ) ; EVAL-WHEN ;;;; miscellaneous TNs for the various registers -@@ -444,6 +461,7 @@ +@@ -359,7 +381,8 @@ + (def-misc-reg-tns unsigned-reg eax ebx ecx edx ebp esp edi esi) + (def-misc-reg-tns word-reg ax bx cx dx bp sp di si) + (def-misc-reg-tns byte-reg al ah bl bh cl ch dl dh) +- (def-misc-reg-tns single-reg fr0 fr1 fr2 fr3 fr4 fr5 fr6 fr7)) ++ (def-misc-reg-tns single-reg fr0 fr1 fr2 fr3 fr4 fr5 fr6 fr7) ++ (def-misc-reg-tns xmm-reg xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7)) + + ;;; TNs for registers used to pass arguments + (defparameter *register-arg-tns* +@@ -444,6 +467,7 @@ ;; FIXME: Shouldn't this be an ERROR? (format nil "" offset sc-name)))) (float-registers (format nil "FR~D" offset)) -+ (sse-registers (format nil "XMM~D" offset)) ++ (xmm-registers (format nil "XMM~D" offset)) (stack (format nil "S~D" offset)) (constant (format nil "Const~D" offset)) (immediate-constant "Immed") From rlaakso at common-lisp.net Wed Aug 17 14:09:14 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Wed, 17 Aug 2005 16:09:14 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: sb-simd/test-vector.lisp sb-simd/sse-vector.lisp sb-simd/sse-moves.lisp sb-simd/sse-matrix.lisp sb-simd/load.lisp sb-simd/generate-sse-vops.lisp sb-simd/generate-sse-instructions.lisp Message-ID: <20050817140914.5CB8D8853E@common-lisp.net> Update of /project/sb-simd/cvsroot/sb-simd In directory common-lisp.net:/tmp/cvs-serv1850 Modified Files: sse-matrix.lisp load.lisp generate-sse-vops.lisp generate-sse-instructions.lisp Added Files: test-vector.lisp sse-vector.lisp sse-moves.lisp Log Message: Date: Wed Aug 17 16:09:06 2005 Author: rlaakso Index: sb-simd/sse-matrix.lisp diff -u sb-simd/sse-matrix.lisp:1.1 sb-simd/sse-matrix.lisp:1.2 --- sb-simd/sse-matrix.lisp:1.1 Tue Aug 9 11:45:36 2005 +++ sb-simd/sse-matrix.lisp Wed Aug 17 16:09:06 2005 @@ -51,14 +51,14 @@ SIMPLE-ARRAY-SINGLE-FLOAT SIMPLE-ARRAY-SINGLE-FLOAT) - (:TEMPORARY (:SC SSE-REG) X0) - (:TEMPORARY (:SC SSE-REG) X1) - (:TEMPORARY (:SC SSE-REG) X2) - (:TEMPORARY (:SC SSE-REG) X3) - (:TEMPORARY (:SC SSE-REG) X4) - (:TEMPORARY (:SC SSE-REG) X5) - (:TEMPORARY (:SC SSE-REG) X6) - (:TEMPORARY (:SC SSE-REG) X7) + (:TEMPORARY (:SC XMM-REG) X0) + (:TEMPORARY (:SC XMM-REG) X1) + (:TEMPORARY (:SC XMM-REG) X2) + (:TEMPORARY (:SC XMM-REG) X3) + (:TEMPORARY (:SC XMM-REG) X4) + (:TEMPORARY (:SC XMM-REG) X5) + (:TEMPORARY (:SC XMM-REG) X6) + (:TEMPORARY (:SC XMM-REG) X7) (:GENERATOR 10 (inst movss x2 (vect-ea mat2 32)) Index: sb-simd/load.lisp diff -u sb-simd/load.lisp:1.5 sb-simd/load.lisp:1.6 --- sb-simd/load.lisp:1.5 Fri Aug 12 16:09:53 2005 +++ sb-simd/load.lisp Wed Aug 17 16:09:06 2005 @@ -11,12 +11,22 @@ (load (compile-file "test-matrix.lisp")) )) -(if t +(if nil (progn (load (compile-file "detect-simd.lisp")) (load (compile-file "expand-parse-operand-temp-count.lisp")) (load (compile-file "timing.lisp")) (load (compile-file "sse-seq.lisp")) (load (compile-file "test-seq.lisp")) + )) + +(if t + (progn + (load (compile-file "detect-simd.lisp")) + (load (compile-file "sse-moves.lisp")) + (load (compile-file "expand-parse-operand-temp-count.lisp")) + (load (compile-file "timing.lisp")) + (load (compile-file "sse-vector.lisp")) + (load (compile-file "test-vector.lisp")) )) Index: sb-simd/generate-sse-vops.lisp diff -u sb-simd/generate-sse-vops.lisp:1.3 sb-simd/generate-sse-vops.lisp:1.4 --- sb-simd/generate-sse-vops.lisp:1.3 Mon Aug 8 19:26:08 2005 +++ sb-simd/generate-sse-vops.lisp Wed Aug 17 16:09:06 2005 @@ -132,8 +132,8 @@ ,(intern (format nil "SIMPLE-ARRAY-~A" type)) fixnum) - (:temporary (:sc sse-reg) sse-temp1) - (:temporary (:sc sse-reg) sse-temp2) + (:temporary (:sc xmm-reg) sse-temp1) + (:temporary (:sc xmm-reg) sse-temp2) (:generator 10 @@ -186,8 +186,8 @@ ,(intern (format nil "SIMPLE-ARRAY-~A" type2)) fixnum) - (:temporary (:sc sse-reg) sse-temp1) - (:temporary (:sc sse-reg) sse-temp2) + (:temporary (:sc xmm-reg) sse-temp1) + (:temporary (:sc xmm-reg) sse-temp2) (:generator 10 @@ -233,8 +233,8 @@ ,(intern (format nil "SIMPLE-ARRAY-~A" type)) fixnum) - (:temporary (:sc sse-reg) sse-temp1) - (:temporary (:sc sse-reg) sse-temp2) + (:temporary (:sc xmm-reg) sse-temp1) + (:temporary (:sc xmm-reg) sse-temp2) (:generator 10 @@ -283,8 +283,8 @@ (:constant keyword) ) - (:temporary (:sc sse-reg) sse-temp1) - (:temporary (:sc sse-reg) sse-temp2) + (:temporary (:sc xmm-reg) sse-temp1) + (:temporary (:sc xmm-reg) sse-temp2) (:generator 10 Index: sb-simd/generate-sse-instructions.lisp diff -u sb-simd/generate-sse-instructions.lisp:1.6 sb-simd/generate-sse-instructions.lisp:1.7 --- sb-simd/generate-sse-instructions.lisp:1.6 Fri Aug 12 13:55:39 2005 +++ sb-simd/generate-sse-instructions.lisp Wed Aug 17 16:09:06 2005 @@ -323,7 +323,7 @@ (format stream "~S~%~%" `(define-instruction ,(intern (symbol-name inst)) (segment dst src) (:emitter - (cond ((sse-register-p dst) + (cond ((xmm-register-p dst) ,@(emit-ops ops-m2r) (emit-ea segment src (reg-tn-encoding dst))) (t ,@(emit-ops ops-r2m) From rlaakso at common-lisp.net Wed Aug 17 14:09:35 2005 From: rlaakso at common-lisp.net (Risto Laakso) Date: Wed, 17 Aug 2005 16:09:35 +0200 (CEST) Subject: [sb-simd-cvs] CVS update: sb-simd/push-simd-features.lisp sb-simd/expand-parse-operand-temp-count.lisp Message-ID: <20050817140935.34D8E8853E@common-lisp.net> Update of /project/sb-simd/cvsroot/sb-simd In directory common-lisp.net:/tmp/cvs-serv1916 Modified Files: push-simd-features.lisp expand-parse-operand-temp-count.lisp Log Message: Date: Wed Aug 17 16:09:34 2005 Author: rlaakso Index: sb-simd/push-simd-features.lisp diff -u sb-simd/push-simd-features.lisp:1.1 sb-simd/push-simd-features.lisp:1.2 --- sb-simd/push-simd-features.lisp:1.1 Fri Aug 12 16:09:53 2005 +++ sb-simd/push-simd-features.lisp Wed Aug 17 16:09:34 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-vm) (eval-when (:load-toplevel) Index: sb-simd/expand-parse-operand-temp-count.lisp diff -u sb-simd/expand-parse-operand-temp-count.lisp:1.1 sb-simd/expand-parse-operand-temp-count.lisp:1.2 --- sb-simd/expand-parse-operand-temp-count.lisp:1.1 Fri Aug 12 16:09:53 2005 +++ sb-simd/expand-parse-operand-temp-count.lisp Wed Aug 17 16:09:34 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) (setf *parse-vop-operand-count* 1)