diff --git a/compiler/mips/system.lisp b/compiler/mips/system.lisp index d4b11a9101bb07c391369e81cb4f2c92fdb118bc..ceb9272dfeaca4281ce0fa97121ff9a934e28060 100644 --- a/compiler/mips/system.lisp +++ b/compiler/mips/system.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman (FAHLMAN@CMUC). ;;; ********************************************************************** ;;; -;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/system.lisp,v 1.18 1990/05/27 16:50:48 ch Exp $ +;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/system.lisp,v 1.19 1990/05/31 00:22:55 wlott Exp $ ;;; ;;; MIPS VM definitions of various system hacking operations. ;;; @@ -74,9 +74,12 @@ (:results (result :scs (any-reg descriptor-reg))) (:generator 10 (let ((other-ptr (gen-label)) - (shift (gen-label))) + (shift (gen-label)) + (function-ptr (gen-label))) (simple-test-simple-type object ndescr other-ptr nil vm:other-pointer-type) + (simple-test-simple-type object ndescr function-ptr + nil vm:function-pointer-type) (inst and ndescr object (logand (logeqv vm:other-immediate-0-type vm:other-immediate-1-type) vm:lowtag-mask)) @@ -88,6 +91,11 @@ (inst b shift) (inst and ndescr object vm:type-mask) + (emit-label function-ptr) + (load-type ndescr object (- vm:function-pointer-type)) + (inst b shift) + (inst nop) + (emit-label other-ptr) (load-type ndescr object (- vm:other-pointer-type)) (inst nop) @@ -168,7 +176,7 @@ (loadw ndescr code 0 vm:other-pointer-type) (inst srl ndescr vm:type-bits) (inst sll ndescr vm:word-shift) - (inst subu ndescr vm:code-header-type) + (inst subu ndescr vm:other-pointer-type) (inst addu sap code ndescr))) (define-vop (compute-function)