X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fsaptran.lisp;h=1d6d4ee37f761029c4f6c520332b1e1f3661151f;hb=7118efc35a64ece0d37d801f9f59e886402b0d22;hp=2f17e65ce87875e730ce2b459b9550fdfeedb044;hpb=4ad052044a22f502d9dc6faf6dfe01f3bab84262;p=sbcl.git diff --git a/src/compiler/saptran.lisp b/src/compiler/saptran.lisp index 2f17e65..1d6d4ee 100644 --- a/src/compiler/saptran.lisp +++ b/src/compiler/saptran.lisp @@ -48,10 +48,11 @@ (unsigned-byte 32) ()) -#!+alpha +;; FIXME These are supported natively on alpha and using deftransforms +;; in compiler/x86/sap.lisp, which in OAO$n$ style need copying to +;; other 32 bit systems (defknown sap-ref-64 (system-area-pointer fixnum) (unsigned-byte 64) (flushable)) -#!+alpha (defknown %set-sap-ref-64 (system-area-pointer fixnum (unsigned-byte 64)) (unsigned-byte 64) ()) @@ -74,10 +75,8 @@ (signed-byte 32) ()) -#!+alpha (defknown signed-sap-ref-64 (system-area-pointer fixnum) (signed-byte 64) (flushable)) -#!+alpha (defknown %set-signed-sap-ref-64 (system-area-pointer fixnum (signed-byte 64)) (signed-byte 64) ()) @@ -109,52 +108,56 @@ ;;;; transforms for converting sap relation operators -(macrolet ((def-frob (sap-fun int-fun) +(macrolet ((def (sap-fun int-fun) `(deftransform ,sap-fun ((x y) * *) `(,',int-fun (sap-int x) (sap-int y))))) - (def-frob sap< <) - (def-frob sap<= <=) - (def-frob sap= =) - (def-frob sap>= >=) - (def-frob sap> >)) + (def sap< <) + (def sap<= <=) + (def sap= =) + (def sap>= >=) + (def sap> >)) ;;;; transforms for optimizing SAP+ (deftransform sap+ ((sap offset)) - (cond ((and (constant-continuation-p offset) - (eql (continuation-value offset) 0)) + (cond ((and (constant-lvar-p offset) + (eql (lvar-value offset) 0)) 'sap) (t - (extract-function-args sap 'sap+ 2) + (extract-fun-args sap 'sap+ 2) '(lambda (sap offset1 offset2) (sap+ sap (+ offset1 offset2)))))) -(macrolet ((def-frob (fun) +(macrolet ((def (fun) `(deftransform ,fun ((sap offset) * *) - (extract-function-args sap 'sap+ 2) + (extract-fun-args sap 'sap+ 2) `(lambda (sap offset1 offset2) (,',fun sap (+ offset1 offset2)))))) - (def-frob sap-ref-8) - (def-frob %set-sap-ref-8) - (def-frob signed-sap-ref-8) - (def-frob %set-signed-sap-ref-8) - (def-frob sap-ref-16) - (def-frob %set-sap-ref-16) - (def-frob signed-sap-ref-16) - (def-frob %set-signed-sap-ref-16) - (def-frob sap-ref-32) - (def-frob %set-sap-ref-32) - (def-frob signed-sap-ref-32) - (def-frob %set-signed-sap-ref-32) - (def-frob sap-ref-sap) - (def-frob %set-sap-ref-sap) - (def-frob sap-ref-single) - (def-frob %set-sap-ref-single) - (def-frob sap-ref-double) - (def-frob %set-sap-ref-double) + (def sap-ref-8) + (def %set-sap-ref-8) + (def signed-sap-ref-8) + (def %set-signed-sap-ref-8) + (def sap-ref-16) + (def %set-sap-ref-16) + (def signed-sap-ref-16) + (def %set-signed-sap-ref-16) + (def sap-ref-32) + (def %set-sap-ref-32) + (def signed-sap-ref-32) + (def %set-signed-sap-ref-32) + (def sap-ref-64) + (def %set-sap-ref-64) + (def signed-sap-ref-64) + (def %set-signed-sap-ref-64) + (def sap-ref-sap) + (def %set-sap-ref-sap) + (def sap-ref-single) + (def %set-sap-ref-single) + (def sap-ref-double) + (def %set-sap-ref-double) ;; The original CMUCL code had #!+(and x86 long-float) for this first one, ;; but only #!+long-float for the second. This was redundant, since the ;; LONG-FLOAT target feature only exists on X86. So we removed the ;; redundancy. --njf 2002-01-08 - #!+long-float (def-frob sap-ref-long) - #!+long-float (def-frob %set-sap-ref-long)) + #!+long-float (def sap-ref-long) + #!+long-float (def %set-sap-ref-long))