X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fhppa%2Fsystem.lisp;h=824632326681a3b10272cccaeb9f8dfd32bc5c9e;hb=389b5755b2eab960c1f4c14045a26de5dbd510c1;hp=d231f11941dfbccf2cf50946d10f342c711f9dc6;hpb=8a19c6876412b8ad1cf729297c2a373d63a0d0ec;p=sbcl.git diff --git a/src/compiler/hppa/system.lisp b/src/compiler/hppa/system.lisp index d231f11..8246323 100644 --- a/src/compiler/hppa/system.lisp +++ b/src/compiler/hppa/system.lisp @@ -30,10 +30,10 @@ FUNCTION-PTR (load-type result object (- fun-pointer-lowtag)) (inst nop :tr) - + OTHER-PTR (load-type result object (- other-pointer-lowtag)) - + DONE)) (define-vop (fun-subtype) @@ -49,7 +49,7 @@ (:translate (setf fun-subtype)) (:policy :fast-safe) (:args (type :scs (unsigned-reg) :target result) - (function :scs (descriptor-reg))) + (function :scs (descriptor-reg))) (:arg-types positive-fixnum *) (:results (result :scs (unsigned-reg))) (:result-types positive-fixnum) @@ -81,7 +81,7 @@ (:translate set-header-data) (:policy :fast-safe) (:args (x :scs (descriptor-reg) :target res) - (data :scs (unsigned-reg))) + (data :scs (unsigned-reg))) (:arg-types * positive-fixnum) (:results (res :scs (descriptor-reg))) (:temporary (:scs (non-descriptor-reg)) temp) @@ -105,18 +105,19 @@ (storew temp x 0 other-pointer-lowtag) (move x res))) -(define-vop (make-fixnum) +(define-vop (pointer-hash) + (:translate pointer-hash) (:args (ptr :scs (any-reg descriptor-reg))) (:results (res :scs (any-reg descriptor-reg))) + (:policy :fast-safe) (:generator 1 - ;; - ;; Some code (the hash table code) depends on this returning a - ;; positive number so make sure it does. + ;; FIXME: It would be better if this would mask the lowtag, + ;; and shift the result into a positive fixnum like on x86. (inst zdep ptr 29 29 res))) (define-vop (make-other-immediate-type) (:args (val :scs (any-reg descriptor-reg)) - (type :scs (any-reg descriptor-reg) :target temp)) + (type :scs (any-reg descriptor-reg) :target temp)) (:results (res :scs (any-reg descriptor-reg) :from (:argument 0))) (:temporary (:scs (non-descriptor-reg)) temp) (:generator 2 @@ -170,7 +171,7 @@ (define-vop (compute-fun) (:args (code :scs (descriptor-reg)) - (offset :scs (signed-reg unsigned-reg))) + (offset :scs (signed-reg unsigned-reg))) (:arg-types * positive-fixnum) (:results (func :scs (descriptor-reg))) (:temporary (:scs (non-descriptor-reg)) ndescr) @@ -186,10 +187,10 @@ ;;;; Other random VOPs. -(defknown sb!unix::do-pending-interrupt () (values)) -(define-vop (sb!unix::do-pending-interrupt) +(defknown sb!unix::receive-pending-interrupt () (values)) +(define-vop (sb!unix::receive-pending-interrupt) (:policy :fast-safe) - (:translate sb!unix::do-pending-interrupt) + (:translate sb!unix::receive-pending-interrupt) (:generator 1 (inst break pending-interrupt-trap))) @@ -207,7 +208,7 @@ (:temporary (:scs (non-descriptor-reg)) count) (:generator 1 (let ((offset - (- (* (+ index vector-data-offset) n-word-bytes) other-pointer-lowtag))) + (- (* (+ index vector-data-offset) n-word-bytes) other-pointer-lowtag))) (inst ldw offset count-vector count) (inst addi 1 count count) (inst stw count offset count-vector))))