diff --git a/compiler/x86/insts.lisp b/compiler/x86/insts.lisp index a9b70f427341088a8d431a97a18c8c83088348dc..88dd8799de58ee36c0ac68a0cef520cb1aab457c 100644 --- a/compiler/x86/insts.lisp +++ b/compiler/x86/insts.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman or slisp-group@cs.cmu.edu. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/x86/insts.lisp,v 1.15 1998/02/15 20:24:43 dtc Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/x86/insts.lisp,v 1.16 1998/02/24 09:59:21 dtc Exp $") ;;; ;;; ********************************************************************** ;;; @@ -795,8 +795,7 @@ :default-printer `(:name :tab reg/mem)) (prefix :field (byte 5 3) :value #b11011) (op :fields (list (byte 3 0) (byte 3 11))) - (reg/mem :fields (list (byte 2 14) (byte 3 8)) :type 'reg/mem) - ) + (reg/mem :fields (list (byte 2 14) (byte 3 8)) :type 'reg/mem)) ;;; ;;; fp insn to/from fp reg @@ -806,8 +805,7 @@ (prefix :field (byte 5 3) :value #b11011) (suffix :field (byte 2 14) :value #b11) (op :fields (list (byte 3 0) (byte 3 11))) - (fp-reg :field (byte 3 8) :type 'fp-reg) - ) + (fp-reg :field (byte 3 8) :type 'fp-reg)) ;;; ;;; fp insn to/from fp reg, with the reversed source/destination flag. @@ -819,8 +817,7 @@ (suffix :field (byte 2 14) :value #b11) (op :fields (list (byte 2 0) (byte 3 11))) (d :field (byte 1 2)) - (fp-reg :field (byte 3 8) :type 'fp-reg) - ) + (fp-reg :field (byte 3 8) :type 'fp-reg)) ;;; pfw @@ -832,6 +829,12 @@ (suffix :field (byte 3 13) :value #b111) (op :field (byte 5 8))) +(disassem:define-instruction-format (floating-point-3 16 + :default-printer '(:name)) + (prefix :field (byte 5 3) :value #b11011) + (suffix :field (byte 2 14) :value #b11) + (op :fields (list (byte 3 0) (byte 6 8)))) + (disassem:define-instruction-format (floating-point-5 16 :default-printer '(:name)) (prefix :field (byte 8 0) :value #b11011011) @@ -2596,13 +2599,13 @@ ;;; ;;; Comparison ;;; -(define-instruction fcom(segment src) +(define-instruction fcom (segment src) (:printer floating-point ((op '(#b000 #b010)))) (:emitter (emit-byte segment #b11011000) (emit-fp-op segment src #b010))) -(define-instruction fcomd(segment src) +(define-instruction fcomd (segment src) (:printer floating-point ((op '(#b100 #b010)))) (:printer floating-point-fp ((op '(#b000 #b010)))) (:emitter @@ -2611,10 +2614,17 @@ (emit-byte segment #b11011100)) (emit-fp-op segment src #b010))) +;;; Compare ST1 to ST0, popping the stack twice. +(define-instruction fcompp (segment) + (:printer floating-point-3 ((op '(#b110 #b011001)))) + (:emitter + (emit-byte segment #b11011110) + (emit-byte segment #b11011001))) + ;;; ;;; Unordered comparison ;;; -(define-instruction fucom(segment src) +(define-instruction fucom (segment src) ;; XX Printer conflicts with frstor ;; (:printer floating-point ((op '(#b101 #b100)))) (:emitter