- (cond ((and (constant-continuation-p offset)
- (eql (continuation-value offset) 0))
- 'sap)
- (t
- (extract-function-args sap 'sap+ 2)
- '(lambda (sap offset1 offset2)
- (sap+ sap (+ offset1 offset2))))))
-
-(macrolet ((def-frob (fun)
- `(deftransform ,fun ((sap offset) * *)
- (extract-function-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)
+ (cond ((and (constant-lvar-p offset)
+ (eql (lvar-value offset) 0))
+ 'sap)
+ (t
+ (extract-fun-args sap 'sap+ 2)
+ '(lambda (sap offset1 offset2)
+ (sap+ sap (+ offset1 offset2))))))
+
+(macrolet ((def (fun &optional setp)
+ `(deftransform ,fun ((sap offset ,@(when setp `(new-value))) * *)
+ (extract-fun-args sap 'sap+ 2)
+ `(lambda (sap offset1 offset2 ,@',(when setp `(new-value)))
+ (,',fun sap (+ offset1 offset2) ,@',(when setp `(new-value)))))))
+ (def sap-ref-8)
+ (def %set-sap-ref-8 t)
+ (def signed-sap-ref-8)
+ (def %set-signed-sap-ref-8 t)
+ (def sap-ref-16)
+ (def %set-sap-ref-16 t)
+ (def signed-sap-ref-16)
+ (def %set-signed-sap-ref-16 t)
+ (def sap-ref-32)
+ (def %set-sap-ref-32 t)
+ (def signed-sap-ref-32)
+ (def %set-signed-sap-ref-32 t)
+ (def sap-ref-64)
+ (def %set-sap-ref-64 t)
+ (def signed-sap-ref-64)
+ (def %set-signed-sap-ref-64 t)
+ (def sap-ref-sap)
+ (def %set-sap-ref-sap t)
+ (def sap-ref-single)
+ (def %set-sap-ref-single t)
+ (def sap-ref-double)
+ (def %set-sap-ref-double t)