axiom-developer
[Top][All Lists]
Advanced

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

Re: [Axiom-developer] 2.7 build


From: Stephen Wilson
Subject: Re: [Axiom-developer] 2.7 build
Date: 12 Jul 2007 13:21:54 -0400
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.4

Camm Maguire <address@hidden> writes:
[...]
> > The second problem is that the function |ICformat| apparently is
> > miscompiled, Lisp code differs only trivially from code in 2.6.8
> > build.  In particular at the beggining we have:
> > 
> > (DEFUN |ICformat| (|u|)
> >   (PROG (|v| |l'| |l1| |l|)
> >     (RETURN
> >       (SEQ (COND
> >              ((ATOM |u|) |u|)
> >              ((AND (PAIRP |u|) (EQ (QCAR |u|) '|has|))
> >               (|compHasFormat| |u|))
> >              ((OR (AND (PAIRP |u|) (EQ (QCAR |u|) 'AND)
> >                        (PROGN (SPADLET |l| (QCDR |u|)) 'T))
> >                   (AND (PAIRP |u|) (EQ (QCAR |u|) '|and|)
> >                        (PROGN (SPADLET |l| (QCDR |u|)) 'T)))
> >               (SPADLET |l|
> >                        (REMDUP (PROG (#1=#:G7955)
> 
> I take it this source is generated by some other function in axiom
> which is malfunctioning, (akin to the writing of #<compiled function
> ...> in the generated lisp sources I reported earlier).  What is this
> function?  How do I run it to produce the above output?  I take it the
> difference lies in the gensym above -- this appears clearly wrong, and
> indicates an error either in GCL's compilation of the function that
> generates this source, or a mistake in one of the patches applied in
> your tree.  Stephen, can you reproduce this?

My reading of the code does not suggest an error w.r.t the gensym.

Unfortunately this may have already been resolved were it not for
another mistake on my part.  I gave a bug report which related to this
issue but latter claimed it was a false alarm.  While collecting my
changes last night I noticed that I had inadvertently merged a local
work-around, thus masking the bug.

Many apologies for the confusion here.  Bellow follows the original
report.  Have rerun the examples with latest gclcvs, with identical
results.


Sincerely,
Steve

==-----------------------

Hello Camm,

Another issue has come up, again w.r.t the handling of logical
operations.

I hope these reports are not just pointing out known issues!  I only
wish I had the knowledge to fix them myself.


==--- test.lisp ---

(defun test (x) 
  (when (or (and (consp x) (eq (car x) 'X) t)
            (and (consp x) (eq (car x) '|x|) t))
    'OK))

==-----------------

Note that if the T's are dropped from the AND expressions, the
function behaves as expected.


steve:tmp> gcl
GCL (GNU Common Lisp)  2.7.0 ANSI    Jul  7 2007 19:13:09
Source License: LGPL(gcl,gmp,pargcl), GPL(unexec,bfd,xgcl)
Binary License:  GPL due to GPL'ed components: (XGCL READLINE BFD UNEXEC)
Modifications of this banner must retain notice of a compatible license
Dedicated to the memory of W. Schelter

Use (help) to get some basic information on how to use GCL.

Temporary directory for compiler files set to /tmp/

>(compile-file "test.lisp")

;; Compiling test.lisp.
;; End of Pass 1.  
;; End of Pass 2.  
;; OPTIMIZE levels: Safety=0 (No runtime error checking), Space=0, Speed=3, 
(Debug quality ignored)
;; Finished compiling test.o.
#P"/home/steve/tmp/test.o"
NIL
NIL

>(load "test.o")

;; Loading test.o
 ;; start address -T 0xb4acd8 ;; Finished loading test.o
80

>(test '(X))

OK

>(test '(|x|))

NIL

>(disassemble 'test)

;; Compiling /tmp/gazonk_18523_0.lsp.
;; End of Pass 1.  
;; End of Pass 2.  
;; OPTIMIZE levels: Safety=0 (No runtime error checking), Space=0, Speed=3, 
(Debug quality ignored)
;; Finished compiling /tmp/gazonk_18523_0.o.

#include "gazonk_18523_0.h"
void init_code(){do_init((void *)VV);}
/*      local entry for function TEST   */

static object LI1(V2)

object V2;
{        VMB1 VMS1 VMV1
        goto TTL;
TTL:;
        if(!(consp((V2)))){
        goto T2;}
        /*(CAR X)*/
        {object V4;
        V4= (V2);
        V3= ((V4))->c.c_car;}
        /* END (CAR X)*/
        if(!((V3)==(((object)VV[0])))){
        goto T2;}
        {object V5 = ((object)VV[1]);VMR1
        (V5);}
        goto T2;
T2:;
        {object V6 = Cnil;VMR1
        (V6);}
        return Cnil;
}
#(#(X OK
    (%INIT
     . #((LET ((*DISABLE-RECOMPILE* T))
           (MFSFUN 'TEST 0 1 0)
           (ADD-HASH 'TEST '((T) SYMBOL)
               '((CAR (LIST) T) (EQ (T T) BOOLEAN) (CONSP (T) T))
COMMON-LISP-USER
LISPLAMBDA!
           ,DECLA,OPTIMIZ,SAFETY        ,BLOCK
                                              TEST      ,IF     ,OR
!,AN!,CONSP-    !,E!,CAR!,QUOTE-!,T
/-      12
          x,PROG2
                 OK '/tmp/gazonk_18523_0.lsp))
         (DO-RECOMPILE)))))
static object LI1();
#define VMB1 object  V3;
#define VMS1
#define VMV1
#define VMR1(VMT1) return(VMT1);
#define VM1 0
static void * VVi[3]={
#define Cdata VV[2]
(void *)(LI1)
};
#define VV (VVi)

/tmp/gazonk_18523_0.o:     file format elf32-i386

Disassembly of section .text:

00000000 <init_code>:
   0:   68 00 00 00 00          push   $0x0
   5:   e8 fc ff ff ff          call   6 <init_code+0x6>
   a:   58                      pop    %eax
   b:   c3                      ret    

0000000c <LI1>:
   c:   8b 54 24 04             mov    0x4(%esp),%edx
  10:   81 fa 00 00 00 00       cmp    $0x0,%edx
  16:   74 25                   je     3d <LI1+0x31>
  18:   81 fa ff ff ff bf       cmp    $0xbfffffff,%edx
  1e:   77 1d                   ja     3d <LI1+0x31>
  20:   f6 02 01                testb  $0x1,(%edx)
  23:   74 08                   je     2d <LI1+0x21>
  25:   81 3a ff ff ff bf       cmpl   $0xbfffffff,(%edx)
  2b:   76 10                   jbe    3d <LI1+0x31>
  2d:   a1 00 00 00 00          mov    0x0,%eax
  32:   39 42 04                cmp    %eax,0x4(%edx)
  35:   75 06                   jne    3d <LI1+0x31>
  37:   a1 04 00 00 00          mov    0x4,%eax
  3c:   c3                      ret    
  3d:   b8 00 00 00 00          mov    $0x0,%eax
  42:   c3                      ret    
NIL

>(defun test (x) 
    (when (or (and (consp x) (eq (car x) 'X))
              (and (consp x) (eq (car x) '|x|)))
      'OK))

TEST

>(compile 'test)

;; Compiling /tmp/gazonk_18523_0.lsp.
;; End of Pass 1.  
;; End of Pass 2.  
;; OPTIMIZE levels: Safety=0 (No runtime error checking), Space=0, Speed=3, 
(Debug quality ignored)
;; Finished compiling /tmp/gazonk_18523_0.o.
;; Loading /tmp/gazonk_18523_0.o
 ;; start address -T 0xb4bd68 ;; Finished loading /tmp/gazonk_18523_0.o
#<compiled-function TEST>
NIL
NIL

>(test '(X))

OK

>(test '(|x|))

OK





reply via email to

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