Greetings!  I will try over the succeeding days to describe some of the
new gcl internals for posterity and those interested.

#'compiler::watch takes as its single argument a variable or function
 name, or a name of several predefined keys.  Important steps in the
 compilation process are then traced.  #'compiler::unwatch reverses the
 trace, and when given no arguments, reverses all traces.  Some
 predefined keys currently are (all symbols in the compiler package):

 tagbody-iteration
 tagbody-label
 branch-elimination
 block-set
 init-type
 type
 type-propagation
 type-restriction
 type-inference
 inline
 inline-abort
 notinline
 local
 provisional
 var-trim
 var-ref
 var-bind
 var-store
 ref
 recursion
 tail-recursion
 return-type
 nil-arg
 nil-return
 signatures

 This list will be refined with time.  Example:

=============================================================================
GCL (GNU Common Lisp)  2.7.0 ANSI    Dec 20 2023 11:13:47
Source License: LGPL(gcl,gmp,pargcl), GPL(unexec,bfd,xgcl)
Binary License:  GPL due to GPL'ed components: (XGCL 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/

>(in-package :compiler)

#<"COMPILER" package>

COMPILER>(setq *disassemble-objdump* nil)

NIL

COMPILER>(disassemble '(lambda (x) (when (consp x) (when (listp x) 'f))))

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

#include "gazonk_729566_0.h"
void init_code(){do_init((void *)VV);}
/*      local entry for function COMPILER::CMP-ANON     */

static object LI1__CMP_ANON___gazonk_729566_0(object V2)
{        VMB1 VMS1 VMV1
        if(((V2))==Cnil){
        goto T4;
        }
        V3= tp2(V2);
        if(!((V3)==(0))){
        goto T7;
        }
        goto T3;
        
        goto T7;
T7:;
        goto T1;
        
        goto T4;
T4:;
        goto T1;
        
        goto T3;
T3:;
        {object V4 = ((object)VV[0]);
        VMR1(V4);}
        goto T1;
T1:;
        {object V5 = Cnil;
        VMR1(V5);}
}
(2 (MAPC 'EVAL *COMPILER-COMPILE-DATA*))
static object LI1__CMP_ANON___gazonk_729566_0(object V2)
;
#define VMB1  int8_t  V3;
#define VMS1
#define VMV1
#define VMRV1(a_,b_) return(a_);
#define VMR1(a_) VMRV1(a_,0);
#define VM1 0
static void * VVi[2]={
#define Cdata VV[1]
(void *)(LI1__CMP_ANON___gazonk_729566_0)
};
#define VV (VVi)
NIL

COMPILER>(watch 'branch-elimination)

(BRANCH-ELIMINATION)

COMPILER>(disassemble '(lambda (x) (when (consp x) (when (listp x) 'f))))

;; Compiling /tmp/gazonk_729566_0.lsp.
; (DEFUN CMP-ANON) is being compiled.
;   inlining (LISTP #<TAG TTL426 27BE4C0> ...)
;; Note: Test form (= (TP2 SYSTEM::X) 0) is T,
;; eliminating branch (INFER-TP
                       SYSTEM::X
                       
#*11111111111111111111111111111111111111111111110011111111111111111111111111111111111111111111111111111111111111111111111110111111
                       NIL)

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

#include "gazonk_729566_0.h"
void init_code(){do_init((void *)VV);}
/*      local entry for function COMPILER::CMP-ANON     */

static object LI1__CMP_ANON___gazonk_729566_0(object V2)
{        VMB1 VMS1 VMV1
        if(((V2))==Cnil){
        goto T4;
        }
        V3= tp2(V2);
        if(!((V3)==(0))){
        goto T7;
        }
        goto T3;
        
        goto T7;
T7:;
        goto T1;
        
        goto T4;
T4:;
        goto T1;
        
        goto T3;
T3:;
        {object V4 = ((object)VV[0]);
        VMR1(V4);}
        goto T1;
T1:;
        {object V5 = Cnil;
        VMR1(V5);}
}
(2 (MAPC 'EVAL *COMPILER-COMPILE-DATA*))
static object LI1__CMP_ANON___gazonk_729566_0(object V2)
;
#define VMB1  int8_t  V3;
#define VMS1
#define VMV1
#define VMRV1(a_,b_) return(a_);
#define VMR1(a_) VMRV1(a_,0);
#define VM1 0
static void * VVi[2]={
#define Cdata VV[1]
(void *)(LI1__CMP_ANON___gazonk_729566_0)
};
#define VV (VVi)
NIL

COMPILER>
=============================================================================

Take care,
-- 
Camm Maguire                                        c...@maguirefamily.org
==========================================================================
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah

Reply via email to