From: Alexey D. <ade...@co...> - 2003-09-22 10:04:55
|
Christophe Rhodes <cs...@ca...> writes: > Alexey Dejneka <ade...@co...> writes: > > > The last case cuts an argument to BIGNUM-ELEMENT-TYPE. Of course, it > > can be replaced with (logior (%bignum-ref x 0) (ash (%bignum-ref x 1) > > 32)), but does Alpha backend support 64-bit arguments? > > Maybe I'm missing something... > > Would it not be easier to do e.g. > (defun +-mod32 (x y) > (logand (+ x y) #.(1- (ash 1 width)))) > and similar for the other modular functions? It will not work; it will be transformed to (defun +-mod32 (x y) (+-mod32 (+ x y))) which results in a full recursive call of +-MOD32 (because there is no VOP without restrictions on argument types). If you add (DECLARE (NOTINLINE +)), it will probably work, but it will be less efficient than the current version. But you can replace ASSERT with IF, and if the condition fails use your version. -- Regards, Alexey Dejneka "Alas, the spheres of truth are less transparent than those of illusion." -- L.E.J. Brouwer |