[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Axiom-developer] RE: algebra Makefiles with explicit dependencies,

From: Bill Page
Subject: RE: [Axiom-developer] RE: algebra Makefiles with explicit dependencies, bootstrap, fixed-points etc.
Date: Mon, 17 Jan 2005 10:43:50 -0500

On Sunday, January 16, 2005 4:04 PM Stephen Wilson wrote:

> ...
> The differences in the generated lisp are w.r.t QSADD1, in compiler
> generated code implementing a for loop. The differences look like:
>     - (LETT |i| (+ |i| 1)
>     + (LETT |i| (QSADD1 |i|)
> In primitiveElement, we use a for loop on `i in 10..'. i is passed to
> symmetricRemainder, defined in IntegerNumberSystem with signature:
>     primitiveElement(%,%).
> The call site takes the form primitiveElement(Integer, i), so we would
> expect that i should have type integer. Looking at the generated lisp
> for integer we see that QSADD1 is not on the property list for any
> function, but it is on the property list for SINT's `inc' function.
> Note the definition of QSADD1 in vmlisp.lisp:
>       (defmacro qsadd1 (x) `(the fixnum (1+ (the fixnum ,x))))
> How does the compiler know on the second-iteration build that `i' will
> always be a fixnum? Though probably correct 99% of the time, the
> second-iteration code in this case is incorrect.

I don't understand the mechanism that makes this substitution but
in what sense is it incorrect. Can you give an example that might
apply the other 1% of the time? Do you mean because the magnitude
could exceed fixnum?

Bill Page.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]