1.0.31.24: add BSWAP instruction for x86
authorNathan Froyd <froydnj@cs.rice.edu>
Tue, 29 Sep 2009 01:24:23 +0000 (01:24 +0000)
committerNathan Froyd <froydnj@cs.rice.edu>
Tue, 29 Sep 2009 01:24:23 +0000 (01:24 +0000)
Kinda weird, lifting code for x86 from x86-64...

src/compiler/x86/insts.lisp
version.lisp-expr

index 2479299..4edb1a4 100644 (file)
   ;; optional fields
   (imm))
 
   ;; optional fields
   (imm))
 
+;;; reg-no-width with #x0f prefix
+(sb!disassem:define-instruction-format (ext-reg-no-width 16
+                                        :default-printer '(:name :tab reg))
+  (prefix  :field (byte 8 0)    :value #b00001111)
+  (op    :field (byte 5 11))
+  (reg   :field (byte 3 8) :type 'reg))
+
 ;;; Same as reg/mem, but with a prefix of #b00001111
 (sb!disassem:define-instruction-format (ext-reg/mem 24
                                         :default-printer '(:name :tab reg/mem))
 ;;; Same as reg/mem, but with a prefix of #b00001111
 (sb!disassem:define-instruction-format (ext-reg/mem 24
                                         :default-printer '(:name :tab reg/mem))
    (emit-byte segment #b11010100)
    (emit-byte segment #b00001010)))
 
    (emit-byte segment #b11010100)
    (emit-byte segment #b00001010)))
 
+(define-instruction bswap (segment dst)
+  (:printer ext-reg-no-width ((op #b11001)))
+  (:emitter
+   (emit-byte segment #x0f)
+   (emit-byte-with-reg segment #b11001 (reg-tn-encoding dst))))
+
 ;;; CBW -- Convert Byte to Word. AX <- sign_xtnd(AL)
 (define-instruction cbw (segment)
   (:printer two-bytes ((op '(#b01100110 #b10011000))))
 ;;; CBW -- Convert Byte to Word. AX <- sign_xtnd(AL)
 (define-instruction cbw (segment)
   (:printer two-bytes ((op '(#b01100110 #b10011000))))
index 4a273fc..25ce88e 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.31.23"
+"1.0.31.24"