diff --git a/compiler/old-rt/char.lisp b/compiler/old-rt/char.lisp index 4254d0f70fcbb2b1a5782a6bfadae152a62614d0..a99f45f7d9968fade5da3521f59b0b6ccf21c45f 100644 --- a/compiler/old-rt/char.lisp +++ b/compiler/old-rt/char.lisp @@ -30,7 +30,8 @@ (unless (location= x y) (inst lr y x)))) ;;; -(define-move-vop string-char-move :move (string-char-reg) (string-char-reg)) +(define-move-vop string-char-move :move + (string-char-reg) (string-char-reg)) ;;; Move untagged string-char arguments/return-values. @@ -98,6 +99,22 @@ (unless (location= code res) (inst lr res code)))) + +(define-vop (pointer-compare) + (:args (x :scs (any-reg descriptor-reg)) + (y :scs (any-reg descriptor-reg))) + (:conditional) + (:info target not-p) + (:policy :fast-safe) + (:note "inline comparison") + (:variant-vars condition) + (:generator 3 + (inst cl x y) + (if not-p + (inst bnb condition target) + (inst bb condition target)))) + + ;;; For comparison of string-chars, we require both operands to be in the ;;; untagged string-char-reg representation. This will be a pessimization if ;;; both operands are tagged, but this won't happen often, and not in