0.9.2.47:
[sbcl.git] / src / compiler / x86 / sap.lisp
index dda9c16..7de8ab9 100644 (file)
@@ -30,7 +30,7 @@
   (:note "SAP to pointer coercion")
   (:node-var node)
   (:generator 20
-    (with-fixed-allocation (res sap-type sap-size node)
+    (with-fixed-allocation (res sap-widetag sap-size node)
       (storew sap res sap-pointer-slot other-pointer-lowtag))))
 (define-move-vop move-from-sap :move
   (sap-reg) (descriptor-reg))
@@ -51,7 +51,7 @@
   (sap-reg) (sap-reg))
 
 ;;; Move untagged sap arguments/return-values.
-(define-vop (move-sap-argument)
+(define-vop (move-sap-arg)
   (:args (x :target y
            :scs (sap-reg))
         (fp :scs (any-reg)
        (if (= (tn-offset fp) esp-offset)
           (storew x fp (tn-offset y))  ; c-call
           (storew x fp (- (1+ (tn-offset y)))))))))
-(define-move-vop move-sap-argument :move-argument
+(define-move-vop move-sap-arg :move-arg
   (descriptor-reg sap-reg) (sap-reg))
 
-;;; Use standard MOVE-ARGUMENT + coercion to move an untagged sap to a
+;;; Use standard MOVE-ARG + coercion to move an untagged sap to a
 ;;; descriptor passing location.
-(define-move-vop move-argument :move-argument
+(define-move-vop move-arg :move-arg
   (sap-reg) (descriptor-reg))
 \f
 ;;;; SAP-INT and INT-SAP
   (:result-types system-area-pointer)
   (:generator 2
     (move sap vector)
-    (inst add sap (- (* vector-data-offset word-bytes) other-pointer-lowtag))))
+    (inst add
+         sap
+         (- (* vector-data-offset n-word-bytes) other-pointer-lowtag))))
+
+;;; Transforms for 64-bit SAP accessors.
+
+(deftransform sap-ref-64 ((sap offset) (* *))
+  '(logior (sap-ref-32 sap offset)
+           (ash (sap-ref-32 sap (+ offset 4)) 32)))
+
+(deftransform signed-sap-ref-64 ((sap offset) (* *))
+  '(logior (sap-ref-32 sap offset)
+           (ash (signed-sap-ref-32 sap (+ offset 4)) 32)))
+
+(deftransform %set-sap-ref-64 ((sap offset value) (* * *))
+  '(progn
+     (%set-sap-ref-32 sap offset (logand value #xffffffff))
+     (%set-sap-ref-32 sap (+ offset 4) (ash value -32))))
+
+(deftransform %set-signed-sap-ref-64 ((sap offset value) (* * *))
+  '(progn
+     (%set-sap-ref-32 sap offset (logand value #xffffffff))
+     (%set-signed-sap-ref-32 sap (+ offset 4) (ash value -32))))