X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Falpha%2Farith.lisp;h=4c3d9317e31d488fd06ade537d73c5a17db0e84a;hb=b63c4fb9b98fa8188e17ba926e150ba417a74635;hp=971f22845f6644096d20effd44b7c5a8c36b1a98;hpb=6a7ffd51f991961a59c4496bd80aaa89698231f9;p=sbcl.git diff --git a/src/compiler/alpha/arith.lisp b/src/compiler/alpha/arith.lisp index 971f228..4c3d931 100644 --- a/src/compiler/alpha/arith.lisp +++ b/src/compiler/alpha/arith.lisp @@ -389,7 +389,7 @@ (inst mulq x y r))) ;;;; Modular functions: -(define-modular-fun lognot-mod64 (x) lognot 64) +(define-modular-fun lognot-mod64 (x) lognot :unsigned 64) (define-vop (lognot-mod64/unsigned=>unsigned) (:translate lognot-mod64) (:args (x :scs (unsigned-reg))) @@ -411,26 +411,20 @@ (sb!c::give-up-ir1-transform)) '(%primitive fast-ash-left-mod64/unsigned=>unsigned integer count)) -(macrolet ((define-modular-backend (fun &optional constantp) - (collect ((forms)) - (dolist (info '((29 fixnum) (32 unsigned))) - (destructuring-bind (width regtype) info - (let ((mfun-name (intern (format nil "~A-MOD~A" fun width))) - (mvop (intern (format nil "FAST-~A-MOD~A/~A=>~A" - fun width regtype regtype))) - (mcvop (intern (format nil "FAST-~A-MOD~A-C/~A=>~A" - fun width regtype regtype))) - (vop (intern (format nil "FAST-~A/~A=>~A" - fun regtype regtype))) - (cvop (intern (format nil "FAST-~A-C/~A=>~A" - fun regtype regtype)))) - (forms `(define-modular-fun ,mfun-name (x y) ,fun ,width)) - (forms `(define-vop (,mvop ,vop) - (:translate ,mfun-name))) - (when constantp - (forms `(define-vop (,mcvop ,cvop) - (:translate ,mfun-name))))))) - `(progn ,@(forms))))) +(macrolet + ((define-modular-backend (fun &optional constantp) + (let ((mfun-name (symbolicate fun '-mod64)) + (modvop (symbolicate 'fast- fun '-mod64/unsigned=>unsigned)) + (modcvop (symbolicate 'fast- fun '-mod64-c/unsigned=>unsigned)) + (vop (symbolicate 'fast- fun '/unsigned=>unsigned)) + (cvop (symbolicate 'fast- fun '-c/unsigned=>unsigned))) + `(progn + (define-modular-fun ,mfun-name (x y) ,fun :unsigned 64) + (define-vop (,modvop ,vop) + (:translate ,mfun-name)) + ,@(when constantp + `((define-vop (,modcvop ,cvop) + (:translate ,mfun-name)))))))) (define-modular-backend + t) (define-modular-backend - t) (define-modular-backend logxor t)