gcl-devel
[Top][All Lists]
Advanced

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

Re: [Gcl-devel] Error compiling functions w/ (declare (integer x)) prese


From: John Jorgensen
Subject: Re: [Gcl-devel] Error compiling functions w/ (declare (integer x)) present
Date: Fri, 7 Jun 2002 18:41:08 -0400 (EDT)

Well, CLX gets further in it's compile, but now with the example in the
bignum docs, I get the error;
=========================
>(compile 'pi-inv)

Compiling gazonk0.lsp.
End of Pass 1.  
End of Pass 2.  
gazonk0.c: In function `L1':
gazonk0.c:4139: `save_avma' undeclared (first use in this function)
gazonk0.c:4139: (Each undeclared identifier is reported only once
gazonk0.c:4139: for each function it appears in.)
gazonk0.c:4140: `restore_avma' undeclared (first use in this function)

Correctable error: (SYSTEM "(cd . ;gcc -pipe -fwritable-strings
-DVOL=volatile -I/home/jjorgens/gcl/o -fsigned-char  -O -c -I. gazonk0.c
-w)") returned a non-zero value 0.
Signalled by UNLESS.
If continued: Continues anyway.
Broken at CERROR.  Type :H for Help.
>>
=========================
Whatever the heck a avma is... CLX stops with the same type of error
(save_avma undeclared).

J*

-------------------
On 7 Jun 2002, Camm Maguire wrote:

> Greetings!  OK, I've committed a fix for this.  Please check it out.
> And R.Toy, if you're listening, you should be able to uncomment
> (declare (integer... too.
> 
> The solution I've implemented doesn't seem very optimal, but rather
> uses the existing integer/bignum handling macros that were in place
> for pari support and the original custom mp support.  The lisp
> compiler spits out these C macros, and I'm far less comfortable
> modifying the lisp compiler code.  
> 
> I thought declarations were supposed to help the compiler.  But all it
> seems that they accomplish is the copying of integer data back and
> forth needlessly.
> 
> Consider:
> 
> (defun max0 (x y &rest z)
>   (declare (integer x y))
>   (apply #'max x y z))
> 
> Here is the C code without the declaration :
> 
>       {object V1;
>       object V2;
>       object V3;
>       V1=(base[0]);
>       V2=(base[1]);
>       vs_base=vs_base+2;
>       vs_top[0]=Cnil;
>       {object *p=vs_top;
>        for(;p>vs_base;p--)p[-1]=MMcons(p[-1],p[0]);}
>       V3=(base[2]);
>       vs_top=sup;
>       base[3]= (V1);
>       base[4]= (V2);
>       {object V4;
>       V4= (V3);
>        vs_top=base+5;
>        while(V4!=Cnil)
>        {vs_push((V4)->c.c_car);V4=(V4)->c.c_cdr;}
>       vs_base=base+3;}
>       Lmax();
>       return;
>       }
> 
> 
> 
> And here is the code with the declaration:
> 
> 
> 
>       {IDECL(GEN V1,V1space,V1alloc);
>       IDECL(GEN V2,V2space,V2alloc);
>       object V3;
>       SETQ_IO(V1,V1alloc,(base[0]));
>       SETQ_IO(V2,V2alloc,(base[1]));
>       vs_base=vs_base+2;
>       vs_top[0]=Cnil;
>       {object *p=vs_top;
>        for(;p>vs_base;p--)p[-1]=MMcons(p[-1],p[0]);}
>       V3=(base[2]);
>       vs_top=sup;
>       base[3]= make_integer(V1);
>       base[4]= make_integer(V2);
>       {object V4;
>       V4= (V3);
>        vs_top=base+5;
>        while(V4!=Cnil)
>        {vs_push((V4)->c.c_car);V4=(V4)->c.c_cdr;}
>       vs_base=base+3;}
>       Lmax();
>       return;
>        }
> 
> 
> What do we gain here, considering that we have to go back to objects
> anyway when calling Lmax?
> 
> Take care,
> 
> 
> John Jorgensen <address@hidden> writes:
> 
> > When I try to compile functions that declare integers, I get errors. They
> > interpret just fine, but they don't compile. here is an example;
> > ====================================
> > (defun pi-inv (bits &aux (m 0))
> >   (declare (integer bits m))
> >   (let* ((n (+ bits (integer-length bits) 11))
> >          (tt (truncate (ash 1 n) 882))
> >          (d (* 4 882 882))
> >          (s 0))
> >     (declare (integer s d tt n))
> >     (do ((i 2 (+ i 2))
> >          (j 1123 (+ j 21460)))
> >         ((zerop tt) (cons s (- (+ n 2))))
> >       (declare (integer i j))
> >         (setq s (+ s (* j tt))
> >               m (- (* (- i 1) (- (* 2 i) 1) (- (* 2 i) 3)))
> >               tt (truncate (* m tt) (* d (the integer (expt i 3))))))))
> > ==========================
> > 
> > Right from the bugnum examples in the GCL documentation. running
> > (compile 'pi-inv) produces the following errors;
> > ==========================
> > >(compile 'pi-inv)
> > 
> > Compiling gazonk1.lsp.
> > End of Pass 1.  
> > End of Pass 2.  
> > gazonk1.c: In function `L1':
> > gazonk1.c:3002: `GEN' undeclared (first use in this function)
> > gazonk1.c:3002: (Each undeclared identifier is reported only once
> > gazonk1.c:3002: for each function it appears in.)
> > gazonk1.c:3002: parse error before `V1'
> > gazonk1.c:3004: `V1' undeclared (first use in this function)
> > gazonk1.c:3004: `V1alloc' undeclared (first use in this function)
> > gazonk1.c:3007: parse error before `register'
> > gazonk1.c:3008: `V2' undeclared (first use in this function)
> > gazonk1.c:3008: `V2alloc' undeclared (first use in this function)
> > gazonk1.c:3009: parse error before `register'
> > gazonk1.c:3010: parse error before `register'
> > gazonk1.c:3011: parse error before `V5'
> > gazonk1.c:3012: parse error before `register'
> > gazonk1.c:3023: `save_avma' undeclared (first use in this function)
> > gazonk1.c:3024: `V3' undeclared (first use in this function)
> > gazonk1.c:3024: `V3alloc' undeclared (first use in this function)
> > gazonk1.c:3024: `restore_avma' undeclared (first use in this function)
> > gazonk1.c:3036: `V4' undeclared (first use in this function)
> > gazonk1.c:3036: `V4alloc' undeclared (first use in this function)
> > gazonk1.c:3044: `V5' undeclared (first use in this function)
> > gazonk1.c:3044: `V5alloc' undeclared (first use in this function)
> > gazonk1.c:3045: `V6' undeclared (first use in this function)
> > gazonk1.c:3045: `V6alloc' undeclared (first use in this function)
> > gazonk1.c:3046: parse error before `register'
> > gazonk1.c:3047: parse error before `register'
> > gazonk1.c:3048: `V7' undeclared (first use in this function)
> > gazonk1.c:3048: `V7alloc' undeclared (first use in this function)
> > gazonk1.c:3049: `V8' undeclared (first use in this function)
> > gazonk1.c:3049: `V8alloc' undeclared (first use in this function)
> > 
> > Correctable error: (SYSTEM "(cd . ;gcc -pipe -fwritable-strings
> > -DVOL=volatile -I/opt/dl/gcl/o -fsigned-char  -O -c -I. gazonk1.c
> > -w)") returned a non-zero value 0.
> > Signalled by UNLESS.
> > If continued: Continues anyway.
> > Broken at CERROR.  Type :H for Help.
> > >>
> > ============================
> > 
> > If I remove the declares, it compiles just fine. It looks like this is
> > what is keeping CLX from compiling. GEN looks like it's supposed to be a
> > long, but I'm not sure.
> > 
> > J*
> > 
> > 
> > _______________________________________________
> > Gcl-devel mailing list
> > address@hidden
> > http://mail.gnu.org/mailman/listinfo/gcl-devel
> > 
> > 
> 
> 




reply via email to

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