X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fsparc%2Fchar.lisp;h=7438fd913452fb31b8148371b02dd9466e756f5a;hb=9cc049e3ccf2650dbb867b6f651626cf67a5a993;hp=bce3b4166ee2da800b7ee69782bc35da02b01ccf;hpb=68fd2d2dd6f265669a8957accd8a33e62786a97e;p=sbcl.git diff --git a/src/compiler/sparc/char.lisp b/src/compiler/sparc/char.lisp index bce3b41..7438fd9 100644 --- a/src/compiler/sparc/char.lisp +++ b/src/compiler/sparc/char.lisp @@ -90,7 +90,7 @@ (:results (res :scs (any-reg))) (:result-types positive-fixnum) (:generator 1 - (inst sll res ch fixnum-tag-bits))) + (inst sll res ch n-fixnum-tag-bits))) (define-vop (code-char) (:translate code-char) @@ -100,7 +100,7 @@ (:results (res :scs (base-char-reg))) (:result-types base-char) (:generator 1 - (inst srl res code fixnum-tag-bits))) + (inst srl res code n-fixnum-tag-bits))) ;;; Comparison of base-chars. @@ -129,3 +129,28 @@ (define-vop (fast-char>/base-char base-char-compare) (:translate char>) (: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 constant comparison") + (:variant-vars condition not-condition) + (:generator 2 + (inst cmp x (sb!xc:char-code y)) + (inst b (if not-p not-condition condition) target) + (inst nop))) + +(define-vop (fast-char=/base-char/c base-char-compare/c) + (:translate char=) + (:variant :eq :ne)) + +(define-vop (fast-char/base-char/c base-char-compare/c) + (:translate char>) + (:variant :gtu :leu))