[sb-simd-cvs] CVS update: sb-simd/sbcl-src/src/compiler/x86/vm.lisp sb-simd/sbcl-src/src/compiler/x86/insts.lisp
Risto Laakso
rlaakso at common-lisp.net
Fri Aug 12 11:55:40 UTC 2005
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 "<unknown reg: off=~W, sc=~A>" 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)))
More information about the Sb-simd-cvs
mailing list