X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fx86%2Fmemory.lisp;h=ca8c2e28b0dc9328a3f117620e6b7c3d206e2640;hb=b7a8f5313a83dea33ce60551a4fb987b415c2cc6;hp=8c34a659291a959e019321d5a4dd1a7dfe5f81eb;hpb=adf0d51d2bde8b723276bacf94641df9aa5ae561;p=sbcl.git diff --git a/src/compiler/x86/memory.lisp b/src/compiler/x86/memory.lisp index 8c34a65..ca8c2e2 100644 --- a/src/compiler/x86/memory.lisp +++ b/src/compiler/x86/memory.lisp @@ -12,14 +12,11 @@ (in-package "SB!VM") -(file-comment - "$Header$") - -;;; Cell-Ref and Cell-Set are used to define VOPs like CAR, where the +;;; CELL-REF and CELL-SET are used to define VOPs like CAR, where the ;;; offset to be read or written is a property of the VOP used. -;;; Cell-Setf is similar to Cell-Set, but delivers the new value as -;;; the result. Cell-Setf-Function takes its arguments as if it were a -;;; setf function (new value first, as apposed to a setf macro, which +;;; CELL-SETF is similar to CELL-SET, but delivers the new value as +;;; the result. CELL-SETF-FUN takes its arguments as if it were a +;;; SETF function (new value first, as apposed to a SETF macro, which ;;; takes the new value last). (define-vop (cell-ref) (:args (object :scs (descriptor-reg))) @@ -44,7 +41,7 @@ (:generator 4 (storew value object offset lowtag) (move result value))) -(define-vop (cell-setf-function) +(define-vop (cell-setf-fun) (:args (value :scs (descriptor-reg any-reg) :target result) (object :scs (descriptor-reg))) (:results (result :scs (descriptor-reg any-reg))) @@ -54,9 +51,9 @@ (storew value object offset lowtag) (move result value))) -;;; Define accessor VOPs for some cells in an object. If the operation name -;;; is NIL, then that operation isn't defined. If the translate function is -;;; null, then we don't define a translation. +;;; Define accessor VOPs for some cells in an object. If the operation +;;; name is NIL, then that operation isn't defined. If the translate +;;; function is null, then we don't define a translation. (defmacro define-cell-accessors (offset lowtag ref-op ref-trans set-op set-trans) `(progn @@ -82,11 +79,12 @@ (:generator 4 (move result value) (inst xadd (make-ea :dword :base object - :disp (- (* offset word-bytes) lowtag)) + :disp (- (* offset n-word-bytes) lowtag)) value))) -;;; Slot-Ref and Slot-Set are used to define VOPs like Closure-Ref, where the -;;; offset is constant at compile time, but varies for different uses. +;;; SLOT-REF and SLOT-SET are used to define VOPs like CLOSURE-REF, +;;; where the offset is constant at compile time, but varies for +;;; different uses. (define-vop (slot-ref) (:args (object :scs (descriptor-reg))) (:results (value :scs (descriptor-reg any-reg))) @@ -106,19 +104,19 @@ (integer (inst mov (make-ea :dword :base object - :disp (- (* (+ base offset) word-bytes) lowtag)) + :disp (- (* (+ base offset) n-word-bytes) lowtag)) (fixnumize val))) (symbol (inst mov (make-ea :dword :base object - :disp (- (* (+ base offset) word-bytes) lowtag)) + :disp (- (* (+ base offset) n-word-bytes) lowtag)) (+ nil-value (static-symbol-offset val)))) (character (inst mov (make-ea :dword :base object - :disp (- (* (+ base offset) word-bytes) lowtag)) - (logior (ash (char-code val) type-bits) - base-char-type))))) + :disp (- (* (+ base offset) n-word-bytes) lowtag)) + (logior (ash (char-code val) n-widetag-bits) + base-char-widetag))))) ;; Else, value not immediate. (storew value object (+ base offset) lowtag)))) @@ -136,7 +134,7 @@ (move eax old-value) (move temp new-value) (inst cmpxchg (make-ea :dword :base object - :disp (- (* (+ base offset) word-bytes) lowtag)) + :disp (- (* (+ base offset) n-word-bytes) lowtag)) temp) (move result eax))) @@ -151,5 +149,5 @@ (:generator 4 (move result value) (inst xadd (make-ea :dword :base object - :disp (- (* (+ base offset) word-bytes) lowtag)) + :disp (- (* (+ base offset) n-word-bytes) lowtag)) value)))