X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fmips%2Fchar.lisp;h=63775abe57d264f934dfcde66a6a5599b0536fe2;hb=74cf7a4d01664fbf72a662ba093ad67ca243b524;hp=b7d4e940e939f0b88844fbd5be14dc57b0dc2a61;hpb=bbfff61cef2c6fe35929d46283f3e56fb0fe98b1;p=sbcl.git diff --git a/src/compiler/mips/char.lisp b/src/compiler/mips/char.lisp index b7d4e94..63775ab 100644 --- a/src/compiler/mips/char.lisp +++ b/src/compiler/mips/char.lisp @@ -17,19 +17,22 @@ (define-vop (move-to-character) (:args (x :scs (any-reg descriptor-reg))) (:results (y :scs (character-reg))) + (:note "character untagging") (:generator 1 (inst srl y x n-widetag-bits))) + (define-move-vop move-to-character :move (any-reg descriptor-reg) (character-reg)) - ;;; Move an untagged char to a tagged representation. (define-vop (move-from-character) (:args (x :scs (character-reg))) (:results (y :scs (any-reg descriptor-reg))) + (:note "character tagging") (:generator 1 (inst sll y x n-widetag-bits) - (inst or y y character-widetag))) + (inst or y character-widetag))) + (define-move-vop move-from-character :move (character-reg) (any-reg descriptor-reg)) @@ -40,10 +43,12 @@ :load-if (not (location= x y)))) (:results (y :scs (character-reg) :load-if (not (location= x y)))) + (:note "character move") (:effects) (:affected) (:generator 0 (move y x))) + (define-move-vop character-move :move (character-reg) (character-reg)) @@ -54,12 +59,14 @@ (fp :scs (any-reg) :load-if (not (sc-is y character-reg)))) (:results (y)) + (:note "character arg move") (:generator 0 (sc-case y (character-reg (move y x)) (character-stack (storew x fp (tn-offset y)))))) + (define-move-vop move-character-arg :move-arg (any-reg character-reg) (character-reg)) @@ -77,7 +84,7 @@ (:results (res :scs (any-reg))) (:result-types positive-fixnum) (:generator 1 - (inst sll res ch 2))) + (inst sll res ch n-fixnum-tag-bits))) (define-vop (code-char) (:translate code-char) @@ -87,11 +94,9 @@ (:results (res :scs (character-reg))) (:result-types character) (:generator 1 - (inst srl res code 2))) - + (inst srl res code n-fixnum-tag-bits))) ;;; Comparison of characters. -;;; (define-vop (character-compare) (:args (x :scs (character-reg)) (y :scs (character-reg)))