Skip to content
Snippets Groups Projects
Commit c558cadd authored by toy's avatar toy
Browse files

Add vops for CHAR=, CHAR<, and CHAR< when the second arg is a constant

character.  Saves an instruction.  (From a request from Gilbert
Baumann, with code from Christophe Rhodes, on #lisp.)
parent 8d4b9888
No related branches found
No related tags found
No related merge requests found
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
;;; Carnegie Mellon University, and has been placed in the public domain. ;;; Carnegie Mellon University, and has been placed in the public domain.
;;; ;;;
(ext:file-comment (ext:file-comment
"$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/char.lisp,v 1.9 2001/09/25 21:28:34 toy Exp $") "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/char.lisp,v 1.10 2003/07/01 18:47:01 toy Exp $")
;;; ;;;
;;; ********************************************************************** ;;; **********************************************************************
;;; ;;;
...@@ -145,3 +145,28 @@ ...@@ -145,3 +145,28 @@
(:translate char>) (:translate char>)
(:variant :gtu :leu)) (:variant :gtu :leu))
(define-vop (base-char-compare-c)
(:args (x :scs (base-char-reg)))
(:arg-types base-char (:constant base-char))
(:conditional)
(:info target not-p y)
(:policy :fast-safe)
(:note "inline comparison")
(:variant-vars condition not-condition)
(:generator 2
(inst cmp x (char-code y))
(inst b (if not-p not-condition condition) target)
(inst nop)))
(define-vop (fast-char=-c/base-char base-char-compare-c)
(:translate char=)
(:variant :eq :ne))
(define-vop (fast-char<-c/base-char base-char-compare-c)
(:translate char<)
(:variant :ltu :geu))
(define-vop (fast-char>-c/base-char/c base-char-compare-c)
(:translate char>)
(:variant :gtu :leu))
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
;;; Scott Fahlman or slisp-group@cs.cmu.edu. ;;; Scott Fahlman or slisp-group@cs.cmu.edu.
;;; ;;;
(ext:file-comment (ext:file-comment
"$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/x86/char.lisp,v 1.4 1998/02/19 19:34:52 dtc Exp $") "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/x86/char.lisp,v 1.5 2003/07/01 18:47:01 toy Exp $")
;;; ;;;
;;; ********************************************************************** ;;; **********************************************************************
;;; ;;;
...@@ -170,3 +170,27 @@ ...@@ -170,3 +170,27 @@
(:translate char>) (:translate char>)
(:variant :a :na)) (:variant :a :na))
(define-vop (base-char-compare-c)
(:args (x :scs (base-char-reg)))
(:arg-types base-char (:constant base-char))
(:conditional)
(:info target not-p y)
(:policy :fast-safe)
(:note "inline comparison")
(:variant-vars condition not-condition)
(:generator 2
(inst cmp x (char-code y))
(inst jump (if not-p not-condition condition) target)))
(define-vop (fast-char=-c/base-char base-char-compare-c)
(:translate char=)
(:variant :eq :ne))
(define-vop (fast-char<-c/base-char base-char-compare-c)
(:translate char<)
(:variant :ltu :geu))
(define-vop (fast-char>-c/base-char/c base-char-compare-c)
(:translate char>)
(:variant :gtu :leu))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment