X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fx86%2Fsystem.lisp;h=96ca14dcf2b0277d658c75a04774693585527662;hb=daf0a41203bc60a9c81c8052123a97ef328e23ec;hp=b9e9c5fbf0f443f6d7ee6b2d8847508a997226d9;hpb=4d5a8689d1d303f65c2fa933bb8757063641a8f9;p=sbcl.git diff --git a/src/compiler/x86/system.lisp b/src/compiler/x86/system.lisp index b9e9c5f..96ca14d 100644 --- a/src/compiler/x86/system.lisp +++ b/src/compiler/x86/system.lisp @@ -85,9 +85,7 @@ (:result-types positive-fixnum) (:generator 6 (move eax type) - (inst mov - (make-ea :byte :base function :disp (- fun-pointer-lowtag)) - al-tn) + (storeb al-tn function 0 fun-pointer-lowtag) (move result eax))) (define-vop (get-header-data) @@ -232,9 +230,6 @@ (define-source-transform %closure-fun (closure) `(%simple-fun-self ,closure)) -(define-source-transform %funcallable-instance-fun (fin) - `(%simple-fun-self ,fin)) - (define-vop (%set-fun-self) (:policy :fast-safe) (:translate (setf %simple-fun-self)) @@ -243,26 +238,10 @@ (:temporary (:sc any-reg :from (:argument 0) :to :result) temp) (:results (result :scs (descriptor-reg))) (:generator 3 - (inst lea temp - (make-ea :byte :base new-self - :disp (- (ash simple-fun-code-offset word-shift) - fun-pointer-lowtag))) + (inst lea temp (make-ea-for-object-slot new-self simple-fun-code-offset + fun-pointer-lowtag)) (storew temp function simple-fun-self-slot fun-pointer-lowtag) (move result new-self))) - -;;; KLUDGE: This seems to be some kind of weird override of the way -;;; that the objdef.lisp code would ordinarily set up the slot -;;; accessor. It's inherited from CMU CL, and it works, and naively -;;; deleting it seemed to cause problems, but it's not obvious why -;;; it's done this way. Any ideas? -- WHN 2001-08-02 -(defknown ((setf %funcallable-instance-fun)) (function function) function - (unsafe)) -;;; CMU CL comment: -;;; We would have really liked to use a source-transform for this, but -;;; they don't work with SETF functions. -;;; FIXME: Can't we just use DEFSETF or something? -(deftransform (setf %funcallable-instance-fun) ((value fin)) - '(setf (%simple-fun-self fin) value)) ;;;; other miscellaneous VOPs @@ -310,6 +289,4 @@ (:args (count-vector :scs (descriptor-reg))) (:info index) (:generator 0 - (inst inc (make-ea :dword :base count-vector - :disp (- (* (+ vector-data-offset index) n-word-bytes) - other-pointer-lowtag))))) + (inst inc (make-ea-for-vector-data count-vector :offset index))))